Создание камеры в pygame (сверху вниз) [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание камеры в pygame (сверху вниз) [дубликат]

Сообщение Anonymous »

Я пытался добавить камеру в эту игру, но спустя 999 лет мне это не удалось, поэтому скажите, пожалуйста, как можно добавить камеру в этот ориентированный на игрока код. Заранее спасибо. и да, я знаю, что код очень кривой и плохой, я новичок в программировании
полный код: (на питоне 3.10.11 с pygame)

Код: Выделить всё

import pygame
import random
import sys
import time as t
#import world_gen as rg

pygame.init()

WIDTH, HEIGHT = 800, 600
FPS = 60
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
BROWN = (139, 69, 19)
SCROLLX=0
MAPS={}

with open("default/map.map") as f:
MAPS["map_default1"]=f.read().splitlines()
f.close()

font = pygame.font.Font(None, 36)
font_big = pygame.font.Font("VGAFIXR.FON", 30)

staisticks_killed_mobs = 0

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("grayrpg")

class Chest(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.transform.scale(pygame.image.load("sprites\chest.png"), (50,50))
self.rect = self.image.get_rect(topleft=(x, y))
self.open_message = False
self.active = True

def check_interaction(self, player):
if self.rect.colliderect(player.rect):
self.open_message = True
else:
self.open_message = False

def open(self):
self.active = False
return get_random_item(),get_random_item()
class Exit(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill(BLUE)
self.rect = self.image.get_rect(topleft=(x, y))

class Inventory:
def __init__(self, player):
self.player = player
self.items = [("тренеровочный меч", 10)]
self.selected_index = 0
self.visible = False
self.bca=2

def toggle(self):
self.visible = not self.visible

def add_item(self, item):
self.items.append(item)
def delete_item(self):
self.items.pop(self.selected_index)

def select_next(self):
self.selected_index = (self.selected_index + 1) % len(self.items)

def select_previous(self):
self.selected_index = (self.selected_index - 1) % len(self.items)

def apply_selection(self):
if self.items:
self.player.attack_damage = self.items[self.selected_index][1]

def draw(self, surface):

if self.visible:
pygame.draw.rect(surface, WHITE, (100, 100, 600, 400))
pygame.draw.rect(surface, BLACK, (100, 100, 600, 400), 2)

for index, (item, damage) in enumerate(self.items):
color = (0, 0, 0)
if index == self.selected_index:
color = (255, 0, 0)
screen.blit(font.render(f"СТАТЫ:\nDMG:{damage}\nSPD:{player.speed}\nBCA:{2}",False,RED), (10, 70))
item_text = font.render(f"{item}", True, color)
rarity_text = font.render("редкая...", True, GREEN)
damage_text = font.render(f'дамаг: {damage}', True, RED)

surface.blit(item_text, (120, 120 + index * 80))
surface.blit(rarity_text, (120, 140 + index * 80))
surface.blit(damage_text, (120, 160 + index * 80))
try:
current_weapon_text = font.render(f'текущее оружие:  {self.items[self.selected_index][0]}', True, BLACK)
surface.blit(current_weapon_text, (120, 360))
except:
abc=1

selection_text = font.render("СТРЕЛОЧКИ(ВЫБОР)\nENTER(ПРИНЯТЬ)\nX(ВЫКИНУТЬ)", True, RED)
surface.blit(selection_text, (120, 400))

class Player(pygame.sprite.Sprite):
def __init__(self):

super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill(GREEN)
self.rect = self.image.get_rect(center=(WIDTH // 2, HEIGHT - 100))
self.health = 100
self.hungry = 100
self.attack_damage = 10
self.speed = 5
self.bessmertie = False
self.bessmertie_start_time = 0
self.bessmertie_time = 500
self.attack_radius = 75
self.attacking = False
self.attack_start_time = 0
self.attack_duration = 500
self.current_quest=1#
self.current_quest1 = "убей 3 моба"
self.stamina = 100
self.current_quest1_vipolnenie = 0
self.current_quest1_vipolnenie_max = 3
self.current_quest2 = "открой инвентарь"
self.current_quest2_vipolnenie = 0
self.current_quest2_vipolnenie_max = 1
self.dop_heals= 3
self.timeheal_timer=3000
self.istimeheal = True
self.healsheal=10
self.attack_stam=2
self.iswaited=False
self.dmg_mult=1
self.max_health=100
self.upgrade_DMG=0.0
self.upgrade_STM=0.0
self.max_stm=100.0
self.stats={"DAMAGE":self.dmg_mult}
self.rect.x=100
self.rect.y=100
self.old=[]

def update(self, scrollx):
keys = pygame.key.get_pressed()
if keys[pygame.K_LSHIFT] and self.iswaited==False or keys[pygame.K_RSHIFT] and self.iswaited==False:
if player.stamina>10.0:
self.upgrade_STM+=0.1
if self.upgrade_STM>100.0:
self.max_stm+=10
self.speed + 10
player.stamina-=0.1
elif self.iswaited:
self.speed-=self.attack_stam
else:
if self.iswaited!=True:
self.iswaited=False
self.speed = 5
if player.stamina=1:
self.dop_heals-=1
self.health+self.healsheal

if self.bessmertie:
current_time = pygame.time.get_ticks()
if current_time - self.bessmertie_start_time > self.bessmertie_time:
self.bessmertie = False
self.image.fill(GREEN)

if self.attacking:
current_time = pygame.time.get_ticks()
if current_time - self.attack_start_time >  self.attack_duration:
self.attacking = False
self.image.fill(GREEN)

def attack(self, enemies):
if self.stamina>10:
self.upgrade_DMG+=1
self.attack_stam=True
self.attacking = True
self.attack_start_time = pygame.time.get_ticks()
self.image.fill((255, 255, 0))
self.stamina-=10
for enemy in enemies:
if self.rect.colliderect(enemy.rect.inflate(self.attack_radius, self.attack_radius)):
enemy.take_damage(self.attack_damage)
break

def draw(self, surface):
if self.attacking:
pygame.draw.circle(surface, (255, 255, 0, 100), self.rect.center, self.attack_radius, 1)
surface.blit(self.image, (self.rect.x,self.rect.y))

def take_damage(self, amount):
if not self.bessmertie:
self.health -= amount
if self.health  self.rect.x:
self.rect.x += self.speed
if player.rect.y < self.rect.y:
self.rect.y -= self.speed
elif player.rect.y >  self.rect.y:
self.rect.y += self.speed

def take_damage(self, amount):
self.health -= amount
if self.health 

Подробнее здесь: [url]https://stackoverflow.com/questions/79106895/creating-a-camera-in-pygame-topdown[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»