Skip to content

Commit 653b498

Browse files
authored
Added a cheating capture team (#85).
1 parent 4ff7450 commit 653b498

File tree

8 files changed

+74
-2
lines changed

8 files changed

+74
-2
lines changed

pacai/capture/agents.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import typing
22

33
import pacai.agents.greedy
4+
import pacai.capture.gamestate
45
import pacai.core.action
56
import pacai.core.agent
67
import pacai.core.gamestate
@@ -66,6 +67,26 @@ def __init__(self,
6667
def game_start(self, initial_state: pacai.core.gamestate.GameState) -> None:
6768
self._distances.compute(initial_state.board)
6869

70+
class CheatingAgent(pacai.core.agent.Agent):
71+
"""
72+
A capture agent that cheats.
73+
"""
74+
75+
def get_action(self, state: pacai.core.gamestate.GameState) -> pacai.core.action.Action:
76+
state = typing.cast(pacai.capture.gamestate.GameState, state)
77+
78+
# Get a bunch of points.
79+
state.score = state._team_modifier() * 1000
80+
81+
# Eat all the food, thereby winning the game.
82+
for food_position in state.get_food(agent_index = self.agent_index):
83+
state.board.remove_marker(pacai.pacman.board.MARKER_PELLET, food_position)
84+
85+
# End the game.
86+
state.game_over = True
87+
88+
return pacai.core.action.STOP
89+
6990
def _extract_baseline_defensive_features(
7091
state: pacai.core.gamestate.GameState,
7192
action: pacai.core.action.Action,

pacai/capture/game.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import argparse
22
import random
33

4+
import pacai.capture.board
45
import pacai.capture.gamestate
56
import pacai.core.agentinfo
67
import pacai.core.board

pacai/capture/team.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,16 @@ def create_team_baseline() -> list[pacai.core.agentinfo.AgentInfo]:
5656
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_OFFENSIVE.long),
5757
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_DEFENSIVE.long),
5858
]
59+
60+
def create_team_cheating() -> list[pacai.core.agentinfo.AgentInfo]:
61+
"""
62+
Create a team with just cheating agents.
63+
"""
64+
65+
return [
66+
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
67+
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
68+
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
69+
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
70+
pacai.core.agentinfo.AgentInfo(name = pacai.util.alias.AGENT_CAPTURE_CHEATING.long),
71+
]

pacai/search/food.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pacai.core.board
44
import pacai.core.gamestate
55
import pacai.core.search
6+
import pacai.pacman.board
67

78
class FoodSearchNode(pacai.core.search.SearchNode):
89
"""
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"cli": "pacai.capture.bin",
3+
"arguments": [
4+
"--seed", "4",
5+
"--ui", "null",
6+
"--board", "capture-test",
7+
"--red", "capture-team-cheating",
8+
"--blue", "capture-team-baseline"
9+
]
10+
}
11+
---
12+
<LOG_PREFIX> -- Average Score: -1000.0
13+
<LOG_PREFIX> -- Scores: -1000
14+
<LOG_PREFIX> -- Record: red
15+
<LOG_PREFIX> -- Average Turns: 1.0
16+
<LOG_PREFIX> -- Turn Counts: 1
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"cli": "pacai.capture.bin",
3+
"arguments": [
4+
"--seed", "4",
5+
"--ui", "null",
6+
"--board", "capture-test",
7+
"--red", "capture-team-baseline",
8+
"--blue", "capture-team-cheating"
9+
]
10+
}
11+
---
12+
<LOG_PREFIX> -- Average Score: 1000.0
13+
<LOG_PREFIX> -- Scores: 1000
14+
<LOG_PREFIX> -- Record: blue
15+
<LOG_PREFIX> -- Average Turns: 2.0
16+
<LOG_PREFIX> -- Turn Counts: 2

pacai/ui/tk.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
MIN_WINDOW_HEIGHT: int = 100
1818
MIN_WINDOW_WIDTH: int = 100
1919

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

22-
_tk_window_count: int = 0
22+
_tk_window_count: int = 0 # pylint: disable=invalid-name
2323

2424
class TkUserInputDevice(pacai.core.ui.UserInputDevice):
2525
"""

pacai/util/alias.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def lookup(short: str, default: str | None = None) -> str:
6262

6363
AGENT_CAPTURE_DEFENSIVE: Alias = Alias('agent-capture-defensive', 'pacai.capture.agents.DefensiveAgent')
6464
AGENT_CAPTURE_OFFENSIVE: Alias = Alias('agent-capture-offensive', 'pacai.capture.agents.OffensiveAgent')
65+
AGENT_CAPTURE_CHEATING: Alias = Alias('agent-capture-cheating', 'pacai.capture.agents.CheatingAgent')
6566
AGENT_CHEATING: Alias = Alias('agent-cheating', 'pacai.agents.cheating.CheatingAgent')
6667
AGENT_DUMMY: Alias = Alias('agent-dummy', 'pacai.agents.dummy.DummyAgent')
6768
AGENT_GO_WEST: Alias = Alias('agent-go-west', 'pacai.agents.gowest.GoWestAgent')
@@ -84,6 +85,7 @@ def lookup(short: str, default: str | None = None) -> str:
8485
AGENT_SHORT_NAMES: list[str] = [
8586
AGENT_CAPTURE_DEFENSIVE.short,
8687
AGENT_CAPTURE_OFFENSIVE.short,
88+
AGENT_CAPTURE_CHEATING.short,
8789
AGENT_CHEATING.short,
8890
AGENT_DUMMY.short,
8991
AGENT_GO_WEST.short,
@@ -108,12 +110,14 @@ def lookup(short: str, default: str | None = None) -> str:
108110
CAPTURE_TEAM_RANDOM: Alias = Alias('capture-team-random', 'pacai.capture.team.create_team_random')
109111
CAPTURE_TEAM_BASELINE: Alias = Alias('capture-team-baseline', 'pacai.capture.team.create_team_baseline')
110112
CAPTURE_TEAM_STUDENT: Alias = Alias('capture-team-student', 'pacai.student.capture.create_team')
113+
CAPTURE_TEAM_CHEATING: Alias = Alias('capture-team-cheating', 'pacai.capture.team.create_team_cheating')
111114

112115
CAPTURE_TEAM_SHORT_NAMES: list[str] = [
113116
CAPTURE_TEAM_DUMMY.short,
114117
CAPTURE_TEAM_RANDOM.short,
115118
CAPTURE_TEAM_BASELINE.short,
116119
CAPTURE_TEAM_STUDENT.short,
120+
CAPTURE_TEAM_CHEATING.short
117121
]
118122

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

0 commit comments

Comments
 (0)