《我的世界》Python编程入门(3)检测玩家所在位置

案例:检测玩家所在位置

第一步:通过API接口连接游戏

1.1什么是API接口

我们的程序和Minecraft游戏可以理解为两个分隔两地的人,两者之间要进行沟通怎么办?
是不是要借助某种工具?比如电话、微信、QQ等等。
这种工具是否需要两者都能够使用?
Minecraft API即Minecraft的应用程序接口,可以理解为Minecraft游戏留给我们用程序跟游戏沟通的工具!
备注:我们用的Minecraft API就是第1节课讲的mcpi目录的文件,这也是为什么.py程序必须创建在mcpi目录的同级目录中

1.2 连接游戏步骤

(1)首先打开服务器和游戏
(2)通过API连接游戏

import mcpi.minecraft as minecraft
#导入程序需要用到的模块
#import为导入模块的关键字,mcpi.minecraft为需要引入的模块
#as为模块创建别名的关键字,minecraft为模块的别名。
#创建别名主要为了简化代码,比如中华人民共和国简称中国!
mc = minecraft.Minecraft.create()
#minecraft为我们导入的模块的别名,Minecraft.create()为连接游戏的方法
#()结尾代表执行一个动作,在编程中一般叫做函数或方法。

注意!#表示注释,用于解释程序,程序运行时不执行这些代码,我们可以不输入这些内容!

第二步:获取玩家的位置

pos = mc.player.getTilePos()
#网络课件中第6页pos = mc.player.getTilepos()有错误。
#mc.player.getTilePos()为获取用户当前位置的方法
#变量pos为mc.player.getTilepos()方法的返回值
#返回值即方法执行后留给调用者的可用的值,不同方法、函数的返回可能不同。具体概念可在扩展中详细了解
#pos变量代表的数据由x,y,z三部分组成,通过print语句可以输入这三部分内容
print(pos.x)
print(pos.y)
print(pos.z)
#注意!不是每个变量都可以用pos.x这样的形式表示某一部分数据

3.第三步:改进玩家位置输出信息

pos变量用3个print语句太繁琐,而且程序设计者之外的人可能根本就不明白输出的3个值什么意思!
因此,我们改进程序将3个语句合并为1个语句。

print("x="+str(pos.x)+"y="+str(pos.y)+"z="+str(pos.z))
# + 两端都为数字时表示两个数字相加,+ 两端都为字符串时表示拼接两个字符串
# + 两端不能一边是数字,一边是字符串
# + 在这里用作拼接2个字符串
#pos.x,pos.y,pos.z的值均为整数,因此在与字符串拼接前需要转换为字符串

4.第四步:动态获取玩家位置

通过前两步我们已经可以获取玩家的所在位置,但是有一个缺点,每次运行程序,只能获取一个坐位置,再移动玩家,就获取不了位置,只能再次运行程序!如何动态获取玩家位置?

4.1 导入time模块

time是Python自带的关于时间的模块。

import time
#通过import语句导入time模块
time.sleep(1)
#time.sleep()方法可以让程序暂停执行一定时间,单位为秒
#演示代码为1,即暂停1秒,()内的值可以修改,要求为整数。
4.2 while循环

格式:

while 条件:
    子代码块
条件为True时,执行子代码块

注意:子代码块整体要缩进!

4.3 动态获取玩家位置

代码:

import time
import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()
while True:
    time.sleep(1)
    pos = mc.player.getTilePos()
    mc.postToChat("x=" + str(pos.x) + "y=" + str(pos.y) + "z=" + str(pos.z))

代码解读:

#导入使用到的模块
import time 
import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()
#使用API连接游戏
while True:
    #死循环,监听游戏
    time.sleep(1)
    #每次循环暂停1秒钟,要不然一直后面输出太快,我们就不容易看到后面输出的结果
    pos = mc.player.getTilePos()
    #获取玩家当前位置
    mc.postToChat("x=" + str(pos.x) + "y=" + str(pos.y) + "z=" + str(pos.z))
    #利用postToChat()方法在游戏中输出玩家的位置

注意!因为while循环中条件一直为True,所以子代码块一直执行,而且子代码块未引入退出循环的机制,这样程序就无法正常退出,只能强制停止程序(在终端中同时按下ctrl键和c键)。
while True:这种形式的循环一般用于监听事件,等待用户执行某种操作,例如当代用户输入用户名、密码,用户输入完成之后退出循环,如果用户未完成输入,一直循环,等待用户完成输入。

在这里插入图片描述

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值