red_angelxID:Red_angelX
52277次访问,排名1977好友2人,关注者11
Red_angelX的文章
原创 53 篇
翻译 0 篇
转载 3 篇
评论 26 篇
Red_angelX的公告
新Blog:http://www.cnblogs.com/Red_angelX/ CSDN BLOG停用
最近评论
lrongk:怎么没有原码
lqqldj:第一次看此类破解文章,大开眼界,谢谢.
afterruins:能把代码发下麽!学习学习!谢谢啊!
li_zhao_long@126.com
zhangwujian85:怎么下不了啊
pks3000:0Day 是啥?
文章分类
收藏
    相册
    推荐网站
    CodeProject
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 C#编写贪吃蛇游戏 RedSnake收藏

    新一篇: 经典拼数字游戏NumPuzzle C# By Red_angelX | 旧一篇: QQ的TEA填充算法C#实现 By Red_angelX

    RedSnake 设计说明书

    背景

    开发环境:Microsoft Visual Studio .Net 2003

    开发语言:C#

    开发者:Red_angelX

    主界面设计

    程序界面如图一所示

                                        主界面

    左边是游戏区域,由一个pictureboxlable组成,picturebox用来绘制游戏界面,label用来显示游戏是否运行。

    右边是状态区域,由若干label组成,用来表示游戏中的状态参数。

     


    1 总体设计

      游戏主体分为3个主要模块:蛇身基本单元,蛇身结构位置,蛇身的移动控制。这3个单元各用一个class来描述

    1.1 蛇身基本单元模块 SnakeSegment.cs

      基本单元用一个矩形(Rectangle)来描述,详细构造如下

           private Rectangle m_rect;

            
    /************构造函数,传入顶点坐标和块宽度****************/

            
    public SnakeSegment(Point location,int width)

             
    {

                  m_rect 
    = new Rectangle(location,new Size(width,width));

             }


             
    //属性

             
    public Rectangle Rectangle

             
    {

                  
    get

                  
    {

                       
    return m_rect;

                  }


             }


             
    public Point Location

             
    {

                  
    get

                  
    {

                       
    return this.m_rect.Location;

                  }


                  
    set

                  
    {

                       
    this.m_rect.Location = value;

                  }


             }


             
    public Size Size

             
    {

                  
    get

                  
    {

                       
    return this.m_rect.Size;

                  }


             }

     

    1.2 蛇身结构位置模块 Snake.cs

         蛇身由若干基本单元组成,这些单元存放在一个Queue结构中,Queue处于命名空间System.Collections之下,表示对象的先进先出集合。Snake类里面主要包含Add(添加新对象)Clear(清除对象)Slither(蛇身移动), PointOnSnake(判断某点是否在蛇身内部)几个方法。

              //向蛇身添加一个新节点         

    public void Add(Point newLocation)

             
    {

                  SnakeSegment newhead 
    = new SnakeSegment(newLocation,m_width);

                  
    //Check if the Queue Exists

                  
    if(m_segs == null)

                  
    {

                       m_segs 
    = new Queue(MAXSNAKELENGTH);

                  }


                  
    else if(m_segs.Count == MAXSNAKELENGTH)

                  
    {

                       Slither(newLocation);

                       
    return;

                  }


                  
    //添加到m_segs尾部

                  m_segs.Enqueue(newhead);

             }

             //用添加一个新蛇头删除蛇尾的方法来移动蛇身

       
    public void Slither(Point newLocation)

             
    {

                  SnakeSegment newhead 
    = new SnakeSegment(newLocation, this.m_width);

                  
    //添加蛇头

                  
    this.m_segs.Enqueue(newhead);

                  
    //移除蛇尾

                  
    this.m_segs.Dequeue();

             }

     

     

     

     

     

     

     

     

     

     

       

              //判断某点是否在蛇身内部

      
    public bool PointOnSnake(Point pt)

                  IEnumerator myenum 
    = this.m_segs.GetEnumerator();

                  
    while (myenum.MoveNext())

                  
    {

                  
    if (((SnakeSegment) myenum.Current).Rectangle.Contains(pt))

                       
    {

                           
    return true;

                       }


                  }


                  
    return false;

             }

     

     

     

    1.3 控制蛇身移动模块 Control.cs

    移动控制模块定义了蛇头的坐标,移动的方向等信息,并且判断下一步移动的点的坐标。

    首先定义了三个全局变量

     

     

         private Point m_location;   //蛇头的坐标

         
    private int m_increment;    //每次移动增加的象素

    private SnakeDirection m_direction;   //移动的方向
     

     

     

    其中的SnakeDirection的定义为

     

             internal enum SnakeDirection

             
    {

                  None 
    = -1,   //保持默认

                  Down 
    = 1,

                  Left 
    = 0,

                  Right 
    = 2,

                  Up 
    = 3   

             }

     

     

     

     

     

     

     

     

     

     

    移动坐标判断函数Move的代码如下

    该函数还有一个不带参数的重载,internal void Move(),内部调用Move(SnakeDirection.None)来实现。

    1.4 程序主窗体设计 Form1.cs

       主窗体实现游戏的核心是设置一个timer来实现游戏的更新和界面的重绘,其中通过窗体接受键盘的按键来设置蛇身的移动方向,通过PictureBoxPaint事件来更新游戏的画面,通过timer事件来移动蛇身和判断是否吃到食物是否游戏结束等逻辑处理。也可以通过改变timer的时间来改变蛇身移动的 

    2 游戏界面

      下图是游戏进行中截图

    3 总结

       这个作品只是个小游戏,用来熟悉GDI绘图和一些相关构造,主要用于休闲娱乐。

     

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

    发表于 @ 2006年09月29日 16:43:00|评论(loading...)|编辑

    新一篇: 经典拼数字游戏NumPuzzle C# By Red_angelX | 旧一篇: QQ的TEA填充算法C#实现 By Red_angelX

    评论

    #zyu 发表于2006-10-13 15:40:00  IP: 60.7.2.*
    8htjyjhg
    #alawn 发表于2006-11-16 01:14:00  IP: 125.77.14.*
    我看你写的那个贪吃蛇代码。。可是有写地方不明白(我是个菜鸟)可以联系下吗?或者发一分完整的代码给我。。谢谢
    我E-Mail:jiang13wolf@163.com
    #zhangwujian85 发表于2007-10-09 18:43:03  IP: 59.55.139.*
    怎么下不了啊
    #afterruins 发表于2007-10-21 20:18:39  IP: 58.213.246.*
    能把代码发下麽!学习学习!谢谢啊!
    li_zhao_long@126.com
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Red_angelX