在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
对于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); //移动光标到x,y处
}
//**初始化地图数据**//
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用来吸收输入,qq和pp用来随机初始化果实坐标
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;
}
3、贪吃蛇项目课程推荐
博学谷专门为广大的C语言学习者推出了项目实战的免费课程,让大家可以通过贪吃蛇小游戏项目学习C语言,学习C语言数组、C语言指针、C语言结构体、C语言链表、贪吃蛇小游戏实现等知识点。该课程由精通C、C++、C#、Javascript、Lua等编程语言,精通MySQL、Oracle、SQLServer等关系数据库的高级讲师为大家授课,深入浅出帮助大家更加轻松地学习C语言。
以上就是C语言贪吃蛇项目的详解,大家都学会如何编写贪吃蛇项目了吗?如果对贪吃蛇项目还有什么疑问,可以上博学谷进行视频课程的免费学习,相信可以帮助大家更加清晰的理解C语言的核心基础知识点,以及完成贪吃蛇项目的实现。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
五个常用的Bash历史记录操作方式
众所周知,Bash历史记录里有许多快捷方式的记录,让人眼花缭乱。其实这些快捷方式使用起来,可以极大的提高我们学习和工作的效率。如果大家觉得这些方式很难记,可以循序渐进,每天只学一点内容,这样就能轻松掌握。下面小编将选五个最常用到的Bash历史记录操作方式为大家介绍。
4889
2019-11-08 20:01:38
新手如何学习编程?
学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。编程是一种融汇贯通的东西,学会基础到后面就越来越简单了,而且可以向多种语言发展,因为毕竟世上无难事只怕有心人,下面说明一些学习编程的步骤吧!
6840
2020-01-13 17:30:02
C语言学习心得和经验分享
一直以来,C语言都是程序员的必修课。作为长期排在各大编程语言榜首的热门语言,C语言直到今天在编程界依然拥有很重要的地位。因此,如果是想开始自己的程序员生涯,绝大多数人都会从学习C语言开始。然而,对于缺乏一定编程基础的初学者来讲,学习C语言的过程并不轻松,因此我们必须掌握科学的学习方法,合理规划自己的学习进度。这里我将作为过来人,与大家分享一下C语言的学习心得和经验,希望对大家的入门有所帮助。
6964
2020-03-06 12:50:42
初学者如何学习计算机编程?
互联网时代下,计算机已成为我们不可或缺的工具。而计算机编程则相当于指令集,它告诉计算机应该如何执行特殊的任务。相反,没有这些特殊的指令,就不能执行预期的任务,达不到最终的效果。由此可见计算机编程的重要性。那么想要学习计算机编程,又不知从何下手的小白们,希望以下信息可以给你帮助。
4515
2020-03-30 14:00:02
入门计算机编程的方法及书籍资料推荐
编程也就是编写程序,通俗的来讲,就是按照一定的编写程序,使计算机能够按照人类的指令去完成一些运行。随着科学技术快速发展,计算机行业也在蓬勃发展,由此对IT行业人才有了大量需求。做编程人员是个不错的职业,那么入门计算机编程适合什么课程或书籍?
5308
2020-06-18 16:43:37