or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
---
Python實作課程
第五堂課 : Tic Tac Toe(AI)
2022 / 5 / 27
Tony
重點回顧
我們前兩堂課寫完了基本的TicTacToe,玩家可以是真人也可以是電腦,但此時的電腦並不像真人用腦子玩遊戲,他只是隨便挑一格放符號而已
可不可以讓電腦具備判斷盤面的能力,讓他下的每一步都是對他具有最大效益的?
minimax
MiniMax算法常用於棋類等由兩方較量的遊戲和程序。該算法是一個零總和算法,即一方要在可選的選項中選擇將其優勢最大化的選擇,另一方則選擇令對手優勢最小化的方法。而開始的時候總和為0。
本Code當中的minimax思維:當換到AI的回合時,挑選對他而言優勢最大的選擇;當另一個玩家的回合時,挑選對他而言傷害最小的選擇
我們希望以最短的步數贏下比賽,所以:
則該盤面的value = 1*(現在盤面所剩空格+1)
則該盤面的value = -1*(現在盤面所剩空格+1)
開始寫Code
請打開上次寫完的TicTacToe
If 檔案丟失:點我拿完整Code
在TicTacToe補上這個函式(如果沒有)
我們要做的:
建在
player.py
裡面,構造仿照前兩個寫過的player並多一個minimax函式,函式最後會回傳一個字典Dictionary
先設點變數
接著,我們check目前盤面是否為一個最終盤面,即上一個玩家已經贏了或是平手
我們需要用到一個資料型態叫做dictionary字典,他是一個集合,每一個元素由一個鍵(Key)和值(Value)組成
再來,我們就要進入預測盤面的環節,先初始化環境
預測盤面:針對目前盤面的下一層所有可能結果