105 lines
3.2 KiB
Python
105 lines
3.2 KiB
Python
"""
|
|
This module contains an example agent that you can use to create your own!
|
|
|
|
Please copy this file, rename it, and then build it the way you see fit.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import random
|
|
|
|
from .agent import Agent, Payload
|
|
|
|
class ExampleAgent(Agent):
|
|
"""
|
|
Describe here what your agent does and how it behaves! This will help
|
|
others understand how your agent works.
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
"""
|
|
Create a custom instance of your agent. This function allows you
|
|
to define which games your agent can play.
|
|
|
|
You may add parameters to the function if your agent requires more
|
|
information to be able to operate.
|
|
"""
|
|
|
|
super().__init__(
|
|
# Give your bot a name to display in leaderboards
|
|
name="MY super smart agent",
|
|
|
|
# Your name, to give you credit
|
|
author="Unknown programmer",
|
|
|
|
# Update the version to indicate the agent behaves differently.
|
|
# This will later allow you to compare different versions of your
|
|
# agent against one another.
|
|
version="1.0.0",
|
|
|
|
# Add extra custom information about the agent to this dictionary.
|
|
profile={},
|
|
)
|
|
|
|
# Indicate that you're willing to play tic-tac-toe
|
|
# Remove this if you don't want your bot to participate there.
|
|
self.add_tic_tac_toe(on_move=self.play_tic_tac_toe, profile={})
|
|
|
|
@staticmethod
|
|
def play_tic_tac_toe(payload : Payload) -> Payload:
|
|
"""
|
|
Play a game of tic-tac-toe.
|
|
|
|
You receive a payload that looks like 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.
|
|
:type payload: dict[str, Any]
|
|
:return: The move you wish to take.
|
|
: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 algorithm.
|
|
return { "move": random.choice(options) }
|