Pythonはテキストバージョンのminesweeperを実装しています

この記事の例では、参照用にminesweeperのテキストバージョンを実現するために、pythonの特定のコードを共有しています。具体的な内容は次のとおりです。

pythonバージョン:2.7

ゲーム実行図:

コードは非常に明確にコメントされており、意味がありません。コードに移動してください。
2 アルゴリズム:1。ランダム番号生成アルゴリズム、2。幅優先

# coding:utf-8import sys
import random
import Queue
# さまざまなゲームの難易度のデータ形式を保存します:難易度:(行、行、私の)
DIFFICUL_DATA ={1:(8,8,5),2:(10,10,20),3:(15,15,100)}
# さまざまなゲーム結果のデータを保存します
RESULT_DATA ={0:"統計",1:"ゲームの勝利",2:"ゲームオーバー"}classSweep_Mine(object):
def __init__(self):"""
機能:インスタンス化機能
"""
self.row =0
self.line =0
self.mine_num =0
self.map_list =[]
self.clean_count =0
self.step_count =0
self.level =0
self.result =0  #ゲーム結果を保存、0:まだ終わっていない,1:ゲームの勝利,2:ゲームオーバー
self.queue = Queue.Queue()
def show_desc(self):"""
機能:ゲームの説明を印刷する
"""
print "=============================="
print "|ゲームの説明|"
print "|  |"
print "|  |"
print "| #地雷が除去されていない場所の場合|"
print "| *鉱山の場所について|"
print "|0は空白領域です|"
print "| 1-8は周囲の鉱山の数です|"
print "|  |" 
print "|  |" 
print "|Xを入力してください/Y:掃海艇の位置|" 
print "| X/Y入力99:マップを更新|"
print "| X/Y入力88:ゲームを終了する|"
print "|  |" 
print "==============================" 
print "------------------------------" 
def show_result(self):"""
機能:情報表示の印刷
パラメータ:
0印刷統計を選択
1 プリントゲームの勝利
2 プリントゲームオーバー
"""
print "\n============================"
print RESULT_DATA.get(self.result)  #RESULTから_結果データをDATAに出力
print "\n個の地雷: %dステップ:%d "%(self.mine_num,self.step_count)
print "鉱山はクリアされました: %d残りの鉱山ピット:%d "%(self.clean_count,\
self.row*self.line - self.clean_count -self.mine_num)
print "============================" 
def init_data(self):"""
機能:難易度の選択、データの初期化
"""
self.clean_count =0
self.step_count =0
self.row = DIFFICUL_DATA[self.level][0]   #グローバル変数からのグレード_難易度データを取得する
self.line = DIFFICUL_DATA[self.level][1]
self.mine_num = DIFFICUL_DATA[self.level][2]
self.map_list =[['#'for i inrange(self.row)]for i inrange(self.line)] #map_リストフィル'#'
random_list = random.sample(range(self.row*self.line),self.mine_num)  #私のものを入手_ランダム数
for i in random_list:
x = i%self.row    #ランダムな番号のペアを使用して残りを取得します
y = i/self.row    #ランダムな数値のペアを使用して商を取得します
self.map_list[y][x]='*'   #ランダムロケーションセットマイン
def set_level(self,lvl):"""
機能:ゲームの難易度を設定する
パラメータ:
レベルは123の異なるレベルの難易度です
戻り値:
真の設定レベルに成功
False設定レベルに失敗しました
"""
if lvl ==1 or lvl ==2 or lvl ==3: 
self.level = lvl
self.init_data()return True
else:return False
def check_result(self):"""
機能:ゲームに勝ったかどうかを判断します
戻る: 
self.result
0 終わっていません
1 勝利
2 失敗
"""
if self.row*self.line-self.clean_count <= self.mine_num:
self.result =1return self.result
def bfs(self):"""
BFS幅の最初の検索空白領域
"""
queue_temp =[]
around =[[-1,-1],[0,-1],[1,-1],[-1,0],[1,0],[-1,1],[0,1],[1,1]]while not self.queue.empty():
self.clean_count +=1 
mine =0
q_x=self.queue.get()
q_y=self.queue.get()for value in around:
line = q_y + value[0]
row = q_x + value[1]if line<0 or line =self.line or row<0 or row =self.row:continueif self.map_list[line][row]=='*':
mine +=1
elif self.map_list[line][row]=='#':
queue_temp.append([line,row])  #一時的にキューに保存_temp 
if mine   0: 
self.map_list[q_y][q_x]=str(mine)  #地雷の数をマークする
queue_temp =[]   #空のキュー_temp 
else:
self.map_list[q_y][q_x]='0'  #空白領域として設定'0'whilelen(queue_temp):   #キューに入れます_tempの値がキューに入れられます
temp = queue_temp.pop(0)
self.map_list[temp[0]][temp[1]]='0' #振り返るのを防ぐ
self.queue.put(temp[1])  #キューに空白のポイントを追加します
self.queue.put(temp[0])
def show_game(self,showmine=False):"""
機能:掃海艇の地図を表示する
パラメータ:デフォルトのshowmineはFalse、通常の表示です,隠された鉱山の場所
showmineは真のスペシャルディスプレイです,鉱山の場所を地図に表示する
"""
output_temp =[]  #出力文字を保存する
num_temp =[]  #水平座標と垂直座標のシリアル番号を保存します
len = self.row if self.row  = self.line else self.line #行または行の長辺を保存します
for num inrange(len):if num <10:
num_temp.append(str(num)+' ')else:
num_temp.append(str(num)+' ')
output_temp.append(" X ")for x inrange(self.row):
output_temp.append(num_temp[x])
output_temp.append('\nY ')for x inrange(self.row):
output_temp.append('---')for y inrange(self.line):
output_temp.append('\n'+num_temp[y]+'| ')for x inrange(self.row):if self.map_list[y][x]=='*':if showmine == True:
output_temp.append('* ')else:
output_temp.append('# ')else:
output_temp.append(self.map_list[y][x]+' ')
print ''.join(output_temp)
def input_pos(self,y,x):"""
機能:地雷掃引位置を入力
パラメータ:入力整数x,y
地雷をクリアする場所を示します,xは横軸です,yは縦座標です
x/y =99、マップを更新します
x/y =88、ゲームを終了します
戻り値:
True:地雷除去の成功
False:地雷除去に失敗しました
"""
if x inrange(self.row) and y inrange(self.line):
self.step_count +=1  #ステッププラス1
if self.map_list[y][x]=='*': #鉱山を踏んだ
self.result =2  #ゲーム結果の設定に失敗しました
return True
elif self.map_list[y][x]=='#': #成功
self.queue.put(x)
self.queue.put(y)
self.bfs()return True
else:return False
else:if x ==99 or y ==99: #99を入力して、マップを更新します
self.init_data()return True
elif x ==88 or y ==88: #88を入力するとゲームオーバーです
self.result =2return True
else:return False
if __name__ =='__main__':
game =Sweep_Mine()
game.show_desc()  #ゲームの説明を印刷する
while True:  #ビッグループ入力ゲームの難易度
level =raw_input("ゲームの難易度を選択してください\n入力:1、2、3\n")if level.isdigit()!= True: #入力が数値でない場合
print("無効です。番号を入力してください。")continueelse:
level =int(level)if game.set_level(level)== True: #難易度の選択が正常に開始されました
breakelse:print("難易度の選択に失敗しました!")while game.check_result()==0:  #ゲームは終了していません。入力xをループし続けます。/y
game.show_game() 
game.show_result()
x =raw_input("Input X:")
y =raw_input("Input Y:")if x.isdigit()!= True or y.isdigit()!= True: #入力が数値でない場合
print "無効です。番号を入力してください。"continueelse:
x =int(x)
y =int(y)if game.input_pos(y,x):  #掃海艇の場所を入力してください
print "掃海に成功しました!"else:
print "入力場所が間違っています!"
game.show_game(True)  #ゲームオーバー
game.show_result()
sys.exit(0)

より興味深い古典的なミニゲームの実装トピック、あなたと共有してください:

C ++クラシックゲームの概要

Pythonクラシックゲームの概要

pythontetrisゲームコレクション

JavaScriptクラシックゲームは常にプレイされています

古典的なJavaゲームの概要

JavaScriptクラシックゲームの概要

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

Pythonはテキストバージョンのminesweeperを実装しています
Pythonはminesweeperゲームを実装しています
Pythonは地雷除去ゲームを実装しています
PythonはAI自動バージョンの貪欲なヘビを実装しています
Ubuntu18.04スイッチPythonバージョン
Pythonはスーパーマリオを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはテキストバージョンのminesweeperを実装しています
pythonで数値をフィルタリングする方法
Pythonはtic-tac-toeゲームを実装しています
Ubuntu16.04スイッチpythonバージョン
Pythonはマンマシンゴバンを実装します
PythonはTetrisゲームを実装しています
Pythonは画像スティッチングを実装しています
Pythonはスキャンツールを実装しています
python tic-tac-toe-textバージョン(パート2)
PyCharmセットPythonバージョン
Pythonはしきい値回帰を実装します
python Tic-Tac-Toe-テキストバージョン(オン)
Pythonは電子辞書を実装しています
Pythonは推測ゲームを実装しています
PythonはWeChat飛行機ゲームを実装しています
Pythonは単語推測ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonは駐車場管理システムを実現
Pythonはデジタル爆弾ゲームを実装しています
PythonはTCPファイル転送を実装します
Pythonnumpyはローリングケースを実装します
OpenCVPythonはパズルゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonは車の管理システムを実装しています
Pythonはコードブロックフォールディングを実装します
Pythonはパノラマ画像スティッチングを実装しています
PythonはSMTPメール送信を実装します
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonは勾配降下法を実装しています
OpenCVインストールのPythonバージョン
Pythonは画像スティッチング機能を実装しています
Pythonは実店舗のゲームを実装しています
Pythonは学生のパフォーマンス評価システムを実装しています
Pythonは単にスネークゲームを実装します
Python3はシングルトンデザインパターンを実装しています
Pythonは為替レート変換操作を実装します
Pythonは10の古典的なソートアルゴリズムを実装しています
Pythonは、メールを送信するために126のメールボックスを実装しています
PythonはAIフェイスチェンジ機能を実装しています
Pythonは最も急な降下方法を実装します
Pythonは実際の銀行システムを実装しています
Pythonはデジタル爆弾ゲームプログラムを実装しています
UbuntuにTensorFlow(python2.7バージョン)をインストールします
Pythonはftpファイル転送機能を実装しています
Pythonはユーザー名とパスワードの検証を実装しています
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
Pythonは写真の水平ステッチを実装しています
PythonはGIFグラフを逆さまに実装します