经典贪吃蛇游戏 = =

贪吃蛇。。应该没什么人没有玩过吧哈哈

贪吃蛇。。虽然很简单。。但也是人生中第一个自己写的游戏把!!

游戏开发是一直以来的梦想。。。

不多说,没什么难点,直接上代码(如果需要图形库文件和EasyX的可以给我留言。。也可以网上自己下载哈)

/***********************************************
文件名称:main.cpp
程序名称:贪吃蛇
编译环境:VS2013  &&  EasyX
最后修改:2016年6月30日
************************************************/

#include <stdio.h>
#include <graphics.h>         //图形库的头文件
#include <mmsystem.h>         //多媒体设备接口   音乐  视频   麦克风
#include <conio.h>
#include <time.h>
#pragma comment(lib, "winmm.lib")
#define X_LEN 640
#define Y_LEN 480
#define MAXLEN 100
#define SNAKE_SIZE 10
struct Coor
{
	int x, y;
};
typedef enum Di
{
	up = 72, down = 80, right = 77, left = 75
}Dir;
struct Snake
{
	Coor zb[MAXLEN];          //蛇的坐标
	int n;					  //蛇的长度
	Dir dir;				  //蛇的方向
}snake;
struct Food
{
	int flag;
	Coor zb;
}food;
//初始化一条小蛇
void initsnake()
{
	initgraph(X_LEN, Y_LEN);      //初始化一个图形界面   创建一块画板
	mciSendString(L"open 五环之歌.mp3 alias bk", 0, 0, 0);
	mciSendString(L"Play bk repeat", 0, 0, 0);
	setbkcolor(RGB(220, 120, 150));
	cleardevice();
	rectangle(0, 0, 10, 10);
	snake.n = 1;
	snake.zb[0].x = 0;
	snake.zb[0].y = 0;
	snake.dir = right;
	food.flag = 0;
}
void drawsnake()              //在图形界面上画蛇
{
	for (int i = snake.n - 1; i >= 0; i--)
	{
		rectangle(snake.zb[i].x, snake.zb[i].y,
			snake.zb[i].x + SNAKE_SIZE, snake.zb[i].y + SNAKE_SIZE);
	}
	setcolor(RGB(220, 120, 150));
	rectangle(snake.zb[snake.n].x, snake.zb[snake.n].y,
		snake.zb[snake.n].x + SNAKE_SIZE, snake.zb[snake.n].y + SNAKE_SIZE);
	setcolor(RGB(255, 255, 255));
	rectangle(snake.zb[snake.n - 1].x, snake.zb[snake.n - 1].y,
		snake.zb[snake.n - 1].x + SNAKE_SIZE, snake.zb[snake.n - 1].y + SNAKE_SIZE);
}
void movesnake()
{
	//让蛇自己向前动起来,用for循环来移动第0节后面的蛇
	for (int i = snake.n; i > 0; i--)
	{
		//后面一节蛇的坐标等于它前面一节蛇的坐标
		snake.zb[i].x = snake.zb[i - 1].x;
		snake.zb[i].y = snake.zb[i - 1].y;
	}
	switch (snake.dir)
	{
	case up:
		snake.zb[0].y -= SNAKE_SIZE;
		break;
	case down:
		snake.zb[0].y += SNAKE_SIZE;
		break;
	case right:
		snake.zb[0].x += SNAKE_SIZE;
		break;
	case left:
		snake.zb[0].x -= SNAKE_SIZE;
		break;
	}
	drawsnake();
}

//用键盘让蛇改变方向
void changesnake()
{
	int move;
	move = _getch();
	switch (move)
	{
	case up:
		if (snake.dir != down)
			snake.dir = up;
		break;
	case down:
		if (snake.dir != up)
			snake.dir = down;
		break;
	case left:
		if (snake.dir != right)
			snake.dir = left;
		break;
	case right:
		if (snake.dir != left)
			snake.dir = right;
		break;
	}
}
//出现食物
void drawfood()
{
	setcolor(RGB(255, 255, 255));
	circle(food.zb.x + SNAKE_SIZE / 2, food.zb.y + SNAKE_SIZE / 2, SNAKE_SIZE / 2);
}
//决定食物的坐标
void coorfood()
{
	
	food.zb.x = rand() % (X_LEN / SNAKE_SIZE) * SNAKE_SIZE;
	food.zb.y = rand() % (Y_LEN / SNAKE_SIZE) * SNAKE_SIZE;
	food.flag = 1;       //表示食物还没被吃掉
}
void eatfood()
{
	if (snake.zb[0].x == food.zb.x && snake.zb[0].y == food.zb.y)
	{
		snake.n += 1;
		food.flag = 0;
		setcolor(RGB(220, 120, 150));
		circle(food.zb.x + SNAKE_SIZE / 2, food.zb.y + SNAKE_SIZE / 2, SNAKE_SIZE / 2);
	}
}
int snakedeath()
{
	if (snake.zb[0].x < 0 || snake.zb[0].x > X_LEN || snake.zb[0].y < 0 || snake.zb[0].y > Y_LEN)
		return 1;
	for (int i = 1; i <= snake.n - 1; i++)
	{
		if (snake.zb[i].x == snake.zb[0].x && snake.zb[i].y == snake.zb[0].y)
			return 1;
	}
	return 0;
}
void gameover()
{
	cleardevice();
	setcolor(BLUE);
	settextstyle(50, 0, L"华文彩云");
	outtextxy(100, 50, L"XYQ");
	outtextxy(100, 100, L"倾情制作");
	getchar();
	closegraph();
}
int main()
{
	srand(time(0));
	initsnake();
	while (1)
	{
		
		if (food.flag == 0)      //表示食物已经被吃掉
		{
			coorfood();
			drawfood();
		}
		while (!_kbhit())
		{
			if (snakedeath())
			{
				gameover();
				break;
			}
			eatfood();
			movesnake();
			Sleep(100);
		}
		changesnake();
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值