Задать вопрос
@gorilla251

Как исправить отображение в игре?

Простенькая игрушка на питоне-по типу слизарио. Игрок регается, выбирает ник и цвет, затем спавнится с начальным радиусом-15, и идет кушать нпс чтобы увеличиться в размерах. Есть условие, что при достижении радиуса 190 его увеличение останавливается, а на его экране все увеличивается в 2 раза, ну, чтобы было комфортное отображение и он не закрывал пол экрана. Соответственно, при увелечении и отображение нпс тоже увеличивается, т.е нпс уменьшаются в 2 раза. Сама проблема в том, что когда игрок увеличивается он начинает кушать нпс по своему хитбоксу, но отображение на его экране остается маленьким, что делает игру пользователя не корректной. По моим догадками нужно что то покрутить в painting, а точнее с current_rad и radius_mult. Могу скинуть код сервера в ответы комма, но наврядли там что то нужное. Прошу, если есть какие то другие ошибки не надо на них указывать, мне щас нужна только проблема с отображением
import pygame
import socket
from pygame import *
import time
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mb
clock = pygame.time.Clock()
pygame.init()
root  = tk.Tk()
root.geometry("400x500")
style = ttk.Style()
style.theme_use('default')
colors = ['Maroon', 'DarkRed', 'FireBrick', 'Red', 'Salmon', 'Tomato', 'Coral', 'OrangeRed', 'Chocolate', 'SandyBrown',
        'DarkOrange', 'Orange', 'DarkGoldenrod', 'Goldenrod', 'Gold', 'Olive', 'Yellow', 'YellowGreen', 'GreenYellow',
        'Chartreuse', 'LawnGreen', 'Green', 'Lime', 'SpringGreen', 'MediumSpringGreen', 'Turquoise',
        'LightSeaGreen', 'MediumTurquoise', 'Teal', 'DarkCyan', 'Aqua', 'Cyan', 'DeepSkyBlue',
        'DodgerBlue', 'RoyalBlue', 'Navy', 'DarkBlue', 'MediumBlue']
def change(event):
    global choose_color
    choose_color = various_colors.get()
    style.configure('TCombobox', background = 'white', fieldbackground = choose_color)
name  = ''
def registration():
    global name
    name = entry.get()
    if name:
        if choose_color in colors:
            mb.showinfo("Вы успешно зарегестрировались")
            root.quit()
            root.destroy()
    else:
        mb.showerror("Неправильный ввод")
label = tk.Label(root, text="Введите ваше имя")
label.place(height=100, width=400, x = 0, y = 0)
entry = tk.Entry(root)
choose_color = ""
various_colors = ttk.Combobox(root, values = colors, textvariable = choose_color)
various_colors.place(height=100, width=400, x = 0, y = 300)
various_colors.bind("<<ComboboxSelected>>", change)
entry.place(height=100, width=400, x = 0, y = 100)
choosecolor = tk.Label(root, text="Выберите цвет", background="Salmon")
choosecolor.place(height=100, width=400, x = 0, y = 200)
button = tk.Button(text="Подтвердите вход", command = registration)
button.place(height=100, width=400, x = 0, y = 400)
root.mainloop()
main = socket.socket(socket. AF_INET, socket.SOCK_STREAM)
main.connect(('localhost', 10000))
main.send(f"{name},{choose_color}".encode())
game_display = pygame.display.set_mode((800, 600))
center_x = 400
center_y = 300
game  = True
radius = 15
current_rad = 15
def painting():
    global current_rad
    game_display.fill((125,125,125))
    try:
        data = main.recv(1024).decode()
        all_players = data.split(';')
        new_rad = all_players[-1]
        current_rad = float(new_rad)
        radius_mult = 1 + (current_rad//50)
        if data == 'notning':
            pass
        else:
            for player in all_players[:-1]:
                torch = player.split(',')
                name = torch[0]
                posx = float(torch[1]) + 400
                posy = float(torch[2]) + 300
                rad = int(torch[3])
                user_color = torch[4] 
                pygame.draw.circle(game_display, user_color, (posx, posy), rad / radius_mult)
    except:
        pass
    pygame.draw.circle(game_display, choose_color,(center_x, center_y),current_rad / radius_mult)
    print(20+(current_rad % (radius_mult)))
    pygame.display.flip()
    pygame.display.update()
while game:
    clock.tick(25)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game = False
    painting()
    if pygame.mouse.get_pressed()[0]:
        cord = mouse.get_pos() 
        vector = (cord[0] - center_x, cord[1] - center_y )
        lenv = (vector[0]**2 + vector[1]**2)**0.5
        vector = (vector[0]/lenv, vector[1]/lenv)
        if lenv > radius:
            send = (f"{vector[0]}:{vector[1]}")
            main.send(send.encode())
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы