在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#游戏开发 → c#版 贪吃蛇 游戏源码下载

c#版 贪吃蛇 游戏源码下载

C#游戏开发

下载此实例
  • 开发语言:C#
  • 实例大小:0.06M
  • 下载次数:262
  • 浏览次数:1528
  • 发布时间:2016-03-09
  • 实例类别:C#游戏开发
  • 发 布 人:guddqs
  • 文件格式:.zip
  • 所需积分:0
 相关标签: 贪吃蛇 C# c

实例介绍

【实例简介】GUI绘图,

【实例截图】

【核心代码】

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

namespace Snake
{
	public partial class Yard : Form
	{
		public Yard()
		{
			InitializeComponent();
		}

		private void Yard_Load(object sender, EventArgs e)
		{
			this.Size = new Size(ROWS * BLOCK_SIZE, COLS * BLOCK_SIZE);
			timer1.Start();
			lblScore.Text = "Score:"   Yard.Score;
		}

		Snake s = new Snake();
		Egg egg = new Egg(15, 15);
		private static int _score = 0;

		public static int Score
		{
			get { return Yard._score; }
			set { Yard._score = value; }
		}

		public static int BLOCK_SIZE = 20;

		public static int ROWS = 30;
		public static int COLS = 30;

		private void timer1_Tick(object sender, EventArgs e)
		{
			if (lblGameOver.Visible == false)
			{
				s.paint(this);
				egg.draw(this);
			}
			else
			{
				if (count > 5 - 1)
				{
					timer1.Stop();
					Thread.Sleep(10 * 100);
					timer1.Start();
					lblGameOver.Text = "得分清零";
					count = 0;
				}
			}
			if (s.getcol() == egg.col && s.getrow() == egg.row)
			{
				s.eat();
				Yard.Score  = 5;
				lblScore.Text = "Score :"   Yard.Score.ToString();
				egg.reinitial();
			}
		}

		bool flag = false;

		int count = 0;
		private void Yard_KeyPress(object sender, KeyPressEventArgs e)
		{
			if (e.KeyChar == (char)Keys.W || e.KeyChar == (char)Keys.W   32)
			{
				s.keypressed("w");
			}
			else if (e.KeyChar == (char)Keys.S || e.KeyChar == (char)Keys.S   32)
			{
				s.keypressed("s");
			}
			else if (e.KeyChar == (char)Keys.A || e.KeyChar == (char)Keys.A   32)
			{
				s.keypressed("a");
			}
			else if (e.KeyChar == (char)Keys.D || e.KeyChar == (char)Keys.D   32)
			{
				s.keypressed("d");
			}
			else if (e.KeyChar == (char)Keys.K || e.KeyChar == (char)Keys.K   32)
			{
				if (lblGameOver.Visible == false)
				{
					DialogResult resust = MessageBox.Show("是否保留上次最后死亡痕迹?", "有意思!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
					if (resust == DialogResult.No)
					{
						s.clear();
						count  ;
						lblGameOver.Visible = false;
						s = new Snake();
					}
					else
					{
						count  ;
						lblGameOver.Visible = false;
						s = new Snake();
					}
				}
				else
				{
					count  ;
					lblGameOver.Visible = false;
					s = new Snake();
				}
			}
			else if (e.KeyChar == (char)Keys.P || e.KeyChar == (char)Keys.P   32)
			{
				if (flag == false)
				{
					timer1.Stop();
					flag = true;
				}
				else
				{
					timer1.Start();
					flag = false;
				}
			}
		}

	}

	public class Snake
	{
		Node head;
		Node tail;
		int size = 1;
		Yard y;

		int count = 0;

		public void paint(Yard y)
		{
			if (size == 0)
			{
				return;
			}
			if (count == 0)
			{
				this.y = y;
				Node n = new Node(20, 22, Dir.L, y);
				this.head = n;
				this.tail = n;
				head.next = tail;
				head.prev = head;
				tail.prev = head;
				tail.next = tail;
				count  ;
			}
			else
			{
				if (size == 0)
				{
					return;
				}
				move();
				draw();
			}
		}

		void draw()
		{
			for (Node node = head; node != null; node = node.next)
			{
				node.paint();
			}
			//AddToHead();
		}

		public void eat()
		{
			AddToHead();
			size  ;
		}

		public int getrow()
		{
			if (size == 0)
			{
				return -1;
			}
			return head.row;
		}

		public int getcol()
		{
			if (size == 0)
			{
				return -1;
			}
			return head.col;
		}

		public void keypressed(string s)
		{
			if (size == 0)
			{
				return;
			}
			switch (s)
			{
				case "w":
					if (head.dir != Dir.D)
					{
						head.dir = Dir.U;
					}
					break;
				case "s":
					if (head.dir != Dir.U)
					{
						head.dir = Dir.D;
					}
					break;
				case "a":
					if (head.dir != Dir.R)
					{
						head.dir = Dir.L;
					}
					break;
				case "d":
					if (head.dir != Dir.L)
					{
						head.dir = Dir.R;
					}
					break;
				default:
					break;
			}
		}

		private void AddToHead()
		{
			Node n;
			switch (head.dir)
			{
				case Dir.R:
					n = new Node(head.row   1, head.col, head.dir, head.y);
					n.next = head;
					head.prev = n;
					head = n;

					break;
				case Dir.L:
					n = new Node(head.row - 1, head.col, head.dir, head.y);
					n.next = head;
					head.prev = n;
					head = n;

					break;
				case Dir.U:
					n = new Node(head.row, head.col - 1, head.dir, head.y);
					n.next = head;
					head.prev = n;
					head = n;

					break;
				case Dir.D:
					n = new Node(head.row, head.col   1, head.dir, head.y);
					n.next = head;
					head.prev = n;
					head = n;

					break;
			}

		}

		public void move()
		{
			AddToHead();
			DeleteFromTail();
			checkDead();
		}

		private void DeleteFromTail()
		{
			tail = tail.prev;
			tail.y.Controls.Remove(tail.next.N);
			tail.next = null;
		}

		void checkDead()
		{
			if (size == 0)
			{
				return;
			}
			if (head.row < 0 || head.col < 0 || head.col >= Yard.COLS - 2 || head.row >= Yard.ROWS - 1)
			{
				y.lblGameOver.Visible = true;
				clear();
			}
			if (size == 0)
			{
				return;
			}
			for (Node n = head.next; n != null; n = n.next)
			{
				if (n.row == head.row && n.col == head.col)
				{
					y.lblGameOver.Visible = true;
					clear();
				}
			}
		}

		public void clear()
		{
			if (size==0)
			{
				return;
			}
			while (tail.prev != null)
			{
				tail = tail.prev;
				tail.next.y.Controls.Remove(tail.next.N);
				tail.next = null;
				size--;
			}
			head.y.Controls.Remove(head.N);
			head = null;
			size--;
		}

		private class Node
		{
			public Label N = new Label();
			public int row;
			public int col;
			public Dir dir;
			public Node next;
			public Node prev;
			public Yard y;

			public Node(int row, int col, Dir dir, Yard y)
			{
				this.row = row;
				this.col = col;
				this.dir = dir;
				this.y = y;

			}

			public void paint()
			{
				N.Text = "█";
				N.BackColor = Color.Transparent;
				N.Location = new Point(this.row * Yard.BLOCK_SIZE, this.col * Yard.BLOCK_SIZE);
				N.Size = new Size(Yard.BLOCK_SIZE, Yard.BLOCK_SIZE);
				y.Controls.Add(N);
			}

			public void move()
			{
				N.Location = new Point(1000, 1000);
			}

		}

	}

	public class Egg
	{
		public Label N = new Label();
		public int row, col;

		public Yard y;

		public Egg(int row, int col)
		{
			this.row = row;
			this.col = col;
		}

		public void draw(Yard y)
		{
			N.Text = "●";
			N.BackColor = Color.Transparent;
			this.y = y;
			if (N.ForeColor == Color.Green)
			{
				N.ForeColor = Color.Red;
			}
			else
			{
				N.ForeColor = Color.Green;
			}
			N.Location = new Point(this.row * Yard.BLOCK_SIZE, this.col * Yard.BLOCK_SIZE);
			N.Size = new Size(Yard.BLOCK_SIZE, Yard.BLOCK_SIZE);
			this.y.Controls.Add(N);

		}

		Random r = new Random();

		public void reinitial()
		{
			this.row = r.Next(2, 27);
			this.col = r.Next(2, 27);
		}

	}

	enum Dir
	{
		D, U, L, R
	}
}

标签: 贪吃蛇 C# c

实例下载地址

c#版 贪吃蛇 游戏源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警