MsYqgzt
本帖最后由 MsYqgzt 于 2016-4-16 18:29 编辑

    点击对应标题跳转页码


      相关链接:【TCP|chengzi_SC】1.8多人小游戏 Vampre Z-吸血鬼大战
大家好,今天来讲解一下吸血鬼大战的运行原理





1、计分板系统&游戏机制
增加的计分板有:死亡数、杀死生物数、幸存者和吸血鬼两个队伍、以及一个VampireZ 主计分板、还有附加一些其他的变量(人数判定、回合切换等)、商店系统必要的一些变量:shop、money和blood
  1. /scoreboard objectives add Vampires dummy ┣     Vampire Z    ┫
复制代码
  1. /scoreboard objectives add kill totalKillCount kill
复制代码
  1. /scoreboard objectives add death deathCount death
复制代码

队伍:

  1. /scoreboard teams add survivor
复制代码
  1. /scoreboard teams add vampires
复制代码

商店计分板:

  1. /scoreboard objectives add shop dummy shop
复制代码
  1. /scoreboard objectives add money dummy money
复制代码
  1. /scoreboard objectives add blood dummy blood
复制代码


在主计分板加入一系列假名,实现这样的效果



根据游戏规则,幸存者每杀死一个吸血鬼或僵尸,都会有金钱加成,吸血鬼同理,幸存者死亡变为吸血鬼



系统为一个分支脉冲


金钱奖励的系统为右侧的黄色和绿色羊毛处
黄色羊毛(幸存者)
  1. /testfor @a[team=survivor,score_kill_min=1]
复制代码
不断探测是否有杀敌数为1的幸存者


如果有,按顺序执行以下:
  1. /scoreboard players add @a[team=people,score_kill_min=1] money 8
复制代码
将钱数加8
  1. /scoreboard players remove @a[team=people,score_kill_min=1] kill 1
复制代码
将杀敌数减1

吸血鬼部分同理
只是多加一个
  1. /effect @a[team=vampires,score_kill_min=1] minecraft:regeneration 2 1 true
复制代码

杀死一个玩家获得短时间生命回复


金钱数如何体现呢,用的是穷举法



大约有600+穷举,用三秒一循环脉冲触发
幸存者的金钱显示
  1. /replaceitem entity @a[score_blood=53,score_blood_min=53] slot.hotbar.7 minecraft:redstone 1 0 {ench:[],display:{Name:"53 Blood"}}
复制代码


吸血鬼的金钱显示
  1. /replaceitem entity @a[score_blood=32,score_blood_min=32] slot.hotbar.7 minecraft:redstone 1 0 {ench:[],display:{Name:"32 Blood"}}
复制代码

简单粗暴,以此类推。


下一页为商店系统

2021.12 数据,可能有更多内容  点击对应标题跳转页码


   相关链接:【TCP|chengzi_SC】1.8多人小游戏 Vampre Z-吸血鬼大战
大家好,今天来讲解一下吸血鬼大战的运行原理


1、计分板系统&游戏机制
增加的计分板有:死亡数、杀死生物数、幸存者和吸血鬼两个队伍、以及一个VampireZ 主计分板、还有附加一些其他的变量(人数判定、回合切换等)、商店系统必要的一些变量:shop、money和blood

代码:

  1. /scoreboard objectives add Vampires dummy ┣  Vampire Z    ┫

代码:

  1. /scoreboard objectives add kill totalKillCount kill

代码:

  1. /scoreboard objectives add death deathCount death

队伍:

代码:

  1. /scoreboard teams add survivor

代码:

  1. /scoreboard teams add vampires

商店计分板:

代码:

  1. /scoreboard objectives add shop dummy shop

代码:

  1. /scoreboard objectives add money dummy money

代码:

  1. /scoreboard objectives add blood dummy blood


在主计分板加入一系列假名,实现这样的效果




根据游戏规则,幸存者每杀死一个吸血鬼或僵尸,都会有金钱加成,吸血鬼同理,幸存者死亡变为吸血鬼





系统为一个分支脉冲



金钱奖励的系统为右侧的黄色和绿色羊毛处
黄色羊毛(幸存者)

代码:

  1. /testfor @a[team=survivor,score_kill_min=1]
不断探测是否有杀敌数为1的幸存者


如果有,按顺序执行以下:

代码:

  1. /scoreboard players add @a[team=people,score_kill_min=1] money 8
将钱数加8

代码:

  1. /scoreboard players remove @a[team=people,score_kill_min=1] kill 1
将杀敌数减1
吸血鬼部分同理
只是多加一个

代码:

  1. /effect @a[team=vampires,score_kill_min=1] minecraft:regeneration 2 1 true

杀死一个玩家获得短时间生命回复


金钱数如何体现呢,用的是穷举法


大约有600+穷举,用三秒一循环脉冲触发
幸存者的金钱显示

代码:

  1. /replaceitem entity @a[score_blood=53,score_blood_min=53] slot.hotbar.7 minecraft:redstone 1 0 {ench:[],display:{Name:"53 Blood"}}



吸血鬼的金钱显示

代码:

  1. /replaceitem entity @a[score_blood=32,score_blood_min=32] slot.hotbar.7 minecraft:redstone 1 0 {ench:[],display:{Name:"32 Blood"}}

简单粗暴,以此类推。


下一页为商店系统
2、商店系统
商店的物品复杂多样,如何做到没有偏差地交易呢
其实,书本的点击事件就可以极大地减小bug



此为商店系统,用高频控制



可以这么理解,每一个商品我们都给他一个独特的标号,就像教室排座号一样,将序号存储在关联玩家的shop计分板中
书本中的点击事件,只要将选择器写成 @p 将全部判定为持有此书本者
举书本中的例子,假设我拥有130金钱,要买一把【圣光之剑】,金钱足够,因为是第6个商品,所以标号为6.


,点击购买后,书本自触发一条指令

代码:

  1. /scoreboard players set @p shop 6

将购买的玩家shop变量设置为6


这时系统高频输出,类似送快递的流程:

代码:

  1. /testfor @a[score_shop=6,score_shop_min=6,team=survivor]
探测到shop变量为6的幸存者


代码:

  1. /give @a[score_money_min=130,score_shop=6,score_shop_min=6,team=survivor] minecraft:iron_sword 1 0 {display:{Name:"圣光之剑"},ench:[{id:17,lvl:2}]}
将物品送货上门


代码:

  1. /scoreboard players remove @a[score_shop=6,score_shop_min=6,score_money_min=130,team=survivor] money 130
货到付款


代码:

  1. /scoreboard players set @a[score_shop=6,score_shop_min=6,team=survivor] shop 0
清除数据


一共有30+物品,也是穷举的一部分。


下一页为QTE系统讲解


3、QTE系统
顺带送上QTE效果图(教程关卡)



系统分为教程的和游戏中的,原理相同,以教程关为例子






创建一个计分板

代码:

  1. /scoreboard objectives add test dummy



QTE触发前,设置变量为1

代码:

  1. /scoreboard players set @a test 1

然后进入QTE系统(重点)

代码:

  1. /title @a times 0 10 0
将标题渐变设置为0


按顺序触发:

代码:

  1. /title @a[score_test=1,score_test_min=1] title {text:"",extra:[{text:"==========",color:blue,bold:true},{text:"▌",color:red,bold:true}]}

代码:

  1. /title @a[score_test=1] subtitle {text:"",extra:[{text:"QTE :持有砂石 !",color:gold,bold:true}]}

一下每个指令接中继器来控制延迟

代码:

  1. /title @a[score_test=1,score_test_min=1] title {text:"",extra:[{text:"=========",color:blue,bold:true},{text:"▌",color:red,bold:true},{text:"=",color:blue,bold:true}]}

代码:

  1. /title @a[score_test=1,score_test_min=1] title {text:"",extra:[{text:"========",color:blue,bold:true},{text:"▌",color:red,bold:true},{text:"==",color:blue,bold:true}]}

代码:

  1. /title @a[score_test=1,score_test_min=1] title {text:"",extra:[{text:"=======",color:blue,bold:true},{text:"▌",color:red,bold:true},{text:"===",color:blue,bold:true}]}



直到

代码:

  1. /title @a[score_test=1,score_test_min=1] title {text:"",extra:[{text:"",color:blue,bold:true},{text:"▌",color:red,bold:true},{text:"==========",color:blue,bold:true}]}

但是如何判定呢,重点在每个标题指令触发的同时,附上/setblock指令放置红石块,再让放置的红石块瞬间变为石头,坐出类似高频的触发效果





红石块边上放上探测指令

代码:

  1. /scoreboard players set @a[score_test_min=1] test 0 {SelectedItem:{id:"minecraft:sandstone"}}
将QTE成功的玩家变量归0
随之可以惩罚变量为1 的玩家。


====================END======================



2362577123
本帖最后由 2362577123 于 2015-10-31 19:25 编辑

顶组长,其实运行原理也不难,相比之下我更好奇QTE所使用的随机器是什么,spreadplayers生物随机器吗?
还是说没有随机器,直接固定每一个技能触发的QTE?

MsYqgzt
2362577123 发表于 2015-10-31 19:14
顶组长,其实运行原理也不难,相比之下我更好奇QTE所使用的随机器是什么,spreadplayers生物随机器吗?
还是 ...

技能指向随机玩家,只要在技能系统基础上改造一下就好了:)

QQ382009
商品探测不用探测足够金钱么 岂不是可以刷

MsYqgzt
QQ382009 发表于 2015-10-31 23:27
商品探测不用探测足够金钱么 岂不是可以刷

仔细看
/give @a[score_money_min=130,score_shop=6,score_shop_min=6,team=survivor] minecraft:iron_sword 1 0 {display:{Name:"圣光之剑"},ench:[{id:17,lvl:2}]}

低于钱数是不会给的

lzs1234
钱数显示600多穷举有必要吗……用一个for循环也可以啊……