見出し画像

三目並べもつくったぞー

いらっしゃいませ
本日のおすすめは油淋鶏です
それでは、ごゆっくりどうぞ

やあ、いつもと変わらぬ顔が見れてうれしいよ。

なんて、キザっぽくいってみたよ。

これが気障と感じるかどうかは人によるだろうけどね。

まあ、それは置いておいて今日は久しぶりにプログラミングのことを話そう。


はい、久しぶりに、というかまだ二回目ですが、

昨日、即興三目並べを数時間くらいで作りました。

即興で作ったので細かなミスはご容赦を。

ちなみにコメント等の助言は一切書いていないので、参考にはならないです。

最近は専ら検算と数値解析にしかpythonを使っていませんし、
それに加えてCを動かすことが増え、pythonを使っていなかったなと思い至ったので作りました。

ちなみに三目並べを作るというアイデアは、京大が公開している資料からきてます。

初学者が入るにはいいテキストだと思います。
(ちなみに僕はこれでtkinterを学びました)

あと、googleで三目並べと調べると、三目並べで遊べるので
普通に遊ぶ際はそちらでプレイすることをお勧めします。

import tkinter as tk

OPEN = 0
FIRST = 1
SECOND = -1
turn = FIRST
Board = [[0,0,0],[0,0,0],[0,0,0]]
count = 0

def put(m,n):
    global turn, count,b,Board
    Board[m][n] = turn
    if turn == FIRST:
        b[3*m+n].configure(text='O')
        l.delete(0,tk.END)
        l.insert(0,"Turn: X")
    else:
        b[3*m+n].configure(text='X')
        l.delete(0,tk.END)
        l.insert(0,"Turn: O")
    b[3*m+n].configure(state=tk.DISABLED)
    count += 1


def check():
    global turn
    i = 2
    global count
    checklist = [Board[0],Board[1],Board[2],[Board[0][0],Board[1][0],Board[2][0]],[Board[0][1],Board[1][1],Board[2][1]],
                 [Board[0][2],Board[1][2],Board[2][2]],[Board[0][0],Board[1][1],Board[2][2]],[Board[0][2],Board[1][1],Board[2][0]]]
    for j in range(8):
        if abs(sum(checklist[j]))==3:
            return turn
    if count == 9 :
        return 0
    turn *= -1
    return i

def puton(m,n):
    global Board
    put(m,n)
    if check()==FIRST:
        l.delete(0,tk.END)
        l.insert(0,"First is Win!!")
        for i in b:
            i.configure(state=tk.DISABLED)
    elif check()==SECOND:
        l.delete(0,tk.END)
        l.insert(0,"Second is Win!!")
        #SECONDWIN
        for i in b:
            i.configure(state=tk.DISABLED)
    elif check()==0:
        l.delete(0,tk.END)
        l.insert(0,"No Winner")
        for i in b:
            i.configure(state=tk.DISABLED)

root = tk.Tk()
f = tk.Frame(root)
f.grid()


l = tk.Entry(root,font=('Helvetica,14'))
l.grid(row=0, column=0, columnspan=3)
l.insert(0,"Turn:O")
#
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['command']=lambda:puton(self.number//3,self.number%3)
        self['width']=5
        self['font']=('Helvetica,14')
        self.grid( row= self.number//3+1 ,column= self.number % 3,sticky=tk.W)
        Mybutton.__num += 1

b=[]
for k in ['b1','b2','b3','b4','b5','b6','b7','b8','b9']:
    k = Mybutton(f)
    b.append(k)

root.mainloop()

ようし、今日はこのくらいで終わるか。

また、明日も逢えたらいいね。

それじゃあ、またね

投げるな危険