Compare commits
1 Commits
main
...
sam/sneaky
| Author | SHA1 | Date |
|---|---|---|
|
|
8b42819184 |
|
|
@ -0,0 +1,89 @@
|
|||
"""
|
||||
The sneaky agent is built to trick the naive line counter agent.
|
||||
I believe if the sneaky agent starts, they will win against the line counter agent.
|
||||
I have not tested this yet, as the naive line counter agent wasn't in the branch I checked out and I'm lazy,
|
||||
so time will tell...
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import random
|
||||
|
||||
from .agent import Agent, Payload
|
||||
|
||||
class SneakyAgent(Agent):
|
||||
"""
|
||||
It tries to get both opposite corners (1 and 9) and then get another corner that would give it two routes to win
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Create a new instance of the sneaky agent.
|
||||
"""
|
||||
|
||||
super().__init__(
|
||||
# Give your bot a name to display in leaderboards
|
||||
name="Sneaky agent",
|
||||
|
||||
# Your name, to give you credit
|
||||
author="Sam",
|
||||
|
||||
# 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:
|
||||
"""
|
||||
I've placed move comments to indicate which move that would be in the ideal game against the line counter.
|
||||
This assumes this agent starts and so move 1 is {"move": 1}, etc...
|
||||
|
||||
If none of the options are valid, we return a random move
|
||||
"""
|
||||
|
||||
# Try printing the payload to see what it looks like!
|
||||
print(payload)
|
||||
|
||||
# Current State
|
||||
cs = dict(payload)
|
||||
|
||||
# Move 1
|
||||
if cs["1"] == "":
|
||||
return { "move": 1}
|
||||
|
||||
# Move 2
|
||||
if cs["9"] == "":
|
||||
return { "move": 9}
|
||||
|
||||
# Move 4
|
||||
if cs["2"] == "" and cs["1"] == cs["your_token"] and cs["3"] == cs["your_token"]:
|
||||
return { "move": 2}
|
||||
|
||||
if cs["6"] == "" and cs["3"] == cs["your_token"] and cs["9"] == cs["your_token"]:
|
||||
return { "move": 6}
|
||||
|
||||
if cs["8"] == "" and cs["7"] == cs["your_token"] and cs["9"] == cs["your_token"]:
|
||||
return { "move": 8}
|
||||
|
||||
if cs["4"] == "" and cs["1"] == cs["your_token"] and cs["7"] == cs["your_token"]:
|
||||
return { "move": 4}
|
||||
|
||||
# Move 3
|
||||
if cs["2"] == "" and cs["6"] == "" and cs["3"] == "":
|
||||
return { "move": 3}
|
||||
|
||||
if cs["4"] == "" and cs["8"] == "" and cs["7"] == "":
|
||||
return { "move": 7}
|
||||
|
||||
# If the sneaky strategy doesn't work
|
||||
options = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
|
||||
return { "move": random.choice(options) }
|
||||
Loading…
Reference in New Issue