AI人工智能 模擬游戲

2020-09-24 10:52 更新

一個機器人玩最后的硬幣

在這場比賽中,會有一堆硬幣。 每個玩家必須從該堆中取出一些硬幣。這場比賽的目標是避免拿下最后一枚硬幣。 我們將使用繼承自 easyAI 庫的 TwoPlayersGame 類的 LastCoinStanding 類。 以下代碼顯示了此游戲的 Python代碼 -

如下所示導入所需的軟件包 -

  1. from easyAI import TwoPlayersGame, id_solve, Human_Player, AI_Player
  2. from easyAI.AI import TT

現(xiàn)在,繼承 TwoPlayerGame 類中的類來處理游戲的所有操作 -

  1. class LastCoin_game(TwoPlayersGame):
  2. def __init__(self, players):

定義要玩家并開始游戲。

  1. self.players = players
  2. self.nplayer = 1

定義游戲中的硬幣數(shù)量,這里使用15個硬幣進行游戲。

  1. self.num_coins = 15

定義玩家在移動中可以獲得的最大硬幣數(shù)量。

  1. self.max_coins = 4

現(xiàn)在有一些東西需要定義,如下面的代碼所示。 定義可能的移動。

  1. def possible_moves(self):
  2. return [str(a) for a in range(1, self.max_coins + 1)]

定義硬幣的清除 -

  1. def make_move(self, move):
  2. self.num_coins -= int(move)

定義誰拿走了最后一枚硬幣。

  1. def win_game(self):
  2. return self.num_coins <= 0

定義何時停止游戲,即何時有人獲勝。

  1. def is_over(self):
  2. return self.win()

定義如何計算分數(shù)。

  1. def score(self):
  2. return 100 if self.win_game() else 0

定義堆中剩余的硬幣數(shù)量。

  1. def show(self):
  2. print(self.num_coins, 'coins left in the pile')
  3. if __name__ == "__main__":
  4. tt = TT()
  5. LastCoin_game.ttentry = lambda self: self.num_coins

用下面的代碼塊解決游戲 -

  1. r, d, m = id_solve(LastCoin_game,
  2. range(2, 20), win_score=100, tt=tt)
  3. print(r, d, m)

決定誰將開始游戲

  1. game = LastCoin_game([AI_Player(tt), Human_Player()])
  2. game.play()

下面的輸出演示這個游戲的簡單玩法 -

  1. d:2, a:0, m:1
  2. d:3, a:0, m:1
  3. d:4, a:0, m:1
  4. d:5, a:0, m:1
  5. d:6, a:100, m:4
  6. 1 6 4
  7. 15 coins left in the pile
  8. Move #1: player 1 plays 4 :
  9. 11 coins left in the pile
  10. Player 2 what do you play ? 2
  11. Move #2: player 2 plays 2 :
  12. 9 coins left in the pile
  13. Move #3: player 1 plays 3 :
  14. 6 coins left in the pile
  15. Player 2 what do you play ? 1
  16. Move #4: player 2 plays 1 :
  17. 5 coins left in the pile
  18. Move #5: player 1 plays 4 :
  19. 1 coins left in the pile
  20. Player 2 what do you play ? 1
  21. Move #6: player 2 plays 1 :
  22. 0 coins left in the pile

機器人玩井字游戲

Tic-Tac-Toe 非常熟悉,是最受歡迎的游戲之一。我們通過使用 Python 中的 easyAI 庫來創(chuàng)建這個游戲。 以下代碼是這款游戲的 Python 代碼 -

如下所示導入軟件包 -

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

繼承 TwoPlayerGame 中的類來處理游戲的所有操作 -

  1. class TicTacToe_game(TwoPlayersGame):
  2. def __init__(self, players):

現(xiàn)在,定義玩家并開始游戲 -

  1. self.players = players
  2. self.nplayer = 1

定義板的類型 -

  1. self.board = [0] * 9

定義可能的舉措(動作)

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

定義一個玩家的舉措(動作) -

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

定義一個玩家何時進行移動 -

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

定義輸條件是對手在一條線上有三個 -

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

定義游戲結(jié)束的條件 -

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

顯示玩家在游戲中的當前位置 -

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

計算分數(shù)代碼 -

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

定義定義算法并開始游戲的主要方法 -

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

可以看到下面的輸出和這個游戲的簡單玩法 -

  1. . . .
  2. . . .
  3. . . .
  4. Player 1 what do you play ? 1
  5. Move #1: player 1 plays 1 :
  6. O . .
  7. . . .
  8. . . .
  9. Move #2: player 2 plays 5 :
  10. O . .
  11. . X .
  12. 121
  13. . . .
  14. Player 1 what do you play ? 3
  15. Move #3: player 1 plays 3 :
  16. O . O
  17. . X .
  18. . . .
  19. Move #4: player 2 plays 2 :
  20. O X O
  21. . X .
  22. . . .
  23. Player 1 what do you play ? 4
  24. Move #5: player 1 plays 4 :
  25. O X O
  26. O X .
  27. . . .
  28. Move #6: player 2 plays 8 :
  29. O X O
  30. O X .
  31. . X .
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號