rendered paste bodyfrom 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("<Button-1>", clicked)
mainwindow.mainloop()