经典拼数字游戏NumPuzzle C# By Red_angelX

NumPuzzle 设计说明书

背景

开发环境:Microsoft Visual Studio .Net 2003

开发语言:C#

开发者:Red_angelX

1 总体设计

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值