實(shí)現(xiàn)多客戶彈彈幕
server_barrage.py
import socket
from threading import Thread
import pygame
from random import randint
global texts
texts = []
class Text_barrage:
def __init__(self, title):
self.speed = 1
self.pox_x = 700
self.pox_y = randint(10, 160)
self.title = title
self.color = (randint(100, 255), randint(100, 255), randint(100, 255))
class ClientThread(Thread):
def __init__(self, c, addr):
super().__init__()
self.c = c
self.addr = addr
def run(self):
while True:
try:
data = self.c.recv(1024).decode()
text_barrage = Text_barrage(data)
texts.append(text_barrage)
print(str(self.addr)+'>>>'+data)
except ConnectionResetError:
print(str(self.addr)+' close connection')
break
class ServerThread(Thread):
def __init__(self, ip, port):
super().__init__()
self.ip = ip
self.port = port
def run(self):
server = socket.socket()
server.bind((self.ip, self.port))
server.listen(512)
while True:
c, addr = server.accept()
client = ClientThread(c, addr)
client.start()
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((600, 200))
pygame.display.set_caption('barrage')
font = pygame.font.Font('./aa.ttf', 30)
ServerThread('10.7.181.82', 8080).start()
while True:
screen.fill((0, 0, 0))
if len(texts) > 0:
for t in texts[:]:
if t.pox_x < 0-len(t.title)*40:
texts.remove(t)
else:
title = font.render(t.title, True, t.color)
screen.blit(title, (t.pox_x, t.pox_y)
t.pox_x -= t.speed
pygame.time.delay(5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame.display.flip()
client_barrage.py
import socket
if __name__ == '__main__':
client = socket.socket()
client.connect(('10.7.181.82', 8080))
while True:
message = input('>>>')
client.send(message.encode())
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者