2个回答
展开全部
RedSnake 设计说明书
背景
开发环境:Microsoft Visual Studio .Net 2003
开发语言:C#
开发者:Red_angelX
主界面设计
左边是游戏区域,由一个picturebox和lable组成,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)来实现。
背景
开发环境:Microsoft Visual Studio .Net 2003
开发语言:C#
开发者:Red_angelX
主界面设计
左边是游戏区域,由一个picturebox和lable组成,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)来实现。
参考资料: http://blog.csdn.net/red_angelx/archive/2006/09/29/1307040.aspx
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询