codecamp

AI人工智能 构建一个玩井字棋游戏的机器人

井字棋是一个非常熟悉且最受欢迎的游戏之一。让我们使用 Python 中的 easyAI 库来创建这个游戏。以下代码是这个游戏的 Python 代码:

导入所需的包,如下所示:

from easyAI import TwoPlayersGame, AI_Player, Negamax
from easyAI.Player import Human_Player

TwoPlayerGame 类继承这个类,以处理游戏的所有操作:

class TicTacToe_game(TwoPlayersGame):
    def __init__(self, players):

现在,定义玩家和将要开始游戏的玩家:

self.players = players
        self.nplayer = 1

定义棋盘的类型:

self.board = [0] * 9

现在,有一些特定的事情需要定义,如下所示:

定义可能的移动:

def possible_moves(self):
        return [x + 1 for x, y in enumerate(self.board) if y == 0]

定义玩家的移动:

def make_move(self, move):
        self.board[int(move) - 1] = self.nplayer

为了增强 AI,定义玩家何时进行移动:

def umake_move(self, move):
        self.board[int(move) - 1] = 0

定义失败条件,即对手有三个连成一线:

def condition_for_lose(self):
        possible_combinations = [[1,2,3], [4,5,6], [7,8,9],
            [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]]
        return any([all([(self.board[z-1] == self.nopponent)
            for z in combination]) for combination in possible_combinations])

定义游戏结束的检查:

def is_over(self):
        return (self.possible_moves() == []) or self.condition_for_lose()

显示游戏中玩家的当前位置:

def show(self):
        print('\n'+'\n'.join([' '.join([['.', 'O', 'X'][self.board[3*j + i]]
            for i in range(3)]) for j in range(3)]))

计算分数:

def scoring(self):
        return -100 if self.condition_for_lose() else 0

定义主方法来定义算法并开始游戏:

if __name__ == "__main__":
    algo = Negamax(7)
    TicTacToe_game([Human_Player(), AI_Player(algo)]).play()

你可以看到以下输出和这个游戏的简单玩法:

. . .
. . .
. . .
Player 1 what do you play ? 1
Move #1: player 1 plays 1 :
O . .
. . .
. . .
Move #2: player 2 plays 5 :
O . .
. X .
. . .
Player 1 what do you play ? 3
Move #3: player 1 plays 3 :
O . O
. X .
. . .
Move #4: player 2 plays 2 :
O X O
. X .
. . .
Player 1 what do you play ? 4
Move #5: player 1 plays 4 :
O X O
O X .
. . .
Move #6: player 2 plays 8 :
O X O
O X .
. X .
AI人工智能 构建一个玩 “最后一枚硬币站立” 游戏的机器人
AI人工智能 什么是人工神经网络(ANN)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }