def test_illegal_moves(self): """ Pawns can only move into EMPTY tiles. Can't move into bombs, HARD, SOFT or off the board. """ board, clock = bnc() board.generate(3,3) pawn = Pawn() board.insertPawn((0,0), pawn) # off the board self.assertRaises(IllegalMove, pawn.move, 'l') self.assertRaises(IllegalMove, pawn.move, 'u') pawn.move('d') self.assertEqual(pawn.loc, (0,1)) # HARD self.assertRaises(IllegalMove, pawn.move, 'r') # SOFT self.assertRaises(IllegalMove, pawn.move, 'd') pawn.dropBomb() pawn.move('u') # on bomb self.assertRaises(IllegalMove, pawn.move, 'd')
def test_move(self): """ You can move it up,down,left or right, and pawnMoved will be called after each move. """ board, clock = bnc() board.generate(5,5) board.fg_tiles[(1,1)] = EMPTY pawn = Pawn() board.insertPawn((0,0), pawn) # fake out pawnMoved called = [] real_pawnMoved = board.pawnMoved def fake_pawnMoved(*args): called.append(args) return real_pawnMoved(*args) board.pawnMoved = fake_pawnMoved pawn.move('r') self.assertEqual(called[0], (pawn, (1,0)), "Should have " "called pawnMoved") called.pop() pawn.move('d') self.assertEqual(called[0], (pawn, (1,1))) called.pop() pawn.move('l') self.assertEqual(called[0], (pawn, (0,1))) called.pop() pawn.move('u') self.assertEqual(called[0], (pawn, (0,0)))
class TelnetProtocol(Telnet): num = 0 move_mapping = { 'w': 'u', 'a': 'l', 'd': 'r', 's': 'd', } def connectionMade(self): self.factory.protocols.append(self) self.will(ECHO).addErrback(log.msg) self.will(SGA).addErrback(log.msg) self.wont(LINEMODE).addErrback(log.msg) name = string.uppercase[self.num % len(string.uppercase)] TelnetProtocol.num += 1 self.pawn = Pawn(name) self.factory.board.insertPawn((0,0), self.pawn) def enableLocal(self, option): return option in (ECHO, SGA) def connectionLost(self, reason): self.factory.protocols.remove(self) self.factory.board.pawns.remove(self.pawn) def applicationDataReceived(self, data): for k in data: if k in self.move_mapping: try: self.pawn.move(self.move_mapping[k]) except YoureDead, e: pass except IllegalMove, e: pass elif k == 'e': try: self.pawn.dropBomb() except YoureDead, e: pass