NumPuzzle 设计说明书

背景

开发环境:Microsoft Visual Studio .Net 2003

开发语言:C#

开发者:Red_angelX

1 总体设计

设计思路:根据玩家设置的棋盘布局大小N,动态生成一个N*N的数组,存放1到N*N-1和0xff的byte,游戏开始随机打乱这个数组,根据玩家按键来交换该数组元素位置,判断元素排列顺序来判断是否已经完成游戏。

2 游戏界面

3 具体设计

全局变量定义

         int GameSize = 0;        //棋盘大小

         byte[] Position;         //数组  

         Button[] Buttons;        //表现按扭

         const int MAP_WIDTH = 300;   //棋盘宽度

         bool IsRun = false;          //游戏状态

         int Clicks = 0;              //总移动数
 

初始化游戏函数InitGame()

//初始化游戏相关设置

         private void InitGame()

         ...{

/**//****************************************

              **清除已有棋盘按扭,代码略  

******************************************/    

              Buttons = new Button[GameSize*GameSize];

              Position = new byte[GameSize*GameSize];

              Position[0] = 0xff;         //空的位置

              for(int i=1;i<Position.Length;i++)

              ...{

                   Position[i] = (byte)i;//初始化数组

              }

              //随机洗牌

              byte[] key = new byte[GameSize*GameSize];

              new Random().NextBytes(key);

              Array.Sort(key,Position);

              /**//******************************************

              ** 动态生成棋盘按扭,代码略

              *******************************************/

              IsRun = true;            //设置游戏运行标志

              this.Clicks = 0;

         }

根据按键交换数组位置

  private void DoChange(Keys key)     /**//*  交换数组位置 */

     ...{

              //寻找空格位置

              int offest = -1;

              int MoveIndex = -1;

              for(int i=0;i<Position.Length;i++)

              ...{

                   if(Position[i] == 0xff)

                   ...{

                       offest = i;

                       break;

                   }

              }

              //判断玩家按键

              switch(key)

              ...{

                   case Keys.Left:

                       MoveIndex = offest + 1;

                       if(offest % GameSize == GameSize - 1) 

                            return;

                       break;

                   /**//*省略其他情况*/ 

              }//End Switch

              //判断是否能有效移动

              if(MoveIndex < 0 || MoveIndex >= Position.Length)

                   return;

              Clicks++;

              this.statusBar1.Text = Clicks.ToString()+" Move";

              PlaySound.Play("MOVE.WAV");

              //交换数组中offest和MoveIndex位置

              byte temp;

              temp = Position[offest];

              Position[offest] = Position[MoveIndex];

              Position[MoveIndex] = temp;

              //更新UI

              UpDataUI(offest,MoveIndex);

//检查游戏是否过关 

              CheckWin();

         }

更新游戏界面函数UpDataUI

         private void UpDataUI(int offest,int MoveIndex)

         ...{

              if(this.IsRun == false)

                   return;

              Buttons[offest].Visible = true;

              Buttons[offest].Text = Position[offest].ToString();

              Buttons[MoveIndex].Visible = false;

      }
 

判断游戏是否过关 CheckWin()

     private void CheckWin()

         ...{

              for(int i=1;i<Position.Length;i++)

              ...{

                   if(Position[i-1] != (byte)i)

                   ...{

                       return;   //不符合条件返回

                   }

              }

              //过关后播放相应音乐和显示过关对话框

              PlaySound.Play("WIN.WAV");

              IsRun = false;

              this.statusBar1.Text+=" 过关!";

              Winner wn = new Winner(GameSize,this.Clicks);

              wn.ShowDialog();

      }
 

3 总结

拼数字游戏总体设计情况如上,并没有很多很高深的内容,实现的核心在于对数组的操作排列。

源代码下载地址:http://free5.ys168.com/?xuyuexyz            DotNet/NumPuzzle.rar

经典拼数字游戏NumPuzzle C# By Red_angelX相关推荐

  1. C#的winform拼数字游戏

    C#的winform拼数字游戏 声明:阅读了别人的代码学习修改而来,增加了美观度和游戏乐趣.(作者出处忘了不好意思) 程序截图 关键代码 using System; using System.Coll ...

  2. 使用A* (AStar)算法自动求解拼数字游戏

    原文链接: 使用A* (AStar)算法自动求解拼数字游戏 上一篇: js Heap 的简单使用 下一篇: vue router 技巧 效果 主要思想 设置两个数组 close 保存已经走过的状态 o ...

  3. 例题3-4 猜数字游戏的提示(Master-Mind Hints, UVa 340)

    实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n ...

  4. 【基础编程】猜数字游戏的提示

    ★题目 实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B) 输入包括多组数据.每组输入第一行为序列长 ...

  5. 习题 猜数字游戏提示

    一.题目 实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序 ...

  6. vue 拼数字小游戏(设置表白彩蛋)

    原文链接: vue 拼数字小游戏(设置表白彩蛋) 上一篇: vue 网格 过渡 动画 下一篇: mpvue 开发小程序 流程 效果 通过点击交换空白格子与周围的格子,将整个格子还原,如果在还原过程中, ...

  7. python经典的猜数字游戏

    python经典的猜数字游戏,几乎所有人学编程时都会做. 功能描述:随机选择一个三位以内的数字作为答案.用户输入一个数字,程序会提示大了或是小了,直到用户猜中. 下面

  8. C语言经典小游戏---猜数字游戏 (包含C语言中如何实现随机数的生成)

    题目描述:输入1-100之间的数字,进行猜数字游戏,猜大猜小有提示,直至才对为止,游戏可以重复游玩. 算法思路: 1.用void函数分别写出菜单程序与游戏进程程序. 2.用switch-case-de ...

  9. 猜数字游戏python程序_python经典小程序:猜数字游戏

    #猜数字游戏 import random #impor语句导入random模块 guessor=0;print("#"*30) #输出30个"#"(" ...

最新文章

  1. linux内核远程漏洞,CVE-2019-11815:Linux内核竞争条件漏洞导致远程代码执行
  2. android路由器 设备数,手机查看wifi连接人数_手机查看wifi连接设备数量-192路由网...
  3. mysql 全文检索 教程_MySQL:详细说明MySQL全文检索图文详细教程
  4. java解析xml实例_在java中使用dom解析xml的示例分析
  5. 下一个十年需要的五大IT技能
  6. php注释验证,注解验证 · ThinkPHP6.0完全开发手册 · 看云
  7. 石家庄计算机职业学院张秋玉,九龙坡有什么大学
  8. 计算机常用存储芯片分为内存和什么,计算机类论文范例,与安徽省计算机一级考试宝典相关研究生毕业论文开题报告范文...
  9. 数据结构二叉树遍历求后序
  10. 组策略里更改更新和设置客户端首页
  11. nginx upstream配置_nginx + ingress + gunicorn 环境上传大文件报错问题的解决思路
  12. python 阿里云短信接口_python 之阿里云短信服务接入流程短信接口
  13. Linux必会100个命令(八)ps、top、netstat
  14. python内置函数bool()
  15. 【通信原理】实验七、基于Matlab的均匀量化和非均匀量化
  16. Base64转码和字符串互转
  17. Java程序猿搬砖笔记(七)
  18. 机器学习的五大潜力趋势!
  19. pydicom提取DICOM胸片图像
  20. OS - Bitcode App 瘦身中间码

热门文章

  1. 吕蒙正千年奇文《寒窑赋》鉴赏
  2. 如何选购笔记本电脑?
  3. Unity 设置代理 下载资源
  4. 【包学包会】系统篇【重装+备份+还原】
  5. Linux环境go项目启动提示/usr/bin/ld: cannot find -lxxx
  6. windows10将耳机当作麦克风
  7. 封装和继承作业(java)(一)
  8. 利用pandas将Excel分组比较获取差集并
  9. 这些自媒体平台可以帮你实现大目标
  10. 摄影测量期末复习cumt