C语言游戏项目——贪吃蛇游戏

  • 贪吃蛇游戏所需要运用到的知识

  • 贪吃蛇游戏创建界面

  • 贪吃蛇游戏框架基本函数

  • 贪吃蛇游戏总代码


    因为本人在编写贪吃蛇的时候会用到easyX,所以建议读者可以先了解一些EasyX,这样能够帮助你对本篇文章的理解。

1.贪吃蛇需要的知识

结构体,枚举,函数,在进行游戏界面的创建的时候会用到C++的图形绘制easyX,因为贪吃蛇的控制是在键盘上来实现控制的,所以还需要引用头文件<conio.h>(当然这个头文件也是在easyX中的)。所以基本上就是需要结构体,函数,数组这些知识。

 2.贪吃蛇游戏界面的创建

虽然我们平时在写代码观看代码的运行的时候,会出现一个黑色的程序框,但是用easyX除了会保留原有的黑色程序框之外,还会在创建一个新的程序框,原有的黑色程序框可以方便我们后期对游戏数据进行观察。

#include <stdio.h>
#include <graphics.h>//
#define WIDE 500  // 创建界面的长
#define HEIGHT 300  //创建界面的宽
#define MAX 400 //表示贪吃蛇最大节数为400节
int main()
{
//这个函数用来创建一个新的程序框,也就是游戏窗口。
    initgraph(WIDE,HEIGHT,SHOWCONSOLE)
    //SHOWCONSOLE 表示所创建的程序窗口是正常的,存在最小化和关闭功能
    //NOCLOSE 表示所创建的程序窗口是没有关闭功能的,没有完全通过游戏是不让进行关闭的
    //NOMINIMIZE 表示所创建的程序窗口是没有最小化功能。
while(1)
{

}//之所以要这个,是因为如果没有的话所创建的程序窗口会一闪而过。
closegrapg();//这个函数的作用是关闭上面所创建的程序窗口,创建窗口总是需要关闭的,不然它会一直存在那里

return 0;
}

这样在程序运行的时候除了会出现原有的黑色控制台窗口,还会再出现一个长为500,宽为300的游戏窗口。

3.贪吃蛇游戏基本函数

1,创建贪吃蛇的基本属性——初始移动方向,初始长度,初始移动速度,初始节数所对应的坐标。利用结构体来将这些数据都弄在一起。

//创建贪吃蛇的数据
struct Snake
{
	int length;//贪吃蛇的长度
	int speed;//贪吃蛇的移动速度
	int dir;//贪吃蛇的初始移动方向
	POINT pos[MAX];//贪吃蛇的初始出现坐标
//POINT 用来定义一个结构体变量,这里用来定义pos,使pos能存下每节圆的圆心位置。
};

2,初始化游戏数据

当然这里只是来初始化贪吃蛇的初始化数据,还没有对食物的基本数据进行初始化。


//进行游戏开始的数据初始化
void initgame()
{
	snake.length = 3;//初始长度
	snake.speed = 8;//初始移动速度
	snake.dir = RIGHT;//初始移动方向
	for (int i = 0; i < snake.length; i++)//这里是来定位贪吃蛇每节圆的圆心位置
	{
		snake.pos[i].x = 40 - 10 * i;
		snake.pos[i].y = 10;
	}
}

3,初步绘画出游戏的基本界面

//进行游戏绘画界面
void gamedrw()
{
    //建立双缓冲区绘画界面,这样可以使贪吃蛇在移动
一个C#小程序,贪吃蛇游戏 using System; using System.Collections; using System.Drawing; using System.Windows.Forms; namespace WSnake { /// <summary> /// SnakeMod 的摘要说明。 /// </summary> public class SnakeMod { #region 定义6个字段 //判断食物是否在蛇身体里 private bool hasFood = false; //蛇身介质 private Label body; //蛇的颜色 private Color _color = System.Drawing.Color.SkyBlue; //蛇的大小 private Size size; //移动方向默认向西 private WSnake.Way way =Way.WEST; //蛇身 private ArrayList snake; #endregion #region 定义2个属性 public Way SnakeWay { set { this.way=value; } get { return way; } } //颜色属性 public System.Drawing.Color BodyColor { set { this._color = value; } } #endregion #region 定义7个方法 //构造函数 public SnakeMod() { } //画蛇 public void DrawSnake() { //设置大小 size = new Size(10,10); //设置身体 snake = new ArrayList(); for(int i=0;i<5;i++) { body = new Label(); body.BackColor = _color; body.Size = size; body.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; body.Location=new Point(200+i*10,150); snake.Add(body); } } //返回蛇体 public ArrayList GetSnake() { return snake; } //蛇体移动 public void Move(System.Windows.Forms.Control control) { if(!this.hasFood) { control.Controls.Remove(control.GetChildAtPoint(((Label)snake[snake.Count-1]).Location)); snake.RemoveAt(snake.Count-1); } Label temp = new Label(); this.CopyBody(temp,(Label)snake[0]); switch(this.way) { case Way.WEST: { temp.Left-=10; snake.Insert(0,temp); break; } case Way.EAST: { temp.Left+=10; snake.Insert(0,temp); break; } case Way.NORTH: { temp.Top-=10; snake.Insert(0,temp); break; } case Way.SOUTH: { temp.Top+=10; snake.Insert(0,temp); break; } } control.Controls.Add((Label)snake[0]); if(this.hasFood) { this.hasFood=false; } } //copy蛇身 private void CopyBody(Label x,Label y) { x.Location = y.Location; x.BackColor = y.BackColor; x.Size = y.Size; x.BorderStyle = y.BorderStyle; } //吃东西 public bool Eat(Point food) { if(((Label)snake[0]).Left == food.X && ((Label)snake[0]).Top == food.Y) { //吃到东西 this.hasFood = true; return true; } return false; } #endregion } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见陌生人了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值