前言
相信你也对消灭星星很感兴趣,因为它曾经是非常受欢迎的一款游戏。它融入进了我们童年的生活中,它让我们找到了不一样的快乐。
为什么要编消灭星星?
以前觉得c++算出来了一个1+1=2感觉很神奇(这也是每一个初学者所经历过的吧......),但后来却不一样了。我们天天刷各种各样的题,一直跟那个以*.exe命名的文件讨价还价,而它反而天天跟你装神弄鬼,你要的是2,它偏偏给你个3,这时候你很想甩了那电脑——黑底白字的3,清清楚楚明明白白。
最近我又碰巧没事,闲在家里看看电视,打打游戏,我竟有了创作消灭星星的灵感和决心!
关于消灭星星
作者的消灭星星,共:
628行,
15528个字符,
10个函数,
内存2MB。
创作此代码历经5个月,357次测试,均无bug。#请放心使用#
代码分解
(完整代码放在篇尾,如果实在复制地恼火,点击链接免费下载cpp和exe文件)
文件的开头
#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");
input=0,jsq=0,jiafen=0,finishjiafen=0;
inputed();
if(sjhang!=-1)
{
if(input==1)
{
chuizi--;
guanqianzongfen+=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=0;
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)
{
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");
input=0,jsq=0,jiafen=0,finishjiafen=0;
inputed();
if(sjhang!=-1)
{
if(input==1)
{
chuizi--;
guanqianzongfen+=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=0;
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)
{
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++游戏,全免费。
|