Greedy Snake-code
闲着晚上,写个贪吃蛇吧,冗余的界面功能没时间做啦,就写个主面板的内容吧。
比较简单,talk waste time, show code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using static MyGreedySnake.Direction; namespace MyGreedySnake { public partial class Form1 : Form { private int difficultLevel =0; static MDirection direction = Direction.MDirection.right; static bool gameover = false; private BasicBlock food; private BasicBlock head; private List<BasicBlock> bodies = new List<BasicBlock>(); BasicPane pane; List<Image> headImgs = new List<Image>(); ThreadStart threadStart = null; Thread thread = null; public Form1() { InitializeComponent(); pane = new BasicPane(); this.Controls.Add(pane); pane.Dock = DockStyle.Fill; this.FormBorderStyle = FormBorderStyle.None; this.Size = new Size(1000, 800); this.Opacity = 0.5; this.ControlBox = false; this.BackgroundImage = Image.FromFile(@"Image\背景.png"); Image image = Image.FromFile(@"Image\红心.jpg"); food = new BasicBlock(100, 100, image); pane.Controls.Add(food); image = Image.FromFile(@"Image\蛇头1.png"); headImgs.Add(image); head = new BasicBlock(500, 400, image); image = Image.FromFile(@"Image\蛇头2.png"); headImgs.Add(image); image = Image.FromFile(@"Image\蛇头3.png"); headImgs.Add(image); image = Image.FromFile(@"Image\蛇头4.png"); headImgs.Add(image); bodies.Add(head); pane.Controls.Add(head); ReFreshFoodPos(); //创建线程和委托 threadStart = new ThreadStart(Move); thread = new Thread(threadStart); thread.IsBackground = true; thread.Start(); } private bool CheckGameOver() { bool gameover = false; if (head.Location.X < 0 || head.Location.X > 990 || head.Location.Y < 0 || head.Location.Y > 790) gameover = true; if (bodies.Count > 1) { for(int i = 1; i <bodies.Count;i++) { if (head.Location == bodies[i].Location) gameover = true; } } return gameover; } private void ReFreshFoodPos() { Random random = new Random(); bool validPosition = false; int x = random.Next(10, 990); int y = random.Next(10, 790); while (!validPosition) { validPosition = true; foreach(var item in bodies) { if(x == item.Location.X && y == item.Location.Y) { validPosition = false; break; } } } food.Location = new Point(x, y); } public void Move() { while(!gameover) { int x = head.Location.X; int y = head.Location.Y; head.move(); if (!CheckEaten(x,y)) { if (bodies.Count > 1) { for (int i = bodies.Count; i > 0; i--) { if (i != 1) { bodies[i - 1].Location = bodies[i - 2].Location; bodies[i - 1].direction = bodies[i - 2].direction; } else { bodies[1].Location = new Point(x, y); bodies[1].direction = head.direction; } } } } int time = 0; if (difficultLevel == 0) time = 200; Thread.Sleep(time); gameover = CheckGameOver(); } if (gameover) { DialogResult resault = MessageBox.Show("You Failed!","Information",MessageBoxButtons.OK); if(resault == DialogResult.OK) this.Close(); } } public bool CheckEaten(int x, int y) { bool eaten = false; if(Math.Abs(head.Location.X - food.Location.X) < 20 && Math.Abs(head.Location.Y - food.Location.Y) < 20) { Image image = Image.FromFile(@"Image\方块.jpg"); BasicBlock body = new BasicBlock(x, y, image); body.direction = head.direction; this.pane.Invoke((MethodInvoker)delegate { AddObjectToForm(body); }); eaten = true; } return eaten; } private void AddObjectToForm(object myObject) { // 将对象添加到UI控件中 this.pane.Controls.Add(myObject as BasicBlock); bodies.Insert(1,myObject as BasicBlock); ReFreshFoodPos(); } private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; } private void Form1_KeyDown(object sender, KeyEventArgs e) { BasicBlock item = null; if (bodies.Count > 1) item = bodies[1]; switch(e.KeyCode) { case Keys.Right: if (item == null || item.direction != MDirection.left) { head.direction = MDirection.right; head.BackgroundImage = headImgs[0]; } break; case Keys.Left: if (item == null || item.direction != MDirection.right) { head.direction = MDirection.left; head.BackgroundImage = headImgs[2]; } break; case Keys.Up: if (item == null || item.direction != MDirection.down) { head.direction = MDirection.up; head.BackgroundImage = headImgs[3]; } break; case Keys.Down: if (item == null || item.direction != MDirection.up) { head.direction = MDirection.down; head.BackgroundImage = headImgs[1]; } break; default: break; } } } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号