boris-vlasenko

Платформер1

Jan 12th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.33 KB | None | 0 0
  1. from tkinter import *
  2. from random import randrange as rnd, choice
  3. from PIL import ImageTk, Image
  4. import os
  5. import time
  6.  
  7. root = Tk()
  8. width = 900
  9. hight = 600
  10. padding = 50
  11. root.geometry(str(width)+'x'+str(hight)+'+100+100')
  12. canv = Canvas(bg='white')
  13. canv.pack(fill=BOTH,expand=1)
  14.  
  15. class Player():
  16.     def __init__(self):
  17.         self.starty = 0
  18.         self.x = 300
  19.         self.y = 300
  20.         self.r = 10
  21.         self.vx = 0
  22.         self.vy = 0    
  23.         self.points = 0
  24.         self.g = 1
  25.         self.can_jump = True
  26.         self.id = canv.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r,fill='orange')
  27.         self.keys = set()
  28.         self.move()
  29.    
  30.     def move(self):
  31.         self.vx = 0
  32.         if 'left' in self.keys:
  33.             self.vx = -5
  34.         if 'right' in self.keys:
  35.             self.vx = +5
  36.         if 'jump' in self.keys:
  37.             if self.can_jump:
  38.                 self.can_jump = False
  39.                 self.vy = -20
  40.         self.vy += self.g
  41.         self.x += self.vx
  42.         self.y += self.vy
  43.         if self.y > 550:
  44.             self.y = 550
  45.             self.can_jump = True
  46.         if self.x > 600:
  47.             dx = 600 - self.x
  48.             self.x = 600
  49.             for item in world:
  50.                 item.x += dx
  51.                 item.paint()
  52.         if self.x < 300:
  53.             dx = 300 - self.x
  54.             self.x = 300
  55.             for item in world:
  56.                 item.x += dx
  57.                 item.paint()
  58.         canv.coords(self.id,self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r)
  59.         root.after(30,self.move)
  60.  
  61. class DefulfBlock():
  62.     def __init__(self,x,y,k):
  63.         self.x = x
  64.         self.y = y
  65.         self.w = 40
  66.         self.h = 40
  67.         self.k = k
  68.         self.id = canv.create_rectangle(self.x,self.y,self.x+self.w,self.y+self.h,fill='orange')
  69.         self.label = canv.create_text(self.x+self.w//2,self.y+self.h//2,text= self.k)
  70.         self.update()
  71.    
  72.     def paint(self):
  73.         canv.coords(self.id,self.x,self.y,self.x+self.w,self.y+self.h)
  74.         canv.coords(self.label,self.x+self.w//2,self.y+self.h//2)
  75.        
  76.     def update(self):
  77.         if self.x-player.r <= player.x <= self.x+self.w+player.r and self.y-player.r <= player.y <= self.y + self.h + player.r:        
  78.             print(self.k)
  79.             prevx = player.x - player.vx
  80.             prevy = player.y - player.vy
  81.             if prevy+player.r < self.y:
  82.                 player.vy = 0
  83.                 #print('up')
  84.                 player.y = self.y-player.r-1
  85.                 player.can_jump = True
  86.             elif prevy + player.r > self.y + self.h:
  87.                 player.vy = 0
  88.                 player.y = self.y + self.h + player.r+1
  89.                 print('down')
  90.             elif prevx+player.r < self.x:
  91.                 player.vx = 0
  92.                 player.x = self.x - player.r-1
  93.                 #print('left')
  94.             elif prevx+player.r > self.x + self.w:
  95.                 player.vx = 0
  96.                 player.x = self.x + self.w + player.r+1
  97.                 print('right')
  98.            
  99.         root.after(30,self.update)
  100.        
  101.              
  102. player = Player()
  103. f = open('map1.txt','r')
  104. r = 0
  105. x0 = 10
  106. y0 = 10
  107. m = 40
  108. k = 1
  109. world = []
  110. for line in f.readlines():
  111.     c = 0
  112.     for block in line.strip():
  113.         if block == '1':
  114.             x = x0 + c*m
  115.             y = y0 + r*m
  116.             world.append(DefulfBlock(x,y,k))
  117.             k += 1
  118.         c += 1
  119.     r += 1
  120.  
  121. f.close()
  122.  
  123. def keyDown(event):
  124.     #~ print(event.keycode)
  125.     if event.keycode == 37:
  126.         player.keys.add('left')
  127.     if event.keycode == 39:
  128.         player.keys.add('right')
  129.     if event.keycode == 38:
  130.         player.keys.add('jump')
  131.  
  132. def keyUp(event):
  133.     if event.keycode == 37:
  134.         if 'left' in player.keys:
  135.             player.keys.remove('left')
  136.     if event.keycode == 39:
  137.         if 'right' in player.keys:
  138.             player.keys.remove('right')
  139.     if event.keycode == 38:
  140.         if 'jump' in player.keys:
  141.             player.keys.remove('jump')
  142.  
  143.  
  144. root.bind('<Key>',keyDown)
  145. root.bind('<KeyRelease>',keyUp)
  146.  
  147. mainloop()
Add Comment
Please, Sign In to add comment