目录
吃星星(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();
}
总结
吃星星小游戏擦不多久更到这了
以后可能就更新时间就会很久
因为已经做好了
没什么可更得了
如果大佬们觉得有可以改进的地方
请在评论区发言
我尽快修改
希望多给我意见建议
我也会再看看
对比一下别的游戏
看看还有什么可以改进
希望大佬给我提供宝贵的意见!!!!!