用c语言实现printf_用C语言超级简单地实现贪食蛇游戏

大致思路   

用一个二维数组来代表各个点的状态:

如地图空的位置用0表示,食物位置用-1来表示;1、2、3分别表示蛇的第一部分,第二部分,第三部分……

下图是一个5*8的数组,表示了一个5*8的地图,一个长度为5的蛇,和一个用-1表示的食物的位置。

1dd1cac8fdc9c5ed97becf62291e4ea9.png

通过_kbhit()获取键盘输入,控制蛇头方向;

判断结果;

把它打印到控制台;

循环这个过程直至游戏结束。

以下是代码:

#include

#include

#include

#include

#define SIZE 19 //定义地图大小

void init(int*, int*, int[SIZE][SIZE]);

int getCommand(int);

int move(int, int*, int[SIZE][SIZE]);

void draw(int[SIZE][SIZE]);

int main()

{

int map[SIZE][SIZE] = { 0 };

int command, result, length = 0; //length表示蛇的长度

init(&command, &length, map); //初始化游戏

while (1)

{

command = getCommand(command); //获取玩家输入的命令

result = move(command, &length, map); //根据命令移动蛇

if (result == 1) //分析移动的结果

{

break;

}

else

{

draw(map); //将蛇画到控制台

}

Sleep(1000);

}

}

void init(int *command, int *length, int map[SIZE][SIZE])

{

//初始化初始命令

*command = 2; //初始命令向下

//初始化蛇的长度

*length = 3;

//初始化蛇的位置

map[2][1] = 1;

map[1][1] = 2;

map[0][1] = 3;

//初始化食物的位置

map[3][3] = -1;

}

int getCommand(int command)

{

int temp = -1;

if (_kbhit()) //如果有键盘输入

{

switch (_getch())

{

case 'A': case 'a': temp = 3; break; //表示向左

case 'S': case 's': temp = 2; break; //表示向下

case 'D': case 'd': temp = 1; break; //表示向右

case 'W': case 'w': temp = 0; break; //表示向上

}

if (temp != -1 && abs(command - temp) != 2) //蛇不能反向

{

command = temp;

}

}

return command;

}

int move(int command, int *length, int map[SIZE][SIZE])

{

int i, j, head_i, head_j;

for (i = 0; i < SIZE; i++)

{

for (j = 0; j < SIZE; j++)

{

if (map[i][j] == *length) //如果是蛇的最后一节身体

{

map[i][j] = 0;

}

else if (map[i][j] > 1) //如果是蛇中间节的身体

{

map[i][j] += 1;

}

else if (map[i][j] == 1) //如果是蛇头

{

map[i][j] += 1;

//确定蛇头新的位置head_i和head_j

switch (command)

{

case 0: head_i = i - 1, head_j = j; break;

case 1: head_i = i, head_j = j + 1; break;

case 2: head_i = i + 1, head_j = j; break;

case 3: head_i = i, head_j = j - 1; break;

}

}

}

}

if (map[head_i][head_j] == -1) //如果吃到了食物

{

map[head_i][head_j] = 1;

*length = *length + 1; //蛇的长度加一

//重新生成食物

while (1)

{

i = rand() % SIZE, j = rand() % SIZE;

if (map[i][j] == 0)

{

map[i][j] = -1;

break;

}

}

}

//如果撞到了自己或者撞到了墙

else if (map[head_i][head_j] > 0 || head_i < 0 || head_i == SIZE || head_j < 0 ||head_j == SIZE)

{

return 1;

}

else

{

map[head_i][head_j] = 1;

}

return 0;

}

void draw(int map[SIZE][SIZE])

{

int i, j;

system("cls"); //清除屏幕

for (i = 0; i <= SIZE; i++) //输出上边框

{

if (i == 0)

{

printf("┏");

}

else if (i == SIZE)

{

printf(" ━━┓");

}

else

{

printf(" ━");

}

}

printf("\n");

for (i = 0; i < SIZE; i++)

{

for (j = 0; j < SIZE; j++)

{

if (j == 0) //输出左边框

{

printf("┃ ");

}

if (map[i][j] == 1) //输出蛇头

{

printf("○");

}

else if (map[i][j] > 1) //输出蛇身

{

printf("●");

}

else if (map[i][j] == -1) //输出食物

{

printf("★");

}

else

{

printf(" ");

}

if (j == SIZE - 1) //输出右边框

{

printf("┃ ");

}

}

printf("\n");

}

for (i = 0; i <= SIZE; i++) //输出下边框

{

if (i == 0)

{

printf("┗");

}

else if (i == SIZE)

{

printf(" ━━┛");

}

else

{

printf(" ━");

}

}

printf("\n");

}

这个贪食蛇程序是不是非常简单易懂?快自己动手尝试一下吧!和猎狐一起玩转C语言吧~

5cd95008fc07d9ebbac78b999c99b06c.png

1

f4289e09e8da5b4525e99f2c12ba38d0.png

2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值