マインスイーパーを作ったぞ!!!
マインスイーパーを作りました。
今年中にやろうと思っていたことが一つ達成!
プログラムはpython、TKinterをつかって作りました。
最後にプログラムを載せておきます。
(省略して書く方法を知らないので非常に長いです。)
(追記:のちに省略できたのでそれも載せます)
今朝8時から作り始めましたが、作り終わったのは昼の1時半!!
個人的には早いほうだと思います。
体調不良で寝込んでいるときにプログラムを考えていたかいがあった。
まあ、出来上がりは初心者感丸出しのシンプルなものになっていますが。
9×9で、爆弾は10個。毎回シャッフルされます。
フラグも無ければ、タイマーも無い。
積み回避ができるわけでもなく、ただただ簡易的なマインスイーパー。
さすがに開けたマスの周囲にボムが無い時は、
その周囲のマスを開けるようにはしました。
そのせいで甚大なバグが発生して、処理が大変になったんですけどね(泣)
pythonを始めてまだ1年も経っていないので、
常識的な書き方や作る際のマナーなどがなっていないことはご容赦ください。
もしアドバイスなどがございましたら、
コメントで教えてくださるとうれしいです。
import tkinter as tk
import random
safe=0
cite=[]
for i in range(81):
cite.append(0)
l = [1,1,1,1,1,1,1,1,1,1]
for i in range(11,82):
l.append(0)
random.shuffle(l)
v=0
def getbomb(n):
global l,b
# 爆弾か否か nは地区番号 周囲の爆弾の数を数える。
if l[n-1]==0:
if n in [1]:
p = l[1]+l[9]+l[10]
elif n in [2,3,4,5,6,7,8]:
p = l[n] + l[n-2] + l[n+9] + l[n+8] + l[n+7]
elif n in [9]:
p = l[7] + l[16] + l[17]
elif n in [10,19,28,37,46,55,64]:
p = l[n] + l[n+9] + l[n-9] + l[n-10] + l[n+8]
elif n in [18,27,36,45,54,63,72]:
p = l[n-10] + l[n+8] + l[n-2] + l[n-11] + l[n+7]
elif n in [73]:
p = l[n] + l[n-9] + l[n-10]
elif n in [74,75,76,77,78,79,80]:
p = l[n] + l[n-2] + l[n-9] + l[n-10] + l[n-11]
elif n in [81]:
p = l[n-2] + l[n-11] + l[n-10]
else :
p = l[n] + l[n+9] + l[n-9] + l[n-10] + l[n+8] + l[n-2] + l[n-11] + l[n+7]
else:
p = -1
return p
def open(n):
global l,b,safe,cite ,v
n= int(n)
if cite[n-1]==0:
cite[n-1]=1
#n番地を開ける。 色をグレーから白に、番号を から数字に
#爆弾ならゲームオーバー 開けた数が71に達すればクリア
p = getbomb(n)
if p == -1:
b[n-1].configure(text="x")
print('gameover')
root.destroy()
else :
b[n-1].configure(bg='#ffffff')
if p==0:
b[n-1].configure(text=' ')
v+=1
if n in [1]:
for i in (1,9,10):
open(i+1)
elif n in [2,3,4,5,6,7,8]:
for i in (n,n-2,n+9,n+8,n+7):
open(i+1)
elif n in [9]:
for i in (7,16,17):
open(i+1)
elif n in [10,19,28,37,46,55,64]:
for i in (n,n+9,n-9,n-10,n+8):
open(i+1)
elif n in [18,27,36,45,54,63,72]:
for i in (n-10,n+8,n-2,n-11,n+7):
open(i+1)
elif n in [73]:
for i in (n,n-9,n-10):
open(i+1)
elif n in [74,75,76,77,78,79,80]:
for i in (n,n-2,n-9,n-10,n-11):
open(i+1)
elif n in [81]:
for i in (n-2,n-11,n-10):
open(i+1)
else :
for i in (n,n+9,n-9,n-10,n+8,n-2,n-11,n+7):
open(i+1)
v-=1
else :
b[n-1].configure(text=str(p))
if sum(cite) ==71 and v==0:
print('Game Clear!!!')
root.destroy()
root = tk.Tk()
f = tk.Frame(root)
f.grid()
b1 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(1),
width=2, font=('Helvetica', 14))
b2 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(2),
width=2, font=('Helvetica', 14))
b3 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(3),
width=2, font=('Helvetica', 14))
b4 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(4),
width=2, font=('Helvetica', 14))
b5 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(5),
width=2, font=('Helvetica', 14))
b6 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(6),
width=2, font=('Helvetica', 14))
b7 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(7),
width=2, font=('Helvetica', 14))
b8 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(8),
width=2, font=('Helvetica', 14))
b9 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(9),
width=2, font=('Helvetica', 14))
b10 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(10),
width=2, font=('Helvetica', 14))
b11 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(11),
width=2, font=('Helvetica', 14))
b12 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(12),
width=2, font=('Helvetica', 14))
b13 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(13),
width=2, font=('Helvetica', 14))
b14 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(14),
width=2, font=('Helvetica', 14))
b15 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(15),
width=2, font=('Helvetica', 14))
b16 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(16),
width=2, font=('Helvetica', 14))
b17 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(17),
width=2, font=('Helvetica', 14))
b18 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(18),
width=2, font=('Helvetica', 14))
b19 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(19),
width=2, font=('Helvetica', 14))
b20 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(20),
width=2, font=('Helvetica', 14))
b21 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(21),
width=2, font=('Helvetica', 14))
b22 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(22),
width=2, font=('Helvetica', 14))
b23 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(23),
width=2, font=('Helvetica', 14))
b24 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(24),
width=2, font=('Helvetica', 14))
b25 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(25),
width=2, font=('Helvetica', 14))
b26 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(26),
width=2, font=('Helvetica', 14))
b27 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(27),
width=2, font=('Helvetica', 14))
b28 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(28),
width=2, font=('Helvetica', 14))
b29 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(29),
width=2, font=('Helvetica', 14))
b30 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(30),
width=2, font=('Helvetica', 14))
b31 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(31),
width=2, font=('Helvetica', 14))
b32 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(32),
width=2, font=('Helvetica', 14))
b33 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(33),
width=2, font=('Helvetica', 14))
b34 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(34),
width=2, font=('Helvetica', 14))
b35 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(35),
width=2, font=('Helvetica', 14))
b36 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(36),
width=2, font=('Helvetica', 14))
b37 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(37),
width=2, font=('Helvetica', 14))
b38 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(38),
width=2, font=('Helvetica', 14))
b39 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(39),
width=2, font=('Helvetica', 14))
b40 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(40),
width=2, font=('Helvetica', 14))
b41 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(41),
width=2, font=('Helvetica', 14))
b42 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(42),
width=2, font=('Helvetica', 14))
b43 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(43),
width=2, font=('Helvetica', 14))
b44 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(44),
width=2, font=('Helvetica', 14))
b45 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(45),
width=2, font=('Helvetica', 14))
b46 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(46),
width=2, font=('Helvetica', 14))
b47 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(47),
width=2, font=('Helvetica', 14))
b48 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(48),
width=2, font=('Helvetica', 14))
b49 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(49),
width=2, font=('Helvetica', 14))
b50 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(50),
width=2, font=('Helvetica', 14))
b51 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(51),
width=2, font=('Helvetica', 14))
b52 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(52),
width=2, font=('Helvetica', 14))
b53 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(53),
width=2, font=('Helvetica', 14))
b54 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(54),
width=2, font=('Helvetica', 14))
b55 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(55),
width=2, font=('Helvetica', 14))
b56 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(56),
width=2, font=('Helvetica', 14))
b57 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(57),
width=2, font=('Helvetica', 14))
b58 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(58),
width=2, font=('Helvetica', 14))
b59 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(59),
width=2, font=('Helvetica', 14))
b60 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(60),
width=2, font=('Helvetica', 14))
b61 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(61),
width=2, font=('Helvetica', 14))
b62 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(62),
width=2, font=('Helvetica', 14))
b63 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(63),
width=2, font=('Helvetica', 14))
b64 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(64),
width=2, font=('Helvetica', 14))
b65 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(65),
width=2, font=('Helvetica', 14))
b66 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(66),
width=2, font=('Helvetica', 14))
b67 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(67),
width=2, font=('Helvetica', 14))
b68 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(68),
width=2, font=('Helvetica', 14))
b69 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(69),
width=2, font=('Helvetica', 14))
b70 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(70),
width=2, font=('Helvetica', 14))
b71 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(71),
width=2, font=('Helvetica', 14))
b72 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(72),
width=2, font=('Helvetica', 14))
b73 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(73),
width=2, font=('Helvetica', 14))
b74 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(74),
width=2, font=('Helvetica', 14))
b75 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(75),
width=2, font=('Helvetica', 14))
b76 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(76),
width=2, font=('Helvetica', 14))
b77 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(77),
width=2, font=('Helvetica', 14))
b78 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(78),
width=2, font=('Helvetica', 14))
b79 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(79),
width=2, font=('Helvetica', 14))
b80 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(80),
width=2, font=('Helvetica', 14))
b81 = tk.Button(f,text=' ', bg='#999999', command=lambda:open(81),
width=2, font=('Helvetica', 14))
b1.grid(row=0,column=0)
b2.grid(row=0,column=1)
b3.grid(row=0,column=2)
b4.grid(row=0,column=3)
b5.grid(row=0,column=4)
b6.grid(row=0,column=5)
b7.grid(row=0,column=6)
b8.grid(row=0,column=7)
b9.grid(row=0,column=8)
b10.grid(row=1,column=0)
b11.grid(row=1,column=1)
b12.grid(row=1,column=2)
b13.grid(row=1,column=3)
b14.grid(row=1,column=4)
b15.grid(row=1,column=5)
b16.grid(row=1,column=6)
b17.grid(row=1,column=7)
b18.grid(row=1,column=8)
b19.grid(row=2,column=0)
b20.grid(row=2,column=1)
b21.grid(row=2,column=2)
b22.grid(row=2,column=3)
b23.grid(row=2,column=4)
b24.grid(row=2,column=5)
b25.grid(row=2,column=6)
b26.grid(row=2,column=7)
b27.grid(row=2,column=8)
b28.grid(row=3,column=0)
b29.grid(row=3,column=1)
b30.grid(row=3,column=2)
b31.grid(row=3,column=3)
b32.grid(row=3,column=4)
b33.grid(row=3,column=5)
b34.grid(row=3,column=6)
b35.grid(row=3,column=7)
b36.grid(row=3,column=8)
b37.grid(row=4,column=0)
b38.grid(row=4,column=1)
b39.grid(row=4,column=2)
b40.grid(row=4,column=3)
b41.grid(row=4,column=4)
b42.grid(row=4,column=5)
b43.grid(row=4,column=6)
b44.grid(row=4,column=7)
b45.grid(row=4,column=8)
b46.grid(row=5,column=0)
b47.grid(row=5,column=1)
b48.grid(row=5,column=2)
b49.grid(row=5,column=3)
b50.grid(row=5,column=4)
b51.grid(row=5,column=5)
b52.grid(row=5,column=6)
b53.grid(row=5,column=7)
b54.grid(row=5,column=8)
b55.grid(row=6,column=0)
b56.grid(row=6,column=1)
b57.grid(row=6,column=2)
b58.grid(row=6,column=3)
b59.grid(row=6,column=4)
b60.grid(row=6,column=5)
b61.grid(row=6,column=6)
b62.grid(row=6,column=7)
b63.grid(row=6,column=8)
b64.grid(row=7,column=0)
b65.grid(row=7,column=1)
b66.grid(row=7,column=2)
b67.grid(row=7,column=3)
b68.grid(row=7,column=4)
b69.grid(row=7,column=5)
b70.grid(row=7,column=6)
b71.grid(row=7,column=7)
b72.grid(row=7,column=8)
b73.grid(row=8,column=0)
b74.grid(row=8,column=1)
b75.grid(row=8,column=2)
b76.grid(row=8,column=3)
b77.grid(row=8,column=4)
b78.grid(row=8,column=5)
b79.grid(row=8,column=6)
b80.grid(row=8,column=7)
b81.grid(row=8,column=8)
b =[b1,b2,b3,b4,b5,b6,b7,b8,b9,
b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,
b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,
b30,b31,b32,b33,b34,b35,b36,b37,b38,b39,
b40,b41,b42,b43,b44,b45,b46,b47,b48,b49,
b50,b51,b52,b53,b54,b55,b56,b57,b58,b59,
b60,b61,b62,b63,b64,b65,b66,b67,b68,b69,
b70,b71,b72,b73,b74,b75,b76,b77,b78,b79,
b80,b81]
f.mainloop()
のちにいろいろ手探りで書いた結果、短縮できたのでそれも載せておきます。
import tkinter as tk
import random
safe=0
cite=[]
for i in range(81):
cite.append(0)
l = [1,1,1,1,1,1,1,1,1,1]
for i in range(11,82):
l.append(0)
random.shuffle(l)
v=0
def getbomb(n):
global l,b
# 爆弾か否か nは地区番号 周囲の爆弾の数を数える。
if l[n-1]==0:
if n in [1]:
p = l[1]+l[9]+l[10]
elif n in [2,3,4,5,6,7,8]:
p = l[n] + l[n-2] + l[n+9] + l[n+8] + l[n+7]
elif n in [9]:
p = l[7] + l[16] + l[17]
elif n in [10,19,28,37,46,55,64]:
p = l[n] + l[n+9] + l[n-9] + l[n-10] + l[n+8]
elif n in [18,27,36,45,54,63,72]:
p = l[n-10] + l[n+8] + l[n-2] + l[n-11] + l[n+7]
elif n in [73]:
p = l[n] + l[n-9] + l[n-10]
elif n in [74,75,76,77,78,79,80]:
p = l[n] + l[n-2] + l[n-9] + l[n-10] + l[n-11]
elif n in [81]:
p = l[n-2] + l[n-11] + l[n-10]
else :
p = l[n] + l[n+9] + l[n-9] + l[n-10] + l[n+8] + l[n-2] + l[n-11] + l[n+7]
else:
p = -1
return p
def open(n):
global l,b,safe,cite ,v
n= int(n)
if cite[n-1]==0:
cite[n-1]=1
#n番地を開ける。 色をグレーから白に、番号を から数字に
#爆弾ならゲームオーバー 開けた数が71に達すればクリア
p = getbomb(n)
if p == -1:
b[n-1].configure(text="x")
print('gameover')
root.destroy()
else :
b[n-1].configure(bg='#ffffff')
if p==0:
b[n-1].configure(text=' ')
v+=1
if n in [1]:
for i in (1,9,10):
open(i+1)
elif n in [2,3,4,5,6,7,8]:
for i in (n,n-2,n+9,n+8,n+7):
open(i+1)
elif n in [9]:
for i in (7,16,17):
open(i+1)
elif n in [10,19,28,37,46,55,64]:
for i in (n,n+9,n-9,n-10,n+8):
open(i+1)
elif n in [18,27,36,45,54,63,72]:
for i in (n-10,n+8,n-2,n-11,n+7):
open(i+1)
elif n in [73]:
for i in (n,n-9,n-10):
open(i+1)
elif n in [74,75,76,77,78,79,80]:
for i in (n,n-2,n-9,n-10,n-11):
open(i+1)
elif n in [81]:
for i in (n-2,n-11,n-10):
open(i+1)
else :
for i in (n,n+9,n-9,n-10,n+8,n-2,n-11,n+7):
open(i+1)
v-=1
else :
b[n-1].configure(text=str(p))
if sum(cite) ==71 and v==0:
print('Game Clear!!!')
root.destroy()
root = tk.Tk()
f = tk.Frame(root)
f.grid()
class Mybutton(tk.Button):
__num = 0
def __init__(self, master=None, cnf={}, **kw):
tk.Button.__init__(self, master=None, cnf={}, **kw)
self.__number = Mybutton.__num
self['text']=' '
self['bg']='#999999'
self['command']=lambda:open(self.__number + 1)
self['width']=2
self['font']=('Helvetica', 14)
self.grid(row= Mybutton.__num//9 ,column= Mybutton.__num % 9)
Mybutton.__num += 1
b=[]
for i in ['b1','b2','b3','b4','b5','b6','b7','b8','b9',
'b10','b11','b12','b13','b14','b15','b16','b17','b18','b19',
'b20','b21','b22','b23','b24','b25','b26','b27','b28','b29',
'b30','b31','b32','b33','b34','b35','b36','b37','b38','b39',
'b40','b41','b42','b43','b44','b45','b46','b47','b48','b49',
'b50','b51','b52','b53','b54','b55','b56','b57','b58','b59',
'b60','b61','b62','b63','b64','b65','b66','b67','b68','b69',
'b70','b71','b72','b73','b74','b75','b76','b77','b78','b79',
'b80','b81']:
i = Mybutton(f)
b.append(i)
root.mainloop()
いいなと思ったら応援しよう!
投げるな危険