day24-弹幕

实现多客户弹弹幕

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())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,714评论 25 709
  • 学生保险我们都有两个可以报,一个是城镇医疗保险,一个是太平洋保险。 1.医疗保险: 医疗保险是在医院报销的,住院期...
    刘刘刘刘刘大地阅读 248评论 0 0
  • 不要夸张和怪异的图像 儿童房的色彩很重要,但是色彩不宜太过夸张,也不要贴上或者画上很怪异的画像,最好是能贴上可爱的...
    小芋圆阅读 223评论 0 0
  • 前排女孩头发的香味飘过来,被不安的心给紧紧的 牢牢的攥在手里,慢慢的自己也就随之平静下来 当自己逐渐熟悉这个香味时...
    空白浮阅读 307评论 0 0