实例介绍
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //SnakeRedFood.TextChanged = new EventHandler(SnakeRedFood_TextChanged); } //定义变量 private int Number=1;// 贪吃蛇的关数 private int i;//蛇节数的索引值 private int Time = 1;//不同食物随时间的显示 private int Time2;//特殊事物现实的时间段 public int score = 0; //吃过食物后的得分 private int SnakeWidth = 12; //蛇的每个点的宽度 ri private bool flag = true;//用来防止重绘 private static int SnakeMaxLength = 5000; //蛇最大的长度 public Point[] SnakeLength = new Point[SnakeMaxLength]; public int SnakeLong; //蛇的长度 public Point FoodLength = new Point(); public int Direction = 2; //蛇爬行的方向,1:上,2:右,3:下,4:左 /// <summary> /// 定义一节蛇的坐标 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private Point orign; public Point Orign { get { return orign; } set { orign = value; } } /// <summary> /// 画一节蓝色的蛇身 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// public void drawpart(Graphics g) { Pen p = new Pen(Color.Red);//定义一个红色的画笔 SolidBrush brush1 = new SolidBrush(Color.Blue);//定义画刷 g.DrawRectangle(p, orign.X, orign.Y, 12, 12);//画红色巨型代表一节蛇 g.FillRectangle(brush1, orign.X, orign.Y, 12, 12); //用蓝色填充上面这个方块 } /// <summary> /// 画一节绿色的蛇头 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// public void drawparthead(Graphics g) { Pen p = new Pen(Color.Red);//定义一个红色的画笔 SolidBrush brush1 = new SolidBrush(Color.Green);//定义画刷 g.DrawRectangle(p, orign.X, orign.Y, 12, 12);//画红色矩形代表一节蛇 g.FillRectangle(brush1, orign.X, orign.Y, 12, 12); //用绿色填充上面这个方块 } //定义容器 private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (flag == false) return; else { pictureBox1.BackColor = Color.Black;//用黑色清除整个画面 Graphics g = e.Graphics; Forward(Direction); }//调用画蛇方法由方向转去画蛇 } //由键盘的上下左右键控制运动方向 protected override bool ProcessDialogKey(Keys keyData) { string key = keyData.ToString(); if ((keyData == Keys.Up || keyData == Keys.W) && Direction != 3) { Direction = 1; } if ((keyData == Keys.Right || keyData == Keys.D) && Direction != 4) { Direction = 2; } if ((keyData == Keys.Down || keyData == Keys.S) && Direction != 1) { Direction = 3; } if ((keyData == Keys.Left || keyData == Keys.A) && Direction != 2) { Direction = 4; } return base.ProcessDialogKey(keyData); } /// <summary> /// 由Direction:蛇的不同移动方向来画蛇 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private void Forward(int Direction)//Direction为蛇的移动方向 { Point a_Point = new Point(); a_Point.X = SnakeLength[0].X; a_Point.Y = SnakeLength[0].Y; for (int i = SnakeLong; i >=0; i--) { //蛇头动,把蛇头的坐标逐个后移(蛇身往蛇头方向位移) SnakeLength[i 1].X = SnakeLength[i].X; SnakeLength[i 1].Y = SnakeLength[i].Y; } switch (Direction) { //根据设置的方向,计算蛇头的坐标 case 1://如果方向向上x轴不变蛇头坐标向y轴负半轴移动12个坐标 SnakeLength[0].X = a_Point.X; SnakeLength[0].Y = a_Point.Y - SnakeWidth; break; //上 case 2://如果方向向右y轴不变蛇头坐标向x轴正半轴移动12个坐标 SnakeLength[0].X = a_Point.X SnakeWidth; SnakeLength[0].Y = a_Point.Y; break; //右 case 3://如果方向向下x轴不变蛇头坐标向y轴正半轴移动12个坐标 SnakeLength[0].X = a_Point.X; SnakeLength[0].Y = a_Point.Y SnakeWidth; break; //下 case 4://如果方向向右y轴不变蛇头坐标向x轴负半轴移动12个坐标 SnakeLength[0].X = a_Point.X - SnakeWidth; SnakeLength[0].Y = a_Point.Y; break; //左 } //具体去画蛇 System.Drawing.Graphics g; g = this.pictureBox1.CreateGraphics(); for (int i = 1; i <= SnakeLong; i ) { //转去逐个点画蛇 orign.X = SnakeLength[i].X; orign.Y = SnakeLength[i].Y; if (i == 1) { drawparthead(g);//画蛇头 } else { drawpart(g);//画蛇身 } } } /// <summary> ///检查随机产生的食物是否落到蛇身上 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// 假如落到蛇身上从新再落 private bool CheckSnakeBody() { for (int i = 0; i < SnakeLong; i ) { if (FoodLength.X == SnakeLength[i].X && FoodLength.Y == SnakeLength[i].Y)//检查食物坐标是否与蛇坐标重合 { return true;//如果返回值为真表明落到蛇身上则从新落 } } return false;//如果返回值为真表明没有落到蛇身上 } /// <summary> ////检查第一节蛇是否吃到自己 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private bool CheckInSnakeBody() { for (int i = 5; i < SnakeLong; i ) { if (SnakeLength[0].X == SnakeLength[i].X && SnakeLength[0].Y == SnakeLength[i].Y)//检查蛇头坐标是否与蛇身重合 { return true;//如果返回值为真表明吃到自己 } } return false;//否则没有 } /// <summary> ////是否吃到食物 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private bool Eated()//用于判断后边吃到食物与没有吃到两个时间的不同走法与不同食物的出现 { if (SnakeLength[0].X == FoodLength.X && SnakeLength[0].Y == FoodLength.Y)//假如吃到食物 { if (SnakeLong < SnakeMaxLength) { SnakeLong ;//长度增加 SnakeLength[SnakeLong].X = SnakeLength[SnakeLong - 1].X;//将其加到蛇的尾部 SnakeLength[SnakeLong].Y = SnakeLength[SnakeLong - 1].Y;//将其加到蛇的尾部 } if (Time % 11 == 0)//假如吃到时间是11的倍数的食物 分数增长20 score = 20; else if (Time % 23 == 0)//假如吃到时间是23的倍数的食物 分数增长30 score = 30; else if (Time % 35 == 0)//假如吃到时间是35的倍数的食物 分数增长40 score = 40; else score = 10;//否则一般食物都增长10 SnakeRedFood.Visible = false; SnakeYellowFood.Visible = false; SnakeGreenFood.Visible = false; SnakeWhiteFood.Visible = false; return true; } else return false; } /// <summary> /// 初始化 /// </summary> private void GameInit() { Array.Clear(SnakeLength, 0, SnakeLong);//把上一次蛇的节数清除重新绘制 SnakeLong = 3; //蛇的初始长度,3个点 for (int i = 2; i >= 0; i--) {//分别设置蛇每个点的坐标位置 SnakeLength[i].X = 0; SnakeLength[i].Y = 168; } Direction = 2;//蛇的初始方向是向右 } /// <summary> /// 速度 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> //速度最慢 private void btnSlowest_Click(object sender, EventArgs e) { if (Number == 1)//假如选择第1关 { timer1.Interval = 250;//时间间隔设为250 } if (Number == 2)//假如选择第2关 { timer2.Interval = 250;//时间间隔设为250 } if (Number == 3) { timer3.Interval = 250;//时间间隔设为250 } if (Number == 4) { timer4.Interval = 250;//时间间隔设为250 } if (Number == 5) { timer5.Interval = 250;//时间间隔设为250 } btnSlowest.Enabled = true; btnSlower.Enabled = true; btnOrdinary.Enabled = true; btnFaster.Enabled = true; btnFastest.Enabled = true; } //速度较慢 private void btnSlower_Click(object sender, EventArgs e) { if (Number == 1) { timer1.Interval = 200;//时间间隔设为200 } if (Number == 2) { timer2.Interval = 200;//时间间隔设为200 } if (Number == 3) { timer3.Interval = 200;//时间间隔设为200 } if (Number == 4) { timer4.Interval = 200;//时间间隔设为200 } if (Number == 5) { timer5.Interval = 200;//时间间隔设为200 } btnSlowest.Enabled = true; btnSlower.Enabled = true; btnOrdinary.Enabled = true; btnFaster.Enabled = true; btnFastest.Enabled = true; } //速度普通 private void btnOrdinary_Click(object sender, EventArgs e) { if (Number == 1)//假如选择第1关 { timer1.Interval = 120;//时间间隔设为120 } if (Number == 2)//假如选择第2关 { timer2.Interval = 120;//时间间隔设为120 } if (Number == 3)//假如选择第3关 { timer3.Interval = 120;//时间间隔设为120 } if (Number == 4)//假如选择第4关 { timer4.Interval = 120;//时间间隔设为120 } if (Number == 5)//假如选择第5关 { timer5.Interval = 120;//时间间隔设为120 } btnSlowest.Enabled = true; btnSlower.Enabled = true; btnOrdinary.Enabled = true; btnFaster.Enabled = true; btnFastest.Enabled = true; } //速度较快 private void btnFaster_Click(object sender, EventArgs e) { if (Number == 1)//假如选择第1关 { timer1.Interval = 60;//时间间隔设为60 } if (Number == 2)//假如选择第2关 { timer2.Interval = 60;//时间间隔设为60 } if (Number == 3)//假如选择第3关 { timer3.Interval = 60;//时间间隔设为60 } if (Number == 4)//假如选择第4关 { timer4.Interval = 60;//时间间隔设为250 } if (Number == 5)//假如选择第5关 { timer5.Interval = 60;//时间间隔设为60 } btnSlowest.Enabled = true; btnSlower.Enabled = true; btnOrdinary.Enabled = true; btnFaster.Enabled = true; btnFastest.Enabled = true; } //速度最快 private void btnFastest_Click(object sender, EventArgs e) { if (Number == 1) { timer1.Interval = 20;//时间间隔设为20 } if (Number == 2) { timer2.Interval = 20;//时间间隔设为20 } if (Number == 3) { timer3.Interval = 20;//时间间隔设为2 } if (Number == 4) { timer4.Interval = 20;//时间间隔设为20 } if (Number == 5) { timer5.Interval = 20;//时间间隔设为20 } btnSlowest.Enabled = true; btnSlower.Enabled = true; btnOrdinary.Enabled = true; btnFaster.Enabled = true; btnFastest.Enabled = true; } /// <summary> /// 点击按钮开始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void labStart_Click(object sender, EventArgs e) { switch (Number) { case 1: GameInit();//点击开始时初始化 timer1.Enabled = true; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; timer5.Enabled = false; btnTwo.Enabled = false; btnThree.Enabled = false; btnFour.Enabled = false; btnFive.Enabled = false; FoodOne();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true;//可以使用继续按钮 labPause.Enabled = true;//可以使用暂停按钮 Control.ControlCollection ccc = this.Controls; foreach (Control c in ccc) { if (c.Name.IndexOf("Barrier") > -1) { c.Visible = false; } } break; case 2: GameInit();//点击开始时初始化 timer1.Stop(); timer3.Stop(); timer4.Stop(); timer5.Stop(); timer2.Enabled = true; btnOne.Enabled = false; btnThree.Enabled = false; btnFour.Enabled = false; btnFive.Enabled = false; FoodTwo();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true;//可以使用继续按钮 labPause.Enabled = true;//可以使用暂停按钮 for (int i = 1; i <= 4; i ) { FindControl("Barrier" i.ToString()).Visible = false; } for (int i = 5; i <= 10; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 11; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } break; case 3: GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = true; timer4.Enabled = false; timer5.Enabled = false; btnOne.Enabled = false; btnTwo.Enabled = false; btnFour.Enabled = false; btnFive.Enabled = false; FoodThree();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; Barrier1.Visible = true; for (int i = 2; i <= 4; i ) { FindControl("Barrier" i.ToString()).Visible = false; } for (int i = 5; i <= 14; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 15; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } break; case 4: GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = true; timer5.Enabled = false; btnOne.Enabled = false; btnTwo.Enabled = false; btnThree.Enabled = false; btnFive.Enabled = false; FoodFour();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; for (int i = 1; i <= 17; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 18; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } break; case 5: GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; timer5.Enabled = true; btnOne.Enabled = false; btnTwo.Enabled = false; btnThree.Enabled = false; btnFour.Enabled = false; FoodFive();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; for (int i = 1; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = true; } break; } } //暂停 private void lbpause_Click(object sender, EventArgs e) { switch (Number)//选择不同的关 { case 1: timer1.Stop(); break; case 2: timer2.Stop(); break; case 3: timer3.Stop(); break; case 4: timer4.Stop(); break; case 5: timer5.Stop(); break; } } //继续 private void lbcontinue_Click(object sender, EventArgs e) { switch (Number)//在第几关运行时的暂停 { case 1: timer1.Start(); break; case 2: timer2.Start(); break; case 3: timer3.Start(); break; case 4: timer4.Start(); break; case 5: timer5.Start(); break; } } //结束 private void lbover_Click(object sender, EventArgs e) { this.Close(); } //帮助 private void lbHelp_Click(object sender, EventArgs e) { MessageBox.Show(" 贪食蛇游戏 \n" "操作方法:用方向键或W、A、S、D控制\n 上、下、左、右方向\n可以直接按开始键默认从第一关开始打通关 。" "\n 也可以选择关数" "\n游戏过程中可以选择速度 " , "帮助", MessageBoxButtons.OK, MessageBoxIcon.Information); } /// <summary> /// 查找对象 /// </summary> /// <param name="controlName"></param> /// <returns></returns> private Control FindControl(string controlName) { return this.Controls[controlName]; } private void labXianshi_Click(object sender, EventArgs e) { this.Text = score.ToString(); } /// <summary> /// 第一关 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private void btnOne_Click(object sender, EventArgs e) { Number = 1; //选择第一关 } /// <summary> /// 第一关的食物:不同时间不同食物的显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private void FoodOne() { Random a_Random = new Random(); //通过设置Label的位置来显示食物 int x, y;//x为食物的横坐标,y为食物的纵坐标 x = a_Random.Next(0, 48) * SnakeWidth;//产生x值为0-476 y = a_Random.Next(0, 34) * SnakeWidth;//产生y值0-408 Point Pit = new Point(); Pit.X = x; Pit.Y = y; if (Time % 11 == 0) //当Time走的时间是11的整数倍黄色食物显示 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = Pit; } else if (Time % 23 == 0) //当Time走的时间是23的整数倍绿色食物显示 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = Pit; } else if (Time % 35 == 0) //当Time走的时间是35的整数倍白色食物显示 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = Pit; } else //否则红色食物显示 { SnakeRedFood.Visible = true; SnakeRedFood.Location = Pit; } FoodLength.X = Pit.X; FoodLength.Y = Pit.Y; while (CheckSnakeBody())//转去判断食物坐标是否和法如果食物坐标不和法则重新产生 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(0, 34) * SnakeWidth; Point PitTwo = new Point(); PitTwo.X = x; PitTwo.Y = y; if (Time % 11 == 0) //当Time走的时间是11的整数倍黄色食物显示 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitTwo; } else if (Time % 23 == 0) //当Time走的时间是23的整数倍绿色食物显示 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitTwo; } else if (Time % 35 == 0)//当Time走的时间是35的整数倍白色食物显示 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitTwo; } else //否则红色食物显示 { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitTwo; } FoodLength.X = PitTwo.X; FoodLength.Y = PitTwo.Y; } } /// <summary> /// 检查第一关检查是否死亡 /// </summary> /// <returns></returns> private bool DeadOne() { //检查蛇是否咬到自己 if (CheckInSnakeBody()) { timer1.Stop(); return true; } //检查蛇是否撞到四周墙壁撞到食物死亡时蛇头坐标与墙壁相重合 if (SnakeLength[0].X > (this.pictureBox1.ClientSize.Width - 12) || SnakeLength[0].Y > (this.pictureBox1.ClientSize.Height - 12) || SnakeLength[0].X < 0 || SnakeLength[0].Y < 0) { timer1.Stop(); return true; } else return false; } //根据时间进行操作 private void timer1_Tick(object sender, EventArgs e) { System.Drawing.Graphics g; g = Graphics.FromHwnd(pictureBox1.Handle); g.Clear(Color.Black);//清除整个画面 Forward(Direction); //转去画蛇 if (Eated())//假如把食物吃了Time开始走如果时间是11倍数 23 35 特殊事物出现 { Time ; Time2 = 0; FoodOne(); } else { if (Time % 11 == 0)//当时间是11的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 50)//当Time2达到50时该食物结束 { SnakeYellowFood.Visible = false; Time ;//Time继续走 Time2 = 0;//因为没有特殊食物显示所以为0 FoodOne(); } } if (Time % 23 == 0)//当时间是23的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 40)//当Time2达到40时该食物结束 { SnakeGreenFood.Visible = false; Time ; Time2 = 0;//Time继续走 FoodOne(); } } if (Time % 35 == 0)//当时间是35的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 30)//当Time2达到30时该食物结束 { SnakeWhiteFood.Visible = false; Time ; Time2 = 0;//Time继续走 FoodOne(); } } } this.labXianshi.Text = "当前得分" score.ToString(); if (DeadOne())//假如死亡 { timer1.Enabled = false;//第一关的时间禁用 labStart.Enabled = true;//可以使用/开始按钮 labContinue.Enabled = false;//不可以使用继续按钮 labPause.Enabled = false;//不可以使用暂停按钮 btnTwo.Enabled = true; btnThree.Enabled = true; btnFour.Enabled = true; btnFive.Enabled = true; MessageBox.Show("哎呦!疼死我啦!" "\n你个笨蛋才得了" score "分"); this.score = 0;//从新设定分数 } if (score == 700)//假如第一关得到一定的分数进入第二关 { Number = 2; score = 0;//进入第二关时分数清零 System.Drawing.Graphics m; m= Graphics.FromHwnd(pictureBox1.Handle); m.Clear(Color.Black);//清除整个画面 timer1.Enabled = false; Form2 ff = new Form2();//实例化另一个窗体2 ff.Show();//让窗体显示特定的图形 System.Threading.Thread.Sleep(3000);//让窗体暂停3秒 timer1.Enabled = true; ff.Close();//窗体结束 GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = true; timer3.Enabled = false; timer4.Enabled = false; timer5.Enabled = false; FoodTwo();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true;//可以使用继续按钮 labPause.Enabled = true;//可以使用暂停按钮 //foreach(Control ctl in this.Controls) //{ //System.Windows.Forms.Panel pal =ctl as Panel; //if(pal !=null) //{ //pal.Visible = false; //} //} //for(int i=1;i<=33;i ) //{ // if(i>=1&&i<=5) // { // FindControl("Barrier" i.ToString()).Visible=false; // } //} for (int i = 1; i <= 4; i ) { FindControl("Barrier" i.ToString()).Visible = false; } for (int i = 5; i <= 10; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 11; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } } } /// <summary> /// 第二关用到的方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// //选关中的按钮2 private void btnTwo_Click(object sender, EventArgs e) { Number = 2; } /// <summary> /// 显示普通食物 /// </summary> private void FoodTwo()//第二管的食物显示 { Random a_Random = new Random(); //通过设置Label的位置来显示食物 int x, y;//x为食物的横坐标,y为食物的纵坐标 x = a_Random.Next(0, 48) * SnakeWidth;//产生x值为0-660 y = a_Random.Next(0, 34) * SnakeWidth;//产生y值0-456 Point Pit = new Point(); Pit.X = x; Pit.Y = y; if (Time % 11 == 0)//当时间是11的整数倍黄色食物显示 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = Pit; } else if (Time % 23 == 0)//当时间是23的整数倍黄色食物显示 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = Pit; } else if (Time % 35 == 0)//当时间是35的整数倍黄色食物显示 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = Pit; } else//否则红色食物显示 { SnakeRedFood.Visible = true; SnakeRedFood.Location = Pit; } FoodLength.X = Pit.X; FoodLength.Y = Pit.Y; while (CheckSnakeBody() || CheckFoodBarrierTwo())//转去判断食物坐标是否和法判断是否落到蛇身上和障碍物上 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(2, 34) * SnakeWidth;//如果食物坐标不和法则重新产生 Point PitTwo = new Point(); PitTwo.X = x; PitTwo.Y = y; if (Time % 11 == 0) //当时间是11的整数倍黄色食物显示 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitTwo; } else if (Time % 23 == 0)//当时间是23的整数倍黄色食物显示 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitTwo; } else if (Time % 35 == 0) //当时间是35的整数倍黄色食物显示 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitTwo; } else//否则红色食物显示 { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitTwo; } FoodLength.X = PitTwo.X; FoodLength.Y = PitTwo.Y; } } /// <summary> /// 检查第二关的蛇是否死亡 /// </summary> /// <returns></returns> private bool DeadTwo() { //检查蛇是否咬到自己 if (CheckInSnakeBody()) { timer2.Stop(); return true; } //检查蛇是否撞到障碍物 if (CheckSnakeBarrierTwo()) { //timer2.Stop(); return true; } //检查蛇是否撞到四周墙壁 if (SnakeLength[0].X > (this.pictureBox1.ClientSize.Width - 12) || SnakeLength[0].Y > (this.pictureBox1.ClientSize.Height - 12) || SnakeLength[0].X < 0 || SnakeLength[0].Y < 0) { timer2.Stop(); return true; } else return false; } /// <summary> /// 检查蛇头是否z撞到障碍物上 /// </summary> /// <returns></returns> private bool CheckSnakeBarrierTwo() { //第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 for (i = 0; i < 14; i ) { if ((SnakeLength[0].X == Barrier5.Location.X) && (SnakeLength[0].Y == Barrier5.Location.Y i * 12)) { return true;//如果返回值为真则代表落到上面 返回去从新生成 } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的18倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier6.Location.X i * 12) && (SnakeLength[0].Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier7.Location.X) && (SnakeLength[0].Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的18倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier8.Location.X i * 12) && (SnakeLength[0].Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的8倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier9.Location.X i * 12) && (SnakeLength[0].Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的8倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier10.Location.X i * 12) && (SnakeLength[0].Y == Barrier10.Location.Y)) { return true; } } return false; } /// <summary> /// 判断食物坐标是否落到障碍物上 /// </summary> /// <returns></returns> private bool CheckFoodBarrierTwo() { System.Threading.Thread.Sleep(100); //第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 for (i = 0; i < 14; i ) { if ((FoodLength.X == Barrier5.Location.X) && (FoodLength.Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) //第一个障碍物的长度是12的18倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier6.Location.X i * 12) && (FoodLength.Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i ) //第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier7.Location.X) && (FoodLength.Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) //第一个障碍物的长度是12的14倍将其分割成18个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier8.Location.X i * 12) && (FoodLength.Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i ) //第一个障碍物的长度是12的14倍将其分割成8个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier9.Location.X i * 12) && (FoodLength.Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i ) //第一个障碍物的长度是12的14倍将其分割成8个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier10.Location.X i * 12) && (FoodLength.Y == Barrier10.Location.Y)) { return true; } } return false; } /// <summary> /// 根据时间进行操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer2_Tick_1(object sender, EventArgs e) { System.Drawing.Graphics g; g = Graphics.FromHwnd(pictureBox1.Handle); g.Clear(Color.Black);//清除整个画 面 Forward(Direction); //转去画蛇 if (Eated())//假如把食物吃了Time开始走如果时间是11倍数 23 35 特殊事物出现 { Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodTwo(); } else { if (Time % 11 == 0)//当时间是11的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 50) { SnakeYellowFood.Visible = false; Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodTwo(); } } if (Time % 23 == 0)//当时间是23的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 40) { SnakeGreenFood.Visible = false; Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodTwo(); } } if (Time % 35 == 0)//当时间是35的整数倍 { Time2 ;//特殊食物出现后Time2记录这种食物产生的时间 if (Time2 == 30) { SnakeWhiteFood.Visible = false; Time ; Time2 = 0; FoodTwo(); } } } this.labXianshi.Text = "当前得分" score.ToString(); if (DeadTwo()) { timer2.Stop(); labStart.Enabled = true;//可以使用/开始按钮 labContinue.Enabled = false; labPause.Enabled = false; btnOne.Enabled = true; btnThree.Enabled = true; btnFour.Enabled = true; btnFive.Enabled = true; MessageBox.Show("哎呦!疼死我啦!" "\n你个笨蛋才得了" score "分"); this.score = 0; flag = false; return; } if (score == 70) { Number = 3; score = 0; System.Drawing.Graphics m; m = Graphics.FromHwnd(pictureBox1.Handle); m.Clear(Color.Black);//清除整个画面 Form3 ff = new Form3();//此时调用另一个窗口对其实例化 ff.Show();//窗口显示图片 System.Threading.Thread.Sleep(3000);//让其停留3秒 ff.Close();//窗口结束 GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = true; timer4.Enabled = false; timer5.Enabled = false; FoodThree();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; Barrier1.Visible = true; for (int i = 2; i <= 4; i ) { FindControl("Barrier" i.ToString()).Visible = false; } for (int i = 5; i <= 14; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 15; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } } } /// <summary> /// 第三关用到的方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// //选关中的按钮3 private void btnThree_Click(object sender, EventArgs e) { Number = 3; } //显示普通食物 private void FoodThree() { Random a_Random = new Random(); //通过设置Label的位置来显示食物 int x, y;//x为食物的横坐标,y为食物的纵坐标 x = a_Random.Next(0, 48) * SnakeWidth;//产生x值为0-576 y = a_Random.Next(0, 34) * SnakeWidth;//产生y值0-408 Point Pit = new Point(); Pit.X = x; Pit.Y = y; if (Time % 11 == 0)//当时间是11的整数倍 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = Pit; } else if (Time % 23 == 0)//当时间是23的整数倍 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = Pit; } else if (Time % 35 == 0)//当时间是35的整数倍 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = Pit; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = Pit; } FoodLength.X = Pit.X; FoodLength.Y = Pit.Y; while (CheckSnakeBody() || CheckFoodBarrierThree())//转去判断食物坐标是否和法 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(0, 34) * SnakeWidth;//如果食物坐标不和法则重新产生 Point PitTwo = new Point(); PitTwo.X = x; PitTwo.Y = y; if (Time % 11 == 0)//当时间是11的整数倍 { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitTwo; } else if (Time % 23 == 0)//当时间是23的整数倍 { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitTwo; } else if (Time % 35 == 0) //当时间是35的整数倍 { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitTwo; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitTwo; } FoodLength.X = PitTwo.X; FoodLength.Y = PitTwo.Y; } } /// <summary> /// 是否死亡 /// </summary> /// <returns></returns> private bool DeadThree()//是否死亡 { //检查蛇是否咬到自己 if (CheckInSnakeBody()) { timer3.Stop(); return true; } //检查蛇是否撞到障碍物 if (CheckSnakeBarrierThree()) { timer3.Stop(); return true; } //检查蛇是否撞到四周墙壁 if (SnakeLength[0].X > (this.pictureBox1.ClientSize.Width - 12) || SnakeLength[0].Y > (this.pictureBox1.ClientSize.Height - 12) || SnakeLength[0].X < 0 || SnakeLength[0].Y < 0) { timer3.Stop(); return true; } else return false; } /// <summary> /// 检查蛇头是否撞到第三关障碍物上 /// </summary> /// <returns></returns> private bool CheckSnakeBarrierThree() { for (i = 0; i < 28; i ) //第一个障碍物的长度是12的28倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier1.Location.X) && (SnakeLength[0].Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 14; i ) //第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier5.Location.X) && (SnakeLength[0].Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) //第一个障碍物的长度是12的18倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier6.Location.X i * 12) && (SnakeLength[0].Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i ) //第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier7.Location.X) && (SnakeLength[0].Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) //第一个障碍物的长度是12的18倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier8.Location.X i * 12) && (SnakeLength[0].Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i ) //第一个障碍物的长度是12的8倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier9.Location.X i * 12) && (SnakeLength[0].Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i ) //第一个障碍物的长度是12的8倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier10.Location.X i * 12) && (SnakeLength[0].Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i ) //第一个障碍物的长度是12的11倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier11.Location.X i * 12) && (SnakeLength[0].Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i ) //第一个障碍物的长度是12的12倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier12.Location.X i * 12) && (SnakeLength[0].Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i ) //第一个障碍物的长度是12的11倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier13.Location.X i * 12) && (SnakeLength[0].Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i ) //第一个障碍物的长度是12的9倍将其分割成14个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier14.Location.X) && (SnakeLength[0].Y == Barrier14.Location.Y i * 12)) { return true; } } return false; } /// <summary> /// 判断食物坐标是否落到第三关障碍物上 /// </summary> /// <returns></returns> private bool CheckFoodBarrierThree() { System.Threading.Thread.Sleep(100); for (i = 0; i < 28; i )//第一个障碍物的长度是12的28倍将其分割成28个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier1.Location.X) && (FoodLength.Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的14倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier5.Location.X) && (FoodLength.Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的18倍将其分割成14个长为14的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier6.Location.X i * 12) && (FoodLength.Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的14倍将其分割成14个长为14的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier7.Location.X) && (FoodLength.Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的18倍将其分割成18个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier8.Location.X i * 12) && (FoodLength.Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的8倍将其分割成14个长为8的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier9.Location.X i * 12) && (FoodLength.Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的8倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier10.Location.X i * 12) && (FoodLength.Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的11倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier11.Location.X i * 12) && (FoodLength.Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i )//第一个障碍物的长度是12的12倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier12.Location.X i * 12) && (FoodLength.Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的11倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier13.Location.X i * 12) && (FoodLength.Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i )//第一个障碍物的长度是12的19倍将其分割成14个长为12的矩形分别判断食物是否落到各个小矩形上如果落到从新生成 { if ((FoodLength.X == Barrier14.Location.X) && (FoodLength.Y == Barrier14.Location.Y i * 12)) { return true; } } return false; } //根据时间进行操作 private void timer3_Tick_1(object sender, EventArgs e) { System.Drawing.Graphics g; g = Graphics.FromHwnd(pictureBox1.Handle); g.Clear(Color.Black);//清除整个画面 Forward(Direction); //转去画蛇 if (Eated())//假如把食物吃了Time开始走如果时间是11倍数 23 35 特殊事物出现 { Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodThree(); } else { if (Time % 11 == 0) { Time2 ; if (Time2 == 50) { SnakeYellowFood.Visible = false; Time ; Time2 = 0; FoodThree(); } } if (Time % 23 == 0) { Time2 ; if (Time2 == 40) { SnakeGreenFood.Visible = false; Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodThree(); } } if (Time % 35 == 0) { Time2 ; if (Time2 == 30) { SnakeWhiteFood.Visible = false; Time ; Time2 = 0;//因为没有特殊食物Time2显示所以为0,Time继续走 FoodThree(); } } } this.labXianshi.Text = "当前得分" score.ToString(); if (DeadThree()) { timer3.Enabled = false; labStart.Enabled = true;//可以使用/开始按钮 labContinue.Enabled = false; labPause.Enabled = false; btnTwo.Enabled = true; btnOne.Enabled = true; btnFour.Enabled = true; btnFive.Enabled = true; flag = false; MessageBox.Show("哎呦!疼死我啦!" "\n你个笨蛋才得了" score "分"); this.score = 0; } if (score == 700) { Number = 4; score = 0; System.Drawing.Graphics m; m = Graphics.FromHwnd(pictureBox1.Handle); m.Clear(Color.Black);//清除整个画面 Form4 ff = new Form4();//调用另一个窗口 ff.Show();//显示图片 System.Threading.Thread.Sleep(3000); ff.Close();//关闭窗口 GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = true; timer5.Enabled = false; FoodFour();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; for (int i = 1; i <= 17; i ) { FindControl("Barrier" i.ToString()).Visible = true; } for (int i = 18; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = false; } } } /// <summary> /// 第四关用到的方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// //选关中的按钮4 private void button8_Click_1(object sender, EventArgs e) { Number = 4; } /// <summary> /// 显示第四关普通食物 /// </summary> private void FoodFour() { Random a_Random = new Random(); //通过设置Label的位置来显示食物 int x, y;//x为食物的横坐标,y为食物的纵坐标 x = a_Random.Next(0, 48) * SnakeWidth;//产生x值为0-660 y = a_Random.Next(0, 34) * SnakeWidth;//产生y值0-456 Point Pit = new Point(); Pit.X = x; Pit.Y = y; if (Time % 11 == 0) { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = Pit; } else if (Time % 23 == 0) { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = Pit; } else if (Time % 35 == 0) { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = Pit; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = Pit; } FoodLength.X = Pit.X; FoodLength.Y = Pit.Y; while (CheckSnakeBody())//转去判断食物坐标是否和法 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(0, 34) * SnakeWidth;//如果食物坐标不和法则重新产生 Point PitTwo = new Point(); PitTwo.X = x; PitTwo.Y = y; if (Time % 11 == 0) { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitTwo; } else if (Time % 23 == 0) { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitTwo; } else if (Time % 35 == 0) { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitTwo; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitTwo; } FoodLength.X = PitTwo.X; FoodLength.Y = PitTwo.Y; } while (CheckFoodBarrierFour())//转去判断食物坐标是否和法 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(0, 34) * SnakeWidth;//如果食物坐标不和法则重新产生 Point PitThree = new Point(); PitThree.X = x; PitThree.Y = y; if (Time % 11 == 0) { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitThree; } else if (Time % 23 == 0) { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitThree; } else if (Time % 35 == 0) { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitThree; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitThree; } FoodLength.X = PitThree.X; FoodLength.Y = PitThree.Y; } } /// <summary> /// 是否死亡 /// </summary> /// <returns></returns> private bool DeadFour()//是否死亡 { //检查蛇是否咬到自己 if (CheckInSnakeBody()) { timer4.Stop(); return true; } //检查蛇是否撞到障碍物 if (CheckSnakeBarrierFour()) { timer4.Stop(); return true; } //检查蛇是否撞到四周墙壁 if (SnakeLength[0].X > (this.pictureBox1.ClientSize.Width - 12) || SnakeLength[0].Y > (this.pictureBox1.ClientSize.Height - 12) || SnakeLength[0].X < 0 || SnakeLength[0].Y < 0) { timer4.Stop(); return true; } else return false; } /// <summary> /// 检查蛇头是否撞到第四关障碍物上 /// </summary> /// <returns></returns> private bool CheckSnakeBarrierFour() { for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier1.Location.X) && (SnakeLength[0].Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 39; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier2.Location.X i*12) && (SnakeLength[0].Y == Barrier2.Location.Y )) { return true; } } for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier3.Location.X) && (SnakeLength[0].Y == Barrier3.Location.Y i * 12)) { return true; } } for (i = 0; i < 31; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier4.Location.X i * 12) && (SnakeLength[0].Y == Barrier4.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier5.Location.X) && (SnakeLength[0].Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier6.Location.X i * 12) && (SnakeLength[0].Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier7.Location.X) && (SnakeLength[0].Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier8.Location.X i * 12) && (SnakeLength[0].Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier9.Location.X i * 12) && (SnakeLength[0].Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier10.Location.X i * 12) && (SnakeLength[0].Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier11.Location.X i * 12) && (SnakeLength[0].Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier12.Location.X i * 12) && (SnakeLength[0].Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier13.Location.X i * 12) && (SnakeLength[0].Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier14.Location.X) && (SnakeLength[0].Y == Barrier14.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier15.Location.X) && (SnakeLength[0].Y == Barrier15.Location.Y i * 12)) { return true; } } for (i = 0; i < 5; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier16.Location.X i * 12) && (SnakeLength[0].Y == Barrier16.Location.Y)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断蛇头是否否与各个小矩形相撞 { if ((SnakeLength[0].X == Barrier17.Location.X) && (SnakeLength[0].Y == Barrier17.Location.Y i * 12)) { return true; } } return false; } /// <summary> /// 判断食物坐标是否落到第四关障碍物上 /// </summary> /// <returns></returns> private bool CheckFoodBarrierFour() { System.Threading.Thread.Sleep(100); for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier1.Location.X) && (FoodLength.Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 39; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier2.Location.X i*12) && (FoodLength.Y == Barrier2.Location.Y)) { return true; } } for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier3.Location.X) && (FoodLength.Y == Barrier3.Location.Y i * 12)) { return true; } } for (i = 0; i < 31; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier4.Location.X i * 12) && (FoodLength.Y == Barrier4.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier5.Location.X) && (FoodLength.Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier6.Location.X i * 12) && (FoodLength.Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier7.Location.X) && (FoodLength.Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier8.Location.X i * 12) && (FoodLength.Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier9.Location.X i * 12) && (FoodLength.Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier10.Location.X i * 12) && (FoodLength.Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier11.Location.X i * 12) && (FoodLength.Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier12.Location.X i * 12) && (FoodLength.Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier13.Location.X i * 12) && (FoodLength.Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier14.Location.X) && (FoodLength.Y == Barrier14.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier15.Location.X) && (FoodLength.Y == Barrier15.Location.Y i * 12)) { return true; } } for (i = 0; i < 5; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier16.Location.X i * 12) && (FoodLength.Y == Barrier16.Location.Y)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier17.Location.X) && (FoodLength.Y == Barrier17.Location.Y i * 12)) { return true; } } return false; } //根据时间进行操作 private void timer4_Tick(object sender, EventArgs e) { System.Drawing.Graphics g; g = Graphics.FromHwnd(pictureBox1.Handle); g.Clear(Color.Black);//清除整个画面 Forward(Direction); //转去画蛇 if (Eated())//假如把食物吃了Time开始走如果时间是11倍数 23 35 特殊事物出现 { Time ; Time2 = 0; FoodFour(); } else { if (Time % 11 == 0) { Time2 ; if (Time2 == 50) { SnakeYellowFood.Visible = false; Time ; Time2 = 0; FoodFour(); } } if (Time % 23 == 0) { Time2 ; if (Time2 == 40) { SnakeGreenFood.Visible = false; Time ; Time2 = 0; FoodFour(); } } if (Time % 35 == 0) { Time2 ; if (Time2 == 30) { SnakeWhiteFood.Visible = false; Time ; Time2 = 0; FoodFour(); } } } this.labXianshi.Text = "当前得分" score.ToString(); if (DeadFour()) { timer4.Enabled = false; labStart.Enabled = true;//可以使用/开始按钮 labContinue.Enabled = false; labPause.Enabled = false; btnTwo.Enabled = true; btnThree.Enabled = true; btnOne.Enabled = true; btnFive.Enabled = true; flag = false; MessageBox.Show("哎呦!疼死我啦!" "\n你个笨蛋才得了" score "分"); this.score = 0; } if (score == 700) { Number = 5; score = 0; System.Drawing.Graphics m; m = Graphics.FromHwnd(pictureBox1.Handle); m.Clear(Color.Black);//清除整个画面 Form5 ff = new Form5(); ff.Show(); System.Threading.Thread.Sleep(3000); ff.Close(); GameInit();//点击开始时初始化 timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; timer5.Enabled = true; FoodFive();//显示食物 Forward(Direction); //转去画蛇 labStart.Enabled = false; //无法使用开始按钮 labContinue.Enabled = true; labPause.Enabled = true; for (int i = 1; i <= 33; i ) { FindControl("Barrier" i.ToString()).Visible = true; } } } /// <summary> /// 第五关用到的方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// //选关中的按钮5 private void button10_Click_1(object sender, EventArgs e) { Number = 5; } /// <summary> /// 显示普通食物 /// </summary> private void FoodFive() { Random a_Random = new Random(); //通过设置Label的位置来显示食物 int x, y;//x为食物的横坐标,y为食物的纵坐标 x = a_Random.Next(0, 48) * SnakeWidth;//产生x值为 y = a_Random.Next(0, 34) * SnakeWidth;//产生y值0 Point Pit = new Point(); Pit.X = x; Pit.Y = y; if (Time % 11 == 0) { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = Pit; } else if (Time % 23 == 0) { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = Pit; } else if (Time % 35 == 0) { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = Pit; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = Pit; } FoodLength.X = Pit.X; FoodLength.Y = Pit.Y; while (CheckSnakeBody() || CheckFoodBarrierFive())//转去判断食物坐标是否和法 { x = a_Random.Next(0, 48) * SnakeWidth; y = a_Random.Next(0, 33) * SnakeWidth;//如果食物坐标不和法则重新产生 Point PitTwo = new Point(); PitTwo.X = x; PitTwo.Y = y; if (Time % 11 == 0) { SnakeYellowFood.Visible = true; SnakeYellowFood.Location = PitTwo; } else if (Time % 23 == 0) { SnakeGreenFood.Visible = true; SnakeGreenFood.Location = PitTwo; } else if (Time % 35 == 0) { SnakeWhiteFood.Visible = true; SnakeWhiteFood.Location = PitTwo; } else { SnakeRedFood.Visible = true; SnakeRedFood.Location = PitTwo; } FoodLength.X = PitTwo.X; FoodLength.Y = PitTwo.Y; } } /// <summary> /// 是否死亡 /// </summary> /// <returns></returns> private bool DeadFive()//是否死亡 { //检查蛇是否咬到自己 if (CheckInSnakeBody()) { timer5.Stop(); return true; } //检查蛇是否撞到障碍物 if (CheckSnakeBarrierFive()) { timer5.Stop(); return true; } //检查蛇是否撞到五周墙壁 if (SnakeLength[0].X > (this.pictureBox1.ClientSize.Width - 12) || SnakeLength[0].Y > (this.pictureBox1.ClientSize.Height - 12) || SnakeLength[0].X < 0 || SnakeLength[0].Y < 0) { timer5.Stop(); return true; } else return false; } /// <summary> /// 检查蛇头是否撞到第五关障碍物上 /// </summary> /// <returns></returns> private bool CheckSnakeBarrierFive() { for (i = 0; i < 28; i ) { if ((SnakeLength[0].X == Barrier1.Location.X) && (SnakeLength[0].Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 39; i ) { if ((SnakeLength[0].X == Barrier2.Location.X i * 12) && (SnakeLength[0].Y == Barrier2.Location.Y)) { return true; } } for (i = 0; i < 28; i ) { if ((SnakeLength[0].X == Barrier3.Location.X) && (SnakeLength[0].Y == Barrier3.Location.Y i * 12)) { return true; } } for (i = 0; i < 31; i ) { if ((SnakeLength[0].X == Barrier4.Location.X i * 12) && (SnakeLength[0].Y == Barrier4.Location.Y)) { return true; } } for (i = 0; i < 14; i ) { if ((SnakeLength[0].X == Barrier5.Location.X) && (SnakeLength[0].Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) { if ((SnakeLength[0].X == Barrier6.Location.X i * 12) && (SnakeLength[0].Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i ) { if ((SnakeLength[0].X == Barrier7.Location.X) && (SnakeLength[0].Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i ) { if ((SnakeLength[0].X == Barrier8.Location.X i * 12) && (SnakeLength[0].Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i ) { if ((SnakeLength[0].X == Barrier9.Location.X i * 12) && (SnakeLength[0].Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i ) { if ((SnakeLength[0].X == Barrier10.Location.X i * 12) && (SnakeLength[0].Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i ) { if ((SnakeLength[0].X == Barrier11.Location.X i * 12) && (SnakeLength[0].Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i ) { if ((SnakeLength[0].X == Barrier12.Location.X i * 12) && (SnakeLength[0].Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i ) { if ((SnakeLength[0].X == Barrier13.Location.X i * 12) && (SnakeLength[0].Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i ) { if ((SnakeLength[0].X == Barrier14.Location.X) && (SnakeLength[0].Y == Barrier14.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier15.Location.X) && (SnakeLength[0].Y == Barrier15.Location.Y i * 12)) { return true; } } for (i = 0; i < 5; i ) { if ((SnakeLength[0].X == Barrier16.Location.X i * 12) && (SnakeLength[0].Y == Barrier16.Location.Y)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier17.Location.X) && (SnakeLength[0].Y == Barrier17.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier18.Location.X) && (SnakeLength[0].Y == Barrier18.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier19.Location.X i * 12) && (SnakeLength[0].Y == Barrier19.Location.Y)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier20.Location.X) && (SnakeLength[0].Y == Barrier20.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i ) { if ((SnakeLength[0].X == Barrier21.Location.X i * 12) && (SnakeLength[0].Y == Barrier21.Location.Y)) { return true; } } for (i = 0; i < 3; i ) { if ((SnakeLength[0].X == Barrier22.Location.X) && (SnakeLength[0].Y == Barrier22.Location.Y i * 12)) { return true; } } for (i = 0; i < 3; i ) { if ((SnakeLength[0].X == Barrier23.Location.X) && (SnakeLength[0].Y == Barrier23.Location.Y i * 12)) { return true; } } for (i = 0; i < 7; i ) { if ((SnakeLength[0].X == Barrier24.Location.X i * 12) && (SnakeLength[0].Y == Barrier24.Location.Y)) { return true; } } for (i = 0; i < 7; i ) { if ((SnakeLength[0].X == Barrier25.Location.X i * 12) && (SnakeLength[0].Y == Barrier25.Location.Y)) { return true; } } for (i = 0; i < 3; i ) { if ((SnakeLength[0].X == Barrier26.Location.X) && (SnakeLength[0].Y == Barrier26.Location.Y i * 12)) { return true; } } for (i = 0; i < 3; i ) { if ((SnakeLength[0].X == Barrier27.Location.X) && (SnakeLength[0].Y == Barrier27.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i ) { if ((SnakeLength[0].X == Barrier28.Location.X) && (SnakeLength[0].Y == Barrier28.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i ) { if ((SnakeLength[0].X == Barrier29.Location.X) && (SnakeLength[0].Y == Barrier29.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i ) { if ((SnakeLength[0].X == Barrier30.Location.X) && (SnakeLength[0].Y == Barrier30.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i ) { if ((SnakeLength[0].X == Barrier31.Location.X) && (SnakeLength[0].Y == Barrier31.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i ) { if ((SnakeLength[0].X == Barrier32.Location.X) && (SnakeLength[0].Y == Barrier32.Location.Y i * 12)) { return true; } } for (i = 0; i < 8; i ) { if ((SnakeLength[0].X == Barrier33.Location.X) && (SnakeLength[0].Y == Barrier33.Location.Y i * 12)) { return true; } } return false; } /// <summary> /// 判断食物坐标是否落到第五关障碍物上 /// </summary> /// <returns></returns> private bool CheckFoodBarrierFive() { System.Threading.Thread.Sleep(100); for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier1.Location.X) && (FoodLength.Y == Barrier1.Location.Y i * 12)) { return true; } } for (i = 0; i < 39; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier2.Location.X i * 12) && (FoodLength.Y == Barrier2.Location.Y )) { return true; } } for (i = 0; i < 28; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier3.Location.X) && (FoodLength.Y == Barrier3.Location.Y i * 12)) { return true; } } for (i = 0; i < 31; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier4.Location.X i * 12) && (FoodLength.Y == Barrier4.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier5.Location.X) && (FoodLength.Y == Barrier5.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier6.Location.X i * 12) && (FoodLength.Y == Barrier6.Location.Y)) { return true; } } for (i = 0; i < 14; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier7.Location.X) && (FoodLength.Y == Barrier7.Location.Y i * 12)) { return true; } } for (i = 0; i < 18; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier8.Location.X i * 12) && (FoodLength.Y == Barrier8.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier9.Location.X i * 12) && (FoodLength.Y == Barrier9.Location.Y)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier10.Location.X i * 12) && (FoodLength.Y == Barrier10.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier11.Location.X i * 12) && (FoodLength.Y == Barrier11.Location.Y)) { return true; } } for (i = 0; i < 12; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier12.Location.X i * 12) && (FoodLength.Y == Barrier12.Location.Y)) { return true; } } for (i = 0; i < 11; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier13.Location.X i * 12) && (FoodLength.Y == Barrier13.Location.Y)) { return true; } } for (i = 0; i < 9; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier14.Location.X) && (FoodLength.Y == Barrier14.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier15.Location.X) && (FoodLength.Y == Barrier15.Location.Y i * 12)) { return true; } } for (i = 0; i < 5; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier16.Location.X i * 12) && (FoodLength.Y == Barrier16.Location.Y)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier17.Location.X) && (FoodLength.Y == Barrier17.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier18.Location.X) && (FoodLength.Y == Barrier18.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier19.Location.X i * 12) && (FoodLength.Y == Barrier19.Location.Y)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier20.Location.X) && (FoodLength.Y == Barrier20.Location.Y i * 12)) { return true; } } for (i = 0; i < 4; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier21.Location.X i * 12) && (FoodLength.Y == Barrier21.Location.Y)) { return true; } } for (i = 0; i < 3; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier22.Location.X) && (FoodLength.Y == Barrier22.Location.Y i * 12)) { return true; } } for (i = 0; i < 3; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier23.Location.X) && (FoodLength.Y == Barrier23.Location.Y i * 12)) { return true; } } for (i = 0; i < 7; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier24.Location.X i * 12) && (FoodLength.Y == Barrier24.Location.Y)) { return true; } } for (i = 0; i < 7; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier25.Location.X i * 12) && (FoodLength.Y == Barrier25.Location.Y)) { return true; } } for (i = 0; i < 3; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier26.Location.X) && (FoodLength.Y == Barrier26.Location.Y i * 12)) { return true; } } for (i = 0; i < 3; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier27.Location.X) && (FoodLength.Y == Barrier27.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier28.Location.X) && (FoodLength.Y == Barrier28.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier29.Location.X) && (FoodLength.Y == Barrier29.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier30.Location.X) && (FoodLength.Y == Barrier30.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier31.Location.X) && (FoodLength.Y == Barrier31.Location.Y i * 12)) { return true; } } for (i = 0; i < 1; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier32.Location.X) && (FoodLength.Y == Barrier32.Location.Y i * 12)) { return true; } } for (i = 0; i < 8; i )//第一个障碍物的长度是12的整数倍将其分割成整数个长为12的矩形分别判断食物是否落到各个小矩形上 { if ((FoodLength.X == Barrier33.Location.X) && (FoodLength.Y == Barrier33.Location.Y i * 12)) { return true; } } return false; } //根据时间进行操作 private void timer5_Tick(object sender, EventArgs e) { System.Drawing.Graphics g; g = Graphics.FromHwnd(pictureBox1.Handle); g.Clear(Color.Black);//清除整个画面 Forward(Direction); //转去画蛇 if (Eated())//假如把食物吃了Time开始走如果时间是11倍数 23 35 特殊事物出现 { Time ; Time2 = 0; FoodFive(); } else { if (Time % 11 == 0) { Time2 ; if (Time2 == 50) { SnakeYellowFood.Visible = false; Time ; Time2 = 0; FoodFive(); } } if (Time % 23 == 0) { Time2 ; if (Time2 == 40) { SnakeGreenFood.Visible = false; Time ; Time2 = 0; FoodFive(); } } if (Time % 35 == 0) { Time2 ; if (Time2 == 30) { SnakeWhiteFood.Visible = false; Time ; Time2 = 0; } } } this.labXianshi.Text = "当前得分" score.ToString(); if (DeadFive()) { timer5.Enabled = false; labStart.Enabled = true;//可以使用/开始按钮 labContinue.Enabled = false; labPause.Enabled = false; btnTwo.Enabled = true; btnThree.Enabled = true; btnFour.Enabled = true; btnOne.Enabled = true; flag = false; MessageBox.Show("哎呦!疼死我啦!" "\n你个笨蛋才得了" score "分"); this.score = 0; } } } }
标签: 贪吃蛇
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论