溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#實(shí)現(xiàn)貪吃蛇游戲的案例

發(fā)布時(shí)間:2020-10-16 15:35:17 來(lái)源:億速云 閱讀:151 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)C#實(shí)現(xiàn)貪吃蛇游戲的案例的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

貪吃蛇分析

游戲規(guī)則:

1、蛇起始長(zhǎng)度5,每吃一個(gè)食物增加1,最大15過(guò)關(guān)

2、蛇用藍(lán)色表示,食物用綠色,障礙物用黑色

3、當(dāng)蛇碰到自己、墻壁、障礙物則游戲失敗

4、方向鍵控制蛇的移動(dòng)方向,蛇不可反方向移動(dòng),如正在向上移動(dòng),不能馬上向下,只能向左、右、上運(yùn)動(dòng)

5、每過(guò)關(guān)一次速度提升一次

大概思路:

1、地圖用網(wǎng)格的形式表示,蛇由方格組成,保存在list中

2、1中提到了方格,方格保存的內(nèi)容有,顏色,坐標(biāo),是否可以通過(guò),是否是食物

3、向前移動(dòng)一次,將前面方格添加進(jìn)蛇列表中,將列表最后一個(gè)移除,若為前方格子為食物,則不移除最后一個(gè)

4、使用while死循環(huán)來(lái)做整個(gè)移動(dòng)

5、空格鍵為加速鍵,通過(guò)修改while循環(huán)sleep時(shí)間來(lái)實(shí)現(xiàn)加速

包括了3個(gè)類一個(gè)主窗體,分別是Node(用來(lái)表示方格)、Map(用來(lái)表示地圖)、Serpent(用來(lái)表示蛇),另外一個(gè)主窗體。下面依次把代碼貼上,基本上每個(gè)方法都有注釋

代碼1:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace EngorgeSerpent
{
 /// <summary>
 /// 節(jié)點(diǎn)
 /// </summary>
 class Node
 {
 #region 字段
 private int x;
 private int y;
 private int width = 10;
 private bool isFood = false;
 private bool isPass = true;//是否可通過(guò)
 private Color bgColor = Color.FromArgb(224, 224, 224);
 private Color foodColor = Color.Green;
 private Color hinderColor = Color.Black;
 private Color thisColor;
 private Color serpentColor = Color.Chocolate;

 #endregion
 /// <summary>
 /// 設(shè)置食物參數(shù)
 /// </summary>
 /// <param name="_isFood"></param>
 public void SetFood(bool _isFood)
 {
  IsFood = _isFood;
  if (_isFood)
  {
  ThisColor = FoodColor;

  }
  else
  {
  ThisColor = BgColor;
  }
 }

 /// <summary>
 /// 設(shè)置障礙物參數(shù)
 /// </summary>
 /// <param name="_isHinder">是否為障礙物</param>
 public void SetHinder(bool _isHinder)
 {
  IsPass =! _isHinder;
  if (_isHinder)
  {
  ThisColor = HinderColor;
  }
  else
  {
  ThisColor = BgColor;
  }
 }

 /// <summary>
 /// 設(shè)置蛇顏色
 /// </summary>
 /// <param name="_isSerpent"></param>
 public void SetSerpent(bool _isSerpent)
 {
  IsPass = !_isSerpent;
  if (_isSerpent)
  {
  ThisColor = SerpentColor;
  }
  else
  {
  ThisColor = BgColor;
  }
 }
 #region 構(gòu)造函數(shù)
 public Node()
 {
  thisColor = bgColor;
 }

 /// <summary>
 /// 有參構(gòu)造方法
 /// </summary>
 /// <param name="_x">相對(duì)x坐標(biāo)</param>
 /// <param name="_y">相對(duì)y坐標(biāo)</param>
 /// <param name="_width">邊長(zhǎng)</param>
 /// <param name="_isFood">是否是食物</param>
 /// <param name="_isPass">是否可通過(guò)</param>
 public Node(int _x, int _y, int _width, bool _isFood, bool _isPass)
 {
  thisColor = bgColor;
  X = _x;
  Y = _y;
  Width = _width;
  IsFood = _isFood;
  IsPass = _isPass;
 }

 /// <summary>
 /// 有參構(gòu)造方法
 /// </summary>
 /// <param name="_x">相對(duì)x坐標(biāo)</param>
 /// <param name="_y">相對(duì)y坐標(biāo)</param>
 /// <param name="_width">邊長(zhǎng)</param>
 public Node(int _x, int _y, int _width)
 {
  X = _x;
  Y = _y;
  Width = _width;
 }

 /// <summary>
 /// 有參構(gòu)造方法
 /// </summary>
 /// <param name="_x">相對(duì)x坐標(biāo)</param>
 /// <param name="_y">相對(duì)y坐標(biāo)</param>
 public Node(int _x, int _y)
 {
  X = _x;
  Y = _y;
 }
 #endregion

 #region 屬性
 /// <summary>
 /// 蛇顏色
 /// </summary>
 public Color SerpentColor
 {
  get { return serpentColor; }
 }

 /// <summary>
 /// 背景色
 /// </summary>
 public Color BgColor
 {
  get { return bgColor; }
 }

 /// <summary>
 /// 食物顏色
 /// </summary>
 public Color FoodColor
 {
  get { return foodColor; }
 }

 /// <summary>
 /// 障礙物顏色
 /// </summary>
 public Color HinderColor
 {
  get { return hinderColor; }
 }

 /// <summary>
 /// 當(dāng)前顏色
 /// </summary>
 public Color ThisColor
 {
  get { return thisColor; }
  set { thisColor = value; }
 }

 /// <summary>
 /// 獲取或設(shè)置相對(duì)橫坐標(biāo)
 /// </summary>
 public int X
 {
  get { return x; }
  set { x = value; }
 }

 /// <summary>
 /// 獲取或設(shè)置相對(duì)縱坐標(biāo)
 /// </summary>
 public int Y
 {
  get { return y; }
  set { y = value; }
 }

 /// <summary>
 /// 獲取或設(shè)置節(jié)點(diǎn)邊長(zhǎng)
 /// </summary>
 public int Width
 {
  get { return width; }
  set { width = value; }
 }

 /// <summary>
 /// 獲取或設(shè)置是否為食物
 /// </summary>
 public bool IsFood
 {
  get { return isFood; }
  set { isFood = value; }
 }

 /// <summary>
 /// 獲取或設(shè)置是否可以通過(guò)
 /// </summary>
 public bool IsPass
 {
  get { return isPass; }
  set { isPass = value; }
 }
 #endregion
 }
}

代碼2:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace EngorgeSerpent
{
 /// <summary>
 /// 地圖
 /// </summary>
 class Map
 {
 /// <summary>
 /// 節(jié)點(diǎn)數(shù)組
 /// </summary>
 private List<List<Node>> _nodes;
 private int RowCount;
 private int ComsCount;
 private Color bgColor = Color.FromArgb(224, 224, 224);
 private System.Windows.Forms.Control MapPanel;
 Graphics g;
 /// <summary>
 /// 地圖背景色 和node中背景色一致
 /// </summary>
 public Color BgColor
 {
  get { return bgColor; }
 }
 /// <summary>
 /// 構(gòu)造方法
 /// </summary>
 /// <param name="rows">行數(shù)</param>
 /// <param name="coms">列數(shù)</param>
 public Map(int rows, int coms, System.Windows.Forms.Control c)
 {
  RowCount = rows;
  ComsCount = coms;
  MapPanel = c;
  g = c.CreateGraphics();
  _nodes = new List<List<Node>>();
  for (int i = 0; i < rows; i++)//行
  {
  List<Node> index = new List<Node>();
  for (int j = 0; j < coms; j++)
  {
   Node node = new Node(j, i);
   index.Add(node);
  }
  _nodes.Add(index);
  }
 }

 /// <summary>
 /// 構(gòu)造方法
 /// </summary>
 /// <param name="rows">行數(shù)</param>
 /// <param name="coms">列數(shù)</param>
 /// <param name="width">節(jié)點(diǎn)寬度</param> 
 public Map(int rows, int coms, int width, System.Windows.Forms.Control c)
 {
  RowCount = rows;
  ComsCount = coms;
  MapPanel = c;
  g = c.CreateGraphics();
  _nodes = new List<List<Node>>();
  for (int i = 0; i < coms; i++)//行
  {
  List<Node> index = new List<Node>();
  for (int j = 0; j < rows; j++)
  {
   Node node = new Node(j, i, width);
   index.Add(node);
  }
  _nodes.Add(index);
  }
 }

 /// <summary>
 /// 重新加載地圖
 /// </summary>
 public void ResetMap()
 {
  for (int i = 0; i < ComsCount; i++)//行
  {
  for (int j = 0; j < RowCount; j++)
  {
   Node node = GetNode(i, j);
   node.IsPass = true;
   node.IsFood = false;  
  }
  }
 }
 /// <summary>
 /// 獲得節(jié)點(diǎn)
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <returns></returns>
 public Node GetNode(int x, int y)
 {
  return _nodes[y][x];
 }

 /// <summary>
 /// 設(shè)置食物
 /// </summary>
 public void SetFood()
 {
  SolidBrush brush = null;
  int _x, _y;
  Random r = new Random();
  while (true)
  {
  _x = r.Next(0, RowCount);
  _y = r.Next(0, ComsCount);
  if (_nodes[_x][_y].IsPass)
  {
   break;
  }
  }
  Node nodeindex = _nodes[_x][_y];
  nodeindex.SetFood(true);
  brush = new SolidBrush(nodeindex.FoodColor);
  RectangleF[] rects = { new RectangleF(nodeindex.X * nodeindex.Width, nodeindex.Y * nodeindex.Width, nodeindex.Width, nodeindex.Width) };
  g.FillRectangles(brush, rects);
 }

 /// <summary>
 /// 設(shè)置障礙物
 /// </summary>
 /// <param name="list"></param>
 public void SetHinder(List<Node> list)
 {
  SolidBrush brush = null;
  RectangleF[] rects = new RectangleF[list.Count];
  for (int i = 0; i < list.Count; i++)
  {
  Node _node = list[i];
  _node.SetHinder(true);
  _node.IsPass = false;
  if (brush == null)
  {
   brush = new SolidBrush(_node.HinderColor);
  }
  RectangleF r = new RectangleF(_node.X * _node.Width, _node.Y * _node.Width, _node.Width, _node.Width);
  rects[i] = r;
  }
  g.FillRectangles(brush, rects);
 }

 /// <summary>
 /// 設(shè)置邊界
 /// </summary>
 public void SetBorder()
 {
  //通過(guò)計(jì)算得出邊界的個(gè)數(shù)是2(x+y-2)個(gè)方格

  SolidBrush brush = null;
  int borders = 2 * (ComsCount + RowCount - 2);
  RectangleF[] rects = new RectangleF[borders];
  int indexcount = 0;
  //添加頂部方格進(jìn)rects列表中
  for (int i = 0; i < RowCount; i++)
  {
  Node _node = _nodes[i][0];
  _node.SetHinder(true);
  if (brush == null)
  {
   brush = new SolidBrush(_node.HinderColor);
  }
  RectangleF r = new RectangleF(_node.X * _node.Width, _node.Y * _node.Width, _node.Width, _node.Width);
  rects[indexcount] = r;
  indexcount++;
  }
  //添加底部方格進(jìn)rects列表中
  for (int i = 0; i < RowCount; i++)
  {
  Node _node = _nodes[i][ComsCount - 1];
  _node.SetHinder(true);

  RectangleF r = new RectangleF(_node.X * _node.Width, _node.Y * _node.Width, _node.Width, _node.Width);
  rects[indexcount] = r;
  indexcount++;
  }
  //添加左側(cè)方格進(jìn)列表,因?yàn)樽髠?cè)最上面以及最下面的兩個(gè)方格已經(jīng)添加進(jìn)去,這里不需要重復(fù)添加
  for (int i = 1; i < ComsCount - 1; i++)
  {
  Node _node = _nodes[0][i];
  _node.SetHinder(true);
  RectangleF r = new RectangleF(_node.X * _node.Width, _node.Y * _node.Width, _node.Width, _node.Width);
  rects[indexcount] = r;
  indexcount++;
  }
  //添加右側(cè)方格進(jìn)列表,因?yàn)橛覀?cè)最上面以及最下面兩個(gè)方格已經(jīng)添加進(jìn)去,這里不需要重復(fù)添加
  for (int i = 1; i < ComsCount - 1; i++)
  {
  Node _node = _nodes[RowCount - 1][i];
  _node.SetHinder(true);
  RectangleF r = new RectangleF(_node.X * _node.Width, _node.Y * _node.Width, _node.Width, _node.Width);
  rects[indexcount] = r;
  indexcount++;
  }
  g.FillRectangles(brush, rects);
 }
 }
}

代碼3:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace EngorgeSerpent
{
 /// <summary>
 /// 蛇
 /// </summary>
 class Serpent
 {
 private List<Node> serpentList = new List<Node>();
 private Direction direction = Direction.Right;//運(yùn)動(dòng)方向
 private int maxCount = 15;
 private int minCount = 5;
 private System.Windows.Forms.Control MapPanel;
 Graphics g;
 /// <summary>
 /// 設(shè)置蛇長(zhǎng)度數(shù)據(jù)
 /// </summary>
 /// <param name="maxLength">最大長(zhǎng)度</param>
 /// <param name="minLength">最小長(zhǎng)度</param>
 public Serpent(int maxLength, int minLength, System.Windows.Forms.Control c)
 {
  maxCount = maxLength;
  minCount = minLength;
  MapPanel = c;
  g = MapPanel.CreateGraphics();
 }

 /// <summary>
 /// 初始化蛇
 /// </summary>
 public void InitializeSerpent()
 {
  SolidBrush brush = null;
  RectangleF[] rects = new RectangleF[minCount];
  for (int i = 1; i < minCount; i++)
  {
  Node indexnode = new Node(i, 1);
  indexnode.SetSerpent(true);//設(shè)置蛇顏色
  serpentList.Insert(0, indexnode);
  if (brush == null)
  {
   brush = new SolidBrush(indexnode.SerpentColor);
  }
  rects[i] = new RectangleF(indexnode.X * indexnode.Width, indexnode.Y * indexnode.Width, indexnode.Width, indexnode.Width);
  }
  g.FillRectangles(brush, rects);
 }



 /// <summary>
 /// 插入一個(gè)
 /// </summary>
 /// <param name="node"></param>
 public void InsertNode(Node node)
 {
  serpentList.Insert(0, node);
  node.SetSerpent(true);
  SolidBrush brush = new SolidBrush(node.SerpentColor);
  RectangleF rect = new RectangleF(node.X * node.Width, node.Y * node.Width, node.Width, node.Width);
  g.FillRectangle(brush, rect);
 }

 /// <summary>
 /// 移除尾巴
 /// </summary>
 /// <param name="node"></param>
 public void RemoveNode()
 {
  Node node = serpentList[serpentList.Count - 1];
  serpentList.Remove(node);
  node.SetSerpent(false);
  SolidBrush brush = new SolidBrush(node.BgColor);
  RectangleF rect = new RectangleF(node.X * node.Width, node.Y * node.Width, node.Width, node.Width);
  g.FillRectangle(brush, rect);
 }

 /// <summary>
 /// 獲取蛇頭
 /// </summary>
 /// <returns>蛇頭方格</returns>
 public Node GetSerpentHead()
 {
  return serpentList[0];
 }

 /// <summary>
 /// 蛇是否最長(zhǎng)
 /// </summary>
 /// <returns></returns>
 public bool IsMax()
 {
  if (serpentList.Count == maxCount)
  return true;
  else
  return false;
 }

 /// <summary>
 /// 蛇運(yùn)動(dòng)方向
 /// </summary>
 public Direction Direction
 {
  get { return direction; }
  set { direction = value; }
 }

 }
 /// <summary>
 /// 運(yùn)動(dòng)方向
 /// </summary>
 public enum Direction
 {
 Left,
 Up,
 Right,
 Down
 }
}

代碼4:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace EngorgeSerpent
{
 public partial class MainForm : Form
 {
 public MainForm()
 {
  InitializeComponent();

 }
 List<List<Node>> maplist = new List<List<Node>>();
 Map map;
 Serpent serpent;
 Graphics g;
 int level = 1;
 /// <summary>
 /// 運(yùn)行線程
 /// </summary>
 Thread Work_Thread = null;
 /// <summary>
 /// 運(yùn)行線程監(jiān)控值
 /// </summary>
 bool IsWork = false;
 int sleepTime = 1000;
 int thissleeptime;

 private void MainForm_Load(object sender, EventArgs e)
 {
  g = this.panel1.CreateGraphics();
  map = new Map(40, 30, this.panel1);//這里可以對(duì)畫布進(jìn)行下大小設(shè)置 此處偷懶省略 
  LoadMapList();//加載障礙物列表  
 }

 /// <summary>
 /// 默認(rèn)將地圖設(shè)置為30*40
 /// </summary>
 private void SetMap()
 {
  map.ResetMap();
  g.Clear(map.BgColor);
  map.SetBorder();//設(shè)置邊界
  List<Node> hiderList = GetHider();//獲取障礙物列表
  map.SetHinder(hiderList);//設(shè)置障礙物
  SetSerpent();//初始化蛇 
 }

 /// <summary>
 /// 設(shè)置蛇
 /// </summary>
 private void SetSerpent()
 {
  serpent = new Serpent(15, 5, this.panel1);
  serpent.InitializeSerpent();//初始化蛇
 }

 /// <summary>
 /// 獲取地圖障礙物列表 以增加不同級(jí)別難度
 /// </summary>
 private void LoadMapList()
 {
  //目前分為5個(gè)級(jí)別
  //第一級(jí)別
  List<Node> hiderList1 = new List<Node>();
  for (int i = 15; i < 25; i++)
  {
  hiderList1.Add(map.GetNode(i, 15));
  hiderList1.Add(map.GetNode(15, i));
  }
  maplist.Add(hiderList1);

  //第二級(jí)別
  List<Node> hiderList2 = new List<Node>();
  for (int i = 7; i < 25; i++)
  {
  hiderList2.Add(map.GetNode(i, 15));
  hiderList2.Add(map.GetNode(15, i));
  }
  maplist.Add(hiderList2);

  //第三級(jí)別
  List<Node> hiderList3 = new List<Node>();
  for (int i = 7; i < 25; i++)
  {
  hiderList3.Add(map.GetNode(i, 15));
  hiderList3.Add(map.GetNode(15, i));
  hiderList3.Add(map.GetNode(i, 25));
  }
  maplist.Add(hiderList3);

  //第四級(jí)別
  List<Node> hiderList4 = new List<Node>();
  for (int i = 7; i < 25; i++)
  {
  hiderList4.Add(map.GetNode(i, 25));
  hiderList4.Add(map.GetNode(i, 15));
  hiderList4.Add(map.GetNode(15, i));
  hiderList4.Add(map.GetNode(i, 7));
  }
  maplist.Add(hiderList4);

  //第五級(jí)別
  List<Node> hiderList5 = new List<Node>();
  for (int i = 7; i < 25; i++)
  {
  hiderList5.Add(map.GetNode(i, 25));
  hiderList5.Add(map.GetNode(i, 15));
  hiderList5.Add(map.GetNode(15, i));
  hiderList5.Add(map.GetNode(i, 7));
  hiderList5.Add(map.GetNode(i, 35));
  }
  for (int i = 12; i < 20; i++)
  {
  hiderList5.Add(map.GetNode(7, i));
  hiderList5.Add(map.GetNode(25, i));
  }
  maplist.Add(hiderList5);
 }

 /// <summary>
 /// 獲取障礙物列表
 /// </summary>
 /// <returns></returns>
 private List<Node> GetHider()
 {
  //這里可以添加多個(gè)地圖,當(dāng)級(jí)別改變時(shí)需要重新加載
  return maplist[level - 1];
 }

 /// <summary>
 /// 重置地圖
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnResetMap_Click(object sender, EventArgs e)
 {
  IsWork = false;
  btnStop.Enabled = false;
  button3.Enabled = false;
  button2.Enabled = true;
  //map.ResetMap();
  SetMap();
 }

 /// <summary>
 /// 運(yùn)行
 /// </summary>
 private void Work()
 {
  map.SetFood();//設(shè)置食物
  while (IsWork)
  {
  Node node_index;
  Node serpentHead = serpent.GetSerpentHead();
  switch (serpent.Direction)
  {
   case Direction.Left:
   node_index = map.GetNode(serpentHead.X - 1, serpentHead.Y);
   break;
   case Direction.Right:
   node_index = map.GetNode(serpentHead.X + 1, serpentHead.Y);
   break;
   case Direction.Up:
   node_index = map.GetNode(serpentHead.X, serpentHead.Y - 1); break;
   default:
   node_index = map.GetNode(serpentHead.X, serpentHead.Y + 1);
   break;
  }
  SerpentState index_move = SerpentMove(node_index);
  if (index_move == SerpentState.Error)//游戲結(jié)束
  {
   IsWork = false;
   //map.ResetMap();
   MessageBox.Show("游戲結(jié)束!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
   sleepTime = 1000;
   level = 1;
   thissleeptime = sleepTime;
   lblLevel.BeginInvoke(new MethodInvoker(delegate()
   {
   btnStop.Enabled = false;
   button3.Enabled = false;
   button2.Enabled = true;
   lblLevel.Text = "1";
   lblCount.Text = "5";
   }));
  }
  else if (index_move == SerpentState.NextLevel)
  {
   IsWork = false;
   this.lblCount.BeginInvoke(new MethodInvoker(delegate()
   {
   level += 1;
   lblLevel.Text = level.ToString();
   lblCount.Text = "5";
   }));
   sleepTime = sleepTime / 2;
   thissleeptime = sleepTime;
   SetMap();//重置地圖
  }
  else
  {

   Thread.Sleep(thissleeptime);
  }
  }
  map.ResetMap();
 }

 /// <summary>
 /// 開始
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button2_Click(object sender, EventArgs e)
 {
  IsWork = false;
  btnStop.Enabled = false;
  button3.Enabled = false;
  button2.Enabled = true;
  //map.ResetMap();
  SetMap();
  thissleeptime = sleepTime;
  this.panel1.Focus();
  IsWork = true;
  this.btnStop.Enabled = true;
  this.button3.Enabled = true;
  button2.Enabled = false;
  Work_Thread = new Thread(new ThreadStart(Work));
  Work_Thread.IsBackground = true;
  Work_Thread.Start();
 }

 private void MainForm_KeyDown(object sender, KeyEventArgs e)
 {

  if (e.KeyCode == Keys.Right)
  {
  if (serpent.Direction != Direction.Left)
   serpent.Direction = Direction.Right;
  }
  else if (e.KeyCode == Keys.Left)
  {
  if (serpent.Direction != Direction.Right)
   serpent.Direction = Direction.Left;
  }
  else if (e.KeyCode == Keys.Up)
  {
  if (serpent.Direction != Direction.Down)
   serpent.Direction = Direction.Up;
  }
  else if (e.KeyCode == Keys.Down)
  {
  if (serpent.Direction != Direction.Up)
   serpent.Direction = Direction.Down;
  }
  else if (e.KeyCode == Keys.Space)
  {
  thissleeptime = sleepTime / 2;
  }
  else if (e.KeyCode == Keys.Escape)
  {
  if (IsWork)
  {
   this.button3.Text = "繼續(xù)";
   IsWork = false;
  }

  }
 }

 /// <summary>
 /// 暫停
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button3_Click(object sender, EventArgs e)
 {
  if (!IsWork)
  {
  this.button3.Text = "暫停";
  IsWork = true;
  Work_Thread = new Thread(new ThreadStart(Work));
  Work_Thread.IsBackground = true;
  Work_Thread.Start();
  }
  else
  {
  this.button3.Text = "繼續(xù)";
  IsWork = false;
  }
 }
 /// <summary>
 /// 退出
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void button4_Click(object sender, EventArgs e)
 {
  this.Close();
 }

 private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
 {
  IsWork = false;
  Application.Exit();
  System.Diagnostics.Process.GetCurrentProcess().Kill();
 }



 private void btnStop_Click(object sender, EventArgs e)
 {
  // map.ResetMap();
  btnStop.Enabled = false;
  button3.Enabled = false;
  button2.Enabled = true;
  IsWork = false;
  Work_Thread.Abort();
  SetMap();
 }

 /// <summary>
 /// 移動(dòng)
 /// </summary>
 /// <param name="node">將要移動(dòng)到的節(jié)點(diǎn)</param>
 /// <returns>返回狀態(tài)</returns>
 private SerpentState SerpentMove(Node node)
 {
  if (!node.IsPass)
  {
  return SerpentState.Error;
  }
  serpent.InsertNode(node);
  if (!node.IsFood)
  {
  //不是食物,則移除最后一個(gè)節(jié)點(diǎn)
  serpent.RemoveNode();
  }
  else
  {
  lblCount.BeginInvoke(new MethodInvoker(delegate()
  {
   this.lblCount.Text = (Convert.ToInt32(this.lblCount.Text.Trim()) + 1).ToString();
  }));
  map.SetFood();//設(shè)置食物
  }

  if (serpent.IsMax())
  {
  return SerpentState.NextLevel;
  }
  return SerpentState.Moving;
 }

 private void MainForm_KeyUp(object sender, KeyEventArgs e)
 {
  if (e.KeyCode == Keys.Space)
  {
  thissleeptime = sleepTime;
  }
 }

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
  int index = 1;
  int index_count = Convert.ToInt32(comboBox1.Text);
  for (int i = 1; i < index_count; i++)
  {
  index = index * 2;
  }
  level = index_count;
  sleepTime = 1000 / index;
  thissleeptime = sleepTime;
  btnStop.Enabled = false;
  button3.Enabled = false;
  button2.Enabled = true;
  IsWork = false;

  SetMap();
  lblCount.Text = "5";
  lblLevel.Text = index_count.ToString();
  serpent.Direction = Direction.Right;

 }

 private void checkBox1_Click(object sender, EventArgs e)
 {
  comboBox1.Enabled = this.checkBox1.Checked;
 }

 }
 public enum SerpentState
 {
 Moving,
 NextLevel,
 Error
 }
}

主界面

C#實(shí)現(xiàn)貪吃蛇游戲的案例

感謝各位的閱讀!關(guān)于C#實(shí)現(xiàn)貪吃蛇游戲的案例就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI