Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.13 KB | None | 0 0
  1.  
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. from tkinter import *    # tkinter beeinhaltet saemtliche widgets
  6. import random           # fuer zufallszahlen    
  7. random.seed()           # ohne diese zeile  wird bei jedem start die selble folge zahlen erzeugt
  8.  
  9. class field(object):  # spielfeld
  10.     def __init__(self,word_mult,letter_mult,x,y,tk):
  11.         self.word_mult=word_mult
  12.         self.letter_mult=letter_mult
  13.         self.placed=FALSE
  14.         self.text=""
  15.         if word_mult==3:
  16.             self.background="red"
  17.             self.text="Drei\nfacher\nWort\nwert"
  18.         elif word_mult==2:
  19.             self.background="#eecbad"
  20.             self.text="Zwei\nfacher\nWort\nwert"
  21.         else:
  22.             self.background="forest green"
  23.         if letter_mult==3:
  24.             self.background="Blue"
  25.             self.text="Drei\nfacher\nBuch\nstaben\nwert"
  26.         elif letter_mult==2:
  27.             self.background="cornflower blue"
  28.             self.text="Zwei\nfacher\nBuch\nstaben\nwert"
  29.            
  30.         self.canvas=Canvas(tk,width=tk.field_size,height=tk.field_size,background=self.background,bd=-1)
  31.         self.canvas.create_text(20,20,text=self.text,font="Helvetica 5 bold",fill="White")
  32.         self.canvas.place(x=x,y=y)        
  33.        
  34. class letter(object):  # jeder buchstabe ist ein eigenes Objekt
  35.     def __init__(self,tk,letter,value):
  36.         self.tk=tk
  37.         self.player=()
  38.         self.oldx=self.oldy=0
  39.         self.letter=letter #mit einen Buchstaben
  40.         self.value=value  # und einem Punktewert
  41.         self.canvas=Canvas(tk, width=30, height=30) #zeichenflaeche 30x30 px
  42.         self.bild=PhotoImage(file="blank.gif")# aus blank.gif
  43.         self.canvas.create_image(0,0,image=self.bild,tags=self.letter) #bild malen
  44.         self.canvas.create_text(15,15,text=self.letter,font="Times 20") #buchstaben malen
  45.         self.canvas.create_text(27,27,text=self.value,font="Times 8")   #wert malen
  46.        
  47.         self.canvas.bind('<B1-Motion>',self.b1motion)# mouse-drag binden
  48.         self.canvas.bind('<ButtonRelease-1>',self.buttonrelease)
  49.         self.canvas.bind('<Button-1>',self.button1)    
  50.    
  51.     def place(self,xpos,ypos,letter_amount,player):
  52.         self.canvas.place(x=xpos+(letter_amount*35),y=ypos+22) # und hinter dem letzten platzieren
  53.         self.player=player
  54.                    
  55.        
  56.     def button1(self,event):       #obsolet
  57.             self.oldx=event.widget.winfo_x()
  58.             self.oldy=event.widget.winfo_y()
  59.            
  60.     def buttonrelease(self,event): #obsolet
  61.         print (self.oldy)
  62.         if (event.widget.winfo_x()<self.player.xpos or event.widget.winfo_x()>self.player.xpos+500):
  63.             self.canvas.place(x=self.oldx,y=self.oldy)  
  64.         else:
  65.            
  66.             self.canvas.place(y=self.player.ypos+22,)
  67.             xt=event.widget.winfo_x()
  68.             yt=event.widget.winfo_y()
  69.             print (self.canvas.find_enclosed(yt, yt, xt+2, yt+2))
  70.                        
  71.     def b1motion(self,event):        #mouse1 gedrueckt und gehalten
  72.                 self.newx=event.x+event.widget.winfo_x()
  73.                 self.newy=event.y+event.widget.winfo_y()
  74.                 event.widget.place(x=self.newx,y=self.newy)        
  75.        
  76. class player(object): # jeder spieler ist ein eigenes objekt
  77.     def __init__(self,tk,xpos,ypos):
  78.         self.bild_holder=PhotoImage(file="letterholder.gif")#mit buchstabenhalter
  79.         self.holder=Label(image=self.bild_holder)  
  80.         self.xpos=xpos # der x pos der halters
  81.         self.ypos=ypos # sowie der ypos des halters
  82.         self.holder.place(x=xpos,y=ypos)
  83.         self.letters=[] # und einer liste von letter objekten
  84.         self.letter_amount=0 #anzahl der buchstaben
  85.        
  86.     def add_letter(self,letter): #buchstaben hinzufuegen
  87.         self.letter_amount+=1
  88.         self.letters.append(letter)
  89.         letter.place(self.xpos,self.ypos,self.letter_amount,self)
  90.        
  91.        
  92.        
  93. class Board(Tk): # das spielfeld
  94.     def __init__(self, *args, **kwargs):    #*args und **kwargs sind copy+pasted ,muss so bei tk inter main window
  95.         Tk.__init__(self, *args, **kwargs)
  96.        
  97.        
  98.         self.p1_x=349 # positionen der buchstabenhalter
  99.         self.p1_y=700
  100.         self.p2_x=349
  101.         self.p2_y=20  
  102.         # buchstaben mit haeufigkeit und punktwerten
  103.         self.letterlist=[["E",15,1],["N",9,1],["S",7,1],
  104.                          ["I",6,1],["R",6,1],["T",6,1],
  105.                          ["U",6,1],["A",5,1],["D",4,1],
  106.                          ["H",4,2],["G",3,2],["L",3,2],
  107.                          ["O",3,2],["M",4,3],["B",2,3],
  108.                          ["W",1,3],["Z",1,3],["C",2,4],
  109.                          ["F",2,4],["K",2,4],["P",1,4],
  110.                          ["Ä",1,6],["J",1,6],["Ü",1,6],
  111.                          ["V",1,6],["Ö",1,8],["X",1,8],
  112.                          ["Q",1,10],["Y",1,10],["",2,0]]
  113.         # feldaufbau [Wortmultiplikatior][buchstabenmultiplikator]
  114.         #_top sind die ersten 7 reihen, bzw die 7 letzten
  115.         self.fieldval_top=[[3,0],[0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[3,0],
  116.                           [0,0],[0,0],[0,0],[0,2],[0,0],[0,0],[3,0],
  117.                           [0,0],[2,0],[0,0],[0,0],[0,0],[0,3],[0,0],[0,0],
  118.                           [0,0],[0,3],[0,0],[0,0],[0,0],[2,0],[0,0],
  119.                           [0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,2],[0,0],
  120.                           [0,2],[0,0],[0,0],[0,0],[2,0],[0,0],[0,0],
  121.                           [0,2],[0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,2],
  122.                           [0,0],[0,0],[0,0],[2,0],[0,0],[0,0],[0,2],
  123.                           [0,0],[0,0],[0,0],[0,0],[2,0],[0,0],[0,0],[0,0],
  124.                           [0,0],[0,0],[2,0],[0,0],[0,0],[0,0],[0,0],
  125.                           [0,0],[0,3],[0,0],[0,0],[0,0],[0,3],[0,0],[0,0],
  126.                           [0,0],[0,3],[0,0],[0,0],[0,0],[0,3],[0,0],
  127.                           [0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[0,2],[0,0],
  128.                           [0,2],[0,0],[0,0],[0,0],[0,2],[0,0],[0,0]]
  129.         #_mid ist die mittlere Zeile des feldes
  130.         self.fieldval_mid=[[3,0],[0,0],[0,0],[0,2],[0,0],[0,0],[0,0],[2,0],
  131.                            [0,0],[0,0],[0,0],[0,2],[0,0],[0,0],[3,0]]
  132.         self.field_array=[[field for x in range(16)] for y in range(16)]
  133.         self.wm_geometry('1200x800+10+10') # abmessung des fensters
  134.         self.field_y=370
  135.         self.field_x=130
  136.         self.field_size=37
  137.         self.field_y=self.winfo_x()/2+self.field_size*9
  138.         self.player1=player(self,self.p1_x,self.p1_y) # spieler 1 initialisieren
  139.         self.player2=player(self,self.p2_x,self.p2_y) # spieler 2 initialisieren
  140.         self.letters=[]        # buchstaben-liste ( buchstabensack ( du sack) ) initialisieren
  141.        
  142.     def init_new_game(self):
  143.        
  144.         for i in range(1,8):# spielfeld aufbauen
  145.             for j in range (0,15):
  146.                 self.field_index=(i-1)*15+j
  147.                 self.field_array[i][j]=field(self.fieldval_top[self.field_index][0],
  148.                                             self.fieldval_top[self.field_index][1],                                            
  149.                                             self.field_y+self.field_size*(j-1),
  150.                                             self.field_x+self.field_size*(i-1),
  151.                                             self)
  152.                 # von unten symmetreich aufbauen
  153.                 self.field_array[16-i][j]=field(self.fieldval_top[self.field_index][0],
  154.                                                 self.fieldval_top[self.field_index][1],
  155.                                                 self.field_y+self.field_size*(j-1),
  156.                                                 self.field_x+(self.field_size*14)-self.field_size*(i-1),
  157.                                                 self)
  158.         # mittlere zeiel aufbauen
  159.         for j in range (0,15):
  160.             self.field_array[8][j]=field(self.fieldval_mid[j][0],
  161.                                          self.fieldval_mid[j][1],
  162.                                          self.field_y+self.field_size*(j-1),
  163.                                          self.field_x+self.field_size*7,
  164.                                          self)
  165.        
  166.         for i in self.letterlist: # alle buchstaben objekte aus letterlist intialisieren
  167.             #letterlist=["buchstabe",haeufigkeit,wert]
  168.             for j in range(i[1]):
  169.                 self.letters.append(letter(self,str(i[0]),i[2]))
  170.         # pro spieler 7 zufaellige buchstaben verteilen
  171.        
  172.        
  173.         for i in range(0,7):
  174.             self.zufall=random.randint(0,len(self.letters)-1) # zufaelligen buchstaben ziehen
  175.             self.player1.add_letter(self.letters[self.zufall]) # diesen dem spieler zufuegen
  176.            
  177.             del self.letters[self.zufall] # buchstaben aus dem sack loeschen
  178.             self.zufall=random.randint(0,len(self.letters)-1)
  179.             self.player2.add_letter(self.letters[self.zufall])
  180.             #self.letters[self.zufall].canvas.bind('<B1-Motion>',self.b1motion)
  181.             del self.letters[self.zufall]  
  182.            
  183.    
  184. # hauptprogramm @@@@@@
  185. board=Board()
  186. board.init_new_game()
  187. board.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement