Ejemplo n.º 1
0
	def __init__(self):
		"""Initialize the game, and create game resources."""
		pygame.init()
		self.settings = settings.Settings()

		# Start game in an inactive state.
		self.game_active = False

		self.screen = pygame.display.set_mode(
			(self.settings.screen_width, self.settings.screen_height)
		)
		# self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
		# self.settings.screen_width = self.screen.get_rect().width
		# self.settings.screen_height = self.screen.get_rect().height

		pygame.display.set_caption("Alien Invasion")

		# Create an instance to store game statistics and create a scoreboard.
		self.stats = game_stats.GameStats(self)
		self.sb = scoreboard.Scoreboard(self)

		self.ship = ship.Ship(self)
		self.background = background.Background(self)
		self.bullets = pygame.sprite.Group()
		self.aliens = pygame.sprite.Group()

		self._create_fleet()

		# Make the Play button.
		self.play_button = button.Button(self, "Play")
Ejemplo n.º 2
0
def run_game():
    pygame.init()  # 初始化
    set = settings.Settings()  # 创建对象set获取Settings中的info
    screen = pygame.display.set_mode(
        (set.screen_width, set.screen_height))  # 这里填的是元组
    pygame.display.set_caption("Chenlicheng")  # 设置标题
    ship_1 = ship.Ship(screen, set)  # 创建了一艘船的实例
    bullets = pygame.sprite.Group()  # 创建了一个精灵的编组
    aliens = pygame.sprite.Group()  # 创建了一个外星人的编组
    stats = game_stats.GameStats(set)
    sb = scoreboard.Scoreboard(stats, set, screen)  #创建一个积分的实例
    play_button = button.Button(screen, "play")
    game_functions.create_fleet(screen, set, aliens,
                                ship_1)  # 创建了一些外星人,并且把它放到编组里
    while True:
        # 检查必须保持活跃,不然无法回到游戏中
        game_functions.check_events(ship_1, screen, bullets, set, play_button,
                                    stats)  # 位置实参
        if stats.game_active:  # 飞船,子弹,外星人不再刷新,但是保持屏幕active
            ship_1.update()  # 更新ship的位置
            game_functions.update_bullets(bullets, aliens, set, screen, ship_1,
                                          stats, sb)
            game_functions.update_aliens(aliens, set, ship_1, stats, bullets,
                                         screen, sb)
        game_functions.update_screen(set, screen, ship_1, bullets, aliens,
                                     stats, play_button, sb)
def run_game():
    pygame.init()
    pygame.display.set_caption('Alien Invasion')

    ai_setting = setting.Setting()
    screen = pygame.display.set_mode(
        (ai_setting.screen_width, ai_setting.screen_height))
    ship = Ship(ai_setting, screen)
    bullets = Group()
    aliens = Group()
    stats = game_stats.GameStats(ai_setting)
    play_button = button.Button(ai_setting, screen, "Play")
    sb = scoreboard.Scoreboard(ai_setting, screen, stats)

    game_functions.create_fleet(ai_setting, screen, ship, aliens)

    while True:
        game_functions.check_events(ai_setting, screen, stats, sb,
                                    play_button, ship, aliens, bullets)
        if stats.game_active:
            ship.update()
            game_functions.update_bullets(ai_setting, screen, stats,
                                          sb, ship, aliens, bullets)
            game_functions.update_aliens(ai_setting, screen, stats,
                                         sb, ship, aliens, bullets)
        game_functions.update_screen(ai_setting, screen, stats, sb,
                                     ship, aliens, bullets, play_button)
Ejemplo n.º 4
0
def rungame():
    pygame.init()
    score = 0
    game_settings = settings.Settings()

    screen = pygame.display.set_mode(
        (game_settings.screen_w, game_settings.screen_h))
    sb = scoreboard.Scoreboard(screen, score)
    ship = Ship(screen, game_settings)
    d_n_f = dnf.Dnf(screen, game_settings)
    play_button = Button(screen, 'PLAY')
    exit_button = Button(screen, 'exit')
    pygame.display.set_caption("avoid the dnfs!")

    while game_running:
        gf.check_events(ship)
        d_n_f.update(game_settings, score, sb, ship, game_running, hs,
                     exit_button)
        sb.update(score, hs)
        ship.update(game_settings)
        gf.update_screen(screen, game_settings, ship, d_n_f, sb)
Ejemplo n.º 5
0
def run_game():
    # 初始化游戏并创建一个屏幕对象
    # 实例化类
    ai_settings = settings.Settings()
    pygame.init()
    screen = pygame.display.set_mode((ai_settings.screen_width,
                                      ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")
    # 创建一个船的实例
    aship = ship.Ship(ai_settings, screen)
    # 创建一个用于存储子弹的编组
    bullets = pygame.sprite.Group()
    # 创建一个用于储存外星人的编组
    aliens = pygame.sprite.Group()
    # 创建一个外星人群
    gf.create_fleet(ai_settings, screen, aliens, aship)
    # 创建一个用于统计游戏信息的实例
    game_stats = geme_stats.GameStats(ai_settings)
    #绘制play按钮
    play_button = button.Button(screen, "Play")
    #实例化scoreboard
    sb = scoreboard.Scoreboard(screen, ai_settings, game_stats)

    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标的实践
        gf.check_events(ai_settings, screen, aship, bullets, game_stats,
                        play_button, aliens, sb)
        if game_stats.game_active:
            # 检查键盘输入,调整飞船的位置,此条代码是更新ship的位置数据
            aship.update()
            # 调入子弹更新和删除无用的子弹,此条代码是更新bullet的数量数据
            gf.update_bullets(ai_settings, screen, aliens, aship, bullets,
                              game_stats, sb)
            # 更新外星人
            gf.update_aliens(ai_settings, game_stats, aliens, bullets,
                             screen, aship, sb)
        # 调入屏幕更新和飞船更新函数,每次重画面
        gf.update_screen(ai_settings, screen, aship, bullets, aliens,
                         game_stats, play_button, sb)
Ejemplo n.º 6
0
char_width = 111
char_height = 139  # размеры героя

char_x = 3 * display_width // 10
char_y = display_height - 60 - char_height  # координата местоположения героя

do_jump = False  # индикатор прыжка
jump_count = 33  # счетчик смены координаты прыжка прыжка

score = 0  # счет
max_score = 0  # максимальный счет при запуске окна

save_data = saving.Save()

high_scores = scoreboard.Scoreboard(save_data.get_data('score'))
# сохраненная таблица рекордов


def jump() -> None:
    """Do jump"""
    global jump_count, do_jump, char_y
    if jump_count >= -33:  # пока счетчик не достиг -33 меняем координату героя
        char_y -= jump_count / 1.7
        jump_count -= 1
    else:
        jump_count = 33
        do_jump = False


def count_score() -> None:
Ejemplo n.º 7
0
import scoreboard


t = Turtle()
screen = Screen()
screen.tracer(0)
screen.setup(width=1000, height=600)
screen.title("Pong Game")
screen.bgcolor("black")
screen.listen()

p1 = paddle.Paddle(480, 0)
p2 = paddle.Paddle(-490, 0)
p3 = Turtle()
b = ball.Ball()
player_1 = scoreboard.Scoreboard(-250, 250)
player_2 = scoreboard.Scoreboard(250, 250)


screen.onkey(p1.up, "Up")
screen.onkey(p1.down, "Down")
screen.onkey(p2.up, "w")
screen.onkey(p2.down, "s")

game_on = True
while game_on:
    b.refresh()
    screen.update()
    time.sleep(b.move_speed)

    if b.ycor() > 290 or b.ycor() < -290:
Ejemplo n.º 8
0
    def __init__(self, handle):
        Activity.__init__(self, handle)

        self.play_mode = None

        toolbar_box = ToolbarBox()
        self.set_toolbar_box(toolbar_box)

        self.activity_button = ActivityToolbarButton(self)
        toolbar_box.toolbar.insert(self.activity_button, -1)

        self._memorizeToolbarBuilder = \
            memorizetoolbar.MemorizeToolbarBuilder(self)

        toolbar_box.toolbar.insert(Gtk.SeparatorToolItem(), -1)

        self._edit_button = ToggleToolButton('view-source')
        self._edit_button.set_tooltip(_('Edit game'))
        self._edit_button.set_active(False)
        toolbar_box.toolbar.insert(self._edit_button, -1)

        self._createToolbarBuilder = \
            createtoolbar.CreateToolbarBuilder(self)

        separator = Gtk.SeparatorToolItem()
        separator.set_expand(True)
        separator.set_draw(False)
        separator.set_size_request(0, -1)
        toolbar_box.toolbar.insert(separator, -1)

        toolbar_box.toolbar.insert(StopButton(self), -1)

        self.game = game.MemorizeGame()
        # Play game mode
        self.table = cardtable.CardTable()
        self.scoreboard = scoreboard.Scoreboard()
        self.cardlist = cardlist.CardList()
        self.createcardpanel = createcardpanel.CreateCardPanel(self.game)
        self.cardlist.connect('pair-selected',
                              self.createcardpanel.pair_selected)
        self.cardlist.connect(
            'update-create-toolbar',
            self._createToolbarBuilder.update_create_toolbar)
        self.createcardpanel.connect('add-pair',
                                     self.cardlist.add_pair)
        self.createcardpanel.connect('update-pair',
                                     self.cardlist.update_selected)
        self.createcardpanel.connect('change-font',
                                     self.cardlist.change_font)
        self.createcardpanel.connect('pair-closed',
                                     self.cardlist.rem_current_pair)

        self._createToolbarBuilder.connect('create_new_game',
                                           self.cardlist.clean_list)
        self._createToolbarBuilder.connect('create_new_game',
                                           self.createcardpanel.clean)
        self._createToolbarBuilder.connect(
            'create_new_game',
            self._memorizeToolbarBuilder.reset)
        self._createToolbarBuilder.connect('create_equal_pairs',
                                           self.change_equal_pairs)

        self._edit_button.connect('toggled', self._change_mode_bt)

        self.connect('key-press-event', self.table.key_press_event)
        self.table.connect('card-flipped', self.game.card_flipped)
        self.table.connect('card-highlighted', self.game.card_highlighted)

        self.game.connect('set-border', self.table.set_border)
        self.game.connect('flop-card', self.table.flop_card)
        self.game.connect('flip-card', self.table.flip_card)
        self.game.connect('cement-card', self.table.cement_card)
        self.game.connect('highlight-card', self.table.highlight_card)
        self.game.connect('load_mode', self.table.load_msg)

        self.game.connect('msg_buddy', self.scoreboard.set_buddy_message)
        self.game.connect('add_buddy', self.scoreboard.add_buddy)
        self.game.connect('rem_buddy', self.scoreboard.rem_buddy)
        self.game.connect('increase-score', self.scoreboard.increase_score)
        self.game.connect('wait_mode_buddy', self.scoreboard.set_wait_mode)
        self.game.connect('change-turn', self.scoreboard.set_selected)
        self.game.connect('change_game', self.scoreboard.change_game)

        self.game.connect('reset_scoreboard', self.scoreboard.reset)
        self.game.connect('reset_table', self.table.reset)

        self.game.connect('load_game', self.table.load_game)
        self.game.connect('change_game', self.table.change_game)
        self.game.connect('load_game',
                          self._memorizeToolbarBuilder.update_toolbar)
        self.game.connect('change_game',
                          self._memorizeToolbarBuilder.update_toolbar)
        self.game.connect('change_game',
                          self.createcardpanel.update_font_combos)

        self._memorizeToolbarBuilder.connect('game_changed',
                                             self.change_game)

        self.box = Gtk.HBox(orientation=Gtk.Orientation.VERTICAL,
                            homogeneous=False)

        width = Gdk.Screen.width()
        height = Gdk.Screen.height() - style.GRID_CELL_SIZE
        self.table.resize(width, height - style.GRID_CELL_SIZE)
        self.scoreboard.set_size_request(-1, style.GRID_CELL_SIZE)
        self.box.pack_start(self.table, True, True, 0)
        self.box.pack_start(self.scoreboard, False, False, 0)
        self.set_canvas(self.box)

        # connect to the in/out events of the memorize activity
        self.connect('focus_in_event', self._focus_in)
        self.connect('focus_out_event', self._focus_out)
        self.connect('destroy', self._cleanup_cb)

        self.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
        self.connect('motion_notify_event',
                     lambda widget, event: face.look_at())

        Gdk.Screen.get_default().connect('size-changed',
                                         self.__configure_cb)

        # start on the game toolbar, might change this
        # to the create toolbar later
        self._change_mode(_MODE_PLAY)

        # Get the Presence Service
        self.pservice = presenceservice.get_instance()
        self.initiating = None

        # Buddy object for you
        owner = self.pservice.get_owner()
        self.owner = owner
        self.current = 0

        self.game.set_myself(self.owner)
        self.connect('shared', self._shared_cb)

        # Owner.props.key
        if self.get_shared_activity():
            # We are joining the activity
            self.connect('joined', self._joined_cb)
            if self.get_shared():
                # We've already joined
                self._joined_cb(self)
        elif not self._jobject.file_path:
            logging.debug('buddy joined - __init__: %s', self.owner.props.nick)
            game_file = os.path.join(os.path.dirname(__file__), 'demos',
                                     'addition.zip')
            self.game.load_game(game_file, 4, 'demo')
            logging.debug('loading conventional')
            self.game.add_buddy(self.owner)
        else:
            self.game.add_buddy(self.owner)
        self.show_all()
Ejemplo n.º 9
0
def main():
    global PLAYER_NAMES
    global CURRENT_GAME_BYTES
    global PLAYERS_CORRECT_IDX
    global PLAYER_END_TIMES
    global PLAYER_COUNT_DONE
    global EVENT_GAME_ACTIVE
    global EVENT_GAME_READY
    global CURRENT_GAME_NUM
    global FORTEGO_PLAYER_IDS

    print('... main()')

    mqtt_host = args.host
    mqtt_port = args.port
    db_filepath = 'game_%d_%d_%s' % (NUM_BYTES, GAME_DURATION_SECS,
                                     args.database)

    MQTT_CLIENT.on_connect = on_connect
    MQTT_CLIENT.on_disconnect = on_disconnect
    MQTT_CLIENT.on_subscribe = on_subscribe
    MQTT_CLIENT.on_message = on_message
    #MQTT_CLIENT.on_log = on_log

    # set callback handlers for each topic here
    #   can't set these in callback functions
    #   bug that causes deadlock
    #   https://bugs.eclipse.org/bugs/show_bug.cgi?id=459012
    print('... setting callback handlers')
    # set callback handlers for individual topics
    for item in INITIAL_SUBSCRIBE_TOPICS:
        if item.callback_func:
            MQTT_CLIENT.message_callback_add(item.topic, item.callback_func)

    # connect to the mqtt broker
    print('... connecting to %s:%d' % (mqtt_host, mqtt_port))
    MQTT_CLIENT.will_set('battlebits/game/state',
                         payload='offline',
                         qos=2,
                         retain=True)
    MQTT_CLIENT.connect(mqtt_host, mqtt_port)
    MQTT_CLIENT.loop_start()

    # wait until we are connected
    EVENT_CONNECTED.wait()

    print('... watch battlebits/debug/controller for debugging messages')
    publish_debug_message('[+] connected to %s:%d' % (mqtt_host, mqtt_port))

    sb = scoreboard.Scoreboard(db_filepath)
    try:
        rows = sb.get_top_rows(3)
        for row in rows:
            publish_controller_message(
                'SCOREBOARD top 3: game:%s player:%s seconds:%s bytes:%s' %
                (row[0], row[1], row[2], row[3]))

        rows = sb.get_top_rows(25)
        sb_json = json.dumps([{
            'game_num': row[0],
            'player_name': row[1],
            'seconds': row[2],
            'num_bytes': row[3]
        } for row in rows])
        MQTT_CLIENT.publish('battlebits/scoreboard',
                            payload=sb_json,
                            qos=2,
                            retain=False)

        CURRENT_GAME_NUM = sb.get_last_game_num() + 1

    finally:
        sb.close()

    MQTT_CLIENT.publish('battlebits/game/reset',
                        payload='1',
                        qos=2,
                        retain=False)

    #
    # game loop
    #
    while True:

        #
        # wait for players to join
        #

        # tell everyone the game is ready
        MQTT_CLIENT.publish('battlebits/game/state',
                            payload='ready',
                            qos=2,
                            retain=True)
        EVENT_GAME_READY.set()

        # wait for first player
        publish_controller_message('waiting for first player to join')
        EVENT_PLAYER_JOINED.wait()

        # first player joined
        EVENT_PLAYER_JOINED.clear()
        publish_controller_message(
            'first player has joined, waiting %d seconds for more players to join'
            % SECS_WAIT_PLAYERS_JOIN)

        # wait for others to join
        time.sleep(SECS_WAIT_PLAYERS_JOIN)

        # tell everyone we are no longer accepting players
        EVENT_PLAYER_JOINED.clear()
        EVENT_GAME_READY.clear()

        publish_controller_message('%d players entered for game # %d' %
                                   (len(PLAYER_NAMES), CURRENT_GAME_NUM))

        for player_name in PLAYER_NAMES:
            PLAYERS_CORRECT_IDX[player_name] = 0
            PLAYER_END_TIMES[player_name] = 0
            #EVENTS_PLAYERS_WON[player_name] = threading.Event()

        #
        # now that we have players, choose and publish game parameters
        #

        # choose the list of bytes for this game
        publish_controller_message('generating randomized game bytes')
        CURRENT_GAME_BYTES = get_random_game_bytes_by_difficulty(
            NUM_BYTES, MAX_DIFFICULTY)

        # publish list of bytes
        j = json.dumps(CURRENT_GAME_BYTES, separators=(',', ':'))
        print(j)
        MQTT_CLIENT.publish('battlebits/game/bytes', j, qos=2, retain=False)

        printable_bytes = get_printable_bytes(CURRENT_GAME_BYTES)
        publish_debug_message('set of bytes: %s' % printable_bytes)

        # publish the duration of the game
        MQTT_CLIENT.publish('battlebits/game/duration',
                            str(GAME_DURATION_SECS),
                            qos=2,
                            retain=False)
        MQTT_CLIENT.publish('battlebits/game/number',
                            str(CURRENT_GAME_NUM),
                            qos=2,
                            retain=False)

        #
        # start game
        #

        # publish start time
        # if we need to sync start times, we could send a start time
        # but that would require the clocks on each device to be synchronized
        # for now we will just publish a game start signal
        # since player_decks and display will get signal at about the same delay

        publish_debug_message(
            '... starting game # %d at %s; duration: %d secs; players: %s' %
            (CURRENT_GAME_NUM, str(datetime.datetime.now()),
             GAME_DURATION_SECS, ','.join(PLAYER_NAMES)))

        MQTT_CLIENT.publish('battlebits/game/state',
                            payload='started',
                            qos=2,
                            retain=True)

        # publish message starting game at <time>
        publish_controller_message('CURRENT_BYTE: %02X' %
                                   CURRENT_GAME_BYTES[0])

        game_start_time = datetime.datetime.now()
        for player_name in PLAYER_NAMES:
            PLAYER_END_TIMES[player_name] = game_start_time

        # wait for all players to be done, or the game duration expires
        EVENT_GAME_ACTIVE.set()
        EVENT_ALL_PLAYERS_DONE.wait(GAME_DURATION_SECS)
        EVENT_GAME_ACTIVE.clear()
        EVENT_ALL_PLAYERS_DONE.clear()

        # game is over
        print('... publishing battlebits/game/state = finished')
        MQTT_CLIENT.publish('battlebits/game/state',
                            payload='finished',
                            qos=2,
                            retain=True)

        game_end_time = datetime.datetime.now()
        game_time_elapsed = game_end_time - game_start_time

        publish_controller_message('finished game at %s' %
                                   (str(game_end_time)))
        publish_controller_message('game lasted for %s' %
                                   str(game_time_elapsed))

        sb = scoreboard.Scoreboard(db_filepath)
        try:
            for player_name in PLAYER_NAMES:
                num_correct = PLAYERS_CORRECT_IDX[player_name]
                player_game_time = min(game_time_elapsed.total_seconds(),
                                       GAME_DURATION_SECS)

                if PLAYER_END_TIMES[player_name] > game_start_time:
                    player_game_time = (PLAYER_END_TIMES[player_name] -
                                        game_start_time).total_seconds()

                if num_correct > 0:
                    secs_per_byte = player_game_time / num_correct
                    bytes_per_min = num_correct * (60 / player_game_time)
                else:
                    secs_per_byte = 0
                    bytes_per_min = 0

                publish_controller_message(
                    'player \'%s\' completed %d bytes in %s seconds, '
                    '%d secs per byte, '
                    '%d bytes per minute ' %
                    (player_name, num_correct, player_game_time, secs_per_byte,
                     bytes_per_min))

                print(FORTEGO_PLAYER_IDS)
                #if player_name is in FORTEGO_PLAYER_IDS, it was a fortego player
                if player_name in FORTEGO_PLAYER_IDS and FORTEGO_PLAYER_IDS[
                        player_name]:
                    # insert into fortego DB
                    fortego_player_name = scoreboard.FortegoNamesMap.get(
                        FORTEGO_PLAYER_IDS[player_name], 'guest')
                    # get existing row for player
                    row = sb.get_fortego_row(fortego_player_name)
                    print('fortego_row for player %s' % str(row))
                    if row:
                        if num_correct > row[4] or player_game_time < float(
                                row[3]):
                            publish_debug_message(
                                'updating row: game:%d, player:%s, seconds:%s, bytes:%s'
                                % (CURRENT_GAME_NUM, fortego_player_name,
                                   player_game_time, num_correct))
                            sb.update_row_fortego(CURRENT_GAME_NUM,
                                                  player_name,
                                                  fortego_player_name,
                                                  player_game_time,
                                                  num_correct)
                        else:
                            publish_debug_message(
                                'not updating because not a high score old:%s/%s; new %s/%s'
                                % (row[4], row[3], num_correct,
                                   player_game_time))
                    else:
                        publish_debug_message(
                            'inserting row: game:%d, deck:%s, player:%s, seconds:%s, bytes:%s'
                            % (CURRENT_GAME_NUM, player_name,
                               fortego_player_name, player_game_time,
                               num_correct))
                        sb.insert_row_fortego(CURRENT_GAME_NUM, player_name,
                                              fortego_player_name,
                                              player_game_time, num_correct)
                else:
                    publish_debug_message(
                        'inserting row: game:%d, deck:%s, player:%s, seconds:%s, bytes:%s'
                        % (CURRENT_GAME_NUM, player_name, player_name,
                           player_game_time, num_correct))
                    sb.insert_row_anonymous(CURRENT_GAME_NUM, player_name,
                                            player_name, player_game_time,
                                            num_correct)

            #rows = sb.get_top_rows(3)
            #for row in rows:
            #    publish_controller_message('SCOREBOARD top 3: game:%s player:%s seconds:%s bytes:%s' % (row[0], row[1], row[2], row[3]))
            #    print('SCOREBOARD top 3: game:%s player:%s seconds:%s bytes:%s' % (row[0], row[1], row[2], row[3]))

            rows = sb.get_top_rows(25)
            for a in sb.get_game_rows(CURRENT_GAME_NUM):
                if a not in rows:
                    rows.append(a)
                    print('added')
            print('rows %s' % str(rows))
            sb_json = json.dumps([{
                'game_num': row[0],
                'deck': row[1],
                'player_name': row[2],
                'seconds': row[3],
                'num_bytes': row[4]
            } for row in rows])
            MQTT_CLIENT.publish('battlebits/scoreboard',
                                payload=sb_json,
                                qos=2,
                                retain=False)

            # send out the battlebits/fortegoscoreboard
            fortego_rows = sb.get_all_rows_fortego()
            print('fortego_rows %s' % str(fortego_rows))
            fortego_json = json.dumps([{
                'game_num': row[0],
                'deck': row[1],
                'player_name': row[2],
                'seconds': row[3],
                'num_bytes': row[4]
            } for row in fortego_rows])
            MQTT_CLIENT.publish('battlebits/fortegoscoreboard',
                                payload=fortego_json,
                                qos=2,
                                retain=False)

            # get the last game played rows
            last_game = []
            last_game.extend(sb.get_game_rows(CURRENT_GAME_NUM))
            last_game.extend(sb.get_game_rows_fortego(CURRENT_GAME_NUM))
            print('last_game %s' % str(last_game))
            last_game_json = json.dumps([{
                'game_num': row[0],
                'deck': row[1],
                'player_name': row[2],
                'seconds': row[3],
                'num_bytes': row[4]
            } for row in last_game])
            MQTT_CLIENT.publish('battlebits/lastgame',
                                payload=last_game_json,
                                qos=2,
                                retain=False)

            CURRENT_GAME_NUM = sb.get_last_game_num() + 1

            MQTT_CLIENT.publish('battlebits/game/reset',
                                payload='1',
                                qos=2,
                                retain=False)

        except Exception, e:
            print(traceback.format_exc())
            raise e
        finally:
Ejemplo n.º 10
0
    def run(self):
        '''
        Main loop for running the game/training the agent.
        '''
        self.window.fill(BLACK)
        self.clock = pygame.time.Clock()

        self.player_1 = player.Player(100, 100, 5, 150, self.window, WHITE, 5)
        self.player_2 = player.Player(900, 100, 5, 150, self.window, WHITE, 5)

        self.pong_ball = ball.Ball(500, 100, 10, 10, self.window, WHITE, -1, 1)

        self.score_board = scoreboard.Scoreboard(
            500, 10,
            str(self.player_1.score) + " - " + str(self.player_2.score), 30,
            self.window)

        self.agent_1 = q_agent.QAgent(self)
        self.agent_2 = q_agent.QAgent(self)

        self.p1_wins = 0
        self.p2_wins = 0
        for i in range(self.agent_1.EPISODES):

            if i % self.agent_1.SHOW_EVERY == 0:
                self.render = True

            else:
                self.render = False

            self.running = True
            while self.running:
                current_state = self.observe()
                current_discrete_state = self.agent_1.get_discrete_state(
                    current_state)

                agent_1_action = self.agent_1.select_action(
                    current_discrete_state)
                agent_2_action = self.agent_2.select_action(
                    current_discrete_state)

                self.player_1.perform_action(agent_1_action,
                                             self.pong_ball.rect.y, self,
                                             'agent_1')
                self.player_2.perform_action(agent_2_action,
                                             self.pong_ball.rect.y, self,
                                             'agent_2')

                self.event_handler()

                self.pong_ball.move_ball()

                self.check_collision()

                new_state = app.observe()
                new_discrete_state = self.agent_1.get_discrete_state(new_state)

                if self.running:
                    self.agent_1.adjust_table(new_discrete_state,
                                              current_discrete_state,
                                              agent_1_action,
                                              self.agent_1_reward)
                    self.agent_2.adjust_table(new_discrete_state,
                                              current_discrete_state,
                                              agent_2_action,
                                              self.agent_2_reward)

                if self.render:
                    self.window.fill(BLACK)
                    self.player_1.draw_self()
                    self.player_2.draw_self()
                    self.pong_ball.draw_self()
                    self.score_board.display_scoreboard()

                    pygame.display.update()

            print("P1: ", self.p1_wins, " - P2: ", self.p2_wins)
            print(i)
Ejemplo n.º 11
0
divider.up()
divider.goto(0, int(GAME_SCREEN_HEIGHT / 2))
divider.down()
divider.ht()
divider.color("grey")
divider.width(3)
divider.setheading(270)
for i in range(1, GAME_SCREEN_HEIGHT, 10):
    if divider.isdown():
        divider.up()
    else:
        divider.down()

    divider.forward(10)

left_score = scoreboard.Scoreboard((-40, int(GAME_SCREEN_HEIGHT / 2) - 60))
right_score = scoreboard.Scoreboard((40, int(GAME_SCREEN_HEIGHT / 2) - 60))

left_player = players.Player((-int(GAME_SCREEN_WIDTH / 2) + 50, 0))
right_player = players.Player((int(GAME_SCREEN_WIDTH / 2) - 50, 0))

max_score = int(
    game_screen.textinput("SCORE TO WIN",
                          "Put maximum score to win the game: "))

game_screen.onkey(left_player.move_up, "w")
game_screen.onkey(left_player.move_down, "s")
game_screen.onkey(right_player.move_up, "Up")
game_screen.onkey(right_player.move_down, "Down")
game_screen.listen()
Ejemplo n.º 12
0
 def __init__(self, app):
     self.app = app
     self.board = board.Board(app)
     self.wheel = wheel.Wheel(app)
     self.scoreboard = scoreboard.Scoreboard(app)
     self.backgroundImage = pygame.image.load("resources/background.jpg")
Ejemplo n.º 13
0
screen.onkey(key="w", fun=serpent.turn_up)
screen.onkey(key="d", fun=serpent.turn_right)
screen.onkey(key="a", fun=serpent.turn_left)
screen.onkey(key="s", fun=serpent.turn_down)

screen.onkey(key="Up", fun=viper.turn_up)
screen.onkey(key="Right", fun=viper.turn_right)
screen.onkey(key="Left", fun=viper.turn_left)
screen.onkey(key="Down", fun=viper.turn_down)

screen.listen()

game_continues = True
dinner = food.Food()
viper_score = scoreboard.Scoreboard(alignment="right")
serpent_score = scoreboard.Scoreboard(alignment="left")

while game_continues:
    if not dinner.isvisible():
        while viper.head.distance(dinner) < 15 or serpent.head.distance(
                dinner) < 15:
            dinner.change_location()
        dinner.showturtle()
    if viper.alive:
        viper.move_forward()
    if serpent.alive:
        serpent.move_forward()
    if viper.head.distance(dinner) < 15:
        dinner.hideturtle()
        viper.grow_segment()
Ejemplo n.º 14
0
import turtle as t
from snake import Snake
from food import Food
import scoreboard
import time

screen = t.Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.title("My Snake Game")
screen.tracer(0)

snake = Snake()
snake_food = Food()
scores = scoreboard.Scoreboard()

screen.listen()
screen.onkey(snake.up, "Up")
screen.onkey(snake.down, "Down")
screen.onkey(snake.left, "Left")
screen.onkey(snake.right, "Right")
game_is_on = True
while game_is_on:
    screen.update()
    time.sleep(0.1)

    snake.move()
    if snake.all_turtles[0].distance(snake_food) < 15:
        scores.increase_score()
        snake_food.refresh_location()
        snake.extend()
Ejemplo n.º 15
0
import time
import snake
import food
import scoreboard

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.title("Sssssssssssssnake")
screen.tracer(0)
screen.listen()


snake = snake.Snake()
food = food.Food()
score = scoreboard.Scoreboard()

screen.onkey(key="Up", fun=snake.up)
screen.onkey(key="Down", fun=snake.down)
screen.onkey(key="Right", fun=snake.right)
screen.onkey(key="Left", fun=snake.left)

game_is_on = True

while game_is_on:
    screen.update()
    time.sleep(0.1)
    snake.move()

    if snake.head.distance(food) >= 15:
        pass
Ejemplo n.º 16
0
INITIAL_POSITION_LEFT = [-350, 0]

# Create a screen objet from turtle module
screen = turtle.Screen()

# Setting up screen elements
screen.bgcolor("black")
screen.setup(width=800, height=600)
screen.title("Pong Game")
screen.tracer(0)

# Creating a ball object
ball = ball.Ball()

# Creating a scoreboar
scoreboard = scoreboard.Scoreboard()

right_paddle = paddle.Paddle(INITIAL_POSITION_RIGHT[0], INITIAL_POSITION_RIGHT[1])
left_paddle = paddle.Paddle(INITIAL_POSITION_LEFT[0], INITIAL_POSITION_LEFT[1])

# Setting up a screen listener
screen.listen()
screen.onkey(right_paddle.move_up, "Up")
screen.onkey(right_paddle.move_down, "Down")
screen.onkey(left_paddle.move_up, "w")
screen.onkey(left_paddle.move_down, "s")

game_is_on = True

while game_is_on:
    screen.update()
Ejemplo n.º 17
0
    def __init__(self, handle):
        Activity.__init__(self, handle)

        self.play_mode = None

        toolbar_box = ToolbarBox()
        self.set_toolbar_box(toolbar_box)

        self.activity_button = ActivityToolbarButton(self)
        toolbar_box.toolbar.insert(self.activity_button, -1)

        self._memorizeToolbarBuilder = \
            memorizetoolbar.MemorizeToolbarBuilder(self)

        toolbar_box.toolbar.insert(Gtk.SeparatorToolItem(), -1)

        self._edit_button = ToggleToolButton('view-source')
        self._edit_button.set_tooltip(_('Edit game'))
        self._edit_button.set_active(False)
        toolbar_box.toolbar.insert(self._edit_button, -1)

        self._createToolbarBuilder = \
            createtoolbar.CreateToolbarBuilder(self)

        separator = Gtk.SeparatorToolItem()
        separator.set_expand(True)
        separator.set_draw(False)
        separator.set_size_request(0, -1)
        toolbar_box.toolbar.insert(separator, -1)

        toolbar_box.toolbar.insert(StopButton(self), -1)

        self.game = game.MemorizeGame()
        # Play game mode
        self.table = cardtable.CardTable()
        self.scoreboard = scoreboard.Scoreboard()
        self.cardlist = cardlist.CardList()
        self.createcardpanel = createcardpanel.CreateCardPanel(self.game)
        self.cardlist.connect('pair-selected',
                              self.createcardpanel.pair_selected)
        self.cardlist.connect('update-create-toolbar',
                              self._createToolbarBuilder.update_create_toolbar)
        self.createcardpanel.connect('add-pair', self.cardlist.add_pair)
        self.createcardpanel.connect('update-pair',
                                     self.cardlist.update_selected)
        self.createcardpanel.connect('change-font', self.cardlist.change_font)
        self.createcardpanel.connect('pair-closed',
                                     self.cardlist.rem_current_pair)

        self._createToolbarBuilder.connect('create_new_game',
                                           self.cardlist.clean_list)
        self._createToolbarBuilder.connect('create_new_game',
                                           self.createcardpanel.clean)
        self._createToolbarBuilder.connect('create_new_game',
                                           self._memorizeToolbarBuilder.reset)
        self._createToolbarBuilder.connect('create_equal_pairs',
                                           self.change_equal_pairs)

        self._edit_button.connect('toggled', self._change_mode_bt)

        self.connect('key-press-event', self.table.key_press_event)
        self.table.connect('card-flipped', self.game.card_flipped)
        self.table.connect('card-highlighted', self.game.card_highlighted)

        self.game.connect('set-border', self.table.set_border)
        self.game.connect('flop-card', self.table.flop_card)
        self.game.connect('flip-card', self.table.flip_card)
        self.game.connect('cement-card', self.table.cement_card)
        self.game.connect('highlight-card', self.table.highlight_card)
        self.game.connect('load_mode', self.table.load_msg)

        self.game.connect('msg_buddy', self.scoreboard.set_buddy_message)
        self.game.connect('add_buddy', self.scoreboard.add_buddy)
        self.game.connect('rem_buddy', self.scoreboard.rem_buddy)
        self.game.connect('increase-score', self.scoreboard.increase_score)
        self.game.connect('wait_mode_buddy', self.scoreboard.set_wait_mode)
        self.game.connect('change-turn', self.scoreboard.set_selected)
        self.game.connect('change_game', self.scoreboard.change_game)

        self.game.connect('reset_scoreboard', self.scoreboard.reset)
        self.game.connect('reset_table', self.table.reset)

        self.game.connect('load_game', self.table.load_game)
        self.game.connect('change_game', self.table.change_game)
        self.game.connect('load_game',
                          self._memorizeToolbarBuilder.update_toolbar)
        self.game.connect('change_game',
                          self._memorizeToolbarBuilder.update_toolbar)
        self.game.connect('change_game',
                          self.createcardpanel.update_font_combos)

        self._memorizeToolbarBuilder.connect('game_changed', self.change_game)

        self.box = Gtk.HBox(orientation=Gtk.Orientation.VERTICAL,
                            homogeneous=False)

        width = Gdk.Screen.width()
        height = Gdk.Screen.height() - style.GRID_CELL_SIZE
        self.table.resize(width, height - style.GRID_CELL_SIZE)
        self.scoreboard.set_size_request(-1, style.GRID_CELL_SIZE)
        self.set_canvas(self.box)

        # connect to the in/out events of the memorize activity
        self.connect('focus_in_event', self._focus_in)
        self.connect('focus_out_event', self._focus_out)
        self.connect('destroy', self._cleanup_cb)

        self.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
        self.connect('motion_notify_event',
                     lambda widget, event: face.look_at())

        Gdk.Screen.get_default().connect('size-changed', self.__configure_cb)

        # start on the game toolbar, might change this
        # to the create toolbar later
        self._change_mode(_MODE_PLAY)

        def on_activity_joined_cb(me):
            logging.debug('activity joined')
            self.game.add_buddy(self._collab.props.owner)

        self.connect('joined', on_activity_joined_cb)

        def on_activity_shared_cb(me):
            logging.debug('activity shared')

        self.connect('shared', on_activity_shared_cb)

        self._collab = CollabWrapper(self)
        self.game.set_myself(self._collab.props.owner)

        def on_message_cb(collab, buddy, msg):
            logging.debug('on_message_cb buddy %r msg %r' % (buddy, msg))
            action = msg.get('action')
            if action == 'flip':
                n = msg.get('n')
                self.game.card_flipped(None, n, True)
            elif action == 'change':
                self.get_canvas().hide()

                def momentary_blank_timeout_cb():
                    self.set_data(msg)
                    self.get_canvas().show()

                GLib.timeout_add(100, momentary_blank_timeout_cb)

        self._collab.connect('message', on_message_cb)

        def on_joined_cb(collab, msg):
            logging.debug('joined')

        self._collab.connect('joined', on_joined_cb, 'joined')

        def on_buddy_joined_cb(collab, buddy, msg):
            logging.debug('on_buddy_joined_cb buddy %r msg %r' % (buddy, msg))
            self.game.add_buddy(buddy)

        self._collab.connect('buddy_joined', on_buddy_joined_cb,
                             'buddy_joined')

        def on_buddy_left_cb(collab, buddy, msg):
            logging.debug('on_buddy_left_cb buddy %r msg %r' % (buddy, msg))
            self.game.rem_buddy(buddy)

        self._collab.connect('buddy_left', on_buddy_left_cb, 'buddy_left')

        self._files = {}  # local temporary copies of shared games

        self._collab.setup()

        def on_flip_card_cb(game, n):
            logging.debug('on_flip_card_cb n %r' % (n))
            self._collab.post({'action': 'flip', 'n': n})

        self.game.connect('flip-card-signal', on_flip_card_cb)

        def on_change_game_cb(sender, mode, grid, data, waiting_list, zip):
            logging.debug('on_change_game_cb')
            blob = self.get_data()
            blob['action'] = 'change'

            self._collab.post(blob)

        self.game.connect('change_game_signal', on_change_game_cb)

        if self._collab.props.leader:
            logging.debug('is leader')
            game_file = os.path.join(os.path.dirname(__file__), 'demos',
                                     'addition.zip')
            self.game.load_game(game_file, 4, 'demo')
            self.game.add_buddy(self._collab.props.owner)

        self.show_all()