c语言int 转bool_C语言/C++项目分享——贪吃蛇

项目内容:贪吃蛇

开发环境:vs2013+easyx

这里是一个C语言/C++项目贪吃蛇的源码。

这个源码还有待完善,希望大家共同改进。

编译软件:VS2013

游戏的初始界面是这样子的

c7d65253db3dfc74625e7644340391b8.png

思路:首先将程序目的大致分为几个步骤来实现:

1、显示背景图,蛇,食物

2、让蛇随着玩家键入的方向键移动

3、若蛇吃到食物则加长一节

以下是实现的代码,若有不对的地方欢迎指正。

#include

#include

//包含easyx图形库,可以使用给我们提供的一些函数,绘图,贴图

#include

#define WIN_WIDTH 640

#define WIN_HEIGHT 480

#define MAX_SNAKE 500 //蛇的最大节数

//枚举

enum DIR //枚举蛇的方向

{

UP,

DOWN,

LEFT,

RIGHT,

};

struct Food //食物

{

int x;

int y;

DWORD color;

bool flag;//是否被吃掉,是否要重新生成食物

}food;

struct Pos

{

int x;

int y;

DWORD color;

};

struct Snake//蛇的结构体

{

int num;//当前节数

int dir;//蛇的方向

int score;//分数

int size;//蛇的宽和高

int speed;//蛇的移动速度

//表示每一节蛇的坐标 数组

struct Pos coor[MAX_SNAKE];

}snake;

void GameInit()

{

//设置随机数种子

srand(GetTickCount());

snake.num = 3;

snake.dir = RIGHT;

snake.score = 0;

snake.size = 10;

snake.speed = 10;

snake.coor[2].x = 0;

snake.coor[2].y = 0;

snake.coor[2].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

snake.coor[1].x = 10;

snake.coor[1].y = 0;

snake.coor[1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

snake.coor[0].x = 20;

snake.coor[0].y = 0;

snake.coor[0].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

//初始化食物

food.x = rand() % (WIN_WIDTH/10)*10;//1*10 10 20 30 40 50 60

food.y = rand() % (WIN_HEIGHT/10)*10;

food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

food.flag = true;

}

void GameDraw()

{

cleardevice();

for (int i = 0; i < snake.num; i++)

{

//设置填充颜色

setfillcolor(snake.coor[i].color);

//画矩形

fillrectangle(snake.coor[i].x, snake.coor[i].y, snake.coor[i].x + 10, snake.coor[i].y + 10);

}

//绘制食物

//solidcircle(food.x,food.y,5)

if (food.flag)

{

setfillcolor(food.color);

solidellipse(food.x, food.y, food.x + 10, food.y + 10);

}

//绘制分数

//先把整数转成字符串

char temp[20] = " ";

sprintf(temp, "分数:%d", snake.score);

outtextxy(10,10,temp);//如果报错 “outtextxy”: 2 个重载中没有一个可以转换所有参数类型 一定是字符集问题

/*怎么修改字符集呢?三种方法

*/

}

void GameMove()

{

for (int i = snake.num-1; i >0; i--)

{

snake.coor[i].x = snake.coor[i - 1].x;

snake.coor[i].y = snake.coor[i - 1].y;

}

switch(snake.dir)

{

case UP:

snake.coor[0].y -= snake.speed;

if (snake.coor[0].y < 0)

{

snake.coor[0].y = WIN_HEIGHT;

}

break;

case DOWN:

snake.coor[0].y += snake.speed;

if (snake.coor[0].y > WIN_HEIGHT)

{

snake.coor[0].y = 0;

}

break;

case LEFT:

snake.coor[0].x -= snake.speed;

if (snake.coor[0].x < 0)

{

snake.coor[0].x = WIN_WIDTH;

}

break;

case RIGHT:

snake.coor[0].x += snake.speed;

if (snake.coor[0].x > WIN_WIDTH)

{

snake.coor[0].x = 0;

}

break;

}

}

void GameControl()

{

//获取键盘输入,_getch(); 不回显函数,

char key = _getch();

switch (key)

{

case 72:

if (snake.dir!=DOWN)

{

snake.dir = UP;

}

break;

case 80:

if (snake.dir != UP)

{

snake.dir = DOWN;

}

break;

case 75:

if (snake.dir != RIGHT)

{

snake.dir = LEFT;

}

break;

case 77:

if (snake.dir != LEFT)

{

snake.dir = RIGHT;

}

break;

}

printf("%d", key);

}

void CreateFood()

{

if (!food.flag)

{

food.x = rand() % (WIN_WIDTH / 10) * 10;//1*10 10 20 30 40 50 60

food.y = rand() % (WIN_HEIGHT / 10) * 10;

food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

food.flag = true;

}

}

void EatFood()

{

if (food.flag && snake.coor[0].x == food.x && snake.coor[0].y == food.y)

{

food.flag = false;

snake.num++;

snake.score += 10;

snake.coor[snake.num-1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色

CreateFood();++

}

}

int main()

{

//1,创建窗口,init初始化 graphics 图形窗口

initgraph(WIN_WIDTH, WIN_HEIGHT, SHOWCONSOLE);

setbkcolor(RGB(207, 214, 229));//设置颜色

cleardevice();//刷新窗口

GameInit();

while (1)

{

GameDraw();

GameMove();

if (_kbhit())

{

GameControl();

}

EatFood();

Sleep(100);

}

getchar();

return 0;

}

这个蛇的移动按照键盘上的上下左右控制蛇的运动方向,然后希望这个代码能对大家有点帮助。

如果大家对学习C语言/C++有兴趣的话可以关注微信公众号:C语言爱好者

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值