找回密码
 中文实名注册
搜索
楼主: 陈诺

陈诺的作品

[复制链接]

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-7-5 11:27:55 | 显示全部楼层
[Python] 纯文本查看 复制代码
import pygame
import socket
import threading
import json
import math

# ========== 修改这里!填入服务端电脑的局域网IPv4地址 ==========
SERVER_HOST = "192.168.2.34"
SERVER_PORT = 7788
# ==========================================================

# 窗口配置
WIDTH, HEIGHT = 800, 600
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("局域网多人联机驾驶游戏")
clock = pygame.time.Clock()

# 本地控制缓存
ctrl_angle = 0
ctrl_speed = 0
# 所有车辆同步数据
all_cars = {}
my_pid = None

# 连接服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((SERVER_HOST, SERVER_PORT))

def recv_loop():
    """持续接收服务器同步数据"""
    global all_cars, my_pid
    buf = b""
    while True:
        try:
            data = sock.recv(2048)
            if not data:
                break
            buf += data
            while b"\n" in buf:
                line, buf = buf.split(b"\n", 1)
                msg = json.loads(line.decode())
                if msg["type"] == "sync":
                    all_cars = msg["cars"]
                elif msg["type"] == "new_player":
                    if my_pid is None:
                        my_pid = msg["pid"]
                elif msg["type"] == "leave":
                    pid = msg["pid"]
                    if pid in all_cars:
                        del all_cars[pid]
        except:
            break
    print("与服务器断开连接")
    pygame.quit()

# 开启接收线程
threading.Thread(target=recv_loop, daemon=True).start()

def draw_car(x, y, angle, color):
    """绘制旋转小车"""
    car_surf = pygame.Surface((24, 40), pygame.SRCALPHA)
    pygame.draw.rect(car_surf, color, (0, 0, 24, 40))
    pygame.draw.rect(car_surf, (30, 30, 30), (2, 5, 20, 12))
    rotated = pygame.transform.rotate(car_surf, -angle)
    rect = rotated.get_rect(center=(x, y))
    screen.blit(rotated, rect)

# 主循环
running = True
while running:
    dt = clock.tick(60) / 1000.0

    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 按键控制
    keys = pygame.key.get_pressed()
    turn_speed = 120
    accel = 180
    friction = 0.92

    if keys[pygame.K_A]:
        ctrl_angle -= turn_speed * dt
    if keys[pygame.K_D]:
        ctrl_angle += turn_speed * dt
    if keys[pygame.K_W]:
        ctrl_speed += accel * dt
    if keys[pygame.K_S]:
        ctrl_speed -= accel * dt
    # 摩擦力减速
    ctrl_speed *= friction
    # 速度限制
    ctrl_speed = max(-120, min(120, ctrl_speed))

    # 发送控制指令到服务端
    send_msg = json.dumps({
        "type": "control",
        "angle": ctrl_angle,
        "speed": ctrl_speed
    }) + "\n"
    sock.send(send_msg.encode("utf-8"))

    # 渲染画面
    screen.fill((30, 80, 30))
    # 绘制道路边线
    pygame.draw.rect(screen, (70, 70, 70), (20, 20, WIDTH-40, HEIGHT-40), 4)

    # 绘制所有在线玩家车辆
    for pid, car_data in all_cars.items():
        draw_car(
            car_data["x"],
            car_data["y"],
            car_data["angle"],
            car_data["color"]
        )

    pygame.display.flip()

sock.close()
pygame.quit()
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-7-5 11:01:22 | 显示全部楼层
014定时器

main.py

3.86 KB, 下载次数: 0

售价: 10 金钱  [记录]  [购买]

回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-7-5 10:54:18 | 显示全部楼层
本帖最后由 陈诺 于 2026-7-5 10:55 编辑

013计算器

main.py

2.38 KB, 下载次数: 0

售价: 10 金钱  [记录]  [购买]

回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-6-14 10:57:42 | 显示全部楼层
012跑酷

main.py

4.59 KB, 下载次数: 0

售价: 10 金钱  [记录]  [购买]

点评

6.14打字40积分20  发表于 2026-6-14 11:52
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-6-7 11:43:28 | 显示全部楼层
011成语接龙

main.py

3.84 KB, 下载次数: 438

回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-6-7 11:26:19 | 显示全部楼层
010时钟

main.py

669 Bytes, 下载次数: 405

点评

6.7打字40积分20  发表于 2026-6-7 11:50
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-5-31 11:40:20 | 显示全部楼层
00.9学生证生成

main.py

5.5 KB, 下载次数: 1

售价: 10 金钱  [记录]  [购买]

点评

5.31打字40积分20  发表于 2026-5-31 11:42
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-5-10 10:51:30 | 显示全部楼层
本帖最后由 袁应海 于 2026-5-10 11:53 编辑

植物大战僵尸杂交版

main.py

18.75 KB, 下载次数: 503

点评

5.10打字40积分20,一节python20  发表于 2026-5-10 11:50
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-5-3 11:41:56 | 显示全部楼层
00.7  2D赛车

main.py

4.57 KB, 下载次数: 0

售价: 2 金钱  [记录]  [购买]

点评

5.3打字40积分20  发表于 2026-5-3 11:53
回复

使用道具 举报

12

主题

36

回帖

307

积分

中级会员

积分
307
 楼主| 发表于 2026-5-3 10:48:37 | 显示全部楼层
本帖最后由 陈诺 于 2026-5-3 11:16 编辑

00.7驾驶小游戏

main.py

5.63 KB, 下载次数: 524

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

快速回复 返回顶部 返回列表