Конечно! Ваша задача заключается в создании экрана для игры, на котором будут отображаться игроки, их позиции и другие элементы. Давайте разберем, как вы можете это сделать с помощью библиотеки 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` для уменьшения координат, чтобы они помещались в пределах экрана. Это можно настроить по вашему усмотрению.
Теперь вы можете экспериментировать с отображением и контролировать игроков на экране!