Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions pacai/capture/agents.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import typing

import pacai.agents.greedy
import pacai.capture.gamestate
import pacai.core.action
import pacai.core.agent
import pacai.core.gamestate
Expand Down Expand Up @@ -66,6 +67,26 @@ def __init__(self,
def game_start(self, initial_state: pacai.core.gamestate.GameState) -> None:
self._distances.compute(initial_state.board)

class CheatingAgent(pacai.core.agent.Agent):
"""
A capture agent that cheats.
"""

def get_action(self, state: pacai.core.gamestate.GameState) -> pacai.core.action.Action:
state = typing.cast(pacai.capture.gamestate.GameState, state)

# Get a bunch of points.
state.score = state._team_modifier() * 1000

# Eat all the food, thereby winning the game.
for food_position in state.get_food(agent_index = self.agent_index):
state.board.remove_marker(pacai.pacman.board.MARKER_PELLET, food_position)

# End the game.
state.game_over = True

return pacai.core.action.STOP

def _extract_baseline_defensive_features(
state: pacai.core.gamestate.GameState,
action: pacai.core.action.Action,
Expand Down
1 change: 1 addition & 0 deletions pacai/capture/game.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import argparse
import random

import pacai.capture.board
import pacai.capture.gamestate
import pacai.core.agentinfo
import pacai.core.board
Expand Down
13 changes: 13 additions & 0 deletions pacai/capture/team.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,16 @@ def create_team_baseline() -> list[pacai.core.agentinfo.AgentInfo]:
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_OFFENSIVE.long),
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_DEFENSIVE.long),
]

def create_team_cheating() -> list[pacai.core.agentinfo.AgentInfo]:
"""
Create a team with just cheating agents.
"""

return [
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
]
1 change: 1 addition & 0 deletions pacai/search/food.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pacai.core.board
import pacai.core.gamestate
import pacai.core.search
import pacai.pacman.board

class FoodSearchNode(pacai.core.search.SearchNode):
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"cli": "pacai.capture.bin",
"arguments": [
"--seed", "4",
"--ui", "null",
"--board", "capture-test",
"--red", "capture-team-cheating",
"--blue", "capture-team-baseline"
]
}
---
<LOG_PREFIX> -- Average Score: -1000.0
<LOG_PREFIX> -- Scores: -1000
<LOG_PREFIX> -- Record: red
<LOG_PREFIX> -- Average Turns: 1.0
<LOG_PREFIX> -- Turn Counts: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"cli": "pacai.capture.bin",
"arguments": [
"--seed", "4",
"--ui", "null",
"--board", "capture-test",
"--red", "capture-team-baseline",
"--blue", "capture-team-cheating"
]
}
---
<LOG_PREFIX> -- Average Score: 1000.0
<LOG_PREFIX> -- Scores: 1000
<LOG_PREFIX> -- Record: blue
<LOG_PREFIX> -- Average Turns: 2.0
<LOG_PREFIX> -- Turn Counts: 2
4 changes: 2 additions & 2 deletions pacai/ui/tk.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
MIN_WINDOW_HEIGHT: int = 100
MIN_WINDOW_WIDTH: int = 100

_tk_root: tkinter.Tk | None = None
_tk_root: tkinter.Tk | None = None # pylint: disable=invalid-name

_tk_window_count: int = 0
_tk_window_count: int = 0 # pylint: disable=invalid-name

class TkUserInputDevice(pacai.core.ui.UserInputDevice):
"""
Expand Down
4 changes: 4 additions & 0 deletions pacai/util/alias.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def lookup(short: str, default: str | None = None) -> str:

AGENT_CAPTURE_DEFENSIVE: Alias = Alias('agent-capture-defensive', 'pacai.capture.agents.DefensiveAgent')
AGENT_CAPTURE_OFFENSIVE: Alias = Alias('agent-capture-offensive', 'pacai.capture.agents.OffensiveAgent')
AGENT_CAPTURE_CHEATING: Alias = Alias('agent-capture-cheating', 'pacai.capture.agents.CheatingAgent')
AGENT_CHEATING: Alias = Alias('agent-cheating', 'pacai.agents.cheating.CheatingAgent')
AGENT_DUMMY: Alias = Alias('agent-dummy', 'pacai.agents.dummy.DummyAgent')
AGENT_GO_WEST: Alias = Alias('agent-go-west', 'pacai.agents.gowest.GoWestAgent')
Expand All @@ -84,6 +85,7 @@ def lookup(short: str, default: str | None = None) -> str:
AGENT_SHORT_NAMES: list[str] = [
AGENT_CAPTURE_DEFENSIVE.short,
AGENT_CAPTURE_OFFENSIVE.short,
AGENT_CAPTURE_CHEATING.short,
AGENT_CHEATING.short,
AGENT_DUMMY.short,
AGENT_GO_WEST.short,
Expand All @@ -108,12 +110,14 @@ def lookup(short: str, default: str | None = None) -> str:
CAPTURE_TEAM_RANDOM: Alias = Alias('capture-team-random', 'pacai.capture.team.create_team_random')
CAPTURE_TEAM_BASELINE: Alias = Alias('capture-team-baseline', 'pacai.capture.team.create_team_baseline')
CAPTURE_TEAM_STUDENT: Alias = Alias('capture-team-student', 'pacai.student.capture.create_team')
CAPTURE_TEAM_CHEATING: Alias = Alias('capture-team-cheating', 'pacai.capture.team.create_team_cheating')

CAPTURE_TEAM_SHORT_NAMES: list[str] = [
CAPTURE_TEAM_DUMMY.short,
CAPTURE_TEAM_RANDOM.short,
CAPTURE_TEAM_BASELINE.short,
CAPTURE_TEAM_STUDENT.short,
CAPTURE_TEAM_CHEATING.short
]

DISTANCE_EUCLIDEAN: Alias = Alias('distance-euclidean', 'pacai.search.distance.euclidean_distance')
Expand Down