Compare commits

...

1 Commits

Author SHA1 Message Date
schipeltaper 8b42819184 implemented a sneaky agent 2026-07-01 17:51:04 +02:00
1 changed files with 89 additions and 0 deletions

89
agents/sneaky.py Normal file
View File

@ -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) }