Advertisement
Benkex

Game

Aug 15th, 2019
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.13 KB | None | 0 0
  1. from tkinter import *
  2. from math import *
  3. from time import time
  4. from random import *
  5.  
  6. ##############################
  7. #Defining variables
  8.  
  9. #~Nenyúljhozzá részleg
  10.  
  11. timeborder=0.02
  12.  
  13. r=3
  14. cr=40
  15. br=5
  16. d=br
  17.  
  18. x, y = 350, 350
  19. change=90.0
  20.  
  21. color='red'
  22. pressing=False
  23. first=True
  24. direction=0
  25. shoots=[]
  26. #*****************************************
  27. #~Hozzányúlhatsz részleg
  28.  
  29. db=30 # töltények száma
  30. plus=4 # lőtorony forgási sebesség
  31. kulso=500 # radius a lézernek
  32.  
  33. enenum=10 # enemyk száma
  34. enespeed=0.2 # enemyk sebessége
  35. startdist=400 # első enemy milyen korán jön
  36. between=40 # enemyk közötti táv
  37.  
  38. ##############################
  39. #Defining good functions
  40.  
  41. def cd(which, i):
  42.     if not which: #tehát x coord
  43.         return x+cos(radians(360*(i/db) -change))*cr
  44.     else: #tehát y coord
  45.         return y+sin(radians(360*(i/db) -change))*cr
  46.        
  47. def cdp(which, i, rad):
  48.     if not which: #tehát x coord
  49.         return x+cos(radians(360*(i/db) -change))*rad
  50.     else: #tehát y coord
  51.         return y+sin(radians(360*(i/db) -change))*rad
  52.        
  53. #~~~~~~~~~~~~~~~~~~~~~~~~~~
  54.  
  55. def rotate(dir):
  56.     global pressing, direction
  57.     direction=dir
  58.     pressing=True
  59.        
  60. def stop_rot():
  61.     global pressing
  62.     pressing=False
  63.    
  64. #~~~~~~~~~~~~~~~~~~~~~~~~~~
  65.    
  66. def fire():
  67.     global shoots, db, point, alive, enedied, lab
  68.     if db==2 or not alive:
  69.         alive=False
  70.         return 0
  71.     shoots.append([rajz.create_line(cdp(0, 0, cr+d), cdp(1, 0, cr+d), cdp(0, 0, kulso), cdp(1, 0, kulso), fill='#ff0000', width=br), time()])
  72.    
  73.     for enemy in enearr:
  74.         diff=radians(change*-1) - enemy[1]
  75.         if abs(sin(diff)* enemy[2])< min and enemy[2]<=hypot(350, 350)+min and cos(diff)>0:
  76.             enemy[3]=0
  77.    
  78.     for pt in point:
  79.         rajz.delete(pt)
  80.     db-=1
  81.     point=[rajz.create_oval(cd(0, i)-r, cd(1, i)-r, cd(0, i)+r, cd(1, i)+r, width=r) for i in range(db)]
  82.     rad=br
  83.     rajz.coords(point[0], cd(0, 0)-rad, cd(1, 0)-rad, cd(0, 0)+rad, cd(1, 0)+rad)
  84.     rajz.itemconfig(point[0], outline=color, width=br)
  85.    
  86. #~~~~~~~~~~~~~~~~~~~~~~~~~~
  87.    
  88. def randdeg():
  89.     return uniform(0, 2*pi)
  90.  
  91. def help(i):
  92.     global min, max
  93.     min=20
  94.     max=40
  95.     r=radians(uniform(0, 90)+i*90)
  96.     d=uniform(min, max)
  97.     #alseg.append([r, d])
  98.     enedeg=deg[ind]
  99.     if first:
  100.         enedist=dist[ind]
  101.     else:
  102.         enedist=enearr[ind][2]
  103.     kx, ky= x+cos(enedeg)*enedist, y+sin(enedeg)* enedist
  104.     a, b = cos(r)*d+kx, sin(r)*d+ky
  105.     return [a, b]
  106.    
  107. def getshape(index):
  108.     global ind
  109.     ind=index
  110.     return [help(0), help(1), help(2), help(3)]
  111.    
  112. """hatar1=2
  113. hatar2=2
  114.  
  115. def mozgat():
  116.     global alak
  117.     for i in range(4):
  118.         r=alseg[i][0]+uniform(-hatar1, hatar1)
  119.         d=alseg[i][1]+uniform(-hatar2, hatar2)
  120.         if r>90+i*90:
  121.             r=90+i*90
  122.         elif r<i*90:
  123.             r=i*90
  124.         if d < min:
  125.             d=min
  126.         elif d > max:
  127.             d=max
  128.         a, b = cos(r)*d+x, sin(r)*d+y
  129.         alak[i][0]=a
  130.         alak[i][1]=b"""
  131.  
  132. ##############################
  133. #Setting program
  134.  
  135. ablak=Tk()
  136.  
  137. rajz=Canvas(width=700, height=700, bg='white')
  138. rajz.grid(columnspan=2)
  139.  
  140. point=[rajz.create_oval(cd(0, i)-r, cd(1, i)-r, cd(0, i)+r, cd(1, i)+r, width=r) for i in range(db)]
  141. rajz.coords(point[0], x-br, y-cr-br, x+br, y-cr+br)
  142. rajz.itemconfig(point[0], outline=color, width=br)
  143.  
  144. centralline=rajz.create_line(350, 350, 350, 350-cr, fill='red', width=4)
  145.  
  146. dir=["Balra", "Jobbra"]
  147. for i in range(2):
  148.     button = Button(text=dir[i], width=14, height=3)
  149.     button.grid(column=i, row=1)
  150.     button.bind('<ButtonPress-1>', lambda event, i=i: rotate(i))
  151.     button.bind('<ButtonRelease-1>', lambda event: stop_rot())
  152.  
  153. firebut=Button(text='FIRE!!!!', command=fire, width=20, height=3)
  154. firebut.grid(row=2, columnspan=2)
  155.  
  156. deg=[randdeg() for i in range(enenum)]
  157. dist=[startdist+i*between for i in range(enenum)]
  158. enearr=[[rajz.create_polygon(getshape(i), fill='white', outline='black'), deg[i],dist[i], 1] for i in range(enenum)]
  159.  
  160. first=False
  161. alive=True
  162. rogzit=time()
  163. lab=Label()
  164. lab.grid(columnspan=2)
  165.  
  166. #~~~~~~~~~Main loop~~~~~~~~~~~
  167. """
  168. STATISZTIKA:
  169. Alap várási idő: 0.02 sec
  170. Iterációk 0.025 sec feletti idővel: 45%
  171. Iterációk 0.03 sec feletti idővel: 14%
  172. Iterációk 0.035 sec feletti idővel: 5%
  173.  
  174. Ebbe beleszámítandó az iterációnkénti
  175. időellenőrzés
  176. """
  177. while alive:
  178.     while time()-rogzit < timeborder:
  179.         pass
  180.     rogzit=time()
  181.     ablak.update()
  182.     if len(shoots)!=0:
  183.         for sh in shoots:
  184.             kul=time()-sh[1]
  185.             if kul <= 1:
  186.                 ertek=str(hex(int(255*kul)))[2:]
  187.                 if len(ertek)==1:
  188.                     ertek='0'+ertek
  189.                 rajz.itemconfig(sh[0], fill='#ff'+ertek+ertek)
  190.             else:
  191.                 rajz.delete(sh[0])
  192.                 shoots.remove(sh)
  193.     if pressing:
  194.         if direction:
  195.             plus=abs(plus)*-1
  196.         else:
  197.             plus=abs(plus)
  198.         change+=plus
  199.         for i in range(db):
  200.             if i==0: rad=br
  201.             else: rad=r
  202.             rajz.coords(point[i], cd(0, i)-rad, cd(1, i)-rad, cd(0, i)+rad, cd(1, i)+rad)
  203.         rajz.coords(centralline, 350, 350, cd(0, 0), cd(1, 0))
  204.    
  205.     h=0
  206.     for enemy in enearr:
  207.         if enemy[2]<cr:
  208.             alive=False
  209.             break
  210.         elif enemy[3]==1:
  211.             enemy[2] -= enespeed
  212.             rajz.delete(enemy[0])
  213.             ind=h
  214.             alak=[help(0), help(1), help(2), help(3)]
  215.             enemy[0]=rajz.create_polygon(alak, fill='white', outline='black')
  216.         else:
  217.             #animation(enemy)
  218.             pass
  219.         h+=1
  220.     if not alive:
  221.         break
  222.  
  223. rajz.delete(ALL)
  224. rajz.create_text(350, 350, text='GAME OVER')
  225.  
  226. mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement