贪吃蛇游戏c语⾔编程⼼得体会,C语⾔开发实现贪吃蛇游戏本⽂实例为⼤家分享了C语⾔实现贪吃蛇游戏的具体代码,供⼤家参考,具体内容如下
1、最好⽤VS运⾏
2、⽤到的函数有:_kbhit _getch EasyX图形库内⼀系列函数
3、蛇⾝与⾷物⽤矩形画的
代码如下:
#include
#include //easyx头⽂件
#include
#include
/********************设置各种属性**********************/
//坐标属性
typedef struct point {
int x, y;
}PYINT;
//蛇
struct snake {
PYINT xy[100]; //蛇的每节坐标放到数组中
int position; //⽅向
int num; //长度
}SNAKE;
//⾷物
struct food{
PYINT fdxy;
int flag; //是否存在
int grade; //成绩
}FOOD;
贪吃蛇的编程代码//枚举:⽅向
//也可⽤宏 #define
enum position
{
up, down, left, right
};
/**********************对蛇的操作*****************************/
/
/初始化蛇
//蛇的每节为 10x10填充的矩形
void initsnake()
{
<[0].x = 0;
<[0].y = 0;
//数组第⼀个元素为蛇头
<[1].x = 10;
<[1].y = 0;
<[2].x = 20;
<[2].y = 0;
SNAKE.position = right; //⽅向 (随便给)
SNAKE.num = 3; //数量 (随便给)
}
//画蛇
void Drawsnake()
{
for (int i = 0; i < SNAKE.num; i++)
{
setlinecolor(BLACK);
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
[i].x, [i].y, [i].x + 10, [i].y + 10);
}
}
//使蛇动起来
/*
蛇头每向前动⼀格,其后紧随蛇头:
我们把蛇的每节坐标放到数组⾥(蛇头坐标放在数组的第⼀个),移动时,只需使蛇头(数组第⼀个元素)改变,其后与前⾯交换; */
void Movesnake()
{
for (int i = SNAKE.num; i > 0; i--) {
<[i].x = [i - 1].x;
<[i].y = [i - 1].y; //使每个元素向前移动
}
switch (SNAKE.position)
{
case up:
<[0].y -= 10;
break;
case down:
<[0].y += 10;
break;
//上下移动 X坐标不发⽣改变
case left:
<[0].x -= 10;
break;
case right:
<[0].x += 10;
break;
//左右移动 Y坐标不发⽣改变
}
}
/******************************按键操作*****************************************/ //当蛇向上运动时,按向下键⽆效(其他三个相同)
void Keydown()
{
char ch = _getch();
switch (ch)
{
case 'W':
case 'w':
case 72: //⼩键盘上的“向上”
if (SNAKE.position != down) //是否向下
SNAKE.position = up;
break;
case 'S':
case 's':
case 80: //⼩键盘上的“向下”
if (SNAKE.position != up) //是否向上
SNAKE.position = down;
break;
case 'A':
case 'a':
case 75: //⼩键盘上的“向左”
if (SNAKE.position != right) //是否向右
SNAKE.position = left;
break;
case 'D':
case 'd':
case 77: //⼩键盘上的“向右”
if (SNAKE.position != left) //是否向左
SNAKE.position = right;
break;
}
}
/******************************⾷物操作**************************************/
//初始化⾷物
void initfood()
{
FOOD.fdxy.x = rand() % 60 * 10;
FOOD.fdxy.y = rand() % 40 * 10; //把⾷物的坐标控制在游戏界⾯内
FOOD.flag = 1; //1代表存在⾷物
//ade = 0;
for (int i = 0; i < SNAKE.num; i++) {
if (FOOD.fdxy.x == [i].x&&FOOD.fdxy.y == [i].y) //如果⾷物出现在蛇⾝上,重新产⽣X Y的值{
FOOD.fdxy.x = rand() % 60 * 10;
FOOD.fdxy.y = rand() % 40 * 10;
}
}
}
//画⾷物
void Drawfood()
{
setlinecolor(BLACK);
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
fillrectangle(FOOD.fdxy.x, FOOD.fdxy.y, FOOD.fdxy.x + 10, FOOD.fdxy.y + 10);
}
/*************************************吃⾷物*************************************************/
void eatfood()
{
if ([0].x == FOOD.fdxy.x&&[0].y == FOOD.fdxy.y) {
SNAKE.num++;
FOOD.flag = 0; //⾷物存在的标记(1:存在 0;不存在)
}
}
/*************************************显⽰分数*************************************************/
void putgrade()
{
char str[20] = " ";
sprintf_s(str, "greade: %d", ade);
settextcolor(RED); //设置字体颜⾊
outtextxy(500, 50, str);
}
/***********************************游戏结束***************************************************/
//当蛇头撞墙(蛇头撞上⾃⾝)
//只分析⼀种情况
int gameover()
{
if ([0].x > 600 || [0].x < 0 | [0].y>400 || [0].y < 0) //撞墙{
initgraph(800, 600);
settextcolor(RED);
outtextxy(600, 400, "你撞墙了");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论