自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 搭建MacOS中开发操作系统的环境

MacOS系统上《操作系统真象还原》环境搭建

2022-09-28 21:04:49 953 1

原创 Python元类详解

文章目录Python元类详解Python谜团元类的本质调用一个类时发生了什么再探元类自定义元类彩蛋:跳过python解释器Python元类详解元类比99%的用户所担心的魔法要更深,如果你在犹豫是否需要它们,那你就还不需要它们(真正需要元类的人,能够确定的知道需要它们,并且不必做任何解释)。——Tim PetersPython谜团相信你一定听说过“Python中一切皆是对象”这句话,只要是一个对象,那么它就有自己的类型(type)。可以使用type查看一个对象的类型:$ python3>

2022-04-28 14:29:06 3292 3

原创 Python从零模仿我的世界(十六)番外篇

修改游戏代码这篇文章既然是一片“番外篇”,那我们就偏离一点主线,来讲一下如何修改游戏代码。首先重温一下Settings类:class Settings: ticks_per_sec = 60 # 每秒刷新的次数 sector_size = 16 # 区块的大小 walking_speed = 5.0 # 走路的速度 gravity = 20.0 # 重力的大小 max_jump_height = 1.0 # 跳跃的高度 jump_speed = math.

2022-04-28 08:56:36 2169

原创 Python从零模仿我的世界(十五)

自由移动大家发现是什么问题了吗?没错!就是在旋转的时候鼠标在窗口上面晃来晃去的(也许还碍手碍脚的?),更糟的是只有当鼠标在窗口上方的时候才会捕获到鼠标移动事件,一旦不小心移到了外面窗口就不动了,真是烦人!有什么方法能解决这个问题呢?解决方案 1有的有的,有一个叫set_exclusive_mouse函数可以捕获到鼠标焦点,从而做到这一点,让我们来修改一下代码:...if __name__ == '__main__': ... win.set_exclusive_mouse(True

2022-04-27 16:38:00 612

原创 Python从零模仿我的世界(十四)

显示这篇文章我们来讲set3d函数和它的“近亲”set2d函数。它们长成这个样子:class Window(...): ... def set_2d(self): # get_size 函数是继承来的 width, height = self.get_size() glDisable(GL_DEPTH_TEST) # get_viewport_size 函数也是继承来的 viewport = self.get

2022-04-27 15:56:03 498

原创 Python从零模仿我的世界(十三)

显示虽说我们的游戏终于再一次能运行了吧……但是这这这不是和第一篇代码的效果一样吗?啊千万别急,我们还没有显示呢。初始化方块在正式显示之前我们先做亿点点准备工作。怎么又是这个?我们在Model类中还留了一个方法呢,当时被写成pass,忘记啦?看一眼第二篇吧。现在我们来重新编写一下这个函数:class Model: ... def init(self): n = 64 # 世界的一半大小 for x in range(-n, n + 1):

2022-04-27 15:10:49 2036

原创 Python从零模仿我的世界(十二)

到现在为止我们的游戏还是不能运行的,因为还缺了一个函数呢。没错!就是Model.change_sectors!完善模型类上代码:class Model: ... # 这个函数是用来在玩家走动的时候切换区块的 # 只有和玩家的距离小于等于 pad 的区块才会显示 def change_sectors(self, before, after): # 创建空集合 # 直接使用 {} 的话创建的是空字典哦 before_set =

2022-04-27 14:02:24 1539

原创 Python从零模仿我的世界(十一)

窗口类这篇文章我们来看两个和3维矢量(vector3)有关的函数。由于我们的游戏是3维的,所以当我提到“矢量”时没有特殊说明都指的是“3维矢量”。先来围观代码:class Window(...): ... def get_sight_vector(self): # rotation 是画面旋转的角度,等我们讲到鼠标移动时再说 x, y = self.rotation # 这里是一些算法,看看就行了 # 感兴趣的可以评论区讨论

2022-04-27 13:14:11 455

原创 Python从零模仿我的世界(十)

窗口类这篇文章我们来讲讲_update_world函数,先上代码:class Window(...): ... def _update_world(self, dt): # 得到当前的速度 speed = Settings.walking_speed # == A == d = dt * speed # 获取移动的3维矢量(vector3) # 一个3维矢量是 x y z 坐标都位于-1到1之

2022-04-27 08:55:36 597

原创 Python从零模仿我的世界(九)

窗口类我们窗口类的雏形各位都还记得吗?不记得了的话赶快看看第二篇温习一下哦~我们现在把这个窗口类改成这样:class Window(pyglet.window.Window): def __init__(self, *args, **kwargs): pyglet.window.Window.__init__(self, *args, **kwargs) # 是否捕获了鼠标 self.exclusive = False # 一

2022-04-26 16:18:10 439

原创 Python从零模仿我的世界(八)

模型类现在我们来实现_show_block和_hide_block函数:class Model: ... def _show_block(self, position, block, real=True): x, y, z = position # 得到立方体的坐标 vertex_data = cube_vertices(x, y, z, 0.5) # == A == self._shown[position

2022-04-26 15:59:01 519

原创 Python从零模仿我的世界(七)

模型类现在我们来编写用于删除方块的remove_block函数: def remove_block(self, position, immediate=True): # 删除在 world 字典中的值(也就是删除了这个方块) del self.world[position] self.sectors[sectorize(position)].remove(position) if immediate: # 如果

2022-04-26 15:31:34 730

原创 Python从零模仿我的世界(六)

模型类现在我来详细讲讲check_neighbours函数。这个函数长这个样子:class Model: ... def check_neighbours(self, position): x, y, z = position # 依次检测上下前后左右的方块是否需要显示 for dx, dy, dz in Settings.faces: key = (x + dx, y + dy, z + dz)

2022-04-26 14:30:23 437

原创 Python从零模仿我的世界(五)

模型类初始化有了方块类,我们现在终于可以添加方块了。添加方块现在我们来编写添加方块的代码:class Model: ... def add_block(self, position, block, immediate=True): # 如果该位置已经存在了方块那么先删除原方块,用新的方块替代它 if position in self.world: self.remove_block(position, immediate, r

2022-04-26 14:00:16 470

原创 Python从零模仿我的世界(四)

编写方块类现在我们继续来编写方块类:# 这个类是用来填充 world 字典的值的class BlockData: __slots__ = ['model', 'position', 'name', 'init', 'update'] # 这是为了压缩内存空间以及提高访问速度 def __init__(self, model, x, y, z, name, init, update): self.model = model self.position =

2022-04-26 11:02:50 587

原创 Python从零模仿我的世界(三)

模型类编写模型类现在我们来正式编写这个模型类。首先导入pyglet中OpenGL 到函数以及deque队列。from pyglet.gl import *from collections import deque然后是模型类的主体:class Model: def __init__(self): self.batch = pyglet.graphics.Batch() # 一个可以对图形进行统一处理的类,简化我们的工作 self.world = {}

2022-04-26 10:44:59 486

原创 Python从零模仿我的世界(二)

编写设置一个游戏里的设置是必不可少的,所以我们要先来编写 母体 的一些设置。首先导入math库。import math然后编写游戏中的数据(大家可以根据自己的喜好更改哦)class Settings: ticks_per_sec = 60 # 每秒刷新的次数 sector_size = 16 # 区块的大小 walking_speed = 5.0 # 走路的速度 gravity = 20.0 # 重力的大小 max_jump_height = 1.0 # 跳

2022-04-26 09:49:35 794

原创 Python从零模仿我的世界(一)

我一直很喜欢玩我的世界,不知道有没有人和我一样好奇我的世界到底是如何实现的 直到我看到了Mojang的代码那么,现在,我们就一起来模仿一下我的世界!国外有一个叫做fogleman的人就曾经写过一个简单版的“我的世界”,我们会以这个项目作为模版:链接环境搭建这里默认你的机器里有python环境,并且安装了pip。我们会使用pyglet这个第三方库进行开发。pip install pyglet我们再给这个项目起一个名字吧!引用电影《黑客帝国》里面的梗,就起名叫做“母体”吧,英文叫做"Matrix

2022-04-26 09:11:24 741

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除