Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from tkinter import * # tkinter beeinhaltet saemtliche widgets
- import random # fuer zufallszahlen
- random.seed() # ohne diese zeile wird bei jedem start die selble folge zahlen erzeugt
- class field(object): # spielfeld
- def __init__(self,word_mult,letter_mult,x,y,tk):
- self.word_mult=word_mult
- self.letter_mult=letter_mult
- self.placed=FALSE
- self.text=""
- if word_mult==3:
- self.background="red"
- self.text="Drei\nfacher\nWort\nwert"
- elif word_mult==2:
- self.background="#eecbad"
- self.text="Zwei\nfacher\nWort\nwert"
- else:
- self.background="forest green"
- if letter_mult==3:
- self.background="Blue"
- self.text="Drei\nfacher\nBuch\nstaben\nwert"
- elif letter_mult==2:
- self.background="cornflower blue"
- self.text="Zwei\nfacher\nBuch\nstaben\nwert"
- self.canvas=Canvas(tk,width=tk.field_size,height=tk.field_size,background=self.background,bd=-1)
- self.canvas.create_text(20,20,text=self.text,font="Helvetica 5 bold",fill="White")
- self.canvas.place(x=x,y=y)
- class letter(object): # jeder buchstabe ist ein eigenes Objekt
- def __init__(self,tk,letter,value):
- self.tk=tk
- self.player=()
- self.oldx=self.oldy=0
- self.letter=letter #mit einen Buchstaben
- self.value=value # und einem Punktewert
- self.canvas=Canvas(tk, width=30, height=30) #zeichenflaeche 30x30 px
- self.bild=PhotoImage(file="blank.gif")# aus blank.gif
- self.canvas.create_image(0,0,image=self.bild,tags=self.letter) #bild malen
- self.canvas.create_text(15,15,text=self.letter,font="Times 20") #buchstaben malen
- self.canvas.create_text(27,27,text=self.value,font="Times 8") #wert malen
- self.canvas.bind('<B1-Motion>',self.b1motion)# mouse-drag binden
- self.canvas.bind('<ButtonRelease-1>',self.buttonrelease)
- self.canvas.bind('<Button-1>',self.button1)
- def place(self,xpos,ypos,letter_amount,player):
- self.canvas.place(x=xpos+(letter_amount*35),y=ypos+22) # und hinter dem letzten platzieren
- self.player=player
- def button1(self,event): #obsolet
- self.oldx=event.widget.winfo_x()
- self.oldy=event.widget.winfo_y()
- def buttonrelease(self,event): #obsolet
- print (self.oldy)
- if (event.widget.winfo_x()<self.player.xpos or event.widget.winfo_x()>self.player.xpos+500):
- self.canvas.place(x=self.oldx,y=self.oldy)
- else:
- self.canvas.place(y=self.player.ypos+22,)
- xt=event.widget.winfo_x()
- yt=event.widget.winfo_y()
- print (self.canvas.find_enclosed(yt, yt, xt+2, yt+2))
- def b1motion(self,event): #mouse1 gedrueckt und gehalten
- self.newx=event.x+event.widget.winfo_x()
- self.newy=event.y+event.widget.winfo_y()
- event.widget.place(x=self.newx,y=self.newy)
- class player(object): # jeder spieler ist ein eigenes objekt
- def __init__(self,tk,xpos,ypos):
- self.bild_holder=PhotoImage(file="letterholder.gif")#mit buchstabenhalter
- self.holder=Label(image=self.bild_holder)
- self.xpos=xpos # der x pos der halters
- self.ypos=ypos # sowie der ypos des halters
- self.holder.place(x=xpos,y=ypos)
- self.letters=[] # und einer liste von letter objekten
- self.letter_amount=0 #anzahl der buchstaben
- def add_letter(self,letter): #buchstaben hinzufuegen
- self.letter_amount+=1
- self.letters.append(letter)
- letter.place(self.xpos,self.ypos,self.letter_amount,self)
- class Board(Tk): # das spielfeld
- def __init__(self, *args, **kwargs): #*args und **kwargs sind copy+pasted ,muss so bei tk inter main window
- Tk.__init__(self, *args, **kwargs)
- self.p1_x=349 # positionen der buchstabenhalter
- self.p1_y=700
- self.p2_x=349
- self.p2_y=20
- # buchstaben mit haeufigkeit und punktwerten
- self.letterlist=[["E",15,1],["N",9,1],["S",7,1],
- ["I",6,1],["R",6,1],["T",6,1],
- ["U",6,1],["A",5,1],["D",4,1],
- ["H",4,2],["G",3,2],["L",3,2],
- ["O",3,2],["M",4,3],["B",2,3],
- ["W",1,3],["Z",1,3],["C",2,4],
- ["F",2,4],["K",2,4],["P",1,4],
- ["Ä",1,6],["J",1,6],["Ü",1,6],
- ["V",1,6],["Ö",1,8],["X",1,8],
- ["Q",1,10],["Y",1,10],["",2,0]]
- # feldaufbau [Wortmultiplikatior][buchstabenmultiplikator]
- #_top sind die ersten 7 reihen, bzw die 7 letzten
- self.fieldval_top=[[3,0],[0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[3,0],
- [0,0],[0,0],[0,0],[0,2],[0,0],[0,0],[3,0],
- [0,0],[2,0],[0,0],[0,0],[0,0],[0,3],[0,0],[0,0],
- [0,0],[0,3],[0,0],[0,0],[0,0],[2,0],[0,0],
- [0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,2],[0,0],
- [0,2],[0,0],[0,0],[0,0],[2,0],[0,0],[0,0],
- [0,2],[0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,2],
- [0,0],[0,0],[0,0],[2,0],[0,0],[0,0],[0,2],
- [0,0],[0,0],[0,0],[0,0],[2,0],[0,0],[0,0],[0,0],
- [0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,0],
- [0,0],[0,3],[0,0],[0,0],[0,0],[0,3],[0,0],[0,0],
- [0,0],[0,3],[0,0],[0,0],[0,0],[0,3],[0,0],
- [0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[0,2],[0,0],
- [0,2],[0,0],[0,0],[0,0],[0,2],[0,0],[0,0]]
- #_mid ist die mittlere Zeile des feldes
- self.fieldval_mid=[[3,0],[0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[2,0],
- [0,0],[0,0],[0,0],[0,2],[0,0],[0,0],[3,0]]
- self.field_array=[[field for x in range(16)] for y in range(16)]
- self.wm_geometry('1200x800+10+10') # abmessung des fensters
- self.field_y=370
- self.field_x=130
- self.field_size=37
- self.field_y=self.winfo_x()/2+self.field_size*9
- self.player1=player(self,self.p1_x,self.p1_y) # spieler 1 initialisieren
- self.player2=player(self,self.p2_x,self.p2_y) # spieler 2 initialisieren
- self.letters=[] # buchstaben-liste ( buchstabensack ( du sack) ) initialisieren
- def init_new_game(self):
- for i in range(1,8):# spielfeld aufbauen
- for j in range (0,15):
- self.field_index=(i-1)*15+j
- self.field_array[i][j]=field(self.fieldval_top[self.field_index][0],
- self.fieldval_top[self.field_index][1],
- self.field_y+self.field_size*(j-1),
- self.field_x+self.field_size*(i-1),
- self)
- # von unten symmetreich aufbauen
- self.field_array[16-i][j]=field(self.fieldval_top[self.field_index][0],
- self.fieldval_top[self.field_index][1],
- self.field_y+self.field_size*(j-1),
- self.field_x+(self.field_size*14)-self.field_size*(i-1),
- self)
- # mittlere zeiel aufbauen
- for j in range (0,15):
- self.field_array[8][j]=field(self.fieldval_mid[j][0],
- self.fieldval_mid[j][1],
- self.field_y+self.field_size*(j-1),
- self.field_x+self.field_size*7,
- self)
- for i in self.letterlist: # alle buchstaben objekte aus letterlist intialisieren
- #letterlist=["buchstabe",haeufigkeit,wert]
- for j in range(i[1]):
- self.letters.append(letter(self,str(i[0]),i[2]))
- # pro spieler 7 zufaellige buchstaben verteilen
- for i in range(0,7):
- self.zufall=random.randint(0,len(self.letters)-1) # zufaelligen buchstaben ziehen
- self.player1.add_letter(self.letters[self.zufall]) # diesen dem spieler zufuegen
- del self.letters[self.zufall] # buchstaben aus dem sack loeschen
- self.zufall=random.randint(0,len(self.letters)-1)
- self.player2.add_letter(self.letters[self.zufall])
- #self.letters[self.zufall].canvas.bind('<B1-Motion>',self.b1motion)
- del self.letters[self.zufall]
- # hauptprogramm @@@@@@
- board=Board()
- board.init_new_game()
- board.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement