Advertisement
Chl_Snt

fefef

Jun 25th, 2023
723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.44 KB | None | 0 0
  1. import math
  2. from tkinter import *
  3. import time
  4.  
  5. root = Tk()
  6. root.title('test_game')
  7. root.resizable(0, 0)
  8. root.wm_attributes('-topmost', 1)
  9.  
  10. canvas = Canvas(bg='green', width=500, height=500)
  11. canvas.pack()
  12.  
  13.  
  14. class Char:
  15.     def __init__(self):
  16.         self.body = canvas.create_oval(50, 50, 70, 70, fill='orange')
  17.         self.x = 0
  18.         canvas.bind_all('<d>', self.turn_right)
  19.         canvas.bind_all('<a>', self.turn_left)
  20.  
  21.     def turn_right(self, event):
  22.         self.x = 2
  23.  
  24.     def turn_left(self, event):
  25.         self.x = -2
  26.  
  27.     def draw(self):
  28.         canvas.move(self.body, self.x, 0)
  29.         pos = canvas.coords(self.body)
  30.         if pos[0] <= 0:
  31.             self.x = 0
  32.         elif pos[2] >= 500:
  33.             self.x = 0
  34.  
  35.  
  36. class Enemy:
  37.     def __init__(self):
  38.         self.text = None
  39.         self.hp = 100
  40.         self.body = canvas.create_rectangle(350, 350, 450, 450, fill='brown')
  41.         self.hp_body = canvas.create_rectangle(350, 330, 350 + self.hp, 340, fill='red')
  42.         self.gui = canvas.create_text(310, 310, text=f'hp: {self.hp}/100')
  43.  
  44.     def death(self):
  45.         self.text = canvas.create_text(250, 250, text='Дом разрушен')
  46.         canvas.delete(self.body)
  47.         canvas.delete(self.hp_body)
  48.         canvas.delete(self.gui)
  49.         canvas.after(2000, self.respawn)
  50.  
  51.     def respawn(self):
  52.         canvas.delete(self.text)
  53.         self.__init__()
  54.  
  55.     def update(self):
  56.         canvas.delete(self.hp_body)
  57.         self.hp_body = canvas.create_rectangle(350, 330, 350 + self.hp, 340, fill='red')
  58.  
  59.  
  60. class Fireball:
  61.     def __init__(self, event):
  62.         self.dmg = 10
  63.         self.x_speed = 0
  64.         self.y_speed = 0
  65.         self.body = None
  66.         self.spawn(event)
  67.  
  68.     def spawn(self, event):
  69.         char_pos = canvas.coords(char.body)
  70.         self.body = canvas.create_oval(char_pos[0], char_pos[1], char_pos[2] - 10,
  71.                                        char_pos[3] - 10, fill='yellow')
  72.         # x = random.randint(-2, 2)
  73.         # y = random.randint(-2, 2)
  74.  
  75.         vector = event.x - char_pos[0], event.y - char_pos[1]
  76.         len_v = math.sqrt(vector[0] ** 2 + vector[1] ** 2)
  77.         vector = vector[0] / len_v, vector[1] / len_v
  78.  
  79.         self.x_speed = vector[0] * 5
  80.         self.y_speed = vector[1] *  5
  81.         # canvas.move(self.body, x, y)
  82.  
  83.     def draw(self):
  84.         canvas.move(self.body, self.x_speed, self.y_speed)
  85.  
  86.     def hit_enemy(self):
  87.         enemy_pos = canvas.coords(enemy.body)
  88.         if not enemy_pos:
  89.             return
  90.  
  91.         pos = canvas.coords(self.body)
  92.         if pos[2] >= enemy_pos[0] and pos[0] <= enemy_pos[2]:
  93.             if enemy_pos[1] <= pos[3] <= enemy_pos[3]:
  94.                 enemy.hp -= self.dmg
  95.                 canvas.itemconfig(enemy.gui, text=f'hp: {enemy.hp}/100')
  96.                 canvas.delete(self.body)
  97.                 fireballs.remove(self)
  98.                 enemy.update()
  99.                 if enemy.hp <= 0:
  100.                     # canvas.create_text(250, 250, text='Дом разрушен')
  101.                     enemy.death()
  102.         return False
  103.  
  104.  
  105. enemy = Enemy()
  106.  
  107. char = Char()
  108.  
  109. fireballs = []
  110.  
  111.  
  112. def shot(event):
  113.     global fireballs
  114.     fireball = Fireball(event)
  115.     fireballs.append(fireball)
  116.  
  117.  
  118. canvas.bind_all('<Button-1>', shot)
  119.  
  120. while True:
  121.     char.draw()
  122.     root.update_idletasks()
  123.     for f in fireballs:
  124.         f.draw()
  125.         f.hit_enemy()
  126.     root.update()
  127.     time.sleep(0.01)
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement