DEV--C++小游戏(吃星星(1.2))

5 篇文章 0 订阅

目录

吃星星(1.2)

该版本简介+更新说明

分部代码

头文件+命名空间+变量

结构体

角色结构体

星星结构体

打印地图结构体

函数

函数声明

单人模式游戏函数

双人模式游戏函数

开始游戏函数

清屏函数

定点输出函数

隐藏光标函数

输入函数

单人初始化函数

双人初始化函数

主函数

总结

byebye


吃星星(1.2)

该版本是优化好的第一个正式版本


该版本简介+更新说明

我呕心沥血

亿天

亿周更两次

累喜了

经过

DEV--C++小游戏(吃星星(0.1))-CSDN博客

DEV--C++小游戏(吃星星(0.2))-CSDN博客

塑造了

DEV--C++小游戏(吃星星(0.5))-CSDN博客

接着

又推出了

https://blog.csdn.net/lizhaoran22/article/details/138988758

(该版本)

看看:

主界面

单人模式简介界面

单人模式游戏界面

双人模式简介界面

双人模式游戏界面

规则简介界面

该版本对比以前版本的改变:

  1. 增加双人模式
  2. 增加了许多界面
  3. 增加了规则介绍

虽然看着少

但代码从113飞到281

整整多了168行

废话不多说,

代码他来喽!


分部代码

头文件+命名空间+变量

#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
int n,m,wx,wy,cc=-1,fen,fen1,fen2,p1x,p1y,p2x,p2y,pc[2]={},f[4]={cc/16*16+9,cc/16*16+10,cc/16*16+12,cc/16*16+14},x=0;
char a[100][200],w='*',c,ch='I';

不万能的万能头

按键式输入头文件

颜色窗口等头文件

命名空间

c,n:地图大小

wx,wy:星星坐标

cc:颜色

fen:单人得分

fen1:双人得分1

fen2:双人得分2

p1x,p1y:玩家1的x,y坐标

p2x,p2y:玩家2的x,y坐标

pc:角色颜色

f:角色可选颜色

x:对于pc的'i'(循环变量)

a:地图

c:输入变量

w:星星

ch:'I'的变量


结构体

角色结构体
struct people
{
	void Ise()
	{
		for(int i=0;i<4;i++)if((f[i]/17*17==f[i])||(f[i]==cc))f[i]=-1;
		for(int i=0;i<4;i++)if((f[i]!=-1)&&(pc[x]==0))pc[x++]=f[i];
	}
	void yd1()
	{
		(c=='a'&&p1y>0)?a[p1x][--p1y]='I',a[p1x][p1y+1]='x':0;
		(c=='d'&&p1y<m-1)?a[p1x][++p1y]='I',a[p1x][p1y-1]='x':0;
		(c=='w'&&p1x>0)?a[--p1x][p1y]='I',a[p1x+1][p1y]='x':0;
		(c=='s'&&p1x<n-1)?a[++p1x][p1y]='I',a[p1x-1][p1y]='x':0;
		if(int(c)==27)exit(0);
	}
	void yd2()
	{
		(c=='a'&&p1y>0&&a[p1x][p1y-1]!='I')?a[p1x][--p1y]='I',a[p1x][p1y+1]='x':0;
		(c=='d'&&p1y<m-1&&a[p1x][p1y+1]!='I')?a[p1x][++p1y]='I',a[p1x][p1y-1]='x':0;
		(c=='w'&&p1x>0&&a[p1x-1][p1y]!='I')?a[--p1x][p1y]='I',a[p1x+1][p1y]='x':0;
		(c=='s'&&p1x<n-1&&a[p1x+1][p1y]!='I')?a[++p1x][p1y]='I',a[p1x-1][p1y]='x':0;
		(c=='j'&&p2y>0&&a[p2x][p2y-1]!='I')?a[p2x][--p2y]='I',a[p2x][p2y+1]='x':0;
		(c=='l'&&p2y<m-1&&a[p2x][p2y+1]!='I')?a[p2x][++p2y]='I',a[p2x][p2y-1]='x':0;
		(c=='i'&&p2x>0&&a[p2x-1][p2y]!='I')?a[--p2x][p2y]='I',a[p2x+1][p2y]='x':0;
		(c=='k'&&p2x<n-1&&a[p2x+1][p2y]!='I')?a[++p2x][p2y]='I',a[p2x-1][p2y]='x':0;
		if(int(c)==27)exit(0);
	}
	void p1p()
	{
		colorchoose(pc[0]);
		printf("%c",ch);
		colorchoose(cc);
	}
	void p2p()
	{
		colorchoose(pc[1]);
		printf("%c",ch);
		colorchoose(cc);
	}
}p;

选择角色的颜色

单个角色的移动

用到w,a,s,d,Esc

两个角色的移动

用到w,a,s,d,i,j,k,l,Esc

打印角色1

打印角色2


星星结构体
struct xing
{
	void q1()
	{
		int color=rand()%255+0;
		colorchoose(color);
		printf("%c",w);
		colorchoose(cc);
	}
	void q21()
	{
		if((wx==p1x&&wy==p1y))
		{
			while(wx==p1x&&wy==p1y)
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen++;
		}
	}
	void q22()
	{
	    if(wx==p1x&&wy==p1y)
		{
			while((wx==p1x&&wy==p1y)||(wx==p2x&&wy==p2y))
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen1++;
		}
		if(wx==p2x&&wy==p2y)
		{
			while((wx==p1x&&wy==p1y)||(wx==p2x&&wy==p2y))
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen2++;
		}
	}

}xing;

q1:随机颜色的星星

q21:单人模式下星星被吃后移到随机位置

q22:双人模式下星星被吃后移到随机位置


打印地图结构体
struct print
{
	void p1()
	{
		printf("该版本为:吃星星(1.2)\n");
		printf("单人模式\n");
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(i==wx&&j==wy)xing.q1();
				if(i==p1x&&j==p1y)p.p1p();
				if(!(((i==wx&&j==wy)||(i==p1x&&j==p1y))))printf("%c",a[i][j]);
			}
			printf("\n");
		}
	}
	void p2()
	{
		printf("该版本为:吃星星(1.2)\n");
		printf("双人模式\n");
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(i==wx&&j==wy)xing.q1();
				if(i==p1x&&j==p1y)p.p1p();
				if(i==p2x&&j==p2y)p.p2p();
				if(!(((i==wx&&j==wy)||(i==p1x&&j==p1y)||(i==p2x&&j==p2y))))printf("%c",a[i][j]);
			}
			printf("\n");
		}
	}
}pr;

p1:单人模式地图打印,遇到星星、‘I’就去到相应结构体打印

p2:双人模式地图打印,遇到星星、‘I’就去到相应结构体打印


函数

函数声明
void ks();
void cls();
void gotoxy(int x,int y);
void yc();
void colorchoose(int color);
void game1();
void game2();
void in();
void chu1();
void chu2();

提前声明所有函数

防止在函数嵌套式出现错误


单人模式游戏函数
void game1()
{
	while(1)
	{
		yc();
		xing.q21();
		pr.p1();
		printf("得分:%d",fen);
		c=getch();
		cls();
		p.yd1();
	}
}

一直执行

隐藏光标

判断星星是否被吃

打印地图

打印得分

按键输入

清屏

移动


双人模式游戏函数
void game2()
{
	while(1)
	{
		yc();
		xing.q22();
		pr.p2();
		printf("得分1:%d\n",fen1);
		printf("得分2:%d",fen2);
		c=getch();
		cls();
		p.yd2();
	}
}

一直执行

隐藏光标

判断星星是否被吃

打印地图

打印得分

按键输入

清屏

移动


开始游戏函数
void ks()
{
	yc();
	srand(time(0));
	system("mode con cols=90 lines=30");
	colorchoose(11);
	for(int i=1;i<=89;i++)printf("_");
	cout<<"\n";
	for(int i=1;i<=28;i++)printf("|                                                                                       |\n");
	printf("|_");
	for(int i=1;i<=85;i++)printf("_");
	printf("_|");
	colorchoose(12);
	gotoxy(40,14);
	printf("单人模式(a)");
	gotoxy(40,15);
	printf("双人模式(b)");
	gotoxy(40,16);
	printf("游戏规则(c)");
	c=getch();
	switch(c)
	{
		case 'a':
		{
			cls();
			printf("你是I,你在书桌上N天没吃饭了,突然,桌子上出现了一个星星,你不管不顾的冲上前去,直接吃掉,但你看到另一处还有,就拼命的吃......");
			Sleep(5000);
			in();
			chu1();
			break;
		};
		case 'b':
		{
			cls();
			printf("你是I,你和你的朋友在书桌上N天没吃饭了,突然,桌子上出现了一个星星,你们不管不顾的冲上前去,直接吃掉,但你们看到另一处还有,就拼命的吃,最后,两人因为星星而争抢起来....");
			Sleep(5000);
			in();
			chu2();
			break;
		}
		case 'c':
		{
			cls();
			printf("游戏规则:\n单人模式:\n使用wasd进行移动、吃星星,Esc键退出游戏。\n双人模式:\n玩家1使用wasd进行移动、吃星星,玩家2使用ijkl进行移动、吃星星,Esc键退出游戏。");
			Sleep(5000);
		}
		default:ks();
	}
}

隐藏

设置随机种子

调整窗口大小

选择颜色

打印框架

选择颜色

打印主界面

判断按下哪个键

按下a:

清屏

游戏简介

等待5s

输入

初始化

按下b:

清屏

游戏简介

等待5s

输入

初始化

按下c:

清屏

游戏规则简介

等待5s

其他:继续执行开始游戏函数


清屏函数
void cls()
{
	system("cls");
}

清除屏幕上所有东西


定点输出函数
void gotoxy(int x,int y)
{
	HANDLE hOutput;
	COORD loc;
	loc.X=x;
	loc.Y=y;
	hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOutput,loc);
}

到坐标为(x,y)的地方……


隐藏光标函数
void yc()
{
	CONSOLE_CURSOR_INFO cursor_info={1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

将光标隐藏


输入函数
void in()
{
	while(!((n>=5&&n<=20&&m>=5&&m<=20&&cc>=0&&cc<=255)))
	{
		cls();
		printf("行数(5~20):");
		scanf("%d",&n);
		printf("列数(5~20):");
		scanf("%d",&m);
		printf("颜色(0~255):"); 
		scanf("%d",&cc);
	}
}

进行行、列、颜色的输入


单人初始化函数
void chu1()
{
	f[0]=cc/16*16+9;
	f[1]=cc/16*16+10;
	f[2]=cc/16*16+12;
	f[3]=cc/16*16+14;
	p.Ise();
	memset(a,'x',sizeof(a));
	p1x=0;
	p1y=0;
	wx=n/2;
	wy=m/2;
	a[0][0]='I';
	game1();
}

四个颜色

选择颜色

a里全为'x'

角色1坐标

星星坐标

设置‘I’的初始位置

单人游戏函数


双人初始化函数
void chu2()
{
	f[0]=cc/16*16+9;
	f[1]=cc/16*16+10;
	f[2]=cc/16*16+12;
	f[3]=cc/16*16+14;
	p.Ise();
	memset(a,'x',sizeof(a));
	p1x=0;
	p1y=0;
	p2x=n-1;
	p2y=m-1;
	a[0][0]=a[n-1][m-1]='I';
	wx=n/2;
	wy=m/2;
	game2();
}

四个颜色

选择颜色

a里全为'x'

角色1坐标

角色2坐标

星星坐标

设置‘I’的初始位置

双人游戏函数


主函数

int main()
{
	ks();
}

开始函数


1.2版完整代码

#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
int n,m,wx,wy,cc=-1,fen,fen1,fen2,p1x,p1y,p2x,p2y,pc[2]={},f[4]={cc/16*16+9,cc/16*16+10,cc/16*16+12,cc/16*16+14},x=0;
char a[100][200],w='*',c,ch='I';
void ks();
void cls();
void gotoxy(int x,int y);
void yc();
void colorchoose(int color);
void game1();
void game2();
void in();
void chu1();
void chu2();
struct people
{
	void Ise()
	{
		for(int i=0;i<4;i++)if((f[i]/17*17==f[i])||(f[i]==cc))f[i]=-1;
		for(int i=0;i<4;i++)if((f[i]!=-1)&&(pc[x]==0))pc[x++]=f[i];
	}
	void yd1()
	{
		(c=='a'&&p1y>0)?a[p1x][--p1y]='I',a[p1x][p1y+1]='x':0;
		(c=='d'&&p1y<m-1)?a[p1x][++p1y]='I',a[p1x][p1y-1]='x':0;
		(c=='w'&&p1x>0)?a[--p1x][p1y]='I',a[p1x+1][p1y]='x':0;
		(c=='s'&&p1x<n-1)?a[++p1x][p1y]='I',a[p1x-1][p1y]='x':0;
		if(int(c)==27)exit(0);
	}
	void yd2()
	{
		(c=='a'&&p1y>0&&a[p1x][p1y-1]!='I')?a[p1x][--p1y]='I',a[p1x][p1y+1]='x':0;
		(c=='d'&&p1y<m-1&&a[p1x][p1y+1]!='I')?a[p1x][++p1y]='I',a[p1x][p1y-1]='x':0;
		(c=='w'&&p1x>0&&a[p1x-1][p1y]!='I')?a[--p1x][p1y]='I',a[p1x+1][p1y]='x':0;
		(c=='s'&&p1x<n-1&&a[p1x+1][p1y]!='I')?a[++p1x][p1y]='I',a[p1x-1][p1y]='x':0;
		(c=='j'&&p2y>0&&a[p2x][p2y-1]!='I')?a[p2x][--p2y]='I',a[p2x][p2y+1]='x':0;
		(c=='l'&&p2y<m-1&&a[p2x][p2y+1]!='I')?a[p2x][++p2y]='I',a[p2x][p2y-1]='x':0;
		(c=='i'&&p2x>0&&a[p2x-1][p2y]!='I')?a[--p2x][p2y]='I',a[p2x+1][p2y]='x':0;
		(c=='k'&&p2x<n-1&&a[p2x+1][p2y]!='I')?a[++p2x][p2y]='I',a[p2x-1][p2y]='x':0;
		if(int(c)==27)exit(0);
	}
	void p1p()
	{
		colorchoose(pc[0]);
		printf("%c",ch);
		colorchoose(cc);
	}
	void p2p()
	{
		colorchoose(pc[1]);
		printf("%c",ch);
		colorchoose(cc);
	}
}p;
struct xing
{
	void q1()
	{
		int color=rand()%255+0;
		colorchoose(color);
		printf("%c",w);
		colorchoose(cc);
	}
	void q21()
	{
		if((wx==p1x&&wy==p1y))
		{
			while(wx==p1x&&wy==p1y)
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen++;
		}
	}
	void q22()
	{
		if(wx==p1x&&wy==p1y)
		{
			while((wx==p1x&&wy==p1y)||(wx==p2x&&wy==p2y))
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen1++;
		}
		if(wx==p2x&&wy==p2y)
		{
			while((wx==p1x&&wy==p1y)||(wx==p2x&&wy==p2y))
			{
				wx=rand()%n+0;
				wy=rand()%m+0;
			}
			fen2++;
		}
	}

}xing;
struct print
{
	void p1()
	{
		printf("该版本为:吃星星(1.2)\n");
		printf("单人模式\n");
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(i==wx&&j==wy)xing.q1();
				if(i==p1x&&j==p1y)p.p1p();
				if(!(((i==wx&&j==wy)||(i==p1x&&j==p1y))))printf("%c",a[i][j]);
			}
			printf("\n");
		}
	}
	void p2()
	{
		printf("该版本为:吃星星(1.2)\n");
		printf("双人模式\n");
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(i==wx&&j==wy)xing.q1();
				if(i==p1x&&j==p1y)p.p1p();
				if(i==p2x&&j==p2y)p.p2p();
				if(!(((i==wx&&j==wy)||(i==p1x&&j==p1y)||(i==p2x&&j==p2y))))printf("%c",a[i][j]);
			}
			printf("\n");
		}
	}
}pr;
int main()
{
	ks();
}
void game1()
{
	while(1)
	{
		yc();
		xing.q21();
		pr.p1();
		printf("得分:%d",fen);
		c=getch();
		cls();
		p.yd1();
	}
}
void game2()
{
	while(1)
	{
		yc();
		xing.q22();
		pr.p2();
		printf("得分1:%d\n",fen1);
		printf("得分2:%d",fen2);
		c=getch();
		cls();
		p.yd2();
	}
}
void ks()
{
	yc();
	srand(time(0));
	system("mode con cols=90 lines=30");
	colorchoose(11);
	for(int i=1;i<=89;i++)printf("_");
	cout<<"\n";
	for(int i=1;i<=28;i++)printf("|                                                                                       |\n");
	printf("|_");
	for(int i=1;i<=85;i++)printf("_");
	printf("_|");
	colorchoose(12);
	gotoxy(40,14);
	printf("单人模式(a)");
	gotoxy(40,15);
	printf("双人模式(b)");
	gotoxy(40,16);
	printf("游戏规则(c)");
	c=getch();
	switch(c)
	{
		case 'a':
		{
			cls();
			printf("你是I,你在书桌上N天没吃饭了,突然,桌子上出现了一个星星,你不管不顾的冲上前去,直接吃掉,但你看到另一处还有,就拼命的吃......");
			Sleep(5000);
			in();
			chu1();
			break;
		};
		case 'b':
		{
			cls();
			printf("你是I,你和你的朋友在书桌上N天没吃饭了,突然,桌子上出现了一个星星,你们不管不顾的冲上前去,直接吃掉,但你们看到另一处还有,就拼命的吃,最后,两人因为星星而争抢起来....");
			Sleep(5000);
			in();
			chu2();
			break;
		}
		case 'c':
		{
			cls();
			printf("游戏规则:\n单人模式:\n使用wasd进行移动、吃星星,Esc键退出游戏。\n双人模式:\n玩家1使用wasd进行移动、吃星星,玩家2使用ijkl进行移动、吃星星,Esc键退出游戏。");
			Sleep(5000);
		}
		default:ks();
	}
}
void cls()
{
	system("cls");
}
void gotoxy(int x,int y)
{
	HANDLE hOutput;
	COORD loc;
	loc.X=x;
	loc.Y=y;
	hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOutput,loc);
}
void yc()
{
	CONSOLE_CURSOR_INFO cursor_info={1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void colorchoose(int color)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
}
void in()
{
	while(!((n>=5&&n<=20&&m>=5&&m<=20&&cc>=0&&cc<=255)))
	{
		cls();
		printf("行数(5~20):");
		scanf("%d",&n);
		printf("列数(5~20):");
		scanf("%d",&m);
		printf("颜色(0~255):"); 
		scanf("%d",&cc);
	}
}
void chu1()
{
	f[0]=cc/16*16+9;
	f[1]=cc/16*16+10;
	f[2]=cc/16*16+12;
	f[3]=cc/16*16+14;
	p.Ise();
	memset(a,'x',sizeof(a));
	p1x=0;
	p1y=0;
	wx=n/2;
	wy=m/2;
	a[0][0]='I';
	game1();
}
void chu2()
{
	f[0]=cc/16*16+9;
	f[1]=cc/16*16+10;
	f[2]=cc/16*16+12;
	f[3]=cc/16*16+14;
	p.Ise();
	memset(a,'x',sizeof(a));
	p1x=0;
	p1y=0;
	p2x=n-1;
	p2y=m-1;
	a[0][0]=a[n-1][m-1]='I';
	wx=n/2;
	wy=m/2;
	game2();
}

总结

吃星星小游戏擦不多久更到这了

以后可能就更新时间就会很久

因为已经做好了

没什么可更得了

如果大佬们觉得有可以改进的地方

请在评论区发言

我尽快修改

希望多给我意见建议

我也会再看看

对比一下别的游戏

看看还有什么可以改进

希望大佬给我提供宝贵的意见!!!!!

byebye

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值