RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3222|回复: 1

[原创] RenPy中的打地鼠

[复制链接]
发表于 2019-10-8 21:08:28 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 立笔犊 于 2019-10-8 21:11 编辑

如题,之前尝试过在RenPy中写一个打地鼠,不过一直没有成功。系统地学习了一下Python和面向对象的知识后再来改程序,最终做了出来这个打地鼠。

注意一下RenPy中有以下问题:
1、有很多种声明变量的方式,并且变量所在存储区十分奇怪,进行高级操作时有时会有找不到声明的变量的情况。
2、不是继承自Action类的action不可带参,否则会引发奇怪的bug。
之前这两个问题一直解决不了,所以一直失败。

现在的解决方法:
完全面向对象,全部写成类。
数据全放对象中从而避免RenPy名称空间混乱的问题。
方法全部使用类的数据从而避免RenPy非继承的动作函数不可带参的问题,

两个类:
Room类:定义了打地鼠中一个格子的基础状态、行为、变化。
MyGame类:统筹了4×4个格子的变化。

下面是效果视频和资源图,把图放到image文件夹下,再把代码贴在script.rpy等文件里即可(注意一下start标签不可重复):
游戏演示.zip (454.04 KB, 下载次数: 53)
关于这个不想讲太多,其实就是简单的面向对象,会简单python语法就会,一看就懂,否则就不会。
更多功能,比如记分、判定游戏结束等等,如果看得懂这些代码的话,要加进入也不难。

[RenPy] 纯文本查看 复制代码
init python:
    import random
    class Room():
        def __init__(self):
            self.state=0
        def display(self):
            if self.state == 0:
                ui.imagebutton(idle="apoto.png")
            else:
                ui.imagebutton(idle="apoto2.png",action=[self.click,SetScreenVariable("a",1)])

        def click(self):
            self.state=0

        def random(self):
            self.state=0
            result=random.randint(0,4)
            if result==0:
                self.state=1


    class MyGame():
        def __init__(self):

            self.grid=[]
            for i in range(0,16):
                self.grid.append(Room())

        def display(self):
            ui.grid(4,4,align=(0.5,0.5),spacing=20)
            #ui.vbox(align=(0.5,0.5))
            for room in self.grid:
                room.display()
            ui.close()

        def random(self):
            for room in self.grid:
                room.random()

    mygame=MyGame()

screen test():
    default a=1
    python:
        mygame.display()
    timer 2.0:
        action [mygame.random,SetScreenVariable("a",1)]
        repeat True

#游戏开始的标记
label start:
    call screen test

另外还有一点,RenPy中screen需要修改界面变量后才会刷新,否则即使实际上图片的现实改变了,但是screen没有刷新。所以需要声明一个界面变量default a=1,然后timer的action中用动作列表,带上更新界面变量,从而刷新。

评分

参与人数 2干货 +4 收起 理由
BuErShen + 3 鼓励原创!
龙氏 + 1 感谢分享!

查看全部评分

发表于 2020-1-16 18:01:50 | 显示全部楼层
学习一下,完全看不懂
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2021-7-29 13:42 , Processed in 0.047836 second(s), 12 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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