亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實(shí)現(xiàn)一個(gè)掃雷小游戲

 更新時(shí)間:2020年03月17日 11:49:45   作者:weixin_42657959  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)一個(gè)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)掃雷小游戲的具體代碼,供大家參考,具體內(nèi)容如下

目前的版本是0.98版本,可以提出增加新功能意見(jiàn)哦

代碼如下:

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
long long int c,dev,m,k,cnt,d,e,jie=10,z,abc,n,b[1000][1000],a[1000][1000],cc,cd,ce,def; //c是隨機(jī)行,k是隨機(jī)列 
bool flag=0; 
bool check_lei(){ //用于游戲停止 
 for(int i=0;i<n;i++){
 for(int j=0;j<m;j++){
  if(b[i][j]==999||b[i][j]==5000) def++;
 }
 }
 return (def==abc)?false:true;
}
void check(int d,int e){//附近的雷數(shù) 
 if(d<0||d>=n||e<0||e>=m){
 ce++;
 return;
 } 
 if(a[d][e]==10000){
 ce++;
 return;
 }
 if(b[d][e]!=999&&b[d][e]!=5000) return;
 b[d][e]=a[d][e];
 if(b[d][e]!=0){
 for(int i=-1;i<=1;i++){
  for(int j=-1;j<=1;j++){
  if(d+i<0||d+i>=n||e+i<0||e+i>=m){
   ce++;
   continue;
  }
  if(b[d+i][e+i]==5000) continue;
  if(b[d+i][e+j]!=999) continue;
  if(a[d+i][e+j]==10000){
   ce++;
   continue;
  }
  if(ce<=5){
   b[d+i][e+j]=a[d+i][e+j];
   ce++; 
  }
  } 
 }
 return ; 
 }
 if(cd>n/2) return;
 for(int i=-1;i<=1;i++){
 for(int j=-1;j<=1;j++){
  check(d+i,e+j);
 }
 }
 cd++;
}
void buZhi(){
 system("cls"); //清屏 
 srand(time(NULL)); //時(shí)間種子 
 for(int i=0;i<jie;i++){
 c=rand()%n;
 k=rand()%m;
 Sleep(1); //最大可能防止隨機(jī)數(shù)重復(fù) 
 if(a[c][k]!=10000){
  a[c][k]=10000;
 }
 else jie++;
 } //將雷隨機(jī)分配 
 if(a[0][0]!=10000){ //開(kāi)始四個(gè)角的數(shù)值分配 ,左上 
 if(a[0][1]==10000) cnt++;
 if(a[1][1]==10000) cnt++;
 if(a[1][0]==10000) cnt++;
 a[0][0]=cnt;
 }
 cnt=0;
 if(a[n-1][m-1]!=10000){ //右下 
 if(a[n-1][m-2]==10000) cnt++;
 if(a[n-2][m-2]==10000) cnt++;
 if(a[n-2][m-1]==10000) cnt++;
 a[n-1][m-1]=cnt;
 }
 cnt=0;
 if(a[0][m-1]!=10000){ //右上 
 if(a[1][m-1]==10000) cnt++;
 if(a[1][m-2]==10000) cnt++;
 if(a[0][m-2]==10000) cnt++;
 a[0][m-1]=cnt;
 }
 cnt=0;
 if(a[n-1][0]!=10000){ //左下 
 if(a[n-2][1]==10000) cnt++;
 if(a[n-1][1]==10000) cnt++;
 if(a[n-2][0]==10000) cnt++;
 a[n-1][0]=cnt;
 }
 cnt=0; //到這邊四個(gè)角的賦值全部結(jié)束 
 for(int i=1;i<n;i++){ //開(kāi)始四條邊的分配,上邊 
 if(a[0][i]!=10000){
  if(a[1][i]==10000) cnt++;
  if(a[1][i+1]==10000) cnt++;
  if(a[1][i-1]==10000) cnt++;
  if(a[0][i+1]==10000) cnt++;
  if(a[0][i-1]==10000) cnt++;
  a[0][i]=cnt;
 }
 cnt=0;
 }
 for(int i=1;i<m;i++){ //左邊 
 if(a[i][0]!=10000){
  if(a[i][1]==10000) cnt++;
  if(a[i+1][1]==10000) cnt++;
  if(a[i-1][1]==10000) cnt++;
  if(a[i+1][0]==10000) cnt++;
  if(a[i-1][0]==10000) cnt++;
  a[i][0]=cnt;
 }
 cnt=0;
 }
 for(int i=1;i<m;i++){ //右邊 
 if(a[i][n-1]!=10000){
  if(a[i-1][n-1]==10000) cnt++;
  if(a[i+1][n-1]==10000) cnt++;
  if(a[i][n-2]==10000) cnt++;
  if(a[i-1][n-2]==10000) cnt++;
  if(a[i+1][n-2]==10000) cnt++;
  a[i][n-1]=cnt;
 }
 cnt=0;
 }
 for(int i=1;i<n;i++){ //下邊 
 if(a[m-1][i]!=10000){
  if(a[m-2][i]==10000) cnt++;
  if(a[m-2][i+1]==10000) cnt++;
  if(a[m-2][i-1]==10000) cnt++;
  if(a[m-1][i+1]==10000) cnt++;
  if(a[m-1][i-1]==10000) cnt++;
  a[m-1][i]=cnt;
 }
 cnt=0;
 } //結(jié)束四條邊的分配 
 for(int i=1;i<n-1;i++){
 for(int j=1;j<m-1;j++){
  if(a[i][j]!=10000){
  if(a[i-1][j]==10000) cnt++;
  if(a[i-1][j-1]==10000) cnt++;
  if(a[i-1][j+1]==10000) cnt++;
  if(a[i][j-1]==10000) cnt++;
  if(a[i][j+1]==10000) cnt++;
  if(a[i+1][j]==10000) cnt++;
  if(a[i+1][j-1]==10000) cnt++;
  if(a[i+1][j+1]==10000) cnt++;
  a[i][j]=cnt;
  }
  cnt=0;
 }
 } //基本數(shù)量分配結(jié)束 
} 
void qianYan(){
 cout<<"歡迎使用掃雷游戲,游戲規(guī)則如下:\n";
 cout<<"1.本游戲規(guī)格可以選擇,雷數(shù)可以自定義\n";
 cout<<"2.本游戲中的-代表還沒(méi)有掃到的地方,0-9的數(shù)字代表正常掃雷中的數(shù)字(0特殊,表示掃雷中的什么東西也沒(méi)有的一格),*代表已經(jīng)標(biāo)記的雷,在標(biāo)記的地方被掃到的時(shí)候自動(dòng)取消標(biāo)記\n";
 cout<<"3.請(qǐng)輸入行和列代表正常游戲中的點(diǎn)選\n"; 
 system("pause");
 system("cls");
 cout<<"請(qǐng)輸入長(zhǎng)(>2):";
 cin>>n;
 while(n>1000||n<=2){
 cout<<"長(zhǎng)不合法,請(qǐng)重新輸入";
 cin>>n;
 }
 cout<<"請(qǐng)輸入寬(>2):";
 cin>>m;
 while(m>1000||m<=2){
 cout<<"寬不合法,請(qǐng)重新輸入";
 cin>>m;
 }
 cout<<"請(qǐng)輸入雷數(shù)(推薦雷數(shù)計(jì)算:規(guī)格長(zhǎng)*寬/10四舍五入,這樣可以達(dá)到比較好的效果)";
 cin>>abc;
 while(abc>n*m||abc<=0){
 cout<<"輸入不合法,請(qǐng)重新輸入";
 cin>>abc;
 }
 jie=abc; 
 buZhi();
}
void saoLei(){
 for(int i=0;i<n;i++)
 for(int j=0;j<m;j++)
  b[i][j]=999;
 while(check_lei()){
 def=0;
 dev=1;
 ce=0;
 cd=0;
 cout<<"  ";
 for(int i=0;i<m;i++)
  cout<<i+1<<' ';
 cout<<'\n';
 for(int i=0;i<n;i++){
  if(dev>9)
  cout<<dev<<' ';
  else 
  cout<<dev<<" ";
  for(int j=0;j<m;j++){
  if(b[i][j]!=999&&b[i][j]!=5000)
   cout<<b[i][j]<<' ';
  else if(b[i][j]==999)
   cout<<"- ";
  else
   cout<<"* ";
  }
  cout<<'\n';
  dev++;
 }
 def=0;
 if(!check_lei()) break;
 cout<<"請(qǐng)輸入行和列:";
 cin>>d>>e;
 while(d>n||e>m||d<0||e<0){
  cout<<"輸入不合法,請(qǐng)重新輸入";
  cin>>d>>e;
 }
 if(a[d-1][e-1]!=10000) check(d-1,e-1);//b[d-1][e-1]=a[d-1][e-1]; 
 else {
  cout<<"失敗";
  flag=1; 
  return;
 }
 cout<<"是否需要標(biāo)記雷(是輸入1,不是輸入2)?"; 
 cin>>z; 
 while(z==1){
  cout<<"請(qǐng)輸入行和列:";
  cin>>d>>e;
  while(d>n||e>m||d<0||e<0){
  cout<<"輸入不合法,請(qǐng)重新輸入";
  cin>>d>>e;
  }
  if(b[d-1][e-1]==999){
  b[d-1][e-1]=5000;
  }
  else cout<<"標(biāo)記錯(cuò)誤:標(biāo)記了已經(jīng)掃到的不是雷的格子\n";
  cout<<"是否需要標(biāo)記雷(是輸入1,不是輸入2)?";
  cin>>z;
 }
 system("pause");
 system("cls");
 cout<<"加載中";
 Sleep(300);
 cout<<".";
 Sleep(300);
 cout<<".";
 Sleep(300);
 cout<<"."; 
 system("cls"); 
 def=0;
 }
}
int main(){
 cout<<"2.2.0版本新增功能:\n";
 cout<<"顯示行數(shù)和列數(shù),找起來(lái)方便\n";
 cout<<"修復(fù)了2.1.0游戲贏不了的問(wèn)題\n";
 system("pause"); 
 system("cls");
 qianYan();
 saoLei();
 if(flag==0) cout<<"太棒了\n";
 else cout<<"很遺憾\n";
 system("pause");
 cout<<"雷圖如下:\n";
 for(int i=0;i<n;i++){
 for(int j=0;j<m;j++){
  if(a[i][j]==10000)
  cout<<"*"<<' ';
  else cout<<a[i][j]<<' ';
 }
 cout<<'\n';
 }
 cout<<'\n';
 for(int i=0;i<n;i++){
 for(int j=0;j<m;j++){
  if (b[i][j]==5000&&a[i][j]!=10000) cout<<"第"<<i+1<<"行第"<<j+1<<"列標(biāo)記錯(cuò)誤\n"; 
 } 
 } 
 system("pause");
 return 0;
}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論