c++实现贪吃蛇小游戏
Posted Wang_rush
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++实现贪吃蛇小游戏相关的知识,希望对你有一定的参考价值。
开发环境:Codeblocks 17.12
我的软件课程设计题目选取的就是贪吃蛇小游戏,我通过在网上找一些资料和博客学习后,进行了设计。
下面给出注释版代码:
#include <bits/stdc++.h>
#include <windows.h>
#include <ctime>
#include <conio.h>
using namespace std;
#define getrand(a,b) (rand()%b+a)///获取随机数
bool randz=true; ///是否随机生成障碍物(1随机 0不随机)
int skin=0; ///配色:0经典 1蓝白 2红白 3绿白 4草地 5科技 6随机 7混乱 8浪漫 9黑白
char peise[10][5]="简约","蓝白","红白","绿白","草地","科技","随机","混乱","浪漫","黑白";
char YN[2][3]="否","是";
int xl=20,yl=12;///地图的长和宽(不包括边界)
bool faster=1;
int len=3;///蛇的初始长度
int food=1;///现在是否存在食物
int setspeed=25;
int fangxiang[5][2]=///方向
0, 0,
0,-1,
0, 1,
-1, 0,
1, 0
;
int d=2;///当前蛇的移动方向
/// 1上 2下 3左 4右
COORD head;///蛇头坐标
int room[32][22];///用于储存地图
void choose();///游戏设置
int gaming();///开始游戏
void printr();///打印地图
bool checkr();
void checkr2(int,int);
void go(int,int);
void color(int);///颜色控制函数
void smove();///蛇的移动
void makefood();///随机生成食物
bool goout(int,int);///判断是否出界
int returnspeed() ;
void pdot();///输出一个点
void phead();///输出蛇头
void pbody();///输出蛇的身体
void pwall();///输出墙
void pfood();///输出食物
void pspace();///输出背景
int main()
CONSOLE_CURSOR_INFO cursor_info=1,0;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);///隐藏光标
unsigned seed=time(0);
srand(seed);///设置随机数种子
go(4,4);pdot();color(240);printf("开始游戏");
go(4,7);pdot();color(15);printf("设置游戏");
int a=0;
int key=0;
while(key!=13)///回车键
key=getch();
if(key==224)
key=getch();
if(key==72||key==80) a=1-a;
if(!a)
go(4,4),pdot(),color(240),printf("开始游戏"),go(4,7),pdot(),color(15),printf("设置游戏");
else
go(4,4),pdot(),color(15),printf("开始游戏"),go(4,7),pdot(),color(240),printf("设置游戏");
if(a)
choose();return 0;
while(1)
if(gaming())///进入游戏
system("cls");system("color 0F");main();return 0;
return 0;
void go(int x,int y) ///光标移动函数,X表示横坐标,Y表示纵坐标。
COORD coord; ///使用头文件自带的坐标结构
coord.X=x*2; ///这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围
coord.Y=y+1;
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); ///获得标准输出句柄
SetConsoleCursorPosition(a,coord); /// 以标准输出的句柄为参数设置控制台光标坐标
void choose()///游戏设置
system("cls");///清屏
system("color 0F");///亮白色
color(15);
go(3,2);printf("地图长度");
go(3,3);printf("地图宽度");
go(3,4);printf("移动速度");
go(3,5);printf("是否随机生成障碍物");
go(3,6);printf("是否开启长按加速功能");
go(3,7);printf("配色");
color(240);
go(14,2);printf(" <%d> ",xl);
color(15);
go(14,3);printf(" <%d>",yl);
go(14,4);printf(" <%d>",returnspeed());
go(14,5);printf(" <%s>",YN[randz]);
go(14,6);printf(" <%s>",YN[faster]);
go(14,7);printf(" <%s>",peise[skin]);
int a=1;
bool b=0;
int key=0;
go(1,1+a);printf(">>");
while(key!=27)///ESC键
key=getch();
if(key==224)
key=getch();
if(key==72||key==80)
if(a==1)
go(14,2),color(15),printf(" <%d> ",xl);
if(a==2)
go(14,3),color(15),printf(" <%d> ",yl);
if(a==3)
go(14,4),color(15),printf(" <%d> ",returnspeed());
if(a==4)
go(14,5),color(15),printf(" <%s> ",YN[randz]);
if(a==5)
go(14,6),color(15),printf(" <%s> ",YN[faster]);
if(a==6)
go(14,7),color(15),printf(" <%s> ",peise[skin]);
go(1,1+a);
printf(" ");
if(key==72)
if(a>1) a--;
if(key==80)
if(a<6) a++;
if(key==75)
if(a==1&&xl>8)
xl--;
if(a==2&&yl>8)
yl--;
if(a==3&&setspeed<50)
setspeed+=5;
if(a==4)
randz=1-randz;
if(a==5)
faster=1-faster;
if(a==6)
skin--,skin+=(skin<0?10:0);
if(key==77)
if(a==1&&xl<30)
xl++;
if(a==2&&yl<20)
yl++;
if(a==3&&setspeed>10)
setspeed-=5;
if(a==4)
randz=1-randz;
if(a==5)
faster=1-faster;
if(a==6)
skin++,skin-=(skin>9?10:0);
///更新数值
if(a==1)
go(14,2),color(240),printf(" <%d> ",xl);
if(a==2)
go(14,3),color(240),printf(" <%d> ",yl);
if(a==3)
go(14,4),color(240),printf(" <%d> ",returnspeed());
if(a==4)
go(14,5),color(240),printf(" <%s> ",YN[randz]);
if(a==5)
go(14,6),color(240),printf(" <%s> ",YN[faster]);
if(a==6)
go(14,7),color(240),printf(" <%s> ",peise[skin]);
go(1,1+a);color(15);printf(">>");
system("cls");system("color 0F");///清屏
main();
int gaming()
system("cls");system("color 0F");///清屏
len=3;///蛇初始长度
for(int i=0;i<=xl+1;i++)///打印边框
for(int j=0;j<=yl+1;j++)
if(i==0||j==0||i==xl+1||j==yl+1)
room[i][j]=-1;
else
room[i][j]=0;
if(randz)///生成随机障碍物
int ii,iii;
int jj=getrand(2,4)-1;
for(int j=jj;j<=yl;j+=getrand(1,3))
ii=getrand(1,xl);
iii=getrand(1,xl/2.5);
for(int i=ii;i<=min(ii+iii,xl);i++)
room[i][j]=-1;
while(!checkr())
for(int i=1;i<=xl;i++)
for(int j=1;j<=yl;j++)
room[i][j]=0;
jj=getrand(2,4)-1;
for(int j=jj;j<=yl;j+=getrand(1,3))
ii=getrand(1,xl-1)题解 贪吃蛇