我的世界(Minecraft)计算器python源码

news/2025/2/3 13:56:40/

python_0">我的世界(Minecraft)计算器python源码

1.介绍

在这里插入图片描述

使用教程

  • 博客:【Python】python实现我的世界(Minecraft)计算器
  • 视频:Python实现我的世界(Minecraft)计算器(附源码与教程)

2.源码

文件一

python"># CreateBigScreen.py    (创建大屏幕并返回大屏幕坐标)from mcpi.minecraft import Minecraft
from mcpi.minecraft import CmdPositionermcDriver=Minecraft.create()  # 与Minecraft进行交互,里面有很多交互的方法,通过mcDriver.方法名来使用
playerId=mcDriver.getPlayerEntityId('Janium')           # 获取玩家的Id,'Janium'为玩家名称
positioner=CmdPositioner(mcDriver.conn,b'entity')       # 用来处理实体的位置信息
playerPosition=positioner.getTilePos(playerId)          # 获取玩家的位置
x=playerPosition.x
y=playerPosition.y                                      # 玩家的坐标
z=playerPosition.zdef createBigScreen():mcDriver.setBlocks(x,y+48,z,x+98,y+20,z,123)createBigScreen()mcDriver.postToChat("创建大屏幕成功!创建时的坐标x,y,z分别是  {},{},{}".format(x,y,z))

文件二

python"># ProcessAndDisplay.py# 导入mcpi库
from mcpi.minecraft import Minecraft
import mcpi.block as blockimport timemcDriver=Minecraft.create()                          # 创建Minecraft对象,与Minecraft进行交互x,y,z=-44,-1,-170                                    # 就是在这里输入CreateBigScreen得到的坐标# 用相对坐标来划分每个子屏幕的位置,一共七个子屏幕,也就是可以处理七位数以内的计算。
subScreen1=[[x+5,y+44,z-1],[x+15,y+44,z-1],[x+5,y+34,z-1],[x+15,y+34,z-1],[x+5,y+24,z-1],[x+15,y+24,z-1]]
subScreen2=[[x+18,y+44,z-1],[x+28,y+44,z-1],[x+18,y+34,z-1],[x+28,y+34,z-1],[x+18,y+24,z-1],[x+28,y+24,z-1]]
subScreen3=[[x+31,y+44,z-1],[x+41,y+44,z-1],[x+31,y+34,z-1],[x+41,y+34,z-1],[x+31,y+24,z-1],[x+41,y+24,z-1]]
subScreen4=[[x+44,y+44,z-1],[x+54,y+44,z-1],[x+44,y+34,z-1],[x+54,y+34,z-1],[x+44,y+24,z-1],[x+54,y+24,z-1]]
subScreen5=[[x+57,y+44,z-1],[x+67,y+44,z-1],[x+57,y+34,z-1],[x+67,y+34,z-1],[x+57,y+24,z-1],[x+67,y+24,z-1]]
subScreen6=[[x+70,y+44,z-1],[x+80,y+44,z-1],[x+70,y+34,z-1],[x+80,y+34,z-1],[x+70,y+24,z-1],[x+80,y+24,z-1]]
subScreen7=[[x+83,y+44,z-1],[x+93,y+44,z-1],[x+83,y+34,z-1],[x+93,y+34,z-1],[x+83,y+24,z-1],[x+93,y+24,z-1]]
subScreenList=[subScreen1,subScreen2,subScreen3,subScreen4,subScreen5,subScreen6,subScreen7]# 在子屏幕内清除之前计算结果、创建数字以及符号的方法都在这个类里
class CreateBlock:def clearScreen():mcDriver.setBlocks(x,y+48,z-1,x+98,y+20,z-1,block.AIR)def zero(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)mcDriver.setBlocks(subScreen[0],subScreen[4],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)def one(subScreen):mcDriver.setBlocks(subScreen[1],subScreen[5],152)def two(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[1],subScreen[3],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[2],subScreen[4],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)def three(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)def four(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[2],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)def five(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[0],subScreen[2],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[3],subScreen[5],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)def six(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[0],subScreen[4],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)mcDriver.setBlocks(subScreen[3],subScreen[5],152)def seven(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)def eight(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)mcDriver.setBlocks(subScreen[0],subScreen[4],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)def nine(subScreen):mcDriver.setBlocks(subScreen[0],subScreen[1],152)mcDriver.setBlocks(subScreen[1],subScreen[5],152)mcDriver.setBlocks(subScreen[0],subScreen[2],152)mcDriver.setBlocks(subScreen[2],subScreen[3],152)mcDriver.setBlocks(subScreen[4],subScreen[5],152)# 创建小数点def point(subScreen):mcDriver.setBlock(subScreen[4],152)# 创建负号def minus(subScreen):mcDriver.setBlocks(subScreen[2],subScreen[3],152)# 算式所包含的字符,用来判断输入格式是否有效
arithmeticSymbolList=['0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')','.','-']
# 算式是否有效,有效为1,无效为0
validOrNot=1 mcDriver.postToChat('计算器启动中......')
time.sleep(0.5)
mcDriver.postToChat('计算器已启动!')while True:# 子屏幕位置screenNumber=0while True:time.sleep(0.5)# 获取mc那边玩家输入的信息mcInfo=mcDriver.events.pollChatPosts()  if mcInfo != []:break# 在信息中提取算式equation=str(mcInfo[0])[31:-1]# 判断字符是否在算式列表里for num in equation:if num not in arithmeticSymbolList:validOrNot=0break# 有效,则开始计算结果if validOrNot==1:# 利用python自带的eval()方法直接算出算式的值numResult=eval(equation)# 字符串类型的算式计算结果,方便遍历每个数字,在屏幕中显示出来strResult=str(eval(equation))# 如果超过七位以上的浮点数,则取前七位(不是四舍五入)if type(numResult)==type(1.1):strResult=strResult[0:7]# 如果计算结果小于七位数,则开始显示if len(strResult)<=7:CreateBlock.clearScreen()# 遍历结果,显示数字for digitPosition in strResult:time.sleep(0.5)if   digitPosition=='0': CreateBlock.zero(subScreenList[screenNumber])elif digitPosition=='1': CreateBlock.one(subScreenList[screenNumber])elif digitPosition=='2': CreateBlock.two(subScreenList[screenNumber])elif digitPosition=='3': CreateBlock.three(subScreenList[screenNumber])elif digitPosition=='4': CreateBlock.four(subScreenList[screenNumber])elif digitPosition=='5': CreateBlock.five(subScreenList[screenNumber])elif digitPosition=='6': CreateBlock.six(subScreenList[screenNumber])elif digitPosition=='7': CreateBlock.seven(subScreenList[screenNumber])elif digitPosition=='8': CreateBlock.eight(subScreenList[screenNumber])elif digitPosition=='9': CreateBlock.nine(subScreenList[screenNumber])elif digitPosition=='.': CreateBlock.point(subScreenList[screenNumber])elif digitPosition=='-': CreateBlock.minus(subScreenList[screenNumber])screenNumber+=1# 如果超出七位数则显示结果溢出else:mcDriver.postToChat('结果溢出!')  # 无效,则提示输入错误    else:validOrNot=1mcDriver.postToChat('输入错误!')

http://www.ppmy.cn/news/1568967.html

相关文章

javaweb实训:购物商城系统项目

包括各类需求文档&#xff0c;任务计划&#xff0c;ppt&#xff0c;项目源代码&#xff0c;数据库文件&#xff0c;包括网站前后台&#xff01;唯一缺憾是面向初学者的&#xff0c;没怎么用框架。购物商城系统项目 文件列表 112购物商城系统项目/(1)需求说明书/112购物商城系统…

高清种子资源获取指南 | ✈️@seedlinkbot

在如今的数字时代&#xff0c;高清影视、音乐、游戏等资源的获取方式不断丰富。对于追求高质量资源的用户而言&#xff0c;一个高效的资源分享平台至关重要。而 ✈️seedlinkbot 正是这样一个便捷的资源获取工具&#xff0c;为用户提供高质量的种子资源索引和下载信息。 1. ✈️…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

TCP/IP 协议:互联网通信的基石

TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…

DRM系列六:Drm之KMS

KMS&#xff08;Kernel Mode Setting&#xff09;是负责显示输出的核心组件&#xff0c;它处理与plane、crtc、encoder和connector相关的各项任务。简单来说&#xff0c;KMS就是结构体drm_mode_config、drm_mode_object和组件&#xff08;object&#xff09;的结合。 KMSdrm_m…

高阶C语言|深入理解字符串函数和内存函数

文章目录 前言1.求字符串长度1.1 字符串长度函数&#xff1a;strlen模拟实现 2.长度不受限制的字符串函数2.1 字符串拷贝函数&#xff1a;strcpy模拟实现 2.2 字符串连接函数&#xff1a;strcat模拟实现 2.3 字符串比较函数&#xff1a;strcmp模拟实现 3.长度受限制的字符串函数…

【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示

本文通过NE555定时器芯片和简单的电容充放电电路,设计了一种纯硬件实现的呼吸灯方案,并借助Proteus仿真软件验证其功能。方案无需编程,成本低且易于实现,适合电子爱好者学习PWM(脉宽调制)和定时器电路原理。 一、呼吸灯原理与NE555功能分析 1. 呼吸灯核心原理 呼吸灯的…

CMake技术细节:解决未定义,提供参数

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…