第一步:下载visual 2019编程软件 和 Easyx
第二步:设置头文件;
编写代码:
首先得做一个看得过去的运行窗口:
initgraph(680, 480);
//设置背景颜色
setbkcolor(RGB(28, 115, 119));
cleardevice();//清屏
接着就得考虑具体蛇怎么设计:
设计蛇的结构体:
//蛇的结构体
struct Snake{
int size;//最大节数
int dir;//蛇的方向
int speed;//蛇的速度
POINT coor[SNAKE_NUM];//蛇的坐标SNAKE_NUM是宏定义
}snake;
再之后就得考虑如何把蛇弄到屏幕上:
//画蛇
for (int i = 0; i < snake.size; i++)
{
solidcircle(snake.coor[i].x,snake.coor[i].y,5);//坐标画圆
进行窗口和蛇的初始化:
//数据初始化
void GameInit() {
//初始化窗口
initgraph(680, 480);
srand(GetTickCount());
snake.size = 3;
snake.speed = 10;
snake.dir=RIGHT;
for (int i=snake.size-1; i >=0 ;i--)//让蛇头跟着动
{
snake.coor[i].x= 40-10*i;
snake.coor[i].y = 10;
}
接着蛇就到屏幕上了 现在就得考虑蛇怎么移动:
void snakeMove() {
for (int i = snake.size-1; i >0;i--) {/确保每节蛇身都能动
snake.coor[i] = snake.coor[i - 1];
}
switch (snake.dir) {//判断蛇往哪个方向移动
case UP:
snake.coor[0].y -= snake.speed;
if (snake.coor[0].y<=0)//碰到墙壁从另一侧出来
{
snake.coor[0].y = 480;
}
break;
case DOWN:
snake.coor[0].y += snake.speed;
if (snake.coor[0].y >480)
{
snake.coor[0].y = 0;
}
break;
case LEFT:
snake.coor[0].x-= snake.speed;
if (snake.coor[0].x<= 0)
{
snake.coor[0].x = 640;
}
break;
case RIGHT :
snake.coor[0].x+= snake.speed;
if (snake.coor[0].x >640)
{
snake.coor[0].x = 0;
}
break;
}
}
获取键盘输入的信息:
void KeyControl(){
//判断有没有按键输入
if (_kbhit())//有按键就返回真
{
switch (_getch() ){
case 'w':
case 'W':
case '72':
if (snake.dir!=DOWN)
{
snake.dir = UP;
}
break;
case 's':
case 'S':
case '80':
if (snake.dir!=UP)
{
snake.dir = DOWN;
}
break;
case 'a':
case 'A':
case '75':
if (snake.dir!=RIGHT)
{
snake.dir = LEFT;
}
break;
case 'd':
case 'D':
case '77':
if (snake.dir!=LEFT) {
}
snake.dir = RIGHT;
break;
case ' ':
while (1) {
if (_kbhit())
{
return;
}
}
break;
}
}
}
完整代码:懒得写了
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<graphics.h>
#include<mmsyscom.h>
#pragma comment(lib,"winmm.lib")
#define SNAKE_NUM 500
static int num=200;
enum DIR {
UP,
DOWN,
RIGHT,
LEFT
};
//蛇的结构体
struct Snake{
int size;//最大节数
int dir;//蛇的方向
int speed;//蛇的速度
POINT coor[SNAKE_NUM];//蛇的坐标
}snake;
//实物的结构体
struct Food {
int x;//食物x坐标
int y;//食物y坐标
int r;//食物的半径
bool flag;//判断是否被吃
//DWORD color;//食物的颜色
}food;
//数据初始化
void GameInit() {
//初始化窗口
initgraph(680, 480);
srand(GetTickCount());
snake.size = 3;
snake.speed = 10;
snake.dir=RIGHT;
for (int i=snake.size-1; i >=0 ;i--)
{
snake.coor[i].x= 40-10*i;
snake.coor[i].y = 10;
}
//设置随机数种子
food.x = rand() % 640;
food.y = rand() % 480;
food.r = rand() % 10 + 5;
food.flag = true;
}
//设置窗口
void GameDraw() {
//BeginBatchDraw();
//设置背景颜色
setbkcolor(RGB(28, 115, 119));
cleardevice();//清屏
//画蛇
for (int i = 0; i < snake.size; i++)
{
solidcircle(snake.coor[i].x,snake.coor[i].y,5);//坐标画圆
}
//绘制食物
if (food.flag)
{
solidcircle(food.x,food.y,food.r);
}
}
//移动蛇
void snakeMove() {
for (int i = snake.size-1; i >0;i--) {
snake.coor[i] = snake.coor[i - 1];
}
switch (snake.dir) {
case UP:
snake.coor[0].y -= snake.speed;
if (snake.coor[0].y<=0)
{
snake.coor[0].y = 480;
}
break;
case DOWN:
snake.coor[0].y += snake.speed;
if (snake.coor[0].y >480)
{
snake.coor[0].y = 0;
}
break;
case LEFT:
snake.coor[0].x-= snake.speed;
if (snake.coor[0].x<= 0)
{
snake.coor[0].x = 640;
}
break;
case RIGHT :
snake.coor[0].x+= snake.speed;
if (snake.coor[0].x >640)
{
snake.coor[0].x = 0;
}
break;
}
}
//按键移动蛇 72 80 75 77
void KeyControl(){
//判断有没有按键输入
if (_kbhit())//有按键就返回真
{
switch (_getch() ){
case 'w':
case 'W':
case '72':
if (snake.dir!=DOWN)
{
snake.dir = UP;
}
break;
case 's':
case 'S':
case '80':
if (snake.dir!=UP)
{
snake.dir = DOWN;
}
break;
case 'a':
case 'A':
case '75':
if (snake.dir!=RIGHT)
{
snake.dir = LEFT;
}
break;
case 'd':
case 'D':
case '77':
if (snake.dir!=LEFT) {
}
snake.dir = RIGHT;
break;
case ' ':
while (1) {
if (_kbhit())
{
return;
}
}
break;
}
}
}
//吃食物
void EatFood() {
if ( food.flag&&snake.coor[0].x>=food.x-food.r&& snake.coor[0].x <= food.x + food.r
&&snake.coor[0].y >= food.y - food.r&& snake.coor[0].y <= food.y + food.r)
{
food.flag = false;
snake.size++;
if (num > 20) {
num=num - 10;
}
}
if (!food.flag)
{
food.x = rand() % 640;
food.y = rand() % 480;
food.r = rand() % 10 + 5;
food.flag = true;
}
}
void SnakeDead() {
int i = 1;
for ( i ; i < snake.size; i++)
{
if (snake.coor[0].x == snake.coor[i].x && snake.coor[0].y == snake.coor[i].y)
{
setbkcolor(RGB(7,0,0));
cleardevice();//清屏
Sleep(1000);
exit(0);
}
}
}
int main() {
GameInit();
while (1) {
snakeMove();
GameDraw();
EatFood();
KeyControl();
Sleep(num);
SnakeDead();
}
}