見出し画像

マインスイーパーを作ったぞ!!!

マインスイーパーを作りました。

今年中にやろうと思っていたことが一つ達成!

プログラムは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()

この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?