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)题解  贪吃蛇

华为OD机试真题 Python 实现贪吃蛇

结队-贪吃蛇游戏-项目进度

c语言 贪吃蛇 程序

javascript实现游戏贪吃蛇

结对-贪吃蛇-需求分析