コード例 #1
0
ファイル: main.py プロジェクト: BenBanerjeeRichards/Draughts
def init():
    screen = pygame.display.set_mode((1600, 900), pygame.DOUBLEBUF)
    board = GameBoard.GameBoard(screen, (8, 8))
    game_objects.menu = Menu.Menu(["Player vs Player", "Player vs Computer", "Quit"], screen)

    game_objects.board = board

    game_objects.overlay = Overlay.Overlay(screen, game_objects.board, False)
    game_objects.state = BoardState.BoardState(board, game_objects.overlay)

    for i in range(3):
        for j in range(8):

            if (i % 2) == 0:
                if not (j % 2) == 1:
                    add_checker(Teams.black(), (j, i + 5))
                    continue

            if not (i % 2) == 0:
                if (j % 2) == 1:
                    add_checker(Teams.black(), (j, i + 5))
                    continue

            add_checker(Teams.red(), (j, i))
    game_objects.game = Game.Game(game_objects.state, game_objects.board)
    game_objects.game.new_game(GameMode.player_v_player())
    run()
コード例 #2
0
    def _draw_team_sidebar(self, team):
        text_title = None
        text_title_rendered = None
        stats = None

        if team == Teams.red():
            text_title = "Red Team"
            stats = self._red_stats
            start_x = self._board.get_padding()[0] + self._board.get_dimentions()[0]
        else:
            text_title = "Black Team"
            stats = self._black_stats
            start_x = 0

        text = ["Men     {}".format(stats[0]), "Kings   {}".format(stats[1]), "Score   {}".format(stats[2])]

        # Render ALL the things
        black = (0x00, 0x00, 0x00)
        grey = (0x44, 0x44, 0x44)

        title_rendered = self._sidebar_font_large.render(text_title, 1, black)
        text_rendered = []

        for item in text:
            text_rendered.append(self._sidebar_font.render(item, 1, grey))

            # Calculate the coordinates for everything
        text_padding = 10
        title_text_size = self._sidebar_font_large.size(text_title)
        total_height = sum(map(get_second, map(self._sidebar_font.size, text)))
        total_height += title_text_size[1]
        total_height += text_padding * (len(text) + 1)

        total_width = title_text_size[0]

        top_x = start_x + int(0.1 * self._board.get_padding()[0])
        top_y = (self._board.get_dimentions()[1] - total_height) / 2
        self._screen.blit(title_rendered, (top_x, top_y))

        curr_y = top_y + title_text_size[1] + text_padding
        height = self._sidebar_font.size("aa")[1]

        for item in text_rendered:
            self._screen.blit(item, (top_x, curr_y))

            curr_y += text_padding + height
コード例 #3
0
ファイル: main.py プロジェクト: BenBanerjeeRichards/Draughts
def add_checker(team, location):
    if location == (4, 0) or location == (7, 0):
        return
    red_checker = Resource.Resource("res/checker_red.png")
    black_checker = Resource.Resource("res/checker_black.png")
    res = None

    if team == Teams.red():
        res = red_checker
    else:
        res = black_checker

    checker = Checker.Checker(pygame.display.get_surface(), game_objects.board, res)
    checker.location = location
    checker.team = team
    checker.type = CheckerType.men()
    game_objects.state.add_checker(checker)
コード例 #4
0
	def king_checker(self, location):
		index = self._get_checker_index_from_location(location)
		checker = self.get_checker_from_location(location)
		if not checker:
			raise ValueError('No checker exists at given location')

		if checker.type == CheckerType.king():
			return

		if checker.team == Teams.red():
			self.red_kings += 1
		else:
			self.black_kings += 1

		checker.type = CheckerType.king()
		current_res = checker.res.res
		new_res = Resource.Resource(current_res.replace(".png", "_king.png"))
		checker.res = new_res
		checker._load_resource()
		self.checkers[index] = checker
コード例 #5
0
	def _run_event(self, event):
		if not event.delete_pos:
			checker = self.get_checker_from_location(event.start)
			checker.animation_done_callback = self.event_completed

			if not event.start or not event.end:
				raise InvalidGameEventError("Event must be a delete event or move event")

			checker = self.get_checker_from_location(event.start)
			checker.animate_move(event.end)
			self.event_running = True

		else:
			index = self._get_checker_index_from_location(event.delete_pos)

			if self.checkers[index].team == Teams.red():
				self.red_checkers -= 1
			else:
				self.black_checkers -= 1

			del self.checkers[index]
			self.event_completed()

		self.update_stats()
コード例 #6
0
 def render(self):
     self._draw_current_team()
     self._draw_team_sidebar(Teams.red())
     self._draw_team_sidebar(Teams.black())
コード例 #7
0
	def update_stats(self):
		self.overlay.set_stats(Teams.red(), [self.red_checkers, self.red_kings, self.max_checkers_per_side - self.black_checkers])
		self.overlay.set_stats(Teams.black(), [self.black_checkers, self.black_kings, self.max_checkers_per_side - self.red_checkers])
コード例 #8
0
	def team(self, team):
		if team != Teams.red() and team != Teams.black():
			raise ValueError('Team must be provided')

		self.team = team