Как мне создать пропорцию в Python?

Я понимаю, что у меня уровень новичка, поэтому постараюсь объяснить ситуацию кратко. Я учусь в школе программирования и, к сожалению, забыл некоторые элементы кодирования. В данный момент мы разрабатываем игру на сервере, похожую на Slither.io, но с небольшими персонажами (крудочками). Это не столь важно, но нам необходим экран. Вот пример кода: 

```python
import time 
import psycopg2 as psy 
from sqlalchemy import create_engine 
from sqlalchemy.orm import declarative_base 
from sqlalchemy import Column, Integer, String 
from sqlalchemy.orm import sessionmaker 
import socket 
import random 
import pygame 

engine = create_engine("postgresql+psycopg2://postgres:19831984@localhost/test_base") 
dec_base = declarative_base() 
game_display = pygame.display.set_mode((800,600)) 
fieldx = 7000 
fieldy = 7000 
main = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
main.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY,1) 
main.bind(('localhost', 10000)) 
main.setblocking(False) 
main.listen(5) 
print("socket is running") 
users = {} 
clock = pygame.time.Clock() 

class Tab(dec_base): 
    __tablename__ = "Users" 
    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True) 
    name = Column(String(250), nullable=False) 
    address = Column(String(250)) 
    posx = Column(Integer) 
    posy = Column(Integer) 
    radius = Column(Integer, default=50) 
    abs_speed = Column(Integer, default=1) 
    speedx = Column(Integer, default=0) 
    speedy = Column(Integer, default=0) 

    def __init__(self, name, address): 
        self.name = name 
        self.address = address 
        self.posx = random.randint(0, 7000)
```

Могу ли я получить помощь с реализацией отображения экрана в этой игре?
  • 29 марта 2025 г. 17:05
Ответы на вопрос 1
Конечно! Ваша задача заключается в создании экрана для игры, на котором будут отображаться игроки, их позиции и другие элементы. Давайте разберем, как вы можете это сделать с помощью библиотеки Pygame.

1. **Инициализация Pygame**: Убедитесь, что вы инициализировали Pygame перед тем, как создавать окно игры.

2. **Отображение игроков**: Вы можете создать функцию, которая будет отвечать за отрисовку игроков на экране в зависимости от их координат.

3. **Главный игровой цикл**: Вам нужно создать главный игровой цикл, который будет обновлять окно и обрабатывать события (например, нажатия клавиш).

Вот модифицированный пример вашего кода с добавлением основной структуры для отображения экрана:

```python
import time
import psycopg2 as psy
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
import socket
import random
import pygame

# Инициализация Pygame
pygame.init()

# Создание окна
game_display = pygame.display.set_mode((800, 600))
pygame.display.set_caption("My Game")

# Основные параметры
fieldx = 7000
fieldy = 7000
main = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
main.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
main.bind(('localhost', 10000))
main.setblocking(False)
main.listen(5)
print("Socket is running")
users = {}
clock = pygame.time.Clock()

class Tab(dec_base):
    __tablename__ = "Users"
    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
    name = Column(String(250), nullable=False)
    address = Column(String(250))
    posx = Column(Integer)
    posy = Column(Integer)
    radius = Column(Integer, default=50)
    abs_speed = Column(Integer, default=1)
    speedx = Column(Integer, default=0)
    speedy = Column(Integer, default=0)

    def __init__(self, name, address):
        self.name = name
        self.address = address
        self.posx = random.randint(0, 7000)
        self.posy = random.randint(0, 7000)

def draw_user(user):
    # Отрисовка игрока (кружок)
    pygame.draw.circle(game_display, (255, 0, 0), (user.posx // 10, user.posy // 10), user.radius // 10)

def main_loop():
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        # Очистка экрана
        game_display.fill((0, 0, 0))

        # Отрисовка всех пользователей
        for user in users.values():
            draw_user(user)

        # Обновление дисплея
        pygame.display.flip()
        clock.tick(60)  # Ограничение FPS до 60

    pygame.quit()

if __name__ == "__main__":
    main_loop()
```

### Основные моменты:
1. **Инициализация Pygame**: Вы вызываете `pygame.init()`, чтобы инициализировать все модули Pygame.

2. **Отображение игроков**: Функция `draw_user()` отрисовывает каждого игрока с использованием функции `pygame.draw.circle()`.

3. **Главный игровой цикл**: В `main_loop()` вы обрабатываете события, очищаете экран, обновляете расположение игроков и обновляете дисплей.

### Примечание:
- Если ваши координаты в базе данных пользователя больше 8000 (в соответствии с вашим полем), на экране они могут не отображаться правильно. Я добавил `// 10` для уменьшения координат, чтобы они помещались в пределах экрана. Это можно настроить по вашему усмотрению.
  
Теперь вы можете экспериментировать с отображением и контролировать игроков на экране!
Похожие вопросы