社区讨论

手写的扫雷和开枪小游戏

灌水区参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lzmn55im
此快照首次捕获于
2024/08/09 19:45
2 年前
此快照最后确认于
2024/08/09 19:55
2 年前
查看原帖
CPP
//扫雷;
1
#include<bits/stdc++.h>
#include<conio.h>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<windows.h>
#define set_color(d) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|d)
#define r FOREGROUND_RED
#define b FOREGROUND_BLUE
#define g FOREGROUND_GREEN
#define N 1000
using namespace std;
int MAX,leis,sengy,gai;
bool chess[N][N];
char ans_chess[N][N];
string in_play_chess[N][N];
void init_play(){
	srand(time(0));
	for(int i=1;i<=MAX;i++){
		for(int j=1;j<=MAX;j++){
			int read_rand;
			read_rand=rand()%gai;
			if(read_rand==0)chess[i][j]=1,leis++;
			srand(rand());
		}
	}
}
void init_maths(){
	int f_where[3][9]={{0},{0,0,1,1,1,0,-1,-1,-1},{0,1,1,0,-1,-1,-1,0,1}};
	for(int i=1;i<=MAX;i++){
		for(int j=1;j<=MAX;j++)
		{
			in_play_chess[i][j]="";
			if(chess[i][j]) {
				ans_chess[i][j]='*';
				continue;
			}
			ans_chess[i][j]='0';
			for(int k=1;k<=8;k++){
				int fx=i+f_where[1][k];
				int fy=j+f_where[2][k];
				ans_chess[i][j]+=chess[fx][fy];
			}
		}
	}
}
void go_to_big(int x,int y)
{
	if(in_play_chess[x][y]!="") return;
	in_play_chess[x][y]=ans_chess[x][y];
	if(ans_chess[x][y]!='0') return;
	int f_where[3][5]={{0},{0,0,1,0,-1},{0,1,0,-1,0}};
	for(int i=1;i<=4;i++)
	{
		go_to_big(x+f_where[1][i],y+f_where[2][i]);
	}
}
signed main(){
	cout<<"w 向上  s 向下\na 向左  d 向右\ne 插旗\nx 开格\n";
	cout<<"难度:";
	cin>>MAX;
	cout<<"出雷概率:";
	cin>>gai;
	system("cls");
	init_play();
	init_maths();
	int in_x=1,in_y=1;
	for(int i=1;i<=MAX;i++){
		for(int j=1;j<=MAX;j++){
			if(i==in_x&&j==in_y){
				cout<<"@@";
				continue;
			}
			set_color(b);
			cout<<in_play_chess[i][j]<<" ";
		}
		cout<<"\n";
	}
	while(1){
		if(kbhit()){
			char ch=getch();
			if(ch=='a'){
				if(in_y==1){
					continue;
				}
				in_y--;
			}
			if(ch=='d'){
				if(in_y==MAX){
					continue;
				}
				in_y++;
			}
			if(ch=='w'){
				if(in_x==1){
					continue;
				}
				in_x--;
			}
			if(ch=='s'){
				if(in_x==MAX){
					continue;
				}
				in_x++;
			}
			if(ch=='x'){
				if(ans_chess[in_x][in_y]=='*')
				{
					system("cls");
					for(int i=1;i<=MAX;i++)
					{
						for(int j=1;j<=MAX;j++){
							if(ans_chess[i][j]=='*'){
								set_color(r);
							}
							cout<<ans_chess[i][j]<<' ';
							if(ans_chess[i][j]=='*'){
								set_color(r|b|g);
							}							
						}
						cout<<endl;
					}
					set_color(r);
					cout<<"game over!";
					Sleep(1000);
					return 0; 
				}
				if(ans_chess[in_x][in_y]=='0')
				{
					go_to_big(in_x,in_y);
				}
				if(ans_chess[in_x][in_y]!='0'&&ans_chess[in_x][in_y]!='*')
				{
					in_play_chess[in_x][in_y]=ans_chess[in_x][in_y];
				}
				continue;
			}
			if(ch=='e'){
				if(in_play_chess[in_x][in_y]=="|"){
					in_play_chess[in_x][in_y]="";
				}
				else
					in_play_chess[in_x][in_y]="|";
			}
			system("cls");
			sengy=0;
			for(int i=1;i<=MAX;i++){
				for(int j=1;j<=MAX;j++){
					if(i==in_x&&j==in_y){
						cout<<"@@";
						continue;
					}
					sengy+=(in_play_chess[i][j]=="");
					cout<<in_play_chess[i][j];
					if(in_play_chess[i][j]=="|"){
						cout<<"~";
						continue;
					}
					cout<<" ";
				}
				cout<<"\n";
			}
			if(sengy==leis){
				set_color(g);
				system("cls");
				cout<<"yow win"<<endl<<endl;
				for(int i=0;i<MAX;i++,endl(cout)) for(int j=0;j<MAX;j++) cout<<ans_chess[i][j]<<' ';
				Sleep(1000);
				return 0;
			}
			Sleep(100);
		}
	}
	return 0;
}








//开枪小游戏;
2
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
	int i,a=1,p1,p2,p1zi=0,p2zi=0;
	cout<<"欢迎来到开枪小游戏(升级版),按1开始游戏(按其他的有隐藏彩蛋!)";
	cin>>i;
	if(i==1){
		cout<<endl<<"游戏开始!请先仔细阅读规则:"<<endl<<endl<<"按1存一颗子弹;"<<endl<<"按2开枪(消耗一颗子弹);"<<endl<<"按3开炮(消耗三颗子弹);"<<endl<<"按4防御对方的开枪行为;"<<endl<<"按5防御对方的开炮行为。"<<endl<<endl<<"(注:请不要单次输入多个数字,否则可能终止游戏。)"<<endl<<endl<<"每个回合输入前会有1.8秒延迟,以防止另一人看到己方子弹数。"<<endl<<endl<<"那么,"<<endl<<"开始!"<<endl<<endl<<endl<<endl;
		while(1){
			cout<<"第"<<a<<"回合。"<<endl<<endl;
			Sleep(1800); 
			if(a>1) cout<<"您还有"<<p1zi<<"个子弹"<<endl; 
			cout<<"player1:";
			cin>>p1;
			system("cls"); 
			if(p1==1) p1zi+=1;
			else if(p1==2){
				if(p1zi>0) p1zi-=1;
				else{
					while(1){
						cout<<"您的子弹不够,请输入1或4或5:";
						cin>>p1;
						system("cls");
						if(p1==1){
							p1zi+=1;
							break;
						}
						if(p1==4||p1==5) break;
					} 
				}
			}
			else if(p1==3){
				if(p1zi>2){
					p1zi-=3;
				}
				else{
					while(1){
						if(p1zi>0) cout<<"您的子弹不够,请输入1或2或4或5:"; 
						else cout<<"您的子弹不够,请输入1或4或5:";
						cin>>p1;
						system("cls");
						if(p1==1){
							p1zi+=1;
							break;
						}
						if((p1zi>0&&p1==2)||p1==4||p1==5) break;
					} 
				}
			}
			cout<<"第"<<a<<"回合。"<<endl<<endl;
			Sleep(1800); 
			if(a>1) cout<<"您还有"<<p2zi<<"个子弹"<<endl; 
			cout<<"player2:";
			cin>>p2;
			system("cls");
			if(p2==1) p2zi+=1;
			else if(p2==2){
				if(p2zi>0) p2zi-=1;
				else{
					while(1){
						cout<<"您的子弹不够,请输入1或4或5:";
						cin>>p2;
						system("cls");
						if(p2==1){
							p2zi+=1;
							break;
						}
						if(p2==4||p2==5) break;
					} 
				}
			}
			else if(p2==3){
				if(p2zi>2) p2zi-=3;
				else{
					while(1){
						if(p2zi>0) cout<<"您的子弹不够,请输入1或2或4或5:"; 
						else cout<<"您的子弹不够,请输入1或4或5:";
						cin>>p2;
						system("cls");
						if(p2==1){
							p2zi+=1;
							break;
						}
						if((p2zi>0&&p2==2)||p2==4||p2==5) break;
					} 
				}
			}
			if(p1==1) if(p2==2||p2==3){
				cout<<"player1噶了,player2赢了!"<<endl<<endl<<endl;
				break;
			}
			if(p1==2){
				if(p2==3){
					cout<<"player1噶了,player2赢了!"<<endl<<endl<<endl;
					break;
				}
				if(p2==1||p2==5){
					cout<<"player2噶了,player1赢了!"<<endl<<endl<<endl;
					break;
				}
			}
			if(p1==3&&p2!=5&&p2!=3){
					cout<<"player2噶了,player1赢了!"<<endl<<endl<<endl;
					break;
			}
			if(p1==4&&p2==3){
					cout<<"player1噶了,player2赢了!"<<endl<<endl<<endl;
					break;
			}
			if(p1==5&&p2==2){
					cout<<"player1噶了,player2赢了!"<<endl<<endl<<endl;
					break;
			}
			a+=1;
		}
	}
	else{
		system("cls");
		cout<<"                                    "<<"SB,不是叫你按1吗?按"<<i<<"干啥?食不食有饼?"<<endl<<endl<<endl<<endl<<endl;
	}
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...