All pastes #809258 Raw Edit

Vermischtes

public text v1 · immutable
·published 2007-12-08 18:17 UTC
rendered paste body
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("<Button-1>", clicked)
mainwindow.mainloop()