首页 / C# / C# 开发2048小游戏
C# 开发2048小游戏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 开发2048小游戏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含29847字,纯文字阅读大概需要43分钟。
内容图文
这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的童鞋完成了。
更改建议:
a.当数字超过四位数时,显示的时候有部分被它的容器TextBox遮挡了,能不能把显示的数值变小点?答案是可以的。代码里有一段通过矩阵数据填充TextBox值的操作,可以在填充时,判断下数值长度,然后修改TextBox的文字大小。
b.玩游戏的时候,使用方向键移动时,焦点可能没有锁定在自定义控件的画布上,能不能使用方向键移动时,锁定画布?答案是可以的,不敢说出来,因为很简单,说出来就不值得提出这个问题让Reader来做了(哈哈)。
c.还有几条,真的记不住了,唉,老亦。
其实不难,就是多了点,杂了点,喜欢的可以拉走做毕业设计用,如果要说这里面有什么值得看的地方,我觉得应该没有吧,毕竟做的仓促,也没好好的修改。
1.应用程序的主入口点:文件名Program.cs,这个简单,可以略过
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.IO; namespace _2048 { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } staticvoid Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "Exception.log", DateTime.Now.ToString() + "\t" + e.Exception.Message + Environment.NewLine); } staticvoid CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "Exception.log", DateTime.Now.ToString() + "\t" + e.ExceptionObject.ToString() + Environment.NewLine); } } }
2.用到的数据模型:文件名Unit.cs,这个简单,可以略过
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace _2048 { public class Unit { public Unit() { } public Unit(int num, bool bMerge) { this._num = num; this._bMerge = bMerge; } privateint _num = 0; publicint Num { get { return _num; } set { _num = value; } } privatebool _bMerge = false; publicbool BMerge { get { return _bMerge; } set { _bMerge = value; } } //private int _x = 0; //public int X //{ // get { return _x; } // set { _x = value; } //} //private int _y = 0; //public int Y //{ // get { return _y; } // set { _y = value; } //} } }
3.自定义控件和算法(设计器和后台文件已合并):文件名GridControl.cs,整个程序的核心内容都在这个文件里,包括2048游戏算法、自定义控件的伸缩、方向键移动控制等等吧,后半部分不用看了,设计器自动生成的,不可或缺,没什么嚼劲。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace _2048 { public partial class GridControl : UserControl { /* * 判断结束的必要条件: * 无论如何移动(上、下、左、右),矩阵中没有空着的位置时,结束 * * *1. 初始化参数,初始化数量3 *2. 每次移动,相同数字合并加分 *3. 每次移动,在移动后的随机空格位置处产生一个新数 */ private int _x = 0; publicint X { get { return _x; } set { _x = value; CreateTextBox(); } } privateint _y = 0; publicint Y { get { return _y; } set { _y = value; CreateTextBox(); } } private Unit[][] _matrix = null; private Random rand = new Random(DateTime.Now.Millisecond); privateint _score = 0; publicint Score { get { return _score; } set { _score = value; } } public GridControl() { InitializeComponent(); } publicvoid InitControl() { /*初始化矩阵图,以下三个方法的顺序不能颠倒*/this.InitMatrix(); this.InitParamter(); this.InputData(); } #region MyRegion privatevoid CreateTextBox() { this.flowLayoutPanel1.Controls.Clear(); this.Size = new System.Drawing.Size(78 * _x + 4, 78 * _y + 4); for (int j = 0; j < _y; j++) { for (int i = 0; i < _x; i++) { TextBox textBox = new TextBox(); textBox.BackColor = System.Drawing.Color.White; textBox.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); textBox.Location = new System.Drawing.Point(6, 6); textBox.Name = "textBox" + i.ToString() + j.ToString(); textBox.ReadOnly = true; textBox.Size = new System.Drawing.Size(71, 71); textBox.TabIndex = 0; textBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.flowLayoutPanel1.Controls.Add(textBox); } } } ///<summary>/// 初始化矩阵 ///</summary>privatevoid InitMatrix() { _matrix = new Unit[_x][]; for (int i = 0; i < _x; i++) { _matrix[i] = new Unit[_y]; for (int j = 0; j < _y; j++) { _matrix[i][j] = new Unit(); } } this._score = 0; } ///<summary>/// 初始化参数 ///</summary>privatevoid InitParamter() { //创建三个初始参数for (int i = 0; i < 3; i++) { CreateOneNum(); } } privateint CountEmpty() { int iReturn = 0; for (int i = 0; i < _x; i++) { for (int j = 0; j < _y; j++) { if (_matrix[i][j].Num == 0) iReturn++; } } return iReturn; } ///<summary>/// 根据矩阵表填充显示数据 ///</summary>privatevoid InputData() { for (int i = 0; i < _x; i++) { for (int j = 0; j < _y; j++) { string name = "textBox" + i.ToString() + j.ToString(); Control[] ctls = this.flowLayoutPanel1.Controls.Find(name, false); if (ctls != null) { switch (_matrix[i][j].Num) { default: case0: { ctls[0].Text = string.Empty; ctls[0].BackColor = Color.White; } break; case2: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.BurlyWood; } break; case4: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DeepPink; } break; case8: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.BlueViolet; } break; case16: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.Chartreuse; } break; case32: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.Crimson; } break; case64: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DarkGray; } break; case128: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DarkOliveGreen; } break; case256: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DarkSalmon; } break; case512: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DarkSlateGray; } break; case1024: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.GreenYellow; } break; case2048: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.DodgerBlue; } break; case4096: { ctls[0].Text = _matrix[i][j].Num.ToString(); ctls[0].BackColor = Color.Black; } break; } } } } } ///<summary>/// 游戏是否不能进行 ///</summary>///<returns>是否能进行</returns>privatebool CheckGameOver() { int countEmpty = CountEmpty(); if (countEmpty == 0) { for (int i = 0; i < _x; i++) { Unit[] arr = new Unit[_y]; for (int j = 0; j < _y; j++) arr[j] = new Unit(_matrix[i][j].Num, false); if (Result(ref arr, true)) returntrue; } for (int i = 0; i < _x; i++) { Unit[] arr = new Unit[_y]; for (int j = _y - 1; j >= 0; j--) arr[_y - 1 - j] = new Unit(_matrix[i][j].Num, false); if (Result(ref arr, true)) returntrue; } for (int i = 0; i < _y; i++) { Unit[] arr = new Unit[_x]; for (int j = 0; j < _x; j++) arr[j] = new Unit(_matrix[j][i].Num, false); if (Result(ref arr, true)) returntrue; } for (int i = 0; i < _y; i++) { Unit[] arr = new Unit[_x]; for (int j = _x - 1; j >= 0; j--) arr[_x - 1 - j] = new Unit(_matrix[j][i].Num, false); if (Result(ref arr, true)) returntrue; } returnfalse; } returntrue; } privatevoid CreateOneNum() { int countEmpty = CountEmpty(); int pos = rand.Next(countEmpty); int count = 0; for (int i = 0; i < _x; i++) { for (int j = 0; j < _y; j++) { if (_matrix[i][j].Num == 0) { if (count == pos) { int newNum = 0; if (rand.Next(100) < 80) newNum = 2; else newNum = 4; _matrix[i][j].Num = newNum; return; } count++; } } } } ///<summary>/// 核心算法 ///</summary>///<param name="arr"></param>///<returns></returns>privatebool Result(ref Unit[] arr, bool istest) { bool bReturn = false; while (true) { //是否发生移动bool bMove = false; //前一个单元 Unit unit = arr[0]; for (int i = 1; i < arr.Length; i++) { //如果前面位置为空,当前位置不为空,把当前位置移入前面位置if (unit.Num == 0 && arr[i].Num > 0) { //移动到前一个单元 unit.Num = arr[i].Num; unit.BMerge = arr[i].BMerge; //当前单元清空 arr[i].Num = 0; arr[i].BMerge = false; //移动了才能进入循环if (!bMove) { bMove = true; if (!bReturn) bReturn = true; } } //如果前面不为空,当前不为空,前面和当前的数字相同并且都没有进行过合并elseif (unit.Num > 0 && arr[i].Num > 0 && !unit.BMerge && !arr[i].BMerge && unit.Num == arr[i].Num) { //前一个单元合并操作 unit.Num = unit.Num * 2; unit.BMerge = true; if (!istest) _score += unit.Num; //当前单元清空 arr[i].Num = 0; arr[i].BMerge = false; //移动了才能进入循环if (!bMove) { bMove = true; if (!bReturn) bReturn = true; } } unit = arr[i]; } if (!bMove) break; } return bReturn; } #endregioninternalvoid MoveUp() { bool bMove = false; for (int i = 0; i < _x; i++) { Unit[] arr = new Unit[_y]; for (int j = 0; j < _y; j++) { arr[j] = _matrix[i][j]; arr[j].BMerge = false; } if (Result(ref arr, false) && !bMove) bMove = true; } if (bMove) { //创建一个新数 CreateOneNum(); } //显示 InputData(); if (!CheckGameOver()) MessageBox.Show(" Score: " + _score + "\r\n Game Over!!!"); } internalvoid MoveDown() { bool bMove = false; for (int i = 0; i < _x; i++) { Unit[] arr = new Unit[_y]; for (int j = _y - 1; j >= 0; j--) { arr[_y - 1 - j] = _matrix[i][j]; arr[_y - 1 - j].BMerge = false; } if (Result(ref arr, false) && !bMove) bMove = true; } if (bMove) { //创建一个新数 CreateOneNum(); } //显示 InputData(); if (!CheckGameOver()) MessageBox.Show(" Score: " + _score + "\r\n Game Over!!!"); } internalvoid MoveLeft() { bool bMove = false; for (int i = 0; i < _y; i++) { Unit[] arr = new Unit[_x]; for (int j = 0; j < _x; j++) { arr[j] = _matrix[j][i]; arr[j].BMerge = false; } if (Result(ref arr, false) && !bMove) bMove = true; } if (bMove) { //创建一个新数 CreateOneNum(); } //显示 InputData(); if (!CheckGameOver()) MessageBox.Show(" Score: " + _score + "\r\n Game Over!!!"); } internalvoid MoveRight() { bool bMove = false; for (int i = 0; i < _y; i++) { Unit[] arr = new Unit[_x]; for (int j = _x - 1; j >= 0; j--) { arr[_x - 1 - j] = _matrix[j][i]; arr[_x - 1 - j].BMerge = false; } if (Result(ref arr, false) && !bMove) bMove = true; } if (bMove) { //创建一个新数 CreateOneNum(); } //显示 InputData(); if (!CheckGameOver()) MessageBox.Show(" Score: " + _score + "\r\n Game Over!!!"); } internalvoid Back() { } private System.ComponentModel.IContainer components = null; protectedoverridevoid Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } privatevoid InitializeComponent() { this.textBox00 = new System.Windows.Forms.TextBox(); this.textBox10 = new System.Windows.Forms.TextBox(); this.textBox20 = new System.Windows.Forms.TextBox(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.textBox30 = new System.Windows.Forms.TextBox(); this.textBox01 = new System.Windows.Forms.TextBox(); this.textBox11 = new System.Windows.Forms.TextBox(); this.textBox21 = new System.Windows.Forms.TextBox(); this.textBox31 = new System.Windows.Forms.TextBox(); this.textBox02 = new System.Windows.Forms.TextBox(); this.textBox12 = new System.Windows.Forms.TextBox(); this.textBox22 = new System.Windows.Forms.TextBox(); this.textBox32 = new System.Windows.Forms.TextBox(); this.textBox03 = new System.Windows.Forms.TextBox(); this.textBox13 = new System.Windows.Forms.TextBox(); this.textBox23 = new System.Windows.Forms.TextBox(); this.textBox33 = new System.Windows.Forms.TextBox(); this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); //// textBox00 //this.textBox00.BackColor = System.Drawing.Color.White; this.textBox00.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox00.Location = new System.Drawing.Point(6, 6); this.textBox00.Name = "textBox00"; this.textBox00.ReadOnly = true; this.textBox00.Size = new System.Drawing.Size(71, 71); this.textBox00.TabIndex = 0; this.textBox00.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox10 //this.textBox10.BackColor = System.Drawing.Color.White; this.textBox10.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox10.Location = new System.Drawing.Point(83, 6); this.textBox10.Name = "textBox10"; this.textBox10.ReadOnly = true; this.textBox10.Size = new System.Drawing.Size(71, 71); this.textBox10.TabIndex = 3; this.textBox10.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox20 //this.textBox20.BackColor = System.Drawing.Color.White; this.textBox20.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox20.Location = new System.Drawing.Point(160, 6); this.textBox20.Name = "textBox20"; this.textBox20.ReadOnly = true; this.textBox20.Size = new System.Drawing.Size(71, 71); this.textBox20.TabIndex = 4; this.textBox20.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// flowLayoutPanel1 //this.flowLayoutPanel1.Controls.Add(this.textBox00); this.flowLayoutPanel1.Controls.Add(this.textBox10); this.flowLayoutPanel1.Controls.Add(this.textBox20); this.flowLayoutPanel1.Controls.Add(this.textBox30); this.flowLayoutPanel1.Controls.Add(this.textBox01); this.flowLayoutPanel1.Controls.Add(this.textBox11); this.flowLayoutPanel1.Controls.Add(this.textBox21); this.flowLayoutPanel1.Controls.Add(this.textBox31); this.flowLayoutPanel1.Controls.Add(this.textBox02); this.flowLayoutPanel1.Controls.Add(this.textBox12); this.flowLayoutPanel1.Controls.Add(this.textBox22); this.flowLayoutPanel1.Controls.Add(this.textBox32); this.flowLayoutPanel1.Controls.Add(this.textBox03); this.flowLayoutPanel1.Controls.Add(this.textBox13); this.flowLayoutPanel1.Controls.Add(this.textBox23); this.flowLayoutPanel1.Controls.Add(this.textBox33); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(3); this.flowLayoutPanel1.Size = new System.Drawing.Size(315, 316); this.flowLayoutPanel1.TabIndex = 9; //// textBox30 //this.textBox30.BackColor = System.Drawing.Color.White; this.textBox30.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox30.Location = new System.Drawing.Point(237, 6); this.textBox30.Name = "textBox30"; this.textBox30.ReadOnly = true; this.textBox30.Size = new System.Drawing.Size(71, 71); this.textBox30.TabIndex = 5; this.textBox30.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox01 //this.textBox01.BackColor = System.Drawing.Color.White; this.textBox01.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox01.Location = new System.Drawing.Point(6, 83); this.textBox01.Name = "textBox01"; this.textBox01.ReadOnly = true; this.textBox01.Size = new System.Drawing.Size(71, 71); this.textBox01.TabIndex = 6; this.textBox01.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox11 //this.textBox11.BackColor = System.Drawing.Color.White; this.textBox11.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox11.Location = new System.Drawing.Point(83, 83); this.textBox11.Name = "textBox11"; this.textBox11.ReadOnly = true; this.textBox11.Size = new System.Drawing.Size(71, 71); this.textBox11.TabIndex = 7; this.textBox11.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox21 //this.textBox21.BackColor = System.Drawing.Color.White; this.textBox21.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox21.Location = new System.Drawing.Point(160, 83); this.textBox21.Name = "textBox21"; this.textBox21.ReadOnly = true; this.textBox21.Size = new System.Drawing.Size(71, 71); this.textBox21.TabIndex = 8; this.textBox21.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox31 //this.textBox31.BackColor = System.Drawing.Color.White; this.textBox31.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox31.Location = new System.Drawing.Point(237, 83); this.textBox31.Name = "textBox31"; this.textBox31.ReadOnly = true; this.textBox31.Size = new System.Drawing.Size(71, 71); this.textBox31.TabIndex = 9; this.textBox31.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox02 //this.textBox02.BackColor = System.Drawing.Color.White; this.textBox02.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox02.Location = new System.Drawing.Point(6, 160); this.textBox02.Name = "textBox02"; this.textBox02.ReadOnly = true; this.textBox02.Size = new System.Drawing.Size(71, 71); this.textBox02.TabIndex = 10; this.textBox02.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox12 //this.textBox12.BackColor = System.Drawing.Color.White; this.textBox12.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox12.Location = new System.Drawing.Point(83, 160); this.textBox12.Name = "textBox12"; this.textBox12.ReadOnly = true; this.textBox12.Size = new System.Drawing.Size(71, 71); this.textBox12.TabIndex = 11; this.textBox12.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox22 //this.textBox22.BackColor = System.Drawing.Color.White; this.textBox22.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox22.Location = new System.Drawing.Point(160, 160); this.textBox22.Name = "textBox22"; this.textBox22.ReadOnly = true; this.textBox22.Size = new System.Drawing.Size(71, 71); this.textBox22.TabIndex = 12; this.textBox22.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox32 //this.textBox32.BackColor = System.Drawing.Color.White; this.textBox32.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox32.Location = new System.Drawing.Point(237, 160); this.textBox32.Name = "textBox32"; this.textBox32.ReadOnly = true; this.textBox32.Size = new System.Drawing.Size(71, 71); this.textBox32.TabIndex = 13; this.textBox32.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox03 //this.textBox03.BackColor = System.Drawing.Color.White; this.textBox03.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox03.Location = new System.Drawing.Point(6, 237); this.textBox03.Name = "textBox03"; this.textBox03.ReadOnly = true; this.textBox03.Size = new System.Drawing.Size(71, 71); this.textBox03.TabIndex = 14; this.textBox03.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox13 //this.textBox13.BackColor = System.Drawing.Color.White; this.textBox13.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox13.Location = new System.Drawing.Point(83, 237); this.textBox13.Name = "textBox13"; this.textBox13.ReadOnly = true; this.textBox13.Size = new System.Drawing.Size(71, 71); this.textBox13.TabIndex = 15; this.textBox13.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox23 //this.textBox23.BackColor = System.Drawing.Color.White; this.textBox23.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox23.Location = new System.Drawing.Point(160, 237); this.textBox23.Name = "textBox23"; this.textBox23.ReadOnly = true; this.textBox23.Size = new System.Drawing.Size(71, 71); this.textBox23.TabIndex = 16; this.textBox23.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// textBox33 //this.textBox33.BackColor = System.Drawing.Color.White; this.textBox33.Font = new System.Drawing.Font("宋体", 42F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.textBox33.Location = new System.Drawing.Point(237, 237); this.textBox33.Name = "textBox33"; this.textBox33.ReadOnly = true; this.textBox33.Size = new System.Drawing.Size(71, 71); this.textBox33.TabIndex = 17; this.textBox33.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; //// GridControl //this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.flowLayoutPanel1); this.Name = "GridControl"; this.Size = new System.Drawing.Size(315, 316); this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); this.ResumeLayout(false); } private System.Windows.Forms.TextBox textBox20; private System.Windows.Forms.TextBox textBox10; private System.Windows.Forms.TextBox textBox00; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.TextBox textBox30; private System.Windows.Forms.TextBox textBox01; private System.Windows.Forms.TextBox textBox11; private System.Windows.Forms.TextBox textBox21; private System.Windows.Forms.TextBox textBox31; private System.Windows.Forms.TextBox textBox02; private System.Windows.Forms.TextBox textBox12; private System.Windows.Forms.TextBox textBox22; private System.Windows.Forms.TextBox textBox32; private System.Windows.Forms.TextBox textBox03; private System.Windows.Forms.TextBox textBox13; private System.Windows.Forms.TextBox textBox23; private System.Windows.Forms.TextBox textBox33; } }
4.Form(设计器和后台文件已合并):事件绑定(可以瞅瞅)、布局大小选择、事件传递到内部等等。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace _2048 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.comboBox1.SelectedIndex = 0; this.gridControl1.InitControl(); this.txtScore.Text = gridControl1.Score.ToString(); BindKeyDown(this); } privatevoid BindKeyDown(Control control) { control.KeyDown += new KeyEventHandler(ControlKeyDown); foreach (Control ctl in control.Controls) { BindKeyDown(ctl); } } privatevoid ControlKeyDown(object sender, KeyEventArgs e) { lock (this) { switch (e.KeyCode) { case Keys.Up: gridControl1.MoveUp(); this.txtScore.Text = gridControl1.Score.ToString(); break; case Keys.Down: gridControl1.MoveDown(); this.txtScore.Text = gridControl1.Score.ToString(); break; case Keys.Left: gridControl1.MoveLeft(); this.txtScore.Text = gridControl1.Score.ToString(); break; case Keys.Right: gridControl1.MoveRight(); this.txtScore.Text = gridControl1.Score.ToString(); break; case Keys.Back: gridControl1.Back(); this.txtScore.Text = gridControl1.Score.ToString(); break; } } } privatevoid button1_Click(object sender, EventArgs e) { this.gridControl1.InitControl(); this.txtScore.Text = gridControl1.Score.ToString(); } privatevoid PaintControl(int x, int y) { this.gridControl1.X = x; this.gridControl1.Y = y; this.gridControl1.InitControl(); this.txtScore.Text = gridControl1.Score.ToString(); this.Size = new Size(78 * x + 28, 78 * y + 156); foreach (Control ctl in gridControl1.Controls) BindKeyDown(ctl); } privatevoid button2_Click(object sender, EventArgs e) { if (comboBox1.Text == "自定义") { int x = 4; int y = 4; if (!int.TryParse(textBoxX.Text, out x) || x < 4) x = 4; if (!int.TryParse(textBoxY.Text, out y) || y < 4) y = 4; PaintControl(x, y); } else { switch (comboBox1.Text) { default: case"4 * 4": PaintControl(4, 4); break; case"5 * 5": PaintControl(5, 5); break; case"4 * 5": PaintControl(4, 5); break; case"5 * 4": PaintControl(5, 4); break; case"6 * 6": PaintControl(6, 6); break; } } } private System.ComponentModel.IContainer components = null; protectedoverridevoid Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } privatevoid InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.txtScore = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); this.gridControl1 = new _2048.GridControl(); this.comboBox1 = new System.Windows.Forms.ComboBox(); this.button2 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.textBoxX = new System.Windows.Forms.TextBox(); this.textBoxY = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.SuspendLayout(); //// button1 //this.button1.Location = new System.Drawing.Point(232, 84); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(74, 23); this.button1.TabIndex = 1; this.button1.Text = "New Game"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); //// txtScore //this.txtScore.BackColor = System.Drawing.Color.White; this.txtScore.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.txtScore.Location = new System.Drawing.Point(94, 79); this.txtScore.Name = "txtScore"; this.txtScore.ReadOnly = true; this.txtScore.Size = new System.Drawing.Size(123, 30); this.txtScore.TabIndex = 17; this.txtScore.Text = "0"; this.txtScore.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; //// label9 //this.label9.AutoSize = true; this.label9.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label9.Location = new System.Drawing.Point(12, 88); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(82, 21); this.label9.TabIndex = 16; this.label9.Text = "Score:"; //// gridControl1 //this.gridControl1.Location = new System.Drawing.Point(9, 123); this.gridControl1.Name = "gridControl1"; this.gridControl1.Score = 0; this.gridControl1.Size = new System.Drawing.Size(394, 394); this.gridControl1.TabIndex = 22; this.gridControl1.X = 5; this.gridControl1.Y = 5; //// comboBox1 //this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBox1.FormattingEnabled = true; this.comboBox1.Items.AddRange(newobject[] { "4 * 4", "5 * 5", "4 * 5", "5 * 4", "6 * 6", "自定义"}); this.comboBox1.Location = new System.Drawing.Point(72, 10); this.comboBox1.Name = "comboBox1"; this.comboBox1.Size = new System.Drawing.Size(81, 20); this.comboBox1.TabIndex = 23; //// button2 //this.button2.Location = new System.Drawing.Point(232, 43); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(74, 23); this.button2.TabIndex = 24; this.button2.Text = "重绘布局"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); //// label1 //this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(13, 18); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(53, 12); this.label1.TabIndex = 25; this.label1.Text = "布局样式"; //// textBoxX //this.textBoxX.Location = new System.Drawing.Point(111, 43); this.textBoxX.Name = "textBoxX"; this.textBoxX.Size = new System.Drawing.Size(28, 21); this.textBoxX.TabIndex = 26; //// textBoxY //this.textBoxY.Location = new System.Drawing.Point(180, 43); this.textBoxY.Name = "textBoxY"; this.textBoxY.Size = new System.Drawing.Size(28, 21); this.textBoxY.TabIndex = 27; //// label2 //this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(94, 48); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(11, 12); this.label2.TabIndex = 28; this.label2.Text = "x"; //// label3 //this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(164, 48); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(11, 12); this.label3.TabIndex = 29; this.label3.Text = "y"; //// label4 //this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(14, 48); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(65, 12); this.label4.TabIndex = 30; this.label4.Text = "自定义布局"; //// Form1 //this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(410, 519); this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.textBoxY); this.Controls.Add(this.textBoxX); this.Controls.Add(this.label1); this.Controls.Add(this.button2); this.Controls.Add(this.comboBox1); this.Controls.Add(this.gridControl1); this.Controls.Add(this.txtScore); this.Controls.Add(this.label9); this.Controls.Add(this.button1); this.Name = "Form1"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "2048小游戏"; this.ResumeLayout(false); this.PerformLayout(); } private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox txtScore; private System.Windows.Forms.Label label9; private GridControl gridControl1; private System.Windows.Forms.ComboBox comboBox1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBoxX; private System.Windows.Forms.TextBox textBoxY; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; } }
修改一下,做个补充,下次有时间,我会发个flash做的打飞机小游戏,是真正的打飞机,不要想歪了,呵呵。
原文:http://www.cnblogs.com/preacher/p/3905593.html
内容总结
以上是互联网集市为您收集整理的C# 开发2048小游戏全部内容,希望文章能够帮你解决C# 开发2048小游戏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。