Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- from random import randrange as rnd, choice
- from PIL import ImageTk, Image
- import os
- import time
- root = Tk()
- width = 900
- hight = 600
- padding = 50
- m = 40
- root.geometry(str(width)+'x'+str(hight)+'+600+100')
- canv = Canvas(bg='white')
- canv.pack(fill=BOTH,expand=1)
- class Player():
- def __init__(self):
- self.starty = 0
- self.bullets = []
- self.rotate = 'right'
- self.x = 300
- self.y = 300
- self.r = m*0.3
- self.vx = 0
- self.vy = 0
- self.points = 0
- self.score = 0
- self.g = 1
- self.can_shot = True
- self.can_jump = True
- self.id = canv.create_text(850,100,text= self.score,font = "Arial 50")
- self.id = canv.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r,fill='orange')
- self.keys = set()
- self.move()
- def pickup_coin(self,coin):
- player.score += coin.cost
- def hittest_enemy(self):
- for enemy in enemies:
- if self.x-enemy.r <= enemy.x <= self.x+self.r+enemy.r and self.y-enemy.r <= enemy.y <= self.y + self.r + enemy.r:
- prevx = self.x - self.vx
- prevy = self.y - self.vy
- if prevy+self.r < enemy.y:
- self.vy = 0
- self.y = enemy.y-self.r-1
- self.can_jump = True
- enemy.kill()
- self.vy = -10
- elif prevy + self.r > enemy.y + enemy.r:
- player.hit(enemy)
- elif prevx+self.r < enemy.x:
- player.hit(enemy)
- elif prevx+self.r > enemy.x + enemy.r:
- player.hit(enemy)
- def hit(self,enemy):
- #print('hit!')
- pass
- def shot_pause(self):
- self.can_shot = True
- def shot(self):
- if self.can_shot:
- self.can_shot = False
- bullet = Bullet(self.x,self.y,self.rotate)
- world.append(bullet)
- self.bullets.append(bullet)
- root.after(500,self.shot_pause)
- def move(self):
- self.vx = 0
- if 'shot' in self.keys:
- self.shot()
- if 'left' in self.keys:
- self.vx = -5
- self.rotate = 'left'
- if 'right' in self.keys:
- self.rotate = 'right'
- self.vx = +5
- if 'jump' in self.keys:
- if self.can_jump:
- self.can_jump = False
- self.vy = -20
- self.vy += self.g
- self.x += self.vx
- self.y += self.vy
- if self.y > 550:
- self.y = 550
- self.can_jump = True
- if self.y < 200:
- dy = 200 - self.y
- self.y = 200
- for item in world:
- item.y += dy
- item.paint()
- if self.y > 400:
- dy = 400 - self.y
- self.y = 400
- for item in world:
- item.y += dy
- item.paint()
- if self.x > 600:
- dx = 600 - self.x
- self.x = 600
- for item in world:
- item.x += dx
- item.paint()
- if self.x < 300:
- dx = 300 - self.x
- self.x = 300
- for item in world:
- item.x += dx
- item.paint()
- self.hittest_enemy()
- canv.coords(self.id,self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r)
- root.after(30,self.move)
- class Bullet():
- def __init__(self,x,y,r):
- self.damage = 50
- self.x = x
- self.y = y
- self.r = m/4
- self.vx = 5
- self.active = True
- self.rotate = r
- self.image = ImageTk.PhotoImage(Image.open('bullet.png'))
- self.id = canv.create_image(x,y,image = self.image)
- self.update()
- def paint(self):
- canv.coords(self.id,self.x,self.y)
- def kill(self):
- canv.delete(self.id)
- root.after_cancel(self.updater)
- self.active = False
- player.bullets.remove(self)
- world.remove(self)
- def update(self):
- if self.active:
- if self.rotate == 'right':
- self.x += self.vx
- else:
- self.x -= self.vx
- self.paint()
- for enemy in enemies:
- if self.x-enemy.r <= enemy.x <= self.x+self.r+enemy.r and self.y-enemy.r <= enemy.y <= self.y + self.r + enemy.r:
- enemy.hit(self)
- self.kill()
- self.updater = root.after(30,self.update)
- class DefulfBlock():
- def __init__(self,x,y,k):
- self.x = x
- self.y = y
- self.w = m
- self.h = m
- self.k = k
- #self.id = canv.create_rectangle(self.x,self.y,self.x+self.w,self.y+self.h,fill='orange')
- #self.label = canv.create_text(self.x+self.w//2,self.y+self.h//2,text= self.k)
- self.image = ImageTk.PhotoImage(Image.open('block.png'))
- self.id = canv.create_image(x+m/2,y+m/2,image = self.image)
- self.update()
- def paint(self):
- #canv.coords(self.id,self.x,self.y,self.x+self.w,self.y+self.h)
- #canv.coords(self.label,self.x+self.w//2,self.y+self.h//2)
- canv.coords(self.id,self.x+m/2,self.y+m/2)
- def update(self):
- 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:
- #print(self.k)
- prevx = player.x - player.vx
- prevy = player.y - player.vy
- if prevy+player.r < self.y:
- player.vy = 0
- ##print('up')
- player.can_jump = True
- player.y = self.y-player.r-1
- elif prevy + player.r > self.y + self.h:
- player.vy = 0
- player.y = self.y + self.h + player.r+1
- #print('down')
- elif prevx+player.r < self.x:
- player.vx = 0
- player.x = self.x - player.r-1
- ##print('left')
- elif prevx+player.r > self.x + self.w:
- player.vx = 0
- player.x = self.x + self.w + player.r+1
- #print('right')
- for bullet in player.bullets:
- if self.x-bullet.r <= bullet.x <= self.x+self.w+bullet.r and self.y-bullet.r <= bullet.y <= self.y + self.h + bullet.r:
- bullet.kill()
- for enemy in enemies:
- if self.x-enemy.r <= enemy.x <= self.x+self.w+enemy.r and self.y-enemy.r <= enemy.y <= self.y + self.h + enemy.r:
- #print(self.k)
- prevx = enemy.x - enemy.vx
- prevy = enemy.y - enemy.vy
- if prevy+enemy.r < self.y:
- enemy.vy = 0
- ##print('up')
- enemy.y = self.y-enemy.r-1
- enemy.can_jump = True
- elif prevy + enemy.r > self.y + self.h:
- enemy.vy = 0
- enemy.y = self.y + self.h + enemy.r+1
- #print('down')
- elif prevx+enemy.r < self.x:
- enemy.vx = -enemy.vx
- enemy.x = self.x - enemy.r-1
- ##print('left')
- elif prevx+enemy.r > self.x + self.w:
- enemy.vx = -enemy.vx
- enemy.x = self.x + self.w + enemy.r+1
- #print('right')
- root.after(30,self.update)
- class Money():
- def __init__(self,x,y,c):
- self.x = x+m/2
- self.y = y+m/2
- self.cost = c
- self.r = 0.2*m
- self.color = '#002EFF'
- if self.cost == 5:
- self.color = '#02FF00'
- if self.cost == 10:
- self.color = '#FFFB00'
- #self.id = canv.create_oval(self.x+self.r,self.y+self.r,self.x-self.r,self.y-self.r,fill=self.color)
- #self.label = canv.create_text(self.x,self.y,text=self.cost)
- self.images = []
- for i in range(4):
- self.images.append(ImageTk.PhotoImage(Image.open(str(self.cost) + 'coin' + str(i)+ '.png')))
- self.frame = 0
- self.id = canv.create_image(self.x,self.y,image = self.images[0])
- self.anim()
- self.update()
- def anim(self):
- self.frame += 1
- if self.frame >= len(self.images):
- self.frame= 0
- canv.itemconfig(self.id, image = self.images[self.frame])
- root.after(150,self.anim)
- def paint(self):
- #canv.coords(self.id,self.x+self.r,self.y+self.r,self.x-self.r,self.y-self.r)
- #canv.coords(self.label,self.x,self.y)
- canv.coords(self.id,self.x,self.y)
- def update(self):
- if (player.x - self.x)**2 + (player.y - self.y)**2 < (self.r+player.r)**2:
- player.pickup_coin(self)
- self.kill()
- else:
- root.after(30,self.update)
- def kill(self):
- world.remove(self)
- canv.delete(self.id)
- #canv.delete(self.label)
- class Enemy():
- def __init__(self,x,y):
- self.hp = 100
- self.x = x+m/2
- self.y = y+m/2
- self.r = 15
- self.vx = 3
- self.vy = 0
- self.g= 1
- self.id = canv.create_oval(self.x+self.r,self.y+self.r,self.x-self.r,self.y-self.r,fill='#000000')
- self.update()
- def hit(self,bullet):
- #bullet.kill()
- self.hp -= bullet.damage
- if self.hp <= 0 :
- self.kill()
- def paint(self):
- canv.coords(self.id,self.x+self.r,self.y+self.r,self.x-self.r,self.y-self.r)
- def update(self):
- self.vy += self.g
- self.x += self.vx
- self.y += self.vy
- self.paint()
- root.after(30,self.update)
- def kill(self):
- world.remove(self)
- enemies.remove(self)
- canv.delete(self.id)
- r = 0
- x0 = 10
- y0 = 10
- m = 40
- k = 1
- world = []
- enemies = []
- player = Player()
- f = open('map1.txt','r')
- for line in f.readlines():
- c = 0
- for block in line.strip():
- if block == '1':
- x = x0 + c*m
- y = y0 + r*m
- world.append(DefulfBlock(x,y,k))
- k += 1
- if block == '$':
- x = x0 + c*m
- y = y0 + r*m
- world.append(Money(x,y,1))
- if block == '%':
- x = x0 + c*m
- y = y0 + r*m
- world.append(Money(x,y,5))
- if block == '&':
- x = x0 + c*m
- y = y0 + r*m
- world.append(Money(x,y,10))
- if block == '@':
- x = x0 + c*m
- y = y0 + r*m
- en = Enemy(x,y)
- world.append(en)
- enemies.append(en)
- k += 1
- c += 1
- r += 1
- f.close()
- def keyDown(event):
- if event.keycode == 32:
- player.keys.add('shot')
- if event.keycode == 37:
- player.keys.add('left')
- if event.keycode == 39:
- player.keys.add('right')
- if event.keycode == 38:
- player.keys.add('jump')
- def keyUp(event):
- if event.keycode == 32:
- if 'shot' in player.keys:
- player.keys.remove('shot')
- if event.keycode == 37:
- if 'left' in player.keys:
- player.keys.remove('left')
- if event.keycode == 39:
- if 'right' in player.keys:
- player.keys.remove('right')
- if event.keycode == 38:
- if 'jump' in player.keys:
- player.keys.remove('jump')
- root.bind('<Key>',keyDown)
- root.bind('<KeyRelease>',keyUp)
- mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement