A Penguin Attack AI Jason Buck CS 470 1
Project Overview Goal Why Develop an AI that can play a competent game of Penguin Attack Why Ensures an opponent is always available
What is Penguin Attack? Created by myself and Tom Kircher Open source implementation of a Nintendo puzzle game Designed for network play
How is Penguin Attack Played? 4
How is Penguin Attack Played? (continued)
Project Requirements Network AI is a network client Sends moves Game server sends game state information Sends game state information Sends control signals
Project Requirements (continued) AI Search game state for potential combos Generate move sequence to achieve combos Can send a string of sequential characters Often sends one-character strings Must be competent Typically able to last 3 min against me
System Design Written in Java Network component Not ideal, but “good enough” Network component Largely isolated from AI Connects to the server Receive and store messages from the server Send moves/commands from the AI to the server
System Design (Continued) AI Parse game state data Update internal representation 2D-array of ADT “PenguinAttackBlock” Generate move sequence
Protocol Redesigned since proposal Client requests state information as needed Commands are b, c, and t Client sends move sequences Commands are u, d, l, r, s, m Client can notify server with quit All other notifications are server to client
Protocol (Continued) Server notifications: start pause ... start win lose closing connection
Protocol (Continued) Board State: Mouse position: Timing: [1000 2000] _ _ _ _ _ _ _ _ _ _ _ 0n1. 1n1h _ _ _ _ 0n5. 1n3h1n4h _ _ 0n1.0n4. 2n5h1n2h1n5h0n3.0n4.0n1. _ _ _ 0n2.0n2.0n5. _ _ 0n1.0n3.0n3.0n4. 0n5.0n1.0n2.0n4.0n4.0n5. 0n4.0n3.0n5.0n1.0n2.0n1. 0n1.0n3.0n1.0n4.0n4.0n2. 0n1.0n2.0n3.0n3.0n2.0n2. 0n5.0n5.0n4.0n4.0n1.0n1. 0n3q0n3q0n4q0n4q0n1q0n4q } Mouse position: <2 1> Timing: [1000 2000]
Algorithms playPenguinAttack() loops through: breakGarbage(); raiseStackToSafeHeight(); breakGarbage(); levelOffStack(); makeCombosAndChains();
Evolutionary Prototyping Strategy needed to be refined Different leveling algorithms Keep improving the strategy Much time spent testing Prototype was never ‘complete’ to my satisfaction Never figured out how to make intentional chains Didn’t find a way to deal with ‘accidentals’
Schedule Didn’t keep detailed records of what happened when Worked on it whenever course load allowed Made majority of progress during spring break Spent way more time than budgeted
What’s next? Will continue beyond the semester Preventing accidentals and intentionally making chains; AI will be brutal Analyze the board in different ways while waiting (Threads) Improve efficiency (Synchronized clock? Maintain own board state?) 17
Conclusion