Пример #1
0
 def __init__(self):
   GameState.__init__(self)
   self.players = {}
   self.teamCount = 0
   self.largestTeam = 0
   self.stopGameTimer = None
   self.targetTeamCount = TEAM_COUNT
   self.setGameTime(GAME_TIME)
Пример #2
0
 def __init__(self):
     GameState.__init__(self)
     self.players = {}
     self.teamCount = 0
     self.largestTeam = 0
     self.stopGameTimer = None
     self.targetTeamCount = 2
     self.setGameTime(GAME_TIME)
Пример #3
0
 def startGame(self):
   GameState.startGame(self)
   def timerStop():
     if self.gameStartTime + self.gameTime > time.time():
       #the game must have been stopped and restarted as we aren't ready to stop yet. Why were we not cancelled though?
       raise RuntimeError("timer seemingly triggered early")
     self.stopGame()
   self.stopGameTimer = Timer(self.gameTime, timerStop)
   self.stopGameTimer.start()
   self.listeningThread.queueMessageToAll(proto.STARTGAME.create(self.gameTime))
Пример #4
0
 def __init__(self):
   GameState.__init__(self)
   self.players = {}
   self.teamCount = 0
   self.largestTeam = 0
   self.stopGameTimer = None
   self.targetTeamCount = TEAM_COUNT
   self.setGameTime(GAME_TIME)
   self.oocUpdater = self.OOCUpdater(self)
   self.oocUpdater.start()
   self._triggeredOOCWarning = {}
Пример #5
0
 def __init__(self):
     GameState.__init__(self)
     self.players = {}
     self.teamCount = 0
     self.largestTeam = 0
     self.stopGameTimer = None
     self.targetTeamCount = TEAM_COUNT
     self.setGameTime(GAME_TIME)
     self.oocUpdater = self.OOCUpdater(self)
     self.oocUpdater.start()
     self._triggeredOOCWarning = {}
Пример #6
0
  def __init__(self):
    GameState.__init__(self)
    self.players = {}
    self.baselinePlayers = {}
    self.teamCount = 0
    self.largestTeam = 0
    self.stopGameTimer = None
    self.targetTeamCount = TEAM_COUNT
    self.setGameTime(GAME_TIME)

    self.confidencePoint = time.time()
    self.uncertainEvents = []
Пример #7
0
    def __init__(self):
        super(AwlServer, self).__init__()
        self.game = GameState()
        print("Creating server")

        self._s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        #self._s.setblocking(0)
        self._s.bind((self.IP, self.PORT))
        self._s.listen(1)

        self.ins = [self._s]
        self.outs = []
        self.clients = {}
        self.players = {}
Пример #8
0
  def __init__(self, serial = None):
    parser = argparse.ArgumentParser(description='BraidsTag gun logic.')
    parser.add_argument('-s', '--serial', type=str, help='serial device to which the arduino is connected')

    self.args = parser.parse_args()

    self.player = None
    self.logic = StandardGameLogic()
    self.gameState = GameState()

    self.serverConnection = Client(self)
    self._sendToServer(proto.HELLO.create())

    if serial:
      self.serial = serial
      self.responsiveSerial = True
    else:
      if not self.args.serial:
        raise ArgumentError("You must specify -s if you do not start in fakeGun mode")

      try:
        import serial
        self.serial = serial.Serial(self.args.serial, 115200)
        self.responsiveSerial = True
      except ImportError:
        #We'll have to open this as a file
        print("WARNING: No serial module, assuming the serial argument is a normal file for testing")
        self.serial = open(self.args.serial)
        self.responsiveSerial = False
      except serial.serialutil.SerialException:
        #Try just opening this as a file
        self.serial = open(self.args.serial)
        self.responsiveSerial = False

    self.connectToArduino()
Пример #9
0
def main():
    state = GameState(deck=make_deck(), player_hand=[], dealer_hand=[])
    random.shuffle(state.deck)
    initial_deal(state)

    while True:
        show_cards(state)
        if has_blackjack(state.player_hand):
            print(f'YOU GOT A BLACKJACK!')
            if check_play_again() is True:
                set_table(state, check_deck(state))
                continue
            else:
                break

        hit_or_not = get_hit_or_stay(state)
        hit(hit_or_not, state)

        if hit_or_not == Play.Hit and hand_total(state.player_hand) < 21:
            continue

        winner = get_winner(state)
        display_winner(winner, state)

        if check_play_again() is True:
            set_table(state, check_deck(state))
            continue
        else:
            break
Пример #10
0
    def __init__(self):
        parser = argparse.ArgumentParser(description='BraidsTag gun logic.')
        parser.add_argument(
            '-s',
            '--serial',
            type=str,
            help='serial device to which the arduino is connected',
            required=True)
        #parser.add_argument('-p', '--playerID', type=self._stringToPlayerID, help='player id', default=1)
        #parser.add_argument('-t', '--teamID', type=int, choices=xrange(1, 8), help='team id', default=1)

        self.args = parser.parse_args()

        self.serverConnection = Client(self)
        self._sendToServer(proto.HELLO.create(-1, -1))

        try:
            self.serial = serial.Serial(self.args.serial, 115200)
            self.properSerial = True
        except serial.serialutil.SerialException:
            #Try just opening this as a file
            self.serial = open(self.args.serial)
            self.properSerial = False

        def playerDead():
            print "Out of lives!"

        self.logic = StandardGameLogic()
        self.logic.playerDead.connect(playerDead)
        self.gameState = GameState()

        self.connectToArduino()
Пример #11
0
    def __init__(self):
        parser = argparse.ArgumentParser(description='BraidsTag gun logic.')
        parser.add_argument(
            '-s',
            '--serial',
            type=str,
            help='serial device to which the arduino is connected')
        #parser.add_argument('-p', '--playerID', type=self._stringToPlayerID, help='player id', default=1)
        #parser.add_argument('-t', '--teamID', type=int, choices=xrange(1, 8), help='team id', default=1)
        parser.add_argument('-d',
                            '--debugGun',
                            help='use the debuggin gun UI',
                            default=False,
                            action='store_true')

        self.args = parser.parse_args()

        self.player = None

        self.serverConnection = Client(self)
        self._sendToServer(proto.HELLO.create())

        if self.args.debugGun:
            import fakeGun
            self.serial = fakeGun.showUI()
            self.responsiveSerial = True
        else:
            if not self.args.serial:
                raise ArgumentError(
                    "You must specify -s if you do not specify -d")

            try:
                import serial
                self.serial = serial.Serial(self.args.serial, 115200)
                self.responsiveSerial = True
            except ImportError:
                #We'll have to open this as a file
                print "WARNING: No serial module, assuming the serial argument is a normal file for testing"
                self.serial = open(self.args.serial)
                self.responsiveSerial = False
            except serial.serialutil.SerialException:
                #Try just opening this as a file
                self.serial = open(self.args.serial)
                self.responsiveSerial = False

        def playerDead():
            print "Out of lives!"

        self.logic = StandardGameLogic()
        self.logic.playerDead.connect(playerDead)
        self.gameState = GameState()

        self.connectToArduino()
Пример #12
0
def load_game_state(state_row, world):
    return GameState(
        world=world,
        location_name=state_row[0],
        inventory=[Thing(name=x) for x in json.loads(state_row[1])])
Пример #13
0
 def setUp(self):
     self.gl = StandardGameLogic()
     self.gameState = GameState()
     self.gameState.setGameTime(120)
Пример #14
0
class TestTakingHits(unittest.TestCase):
    def setUp(self):
        self.gl = StandardGameLogic()
        self.gameState = GameState()
        self.gameState.setGameTime(120)

    def test_simple_hit_while_game_stopped(self):
        player = Player(1, 1)
        initialHealth = player.health

        sentTeam = 1
        sentPlayer = 2
        damage = 2

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)

        self.assertEqual(initialHealth, player.health)

    def test_simple_hit(self):
        self.gameState.startGame()
        player = Player(1, 1)
        initialHealth = player.health

        sentTeam = 2
        sentPlayer = 1
        damage = 2

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)

        self.assertEqual(initialHealth - damage, player.health)

    def test_self_hit(self):
        self.gameState.startGame()
        player = Player(1, 1)
        initialHealth = player.health

        sentTeam = 1
        sentPlayer = 1
        damage = 2

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)

        self.assertEqual(initialHealth, player.health)

    def test_team_hit(self):
        self.gameState.startGame()
        player = Player(1, 1)
        initialHealth = player.health

        sentTeam = 1
        sentPlayer = 2
        damage = 2

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)

        self.assertEqual(initialHealth - damage, player.health)

    def test_shot_until_dead(self):
        self.gameState.startGame()
        player = Player(1, 1)
        initialHealth = player.health

        sentTeam = 2
        sentPlayer = 1
        damage = (
            player.health // 2
        ) + 1  # this will fail if the player only starts with 2 health :-(

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
        self.assertEqual(initialHealth - damage, player.health)

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
        self.assertEqual(0, player.health)
        #TODO assert death signal

        self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
        self.assertEqual(0, player.health)
Пример #15
0
class AwlServer(threading.Thread):
    IP = '0.0.0.0'
    PORT = 1889

    def __init__(self):
        super(AwlServer, self).__init__()
        self.game = GameState()
        print("Creating server")

        self._s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        #self._s.setblocking(0)
        self._s.bind((self.IP, self.PORT))
        self._s.listen(1)

        self.ins = [self._s]
        self.outs = []
        self.clients = {}
        self.players = {}

    def broadcast(self, msg_type, msg_val):
        for c in self.clients:
            send(c, msg_type, msg_val)

    def send_game(self, client=None):
        state = {
            'scores': self.game.scores,
            'game': self.game.game,
            'to_play': self.game.current_player,
        }
        if client:
            send(client, 'game_state', state)
        else:
            self.broadcast('game_state', state)

    def process_msg(self, client, msg):
        if len(self.players) != 2:
            send(client, 'info', "Waiting for opponent")
            return
        msg_type, msg = decode_message(msg)

        if msg_type == 'play':
            try:
                self.game.play(self.players[client], msg)
                p = player_name(self.players[client])
                self.broadcast('info', "%s played %s" % (p, msg))
                self.send_game()
            except AwaleException as e:
                send(client, 'error', str(e))
            if self.game.over():
                win_player = winner(self.game.game, self.game.scores)
                if win_player is not None:
                    self.broadcast('info',
                                   "%s wins !" % player_name(win_player))
                else:
                    self.broadcast('info', "Draw !")
                self.running = False

    def run(self):
        print("running...")
        self.running = True
        while self.running and self.ins:
            rds, wts, ers = select.select(self.ins, self.outs, self.ins, 0)

            for s in rds:
                if s is self._s:
                    if len(self.clients) < 2:
                        cl, addr = s.accept()
                        print("New client %s" % str(addr))
                        self.ins.append(cl)
                        self.clients[cl] = b''
                        player_no = len(self.players)
                        pname = player_name(player_no)
                        send(cl, 'info', "welcome %s" % pname)
                        send(cl, 'player_id', player_no)
                        self.players[cl] = player_no

                        if len(self.players) == 2:
                            self.broadcast('info', "Ready to play")
                            self.send_game()
                    else:
                        print("Maximum clients reached")
                        cl, addr = s.accept()
                        cl.close()
                else:
                    data = s.recv(5)
                    if data:
                        self.clients[s] += data
                    else:
                        print("Client disconnected")
                        self.ins.remove(s)
                        self.clients.pop(s)
                        if len(self.players) == 2:
                            self.broadcast(
                                'info',
                                "%s left. Exiting..." % \
                                player_name(self.players[s])
                            )
                            self.running = False
                        s.close()

            for s in ers:
                print("Error, closing socket.")
                self.ins.remove(s)
                s.close()

            # manage data
            for s in self.clients:
                data = self.clients[s]
                msg, remain = extract_msg(data)
                if msg:
                    self.process_msg(s, msg)
                self.clients[s] = remain
        print("closing sockets")
        for s in self.clients:
            s.close()
        self._s.close()
Пример #16
0
key = Thing(name="rusty key")
home = Location(name="Home",
                description="Home is where the heart is!",
                exits={
                    "east": (None, "Street"),
                    "down": (key, "Basement")
                })
street = Location(name="Street",
                  description="The street next to your house.",
                  exits={"west": (None, "Home")},
                  items={key.name: key})
basement = Location(name="Basement",
                    description="You found the basement!",
                    exits={"up": (None, "Home")})
world = pmap({x.name: x for x in [home, street, basement]})
initial_state = GameState(location_name="Home", world=world)
in_street = initial_state.set(location_name="Street")
in_street_with_key = in_street.transform(["world", "Street", "items"],
                                         lambda _: {}, ["inventory"],
                                         lambda _: [key])


def test_take_not_found():
    assert take(initial_state, "some item") is None


def test_take_something():
    in_street = initial_state.set(location_name="Street")
    assert take(in_street, "rusty key") == in_street_with_key

Пример #17
0
 def setUp(self):
   self.gl = StandardGameLogic()
   self.gameState = GameState()
   self.gameState.setGameTime(120)
Пример #18
0
class TestTakingHits(unittest.TestCase):
  def setUp(self):
    self.gl = StandardGameLogic()
    self.gameState = GameState()
    self.gameState.setGameTime(120)
    
  def test_simple_hit_while_game_stopped(self):
    player = Player(1, 1)
    initialHealth = player.health
  
    sentTeam = 1
    sentPlayer = 2
    damage = 2
  
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
  
    self.assertEqual(initialHealth, player.health)

  def test_simple_hit(self):
    self.gameState.startGame()
    player = Player(1, 1)
    initialHealth = player.health
  
    sentTeam = 2
    sentPlayer = 1
    damage = 2
  
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
  
    self.assertEqual(initialHealth - damage, player.health)

  def test_self_hit(self):
    self.gameState.startGame()
    player = Player(1, 1)
    initialHealth = player.health
  
    sentTeam = 1
    sentPlayer = 1
    damage = 2
  
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
  
    self.assertEqual(initialHealth, player.health)

  def test_team_hit(self):
    self.gameState.startGame()
    player = Player(1, 1)
    initialHealth = player.health
  
    sentTeam = 1
    sentPlayer = 2
    damage = 2
  
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
  
    self.assertEqual(initialHealth - damage, player.health)

  def test_shot_until_dead(self):
    self.gameState.startGame()
    player = Player(1, 1)
    initialHealth = player.health
  
    sentTeam = 2
    sentPlayer = 1
    damage = (player.health // 2) + 1 # this will fail if the player only starts with 2 health :-(
  
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
    self.assertEqual(initialHealth - damage, player.health)

    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
    self.assertEqual(0, player.health)
    #TODO assert death signal
    
    self.gl.hit(self.gameState, player, sentTeam, sentPlayer, damage)
    self.assertEqual(0, player.health)
Пример #19
0
def game_state():
    gameState = GameState()
    gameState.setGameTime(120)
    return gameState
Пример #20
0
 def stopGame(self):
   GameState.stopGame(self)
   self.listeningThread.queueMessageToAll(proto.STOPGAME.create())
   if self.stopGameTimer:
     self.stopGameTimer.cancel()
   self.stopGameTimer = None
Пример #21
0
def game_state():
    gameState = GameState()
    gameState.setGameTime(120)
    return gameState