马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 烈林凤 于 2024-8-19 16:45 编辑
2024-8-18更新:重新优化了代码,将5个transform合并成2个(其实可以只用一个,但不利于维护,不建议合并);添加了“重新开始”按钮,将点击其他盒子下落的行为改成了空行为,将原本的行为注释掉了
———————————————————————————————————————————————————————————————————————————
因为在论坛上看到了@leech 发的一篇猜球盅小游戏插件,发现其代码优化的空间还有很大,而且局限性也很大
于是,我便以小游戏的规则,按照自己的思路写了一个有着更高自由度的猜球盅小游戏,原理很简单,可以根据自己的需要去更改内核以适配自己的游戏。
*此版本的优点:
1-盒子的数量可以任意选择,不过过多的盒子数量会导致程序卡顿,解决方式是去掉hover的部分
2-只需要2~3张图片——盒子的idle、hover图片和骰子的图片
3-骰子和盒子的位置替换是完全随机的,无需使用固定的变换样式
4-有着更丰富的动画效果
该版本的思路和原理较为简单,但使用了许多不常用的renpy界面语言,因此不建议对renpy还不熟悉的同学使用,具体的写法已经放在注释中了,有需要请自行查阅文档
该教程使用的是8.2.1版本,请尽可能换成此版本或更高的版本,低版本有可能发生报错!
该教程内的所有代码都可以尽情改编,如果需要改编或直接放入自己的游戏当中,请表明出处,感谢!
接下来是教程内所使用的代码——[RenPy] 纯文本查看 复制代码 label ceshi_19:
## 改变盒子数量
$ random_num_19 = 16
call screen screen_dicegame_19()
## 定义图片
image dicegame_box_idle:
"#92c1ffff"
xysize(80,150)
image dicegame_box_hover:
"#9992ffff"
xysize(80,150)
image dicegame_dice:
"#ffe292ff"
xysize(50,50)
## 定义随机变量函数
init python:
import random
random_num_19 = 6 ## 盒子数量
random_list_19 = [] ## 盒子序列列表
random_xpos_list_19 = [] ## 盒子位置列表
dice_tf = None ## 判断骰子的状态,None表示未开始,False表示抬起,True表示落下
## 将每一个盒子都绑定一个数字,并随机排列
def random_box():
random_list_19.clear()
for i in range(random_num_19):
random_list_19.append(i)
random.shuffle(random_list_19)
## 使每一个盒子都获得一个位置,并随机排列
def random_xpos():
random_xpos_list_19.clear()
for i in range(random_num_19):
random_xpos_list_19.append(960-random_num_19*50+i*100)
random.shuffle(random_xpos_list_19)
## 变换行为
## 盒子的状态
transform random_pos_box(linear_x,pos_x,linear_y,pos_y):
parallel:
linear linear_x xpos pos_x
parallel:
linear linear_y ypos pos_y
## 盒子不同状态时,骰子的状态
transform random_pos_dice(pos_x,alpha_num):
ypos 600
xpos pos_x+15
linear 0.5 alpha alpha_num
## 本体界面
screen screen_dicegame_19():
## 界面出现时调用函数(初始化)
on "show" action [Function(random_box),Function(random_xpos)]
vbox:
xycenter(0.5,0.7)
## 每次点击使盒子和骰子的位置随机打乱
## 可以使用使用循环,使每次点击后进行多次换位
textbutton "打乱骰子":
action Function(random_xpos)
## 点击后将盒子落下
textbutton "猜选骰子":
action SetVariable("dice_tf",True)
## 点击后将盒子抬起
textbutton "重新开始":
action SetVariable("dice_tf",False)
for i in random_list_19:
button:
anchor(0.0,1.0)
vbox:
## 将vbox翻转,保证骰子的图层在盒子下
box_reverse True
## 骰子
if i == 0:
## 改变骰子的状态
if (dice_tf == None) or (dice_tf == False):
add "dicegame_dice" at random_pos_dice(random_xpos_list_19[i],1.0)
elif dice_tf == True:
add "dicegame_dice" at random_pos_dice(random_xpos_list_19[i],0.0)
else:
## 使用null占位,防止高度不一致
## 这里的大小需要与骰子大小一致
add Null(width=50, height=50)
## 盒子
imagebutton:
idle "dicegame_box_idle"
hover "dicegame_box_hover"
## 将藏有骰子的盒子设定为0
if i == 0:
## 正确时将盒子打开
action SetVariable("dice_tf",False)
else:
action NullAction()
## 错误时将盒子关闭
## 可以设计成计数器,每次猜错时+1,到达一定数量游戏失败
# action SetVariable("dice_tf",True)
## 改变盒子的状态
if dice_tf == None:
at random_pos_box(0,random_xpos_list_19[i],0,600)
elif dice_tf == False:
at random_pos_box(1.0,random_xpos_list_19[i],0.5,600)
elif dice_tf == True:
at random_pos_box(1.0,random_xpos_list_19[i],0.5,660)
有任何问题请在楼下留言说明,希望各位用得高兴(@·v·@)
结束
|