C++之打地鼠

Hello大家好,我是阳了个阳C++

最近放暑假了,给大家做了一个打地鼠的游戏代码

本来我的计划是写一个计时器,然后在规定时间内打倒一定数量的地鼠才算胜利

可问题是这个计时器我不会写

但为了我的粉丝们,我还是努力学习起来

于是经过一个多星期的学习

我终于是放弃了……

(作者菌不会写线程,有没有大佬能教教我……)

于是我不得不把计时器删掉,做了一个简化版的:

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
char key;
char ground[15][15];
int goal=15,cnt;
void cls(){
	system("cls");
}
void start(){
	cout<<"欢迎来到打地鼠游戏\n\n";
	cout<<"制作:阳了个阳C++\n\n";
	cout<<"进入游戏请按e\n\n";
	cin>>key;
	while(key!='e'){
		cls();
		cout<<"进入游戏请按e\n\n";
		cin>>key;
	}
	return;
}
void rules(){
	cout<<"游戏规则如下\n\n";
	cout<<"开始后,地图上会随机出现一些地鼠(表示为!)\n\n";
	cout<<"你可以通过输入坐标来打倒地鼠\n\n";
	cout<<"被打倒的地鼠将会出现在另一个位置\n\n";
	cout<<"消灭指定数量的地鼠后就会获胜\n\n";
	cout<<"那么,按e开始游戏吧!\n\n";
	cin>>key;
	while(key!='e'){
		cls();
		cout<<"开始游戏请按e\n\n";
		cin>>key; 
	} 
	return;
}
void setmap(){
	for(int i=1;i<=10;i++){
		for(int j=1;j<=10;j++){
			ground[i][j]='.';
		}
	}
	for(int i=1;i<=5;i++){
		int x=rand()%10+1;
		int y=rand()%10+1;
		if(ground[x][y]!='!'){
			ground[x][y]='!';
		}else{
			i--;
		}
	}
}
void ready(){
	for(int i=5;i>0;i--){
		cls();
		cout<<i;
		Sleep(1000);
	}
}
void coutmap(){
	cout<<"已击倒地鼠:"<<cnt<<"个    目标:"<<goal<<"个\n\n";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
	for(int i=0;i<=10;i++){
		cout<<i;
		if(i!=10) cout<<" ";
	}
	cout<<"\n";
	for(int i=1;i<=10;i++){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
		cout<<i;
		if(i!=10) cout<<" ";
		for(int j=1;j<=10;j++){
			if(ground[i][j]=='.'){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
			}else{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
			}
			cout<<ground[i][j]<<" ";
		}
		cout<<"\n";
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
}
void check(int x,int y){
	if(ground[x][y]=='!'){
		cnt++;
		bool ok;
		while(!ok){
			int nx=rand()%10+1,ny=rand()%10+1;
			if(ground[nx][ny]!='!'){
				ground[nx][ny]='!';
				ground[x][y]='.';
				ok=1;
			}
		}
	}
}
void win(){
	cout<<"恭喜你,你通关了!\n\n";
	cout<<"开始下一局请按e\n\n";
	cin>>key;
	if(key!='e'){
		exit(0);
	}
}
int main(){
	srand(time(NULL));
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
	start();
	cls();
	rules();
	cls();
	while(key=='e'){
		setmap();
		ready();
		cls();
		int x,y;
		goal+=5,cnt=0;
		coutmap();
		while(cin>>x>>y){
			if(x>10||y>10||x<1||y<1)
				continue;
			cls();
			check(x,y);
			if(cnt==goal){
				cls();
				win();
				break;
			}
			coutmap();
		}
		cls();
	}
	return 0;
}

如果代码有bug,欢迎大家指出

也请大家放心,等我学会了写线程,我一定还会回来的!!!

(大灰狼:这话怎么那么熟悉呢)

byebye!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值