Приношу извинения, если код нафарширован визуальными ошибками. Пока только изучаю принцип работы. Если файлы нужны: могу скинуть.
import pygame
import time
import random
import os
import sys
# ~ инициализация фона
pygame.font.init()
pygame.font.SysFont('arial', 15)
# ~ инициализация звука
pygame.mixer.init()
# ~ инициализация дисплея
pygame.display.init()
# ~ окно:
screen=pygame.display.set_mode((600,600))
# ~ фуллскрин:
# ~ screen=pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
# ~ получение размеров дисплея
sW, sH = screen.get_size()
# ~ функция сохранения пути файлов для формовки ехе
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
game_folder = os.path.dirname(__file__)
########################################################################
# ~ загрузка звука
kluv_sound = pygame.mixer.Sound("sound/1kick.mp3")
s_back = pygame.mixer.Sound("sound/back_sound.mp3")
chikin_voice = pygame.mixer.Sound("sound/chikin_voice.mp3")
# ~ загрузка файлов изображений
img_folder = os.path.join(game_folder, 'sprites')
player_img1 = pygame.image.load(resource_path('sprites/chikin.png'))
player_img2 = pygame.image.load(resource_path('sprites/chikin_3.png'))
player_img3 = pygame.image.load(resource_path('sprites/chikin_2.png'))
player_img_dead = pygame.image.load(resource_path('sprites/chikin_dead.png'))
btn_food = pygame.image.load(resource_path('sprites/btn_food.png'))
btn_energy = pygame.image.load(resource_path('sprites/btn_energy.png'))
bg = pygame.image.load(resource_path('sprites/background.png'))
player_poo_img = pygame.image.load(resource_path('sprites/poo.png'))
# ~ вариант загрузки файла без дампирования для компиляции
health_img = pygame.image.load(os.path.join(img_folder, 'hart1.png'))
energy_img = pygame.image.load(os.path.join(img_folder, 'energy1.png'))
food_img = pygame.image.load(os.path.join(img_folder, 'food.png'))
# ~ Переменные:
FPS=29
BLACK=(0,0,0)
WHITE=(255,255,255)
GRAY=(192,192,192)
YELLOW=(255,255,0)
Health_point=100
Energy_point=100
Food_point=100
hourse=0
years=0
seconds=0
pl_pos=dm=sW/2
pl_x=(sH/4)*3
speed=2
dm_time=dm_time_rand=0
t=0
n=0
scale=(80,80)
s=1
v_c_rand1=0
v_c_rand2=200
all_player_poo = 0
f1 = pygame.font.Font((os.path.join(img_folder, 'vcrosdmonorusbyd.ttf')), 15)
class Player (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = player_img1
self.image = pygame.transform.scale(self.image,(scale))
self.rect = self.image.get_rect()
self.rect.center=((int(pl_pos)), (pl_x))
class Health (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = health_img
self.image = pygame.transform.scale(health_img,(20,20))
self.rect = self.image.get_rect()
self.rect.center=(10, 85)
class Energy (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = energy_img
self.image = pygame.transform.scale(energy_img,(20,20))
self.rect = self.image.get_rect()
self.rect.center=(10, 55)
class Food (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = food_img
self.image = pygame.transform.scale(food_img,(20,20))
self.rect = self.image.get_rect()
self.rect.center=(10, 25)
class Btn_Food (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = btn_food
self.image = pygame.transform.scale(btn_food,(50,50))
self.rect = self.image.get_rect()
self.rect.center=(sW-50, sH/4)
class Btn_Energy (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = btn_energy
self.image = pygame.transform.scale(btn_energy,(50,50))
self.rect = self.image.get_rect()
self.rect.center=(sW-50, sH/4+70)
class Player_poo (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = player_poo_img
self.image = pygame.transform.scale(player_poo_img,(25,25))
self.rect = self.image.get_rect()
self.rect.center=((pl_pos), (pl_x+15))
# ~ функция смены изображения во время передвижения
def Anim_step():
if t > 2:
player.image = player_img1
if n == 1:
player.image = pygame.transform.flip(player_img1,False,False)
else:
player.image = pygame.transform.flip(player_img1,True,False)
player.image = pygame.transform.scale(player.image,(scale))
else:
player.image = player_img2
if n == 1:
player.image = pygame.transform.flip(player_img2,False,False)
else:
player.image = pygame.transform.flip(player_img2,True,False)
player.image = pygame.transform.scale(player.image,(scale))
# ~ функция клевания
def Klyvanie():
if t > 2:
player.image = player_img1
if n == 1:
player.image = pygame.transform.flip(player_img1,False,False)
else:
player.image = pygame.transform.flip(player_img1,True,False)
player.image = pygame.transform.scale(player.image,(scale))
else:
player.image = player_img3
if n == 1:
player.image = pygame.transform.flip(player_img3,False,False)
else:
player.image = pygame.transform.flip(player_img3,True,False)
player.image = pygame.transform.scale(player.image,(scale))
# ~ функция смерти
def Dead ():
player.image = player_img_dead
player.image = pygame.transform.scale(player.image,(scale))
# ~ функция появления какашек и их учет
player_poo_group = pygame.sprite.Group()
def player_poo_upd():
player_poo_pos = (pl_pos), (pl_x+15)
player_poo=Player_poo()
if v_c_rand1 == 100:
all_sprites.add(player_poo)
player_poo_group.add(player_poo)
global all_player_poo
all_player_poo += 1
########################################################################
#инициализация и запуск программы
pygame.init()
s_back.play(-1)
s_back.set_volume(0.008)
chikin_voice.set_volume(0.05)
clock=pygame.time.Clock()
all_sprites = pygame.sprite.Group()
player = Player()
health = Health ()
energy = Energy ()
food = Food ()
btn_food = Btn_Food()
btn_energy = Btn_Energy()
all_sprites.add(player, health, energy, food, btn_food, btn_energy)
running = True
while running:
clock.tick(FPS)
# ~ выход из игры
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# ~ #управление с клавиатуры
if event.type == pygame.KEYDOWN:
# ~ if event.key == pygame.K_UP:
# ~ if Health_point >0:
# ~ Food_point=100
# ~ if event.key == pygame.K_DOWN:
# ~ if Health_point >0:
# ~ Energy_point=100
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
# ~ управление с мыши:
if event.type == pygame.MOUSEBUTTONDOWN:
m_pos_x,m_pos_y = pygame.mouse.get_pos()
m_position=(m_pos_x,m_pos_y)
print (m_position)
if event.button == 1:
if btn_energy.rect.collidepoint(m_position):
if Health_point >0:
Energy_point=100
if btn_food.rect.collidepoint(m_position):
if Health_point >0:
Food_point=100
if player_poo.rect.collidepoint(m_position):
print ('-----')
# ~ #движение птички и разворот в направлении
if pl_pos > dm+1:
pl_pos -=speed
pl_pos=int(pl_pos)
Anim_step()
player.rect.center=(pl_pos,pl_x)
t+=1
if t >= 7:
t = 0
n=1
# ~ модуль голоса курочки
v_c_rand1=random.randint(0,v_c_rand2)
if v_c_rand1 == 100:
chikin_voice.play()
v_c_rand2=200
if pl_pos < dm-1:
pl_pos +=speed
pl_pos=int(pl_pos)
Anim_step()
player.rect.center=(pl_pos,pl_x)
t+=1
if t >= 7:
t = 0
n=0
# ~ модуль голоса курочки
v_c_rand1=random.randint(0,v_c_rand2)
if v_c_rand1 == 200:
chikin_voice.play()
v_c_rand2=100
# Дефикация курочки
player_poo_upd()
# ~ #задержка на позиции
if pl_pos == dm+1 or pl_pos == dm-1 or pl_pos == dm:
dm_time+=1
t+=1
if t >= 10:
t = 0
Klyvanie()
#звук клевка
if t == 9:
kluv_sound.play()
if dm_time >= dm_time_rand:
dm = int(random.randint(20, sW))
dm_time_rand = int(random.randint(10, 70))
dm_time=1
# ~ #зависимость здоровья от еды и энергии
# ~ снижение еды и энергии
if Food_point>0:
Food_point-=0.01
if Energy_point<=0:
Energy_point=0
Food_point-=0.03
if Energy_point>0:
Energy_point -=0.03
if Food_point <=0:
Food_point=0
Energy_point -=0.05
# ~ Снижение здоровья
if Food_point <= 1 and Energy_point <= 1:
Health_point -=1
speed=1
elif Food_point <= 1 or Energy_point <= 1 or all_player_poo > 20:
Health_point -=0.02
speed=1
# ~ #восстанавливаем здоровье
if Food_point >90 and Energy_point >90 and Health_point <= 99:
Health_point +=1
speed=2
# ~ #Птичка сдохла
if Health_point < 1:
Health_point=0
dm=pl_pos
Dead()
screen.blit(text5, (300, 20))
# ~ Счетчик прожитого времени
if Health_point > 0:
hourse=pygame.time.get_ticks()/10000
else: hourse = hourse
if hourse > 365:
years +=1
all_sprites.update()
# отрисовка фона
bg = pygame.transform.scale(bg,(sW,sH))
screen.blit(bg,(0,0))
# отрисовка текста на экране
text1 = f1.render(("Жрачка: " + str(round(Food_point))), True,(180, 0, 0))
text2 = f1.render(("Энергия: " + str(round(Energy_point))), True,(YELLOW))
text3 = f1.render(("Здоровье: " + str(round(Health_point))), True,(180, 0, 0))
text4 = f1.render(("прожито :" + str(round(years)) + " лет и " + str(round(hourse)) + " дней "), True,(180, 0, 0))
text5 = f1.render("СДОХ =(" , True,(180, 0, 0))
if Health_point < 1:
screen.blit(text5, (sW/2, sH/2))
screen.blit(text4, (300, 20))
else:
screen.blit(text1, (25, 20))
screen.blit(text2, (25, 50))
screen.blit(text3, (25, 80))
screen.blit(text4, (sW/2, sH/30))
all_sprites.draw(screen)
pygame.display.flip()
pygame.quit()