社区讨论
手写的扫雷和开枪小游戏
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...