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)
self.posy = random.randint(0,7000)
print('1')
dec_base.metadata.create_all(engine)
session = sessionmaker(bind = engine)
s = session()
class User:
def __init__(self, name, id, color, address, socket):
self.name = name
self.id = id
self.db:Tab = s.get(Tab, self.id)
self.score = 0
print(self.db)
self.posx = self.db.posx
self.posy = self.db.posy
self.speed = 5
self.radius = 50
self.color = color
self.address = address
self.socket = socket
def painting():
game_display.fill((128,128,128))
for i in list(users):
local_user3 = users[i]
x = (local_user.posx / fieldx) * game_display.get_width()
y = (local_user.posy / fieldy) * game_display.get_height()
radius = local_user3.radius
color = local_user3.color
pygame.draw.circle(game_display, color, (int(x), int(y)), radius)
pygame.display.flip()
print('2')
while 1:
clock.tick(3)
painting()
try:
client_socket, client_addres = main.accept()
local_user = Tab(name = "Bob", address = client_addres)
s.merge(local_user)
s.commit()
clientaddres = f"({client_addres[0]},{client_addres[1]})"
print(clientaddres)
data = s.query(Tab).filter(Tab.address == clientaddres).first()
print(data)
local_user2 = User(name = "Andrew", id = data.id, color = None, address = clientaddres, socket = client_socket)
users [client_addres] = local_user2
print(f"пользователь {client_addres} зашел")
except Exception as e:
print(e)
pass
for i in list(users):
try:
data = users[i].socket.recv(1024).decode()
if data:
vector = (data[:data.find(':')], data[data.find(":")+1:])
print(vector)
except Exception as e:
print(e)
pass
Проблема в отрисовке кругов в функции painting, говорит мол не правильный аргумент color, вообще не понимаю что не так с пропорцией, помогите кто может