from pgzero.rect import Rect
from pgzero_api_stub import *
from pgzero.actor import Actor
import random
import time
import pgzrun
from pgzhelper import *
WIDTH = 800
HEIGHT = 600
TITLE = "Fruit Ninja"
bg=(0, 255, 255)
BLADE_COLOR = (255, 0, 255)
background = 'back1.png'
fruits = []
blade = []
score = 0
def create_fruit():
"""Создает новый фрукт"""
fruit_types = ['banana', 'mango', 'apple'] # Список типов фруктов
if random.random() < 0.1:
fruit_type = 'bomb'
else:
fruit_type = random.choice(fruit_types)
fruit = Actor(fruit_type)
fruit.scale = 0.9 # Уменьшаем размер фрукта
fruit.x = random.randint(100, WIDTH - 100)
fruit.y = HEIGHT + 50
fruit.speed = random.randint(5, 10)
fruit.type = fruit_type
fruit.sliced = False
fruit.radius = 30
fruit.angle = random.uniform(0, 360)
fruit.rotation_speed = random.uniform(-3, 3)
return
def update_fruit(fruit):
"""Обновляет позицию и вращение фрукта"""
if not fruit.sliced:
fruit.y -= fruit.speed
fruit.angle = (fruit.angle + fruit.rotation_speed) % 360 # обновляем угол
else:
if fruit.type == 'bomb':
pass # Бомба не двигается после взрыва
else:
fruit.y += fruit.speed * 0.8
fruit.x += fruit.speed * 0.5 * (1 if random.random() > 0.5 else -1)
return fruit
def draw():
screen.fill(bg)
screen.blit(background,(0,0))
for fruit in fruits:
fruit.draw()
screen.draw.text(
str(score),
(10,10),
fontsize=40,
color="white")
# Рисуем след лезвия
if len(blade) > 1: # Проверяем, что в списке blade есть хотя бы две точки
for i in range(1, len(blade)): # Проходим по всем точкам, начиная со второй
screen.draw.line(blade[i-1], blade[i], BLADE_COLOR) # Рисуем линию между текущей и предыдущей точкой следа
def update():
global score
for fruit in list(fruits):
update_fruit(fruit)
if fruit.y < - 50:
sounds.critical.play()
fruits.remove(fruit)
if random.random() < 0.03:
fruits.append(create_fruit())
# Проверяем разрезание
if len(blade) > 1:
for fruit in list(fruits):
if not fruit.sliced:
for i in range(1, len(blade)):
if (abs(blade[i][0] - fruit.x) < fruit.radius and
abs(blade[i][1] - fruit.y) < fruit.radius):
fruit.sliced = True
if fruit.type == 'bomb':
sounds.asterisk.play()
else:
score += 10
sounds.asterisk.play()
break
# Функция, вызываемая при движении мыши
def on_mouse_move(pos):
blade.append(pos) # Добавляем текущую позицию мыши в список следа лезвия
if len(blade) > 23:
blade.pop(0) # Удаляем первую точку, если длина следа превышает 20
pgzrun.go()