def __init__(self):
     super(Asteroids, self).__init__()
     self.ship = Ship(GameEngine.display_width / 2, GameEngine.display_height / 2)
     self.asteroids = []
     self.time = 0
     self.score = 0
     GameEngine.change_caption("Asteroids")
示例#2
0
 def __init__(self):
     super(Snake, self).__init__()
     self.snake = [[19, 15], [20, 15], [20, 15], [20, 15]]
     self.direction = 180
     self.apple = Apple()
     self.score = 0
     GameEngine.change_mode(640, 480)
     GameEngine.change_caption("Snake")
示例#3
0
def new_game():
    print 'new game'
    new_game_engine = GameEngine()
    new_game_engine.gen_new_word()
    new_definition = new_game_engine.word_obj.definition
    session.attributes["game_engine"] = jsonpickle.encode(new_game_engine)
    return question("This is a new game. The first definition is...... " +
                    new_definition)
示例#4
0
def new_game():
  """ Start a new game, if the user is authenticated. """
  if 'user_id' not in session:
    return redirect(url_for('index'))
  user_id = session['user_id']
  game_builder = GameBuilder(g.database_service).for_user(user_id)
  # TODO Maybe programatically pick a game to play
  player_id = save_internet_game(game_builder)
  session['player_id'] = player_id
  game_engine = GameEngine(g.database_service, player_id)
  return jsonify(prompt=game_engine.prompt())
 def draw(self):
     GameEngine.game_display.fill((0, 0, 0))
     GameEngine.game_display.blit(utils.rot_center(self.ship.image, self.ship.angle),
                                  (self.ship.rect.x, self.ship.rect.y))
     for bullet in self.ship.bullets:
         GameEngine.game_display.blit(bullet.image, (bullet.rect.x, bullet.rect.y))
     for asteroid in self.asteroids:
         GameEngine.game_display.blit(
             pygame.transform.scale(asteroid.image, (25 * asteroid.size, 25 * asteroid.size)),
             (asteroid.rect.x, asteroid.rect.y))
     GameEngine.display_data(100, 20, self.score, GameEngine.font, (255, 255, 255))
     super().draw()
示例#6
0
def step_game():
  """ Take one step through the game. """
  if 'player_id' not in session:
    return redirect(url_for('index'))
  game_engine = GameEngine(g.database_service, session['player_id'])
  if game_engine.game_is_over():
    return jsonify(prompt='You beat the game!')
  user_input = request.form['userInput']
  result = game_engine.step(user_input)
  if game_engine.game_is_over():
    return jsonify(prompt=result + '\nCongrats, you fulfilled the objective!')
  return jsonify(prompt=result)
def main():

    modes = {
        'cheater': False
    }

    if len(argv) > 1:
        for arg in argv:
            if arg == '--cheater':
                modes['cheater'] = True

    ge = GameEngine(modes)

    while 1:
        if ge.handle_events() == -1:
            return
        ge.do_play()
示例#8
0
 def handle_events(self):
     for event in pygame.event.get():
         if event.type == pygame.QUIT:
             GameEngine.quit()
     keypresses = pygame.key.get_pressed()
     if keypresses[pygame.K_UP] != 0:
         if self.direction != 90:
             self.direction = -90
     if keypresses[pygame.K_LEFT] != 0:
         if self.direction != 0:
             self.direction = 180
     if keypresses[pygame.K_RIGHT] != 0:
         if self.direction != 180:
             self.direction = 0
     if keypresses[pygame.K_DOWN] != 0:
         if self.direction != -90:
             self.direction = 90
 def handle_events(self):
     for event in pygame.event.get():
         if event.type == pygame.QUIT:
             GameEngine.quit()
     keypresses = pygame.key.get_pressed()
     if keypresses[pygame.K_LEFT] != 0:
         self.ship.angle = (self.ship.angle + 5) % 360
     if keypresses[pygame.K_RIGHT] != 0:
         self.ship.angle = (self.ship.angle - 5) % 360
     if keypresses[pygame.K_UP] != 0:
         self.ship.acceleration = 6
     if self.ship.firing == 0 and keypresses[pygame.K_SPACE] != 0:
         self.ship.firing = 4
         self.ship.bullets.append(Bullet(self.ship.rect.x + 15, self.ship.rect.y + 17, self.ship.angle))
     if self.ship.warp == 0 and (keypresses[pygame.K_LSHIFT] != 0 or keypresses[pygame.K_RSHIFT] != 0):
         self.ship.warp = 20
         self.ship.rect.x = random.randint(0, GameEngine.display_width)
         self.ship.rect.y = random.randint(0, GameEngine.display_height)
示例#10
0
def main():

    image = None
    n = None
    if len(argv) == 3:
        for i in range(1, 3):
            if argv[i][:4] == '--n=':
                n = argv[i][4:]
            else:
                image = argv[i]

    if (image is None) or (n is None):
        print "usage: pyzzle --n=<number> image_file"
        exit()

    ge = GameEngine(image, n)

    while 1:
        if ge.handle_events() == -1:
            return
        ge.do_play()
示例#11
0
    def evaluate(self, n_playout):
        '''
        Evaluate AI model
        '''
        player = EvaluationPlayer(ai=self.ai)

        if self.verbose:
            starttime = time.time()
            print("Evaluating...", end="")

        scores = list()
        for i in range(n_playout):
            gameengine = GameEngine(Nx=self.Nx,
                                    Ny=self.Ny,
                                    player=player,
                                    timeperiod=0.5,
                                    is_selfplay=False)
            gameengine.start()
            while gameengine.update():
                pass

            score = gameengine.get_score()
            scores.append(score)

        score = np.mean(scores)

        if self.verbose:
            endtime = time.time()
            print("End: Run Time {0:.2f}s".format(endtime - starttime))

        return score
示例#12
0
    def start(self):
        '''
        Start a game for AI model
        '''
        n_mcts = 1000

        if self.verbose:
            starttime = time.time()
            print("Self-playing...", end="")

        gameengine = GameEngine(Nx=self.Nx,
                                Ny=self.Ny,
                                player=self.player,
                                timeperiod=0.5,
                                is_selfplay=True)
        gameengine.start()
        while gameengine.update():
            pass

        if self.verbose:
            endtime = time.time()
            print("End: Run Time {0:.2f}s".format(endtime - starttime))

        data = gameengine.get_data()
        data = self.__geometry_operators(data)

        return data
示例#13
0
 def update(self):
     gameover = False
     self.score = len(self.snake) - 4
     for index, s in enumerate(self.snake[-1:0:-1]):
         s[0], s[1] = [
             self.snake[len(self.snake) - 2 - index][0],
             self.snake[len(self.snake) - 2 - index][1]
         ]
     self.snake[0][0] += int(math.cos(math.radians(self.direction)))
     self.snake[0][1] += int(math.sin(math.radians(self.direction)))
     if self.snake[0] == [self.apple.x, self.apple.y]:
         self.snake.append([self.snake[-1][0], self.snake[-1][1]])
         self.apple.reseed(self.snake)
     for s in self.snake[1:]:
         if s == self.snake[0]:
             gameover = True
     if 0 <= self.snake[0][0] < 40 and 0 <= self.snake[0][1] < 30:
         pass
     else:
         gameover = True
     if gameover == True:
         GameEngine.display_data(320, 220, "Game Over!", GameEngine.font,
                                 (255, 255, 255))
         super().draw()
         time.sleep(1)
         GameEngine.display_data(320, 260 + 20,
                                 "Your score was: " + str(self.score),
                                 GameEngine.font, (255, 255, 255))
         super().draw()
         time.sleep(2)
         self.exit()
         GameEngine.change_state(games.menu.Menu())
     super().update(15)
示例#14
0
 def draw(self):
     GameEngine.game_display.fill((0, 0, 0))
     GameEngine.display_data(400, 125, "Classic Games in Python",
                             GameEngine.font, (255, 255, 255))
     GameEngine.display_data(400, 400, "Asteroids", GameEngine.font,
                             (255, 255, 255))
     GameEngine.display_data(400, 440, "Snake", GameEngine.font,
                             (255, 255, 255))
     super().draw()
示例#15
0
 def handle_events(self):
     pos = (0, 0)
     for event in pygame.event.get():
         if event.type == pygame.QUIT:
             GameEngine.quit()
         if event.type == pygame.MOUSEBUTTONUP:
             pos = pygame.mouse.get_pos()
     if 360 < pos[0] < 440 and 395 < pos[1] < 405:
         GameEngine.change_state(games.asteroids.Asteroids())
     elif 360 < pos[0] < 440 and 435 < pos[1] < 445:
         GameEngine.change_state(games.snake.Snake())
示例#16
0
 def setUp(self):
   self.database = FakeDatabaseService()
   self.test_room = Room('The Test Room',
       'In this room, you see a Pythonista writing unittest test cases',
       id=2)
   self.production_room = Room('The Production Room',
       'You see a production server running a web app', id=5)
   self.player_id = 6
   self.test_exit = Exit(name='West',
       description='The west exit', from_room=self.test_room.get_id(),
       to_room=self.production_room.get_id(), locked=False, id=7)
   self.test_item = ExitUnlockingItem(name='TPS Report',
       description='A testing specification',
       use_message='You read the report',
       owned_by_player=None,
       in_room=self.test_room.get_id(),
       locked=False, unlocks_exit=7, id=9)
   self.game_engine = GameEngine(self.database, self.player_id)
示例#17
0
 def exit(self):
     GameEngine.change_mode(GameEngine.display_width,
                            GameEngine.display_height)
     GameEngine.change_caption("Classic Games in Python")
示例#18
0
def new_session():
    engine = GameEngine()
    engine.gen_new_word()
    session.attributes["game_engine"] = jsonpickle.encode(engine)

    print "session started"
示例#19
0
 def draw(self):
     GameEngine.game_display.fill((0, 0, 0))
     GameEngine.display_data(400, 125, "Game Engine", GameEngine.font,
                             (255, 255, 255))
     super().draw()
示例#20
0
 def handle_events(self):
     for event in pygame.event.get():
         if event.type == pygame.QUIT:
             GameEngine.quit()
示例#21
0
class GameEngineTest(unittest.TestCase):
  def setUp(self):
    self.database = FakeDatabaseService()
    self.test_room = Room('The Test Room',
        'In this room, you see a Pythonista writing unittest test cases',
        id=2)
    self.production_room = Room('The Production Room',
        'You see a production server running a web app', id=5)
    self.player_id = 6
    self.test_exit = Exit(name='West',
        description='The west exit', from_room=self.test_room.get_id(),
        to_room=self.production_room.get_id(), locked=False, id=7)
    self.test_item = ExitUnlockingItem(name='TPS Report',
        description='A testing specification',
        use_message='You read the report',
        owned_by_player=None,
        in_room=self.test_room.get_id(),
        locked=False, unlocks_exit=7, id=9)
    self.game_engine = GameEngine(self.database, self.player_id)

  def test_prompt_for_player(self):
    self.database.stub_add_player_occupied_room(self.player_id, self.test_room)
    prompt = self.game_engine.prompt()
    self.assertTrue(self.test_room.get_name() in prompt)

  def add_test_room_and_test_exit(self):
    self.database.stub_add_player_occupied_room(self.player_id, self.test_room)
    self.database.stub_add_room_exit(self.test_room.get_id(), self.test_exit)

  def test_exits_displayed(self):
    self.add_test_room_and_test_exit()
    prompt = self.game_engine.prompt()
    self.assertTrue(self.test_exit.get_name() in prompt)

  def test_items_displayed(self):
    self.add_test_room_and_test_exit()
    self.database.stub_add_item_to_room(self.test_item, self.test_room.get_id())
    prompt = self.game_engine.prompt()
    self.assertTrue(self.test_item.get_name() in prompt)

  def test_possible_actions_displays_exit(self):
    self.add_test_room_and_test_exit()
    actions = self.game_engine.possible_actions()
    exit_actions = [action for action in actions if 'exit' in action]
    self.assertEquals(1, len(exit_actions))
    self.assertTrue(self.test_exit.get_name() in exit_actions[0])

  def test_possible_actions_displays_items_that_the_player_has(self):
    self.add_test_room_and_test_exit()
    self.database.stub_add_item_to_player(self.test_item, self.player_id)
    actions = self.game_engine.possible_actions()
    item_actions = [action for action in actions if 'use' in action]
    self.assertEquals(1, len(item_actions))
    item_action = item_actions[0]
    self.assertTrue(self.test_item.get_name() in item_action)

  def add_test_room_exit_and_item_to_room(self):
    self.add_test_room_and_test_exit()
    self.database.stub_add_item_to_room(self.test_item, self.test_room.get_id())

  def test_possible_actions_displays_takeable_items(self):
    self.add_test_room_exit_and_item_to_room()
    actions = self.game_engine.possible_actions()
    take_actions = [action for action in actions if 'take' in action]
    self.assertEquals(1, len(take_actions))
    take_action = take_actions[0]
    self.assertTrue(self.test_item.get_name() in take_action)

  def test_step_move_through_exit_changes_room(self):
    self.add_test_room_and_test_exit()
    self.database.stub_add_room(self.production_room)
    self.game_engine.step('exit ' + self.test_exit.get_name())
    self.assertEquals(self.production_room.get_id(),
        self.database.players_to_room_ids[self.player_id])

  def test_step_does_not_change_room_if_exit_locked(self):
    self.test_exit.locked = True
    self.add_test_room_and_test_exit()
    self.game_engine.step('exit ' + self.test_exit.get_name())
    self.assertEquals(self.test_room.get_id(),
        self.database.players_to_rooms[self.player_id].get_id())

  def test_step_take_item(self):
    self.add_test_room_exit_and_item_to_room()
    self.game_engine.step('take ' + self.test_item.get_name())
    self.assertTrue(self.test_item not in \
        self.database.rooms_to_items[self.test_room.get_id()])
    self.assertTrue(self.test_item in \
        self.database.players_to_items[self.player_id])

  def test_step_take_item_does_nothing_if_item_doesnt_exist(self):
    self.add_test_room_exit_and_item_to_room()
    self.game_engine.step('take NonExistentItem')
    self.assertTrue(self.test_item in \
        self.database.rooms_to_items[self.test_room.get_id()])
    self.assertFalse('NonExistentItem' in \
        self.database.players_to_items[self.player_id])

  def test_step_use_item_to_unlock_exit(self):
    self.add_test_room_exit_and_item_to_room()
    # self.test_item is set in setUp to unlock self.test_exit
    self.test_exit.locked = True
    self.game_engine.step('take ' + self.test_item.get_name())
    self.game_engine.step('use ' + self.test_item.get_name())
    self.assertFalse(self.test_exit.locked)
    self.assertTrue(self.test_item not in \
        self.database.players_to_items[self.player_id])

  def test_step_use_item_fails_if_nothing_to_unlock(self):
    self.add_test_room_exit_and_item_to_room()
    self.test_exit.locked = True
    self.test_item.unlocks_exit = 45 # Not self.test_exit
    self.game_engine.step('take ' + self.test_item.get_name())
    self.game_engine.step('use ' + self.test_item.get_name())
    self.assertTrue(self.test_exit.locked)
    self.assertTrue(self.test_item in \
        self.database.players_to_items[self.player_id])

  def test_step_use_item_to_unlock_item(self):
    self.add_test_room_exit_and_item_to_room()
    self.test_item.locked = True
    key = ItemUnlockingItem(
        name='Key to the TPS report drawer',
        description='A metal key',
        use_message='You put the key in the lock and turned it',
        owned_by_player=None,
        in_room=self.test_room.get_id(),
        locked=False,
        unlocks_item=self.test_item.get_id(),
        id=19)
    self.database.stub_add_item_to_room(key, self.test_room.get_id())
    self.game_engine.step('take ' + key.get_name())
    self.game_engine.step('use ' + key.get_name())
    self.assertFalse(self.test_item.locked)
示例#22
0
 def exit(self):
     GameEngine.change_caption("Classic Games in Python")
示例#23
0
 def update(self):
     self.ship.rect.x -= self.ship.acceleration * math.sin(math.radians(self.ship.angle))
     self.ship.rect.y -= self.ship.acceleration * math.cos(math.radians(self.ship.angle))
     self.ship.acceleration = max(self.ship.acceleration - .1, 0)
     self.ship.warp = max(self.ship.warp - .5, 0)
     self.ship.firing = max(self.ship.firing - .5, 0)
     if self.ship.rect.x > GameEngine.display_width:
         self.ship.rect.x = 0
     if self.ship.rect.x < 0:
         self.ship.rect.x = GameEngine.display_width
     if self.ship.rect.y > GameEngine.display_height:
         self.ship.rect.y = 0
     if self.ship.rect.y < 0:
         self.ship.rect.y = GameEngine.display_height
     if random.randint(0, 100) > 97:
         if random.random() > 0.5:
             if random.random() > 0.5:
                 self.asteroids.append(
                     Asteroid(0, random.randint(0, GameEngine.display_height), random.randint(0, 360), 3))
             else:
                 self.asteroids.append(
                     Asteroid(GameEngine.display_width, random.randint(0, GameEngine.display_height),
                              random.randint(0, 360), 3))
         else:
             if random.random() > 0.5:
                 self.asteroids.append(
                     Asteroid(random.randint(0, GameEngine.display_width), 0, random.randint(0, 360), 3))
             else:
                 self.asteroids.append(
                     Asteroid(random.randint(0, GameEngine.display_width), GameEngine.display_height,
                              random.randint(0, 360), 3))
     for bullet in self.ship.bullets:
         bullet.rect.x -= 9 * math.sin(math.radians(bullet.angle))
         bullet.rect.y -= 9 * math.cos(math.radians(bullet.angle))
         if bullet.rect.x < 0 or bullet.rect.x > GameEngine.display_width:
             self.ship.bullets.remove(bullet)
         elif bullet.rect.y < 0 or bullet.rect.y > GameEngine.display_height:
             self.ship.bullets.remove(bullet)
         else:
             for asteroid in self.asteroids:
                 if abs(bullet.rect.x - asteroid.rect.x) < 12.5 * asteroid.size and abs(
                         bullet.rect.y - asteroid.rect.y) < 12.5 * asteroid.size:
                     self.score = int(self.score + 300 / asteroid.size)
                     try:
                         self.asteroids.remove(asteroid)
                     except ValueError:
                         pass
                     try:
                         self.ship.bullets.remove(bullet)
                     except ValueError:
                         pass
                     if asteroid.size > 1:
                         self.asteroids += [
                             Asteroid(asteroid.rect.x, asteroid.rect.y, random.randint(0, 360), asteroid.size - 1),
                             Asteroid(asteroid.rect.x, asteroid.rect.y, random.randint(0, 360), asteroid.size - 1)]
     for asteroid in self.asteroids:
         asteroid.rect.x -= 4 / asteroid.size * math.sin(math.radians(asteroid.angle))
         asteroid.rect.y -= 4 / asteroid.size * math.cos(math.radians(asteroid.angle))
         if asteroid.rect.x > GameEngine.display_width:
             asteroid.rect.x = 0
         if asteroid.rect.x < 0:
             asteroid.rect.x = GameEngine.display_width
         if asteroid.rect.y > GameEngine.display_height:
             asteroid.rect.y = 0
         if asteroid.rect.y < 0:
             asteroid.rect.y = GameEngine.display_height
         if abs(self.ship.rect.x - asteroid.rect.x) < 15 * asteroid.size and abs(
                 self.ship.rect.y - asteroid.rect.y) < 15 * asteroid.size:
             GameEngine.display_data(GameEngine.display_width / 2, GameEngine.display_height / 2 - 20, "Game Over!",
                                     GameEngine.font, (255, 255, 255))
             super().draw()
             time.sleep(1)
             GameEngine.display_data(GameEngine.display_width / 2, GameEngine.display_height / 2 + 20,
                                     "Your score was: " + str(self.score), GameEngine.font, (255, 255, 255))
             super().draw()
             time.sleep(2)
             self.exit()
             GameEngine.change_state(games.menu.Menu())
     super().update(50)