この記事の例では、参照用に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