欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

代碼如下:

#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是隨機行,k是隨機列 
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)); //時間種子 
 for(int i=0;i<jie;i++){
 c=rand()%n;
 k=rand()%m;
 Sleep(1); //最大可能防止隨機數(shù)重復 
 if(a[c][k]!=10000){
  a[c][k]=10000;
 }
 else jie++;
 } //將雷隨機分配 
 if(a[0][0]!=10000){ //開始四個角的數(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; //到這邊四個角的賦值全部結束 
 for(int i=1;i<n;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;
 } //結束四條邊的分配 
 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ù)量分配結束 
} 
void qianYan(){
 cout<<"歡迎使用掃雷游戲,游戲規(guī)則如下:\n";
 cout<<"1.本游戲規(guī)格可以選擇,雷數(shù)可以自定義\n";
 cout<<"2.本游戲中的-代表還沒有掃到的地方,0-9的數(shù)字代表正常掃雷中的數(shù)字(0特殊,表示掃雷中的什么東西也沒有的一格),*代表已經標記的雷,在標記的地方被掃到的時候自動取消標記\n";
 cout<<"3.請輸入行和列代表正常游戲中的點選\n"; 
 system("pause");
 system("cls");
 cout<<"請輸入長(>2):";
 cin>>n;
 while(n>1000||n<=2){
 cout<<"長不合法,請重新輸入";
 cin>>n;
 }
 cout<<"請輸入寬(>2):";
 cin>>m;
 while(m>1000||m<=2){
 cout<<"寬不合法,請重新輸入";
 cin>>m;
 }
 cout<<"請輸入雷數(shù)(推薦雷數(shù)計算:規(guī)格長*寬/10四舍五入,這樣可以達到比較好的效果)";
 cin>>abc;
 while(abc>n*m||abc<=0){
 cout<<"輸入不合法,請重新輸入";
 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<<"請輸入行和列:";
 cin>>d>>e;
 while(d>n||e>m||d<0||e<0){
  cout<<"輸入不合法,請重新輸入";
  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<<"是否需要標記雷(是輸入1,不是輸入2)?"; 
 cin>>z; 
 while(z==1){
  cout<<"請輸入行和列:";
  cin>>d>>e;
  while(d>n||e>m||d<0||e<0){
  cout<<"輸入不合法,請重新輸入";
  cin>>d>>e;
  }
  if(b[d-1][e-1]==999){
  b[d-1][e-1]=5000;
  }
  else cout<<"標記錯誤:標記了已經掃到的不是雷的格子\n";
  cout<<"是否需要標記雷(是輸入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ù),找起來方便\n";
 cout<<"修復了2.1.0游戲贏不了的問題\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<<"列標記錯誤\n"; 
 } 
 } 
 system("pause");
 return 0;
}
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C語言數(shù)據(jù)結構中串的模式匹配

    C語言數(shù)據(jù)結構中串的模式匹配

    這篇文章主要介紹了C語言數(shù)據(jù)結構中串的模式匹配的相關資料,需要的朋友可以參考下
    2017-05-05
  • C語言數(shù)據(jù)結構與算法之單鏈表

    C語言數(shù)據(jù)結構與算法之單鏈表

    單鏈表是一種鏈式存取的數(shù)據(jù)結構,用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語言中單鏈表的基本概念與讀取數(shù)據(jù)元素,需要的可以參考一下
    2021-12-12
  • C++工廠方法之對象創(chuàng)建型模式詳解

    C++工廠方法之對象創(chuàng)建型模式詳解

    這篇文章主要為大家詳細介紹了C++對象創(chuàng)建型模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解C++中future和promise的使用

    詳解C++中future和promise的使用

    future和promise的作用是在不同線程之間傳遞數(shù)據(jù),這篇文章主要為大家詳細介紹了C++中future和promise的具體使用,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05
  • C語言實現(xiàn)帶頭雙向循環(huán)鏈表的接口

    C語言實現(xiàn)帶頭雙向循環(huán)鏈表的接口

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)帶頭雙向循環(huán)鏈表的接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++數(shù)據(jù)結構之搜索二叉樹的實現(xiàn)

    C++數(shù)據(jù)結構之搜索二叉樹的實現(xiàn)

    了解搜索二叉樹是為了STL中的map和set做鋪墊,我們所熟知的AVL樹和平衡搜索二叉樹也需要搜索二叉樹的基礎。本文將詳解如何利用C++實現(xiàn)搜索二叉樹,需要的可以參考一下
    2022-05-05
  • C++小知識:不要節(jié)約代碼行數(shù)

    C++小知識:不要節(jié)約代碼行數(shù)

    今天小編就為大家分享一篇關于C++小知識:不要節(jié)約代碼行數(shù),小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C語言數(shù)據(jù)輸入與輸出實例詳解

    C語言數(shù)據(jù)輸入與輸出實例詳解

    這篇文章主要介紹了C語言數(shù)據(jù)輸入與輸出實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C++實現(xiàn)學生成績管理系統(tǒng)

    C++實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++實現(xiàn)通訊錄管理系統(tǒng)項目

    C++實現(xiàn)通訊錄管理系統(tǒng)項目

    這篇文章主要為大家詳細介紹了C++實現(xiàn)通訊錄管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論