parent
eabf15ddbe
commit
e9a25c37e1
69
server.py
69
server.py
|
|
@ -18,17 +18,23 @@ def main() -> int:
|
|||
"""
|
||||
player = PyServer(
|
||||
# Customize this to whatever you'd like to call your player
|
||||
name="My super smart robot player",
|
||||
name="Mute",
|
||||
|
||||
# Custom information that you can use to tell people about this player
|
||||
profile={},
|
||||
profile={
|
||||
"me.noordstar.peanuts.agent.version": "1.0.0",
|
||||
"me.noordstar.peanuts.is_ai": False,
|
||||
"me.noordstar.peanuts.author": "Bram",
|
||||
"me.noordstar.peanuts.containerized": True,
|
||||
"version": "1.0.0",
|
||||
},
|
||||
|
||||
# Unless you know what you're doing, don't touch this.
|
||||
import_name=__name__,
|
||||
)
|
||||
|
||||
# Register games! Comment out any you don't want your player to play.
|
||||
player.add_tic_tac_toe(on_move=play_tic_tac_toe, profile={})
|
||||
player.add_tic_tac_toe(on_move=respond_mute, profile={})
|
||||
|
||||
# Start listening for games
|
||||
player.start(
|
||||
|
|
@ -38,62 +44,19 @@ def main() -> int:
|
|||
|
||||
return 0
|
||||
|
||||
def play_tic_tac_toe(payload : dict[str, Any]) -> dict[str, Any]:
|
||||
def respond_mute(payload : dict[str, Any]) -> dict[str, Any]:
|
||||
"""
|
||||
Play a game of tic-tac-toe.
|
||||
Always respond with an empty dictionary. This means the user should
|
||||
always take the "default" move.
|
||||
|
||||
You receive a payload that looks like this:
|
||||
A well-programmed game must NOT raise an error as a result of this.
|
||||
|
||||
{
|
||||
"1": "X", "2": "", "3": "O",
|
||||
"4": "X", "5": "O", "6": "",
|
||||
"7": "", "8": "", "9": "",
|
||||
"your_token": "X"
|
||||
}
|
||||
|
||||
And you're expected to return a response of which field you'd like to
|
||||
place your piece in. For example, if you wish to place your token in
|
||||
field 7, your response should look like this:
|
||||
|
||||
{ "move": 7 }
|
||||
|
||||
The board is arranged as follows:
|
||||
|
||||
1 | 2 | 3
|
||||
---+---+---
|
||||
4 | 5 | 6
|
||||
---+---+---
|
||||
7 | 8 | 9
|
||||
|
||||
:param payload: The incoming JSON that contains the game state.
|
||||
:param payload: The game state which is completely ignored.
|
||||
:type payload: dict[str, Any]
|
||||
:return: The move you wish to take.
|
||||
:return: An empty dictionary
|
||||
:rtype: dict[str, Any]
|
||||
"""
|
||||
|
||||
# Try printing the payload to see what it looks like!
|
||||
print(payload)
|
||||
|
||||
options = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
|
||||
|
||||
# 1. Try filtering out the impossible moves!
|
||||
# If an X or O was already placed at a field, remove it from the options
|
||||
|
||||
#
|
||||
|
||||
# 2. Try finding two in a row! If possible, you can try to place the third
|
||||
# item on the board and get 3 in a row.
|
||||
|
||||
#
|
||||
|
||||
# 3. Perhaps you can block the opponent from getting 3 in a row?
|
||||
|
||||
#
|
||||
|
||||
# Now, pick any of the remaining options.
|
||||
# This is just a simple implementation. Naturally, you're welcome to try
|
||||
# your own logic.
|
||||
return { "move": random.choice(options) }
|
||||
return {}
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
|
|
|
|||
Loading…
Reference in New Issue