本帖最后由 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"}}
复制代码

简单粗暴,以此类推。


下一页为商店系统
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======================





[groupid=1009]The Command's Power[/groupid]