温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

利用C语言编写贪吃蛇的方法介绍

发布时间:2020-03-23 14:52:06 来源:亿速云 阅读:231 作者:小新 栏目:编程语言

如何利用C语言编写贪吃蛇?对于C语言的初学者来讲,没有什么比利用C语言来编写贪吃蛇项目更让人有成就感的了。贪吃蛇项目可以说是C语言最经典的实战项目之一。下面我们来看看利用C语言编写贪吃蛇的方法吧。

 利用C语言编写贪吃蛇的方法介绍

利用C语言编写贪吃蛇的方法介绍

1、贪食蛇的设计思路

初始化分为欢迎界面、创建地图、初始化蛇身和创建食物。然后通过按键识别操作,进行判断。一方面蛇每次移动,蛇的节点坐标更新。另一方面是否满足游戏结束条件,即撞墙,撞到自己,用户结束游戏。要么是吃到食物或没吃到食物。

2、实现代码:

#include "stdafx.h"

#include <stdio.h>

#include <windows.h>

#include <time.h>

#include <conio.h>

#include <stdlib.h>

//方向键的ASCLL:72,左75,右77,下80

//背景颜色的代码: 0=黑色  1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色

//**改变当前光标方块的背景颜色和字体颜色**//

void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {

         HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台的句柄

         SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改变当前光标的背景和字体颜色

}

//**改变光标的位置**//

void gotoxy(int x, int y) {

         HANDLE handle;

         COORD coord;   //获取坐标轴结构体

         coord.X = x;

         coord.Y = y;

         handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台句柄,值为-11

         SetConsoleCursorPosition(handle, coord);   //移动光标到xy

}

//**初始化地图数据**//

void restart(int bk[20][20], int look[4], int move[20][20]) {

         //bk为总的地图数据记录整个地图,为1时表示墙体,为2时表示果实,为3时表示蛇

         //look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,4表示分数

         //move记录蛇走过的路程,用来打印蛇时判断用

         int pp, qq;  //用来记录获取的随机坐标

         //接下来要初始化整个地图//

         for(int i=0;i<=16;i++)

                   for (int j = 0; j <= 16; j++) {

                            if (i == 0 || i == 16 || j == 0 || j == 16)  bk[i][j] = 1;//1表示墙体

                            else bk[i][j] = 0; //0表示什么都没有

                            move[i][j] = 0;    //该数组用来记录蛇移动的轨迹

                   }

         //将蛇初始化在8,8坐标上

         bk[8][8] = 3;

         move[8][8] = 1;//则此时8,8,上的轨迹就应该记录为1

         move[0][0] = 1;//用此来记录步数

         pp = rand() % 15 + 1;//范围是1-15

         qq = rand() % 15 + 1;

         bk[pp][qq] = 2;//表示这个位置有果实了

         look[0] = 1;//表示朝向,向上

         look[1] = 1;//表示长度

         look[2] = 0;//当为1是表示失败

         look[3] = 0;//记录得分

         //接下来要绘制地图//

         for(int i=0;i<=16;i++)

                   for (int j = 0; j <= 16; j++) {

                            gotoxy(i * 2, j);//光标移动,每个光标都是矩形

                            switch (bk[i][j]) {

                            case 0:

                                     BackGround(0, 0);

                                     break;//如果没有东西打印黑色

                            case 1:

                                     BackGround(0, 1);

                                     break;//墙打印蓝色

                            case 2:

                                     BackGround(0, 2);

                                     break;//果实打印绿色

                            case 3:

                                     BackGround(0, 3);

                                     break;//蛇打印湖蓝色

                            default:

                                     break;

                            }

                            printf("  ");//地图中直接就是涂空格符

                   }

         //接下来要显示积分//

         gotoxy(35, 0);

         BackGround(7, 0);//用白字黑底打印

         printf("现在得分是:%d,请再接再厉!^_^", look[2]);

}

//**运动主体**//

void map(int bk[20][20], int look[4], int xy[2], int move[20][20]) {

         //bk是地图信息,look作数据记录,xy记录坐标,move记录蛇的运动轨迹

         int b[10], qq=0, pp=0;//b用来吸收输入,qqpp用来随机初始化果实坐标

         if (kbhit()) {//记录按下的是哪个方向键

                   b[0] = getch();//b来记录

                   if (b[0] == 224)  b[0] = getch();//如果为224表示为方向键,但是要再一次获取才行

                   if (b[0] == 72 && look[0] != 2)

                            //如果输入的为上并且朝向不为下

                            look[0] = 1;

                   if (b[0] == 80 && look[0] != 1)

                            look[0] = 2;

                   if (b[0] == 75 && look[0] != 4)

                            look[0] = 3;

                   if (b[0] == 77 && look[0] != 3)

                            look[0] = 4;

         }

         switch (look[0]) {

         case 1:

                   //往上走

                   xy[1]--;

                   break;

         case 2:

                   //往下走

                   xy[1]++;

                   break;

         case 3:

                   //往左走

                   xy[0]--;

                   break;

         case 4:

                   //往右走

                   xy[0]++;

                   break;

         }

         //接下来蛇就开始走动了//

         move[0][0]++;//蛇的步数加一

         move[xy[0]][xy[1]] = move[0][0];//记录当前格子中蛇的轨迹

         gotoxy(35, 2);

         BackGround(7, 0);

         printf("横坐标:%d,纵坐标:%d", xy[0],xy[1]);

         gotoxy(xy[0] * 2, xy[1]);//这里蛇头就往前移动了

         BackGround(0, 3);//与蛇体一个颜色

         printf("  ");

 

         //如果吃了果实//

         if (bk[xy[0]][xy[1]] == 2) {

                   look[2]++;//分数加一

                   look[1]++;//长度加一

                   //更新分数

                   gotoxy(35, 0);

                   BackGround(7, 0);

                   printf("现在得分是:%d,请再接再厉!^_^", look[2]);

                   while (bk[pp][qq] != 0) {

                            pp = rand() % 15 + 1;

                            qq = rand() % 15 + 1;

                   }

                   bk[pp][qq] = 2;//将这个地方变为果实

                   gotoxy(pp * 2, qq);

                   BackGround(0, 2);

                   printf("  ");

         }

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

         if (bk[xy[0]][xy[1]] == 1 || bk[xy[0]][xy[1]] == 3) {

                   look[3] = 1;//表示已经输了

                   gotoxy(6, 6);

                   BackGround(7, 0);

                   printf("你输了,最后得分:%d", look[2]);

         }

 

         bk[xy[0]][xy[1]] = 3;//使这个位置变成蛇

         //接下来要检测蛇然后刷新蛇的位置//

         for(int i=0;i<=16;i++)

                   for (int j = 0; j <= 16; j++) {

                            if (move[i][j] == move[xy[0]][xy[1]] - look[1]){

                                     //如果符合这个条件,则表示蛇已经移动出这个位置了

                                     //要删除这个位置的蛇尾巴

                                     //一次只有一个方块会符合要求吧?

                                     bk[i][j] = 0;

                                     gotoxy(i * 2, j);

                                     BackGround(0, 0);

                                     printf("  ");

                                     break;//一次只找一个

                            }

                   }

         end:;

}

int main() {

         int bk[20][20], xy[2], move[20][20], look[4];

         xy[1] = xy[0] = 8;

         srand((unsigned) time(NULL));//初始化随机种子

         system("pause");

         restart(bk, look, move);

         while (look[3] == 0) {

                   Sleep(200);//休眠400ms一次

                   map(bk, look, xy, move);

         }

         system("pause");

         printf("游戏结束,谢谢游玩!^_^");

         return 0;

}

看完上文你知道如何利用C语言编写贪吃蛇了吗?如果还是不太了解,可以关注亿速云的其他资讯内容,一定会找到合适你的哦。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI