【前編】A.Iで学習して強くなるリバーシを作ろう!

A.Iを勉強するのは、とても楽しいですよね。本格的に使おうと思うと、数学や統計学など難しい内容も多いですが、自分の手で生み出したコードが自動的に計算をしたり、動いている様子を見るとわくわくします。
プログラムは本来計算のカタマリですから、予定通りの動きしかしません。式の通り答えを出すだけですから、進歩も進化もないのです。では一体、どうやってAIは学習して進化していくのでしょうか。
A.I.や機械学習を本格的に学んでいくと、アルゴリズムや公式、様々な理論に合わせてプログラムの開発を覚えることになりますが、今回は簡単なゲームを作りながら、機械学習がどんなもので何に使えるのか、を解説していきたいと思います。

画面を作る都合上、Windowsを前提として書いていきますが、他のOSでも環境は作れます。

Pythonでゲームの盤面を作ろう

まずはゲームの盤面作りです。盤面づくりは機械学習とは関係ないのですが、せっかくゲームを作るので、まずは見た目を整えてテンションを上げていきましょう!

完成イメージはこんな感じです。

この画面はtkinterというライブラリで作成します。
tkinterは、Pythonを通常インストールしていれば、そのまま使用できます。

tkinterを使用するとPythonでGUIを構築することができます。

完成イメージの画面を作成するプログラム全文は以下の通りです。

プログラム全文

import argparse
import tkinter as tk
 
class Board(tk.Tk):
    def __init__(self):
        super(Board, self).__init__()                     
        self.title("reversi")
        self.geometry("600x700")
        self.drow_board()
 
    def drow_board(self):
        self.board = tk.Canvas(self, bg="#673312", width=600, height=600)
        self.board.place(x=0, y=0)
        for y in range(20, 570,70):
            for x in range(20, 570, 70):
                pos = x, y, x+70, y+70
                self.board.create_rectangle(*pos, fill="#206012")
 
    def run(self):
        self.mainloop()        
 
if __name__ == "__main__":
    app = Board()
    app.run()

部分解説

では少しずつ分解して見てみましょう。
まず初期化関数を設定します。

def __init__(self):

次に、ウィンドウのタイトルと画面の大きさを指定していきます。

タイトルはreversiとしました。画面の大きさは以下のように設定することで横600縦700になります。
初期ウィンドウの位置を制御したい場合は、self.geometry(“600×700+100+50”)とすると600×700のウィンドウを右から100、上から50の位置に表示するという指示になります。

self.title("reversi")

self.geometry("600x700")

次に盤面を描画する関数を作成します。

def drow_board(self):

盤面の背景色を指定して横600、縦600のキャンバスを描きます。キャンバスには、グラフィックやボタンなどを描くことができます。

self.board = tk.Canvas(self, bg="#673312", width=600, height=600)

以下のように指定した位置に設定したキャンバスを指定します。

self.board.place(x=0, y=0)

create_rectangleで長方形を描きます。fillで塗り潰しの色を指定しながらforの繰り返しで縦横に順番にコマを置くための枠を描いていきます。

self.board.create_rectangle(*pos, fill="#206012")

self.mainloop() を実行すると実際の描画が開始されてウィンドウが表示されます。

def run(self):
 self.mainloop()  

これでまずは盤面が完成しました!

リバーシは文字で●や〇を並べても表現できますが、少し味気ないものになってしまいます。
今回は画面を作成しただけになりますが、次回はA.I.なしでプログラムを使ってコンピュータと対戦するアルゴリズムを考えてみましょう。