目录
吃星星(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
(该版本)
看看:
主界面
单人模式简介界面
单人模式游戏界面
双人模式简介界面
双人模式游戏界面
规则简介界面
该版本对比以前版本的改变:
- 增加双人模式
- 增加了许多界面
- 增加了规则介绍
虽然看着少
但代码从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();
}
总结
吃星星小游戏擦不多久更到这了
以后可能就更新时间就会很久
因为已经做好了
没什么可更得了
如果大佬们觉得有可以改进的地方
请在评论区发言
我尽快修改
希望多给我意见建议
我也会再看看
对比一下别的游戏
看看还有什么可以改进
希望大佬给我提供宝贵的意见!!!!!