IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++编游戏-消灭星星-童年的记忆-此程序标志着c++游戏将会从单调变得丰富 -> 正文阅读

[C++知识库]c++编游戏-消灭星星-童年的记忆-此程序标志着c++游戏将会从单调变得丰富

前言

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

为什么要编消灭星星?

以前觉得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++游戏,全免费。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:34:13  更:2021-07-30 12:35:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 9:00:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码