Простенькая игрушка на питоне-по типу слизарио. Игрок регается, выбирает ник и цвет, затем спавнится с начальным радиусом-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())