Pythonはminesweeperゲームを実装しています

この記事では、すべての人に地雷除去ゲームを実現するためのpythonの特定のコードを共有しています。参考までに、具体的な内容は次のとおりです。

この記事の例はmvcモデルを利用しており、コアデータはモデルであり、1つのマトリックスが維持され、0は雷がないことを意味し、1は私のものを意味し、-1はテスト済みを意味します。
この例では、Pythonのtkinterをguiとして使用しています。使いやすさが考慮されていないため、UIは醜く、pygameはより面白く、強力で、見栄えがよくなります。これらの小さなゲームを作成するのに適しています。興味のある読者は試してみることができます。

具体的な機能コードは次のとおりです。

# - *- coding: utf-8-*-import random
import sys
from Tkinter import*'''
Pythonを学びたいですか?
'''
classModel:"""
コアデータクラス、マトリックスを維持
"""
def __init__(self,row,col):
self.width=col
self.height=row
self.items=[[0for c inrange(col)]for r inrange(row)]
def setItemValue(self,r,c,value):"""
位置の値を値に設定します
"""
self.items[r][c]=value;
def checkValue(self,r,c,value):"""
特定の位置の値が値であるかどうかを確認します
"""
if self.items[r][c]!=-1 and self.items[r][c]==value:
self.items[r][c]=-1 #テスト済み
return True
else:return False
def countValue(self,r,c,value):"""
場所の周りの8つの場所の値の数を数えます
"""
count=0if r-1=0 and c-1=0:if self.items[r-1][c-1]==1:count+=1if r-1=0 and c =0:if self.items[r-1][c]==1:count+=1if r-1=0 and c+1<=self.width-1:if self.items[r-1][c+1]==1:count+=1if c-1=0:if self.items[r][c-1]==1:count+=1if c+1<=self.width-1:if self.items[r][c+1]==1:count+=1if r+1<=self.height-1 and c-1=0:if self.items[r+1][c-1]==1:count+=1if r+1<=self.height-1:if self.items[r+1][c]==1:count+=1if r+1<=self.height-1 and c+1<=self.width-1:if self.items[r+1][c+1]==1:count+=1return count
classMines(Frame):
def __init__(self,m,master=None):
Frame.__init__(self,master)
self.model=m
self.initmine()
self.grid()
self.createWidgets()
def createWidgets(self):
# top=self.winfo_toplevel()
# top.rowconfigure(self.model.height*2,weight=1)
# top.columnconfigure(self.model.width*2,weight=1)
self.rowconfigure(self.model.height,weight=1)
self.columnconfigure(self.model.width,weight=1)
self.buttongroups=[[Button(self,height=1,width=2)for i inrange(self.model.width)]for j inrange(self.model.height)]for r inrange(self.model.width):for c inrange(self.model.height):
self.buttongroups[r][c].grid(row=r,column=c)
self.buttongroups[r][c].bind('<Button-1 ',self.clickevent)
self.buttongroups[r][c]['padx']=r
self.buttongroups[r][c]['pady']=c
def showall(self):for r inrange(model.height):for c inrange(model.width):
self.showone(r,c)
def showone(self,r,c):if model.checkValue(r,c,0):
self.buttongroups[r][c]['text']=model.countValue(r,c,1)else:
self.buttongroups[r][c]['text']='Mines'
def recureshow(self,r,c):if0<=r<=self.model.height-1 and 0<=c<=self.model.width-1:if model.checkValue(r,c,0) and model.countValue(r,c,1)==0:
self.buttongroups[r][c]['text']=''
self.recureshow(r-1,c-1)
self.recureshow(r-1,c)
self.recureshow(r-1,c+1)
self.recureshow(r,c-1)
self.recureshow(r,c+1)
self.recureshow(r+1,c-1)
self.recureshow(r+1,c)
self.recureshow(r+1,c+1)
elif model.countValue(r,c,1)!=0:
self.buttongroups[r][c]['text']=model.countValue(r,c,1)else:
pass
def clickevent(self,event):"""
イベントをクリック
case1:サンダーだ、すべてが表示され、ゲームオーバー
case2:周囲の地雷の数は0で、周囲の8つのボタンのクリックイベントが再帰的にトリガーされます
case3:周囲の地雷の数が0でない場合、周囲の地雷の数が表示されます
"""
r=int(str(event.widget['padx']))
c=int(str(event.widget['pady']))if model.checkValue(r,c,1):#レイ
self.showall()else:#雷ではない
self.recureshow(r,c)
def initmine(self):"""
私の鉱山,各列の埋没高さ/width+2暫定
"""
r=random.randint(1,model.height/model.width+2)for r inrange(model.height):for i inrange(2):
rancol=random.randint(0,model.width-1)
model.setItemValue(r,rancol,1)
def printf(self):"""
印刷
"""
for r inrange(model.height):for c inrange(model.width):
print model.items[r][c],
print '/n'
def new(self):"""
ゲームを再開します
"""
pass
if __name__=='__main__':
model=Model(10,10)
root=Tk()
# menu
menu =Menu(root)
root.config(menu=menu)
filemenu =Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New",command=new)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
# Mines
m=Mines(model,root)
# m.printf()
root.mainloop()

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

Recommended Posts

Pythonはminesweeperゲームを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonは地雷除去ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonはデジタル爆弾ゲームを実装しています
Pythonは単純なtic-tac-toeゲームを実装しています
Pythonはテキストバージョンのminesweeperを実装しています
Pythonは実店舗のゲームを実装しています
Pythonは単にスネークゲームを実装します
Pythonはデジタル爆弾ゲームプログラムを実装しています
Pythonはスーパーマリオを実装しています
Pythonはマンマシンゴバンを実装します
Pythonは画像スティッチングを実装しています
Pythonはスネークゲームのソースコードを実装しています
Pythonはスキャンツールを実装しています
Pythonはしきい値回帰を実装します
Pythonは電子辞書を実装しています
Pythonは単純なタンクバトルを実装します
Python3は飛行機戦争ゲームを実現します
Pythonはudpチャットウィンドウを実装します
pythonはゲームという言葉を推測します
Pythonは駐車場管理システムを実現
PythonはTCPファイル転送を実装します
Pythonは推測ゲームを実現します
Pythonnumpyはローリングケースを実装します
OpenCVPythonはパズルゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonは車の管理システムを実装しています
Pythonはコードブロックフォールディングを実装します
Pythonはパノラマ画像スティッチングを実装しています
PythonはSMTPメール送信を実装します
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonは検証コード認識を実装します
Pythonは勾配降下法を実装しています
Pythonは画像スティッチング機能を実装しています
Pythonは学生のパフォーマンス評価システムを実装しています
Pythonがメール機能を実装する方法
Python3はシングルトンデザインパターンを実装しています
Pythonは為替レート変換操作を実装します
Pythonは文字列と数値のスプライシングを実装します
Pythonは10の古典的なソートアルゴリズムを実装しています
PythonはユニバーサルWebフレームワークを実装しています
Pythonは、メールを送信するために126のメールボックスを実装しています
PythonはAIフェイスチェンジ機能を実装しています
Pythonは最も急な降下方法を実装します
Pythonは実際の銀行システムを実装しています
Pythonはftpファイル転送機能を実装しています
Pythonはユーザー名とパスワードの検証を実装しています
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
Pythonは写真の水平ステッチを実装しています
PythonはGIFグラフを逆さまに実装します
Pythonは2つのスレッドの代替実行を実装します
PythonはTowerofHanoiゲームを解決します
Pythonは分数シーケンスの合計を実装します
Pythonの基本的な実際の戦闘-年齢ゲームを推測する
pythonは勾配メソッドを実装しますpython最速の降下メソッド
Pythonは、単一にリンクされたリストと辞書を実装します