首页 > 其他分享 >建造球场

建造球场

时间:2023-04-02 17:33:59浏览次数:27  
标签:mc 建造 pos 球场 setBlock WOOL id block

import mcpi.minecraft as minecraft
import mcpi.block as block

mc = minecraft.Minecraft.create()

# 生成场地
def buildField():
    # 开辟一个99*70*15的空间
    mc.setBlocks(-49, 0, -34, 49, 15, 34, block.AIR.id)
    # 铺场地
    mc.setBlocks(-29, 0, -19, 29, 0, 19, block.WOOL.id, 0)
    mc.setBlocks(-28, 0, -18, 28, 0, 18, block.WOOL.id, 13)
    mc.setBlocks(0, 0, -19, 0, 0, 19, block.WOOL.id, 0)
    mc.setBlocks(-29, 0, -8, -18, 0, 8, block.WOOL.id, 0)
    mc.setBlocks(29, 0, -8, 18, 0, 8, block.WOOL.id, 0)
    mc.setBlocks(-28, 0, -7, -19, 0, 7, block.WOOL.id, 13)
    mc.setBlocks(28, 0, -7, 19, 0, 7, block.WOOL.id, 13)

    # 球门
    mc.setBlocks(29, 3, -5, 29, 3, 5, block.WOOL.id, 4)
    mc.setBlocks(-29, 3, -5, -29, 3, 5, block.WOOL.id, 11)



# 设置“球”的坐标,只有在这个位置上的才算是球,通过击打改变球的位置
ballPosX = 0
ballPosY = 1
ballPosZ = 0

# 球队比分
yelloScore = 0
blueScore = 0

mc.postToChat("welcome to nille's world")
# 生成场地
buildField()


while True:
    # 这个库只响应用铁剑的击打事件(击打为右键操作)。
    events = mc.events.pollBlockHits()


    # [BlockEvent(BlockEvent.HIT, -3, 0, 2, 1, 252)]
    # 里面包含了击打方块的位置信息(前3个数字)和击打的面的信息(第4个数字)。
    # print(events)

    # 将events列表中的face(面)提取出来
    # 南 3
    # 北 2
    # 东 5
    # 西 4
    # 上 1
    # 下 0

    # 实时获取“球”的信息,当“球”不见了,变成空气了就重新生成一个。也能用于程序重启来生成球
    if mc.getBlock(ballPosX, ballPosY, ballPosZ) == block.AIR.id:
        mc.setBlock(ballPosX, ballPosY, ballPosZ, block.WOOL.id, 1)

    for e in events:
        # print(e.face)

        # 判断铁剑右键的是不是 “球”
        if e.pos.x == ballPosX and e.pos.y == ballPosY and e.pos.z == ballPosZ:
            # 让方块消失
            # mc.setBlock(e.pos.x,e.pos.y,e.pos.z,block.AIR.id)
            # 东
            if e.face == 5:
                # 当击打方块不同的面时,让方块变成不同颜色的羊毛。
                # mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.WOOL.id, 11)

                # 让当前的方块消失,然后在对应方向上偏移一格的位置上重新生成一个对应的方块。
                # 让当前方块消失
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.AIR.id)
                # 生成对应的方块
                mc.setBlock(e.pos.x - 1, e.pos.y, e.pos.z, block.WOOL.id, 11)
                # 铁剑右键是球的话,相应的坐标加 1
                ballPosX -= 1

            # 南
            if e.face == 3:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.AIR.id)
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z - 1, block.WOOL.id, 14)
                ballPosZ -= 1

            # 西
            if e.face == 4:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.AIR.id)
                mc.setBlock(e.pos.x + 1, e.pos.y, e.pos.z, block.WOOL.id, 10)
                ballPosX += 1

            # 北
            if e.face == 2:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.AIR.id)
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z + 1, block.WOOL.id, 4)
                ballPosZ += 1

            if e.face == 1:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.WOOL.id, 0)
            if e.face == 0:
                mc.setBlock(e.pos.x, e.pos.y, e.pos.z, block.WOOL.id, 15)

            # 判断球是不是出界了
            if ballPosX < -29 or ballPosX > 29 or ballPosZ < -19 or ballPosZ > 19:
                # 判断是否进球
                if ballPosZ >= -5 and ballPosZ <= 5:
                    mc.postToChat('GOAL')
                    # 判断进的是哪个门
                    if ballPosX < -29:
                        yelloScore = yelloScore + 1
                    if ballPosX > 29:
                        blueScore = blueScore + 1
                    # 比分状况
                    mc.postToChat('YELLO:' + str(yelloScore) + ' BLUE:' + str(blueScore))
                else:
                    mc.postToChat('OUT')

                # 恢复位置
                ballPosX = 0
                ballPosZ = 0
                # 重新搭建一下场地
                buildField()

标签:mc,建造,pos,球场,setBlock,WOOL,id,block
From: https://www.cnblogs.com/Wesuiliye/p/17280853.html

相关文章

  • 泰拉瑞亚EasyBuildMod便捷建造模组开发详细过程
    github地址:https://github.com/lxmghct/Terraria-EasyBuildMod如果觉得有帮助,记得在github上点个star哦~创意工坊搜索EasyBuildMod即可找到模组目录简介模组物品制......
  • 观摩智能建造示范项目
    2022年底,住房和城乡建设部将北京、天津、重庆、苏州等24个城市列为智能建造试点城市,试点期3年。苏州作为智能建造试点城市之一,2023年1月,苏州市人民政府出台《关于加快推进......
  • 建造者模式
    坚持不懈,不断学习建造模式解决的痛点不优雅不方便阅读newLabel(0,1,0,1,0,2);容易出错(赋值后再进行更改)Labellabel1=newLabel();label.setWater(0);labe......
  • 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现
    简介建造者模式(BuilderPattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对......
  • Java 建造者模式/链式调用 简单Demo
    最近,公司同事要求我给他们讲一下RxJava,为了更清晰的说明其架构,.简单写了一个链式调用的小Demo,分享给大家/**作者:赵星海(CSDN-深海呐)*时间:2019年3月19日16:56:32*......
  • C# 建造者模式
    定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用场景:建造者模式是在当创建复杂对象的算法,应该独立于该对象的组成部分以及它们的......
  • 原来建造者模式是这样用的
    概述面临一个复杂对象的创建工作,通常由各个部分的子对象用一定的算法构成。子部件(对象)比较多,对象不能当作一个完整的对象或者产品使用(邮件:发件人,收件人、抄送人、主题、邮......
  • 设计模式-建造者模式
    业务场景未使用建造者模式实现#include<iostream>#include<string>#include<vector>#include<sstream>usingnamespacestd;template<classT>stringConvertTo......
  • 设计模式(八)----创建型模式之建造者模式与工厂模式区别
    1、工厂方法模式VS建造者模式工厂方法模式注重的是整体对象的创建方式;而建造者模式注重的是部件构建的过程,意在通过一步一步地精确构造创建出一个复杂的对象。我们举个简......
  • 建造者模式
    定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以建造不同的表示。建造者模式的结构Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽......