Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Probestudium / 2013 / WS I: 3D-Programmierung / Arbeitsgruppen 2013 / Monopoly(unfinished)


Inhaltsbereich

Monopoly(unfinished)

Python Source icon Spiel1.py — Python Source, 29 KB (30000 bytes)

Dateiinhalt

# -*- coding: utf-8 -*-
from visual import *
import random
import threading
import time

scale = 1

class Spielbrett(frame):
    def __init__(self, groesse):
        frame.__init__(self)
        scale = groesse
        #Gruene Flaeche
        self.brett = box(frame = self, width = 13*scale+2*0.2, length = 13*scale+2*0.2, height = 0.1, color = (192/255.0,226/255.0,202/255.0))
        #Rahmen North
        rahmenHorizontal = shapes.rectangle(width = 13*scale, height = 2*scale, thickness = 0.05/1.5)
        pathN = paths.line(start = (0,0.05,-5.5*scale), end = (0,0.06,-5.5*scale))
        self.rahmenNorth = extrusion(frame = self, pos = pathN, shape = rahmenHorizontal, color = color.black)
        #Rahmen West
        rahmenVertical = shapes.rectangle(height = 13*scale, width = 2*scale, thickness = 0.05/1.5)
        pathW = paths.line(start = (-5.5*scale,0.05,0), end = (-5.5*scale,0.06,0))
        self.rahmenWest = extrusion(frame = self, pos = pathW, shape = rahmenVertical, color = color.black)
        #Rahmen East
        pathE = paths.line(start = (5.5*scale,0.05,0), end = (5.5*scale,0.06,0))
        self.rahmenEast = extrusion(frame = self, pos = pathE, shape = rahmenVertical, color = color.black)
        #Rahmen South
        pathS = paths.line(start = (0,0.05,5.5*scale), end = (0,0.06,5.5*scale))
        self.rahmenSouth = extrusion(frame = self, pos = pathS, shape = rahmenHorizontal, color = color.black)
        #Rahmen Gefaengnis
        rahmenG = shapes.rectangle(height = 1.5*scale, width = 1.5*scale, thickness = 0.05/1.5)
        pathG = paths.line(start = (-5.25*scale,0.05,5.25*scale), end = (-5.25*scale,0.06,5.25*scale))
        self.rahmenSouth = extrusion(frame = self, pos = pathG, shape = rahmenG, color = color.black)
        #Los
        self.los = LosGrafik(groesse = scale)
        #Feldlinien
        for i in range(-1,2):
            if i == 0:
                pass
            else:
                for j in range(-4,5):
                    if j < 0:
                        self.feldlinie = box(frame = self, pos =((j+0.5)*scale,0.02,i*5.5*scale), width = scale*2, length = 0.1/1.5*scale, height =0.1, color = color.black)
                    elif j > 0:
                        self.feldlinie = box(frame = self, pos =((j-0.5)*scale,0.02,i*5.5*scale), width = scale*2, length = 0.1/1.5*scale, height =0.1, color = color.black)
        for i in range(-1,2):
            if i == 0:
                pass
            else:
                for j in range(-4,5):
                    if i < 0:
                        self.feldlinie = box(frame = self, pos =(i*5.5*scale,0.02,(j+0.5)*scale), width = 0.1/1.5*scale, length = scale*2, height =0.1, color = color.black)
                    elif i > 0:
                        self.feldlinie = box(frame = self, pos =(i*5.5*scale,0.02,(j-0.5)*scale), width = 0.1/1.5*scale, length = scale*2, height =0.1, color = color.black)
        #Braun
        for i in range (2,5):
            if i == 3:
                pass
            else:
                self.braun = Strassenfarben(farbe = (166/255.0,44/255.0,43/255.0), ausrichtung = 'h', groesse = scale)
                self.braun.pos = (i*scale, 0, 4.5*scale+scale/3.0)
                self.braun.frame = self        
        #Hellblau
        for i in range(-4,0):
            if i == -2:
                pass
            else:
                self.hellblau = Strassenfarben(farbe = (62/255.0,196/255.0,223/255.0), ausrichtung = 'h', groesse = scale)
                self.hellblau.pos = (i*scale, 0, 4.5*scale+scale/3.0)
                self.hellblau.frame = self        
        #Rosa
        feldVertical = shapes.rectangle(width = 0.65, height =1.4)
        for i in range(1,5):
            if i == 3:
                pass
            else:
                self.rosa = Strassenfarben(farbe = (242/255.0,107/255.0,165/255.0), ausrichtung = 'v', groesse = scale)
                self.rosa.pos = (-4.5*scale-scale/3.0, 0, i*scale)
                self.rosa.frame = self
        #Orange
        for i in range(-4,0):
            if i == -2:
                pass
            else:
                self.orange = Strassenfarben(farbe = (246/255.0,137/255.0,32/255.0), ausrichtung = 'v', groesse = scale)
                self.orange.pos = (-4.5*scale-scale/3.0, 0, i*scale)
                self.orange.frame = self        
        #Rot
        for i in range(-4,0):
            if i == -3:
                pass
            else:
                self.rot = Strassenfarben(farbe = (224/255.0,30/255.0,38/255.0), ausrichtung = 'h', groesse = scale)
                self.rot.pos = (i*scale, 0, -4.5*scale-scale/3.0)
                self.rot.frame = self
        #Gelb
        for i in range(1,5):
            if i == 3:
                pass
            else:
                self.gelb = Strassenfarben(farbe = (248/255.0,236/255.0,30/255.0), ausrichtung = 'h', groesse = scale)
                self.gelb.pos = (i*scale, 0, -4.5*scale-scale/3.0)
                self.gelb.frame = self        
        #Gruen
        for i in range(-4,0):
            if i == -2:
                pass
            else:
                self.gruen = Strassenfarben(farbe = (12/255.0,137/255.0,69/255.0), ausrichtung = 'v', groesse = scale)
                self.gruen.pos = (4.5*scale+scale/3.0, 0, i*scale)
                self.gruen.frame = self        
        #Dunkelblau
        for i in range(1,5):
            if i == 3 or i == 1:
                pass
            else:
                self.dunkelblau = Strassenfarben(farbe = (58/255.0,59/255.0,151/255.0), ausrichtung = 'v', groesse = scale)
                self.dunkelblau.pos = (4.5*scale+scale/3.0, 0, i*scale)
                self.dunkelblau.frame = self        

class Strassenfarben(frame):
    def __init__(self, farbe, ausrichtung, groesse):
        frame.__init__(self)
        scale = groesse
        if 'h' in ausrichtung:
            shapeFarben = shapes.rectangle(width = scale - 0.1, height = scale/1.875)
        elif 'v' in ausrichtung:
            shapeFarben = shapes.rectangle(width = scale/1.875, height =scale - 0.1)
        pathFarben = paths.line(start = (0,0.05,0), end = (0,0.06,0))
        self.Farben = extrusion(frame = self, shape = shapeFarben, pos = pathFarben, color = farbe)

class Figur(frame):
    def __init__(self, farbe,  groesse):
        frame.__init__(self)
        scale = groesse
        self.kegel = cone(frame = self, pos = (0,0,0), axis = (0,1,0), radius = 0.4, color = farbe)
        self.kugel = sphere(frame = self, pos = self.kegel.axis, radius = self.kegel.radius*0.5, color = farbe)
        self.pos = (4*scale, 0 , 5.5*scale)
    def Bewegen(self, zielposition = int):
        [x for x in felder if x.name == wuerfel]
        #self.pos = x.pos
        

class LosGrafik(frame):
    def __init__(self, groesse):
        frame.__init__(self)
        scale = groesse
        sLos = 0.5
        body = shapes.rectangle(height = 0.2*scale*sLos, width = 2*scale*sLos)
        head = shapes.triangle(length = 0.5*scale*sLos, pos = (-0.5*2*scale*sLos, 0), rotate = -pi/6)
        rear = shapes.rectangle(width = 0.5*scale*sLos, pos = ((scale + 0.25*scale)*sLos, 0)) + shapes.rectangle(width = mag(vector(0.25*scale, 0.25*scale))*sLos, pos = (scale*sLos, 0), rotate = pi/4) - shapes.rectangle(width = mag(vector(0.25*scale, 0.25*scale))*sLos, pos = ((scale + 0.5*scale)*sLos, 0), rotate = pi/4)
        pathLos = paths.line(start = (6.0*scale - scale/2.0,0.05,6.0*scale), end = (6.0*scale - scale/2.0, 0.06, 6*scale))
        self.extrusion1 = extrusion(shape = head + body + rear, pos = pathLos, color = (248/255.0, 30/255.0, 31/255.0))

class Feld():
    def __init__(self, nummer,position,preis,miete0,miete1,miete2,miete3,miete4,mieteH,hauspreis,hypothek):
        self.nummer = nummer
        self.position = position
        self.preis = preis
        self.miete0 = miete0
        self.miete1 = miete1
        self.miete2 = miete2
        self.miete3 = miete3
        self.miete4 = miete4
        self.mieteH = mieteH
        self.hauspreis = hauspreis
        self.hotelpreis = hauspreis
        self.hypothek = hypothek
        self.spieler = 0 #gehoert niemandem
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        if self.spieler == 0:
            print("Kaufen? (ja/nein)")
            f = True
            while (f == True):
                if scene.kb.keys:
                    s = scene.kb.getkey()
                    if s == "j":
                        self.spieler = spielerNummer
                        for i in spielerFeld:
                            if i.nummer == spielerNummer:
                                i.kontostandAendern(-self.preis)
                        f = False
                    if s == "n":
                        f = False                    
        elif self.spieler == spielerNummer:
            pass
        else:
            for i in spielerFeld:
                if i.nummer == self.spieler:
                    i.kontostandAendern(self.miete0)
            for i in spielerFeld:
                if i.nummer == spielerNummer:
                    i.kontostandAendern(-self.miete0)
            

class Bahnhof():
    def __init__(self, nummer, position):
        self.nummer = nummer
        self.position = position
        self.kaufpreis = 4000
        self.spieler = 0
        self.hypothek = 2000
        self.miete1 = 500
        self.miete2 = 1000
        self.miete3 = 2000
        self.miete4 = 4000
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        pass
        
class Los():
    def __init__(self, nummer, position):
        self.nummer = nummer
        self.position = position
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        for i in spielerFeld:
            if i.nummer == spielerNummer:
                i.kontostandAendern(4000)

class Werk():
    def __init__(self, nummer, position):
        self.nummer = nummer
        self.position = position
        self.kaufpreis= 3000
        self.spieler = 0
        self.hypothek =1500
        mietfaktor1 = 80
        mietfaktor2 = 200
    def get_Nummer(self):
        return self.nummer

class Freiparken():
    def __init__(self, nummer):
        self.nummer = nummer
        self.position = (-5.5*scale,0,-5.5*scale)
        self.geldBetrag = 0
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        pass

class gefBesuch():
    def __init__(self, nummer):
        self.nummer = nummer
        self.position=(-6.25*scale,0,6.25*scale)
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        pass

class imGef():
    def __init__(self, nummer):
        self.nummer = nummer
        self.position =(-5.125*scale,0,5.125*scale)
        self.zeit1 = 0
        self.zeit2 = 0
        self.zeit3 = 0
        self.zeit4 = 0
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        pass

class insGef():
    def __init__(self, nummer):
        self.nummer = nummer
        self.position = (5.5*scale,0,-5.5*scale)
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        for i in spielerFeld:
            if i.nummer == spielerNummer:
                i.figur.insGefaengnis()

class Steuerfeld():
    def __init__(self, nummer, position, steuerbetrag):
        self.nummer = nummer
        self.position = position
        self.steuerbetrag = steuerbetrag
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        for i in spielerFeld:
            if i.nummer == spielerNummer:
                i.kontostandAendern(-self.steuerbetrag)

class Ereignisfeld():
    def __init__(self, nummer, position):
        self.nummer = nummer
        self.position=position
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        for i in ereigniskarten:
            if i.nummer == random.randrange(1,16,1):
                if type(i.Aktion())==int:
                    for j in spielerFeld:
                        if j.nummer == spielerNummer:
                            j.kontostandAendern(i.Aktion())
    
class Gemeinschaftsfeld():
    def __init__(self, nummer, position):
        self.nummer = nummer
        self.position = position
    def get_Nummer(self):
        return self.nummer
    def Aktion(self, spielerNummer):
        for i in gemeinschaftskarten:
            if i.nummer == random.randrange(1,16,1):
                i.Aktion()




#Felder
felder = []

los = Los(0, (5.5*scale,0,5.5*scale))
felder.append(los)

Badstrasse = Feld(1, (4*scale,0,5.5*scale),1200,40,200,600,1800,3200,5000,1000,600)
felder.append(Badstrasse)

Gemeinschaftsfeld1 = Gemeinschaftsfeld(2, (3*scale,0,5.5*scale))
felder.append(Gemeinschaftsfeld1)

Turmstrasse = Feld(3, (2*scale,0,5.5*scale),1200,80,400,1200,3600,6400,9000,1000,600)
felder.append(Turmstrasse)

Einkommenssteuer = Steuerfeld(4,(1*scale,0,5.5*scale) , 4000)
felder.append(Einkommenssteuer)

Suedbahnhof=Bahnhof(5, (0,0,5,5*scale))
felder.append(Suedbahnhof)

Chausseestrasse = Feld(6, (-1*scale,0,5.5*scale),2000,120,600,1800,5400,8000,11000,1000,1000)
felder.append(Chausseestrasse)

Ereignisfeld1 = Ereignisfeld(7, (-2*scale,0,5.5*scale))
felder.append(Ereignisfeld1)

Elisenstrasse = Feld(8, (-3*scale,0,5.5*scale),2000,120,600,180,5400,8000,11000,1000,1000)
felder.append(Elisenstrasse)

Poststrasse = Feld(9, (-4*scale,0,5.5*scale),2400,160,800,2000,6000,9000,12000,1000,1200)
felder.append(Poststrasse)

Gefaengnis = gefBesuch(10)
felder.append(Gefaengnis)

Seestrasse = Feld(11, (-5.5*scale,0,4*scale),2800,200,1000,3000,9000,12500,15000,2000,1400)
felder.append(Seestrasse)

Elektrizitaetswerk=Werk(12, (-5.5*scale,0,3*scale))
felder.append(Elektrizitaetswerk)

Hafenstrasse = Feld(13, (-5.5*scale,0,2*scale),2800,200,1000,3000,9000,12500,15000,2000,1400)
felder.append(Hafenstrasse)

Neuestrasse = Feld(14, (-5.5*scale,0,1*scale),3200,240,1200,3600,10000,14000,18000,2000,1600)
felder.append(Neuestrasse)

Westbahnhof=Bahnhof(15, (-5.5*scale,0,0))
felder.append(Westbahnhof)

Muenchnerstrasse = Feld(16, (-5.5*scale,0,-1*scale),3600,280,1400,4000,11000,15000,19000,2000,1800)
felder.append(Muenchnerstrasse)

Gemeinschaftsfeld2 = Gemeinschaftsfeld(17, (-5.5*scale,0,-2*scale))
felder.append(Gemeinschaftsfeld2)

Wienerstrasse = Feld(18, (-5.5*scale,0,-3*scale),3600,280,1400,4000,11000,15000,19000,2000,1800)
felder.append(Wienerstrasse)

Berlinerstrasse = Feld(19, (-5.5*scale,0,-4*scale),4000,320,1600,4400,12000,16000,20000,2000,2000)
felder.append(Berlinerstrasse)

FreiParken = Freiparken(20)
felder.append(FreiParken)

Theaterstrasse = Feld(21, (-4*scale,0,-5.5*scale),4400,360,1800,5000,14000,17500,21000,3000,2200)
felder.append(Theaterstrasse)

Ereignisfeld2 = Ereignisfeld(22, (-3*scale,0,-5.5*scale))
felder.append(Ereignisfeld2)

Museumstrasse = Feld(23, (-2*scale,0,-5.5*scale),4400,360,1800,5000,14000,17500,21000,3000,2200)
felder.append(Museumstrasse)

Opernplatz = Feld(24, (-1*scale,0,-5.5*scale),4800,400,2000,6000,15000,18500,22000,3000,2400)
felder.append(Opernplatz)

Nordbahnhof=Bahnhof(25, (0,0,-5.5*scale))
felder.append(Nordbahnhof)

Lessingstrasse = Feld(26, (1*scale,0,-5.5*scale),5200,440,2200,6600,16000,19500,23000,3000,2600)
felder.append(Lessingstrasse)

Schillerstrasse = Feld(27, (2*scale,0,-5.5*scale),5200,440,2200,6600,16000,19500,23000,3000,2600)
felder.append(Schillerstrasse)

Wasserwerk=Werk(28, (3*scale,0,-5.5*scale))
felder.append(Wasserwerk)

Goethestrasse = Feld(29, (4*scale,0,-5.5*scale),5600,440,2400,7200,17000,20500,24000,3000,2800)
felder.append(Goethestrasse)

InsGefaengnis = insGef(30)
felder.append(InsGefaengnis)

Rathausplatz = Feld(31, (5.5*scale,0,-4*scale),6000,520,2600,7800,18000,22000,25500,4000,3000)
felder.append(Rathausplatz)

Hauptstrasse = Feld(32, (5.5*scale,0,-3*scale),6000,520,2600,7800,18000,22000,25500,4000,3000)
felder.append(Hauptstrasse)

Gemeinschaftsfeld3 = Gemeinschaftsfeld(33, (5.5*scale,0,-2*scale))
felder.append(Gemeinschaftsfeld3)

Bahnhofstrasse = Feld(34, (5.5*scale,0,-1), 6400,560,3000,9000,20000,24000,28000,4000,3200)
felder.append(Bahnhofstrasse)

Hauptbahnhof=Bahnhof(35, (5.5*scale,0,0))
felder.append(Hauptbahnhof)

Ereignisfeld3 = Ereignisfeld(36, (5.5*scale,0,1*scale))
felder.append(Ereignisfeld3)

Parkstrasse = Feld(37, (5.5*scale,0,2*scale),7000,700,3500,10000,22000,26000,30000,4000,3500)
felder.append(Parkstrasse)

Zusatzsteuer = Steuerfeld(38,(5.5*scale,0, 3*scale), 2000)
felder.append(Zusatzsteuer)

Schlossallee = Feld(39, (5.5*scale,0,4*scale),8000,1000,4000,12000,28000,34000,40000,4000,4000)
felder.append(Schlossallee)

imGefaengnis = imGef(40)
felder.append(imGefaengnis)



class Wuerfel():
    def __init__(self):
        pass
    def Wuerfeln(self):
        r1 = random.randrange(1, 7, 1)
        r2 = random.randrange(1, 7, 1)
        if r1 == r2:
            print("pasch")
            print(r1 + r2)
            return r1 + r2
        else:
            print(r1 + r2)
            return r1 + r2

#Wuerfel
wuerfel = Wuerfel()
        
    
class Ereigniskarte():
    def __init__(self, nummer, ereignis, kontoAenderung, positionsAenderung):
        self.nummer = nummer
        self.ereignis = ereignis
        self.kontoAenderung = kontoAenderung
        self.positionsAenderung = positionsAenderung
    def Aktion(self):
        if self.positionsAenderung != None:
            return self.positionsAenderung
        else:
            return self.kontoAenderung
        
class Gemeinschaftskarte():
    def __init__(self, nummer, ereignis, kontoAenderung, positionsAenderung, geburtstag):
        self.nummer = nummer
        self.ereignis = ereignis
        self.kontoAenderung = kontoAenderung
        self.positionsAenderung = positionsAenderung
        self.geburtstag = geburtstag
    def Aktion(self):
        if self.positionsAenderung != None:
            return self.positionsAenderung
        elif self.kontoAenderung != None:
            return self.kontoAenderung
        elif self.geburtstag == True:
            return True
        else:
            return "Ereignis"


#Ereigniskarten
ereigniskarten = []
ereigniskarte1 = Ereigniskarte(1, "Betrunken im Dienst.\n\nStrafe M 400,-.", kontoAenderung = -400, positionsAenderung = None)
ereigniskarten.append(ereigniskarte1)
ereigniskarte2 = Ereigniskarte(2, "Zahle Schuldgeld.\n\nM 3 000,-.", kontoAenderung = -3000, positionsAenderung = None)
ereigniskarten.append(ereigniskarte2)
ereigniskarte3 = Ereigniskarte(3, "Du hast in einem Kreuzwortraetsel-Wettbewerb gewonnen.\n\nZiehe M 2 000,- ein.", kontoAenderung = 2000, positionsAenderung = None)
ereigniskarten.append(ereigniskarte3)
ereigniskarte4 = Ereigniskarte(4, "Gehe 3 Felder zurueck.", kontoAenderung = None, positionsAenderung = -3)
ereigniskarten.append(ereigniskarte4)
ereigniskarte5 = Ereigniskarte(5, "Strafe fuer zu schnelles Fahren.\n\nM 300,-.", kontoAenderung = -300, positionsAenderung = None)
ereigniskarten.append(ereigniskarte5)
ereigniskarte6 = Ereigniskarte(6, "Miete und Anleihzinsen werden faellig.\n\nDie Bank zahlt Dir M 3 000,-.", kontoAenderung = 3000, positionsAenderung = None)
ereigniskarten.append(ereigniskarte6)
ereigniskarte7 = Ereigniskarte(7, "Mache einen Ausflug nach dem.\nWest-Bahnhof,\nund wenn Du ueber Los kommst, ziehe\nM 4 000,- ein.", kontoAenderung = None, positionsAenderung = (-5.5*scale, 0, 0))
ereigniskarten.append(ereigniskarte7)
ereigniskarte8 = Ereigniskarte(8, "Ruecke bis auf Los vor.", kontoAenderung = None, positionsAenderung = (5.5*scale, 0, 5.5*scale))
ereigniskarten.append(ereigniskarte8)
ereigniskarte9 = Ereigniskarte(9, "Die Bank zahlt Dir eine Dividende von\nM 1 000,-..", kontoAenderung = 1000, positionsAenderung = None)
ereigniskarten.append(ereigniskarte9)
ereigniskarte10 = Ereigniskarte(10, "Ruecke vor bis zur Seestrasse.\nWenn du ueber Los kommst, ziehe\nM 4 000,- ein.", kontoAenderung = None, positionsAenderung = (-5.5*scale, 0, 4*scale))
ereigniskarten.append(ereigniskarte10)
ereigniskarte11 = Ereigniskarte(11, "Gehe in das Gefaengnis.\nBegebe Dich direkt dorthin.\n Gehe nicht ueber Los.\n\n Ziehe nicht M 4 000,- ein.", kontoAenderung = None, positionsAenderung = (-5.5*scale, 0, 5.5*scale))
ereigniskarten.append(ereigniskarte11)
#ereigniskarte12 = Ereigniskarte(12, "Lasse alle deine Haeuser renovieren.\n\nZahle fuer jedes Haus M 500,-\nZahle fuer jedes Hotel M 2 000,-.", kontoAenderung = , positionsAenderung = None)
#ereigniskarten.append(ereigniskarte12)
#ereigniskarte13 = Ereigniskarte(13, "Du wirst zu Strassenausbesserungsarbeiten\nherangezogen.\nM 800,- je Haus\nM 2 300,- je Hotel.", kontoAenderung = , positionsAenderung = None)
#ereigniskarten.append(ereigniskarte13)
ereigniskarte14 = Ereigniskarte(14, "Ruecke vor bis zur\n\nSchlossallee.", kontoAenderung = None, positionsAenderung = (5.5*scale, 0, 4*scale))
ereigniskarten.append(ereigniskarte14)
ereigniskarte15 = Ereigniskarte(15, "Ruecke vor bis zum Opernplatz.\nWenn Du ueber Los kommt, ziehe\nM 4 000,- ein.", kontoAenderung = None, positionsAenderung = (-1*scale, 0, -5.5*scale))
ereigniskarten.append(ereigniskarte15)

#Gemeinschaftskarten
gemeinschaftskarten = []
gemeinschaftskarte1 = Gemeinschaftskarte(1, "Es ist dein Geburtstag.\n\nZiehe von jedem Spieler M 200,- ein.", kontoAenderung = None, positionsAenderung = None, geburtstag = True)
gemeinschaftskarten.append(gemeinschaftskarte1)
gemeinschaftskarte2 = Gemeinschaftskarte(2, "Zahle eine Busse von\nM 200,-\noder nimm eine Ereigniskarte.", kontoAenderung = None, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte2)
gemeinschaftskarte3 = Gemeinschaftskarte(3, "Du hast den II. Preis in einer Schönheits-\nkonkurrenz gewonnen\n\nZiehe M 200,- ein.", kontoAenderung = 200, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte3)
gemeinschaftskarte4 = Gemeinschaftskarte(4, "Zahle an das Krankenhaus\n\nM 2 000,-.", kontoAenderung = -2000, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte4)
gemeinschaftskarte5 = Gemeinschaftskarte(5, "Du erbst\n\nM 2 000,-", kontoAenderung = 2000, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte5)
gemeinschaftskarte6 = Gemeinschaftskarte(6, "Ruecke vor bis auf\nL o s.", kontoAenderung = None, positionsAenderung = (5.5*scale, 0, 5.5*scale), geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte6)
gemeinschaftskarte7 = Gemeinschaftskarte(7, "Die Jahresrente wird faellig.\n\n Ziehe M 2 000,- ein.", kontoAenderung = 2000, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte7)
gemeinschaftskarte8 = Gemeinschaftskarte(8, "Gehe in das Gefaengnis.\nBegebe Dich direkt dorthin.\n Gehe nicht ueber Los.\n\n Ziehe nicht M 4 000,- ein.", kontoAenderung = None, positionsAenderung = (-5.5*scale, 0, 5.5*scale), geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte8)
gemeinschaftskarte9 = Gemeinschaftskarte(9, "Einkommensteuer-Rueckzahlung.\n\nZiehe M 400,- ein.", kontoAenderung = 400, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte9)
gemeinschaftskarte10 = Gemeinschaftskarte(10, "Bank-Irrtum zu Deinen Gunsten.\n\nZiehe M 4 000,- ein.", kontoAenderung = 4000, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte10)
gemeinschaftskarte11 = Gemeinschaftskarte(11, "Aus Lagerverkaeufen erhaeltst Du\n\nM 100,-.", kontoAenderung = 100, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte11)
gemeinschaftskarte12 = Gemeinschaftskarte(12, "Arzt-Kosten.\n\nZahle M 100,-.", kontoAenderung = -100, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte12)
gemeinschaftskarte13 = Gemeinschaftskarte(13, "Du erhaeltst auf Vorzugs-Aktien 7% Zinsen\n\nM 500,-.", kontoAenderung = 500, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte13)
gemeinschaftskarte14 = Gemeinschaftskarte(14, "Zahle Deine Versicherungssumme.\n\nM 1 000,-.", kontoAenderung = -1000, positionsAenderung = None, geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte14)
gemeinschaftskarte15 = Gemeinschaftskarte(15, "Gehe zurück nach der\n\nBadstrasse.", kontoAenderung = None, positionsAenderung = (4*scale,0,5.5*scale), geburtstag = False)
gemeinschaftskarten.append(gemeinschaftskarte15)


class Figur1(frame):
    def __init__(self):
        frame.__init__(self)
        groesse = scale/10.0
        self.positionId = 0
        for i in felder:
            if i.get_Nummer() == self.positionId:
                self.position = i.position
        self.helix = helix(frame = self, pos = self.position,thickness=0.05*groesse, radius=2*groesse, axis=(0,3*groesse,0))
        self.cone1 = cone(frame = self, pos = (self.position[0],self.position[1]-(0.1*groesse),self.position[2]), radius=2.2*groesse, axis=(0,1.6*groesse,0))
        self.cone2 = cone(frame = self, pos = (self.position[0],self.position[1]+(3.1*groesse),self.position[2]), radius=2.2*groesse, axis=(0,-1.6*groesse,0))
    def Bewegen(self, augenzahl):
        for i in felder:
            if i.nummer == self.positionId:
                zielfeld = self.positionId + augenzahl
                for j in felder:
                    if j.nummer == zielfeld % 40:
                        self.pos = (self.pos[0] + (j.position[0] - i.position[0]), self.pos[1] + (j.position[1] - i.position[1]), self.pos[2] +  (j.position[2] - i.position[2]))
                        return j
        self.positionId = (self.positionId + augenzahl)%40
    def insGefaengnis(self):
        for i in felder:
            if i.nummer == 40:
                zielfeld = 40
                for j in felder:
                    if j.nummer == zielfeld:
                        self.pos = (self.pos[0] - 10.75, self.pos[1] + 0, self.pos[2] + 10.75)
                
                        

class Figur2(frame):
    def __init__(self):
        frame.__init__(self)
        groesse = scale/5.0
        position = (5.5*scale, 0, 5.5*scale)
        self.pyramide=pyramid(pos=position,size=(1*groesse,2*groesse,2*groesse),axis=(0,2*groesse,0))
        self.sphere=sphere(pos=(position[0],position[1]+1.25*groesse,position[2]),radius=0.5*groesse)
        self.cone1=cone(pos=(position[0]+0.375*groesse,position[1]+1.25*groesse,position[2]),radius=0.2*groesse,axis=(0.5*groesse,0,0))
        self.cone1=cone(pos=(position[0]-0.375*groesse,position[1]+1.25*groesse,position[2]),radius=0.2*groesse,axis=(-0.5*groesse,0,0))
        self.cone1=cone(pos=(position[0],position[1]+1.25*groesse,position[2]+0.375*groesse),radius=0.2*groesse,axis=(0,0,0.5*groesse))
        self.cone1=cone(pos=(position[0],position[1]+1.25*groesse,position[2]-0.375*groesse),radius=0.2*groesse,axis=(0,0,-0.5*groesse))
        self.cone1=cone(pos=(position[0],position[1]+1.625*groesse,position[2]),radius=0.2*groesse,axis=(0,0.5*groesse,0))   


class Figur3(frame):
    def __init__(self):
        frame.__init__(self)
        groesse = scale/5.0
        position = (5.5*scale, 0, 5.5*scale)
        self.cylinder1=cylinder(pos=position,radius=1*groesse,axis=(0,0.3125*groesse,0))
        self.cylinder2=cylinder(pos=(position[0],position[1]+0.3125*groesse,position[2]),radius=0.625*groesse,axis=(0,0.3125*groesse,0))
        self.ring=ring(pos=(position[0],position[1]+1.1375*groesse,position[2]),radius=0.5*groesse,thickness=0.0125*groesse,axis=(13*groesse,0,8*groesse))

class Figur4(frame):
    def __init__(self):
        frame.__init__(self)
        groesse = scale/5.0
        position = (5.5*scale, 0, 5.5*scale)
        self.box1=box(pos=(position[0],position[1]+0.1*groesse,position[2]),size=(1*groesse,0.05*groesse,1*groesse))
        self.box2=box(pos=(position[0]+0.4*groesse,position[1]+0.85*groesse,position[2]),size=(0.05*groesse,1.4*groesse,0.05*groesse))
        self.box3=box(pos=(position[0]-0.2*groesse,position[1]+1.55*groesse,position[2]),size=(0.125*groesse,0.125*groesse,0.125*groesse))
        self.box4=box(pos=(position[0]+0.125*groesse,position[1]+1.55*groesse,position[2]),size=(0.6*groesse,0.05*groesse,0.05*groesse))
        self.sphere=sphere(pos=(position[0]-0.2*groesse,position[1]+0.8*groesse,position[2]),radius=0.125*groesse)
        self.cylinder=cylinder(pos=(position[0]-0.2*groesse,position[1]+1.55*groesse,position[2]),radius=0.025*groesse)
        self.cylinder.axis=self.sphere.pos-self.cylinder.pos





spielerFeld = []

class Spiel():
    def __init__(self, anzahlSpieler):
        self.Spielbrett = Spielbrett(groesse = scale)
        for i in range(1, anzahlSpieler + 1):
            spielerFeld.append(Spieler(anzahlSpieler))
        spielzug = Spielzug(1)
    


class Spieler():
    def __init__(self, nummer):
        self.nummer = nummer
        if nummer == 1:
            self.figur = Figur1()
        elif nummer == 2:
            self.figur = Figur2()
        elif nummer == 3:
            self.figur = Figur3()
        elif nummer == 4:            self.figur = Figur4()
        else:
            print("Nur mit max. vier Spielern spielbar.")
        self.kontostand = 20000
    def kontostandAendern(self, betrag):
        self.kontostand = self.kontostand + betrag
    def kontostandGeben(self):
        print(self.kontostand)



class Spielzug():
    
    def __init__(self, spielerNummer):
        self.spielerNummer = spielerNummer
        time.sleep(2)
        for i in spielerFeld:
            if i.nummer == self.spielerNummer:
                feld = i.figur.Bewegen(38)
        feld.Aktion(spielerNummer)
        for i in spielerFeld:
            if i.nummer == self.spielerNummer:
                i.kontostandGeben()
        
            

a = Spiel(1)
    

Funktionsleiste