示例#1
0
def create_db(size=DB_SIZE, townhall_level=4):
    # using the same main base for all simulations - no problem with 1 simulator
    game_board = board.GameBoard(
        generate_base.generate_base_by_level(townhall_level))
    sim = simulator.Simulator(game_board)

    # Create filepaths
    seed = random.randint(1, 10000)
    x_path = DATABASES + str(townhall_level) + "/X_" + str(
        size) + "_TH_LVL_" + str(townhall_level) + "_" + str(seed) + ".csv"
    y_path = DATABASES + str(townhall_level) + "/Y_" + str(
        size) + "_TH_LVL_" + str(townhall_level) + "_" + str(seed) + ".csv"

    # Write Headers
    with open(x_path, "a+") as f_army:
        with open(y_path, "a+") as f_res:
            # write headers
            f_res.write(game_board.get_titles() + ",total" + "\n")
            f_army.write(
                generate_army.generate_army_by_level(townhall_level)[1] + "\n")

    # Run "size" simulations
    for i in range(size):
        print("Current Row:\t", i)
        army, titles = generate_army.generate_army_by_level(townhall_level)
        stats = sim.run(army, save_end_state=True, debug=False)

        # Open and write in files for every iteration. Append.
        with open(x_path, "a") as f_army:
            with open(y_path, "a") as f_res:
                f_army.write(get_writable_army(army) + "\n")
                f_res.write(stats["end_state"] + "\n")

    print("Finished DB of size:\t", size)
示例#2
0
def plot_single_barb_mat_3d(armies):
    # Make data.
    X = []
    Y = []
    Z = []

    gb = board.GameBoard(
        base_from_html.html_to_game_board("bases/base_th4_2.html"))
    sim = simulator.Simulator(gb)

    for army in armies:
        stats = sim.run(army)
        x, y = army[0].get_pos()

        X.append(x)
        Y.append(y)
        Z.append(stats["percent"])

    # plot 3d
    fig = plt.figure()
    ax = fig.gca(projection='3d')

    # Plot the surface.
    surf = ax.scatter(X,
                      Y,
                      Z,
                      cmap=cm.coolwarm,
                      linewidth=0,
                      antialiased=False)
    plt.show()
示例#3
0
def html_to_game_board(html_file="bases/base1.html", viz=True):
    html_doc = get_html(html_file)

    soup = BeautifulSoup(html_doc, 'html.parser')
    buildings = soup.find_all("div", class_=["coc-b", "wall"])

    building_infos = []
    for b in buildings:
        try:
            # get level and class
            if b["class"][0] == "wall":
                class_str = "wall"
                level = int(b["class"][1][3:])
            else:
                class_str = b["class"][1].split('-')[1]
                level = int(b["class"][2][3:])

            # get position
            pos = b["style"].split("px")[:2]
            pos = tuple([int(coord.split(" ")[-1]) // 20 for coord in pos])
            pos = (pos[1], pos[0])

            # create object from said parameters
            if class_str in board.BUILDINGS_MAP_NAME.keys():
                building_infos.append((class_str, level, pos))

        except Exception as e:
            print(e)

    # set all positions to align to (0, 0)
    min_x = min(building_infos, key=lambda x: x[2][0])[2][0]
    min_y = min(building_infos, key=lambda x: x[2][1])[2][1]
    max_x = max(building_infos, key=lambda x: x[2][1])[2][0]
    max_y = max(building_infos, key=lambda x: x[2][1])[2][1]

    board_length = max(max_x - min_x, max_y - min_y) + 1
    to_center = max(0, (BOARD_SIZE - board_length) // 2)
    building_infos = [(c, l, (p[0] - min_x, p[1] - min_y)) for c, l, p in building_infos]
    building_infos = [(c, l, (p[0] + to_center, p[1] + to_center)) for c, l, p in building_infos]

    # create objects
    building_objs = []
    for class_str, level, pos in building_infos:
        building_objs.append(board.create_obj_from_name(class_str)(level=level, pos=pos))

    # visualize if necessary
    if viz:
        gb = board.GameBoard(building_objs)
        gb.update_viz()
    return building_objs
示例#4
0
 def __init__(self):
     '''
     Attributes are defined here
     Game Initialization is delegated to init_game()
     Attributes:
         self.board : Pubilc Decks
         self.players : List of Player Infomations
         self.pack_num  : Numbers of Pack of Cards
     '''
     self.board = board.GameBoard()
     self.players = []
     self.pack_num = 0
     card.FullDeck()  # initial card.FullDeck
     self.init_game()
     self.run_game()
示例#5
0
def plot_single_barb_mat(armies):
    # Make data.
    mat = np.zeros((BOARD_SIZE + 2 * MARGIN, BOARD_SIZE + 2 * MARGIN))

    gb = board.GameBoard(generate_base.generate_main_base())
    sim = simulator.Simulator(gb)

    for army in armies:
        stats = sim.run(army)
        x, y = army[0].get_pos()
        mat[x + MARGIN][y + MARGIN] = stats["percent"]

    # plot 3d
    plt.title("Attacking Heatmap of 1 super soldier")
    plt.xlabel("X")
    plt.ylabel("Y")
    plt.imshow(mat)
    plt.show()
示例#6
0
    def __init__(self, player_x_turn: bool, player_x, player_y):
        super().__init__()

        player_x.attach_game(self)
        player_y.attach_game(self)

        # Initialize the board
        self.game_board = board.GameBoard(3)

        # Initialize the game state
        self.player_x_turn = player_x_turn
        self.player_x_wins = False
        self.player_y_wins = False
        self.game_over = False
        self.previous_move_successful = True

        # Initialize the players
        self.player_x = player_x
        self.player_y = player_y
示例#7
0
def main():
    gb = board.GameBoard(
        base_from_html.html_to_game_board("bases/base_th4_1.html"))
    row3 = [
        -11.0, -8.0, 11.0, -3.0, -5.0, 9.0, 8.0, -1.0, 9.0, -5.0, 6.0, 9.0,
        11.0, 10.0, 11.0, 8.0, -20.0, 11.0, 10.0, 10.0, 8.0, -3.0, 8.0, -5.0,
        8.0, 8.0, -0.0, -12.0, 10.0, 9.0, 8.0, 8.0, -14.0, 8.0, 8.0, 8.0, -0.0,
        -4.0, 9.0, -6.0, -20.0, -4.0, -1.0, -0.0, 8.0, -0.0, 8.0, 9.0, 10.0,
        10.0, 8.0, -0.0, -6.0, 6.0, 7.0, -0.0, 10.0, 13.0, -0.0, 10.0, 7.0,
        7.0, 8.0, 9.0, 6.0, 10.0, -2.0, 11.0, 10.0, 8.0, 10.0, 11.0, 10.0, 9.0,
        9.0, 9.0
    ]
    army = generate_army.generate_army_from_row(row=row3, quants=[13, 13, 5])

    # visualize
    board_viz.viz_board(gb, army)
    gb.update_viz()

    # create simulator
    sim = simulator.Simulator(gb)
    stats = sim.run(army, viz=True, save_end_state=True)
    print(stats)
示例#8
0
def makeMove(move, hand=0):
    if not hand:
        hand = game.pop(playerTurn, move)

    while hand > 0:
        move = nextPos(move)
        game.increment(playerTurn, move, 1)
        hand -= 1

    if game.getValue(playerTurn, move) != 1:
        makeMove(move)
    else:
        captureStones(move)


game = board.GameBoard()
turnNumber = 1
playerTurn = 1

while not game.done():
    print('Turn {num}'.format(num=turnNumber))
    game.output(playerTurn)

    makeMove(getMove())

    turnNumber += 1
    playerTurn = nextTurn(playerTurn)

print('Player {playerName} wins!'.format(playerName=game.done()))
import pandas as pd

import generate_army
import generate_base
import board_viz
import board

TOP_K = 3
MAIN_BOARD = board.GameBoard(generate_base.generate_main_base())

df_x = pd.read_csv("./databases/X_10000.csv")
df_y = pd.read_csv("./databases/Y_10000.csv")["total"]

merged = pd.concat([df_x, df_y], axis=1, sort=False)
print(merged)

top_k = merged.nlargest(TOP_K, 'total')
print(top_k)

armies = [
    generate_army.generate_army_from_row(top_k.iloc[i, :])
    for i in range(TOP_K)
]

board_viz.viz_board(army=armies[0], game_board=MAIN_BOARD, viz=True)
示例#10
0
def generate_main_base():
    armys = []
    elixirs = []
    walls = []
    barrackses = []
    archers = []
    elixir_storages = []
    gold_storages = []
    cannons = []
    golds = []
    mortars = []
    builders = []
    armys.append(ArmyCamps(pos=(0, 4), level=3))
    armys.append(ArmyCamps(pos=(0, 10), level=3))
    elixirs.append(ElixirCollector(pos=(3, 16), level=6))
    elixirs.append(ElixirCollector(pos=(12, 16), level=6))
    for i in range(5, 16):
        walls.append(Wall(pos=(5, i), level=4))
    barrackses.append(Barracks(pos=(6, 2), level=5))
    barrackses.append(Barracks(pos=(7, 16), level=5))
    archers.append(ArcherTower(pos=(6, 6), level=3))
    elixir_storages.append(ElixirStorage(pos=(6, 9), level=6))
    cannons.append(Cannon(pos=(6, 12), level=4))
    for i in range(3, 16):
        walls.append(Wall(pos=(9, i), level=4))
    for i in range(6, 9):
        walls.append(Wall(pos=(i, 5), level=4))
        walls.append(Wall(pos=(i, 15), level=4))
    golds.append(GoldCollector(pos=(11, 0), level=6))
    for i in range(10, 14):
        walls.append(Wall(pos=(i, 3), level=4))
        walls.append(Wall(pos=(i, 11), level=4))
    for i in range(10, 16):
        walls.append(Wall(pos=(i, 15), level=4))
    gold_storages.append(GoldStorage(pos=(11, 4), level=6))
    TH = TownHall(pos=(10, 7), level=4)
    mortars.append(Mortar(pos=(10, 12), level=1))
    elixir_storages.append(ElixirStorage(pos=(13, 12), level=6))
    builders.append(Builder(pos=(14, 0), level=2))
    for i in range(3, 12):
        walls.append(Wall(pos=(14, i), level=4))
    golds.append(GoldCollector(pos=(14, 19), level=6))
    barrackses.append(Barracks(pos=(15, 2), level=5))
    for i in range(15, 18):
        walls.append(Wall(pos=(i, 5), level=4))
    walls.append(Wall(pos=(17, 12), level=4))
    for i in range(5, 13):
        walls.append(Wall(pos=(18, i), level=4))
    archers.append(ArcherTower(pos=(15, 6), level=3))
    gold_storages.append(GoldStorage(pos=(15, 9), level=6))
    cannons.append(Cannon(pos=(17, 13), level=4))
    Lab = Labratory(pos=(17, 17), level=1)
    golds.append(GoldCollector(pos=(19, 2), level=6))
    elixirs.append(ElixirStorage(pos=(19, 5), level=6))
    Castle = ClanCastle(pos=(19, 10), level=1)
    walls.append(Wall(pos=(20, 15), level=4))
    for i in range(17, 21):
        walls.append(Wall(pos=(i, 16), level=4))
    for i in range(12, 17):
        walls.append(Wall(pos=(16, i), level=4))
    elixirs.append(ElixirCollector(pos=(21, 13), level=6))
    golds.append(GoldCollector(pos=(21, 16), level=6))
    buildings = walls + cannons + archers + armys + gold_storages + elixir_storages + barrackses + \
                mortars + builders + golds + elixirs
    buildings.append(TH)
    buildings.append(Lab)
    buildings.append(Castle)

    for b in buildings:
        x, y = b.get_pos()
        b.set_pos((y, x))

    board.GameBoard(buildings).is_legal()

    return buildings
示例#11
0
            return final_path, G[loc]  # Done!

        # Mark the current vertex as closed
        closedVertices.append(current)

        # Update scores for vertices near the current position
        for neighbour in graph.get_vertex_neighbours(current):
            if neighbour in closedVertices:
                continue  # We have already processed this node exhaustively
            candidateG = G[current] + graph.move_cost(current, neighbour)

            if (neighbour not in G.keys()
                    or (neighbour in G.keys() and candidateG < G[neighbour])):
                heapq.heappush(openVertices, (candidateG, neighbour))
                cameFrom[neighbour] = current
                G[neighbour] = candidateG
    print("shouldnt be here ever")
    print("barriers", graph.barriers)
    print("start", start)
    print("targets", targets)
    return [], 0


if __name__ == "__main__":
    gb = board.GameBoard(main.generate_random_base_3())
    graph = AStarGraph(gb)
    print(graph.barriers)
    start = (0, 0)
    targets = [(1, 7), (7, 7), (7, 1)]
    result, cost = AStarSearch(start, targets, graph)
    board_viz.viz_path(result, graph, targets)
示例#12
0
import board

pygame.init()
Screen = pygame.display.set_mode((500, 500))
pygame.display.set_icon(pygame.image.load("Icon.png"))
pygame.event.set_allowed(None)  # PyGame will now not check for any inputs
allowed_events = (pygame.MOUSEMOTION, pygame.MOUSEBUTTONDOWN, pygame.KEYDOWN,
                  pygame.KEYUP, pygame.QUIT)
for event in allowed_events:  # PyGame will now only check inputs for things used in the
    pygame.event.set_allowed(
        event)  # program, increasing speed and efficiency.
Sim = set_up.Sim()  # Setting up
SimBoard = board.SimBoard(Sim)
SimBoard.set_up(Sim.SetUpChances)
Game = set_up.Game()
GameBoard = board.GameBoard(Game, players=True)
GameBoard.set_up(Game.SetUpChances, rotational_symmetry=Game.NoOfPlayers)
Help = set_up.Help()
Menu = set_up.Menu()
MenuChoice = Menu.get_choice(Screen)

while MenuChoice in (Menu.Buttons[:3]
                     ):  # If a button that wasn't the Quit button was pressed
    if MenuChoice == Menu.Buttons[0]:  # If the Simulator button was pressed
        Sim.run(Screen, SimBoard)
    elif MenuChoice == Menu.Buttons[1]:  # If the Game button was pressed
        if Game.run(
                Screen, GameBoard
        ):  # Runs the game; value returned is boolean value which is
            Game = set_up.Game(
            )  # True if the game has ended and if it did the game is
# allowed events
allowed_events = (pygame.MOUSEMOTION, pygame.MOUSEBUTTONDOWN, pygame.KEYDOWN,
                  pygame.KEYUP, pygame.QUIT)

for event in allowed_events:
    pygame.event.set_allowed(event)

# Simulation
Sim = utils.Sim()
SimBoard = board.SimBoard(Sim)
SimBoard.utils(Sim.SetUpChances)

# Game
Game = utils.Game()
GameBoard = board.GameBoard(Game, players=True)
GameBoard.utils(Game.SetUpChances, rotational_symmetry=Game.NoOfPlayers)

# Help
Help = utils.Help()

# Main Menu
Menu = utils.Menu()
MenuChoice = Menu.get_choice(Screen)

while MenuChoice in (Menu.Buttons[:3]):  # Ff non-quit button was pressed.
    if MenuChoice == Menu.Buttons[0]:  # If the Simulator button was pressed
        Sim.run(Screen, SimBoard)
    elif MenuChoice == Menu.Buttons[1]:  # If the Game button was pressed
        if Game.run(Screen, GameBoard):  # Run Game
            Game = utils.Game()  # End Game
示例#14
0
from random import randint

# Setup the game
game_ended = False
player_color = ""

# Get which color the player wants to be
player_color = str(
    raw_input("Welcome to Pentago\n\nPlease choose a color (b, w) : "))
if player_color != "b" and player_color != "w":
    print("Error: Please choose w or b for your color.")
    exit()
move_order = randint(1, 2)

# Create the gameboard
gb = board.GameBoard()
if move_order == 1:
    # Player turn
    gb.turn = player_color
else:
    # AI turn
    gb.turn = "b" if player_color != "b" else "w"

# Create the AI
ai_color = "b" if player_color == "w" else "w"
ai = ai.AI(ai_color)

print("=> You are " + str(player_color) + "\n=> AI is " + str(ai_color))


# GAME INTERFACE METHODS