forked from easonabc-public/paia-hw5
reinit
This commit is contained in:
137
TankMan/contest.py
Normal file
137
TankMan/contest.py
Normal file
@ -0,0 +1,137 @@
|
||||
import pygame
|
||||
from mlgame.game.generic import quit_or_esc
|
||||
from src.Game import Game
|
||||
from tqdm import tqdm
|
||||
import argparse
|
||||
import importlib
|
||||
|
||||
|
||||
|
||||
class Contest():
|
||||
"""
|
||||
This class manages a 3 vs 3 game contest.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
player : list
|
||||
The list of players.
|
||||
total_game : int
|
||||
The total number of games.
|
||||
frame : int
|
||||
The frame of the game.
|
||||
sound : str
|
||||
The sound of the game.
|
||||
is_manual : bool
|
||||
The manual mode of the game.
|
||||
|
||||
Returns
|
||||
-------
|
||||
dict
|
||||
The result of the game.
|
||||
"""
|
||||
def __init__(self, player: list, total_game: int, frame: int,
|
||||
sound: str, is_manual: bool):
|
||||
# initialize player
|
||||
self.player1 = player[0]
|
||||
self.player2 = player[1]
|
||||
self.player3 = player[2]
|
||||
self.player4 = player[3]
|
||||
self.player5 = player[4]
|
||||
self.player6 = player[5]
|
||||
|
||||
# initialize game
|
||||
self.total_game = total_game
|
||||
self.frame = frame
|
||||
self.sound = sound
|
||||
self.is_manual = is_manual
|
||||
|
||||
self.user_num = 6
|
||||
self.green_team_num = 3
|
||||
self.blue_team_num = 3
|
||||
|
||||
# initialize game times
|
||||
self.game_times = 0
|
||||
self.green_team_win = 0
|
||||
self.blue_team_win = 0
|
||||
|
||||
def run(self):
|
||||
with tqdm(total=self.total_game, unit="round") as pbar:
|
||||
pbar.set_description("Playing")
|
||||
print()
|
||||
for _ in range(self.total_game):
|
||||
# initialize game every round
|
||||
game = Game(self.user_num, self.green_team_num,
|
||||
self.blue_team_num, self.is_manual, self.frame, self.sound)
|
||||
scene_init_info_dict = game.get_scene_init_data()
|
||||
frame_count = 0
|
||||
|
||||
# update game
|
||||
while game.is_running() and not quit_or_esc():
|
||||
game.update({
|
||||
"1P": self.player1.update(game.get_data_from_game_to_player()['1P'], []),
|
||||
"2P": self.player2.update(game.get_data_from_game_to_player()['2P'], []),
|
||||
"3P": self.player3.update(game.get_data_from_game_to_player()['3P'], []),
|
||||
"4P": self.player4.update(game.get_data_from_game_to_player()['4P'], []),
|
||||
"5P": self.player5.update(game.get_data_from_game_to_player()['5P'], []),
|
||||
"6P": self.player6.update(game.get_data_from_game_to_player()['6P'], [])
|
||||
})
|
||||
frame_count += 1
|
||||
|
||||
# reset player
|
||||
self.player1.reset()
|
||||
self.player2.reset()
|
||||
self.player3.reset()
|
||||
self.player4.reset()
|
||||
self.player5.reset()
|
||||
self.player6.reset()
|
||||
self.game_times += 1
|
||||
|
||||
# get game result
|
||||
game_result = game.get_game_result()
|
||||
if game_result['attachment'][0]["status"] == "GREEN_TEAM_WIN":
|
||||
self.green_team_win += 1
|
||||
else:
|
||||
self.blue_team_win += 1
|
||||
|
||||
# update progress bar
|
||||
pbar.postfix = f"green_team win: {self.green_team_win} | blue_team win: {self.blue_team_win}"
|
||||
pbar.update(1)
|
||||
# print()
|
||||
if self.green_team_win > self.total_game/2 or self.blue_team_win > self.total_game/2:
|
||||
break
|
||||
|
||||
|
||||
print(f"Game times: {self.game_times} | green_team win: {self.green_team_win} | blue_team win: {self.blue_team_win}")
|
||||
pygame.quit()
|
||||
return {"green_team_win":self.green_team_win, "blue_team_win":self.blue_team_win}
|
||||
|
||||
def import_player(group_number, player_number):
|
||||
module_name = f"ml.Group_{group_number}.ml_play_{player_number}"
|
||||
module = importlib.import_module(module_name)
|
||||
return getattr(module, f"MLPlay")
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Set configuration
|
||||
sound = "off"
|
||||
total_game = 9
|
||||
frame = 2500
|
||||
is_manual = False
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--green_team", type=str, required=True, help="The folder of the green team")
|
||||
parser.add_argument("--blue_team", type=str, required=True, help="The folder of the blue team")
|
||||
args = parser.parse_args()
|
||||
print(args)
|
||||
player1 = import_player(1, 1)
|
||||
|
||||
|
||||
players = [ import_player(args.green_team, 1)('1P', {'sound': sound}),
|
||||
import_player(args.green_team, 2)('2P', {'sound': sound}),
|
||||
import_player(args.green_team, 3)('3P', {'sound': sound}),
|
||||
import_player(args.blue_team, 1)('4P', {'sound': sound}),
|
||||
import_player(args.blue_team, 2)('5P', {'sound': sound}),
|
||||
import_player(args.blue_team, 3)('6P', {'sound': sound})]
|
||||
|
||||
contest = Contest(players, total_game , frame, sound, is_manual)
|
||||
contest.run()
|
||||
|
Reference in New Issue
Block a user