目录

前言

为什么要编消灭星星?

关于消灭星星

代码更新日志

代码分解

完整代码

后记


前言

相信你也对消灭星星很感兴趣,因为它曾经是非常受欢迎的一款游戏。它融入进了我们童年的生活中,它让我们找到了不一样的快乐。

为什么要编消灭星星?

以前觉得c++算出来了一个1+1=2感觉很神奇(这也是每一个初学者所经历过的吧......),但后来却不一样了。我们天天刷各种各样的题,一直跟那个以*.exe命名的文件讨价还价,而它反而天天跟你装神弄鬼,你要的是2,它偏偏给你个3,这时候你很想甩了那电脑——黑底白字的3,清清楚楚明明白白。

最近我又碰巧没事,闲在家里看看电视,打打游戏,我竟有了创作消灭星星的灵感和决心!

关于消灭星星

作者的消灭星星,共:

628行,

15523个字符,

10个函数,

内存2MB。

测试环境:

Windows7

c++编译器5.11

创作此代码历经5个月,357次测试,均无bug。#请放心使用#

代码更新日志

2021.2.2 消灭方块v1.0.0。

2021.2.5 消灭方块v1.1.2,增加颜色模块,修复了两个bug。

2021.2.6 消灭方块v1.3.3,增加了商店,修复了一个bug。

2021.3.4 消灭方块v1.5.4,增加了退出功能和最高分存储,修复了一个bug。

2021.4.10 消灭星星v2.5.8,全新改版,游戏名更为消灭星星,并修复了n多bug。

2021.4.28 消灭星星v2.6.0,修复了一些bug。

2021.5.5 消灭星星v3.6.0,增加查看信息板块,增加了隐藏板块,等你来探索!

2021.6.17 消灭星星v3.8.0,修复了递归死循环的问题,减少了不必要的代码。

2021.8.12 消灭星星v3.9.1,增加了游戏中途退出功能,修复了n多bug。

代码分解

(完整代码放在篇尾,如果实在复制地恼火,点击下面链接免费下载cpp文件)

免费下载cpp文件

文件的开头

#include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
using namespace std;
int input=0,coin=100,chuizi=2,cp=1,again=0,play[11][11],ceshi[11][11],guanka=-1,aa,bb,cc,dd,ee,sjhang,sjlie,mubiao=0,guanqianzongfen=0,guankazongfen=0,jsq=0,jiafen=0,finishjiafen=0,jihuo=0;
string jihuoma;

函数10个,分别指

锤子商店模块

积分翻倍器商店模块

开始模块

结束判断

输出模块

输入模块

搜索模块

掉落模块

退出判断

主函数。

void shop_chuizi();
void shop_cp();
int start();
bool ended();
void outputed();
void inputed();
void search(int,int);
void falldown();
bool onefalse(int,int);
int main()

主函数内是菜单:

int main()
{srand(time(NULL));HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄while(1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"Welcome to pop star!\n1.开始\n2.商城\n3.我的\n4.继续\n5.清空历史\n";cin>>input;while(input!=1&&input!=2&&input!=3&&input!=4&&input!=5&&input!=6){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"Welcome to pop star!\n1.开始\n2.商城\n3.我的\n4.继续\n5.清空历史\n";cin>>input;}if(input==2){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"Welcome to pop star store!You can buy what you want to buy!\n你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"Welcome to pop star store!You can buy what you want to buy!\n你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1){shop_chuizi();continue;}if(input==2){shop_cp();continue;}if(input==3)continue;}if(input==3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"现在你有:\n"<<chuizi<<"个锤子,\n"<<cp<<"个积分翻倍器,\n"<<coin<<"个金币!\n1.返回";cin>>input;while(input!=1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"现在你有:\n"<<chuizi<<"个锤子,\n"<<cp<<"个积分翻倍器,\n"<<coin<<"个金币!\n1.返回";cin>>input;}continue;}if(input==1){guanka=-1;start();if(sjhang=-1){again=0;guanka--;}}if(input==4){if(guanka==-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你还没有进行过游戏!";Sleep(1000);continue;}else{again=0;guanka--;start();if(sjhang=-1){again=0;guanka--;}}}if(input==5){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);system("cls");cout<<"删除记录中";for(int i=0; i<6; ++i){cout<<'.';Sleep(300);}guanka=-1,guanqianzongfen=0,guankazongfen=0;system("cls");cout<<"删除成功!";Sleep(1000);}if(input==6){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"激活码:";cin>>jihuoma;if(jihuoma=="activation"||jihuoma=="!!!"||jihuoma=="pop"||jihuoma=="666"||jihuoma=="star"){jihuo=1;cout<<"激活成功!";Sleep(1000);}else{cout<<"激活失败!";Sleep(1000);}}}return 0;
}

这才一百行好吗......

然后就是两个商店:

void shop_chuizi()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄if(coin<30){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"金币不足!";Sleep(800);}else{coin-=30,chuizi++;system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"成功购买了一个锤子,现在你有"<<chuizi<<"个锤子。\n你还有"<<coin<<"个金币!";Sleep(1000);}system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1)shop_chuizi();if(input==2)shop_cp();if(input==3);
}
void shop_cp()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄if(coin<80){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"金币不足!";Sleep(800);}else{coin-=80,cp++;system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"成功购买了一个积分翻倍器,现在你有"<<cp<<"个积分翻倍器。\n你还有"<<coin<<"个金币!";Sleep(1000);}system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1)shop_chuizi();if(input==2)shop_cp();if(input==3);
}

两百行了。

紧接着就是最最最最最重要的模块:开始模块

前面是关卡和内容的初始化:

int start()
{if(guanka==-1)++guanka,guanqianzongfen=0,again=0;guanqianzongfen=guankazongfen;HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄while(again==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);system("cls");++guanka;cout<<"第"<<guanka<<"关。";Sleep(1000);for(int i=0; i<11; ++i){for(int j=0; j<11; ++j){play[i][j]=0,ceshi[i][j]=0;}}aa=rand()%50+1,bb=rand()%50+1,cc=rand()%50+1,dd=rand()%50+1,ee=rand()%50+1;while(aa+bb+cc+dd+ee>50){if(aa>1)aa--;if(bb>1)bb--;if(cc>1)cc--;if(dd>1)dd--;if(ee>1)ee--;}ee+=(50-aa-bb-cc-dd-ee),aa*=2,bb*=2,cc*=2,dd*=2,ee*=2;if(jihuo==1){aa=0,bb=0,cc=0,dd=0,ee=100;}for(int i=0; i<aa; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=1;}for(int i=0; i<bb; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=2;}for(int i=0; i<cc; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=3;}for(int i=0; i<dd; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=4;}for(int i=0; i<ee; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=5;}jihuo=0;cout<<"\n正在准备棋盘";for(int i=0; i<6; ++i){cout<<'.';Sleep(300);}mubiao=guanka*5000;for(int i=0; i<guanka; ++i)for(int j=0; j<=i; ++j)mubiao+=1000;

正好300行。

这个板块就是开玩的地方了!

     while(ended()==true){system("cls");jsq=0,jiafen=0,finishjiafen=0;inputed();if(sjhang!=-1){if(input==1){chuizi--;jiafen+=10;play[sjhang][sjlie]=0;}else if(input>1){search(sjhang,sjlie);for(int k=1; k<11; ++k){for(int l=1; l<11; ++l){if(ceshi[k][l]==1){play[k][l]=0;jsq++;}}}if(input==2){cp--;jiafen+=15*jsq;for(int i=2; i<=jsq; ++i)jiafen+=10*i;}jiafen+=15*(jsq-1);for(int i=2; i<jsq; ++i)jiafen+=10*i;}falldown();system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);cout<<"当前分数:"<<guanqianzongfen<<'+'<<jiafen;guanqianzongfen+=jiafen;Sleep(1000);for(int i=0; i<11; ++i)for(int j=0; j<11; ++j)ceshi[i][j+1]=0;}else{again=1;guanka++;break;}}if(guanqianzongfen>=mubiao&&sjhang!=-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"恭喜你,过关了!\n";Sleep(1000);for(int i=1; i<=10; ++i)for(int j=1; j<=10; ++j)if(play[i][j]!=0)finishjiafen++;finishjiafen=2000-finishjiafen*200;if(finishjiafen<0)finishjiafen=0;guanqianzongfen+=finishjiafen;cout<<"剩余星星加分:"<<finishjiafen<<'\n';Sleep(1000);guankazongfen=guanqianzongfen;cout<<"过关金币奖励:30\n";Sleep(1000);cout<<"超分奖励金币:"<<(guankazongfen-mubiao)/200;Sleep(1000);coin=coin+30+(guankazongfen-mubiao)/200;}else if(sjhang!=-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"你输了!\n";Sleep(1000);cout<<"Again?:0";cin>>again;if(again==0){guanka--;guanqianzongfen=0;}}}
}

判断消了星星后结没结束也是很重要的:

bool ended()
{for(int i=1; i<=10; ++i){for(int j=0; j<=10; ++j){if(play[i][j]==play[i-1][j]&&play[i][j]!=0||play[i][j]==play[i+1][j]&&play[i][j]!=0||play[i][j]==play[i][j-1]&&play[i][j]!=0||play[i][j]==play[i][j+1]&&play[i][j]!=0)return true;}}return false;
}

400行。

onefalse便是在search中起到了很大的作用:

bool onefalse(int i,int j)
{if(play[i][j]==play[i-1][j]&&play[i][j]!=0||play[i][j]==play[i+1][j]&&play[i][j]!=0||play[i][j]==play[i][j-1]&&play[i][j]!=0||play[i][j]==play[i][j+1]&&play[i][j]!=0)return true;return false;
}

输出:

void outputed()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄for(int i=0; i<11; ++i){if(i==0){SetConsoleTextAttribute(consolehwnd,13);for(int k=0; k<11; ++k){cout<<setw(2)<<k;}cout<<'\n';continue;}for(int j=0; j<11; ++j){if(j==0){SetConsoleTextAttribute(consolehwnd,13);cout<<setw(2)<<i;continue;}if(play[i][j]==0){SetConsoleTextAttribute(consolehwnd,0);}if(play[i][j]==1){SetConsoleTextAttribute(consolehwnd,153);}if(play[i][j]==2){SetConsoleTextAttribute(consolehwnd,170);}if(play[i][j]==3){SetConsoleTextAttribute(consolehwnd,187);}if(play[i][j]==4){SetConsoleTextAttribute(consolehwnd,204);}if(play[i][j]==5){SetConsoleTextAttribute(consolehwnd,238);}cout<<play[i][j]<<' ';}cout<<'\n';}
}

输入:(也是比较麻烦的一个模块)

void inputed()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';input=3;outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"当前分数:"<<guanqianzongfen<<"\n行:(0可以使用道具)";cin>>sjhang;while(sjhang>10||sjhang<-1){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"当前分数:"<<guanqianzongfen<<"\n行:(0可以使用道具)";cin>>sjhang;}if(sjhang==0){if(chuizi>0&&cp==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"由于你只有锤子,所以你现在正在使用锤子。\n";Sleep(1000);system("cls");input=1;}else if(chuizi==0&&cp>0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"由于你只有积分翻倍器,所以你现在正在使用积分翻倍器。\n";Sleep(1000);system("cls");input=2;}else if(chuizi==0&&cp==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你没有任何道具!\n";Sleep(1000);system("cls");input=-1;}else{SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"请选择你需要的道具:\n1.锤子\n2.积分翻倍器\n";cin>>input;while(input<1||input>2){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"请选择你需要的道具:\n1.锤子\n2.积分翻倍器\n";cin>>input;}}if(!(chuizi==0&&cp==0)){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"正在使用道具。";cout<<"当前分数:"<<guanqianzongfen<<"\n行:";cin>>sjhang;while(sjhang>10||sjhang<1){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"当前分数:"<<guanqianzongfen<<"\n行:";cin>>sjhang;}}}if(input!=-1&&sjhang!=-1){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"列:";cin>>sjlie;while(sjlie>10||sjlie<1){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"无效的输入!请重新输入!\n";cin>>sjlie;}if(play[sjhang][sjlie]==0||onefalse(sjhang,sjlie)==false&&input!=1){system("cls");cout<<"无效的输入!";Sleep(1000);system("cls");inputed();}}
}

搜索模块是用来找连通块的:

void search(int i,int j)
{ceshi[i][j]=1;if(i>0&&i<11&&j>0&&j<11){if(play[i][j]==play[i-1][j]&&ceshi[i-1][j]==0){search(i-1,j);}if(play[i][j]==play[i+1][j]&&ceshi[i+1][j]==0){search(i+1,j);}if(play[i][j]==play[i][j-1]&&ceshi[i][j-1]==0){search(i,j-1);}if(play[i][j]==play[i][j+1]&&ceshi[i][j+1]==0){search(i,j+1);}}
}

掉落模块falldown:

void falldown()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄for(int j=1; j<=10; ++j)for(int k=1; k<10; ++k)for(int i=10; i>1; --i)if(play[i][j]==0&&play[i-1][j]!=0){play[i][j]=play[i-1][j];play[i-1][j]=0;system("cls");cout<<"------------------------------\n";outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);}Sleep(1000);for(int k=1; k<10; ++k){for(int j=1; j<10; ++j){if(play[10][j]==0){for(int i=1; i<=10; ++i){play[i][j]=play[i][j+1];play[i][j+1]=0;outputed;SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);}}}}
}

620行,完美收工。

完整代码

#include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
using namespace std;
int input=0,coin=100,chuizi=2,cp=1,again=0,play[11][11],ceshi[11][11],guanka=-1,aa,bb,cc,dd,ee,sjhang,sjlie,mubiao=0,guanqianzongfen=0,guankazongfen=0,jsq=0,jiafen=0,finishjiafen=0,jihuo=0;
string jihuoma;
void shop_chuizi();
void shop_cp();
int start();
bool ended();
void outputed();
void inputed();
void search(int,int);
void falldown();
bool onefalse(int,int);
int main()
{srand(time(NULL));HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄while(1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"Welcome to pop star!\n1.开始\n2.商城\n3.我的\n4.继续\n5.清空历史\n";cin>>input;while(input!=1&&input!=2&&input!=3&&input!=4&&input!=5&&input!=6){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"Welcome to pop star!\n1.开始\n2.商城\n3.我的\n4.继续\n5.清空历史\n";cin>>input;}if(input==2){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"Welcome to pop star store!You can buy what you want to buy!\n你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"Welcome to pop star store!You can buy what you want to buy!\n你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1){shop_chuizi();continue;}if(input==2){shop_cp();continue;}if(input==3)continue;}if(input==3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"现在你有:\n"<<chuizi<<"个锤子,\n"<<cp<<"个积分翻倍器,\n"<<coin<<"个金币!\n1.返回";cin>>input;while(input!=1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"现在你有:\n"<<chuizi<<"个锤子,\n"<<cp<<"个积分翻倍器,\n"<<coin<<"个金币!\n1.返回";cin>>input;}continue;}if(input==1){guanka=-1;start();if(sjhang=-1){again=0;guanka--;}}if(input==4){if(guanka==-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你还没有进行过游戏!";Sleep(1000);continue;}else{again=0;guanka--;start();if(sjhang=-1){again=0;guanka--;}}}if(input==5){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);system("cls");cout<<"删除记录中";for(int i=0; i<6; ++i){cout<<'.';Sleep(300);}guanka=-1,guanqianzongfen=0,guankazongfen=0;system("cls");cout<<"删除成功!";Sleep(1000);}if(input==6){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"激活码:";cin>>jihuoma;if(jihuoma=="activation"||jihuoma=="!!!"||jihuoma=="pop"||jihuoma=="666"||jihuoma=="star"){jihuo=1;cout<<"激活成功!";Sleep(1000);}else{cout<<"激活失败!";Sleep(1000);}}}return 0;
}
void shop_chuizi()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄if(coin<30){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"金币不足!";Sleep(800);}else{coin-=30,chuizi++;system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"成功购买了一个锤子,现在你有"<<chuizi<<"个锤子。\n你还有"<<coin<<"个金币!";Sleep(1000);}system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1)shop_chuizi();if(input==2)shop_cp();if(input==3);
}
void shop_cp()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄if(coin<80){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"金币不足!";Sleep(800);}else{coin-=80,cp++;system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"成功购买了一个积分翻倍器,现在你有"<<cp<<"个积分翻倍器。\n你还有"<<coin<<"个金币!";Sleep(1000);}system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;while(input!=1&&input!=2&&input!=3){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你有:"<<coin<<"个金币。\n1.锤子:30个金币\n2.积分翻倍器:80个金币\n3.返回\n";cin>>input;}if(input==1)shop_chuizi();if(input==2)shop_cp();if(input==3);
}
int start()
{if(guanka==-1)++guanka,guanqianzongfen=0,again=0;guanqianzongfen=guankazongfen;HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄while(again==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);system("cls");++guanka;cout<<"第"<<guanka<<"关。";Sleep(1000);for(int i=0; i<11; ++i){for(int j=0; j<11; ++j){play[i][j]=0,ceshi[i][j]=0;}}aa=rand()%50+1,bb=rand()%50+1,cc=rand()%50+1,dd=rand()%50+1,ee=rand()%50+1;while(aa+bb+cc+dd+ee>50){if(aa>1)aa--;if(bb>1)bb--;if(cc>1)cc--;if(dd>1)dd--;if(ee>1)ee--;}ee+=(50-aa-bb-cc-dd-ee),aa*=2,bb*=2,cc*=2,dd*=2,ee*=2;if(jihuo==1){aa=0,bb=0,cc=0,dd=0,ee=100;}for(int i=0; i<aa; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=1;}for(int i=0; i<bb; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=2;}for(int i=0; i<cc; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=3;}for(int i=0; i<dd; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=4;}for(int i=0; i<ee; ++i){sjhang=rand()%10+1,sjlie=rand()%10+1;while(play[sjhang][sjlie]!=0)sjhang=rand()%10+1,sjlie=rand()%10+1;play[sjhang][sjlie]=5;}jihuo=0;cout<<"\n正在准备棋盘";for(int i=0; i<6; ++i){cout<<'.';Sleep(300);}mubiao=guanka*5000;for(int i=0; i<guanka; ++i)for(int j=0; j<=i; ++j)mubiao+=1000;while(ended()==true){system("cls");jsq=0,jiafen=0,finishjiafen=0;inputed();if(sjhang!=-1){if(input==1){chuizi--;jiafen+=10;play[sjhang][sjlie]=0;}else if(input>1){search(sjhang,sjlie);for(int k=1; k<11; ++k){for(int l=1; l<11; ++l){if(ceshi[k][l]==1){play[k][l]=0;jsq++;}}}if(input==2){cp--;jiafen+=15*jsq;for(int i=2; i<=jsq; ++i)jiafen+=10*i;}jiafen+=15*(jsq-1);for(int i=2; i<jsq; ++i)jiafen+=10*i;}falldown();system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);cout<<"当前分数:"<<guanqianzongfen<<'+'<<jiafen;guanqianzongfen+=jiafen;Sleep(1000);for(int i=0; i<11; ++i)for(int j=0; j<11; ++j)ceshi[i][j+1]=0;}else{again=1;guanka++;break;}}if(guanqianzongfen>=mubiao&&sjhang!=-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"恭喜你,过关了!\n";Sleep(1000);for(int i=1; i<=10; ++i)for(int j=1; j<=10; ++j)if(play[i][j]!=0)finishjiafen++;finishjiafen=2000-finishjiafen*200;if(finishjiafen<0)finishjiafen=0;guanqianzongfen+=finishjiafen;cout<<"剩余星星加分:"<<finishjiafen<<'\n';Sleep(1000);guankazongfen=guanqianzongfen;cout<<"过关金币奖励:30\n";Sleep(1000);cout<<"超分奖励金币:"<<(guankazongfen-mubiao)/200;Sleep(1000);coin=coin+30+(guankazongfen-mubiao)/200;}else if(sjhang!=-1){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout<<"你输了!\n";Sleep(1000);cout<<"Again?:0";cin>>again;if(again==0){guanka--;guanqianzongfen=0;}}}
}
bool ended()
{for(int i=1; i<=10; ++i){for(int j=0; j<=10; ++j){if(play[i][j]==play[i-1][j]&&play[i][j]!=0||play[i][j]==play[i+1][j]&&play[i][j]!=0||play[i][j]==play[i][j-1]&&play[i][j]!=0||play[i][j]==play[i][j+1]&&play[i][j]!=0)return true;}}return false;
}
bool onefalse(int i,int j)
{if(play[i][j]==play[i-1][j]&&play[i][j]!=0||play[i][j]==play[i+1][j]&&play[i][j]!=0||play[i][j]==play[i][j-1]&&play[i][j]!=0||play[i][j]==play[i][j+1]&&play[i][j]!=0)return true;return false;
}
void outputed()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄for(int i=0; i<11; ++i){if(i==0){SetConsoleTextAttribute(consolehwnd,13);for(int k=0; k<11; ++k){cout<<setw(2)<<k;}cout<<'\n';continue;}for(int j=0; j<11; ++j){if(j==0){SetConsoleTextAttribute(consolehwnd,13);cout<<setw(2)<<i;continue;}if(play[i][j]==0){SetConsoleTextAttribute(consolehwnd,0);}if(play[i][j]==1){SetConsoleTextAttribute(consolehwnd,153);}if(play[i][j]==2){SetConsoleTextAttribute(consolehwnd,170);}if(play[i][j]==3){SetConsoleTextAttribute(consolehwnd,187);}if(play[i][j]==4){SetConsoleTextAttribute(consolehwnd,204);}if(play[i][j]==5){SetConsoleTextAttribute(consolehwnd,238);}cout<<play[i][j]<<' ';}cout<<'\n';}
}
void inputed()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';input=3;outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"当前分数:"<<guanqianzongfen<<"\n行:(0可以使用道具)";cin>>sjhang;while(sjhang>10||sjhang<-1){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"当前分数:"<<guanqianzongfen<<"\n行:(0可以使用道具)";cin>>sjhang;}if(sjhang==0){if(chuizi>0&&cp==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"由于你只有锤子,所以你现在正在使用锤子。\n";Sleep(1000);system("cls");input=1;}else if(chuizi==0&&cp>0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"由于你只有积分翻倍器,所以你现在正在使用积分翻倍器。\n";Sleep(1000);system("cls");input=2;}else if(chuizi==0&&cp==0){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"你没有任何道具!\n";Sleep(1000);system("cls");input=-1;}else{SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"请选择你需要的道具:\n1.锤子\n2.积分翻倍器\n";cin>>input;while(input<1||input>2){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"请选择你需要的道具:\n1.锤子\n2.积分翻倍器\n";cin>>input;}}if(!(chuizi==0&&cp==0)){system("cls");SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"正在使用道具。";cout<<"当前分数:"<<guanqianzongfen<<"\n行:";cin>>sjhang;while(sjhang>10||sjhang<1){system("cls");cout<<"第"<<guanka<<"关——要求分数:"<<mubiao<<'\n';outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"当前分数:"<<guanqianzongfen<<"\n行:";cin>>sjhang;}}}if(input!=-1&&sjhang!=-1){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);cout<<"列:";cin>>sjlie;while(sjlie>10||sjlie<1){SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"无效的输入!请重新输入!\n";cin>>sjlie;}if(play[sjhang][sjlie]==0||onefalse(sjhang,sjlie)==false&&input!=1){system("cls");cout<<"无效的输入!";Sleep(1000);system("cls");inputed();}}
}
void search(int i,int j)
{ceshi[i][j]=1;if(i>0&&i<11&&j>0&&j<11){if(play[i][j]==play[i-1][j]&&ceshi[i-1][j]==0){search(i-1,j);}if(play[i][j]==play[i+1][j]&&ceshi[i+1][j]==0){search(i+1,j);}if(play[i][j]==play[i][j-1]&&ceshi[i][j-1]==0){search(i,j-1);}if(play[i][j]==play[i][j+1]&&ceshi[i][j+1]==0){search(i,j+1);}}
}
void falldown()
{HANDLE consolehwnd;//创建句柄consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄for(int j=1; j<=10; ++j)for(int k=1; k<10; ++k)for(int i=10; i>1; --i)if(play[i][j]==0&&play[i-1][j]!=0){play[i][j]=play[i-1][j];play[i-1][j]=0;system("cls");cout<<"------------------------------\n";outputed();SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);}Sleep(1000);for(int k=1; k<10; ++k){for(int j=1; j<10; ++j){if(play[10][j]==0){for(int i=1; i<=10; ++i){play[i][j]=play[i][j+1];play[i][j+1]=0;outputed;SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY|FOREGROUND_BLUE);}}}}
}

后记

全身心打造c++游戏,全免费。

c++编游戏-消灭星星-童年的记忆-此程序标志着c++游戏将会从单调变得丰富相关推荐

  1. js小游戏 - 消灭星星

    在线地址 简介: 刚学js的时候写了一个消灭星星的小游戏的, 现在改进下算法,复用dom加快渲染: <!DOCTYPE html> <html lang="en" ...

  2. python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...

    谈到记忆里的小游戏,俄罗斯方块是大家一定会想到的一款游戏,自己写出来的应该玩起来更有感觉,然后就写了一个俄罗斯方块的游戏 给大家分享一下这个游戏的源码 先用python创建一个py文件 定义这次程序所 ...

  3. Cocos Creator开发游戏消灭星星——星星生成

    先来说下要实现的功能 根据一定规则生成关卡 实现消除等逻辑 游戏结束检测 本地缓存游戏进度 准备工作 建好工程,使用编辑器搭建游戏场景.我搭建的场景如下图: 简单说明下: New Sprite是场景中 ...

  4. 简单的纯JS小游戏--消灭星星

    先看看效果图: 因为CSDN图片大小的限制,所以只截了部分区域 先准备css和一张星星图片,很简单,body背景设为黑色. <style>body {background-color: b ...

  5. JavaScript+HTML实现小游戏“消灭星星”

    代码可全部用JavaScript写,也可以用使用CSS添加部分样式.下面代码全部放在头部里面. window.onload=function(){document.body.bgColor=" ...

  6. 运用c++与easyx图形库实现消灭星星最基本的消除功能、掉落功能以及判断死锁的方式

    运用c++与easyx图形库实现消灭星星最基本的消除功能.掉落功能以及判断死锁的方式 写在前面的话 此程序只实现了游戏的小部分内容,没有华丽的外观与消除特效 消灭星星是一款前些年十分流行的手机游戏,玩 ...

  7. 很多小伙伴找我说要一个Python制作的消灭星星小游戏,必须给你们安排好!!

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...

  8. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)

    背景: 来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文.消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏--粉碎糖果传奇,到总是可以在游 ...

  9. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第二篇(算法)

    背景: 上一节,我们已经把消灭星星的界面搭建好了,流程也跑通了. 这一篇涉及到程序的算法,也许是最难的部分了,理解起来需要多花点时间,而且我提供的算法未必就是最好的,如果读者有更优更好的算法,希望分享 ...

最新文章

  1. BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)
  2. 使用Win API创建顶级菜单(不使用资源文件)
  3. 《JavaScript快速全栈开发》作者Azat Mardanov:现在是拥抱Node技术栈的最佳时机
  4. 企业微信_客户联系,获取客户及客户群列表及详情
  5. java SSH编码规范
  6. Hibernate 一对多连接表单向关联
  7. c语言学生成绩管理系统的设计,C语言学生成绩管理系统设计
  8. 从网络启动恢复RG750Gr3
  9. 上月用得好好的支付宝获取月账单的Java接口,月初突然返回“入参不合法”的解决方法
  10. 网络—— 数据链路层,MTU
  11. Python_爬虫系列_10.各种案例集合
  12. Java 在Word中创建多级项目符号列表和编号列表
  13. 终于知道怎么看辐射3的地图了
  14. 使用openGL,用Bresenham算法画椭圆
  15. 不锈钢常识 - Powered by Discuz!
  16. uebs游戏_UEBS Ultimate Epic Battle电脑版
  17. 手机恢复出厂设置后一直显示无服务器,手机恢复出厂设置后开不了机怎么办【图文教程】...
  18. FPGA与CYUSB3014实现USB3.0数据传输学习笔记(1)
  19. 利用朴素贝叶斯模型识别垃圾邮件
  20. SEO人员,与行业站二级域名换友链会吃亏吗?

热门文章

  1. 与师生谈人工智能5:强人工智能
  2. SQL查询——各科前三名的成绩(改良版)
  3. ABAP中不修改内表参照的结构,给内表/结构体增加字段
  4. 安卓remount操作步骤
  5. swift系统中的服务器上,尝试Swift服务器框架 - Perfect
  6. 【网络】Windows电脑端本地ip和公网ip的获取
  7. 【SVM回归预测】基于matlab粒子群算法优化SVM回归预测【含Matlab源码 1424期】
  8. 【备忘】python量化交易
  9. 字符串中各类字符数的统计
  10. PHP 7面向对象的全部文章(OOP)