版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计主要内容1. 题目20482. 需求分析游戏操作需求:1、可使用鼠标或、或W、X、A、D键进行操作;2、Play按钮 重新开始游戏;3、Undo按钮 取消本次操作,回到上一步。2048游戏算法1、游戏开始时随机的产生2个数值为2/4的方格,其中1个方格置于4个角中的一个位置, 另一个方格随机的置于其它位置,其余方格值为0。2、每次移动鼠标或按方向键后,逐行计算移动后的方格值。每行移动的算法是:先将所有值为0的数移至行首。能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。3、每合并一次格子,将其值累计到游戏总分中。4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值
2、。5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。6、2出现的概率为90%,4出现的概率为为10%。3. 设计环境运行环境:windows xp,windows 2003 windows 7开发环境:Microsoft Visual Studio 2010编写语言:c#一 详细设计说明开始随机产生两个方块键盘控制移动方块1. 系统程序流程图移动方向最底部方块是否有方块方块移到底部N原来位置方块清除Y数字是否相等N上一格方块数字是否相等Y两方块数字相加把上面的行数据下移并置YN方块是否能够移动YYN结束游戏2. 系统概要说明 本程序是在VS2010环境下编写的Windows应用程
3、序,函数中利用了画图函数绘制基本方块模型,并通过键盘或鼠标执行相应的操作。在产生的方块中,调用随机方法,随机产生1100中的任何一个数字,数字小于90,方块显示数字为2,否则显示为4,每一,通过这种方式,实现了游戏中其中不同模块的数字的随机产生。3. 功能说明(1) 实现可以显示2或者4两张数字的方块(2) 实现各个方块的上下左右移动 (3) 实现方块间数字判断与相加4. 系统各类的知识点说明1 主类Main()方法 主函数调用主要功能的三个方法,实现程序运行。2. Cube类(画单元格)Cube类的功能定义了单个方块的构架。此类中,定义了不同的数字显示所显示的不同的单元格方块,使方块相加变化
4、明显。此类中定义了属性currValue/当前得分以及方法Cube_Paint()方块的绘制,此方法针对可能出现的12中数字显示,运用Graphics类, 画出不同的显示的方块3.forms类(方块的控制)此类主要实现对方块的控制,实现每种不同操作的实现 此类创建了四个属性private Cube cubes = new Cube16;/创建个个cubes类的数组,实现游戏方块的创建 enum MoveDict Up, Down, Left, Right ;/定义枚举类型,键盘控制方向,上下左右 private int x1, y1;/鼠标位置 private int score = 0;/房
5、钱成绩 private int prev =new int17; /./上一步方格值和积分Form1()方法: 构造方法,实现方块的实例化创建start()方法:游戏的初始化,实现最开始两个方块的摆放。SavePrevVaule()方法:保存每上一步的方块值以及成绩,实现撤销一次的操作LoadPrevValue()方法:加载上一步值,当进行撤销操作时,调用该方法。OneMove()方法:实现移动一次的操作。此方法调用MoveLine()进行累加,实现成绩的相加MoveLine()方法:移动一行的方法getNextCube()方法:取下一个方块CanMove()方法:通过方块是否能够移动,判断游
6、戏是由结束pictureBox1_MouseDown()方法:获取鼠标移动的位置getDirection()方法:通过鼠标坐标判断方块的移动方向Form1_KeyUp()方法:接受键盘信息,判断方块移动方向btnPlay_Click()方法:“开始”按钮的单击事件,调用start()方法,开始游戏btnUndo_Click()方法:“撤销”按钮的单机事件,调用LoadPrevValue()方法,进行撤销操作5. 主要算法设计1.方块值的随机数产生System.Random r = new Random();int n1 = r.Next(1, 100);cubes0.Value = (n1 &
7、lt; 90 ? 2 : 4);通过Random类产生100以内的随机数,数字大于90,方块值为4;小于90,方块值为22.游戏初始化两个随机方格位置的摆放 System.Random r = new Random(); int c1 = r.Next(1, 4); int c2 = c1; do c2 = r.Next(1, 16); while (c2 = c1); for (int i = 0; i < 16; i+) cubesi.Value = 0; int n1 = r.Next(1, 100); int n2 = r.Next(1, 100); switch (c1) ca
8、se 1: cubes0.Value = (n1 < 90 ? 2 : 4); break; case 2: cubes3.Value = (n1 < 90 ? 2 : 4); break; case 3: cubes12.Value = (n1 < 90 ? 2 : 4); break; case 4: cubes15.Value = (n1 < 90 ? 2 : 4); break; cubesc2 - 1.Value = (n2 < 90 ? 2 : 4);四个角随机摆放一个方格,其他位置随机摆放,位置重叠,再随机产生一个3.保存上一步值的算法实现priva
9、te int prev =new int17; /定义一个数组记录值for (int i = 0; i < 16; i+) previ = cubesi.Value;/数组前16个元素保存,16个方块的值 prev16 = score;/数组最后一个元素保存当前成绩值4. 方块移动一次的算法实现每移动一次,要加载得分,并是先移动后方块的位置摆放以及方块数值的相加及显示private int MoveLine(Cube cube1, Cube cube2, Cube cube3, Cube cube4) int score = 0; if (cube1.Value = 0 &&am
10、p; cube2.Value = 0 && cube3.Value = 0 && cube4.Value = 0) return 0; Cube cubes = cube1, cube2, cube3, cube4 ; ArrayList iCubes = new ArrayList(); /判断最低行方块值是否为0,为0即不存在方块,去掉为0的方块 for (int i = 0; i < cubes.Length; i+) if (cubesi.Value != 0) iCubes.Add(cubesi.Value); for (int i = 0; i
11、 < cubes.Length - iCubes.Count; i+) cubesi.Value = 0; for (int i = 0; i < iCubes.Count; i+) cubesi + cubes.Length - iCubes.Count.Value = (int)iCubesi; if (cubes2.Value != 0)/ 如果等于0,说明改行只有一个非0的数,则不需要移动和累加数了 if (cubes3.Value = cubes2.Value)/后一块与前一块方块比较,如果数字相同,则累加成绩 score += 2 * cubes3.Value; cub
12、es3.Value = 2 * cubes3.Value; if (cubes1.Value = cubes0.Value) score += 2 * cubes1.Value; cubes2.Value = 2 * cubes1.Value; cubes1.Value = 0; cubes0.Value = 0; else cubes2.Value = cubes1.Value; cubes1.Value = cubes0.Value; ; cubes0.Value = 0; else if (cubes2.Value = cubes1.Value) score += 2 * cubes2.
13、Value; cubes2.Value = 2 * cubes2.Value; cubes1.Value = cubes0.Value; ; cubes0.Value = 0; else if (cubes1.Value = cubes0.Value) score += 2 * cubes1.Value; cubes1.Value = 2 * cubes1.Value; cubes0.Value = 0; return score; 5. 获取下一个方块的算法实现private void getNextCube() ArrayList iCubes = new ArrayList(); /去除
14、0之后的方块 for (int i = 0; i < 16; i+) if (cubesi.Value = 0) iCubes.Add(i); if (iCubes.Count > 0) /在所有为0的数上,随机增加一个数 System.Random r = new Random(); cubes(int)iCubesr.Next(1, iCubes.Count) - 1.Value = (r.Next(1, 100) < 90 ? 2 : 4); ; else if (CanMove()=false) /当不能移动,游戏结束! MessageBox.Show("G
15、ame Over!"); 6. 判断游戏是否结束的算法实现private bool CanMove() /判断左右是否能够移动,如果存在两个数相同,即方块可以移动累加,返回true,游戏未结束 if (cube1.Value = cube2.Value | cube2.Value = cube3.Value | cube3.Value = cube4.Value | cube5.Value = cube6.Value | cube6.Value = cube7.Value | cube7.Value = cube8.Value | cube9.Value = cube10.Value
16、 | cube10.Value = cube11.Value | cube11.Value = cube12.Value | cube13.Value = cube14.Value | cube14.Value = cube15.Value | cube15.Value = cube16.Value ) return true; /同理。判断上下能否移动 if (cube1.Value = cube5.Value | cube5.Value = cube9.Value | cube9.Value = cube13.Value | cube2.Value = cube6.Value | cube
17、6.Value = cube10.Value | cube10.Value = cube14.Value | cube3.Value = cube7.Value | cube7.Value = cube11.Value | cube11.Value = cube15.Value | cube4.Value = cube8.Value | cube8.Value = cube12.Value | cube12.Value = cube16.Value ) return true; return false;/全部不能移动,返回false,即游戏结束 二 游戏运行说明1.游戏运行流程图1. 游戏开始2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏项目居间服务合同范本
- 三人合伙餐饮合同范例
- 出租鸡场山地合同范例
- 共享单车股转让合同范例
- 丙纶防水合同范本
- 化工燃料合同范例
- 农村房屋拆除合同范本
- 仿古门窗供货合同范例
- 丧葬工具出租合同范例
- 公司解聘无固定合同范例
- DB34T4826-2024畜禽养殖业污染防治技术规范
- 腰麻课件教学课件
- 石油化工企业环境保护管理制度预案
- 2024年甘肃省高考历史试卷(含答案解析)
- 2024年山东省烟台市初中学业水平考试地理试卷含答案
- 抗肿瘤治疗所致恶心呕吐护理
- 2024年广东省中考地理试题(含解析)
- 西安经济技术开发区管委会招聘考试真题
- 冀教版小学英语六年级下册全册教案
- 2024人工智能开源大模型生态体系研究报告
- 紧密型县域医疗卫生共同体慢病管理中心运行指南试行等15个指南
评论
0/150
提交评论