找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 315|回复: 1

[原创] RenPyUtil:制作一个网络聊天小游戏

[复制链接]
发表于 2023-11-11 23:43:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 ZYKsslm 于 2023-11-12 00:37 编辑

使用ren_communicotar模块制作一个简单的网络聊天小游戏
上一个帖子的范例不是特别严谨,若想要实际项目中使用请仔细看下面的例子

服务端代码:


[RenPy] 纯文本查看 复制代码
init python:
    def conn_suc(socket):
        renpy.notify("连接成功!点击屏幕继续......")

    def conn_err(err):
        renpy.notify(f"出现异常:\n{err}")

    def receive(msg, socket):
        renpy.notify(f"接收到{socket.getpeername()[0]}的消息:\n{msg.decode('utf-8')}")


define e = Character("艾琳")
define server = RenServer()

screen leave():
    frame:
        align (0.0, 0.0)
        textbutton "返回标题":
            action MainMenu(save=False)

# 确保回到标题前关闭连接
label before_main_menu:
    if server.has_communicated:
        $ server.close()
    return

# 确保退出前关闭连接
label quit:
    if server.has_communicated:
        $ server.close()
    return


label start:

    e "请愉快地聊天吧!"
    menu:
        "继续":
            jump chat
        "算了":
            return
 
    return

label chat:
    show screen leave()
    python:
        with server:
            server.set_conn_event(conn_suc)
            server.set_receive_event(receive)
            server.set_error_event(conn_err)
            renpy.notify("开始连接!")
            server.run()
            server.listen_event(RenServer.CONNECT_EVENT, "正在连接中......")
            while True:
                content = renpy.input("说点什么呢?")
                for socket in server.client_socket_list:
                    if server.send(socket, content.encode("utf-8")):
                        renpy.notify("消息发送成功!")



客户端代码:
[RenPy] 纯文本查看 复制代码
init python:
    def conn_suc():
        renpy.notify("连接成功!点击屏幕继续......")

    def conn_err(err):
        renpy.notify(f"出现异常:\n{err}")

    def receive(msg):
        renpy.notify(f"接收到服务端消息:\n{msg.decode('utf-8')}")


define e = Character("艾琳")
define client = RenClient("192.168.2.23", 8888)

screen leave():
    frame:
        align (0.0, 0.0)
        textbutton "返回标题":
            action MainMenu(save=False)

# 确保回到标题前关闭连接
label before_main_menu:
    if client.has_communicated:
        $ client.close()
    return

# 确保退出前关闭连接
label quit:
    if client.has_communicated:
        $ client.close()
    return


label start:

    e "请愉快地聊天吧!"
    menu:
        "继续":
            jump chat
        "算了":
            return
 
    return

label chat:
    show screen leave()
    python:
        with client:
            client.set_conn_event(conn_suc)
            client.set_receive_event(receive)
            client.set_error_event(conn_err)
            renpy.notify("开始连接!")
            client.run()
            client.listen_event(RenClient.CONNECT_EVENT, "正在连接中......")
            while True:
                content = renpy.input("说点什么呢?")
                if client.send(content.encode("utf-8")):
                    renpy.notify("消息发送成功!")


 楼主| 发表于 2023-11-12 00:38:10 | 显示全部楼层
效果图发不出来,现在经验不够
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-4-29 16:53 , Processed in 0.061273 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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