涉及知识点:结构体,枚举,函数等等
环境VS+Easyx(插件)
分析:
1.数据处理:
蛇: 位置 长度 方向
食物:位置 标志(食物的存在与否)
2.窗口坐标体系
具体代码如下:定义食物与定义蛇 方法类似,下面略写。
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
//位置结构体
typedef struct MyStruct
{
int x;
int y;
}POS;
//定义蛇属性
struct s
{
POS position[100]; //蛇是一节一节的
int length; //长度
int dirction; //方向
}snake;
//定义食物的属性
struct foods
{
POS position; //位置
int flag; //食物是否存在
}food;
//枚举方向
enum MyEnum
{
UP,DOWN, LEFT,RIGHT
};
//初始化
void initSnake()
{
snake.length=3; //初始长度为3
snake.dirction=RIGHT;
snake.position[0].x=20;
snake.position[0].y=0;
snake.position[1].x=10;
snake.position[1].y=0;
snake.position[2].x=0;
snake.position[2].y=0;
}
//画出来
void drawSnake()
{
cleardevice(); //刷新
for(int i=0;i<snake.length;i++)
{
setfillcolor(RED);
fillrectangle(snake.position[i].x,snake.position[i].y,snake.position[i].x+10,snake.position[i].y+10);
}
}
//动起来
void runGame()
{
//蛇身体移动,坐标转换,后面跟着前面
//一定先从后往前移动,防止覆盖
for(int i=snake.length-1;i>0;i--)
{
snake.position[i].x=snake.position[i-1].x;
snake.position[i].y=snake.position[i-1].y;
}
//蛇头移动
switch(snake.dirction)
{
case UP:
snake.position[0].y-=10;
break;
case DOWN:
snake.position[0].y+=10;
break;
case LEFT:
snake.position[0].x-=10;
break;
case RIGHT:
snake.position[0].x+=10;
break;
default:
break;
}
}
void useKey()
{
//通用套路,关于方向的处理
if(_kbhit()) //检测按键按下
{
char ch=_getch();
switch(ch)
{
case 'W':
case 'w':
case 72:
//防止掉头
if(snake.dirction!=DOWN)
{
snake.dirction=UP;
}
break;
case 'S':
case 's':
case 80:
if(snake.dirction!=UP)
{
snake.dirction=DOWN;
}
break;
case 'A':
case 'a':
case 75:
if(snake.dirction!=TIGHT)
{
snake.dirction=LEAT;
}
break;
case 'D':
case 'd':
case 77:
if(snake.dirction!=LEFT)
{
snake.dirction=RIGHT;7
}
break;
default:
break;
}
}
}
void starGame()
{
initgraph(600,600); //创建窗口
setbkcolor(RGB(210,255,200)); //设置背景颜色
cleardevice(); //刷新
}
//画食物
void initFood()
{
/*
srand*(unsigned int)time(NULL); //播撒随机数的种子
rand()%100; //生成0-99的随机数
*/
}
void drawFood()
{
//类似画蛇,即为画小方块
}
int main()
{
starGame();
initSnake();
while(1)
{
drawSnake();
runGame();
useKey();
Sleep(100); //放慢速度,等待100毫秒
}
closegraph(); //关闭窗口
return 0;
}