from Tkinter import * import random #ingame coordinates and there onscreen representation class coord: def __init__(self, x, y): self.x = x self.y = y #gui related: self.scr_x = x*70 self.scr_y = y*70 #a starsystem belongs to a player, and produces and stores ships class starsys: def __init__(self, name, pos, ships, build, player, canvas): self.name = name self.pos = pos self.ships = ships self.build = build self.player = player self.draw_gui(canvas) def change_player(player): self.player = player self.refresh_gui(canvas) #gui-related: def draw_gui(self, canvas): self.canvas = canvas self.font = ('arial', 6) self.planet_graph = canvas.create_oval(self.pos.scr_x-3, self.pos.scr_y-3, self.pos.scr_x+3, self.pos.scr_y+3, fill="black") self.name_text = canvas.create_text(self.pos.scr_x, self.pos.scr_y+10, text = self.name, font = self.font) self.player_text = canvas.create_text(self.pos.scr_x, self.pos.scr_y+20, text = self.player.name, font = self.font) def refresh_gui(self, canvas): self.canvas.coords(self.planet_graph, self.pos.scr_x-3, self.pos.scr_y-3, self.pos.scr_x+3, self.pos.scr_y+3); self.name_text.text = self.name self.player_text.text = self.player.name #a galaxy consists of several starsystems class galaxy: def __init__(self, num, player, canvas): self.systems = [] for count1 in range(num): valid = False while valid == False: x = random.randint(1, 8) y = random.randint(1, 8) valid = True for count2 in range(count1): if (x == self.systems[count2].pos.x)\ and (y == self.systems[count2].pos.y): valid = 0 self.systems.append(starsys("system "+str(count1), coord(x, y), 10, 10, player, canvas)) #a player is identified by it's name class player: def __init__(self, name): self.name = name #a list of players, that also contains the neutral alien player class players: def __init__(self): self.players = [] self.players.append(player("alien")) def add_player(name): self.players.append(player(name)) #a fleet has source- and destination-planet, is ownded by a player, #counts a number of ships and takes a number of rounds until arrival class fleet: def __init__(self, player, src, dest, ships, rounds, canvas): self.player = player self.src = src self.dest = dest self.ships = ships self.rounds = rounds self.draw_gui(canvas) #gui-related: def draw_gui(self, canvas): self.canvas = canvas self.font = ('arial', 6) self.fleet_graph = self.canvas.create_line(self.src.pos.scr_x, self.src.pos.scr_y, self.dest.pos.scr_x, self.dest.pos.scr_y, arrow = FIRST) self.text_x = (self.src.pos.scr_x+self.dest.pos.scr_x)/2 self.text_y = (self.src.pos.scr_y+self.dest.pos.scr_y)/2 self.player_text = self.canvas.create_text(self.text_x, self.text_y-5, text = self.player.name, font = self.font) self.ships_text = self.canvas.create_text(self.text_x, self.text_y+5, text = "ships: "+str(self.ships), font=self.font) self.rounds_text = self.canvas.create_text(self.text_x, self.text_y+15, text = "rounds: "+str(self.rounds), font=self.font) def refresh_gui(self, canvas): self.canvas.coords(self.fleet_graph, self.src.pos.scr_x, self.src.pos.scr_y, self.dest.pos.scr_x, self.dest.pos.scr_y) self.player_text.text = self.player.name self.ships_text.text = "ships: "+str(self.ships) self.rounds_text = "rounds: "+str(self.rounds) def clicked(event): canvas.create_oval(event.x-10, event.y-10, event.x+10, event.y+10) #gui related: mainwindow = Tk() toolframe = Frame(mainwindow) label1 = Label(toolframe, text = "Blablubb") label1.pack(side = TOP) toolframe.pack(side = RIGHT, fill = NONE, expand = 0) canvas = Canvas(mainwindow, height = "600", width = "600", bg = "white") canvas.pack() players = players() milkyway = galaxy(20, players.players[0], canvas) counquerors = fleet(player("alien"), milkyway.systems[0], milkyway.systems[2], 5, 6, canvas) canvas.bind("", clicked) mainwindow.mainloop()