首先需要在这里,下载easyX
选择安装的编译器
#include<stdio.h>
#include<easyx.h>
#include<stdlib.h>
#include <graphics.h>
#include<conio.h>
#include<time.h>
#define SIZE 20
#define MAX (SIZE*SIZE)
typedef struct { int x; int y; }PLACE;
int maxX, maxY;
char dir;
void init();
void food();
void move();
void draw();
void rect(int x, int y, COLORREF color);
void eat();
void over();
void run();
void keyDown();
struct mySnake
{
int num;
PLACE xy[MAX];
char direction;
}snake;
PLACE foodxy;
enum direction
{
UP,DOWN,LEFT,RIGHT
};
void init()
{
srand((unsigned int)time(NULL));
initgraph(640, 480,EW_SHOWCONSOLE);
maxX = 640 / SIZE;
maxY = 480 / SIZE;
for (int i = 0; i < 3; i++)
{
snake.xy[2 - i].x = i;
snake.xy[2 - i].y = 0;
}
snake.num = 3;
snake.direction = RIGHT;
food();
}
void food()
{
foodxy.x = rand() % maxX;
foodxy.y = rand() % maxY;
int i = 0;
while (i < snake.num)
{
if (foodxy.x == snake.xy[i].x && foodxy.y == snake.xy[i].y)
{
foodxy.x = rand() % maxX;
foodxy.y = rand() % maxY;
i = 0;
}
i++;
}
}
void move()
{
for (int i = snake.num; i > 0; i--)
{
snake.xy[i].x = snake.xy[i - 1].x;
snake.xy[i].y = snake.xy[i - 1].y;
}
switch (dir=snake.direction)
{
case RIGHT:
snake.xy[0].x++;
break;
case LEFT:
snake.xy[0].x--;
break;
case DOWN:
snake.xy[0].y++;
break;
case UP:
snake.xy[0].y--;
break;
default:
break;
}
}
void draw()
{
for (int i = 0; i < snake.num; i++)
{
rect(snake.xy[i].x, snake.xy[i].y, RED);
}
rect(foodxy.x, foodxy.y, BLUE);
FlushBatchDraw();
}
void rect(int x, int y, COLORREF color)
{
setfillcolor(color);
fillrectangle(x * SIZE, y * SIZE, x * SIZE + SIZE, y * SIZE + SIZE);
}
void eat()
{
if (snake.xy[0].x == foodxy.x && snake.xy[0].y == foodxy.y)
{
snake.num ++ ;
food();
}
}
void over()
{
for (int i = 1; i < snake.num; i++)
{
if (snake.xy[0].x == snake.xy[i].x && snake.xy[0].y == snake.xy[i].y)
{
MessageBox(GetHWnd(), _T("您操控的小蛇吃到自己了!"), _T("游戏结束"), 0);
exit(0);
}
}
if (snake.xy[0].x >= maxX || snake.xy[0].x < 0 || snake.xy[0].y >= maxY || snake.xy[0].y < 0)
{
MessageBox(GetHWnd(), _T("您操控的小蛇撞墙死了!"),_T("游戏结束"), 0);
exit(0);
}
}
void run()
{
init();
while (1)
{
cleardevice();
while (_kbhit())
{
keyDown();
}
move();
eat();
over();
draw();
Sleep(100);
}
}
void keyDown()
{
char ch;
switch (ch=_getch())
{
case 'w':
if (dir != DOWN)
{
snake.direction = UP;
}
break;
case 's':
if (dir != UP)
{
snake.direction = DOWN;
}
break;
case 'a':
if (dir != RIGHT)
{
snake.direction = LEFT;
}
break;
case 'd':
if (dir != LEFT)
{
snake.direction = RIGHT;
}
break;
}
printf("按下了%c键,当前小蛇身长%d\n", ch, snake.num);
}
int main()
{
run();
system("pause");
return 0;
}
效果图