【VC++开源代码栏目提醒】:网学会员鉴于大家对VC++开源代码十分关注,论文会员在此为大家搜集整理了“c#贪吃蛇的代码与实现界面 - 产品手册”一文,供大家参考学习
using Systemusing System.Collections.Genericusing System.Drawingusing System.Textnamespace Snake interface IActivity //定义接口表示每天干的事 void move//声明方法 move,表示 Snake 移动 void eat//声明方法 eat,表示 Snake 吃东西 interface ISnake void DrawSnake//声明方法 DrawSnake,表示画蛇 public class SnakeMode //判断食物是否在蛇身体里 private bool hasfood false //蛇身介质 private Label body // 蛇的颜色 private Color _color System.Drawing.Color.SkyBlue // 颜色属性 public System .Drawing // 蛇的大小 // 移动方向默认向东 // 蛇身 // 构造函数 //画蛇 // 返回蛇体 // 蛇体移动 // copy 蛇身 // 吃东西////////////////////////C中贪吃蛇游戏的源
代码2008-06-29 05:28:40转载标签: it// Snake.cs Begin//using Systemusing System.Collectionsusing System.Drawingusing System.Windows.Formsusing System.Timersnamespace GreedySnake region Snake 蛇身 /// /// Snake 的摘要说明。
/// public class Snake private Control dcControl private static int iMoveDirection 0x1000 // 蛇的运动方向 , 初始化为 right - 0x1000 private int iCount // 骨节的总数 private int iRadius // 骨节的半径 private static int iCurrentHeadX // 当前蛇头的中心坐标 X private static int iCurrentHeadY // 当前蛇头的中心坐标 Y private static int iCurrentTrailX // 当前蛇尾的中心坐标 X private static int iCurrentTrailY // 当前蛇尾的中心坐标 Y private static int iNextHeadX // 下一时刻蛇头的中心坐标 X private static int iNextHeadY // 下一时刻蛇头的中心坐标 Y private static int iPreTrailX // 前一时刻蛇尾的中心坐标 X private static int iPreTrailY // 前一时刻蛇尾的中心坐标 Y private static ArrayList alSnake // 存放整条蛇 private bool bDisposing true private bool bIsEatself false // 是否吃自己 private bool bIsOutOfRange false // 是否超出允许活动的范围 public Control DcControl set dcControl value get return dcControlpublic int MoveDirection set iMoveDirection value get return iMoveDirection public int Count set iCount value get return iCount public int Radius set iRadius value get return iRadius public int CurrentHeadX set iCurrentHeadX value get return iCurrentHeadX public int CurrentHeadY set iCurrentHeadY value get return iCurrentHeadY public int CurrentTrailX set iCurrentTrailX value get return iCurrentTrailX public int CurrentTrailY set iCurrentTrailY value get return iCurrentTrailY public int NextHeadX set iNextHeadX value get return iNextHeadX public int NextHeadY set iNextHeadY value get return iNextHeadY public int PreTrailX set iPreTrailX value get return iPreTrailX public int PreTrailY set iPreTrailY value get return iPreTrailY public bool IsEatself set bIsEatself value get return bIsEatself public bool IsOutOfRange set bIsOutOfRange value get return bIsOutOfRangepublic Snake : thisnull 20 5 // // TODO: 在此处添加构造函数逻辑 // public SnakeControl control int iCount int iRadius DcControl control Count iCount Radius iRadius CurrentHeadX CurrentTrailX PreTrailX 5 CurrentHeadY CurrentTrailY PreTrailY 5 Initialize Snake Disposefalse // 初始化蛇 private void Initialize alSnake new ArrayList for int i0 i alSnake.Insert0 new SnakeNodeDcControl CurrentHeadX CurrentHeadY Radius CurrentHeadX 2 Radius CurrentHeadX - 2 Radius NextHeadX CurrentHeadX 2 Radius NextHeadY CurrentHeadY public void Dispose Disposetrue GC.SuppressFinalizethis public void Dispose bool bDisposing if bDisposing // 调用 Dispose 处理受控资源中的字段 MoveDirection 0x1000 CurrentHeadX CurrentHeadY NextHeadX NextHeadY 5 alSnake.Clear // 清除非受控资源 // 加头 public void AddHead alSnake.Insert0 new SnakeNodeDcControl NextHeadX NextHeadY Radius CurrentHeadX NextHeadX CurrentHeadY NextHeadY Count // 加尾 public void AddTrail alSnake.Addnew SnakeNodeDcControl PreTrailX PreTrailY Radius Count SnakeNodealSnakeCount - 1.Draw // 去尾 public void RemoveTrail if alSnake.Countgt1 PreTrailX SnakeNodealSnakeCount - 1.CenterX PreTrailY SnakeNodealSnakeCount - 1.CenterY alSnake.RemoveAtalSnake.Count - 1 Count-- CurrentTrailX SnakeNodealSnakeCount - 1.CenterX CurrentTrailY SnakeNodealSnakeCount - 1.CenterY // 移动到下一位置public void MoveNext // 加头 AddHead // 画头 SnakeNodealSnake0.Draw // 清除尾(将蛇尾用背景色填充) SnakeNodealSnakeCount-1.Clear // 去尾(将蛇尾从 ArrayList 中删除) RemoveTrail// 画整条蛇public void Draw for int i0 i SnakeNodealSnakei.Draw // 清除整条蛇public void Clear for int i0 i SnakeNodealSnakei.Clear // 重设运动方向public void ResetMoveDirectionstring strKeyData // 获取键盘输入 int iKeyDirection switch strKeyData case quotWquot: case quotUpquot: iKeyDirection 0x0001 break case quotSquot: case quotDownquot: iKeyDirection 0x0010 break case quotAquot: case quotLeftquot: iKeyDirection 0x0100 break case quotDquot: case quotRightquot: iKeyDirection 0x1000 break default: iKeyDirection 0x0010 break // 重设蛇的运动方向(综合按键方向和当前蛇的运动方向考虑) int iDirection iKeyDirection MoveDirection if iDirection 0x0011 iDirection 0x1100 MoveDirection MoveDirection // 运动方向保持不变 else MoveDirection iKeyDirection // 运动方向等于按键方向// 是否超出范围public void Check GetNextHeadXY // 检查是否吃自己 foreach SnakeNode sn in alSnake if sn.CenterX NextHeadX ampamp sn.CenterY NextHeadY IsEatself true break // 检查是否超出允许活动的范围 IsOutOfRange NextHeadXlt0 NextHeadXgtDcControl.Width NextHeadYlt0 NextHeadYgtDcControl.Height // 预先算出下个位置坐标 private void GetNextHeadXY switch MoveDirection case 0x0001: NextHeadX CurrentHeadX NextHeadY CurrentHeadY - 2 Radius break case 0x0010: NextHeadX CurrentHeadX NextHeadY CurrentHeadY 2 Radius break case 0x0100: NextHeadX CurrentHeadX - 2 Radius NextHeadY CurrentHeadY break case 0x1000: NextHeadX CurrentHeadX 2 Radius NextHeadY CurrentHeadY break default: break endregion region SnakeNode 蛇的骨节 /// /// Snake Note/// 蛇的骨节///public class SnakeNode private Control dcControl // 用于画图的控件 private int iCenterX // 中心坐标 X private int iCenterY // 中心坐标 Y private int iRadius // 半径 private Color colorNode // 颜色 public Control DcControl set dcControl value get return dcControl public int CenterX set iCenterX value get return iCenterX public int CenterY set iCenterY value get return iCenterY public int Radius set iRadius value get return iRadius public Color ColorNode set colorNode value get return colorNode private bool bDisposing truepublic SnakeNode : thisnull 0 0 5public SnakeNodeControl control int iX int iY int iR DcControl control CenterX iX CenterY iY Radius iRSnakeNode Disposefalsepublic void Dispose Disposetrue GC.SuppressFinalizethispublic void Dispose bool bDisposing if bDisposing // 调用 Dispose 处理受控资源中的字段 CenterX CenterY 0 Radius 5 // 清除非受控资源// 画自身public void Draw DrawColor.Blue public void DrawColor color // 以指定颜色画圆 ColorNode color DrawCircleColorNode // 清除 public void Clear // 以控件的背景色画圆 DrawCircleDcControl.BackColor // 以骨节的中心画圆 public void DrawCircleColor color using Graphics dc DcControl.CreateGraphics // 创建实心的笔刷 SolidBrush sbBrush new SolidBrushcolor // 创建圆的区间范围 float x CenterX - Radius float y CenterY - Radius float width 2 Radius float height 2 Radius // 创建开始和扫过的弧度 float fStartAngle 0.0F float fSweepAngle 360.0F // 画圆 dc.FillPiesbBrush x y width height fStartAngle fSweepAngle endregion region SnakeFood 蛇的食物 /// /// SnakeFood 的摘要说明。
/// public class SnakeFood private Control dcControl private int iMaxCount // 最多能剩下的食物总数 private int iCurrentCount // 当前剩下的食物总数 private int iRadius // 骨节的半径 private Color acolor new ColorColor.Red Color.Green Color.Yellow // 新点的颜色取值范围 private static ArrayList alSnakeFood // 蛇的食物 private bool bDisposing true public Control DcControl set dcControl value get return dcControl public int MaxCount set iMaxCount value get return iMaxCount public int CurrentCount set iCurrentCount value get return iCurrentCount public int Radius set iRadius value get return iRadius public SnakeNode thisint index get if indexlt0 indexgtCurrentCount throw new IndexOutOfRangeException return SnakeNodealSnakeFoodindex public SnakeFood : thisnull 5 5public SnakeFoodControl control int iMaxCount int iRadius DcControl control MaxCount iMaxCount CurrentCount 0 Radius iRadius alSnakeFood new ArrayListSnakeFood Disposefalsepublic void Dispose Disposetrue GC.SuppressFinalizethispublic void Dispose bool bDisposing if bDisposing // 调用 Dispose 处理受控资源中的字段 CurrentCount 0 alSnakeFood.Clear // 清除非受控资源 // 添加食物 public void AddFood Random random new Random int iStep Radius Radius int iX Radius iStep random.Next0 DcControl.Width/iStep int iY Radius iStep random.Next0 DcControl.Height/iStep SnakeNode sn new SnakeNodeDcControl iX iY iRadius Random randomIndex new Random Color color acolorrandomIndex.Next0 acolor.Length color Color.Green sn.Drawcolor alSnakeFood.Addsn // 当前剩下的食物总数加 1 CurrentCount // 删除被吃掉的食物 public void RemoveFoodint iIndex if CurrentCountgt0 alSnakeFood.RemoveAtiIndex // 当前剩下的食物总数减 1 CurrentCount-- // 画所有食物 public void Draw foreach SnakeNode sn in alSnakeFood sn.Draw // 清除所有食物 public void Clear foreach SnakeNode sn in alSnakeFood sn.Clear endregion//// Snake.cs End////////////////////////////////////////////////////////////////////////using Systemusing System.Collections.Genericusing System.ComponentModelusing System.Datausing System.Drawingusing System.Textusing System.Windows.Formsusing System.Collectionsnamespace WindowsApplication1 public partial class Form1 : Form public Form1 InitializeComponent private bool i//开关 snake a_snake new snake5//实例化个长度为 5 的蛇 food afood new food//实例化一个食物 private void pictureBox1_Paintobject senderPaintEventArgs e Graphics g e.Graphics if i//点击了开始 button a_snake.drawsnakeg//画出蛇 afood.drawfoodg//画出来食物 if a_snake.deadsnake//如果蛇死亡事件为真 timer1.Enabled false//timer 控件停止 if DialogResult.Yes MessageBox.ShowquotGAME OVERquot quot是否重新开始quot MessageBoxButtons.YesNo //messagebox 消息 //点击确定后重新开始游戏 button1.Enabled true a_snake new snake5//初始化蛇 afood new food//初始化食物 i false//开关为假 g.ClearpictureBox1.BackColor// 清 理picturebox else Application.Exit//关闭
程序 private void button1_Clickobject sender EventArgs e i true //开关为真 afood.F_point afood.getpoint//产生一个食物的随机坐标 pictureBox1.Refresh//刷新 picturebox timer1.Enabled true//开启 timer 控件 timer1.Interval 100 //时间间隔为 0.1 秒 button1.Enabled false private void timer1_Tickobject sender EventArgs e pictureBox1.Refresh//刷新 picturebox a_snake.extendsnake//蛇伸长一节 if a_snake.headpoint afood.F_point afood.F_point afood.getpoint//蛇头坐标与食物相同 //就只伸长 else a_snake.contractsnake//没吃到食物就缩短一节 private void Form1_KeyDownobject senderKeyEventArgs e if e.KeyCode Keys.W ampamp a_snake.Way 2 a_snake.Way 0 if e.KeyCode Keys.D ampamp a_snake.Way 3 a_snake.Way 1 if e.KeyCode Keys.S ampamp a_snake.Way 0 a_snake.Way 2 if e.KeyCode Keys.A ampamp a_snake.Way 1 a_snake.Way 3 //设置 KeyDown 事件,用按件控制方向 public class segment//一节蛇类 private int number//私有成员 public int Number//一节蛇的编号 get return number set number value private Point orign public Point Orign//一节蛇的坐标 get return orign set orign value public void drawpa.