当前位置:首页 >> 编程语言 >> 【Python百宝箱】第三维度的魔法:探索Python游戏世界,三星d428(python 3d)

【Python百宝箱】第三维度的魔法:探索Python游戏世界,三星d428(python 3d)

0evadmin 编程语言 1
文件名:【Python百宝箱】第三维度的魔法:探索Python游戏世界,三星d428 【Python百宝箱】第三维度的魔法:探索Python游戏世界 Python在游戏开发中的魔力 前言

游戏开发一直是计算机科学中最引人入胜和具有挑战性的领域之一。随着技术的不断进步,开发者们寻找着更快、更灵活的工具来实现他们的创意。在这个探索的过程中,Python以其简洁、易学和强大的特性成为了游戏开发的热门选择。本文将探讨Python在游戏开发中的各种应用,从2D小游戏到复杂的3D应用,从物理引擎到深度学习,为读者提供全面的了解和实用的信息。

文章目录 Python在游戏开发中的魔力前言 游戏开发概述1. 游戏开发简介1.1 游戏开发的基本概念和流程 2. Python在游戏开发中的角色2.1 Python在2D游戏中的应用2.2 Python在3D游戏中的应用 常用的2D游戏开发库3. Pygame3.1 简介3.2 常见应用场景3.3 Pygame的图形处理和事件处理3.3.1 图形处理3.3.2 事件处理 3.4 Pygame的音频处理3.5 Pygame的碰撞检测3.6 Pygame的物理引擎支持 4. Pygame Zero4.1 简介4.2 常见应用场景 4. Pygame Zero4.3 Pygame Zero的特点和优势4.3.1 简化的API4.3.2 无需初始化4.3.3 自动生成游戏窗口 4.4 Pygame Zero的图形和事件处理4.4.1 图形处理4.4.2 事件处理 4.5 Pygame Zero的声音和动画效果4.5.1 声音处理4.5.2 动画效果 4.6 Pygame Zero的物理引擎支持 强大的3D游戏开发库5. Panda3D5.1 简介5.2 常见应用场景5.3 Panda3D的基本组成和架构5.3.1 场景图5.3.2 渲染器5.3.3 着色器 5.4 Panda3D的动画和输入处理5.4.1 动画5.4.2 输入处理 5.5 Panda3D的虚拟现实支持 6. PyOpenGL6.1 简介6.2 常见应用场景6.3 PyOpenGL的基本使用和绘图流程6.3.1 初始化OpenGL环境6.3.2 绘制图形6.3.3 运行主循环 6.4 PyOpenGL的三维图形绘制和变换6.4.1 三维图形绘制6.4.2 变换和相机控制 面向特定类型游戏的库7. Arcade7.1 简介7.2 常见应用场景7.3 Arcade的基本元素和绘图7.3.1 窗口和事件处理7.3.2 精灵和动画7.3.3 碰撞检测 7.4 Arcade的物理引擎支持和学习资源7.4.1 物理引擎支持7.4.2 学习资源 8. Cocos2d8.1 简介8.2 常见应用场景8.3 Cocos2d的场景和图层8.3.1 场景8.3.2 图层 8.4 Cocos2d的精灵和动画8.4.1 精灵8.4.2 动画 8.5 Cocos2d的多平台支持和Web发布8.5.1 移动端发布8.5.2 Web发布 其他相关库9. Taichi9.1 简介9.2 常见应用场景9.3 Taichi的基本使用和数值计算9.3.1 安装Taichi9.3.2 矩阵乘法的高性能计算 9.4 Taichi在游戏中的物理引擎应用9.4.1 弹簧质点系统 10. Pyglet10.1 简介10.2 常见应用场景10.3 Pyglet的图形绘制和事件处理10.3.1 创建窗口10.3.2 绘制图形10.3.3 事件处理 10.4 Pyglet的OpenGL渲染和音频处理10.4.1 OpenGL渲染10.4.2 音频处理 11. Pygame-sdl211.1 简介11.2 常见应用场景11.3 Pygame-sdl2的性能优势和API兼容性11.3.1 创建窗口11.3.2 性能优势11.3.3 API兼容性 11.4 Pygame-sdl2的安装 拓展领域的Python库12. PyTorch12.1 简介12.2 常见应用场景12.3 PyTorch在游戏中的强化学习应用12.3.1 安装PyTorch12.3.2 强化学习示例 13. Kivy13.1 简介13.2 常见应用场景13.3 Kivy应用的界面设计和事件处理13.3.1 安装Kivy13.3.2 创建一个简单的Kivy应用 14. Ren'Py14.1 简介14.2 常见应用场景14.3 Ren'Py脚本语言和交互式故事14.3.1 安装Ren'Py14.3.2 创建一个简单的Ren'Py项目14.3.3 编写Ren'Py脚本 15. PyBullet15.1 简介15.2 常见应用场景15.3 PyBullet在Python中的应用15.3.1 安装PyBullet15.3.2 PyBullet基础示例15.3.3 PyBullet和机器人学习 16. Pygame GUI16.1 简介16.2 常见应用场景16.3 在Pygame中使用Pygame GUI创建用户界面16.3.1 安装Pygame GUI 16.3.2 Pygame GUI基础示例 总结

游戏开发概述 1. 游戏开发简介

游戏开发是一门综合性的艺术和技术,旨在创造引人入胜、交互性强的数字娱乐体验。这一过程往往涵盖多个关键阶段,从概念的设计、技术的选择,到编程、美术设计、声音效果等方面的制作。在整个开发周期中,团队成员协同工作,不断迭代和优化,以创造出令人印象深刻的游戏。

1.1 游戏开发的基本概念和流程

游戏开发的基本概念包括游戏设计、程序设计、美术设计和音效设计。游戏设计关注游戏的玩法、规则和体验,程序设计则负责实现这些设计,美术设计创造游戏的视觉元素,而音效设计则增强游戏的氛围。游戏开发的流程一般包括概念阶段、预制阶段、制作阶段、测试阶段和发布阶段。

2. Python在游戏开发中的角色

Python作为一种灵活、易学且功能强大的编程语言,在游戏开发中扮演着重要的角色。它的优势包括快速开发、丰富的库和社区支持,使其成为游戏开发者的首选之一。Python在游戏开发中广泛应用于不同类型的游戏,从简单的2D游戏到复杂的3D应用。

2.1 Python在2D游戏中的应用

Python在2D游戏中有着强大的表现,主要得益于诸如Pygame和Pygame Zero等库的支持。这些库提供了简单而有效的工具,使得开发者能够专注于游戏逻辑和玩法的设计。

import pygamepygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 在窗口上绘制图形或执行游戏逻辑pygame.display.flip()pygame.quit() 2.2 Python在3D游戏中的应用

在3D游戏开发中,Python也发挥着重要作用,尤其是在使用Panda3D和PyOpenGL等库时。这些工具使开发者能够创建复杂的3D场景、实现逼真的光影效果,并通过Python的简洁语法来管理复杂的游戏逻辑。

from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)app = MyApp()app.run()

Python的灵活性和易用性使得它在游戏开发中的应用变得多样化,既适用于小型独立游戏,也适用于大型复杂的游戏项目。在接下来的章节中,我们将更深入地了解Python在游戏开发中的不同库及其应用。

常用的2D游戏开发库 3. Pygame 3.1 简介

Pygame是一个用于创建2D游戏的库,它建立在SDL(Simple DirectMedia Layer)上,提供了处理图形和音频的功能。

3.2 常见应用场景

Pygame常用于制作小型游戏和学习游戏开发,其简单的API和文档使得初学者能够快速上手。

import pygamefrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 在窗口上绘制图形或执行游戏逻辑pygame.display.flip()pygame.quit() 3.3 Pygame的图形处理和事件处理

Pygame提供了丰富的图形处理功能,包括绘制基本形状、加载和显示图像等。同时,Pygame通过事件处理机制使得开发者能够轻松响应用户的输入。

3.3.1 图形处理

Pygame支持绘制各种基本形状,如矩形、圆形和线条。此外,你还可以加载外部图像并将其显示在窗口上。

import pygamefrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 加载图像image = pygame.image.load('image.png')# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 在窗口上绘制图形和图像pygame.draw.rect(screen, (255, 0, 0), (100, 100, 50, 50))screen.blit(image, (200, 200))# 更新显示pygame.display.flip()pygame.quit() 3.3.2 事件处理

Pygame使用事件处理机制来响应用户输入,例如键盘按键、鼠标移动等。以下是一个简单的事件处理示例:

import pygamefrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = Falseelif event.type == KEYDOWN:if event.key == K_SPACE:print("Space key pressed")elif event.type == MOUSEBUTTONDOWN:print(f"Mouse button {event.button} clicked at {event.pos}")# 更新显示pygame.display.flip()pygame.quit() 3.4 Pygame的音频处理

Pygame不仅支持图形处理,还提供了音频处理的功能。通过Pygame,你可以轻松加载、播放音频文件,为你的游戏添加声音效果。

import pygamefrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 加载音频文件pygame.mixer.init()sound = pygame.mixer.Sound('sound.wav')# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = Falseelif event.type == KEYDOWN:if event.key == K_SPACE:# 播放音效sound.play()# 更新显示pygame.display.flip()pygame.quit()

在这个示例中,我们加载了一个音频文件并在用户按下空格键时播放它。这为游戏添加了声音效果,提升了游戏体验。

3.5 Pygame的碰撞检测

Pygame还提供了碰撞检测的功能,使得开发者能够轻松处理游戏中的物体之间的碰撞关系。

import pygamefrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 定义两个矩形表示物体rect1 = pygame.Rect(100, 100, 50, 50)rect2 = pygame.Rect(200, 200, 50, 50)# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 更新矩形位置rect1.x += 1# 碰撞检测if rect1.colliderect(rect2):print("Collision detected!")# 在窗口上绘制图形screen.fill((255, 255, 255))pygame.draw.rect(screen, (255, 0, 0), rect1)pygame.draw.rect(screen, (0, 0, 255), rect2)# 更新显示pygame.display.flip()pygame.quit()

在这个例子中,我们创建了两个矩形表示物体,并在每一帧中移动一个矩形。通过使用colliderect 方法,我们可以轻松检测两个矩形是否发生了碰撞,从而执行相应的逻辑。

3.6 Pygame的物理引擎支持

虽然Pygame本身没有内置的物理引擎,但可以结合其他库,如pymunk,来实现物理模拟。pymunk是一个用于处理物理碰撞、重力等效果的Python库。

import pygameimport pymunkfrom pygame.locals import *pygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))clock = pygame.time.Clock()# 初始化物理引擎space = pymunk.Space()space.gravity = (0, 1000)# 创建地面ground = pymunk.Body(body_type=pymunk.Body.STATIC)ground_shape = pymunk.Segment(ground, (0, 500), (800, 500), 0)ground_shape.friction = 1.0space.add(ground, ground_shape)# 创建物体body = pymunk.Body()body_shape = pymunk.Circle(body, 30)body.position = 400, 300space.add(body, body_shape)# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 更新物理引擎dt = 1 / 60.0space.step(dt)# 在窗口上绘制图形screen.fill((255, 255, 255))# 绘制地面pygame.draw.line(screen, (0, 0, 0), (0, 500), (800, 500), 5)# 绘制物体pygame.draw.circle(screen, (255, 0, 0), (int(body.position.x), int(body.position.y)), 30)# 更新显示pygame.display.flip()clock.tick(60)pygame.quit()

在这个例子中,我们使用pymunk创建了一个简单的物理场景,包括一个静态的地面和一个受重力影响的圆形物体。通过整合Pygame和pymunk,可以实现更真实的物理效果。

4. Pygame Zero 4.1 简介

Pygame Zero是基于Pygame的简化版本,旨在降低学习门槛,使得初学者能够更容易进入游戏开发领域。

4.2 常见应用场景

Pygame Zero适用于计算机编程入门教育和快速原型制作。

import pgzrundef draw():screen.clear()screen.draw.text("Hello, Pygame Zero!", topleft=(10, 10))pgzrun.go() 4. Pygame Zero 4.3 Pygame Zero的特点和优势

Pygame Zero的设计旨在降低学习门槛,使得游戏开发对于初学者更加友好。它具有以下特点和优势:

4.3.1 简化的API

Pygame Zero通过简化Pygame库的API,提供了一组更易于理解和使用的函数和方法。这使得编写游戏代码更加直观,减少了初学者在入门阶段的困扰。

import pgzrundef draw():screen.clear()screen.draw.text("Hello Pygame Zero!", topleft=(10, 10), fontsize=30, color="white")pgzrun.go() 4.3.2 无需初始化

与Pygame不同,Pygame Zero无需显式的初始化步骤。它使用了隐式初始化,简化了代码结构,让开发者更专注于游戏逻辑的实现。

import pgzrundef draw():screen.clear()screen.draw.text("Hello Pygame Zero!", topleft=(10, 10), fontsize=30, color="white")pgzrun.go() 4.3.3 自动生成游戏窗口

在Pygame Zero中,游戏窗口的创建和管理是自动完成的,无需开发者手动指定窗口大小或初始化设置。这减轻了初学者的负担,使得他们可以更快速地看到代码的效果。

4.4 Pygame Zero的图形和事件处理 4.4.1 图形处理

Pygame Zero通过提供Actor类来简化图形处理。Actor类封装了图像、位置和其他属性,使得绘制图形变得更加简单。

import pgzrun# 创建Actor对象alien = Actor('alien')def draw():screen.clear()# 绘制Actor对象alien.draw()pgzrun.go() 4.4.2 事件处理

Pygame Zero通过on_前缀的事件处理函数来处理事件,使得事件响应变得更加清晰。

import pgzrundef on_key_down(key):print(f"Key {key} pressed")def on_mouse_down(pos):print(f"Mouse clicked at {pos}")pgzrun.go() 4.5 Pygame Zero的声音和动画效果 4.5.1 声音处理

Pygame Zero通过sounds模块来处理声音,使得播放音效变得简单。

import pgzrun# 加载声音文件explosion_sound = sounds.explosiondef on_key_down(key):# 播放声音explosion_sound.play()pgzrun.go() 4.5.2 动画效果

Pygame Zero通过animate模块来实现简单的动画效果。通过指定关键帧和持续时间,可以轻松创建动画。

import pgzrun# 创建Actor对象alien = Actor('alien')def draw():screen.clear()# 绘制Actor对象alien.draw()def update():# 实现动画效果animate(alien, pos=(400, 300), duration=2)pgzrun.go()

在这个例子中,animate函数使得alien对象从当前位置移动到指定位置,持续2秒钟,形成了一个简单的动画效果。

4.6 Pygame Zero的物理引擎支持

Pygame Zero虽然没有内置的物理引擎,但你可以整合其他库,比如pymunk,来实现物理模拟。以下是一个简单的例子:

import pgzrunimport pymunk# 初始化物理引擎space = pymunk.Space()space.gravity = 0, 1000# 创建地面ground = pymunk.Body(body_type=pymunk.Body.STATIC)ground_shape = pymunk.Segment(ground, (0, 500), (800, 500), 0)ground_shape.friction = 1.0space.add(ground, ground_shape)# 创建物体body = pymunk.Body()body_shape = pymunk.Circle(body, 30)body.position = 400, 300space.add(body, body_shape)def draw():screen.clear()# 绘制地面screen.draw.line((0, 500), (800, 500), 'black')# 绘制物体screen.draw.circle((body.position.x, body.position.y), 30, 'red')def update():# 更新物理引擎dt = 1 / 60.0space.step(dt)pgzrun.go()

在这个例子中,我们使用了pymunk库来模拟一个圆形物体受重力影响下的运动。通过整合pymunk和Pygame Zero,你可以在游戏中实现更加真实的物理效果。

强大的3D游戏开发库 5. Panda3D 5.1 简介

Panda3D是一个用于创建复杂3D游戏的引擎,支持多种模型格式和动画。

5.2 常见应用场景

Panda3D适用于制作大型游戏和虚拟现实应用。

from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)app = MyApp()app.run() 5.3 Panda3D的基本组成和架构

Panda3D引擎的基本组成包括场景图、渲染器、着色器、和物理引擎等。其架构被设计为模块化,使得开发者可以选择性地使用不同的组件。

5.3.1 场景图

Panda3D使用场景图来表示游戏世界的层次结构。场景图中的节点表示各种对象,如模型、相机、光源等。通过构建场景图,开发者可以轻松管理游戏中的各种元素。

from panda3d.core import NodePath, PandaNode# 创建一个场景图节点root = NodePath(PandaNode("root"))# 在场景图中添加子节点model_node = root.attach_new_node("model") 5.3.2 渲染器

Panda3D的渲染器负责将场景图中的节点渲染到屏幕上。开发者可以通过设置渲染属性、光照效果等来定制渲染过程。

from panda3d.core import PointLight, AmbientLight# 创建点光源point_light = PointLight("point_light")point_light_np = render.attach_new_node(point_light)point_light_np.set_pos(0, 0, 10)render.set_light(point_light_np)# 创建环境光ambient_light = AmbientLight("ambient_light")ambient_light_np = render.attach_new_node(ambient_light)ambient_light_color = (0.2, 0.2, 0.2, 1)ambient_light.setColor(ambient_light_color)render.set_light(ambient_light_np) 5.3.3 着色器

Panda3D支持使用着色器来实现高级的渲染效果。开发者可以编写自定义的顶点着色器和片元着色器,以实现各种视觉效果。

from panda3d.core import Shader# 加载着色器my_shader = Shader.load(Shader.SL_GLSL, vertex="my_vertex_shader.glsl", fragment="my_fragment_shader.glsl")# 应用着色器到节点model_node.set_shader(my_shader) 5.4 Panda3D的动画和输入处理 5.4.1 动画

Panda3D支持骨骼动画和关键帧动画。通过使用Actor类,开发者可以方便地加载和播放动画。

from direct.actor.Actor import Actor# 创建Actor对象my_actor = Actor("my_model.egg", {"anim": "my_animation.egg"})# 播放动画my_actor.play("anim") 5.4.2 输入处理

Panda3D提供了处理用户输入的机制,包括键盘、鼠标和游戏手柄等。通过设置事件处理函数,开发者可以响应用户的输入。

from direct.showbase.ShowBase import ShowBaseclass MyApp(ShowBase):def __init__(self):ShowBase.__init__(self)# 设置键盘事件处理self.accept("escape", self.user_exit)def user_exit(self):self.destroy()app = MyApp()app.run() 5.5 Panda3D的虚拟现实支持

Panda3D对虚拟现实(VR)有着很好的支持。通过集成OpenVR或其他VR SDK,开发者可以将Panda3D应用程序轻松扩展到虚拟现实平台。

from panda3d.core import load_prc_file_data# 配置Panda3D为使用OpenVRload_prc_file_data("", "load-display pandagl")load_prc_file_data("", "aux-display pandagl -window-type none")load_prc_file_data("", "notify-level-display spam")# 初始化VR系统from panda3d.vrpn import VRPNServerVRPNServer.get_global_ptr().setDevice("openvr")# 创建VR场景from panda3d.vrpn import VRStereoNodevr = VRStereoNode("vr")base.render.attach_new_node(vr)base.camNode = vr# 运行Panda3D应用程序app = MyApp()app.run()

在这个例子中,我们配置了Panda3D以使用OpenVR,并创建了一个基本的VR场景。这使得Panda3D应用程序可以在支持虚拟现实的设备上运行。

通过上述介绍,你可以了解到Panda3D是一个强大的3D游戏引擎,适用于制作复杂的游戏和虚拟现实应用。其模块化的架构和丰富的功能使得开发者可以更灵活地构建他们想要的游戏世界。

6. PyOpenGL 6.1 简介

PyOpenGL是一个提供OpenGL Python绑定的库,用于创建复杂的3D游戏和应用。

6.2 常见应用场景

PyOpenGL常用于制作需要直接控制OpenGL的复杂3D游戏和虚拟现实应用。

from OpenGL.GL import *from OpenGL.GLUT import *def draw():glClear(GL_COLOR_BUFFER_BIT)# 在此绘制OpenGL图形glutDisplayFunc(draw)glutMainLoop() 6.3 PyOpenGL的基本使用和绘图流程

PyOpenGL提供了OpenGL的Python绑定,使得开发者可以在Python中直接使用OpenGL的功能。以下是一个基本的PyOpenGL绘图流程:

6.3.1 初始化OpenGL环境

在使用PyOpenGL之前,需要初始化OpenGL环境。这通常包括设置窗口大小、视口和透视投影等。

from OpenGL.GL import *from OpenGL.GLUT import *# 初始化glutInit(sys.argv)glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)glutInitWindowSize(400, 400)glutCreateWindow(b"My OpenGL Window") 6.3.2 绘制图形

在初始化完成后,可以通过定义绘制函数来绘制图形。

def draw():glClear(GL_COLOR_BUFFER_BIT)# 在此绘制OpenGL图形# 设置绘制回调函数glutDisplayFunc(draw) 6.3.3 运行主循环

最后,通过调用glutMainLoop()来进入OpenGL的主循环,等待事件并执行相应的回调函数。

# 运行主循环glutMainLoop() 6.4 PyOpenGL的三维图形绘制和变换 6.4.1 三维图形绘制

PyOpenGL支持在三维空间中绘制各种图形。以下是一个简单的绘制立方体的例子:

def draw_cube():glBegin(GL_QUADS)glVertex3f(-1, -1, -1)glVertex3f(1, -1, -1)glVertex3f(1, 1, -1)glVertex3f(-1, 1, -1)# 绘制其他面的顶点glEnd()# 在draw函数中调用draw_cubedef draw():glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)glLoadIdentity()draw_cube()glutSwapBuffers() 6.4.2 变换和相机控制

通过使用glTranslate、glRotate等函数,可以实现对三维场景的变换。以下是一个简单的相机控制的例子:

x_rotate, y_rotate, z_translate = 0, 0, -5def draw():glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)glLoadIdentity()glTranslatef(0, 0, z_translate)glRotatef(x_rotate, 1, 0, 0)glRotatef(y_rotate, 0, 1, 0)draw_cube()glutSwapBuffers()# 在键盘回调函数中控制相机def on_key_pressed(key, x, y):global x_rotate, y_rotate, z_translateif key == b'w':x_rotate += 5elif key == b's':x_rotate -= 5elif key == b'a':y_rotate -= 5elif key == b'd':y_rotate += 5elif key == b'q':z_translate += 1elif key == b'e':z_translate -= 1# 注册键盘回调函数glutKeyboardFunc(on_key_pressed)

通过上述例子,你可以了解到PyOpenGL的基本使用和绘图流程,以及如何在三维空间中绘制图形和控制相机。这使得PyOpenGL成为创建复杂的3D游戏和应用的强大工具。

面向特定类型游戏的库 7. Arcade 7.1 简介

Arcade是一个专为创建2D街机风格游戏而设计的库,支持物理引擎和碰撞检测。

7.2 常见应用场景

Arcade适用于制作街机风格的小型游戏和学习游戏物理引擎。

import arcadeclass MyGame(arcade.Window):def on_draw(self):arcade.start_render()# 在此绘制Arcade游戏元素game = MyGame(800, 600, "My Arcade Game")arcade.run() 7.3 Arcade的基本元素和绘图

Arcade提供了一系列基本元素和绘图功能,使得开发2D游戏变得简单。

7.3.1 窗口和事件处理

Arcade使用窗口类(arcade.Window)来创建游戏窗口,并通过事件处理函数来响应用户输入。

import arcadeclass MyGame(arcade.Window):def on_draw(self):arcade.start_render()# 在此绘制Arcade游戏元素game = MyGame(800, 600, "My Arcade Game")arcade.run() 7.3.2 精灵和动画

Arcade使用精灵(arcade.Sprite)来表示游戏中的角色和物体,并通过动画来实现它们的运动。

import arcadeclass Player(arcade.Sprite):def update(self):# 在此更新精灵的状态,实现动画效果player = Player("player_image.png") 7.3.3 碰撞检测

Arcade内置了碰撞检测功能,使得开发者可以轻松地检测游戏中的碰撞事件。

import arcadeclass MyGame(arcade.Window):def on_draw(self):arcade.start_render()# 在此绘制Arcade游戏元素def update(self, delta_time):# 在此更新游戏逻辑,进行碰撞检测if arcade.check_for_collision(player, enemy):player.kill() 7.4 Arcade的物理引擎支持和学习资源 7.4.1 物理引擎支持

Arcade集成了物理引擎,使得开发者可以轻松地实现游戏中的物理效果,如重力、弹跳等。

import arcadeclass MyGame(arcade.Window):def on_draw(self):arcade.start_render()# 在此绘制Arcade游戏元素def update(self, delta_time):# 在此更新游戏逻辑,应用物理效果player.update() 7.4.2 学习资源

Arcade提供了丰富的学习资源,包括文档、示例代码和社区支持。这使得初学者能够更容易地入门2D游戏开发。

# 在Arcade官方网站上找到学习资源https://arcade.academy/

通过上述介绍,你可以了解到Arcade是一个专注于2D街机风格游戏开发的库,提供了简单易用的API和丰富的学习资源,适用于制作小型游戏和学习游戏物理引擎。

8. Cocos2d 8.1 简介

Cocos2d是一个用于创建2D游戏和应用的框架,支持多平台发布,包括移动端和Web。

8.2 常见应用场景

Cocos2d适用于制作小型2D游戏和移动端游戏开发。

import cocosclass HelloWorld(cocos.layer.Layer):def draw(self):# 在此绘制Cocos2d游戏元素if __name__ == "__main__":cocos.director.director.init()cocos.director.director.run(cocos.scene.Scene(HelloWorld())) 8.3 Cocos2d的场景和图层

Cocos2d使用场景(cocos.scene.Scene)和图层(cocos.layer.Layer)来组织游戏元素和逻辑。

8.3.1 场景

场景是Cocos2d中最高级别的容器,用于包含游戏中的所有元素。一个游戏通常由多个场景组成,例如游戏主菜单、游戏关卡等。

import cocosclass MainMenuScene(cocos.scene.Scene):def __init__(self):super(MainMenuScene, self).__init__()self.add(MainMenuLayer()) 8.3.2 图层

图层用于组织场景中的元素,一个场景可以包含多个图层。图层可以包含精灵、文本等可视化元素。

import cocosclass MainMenuLayer(cocos.layer.Layer):def __init__(self):super(MainMenuLayer, self).__init__()self.add(StartButton()) 8.4 Cocos2d的精灵和动画 8.4.1 精灵

Cocos2d中的精灵(cocos.sprite.Sprite)用于表示游戏中的角色和物体。可以设置精灵的位置、大小和纹理等属性。

import cocosclass PlayerSprite(cocos.sprite.Sprite):def __init__(self):super(PlayerSprite, self).__init__("player_image.png")self.position = 320, 240 8.4.2 动画

Cocos2d支持动画,通过创建帧动画来实现。可以定义动画的每一帧和播放速度。

import cocosclass ExplosionAnimation(cocos.sprite.Sprite):def __init__(self):explosion_frames = [cocos.sprite.SpriteFrame("explosion_frame1.png"),cocos.sprite.SpriteFrame("explosion_frame2.png"),cocos.sprite.SpriteFrame("explosion_frame3.png")]explosion_animation = cocos.sprite.Animation(explosion_frames, delay=0.1)explosion_action = cocos.sprite.animate(explosion_animation)super(ExplosionAnimation, self).__init__(explosion_action) 8.5 Cocos2d的多平台支持和Web发布

Cocos2d具有多平台支持,并且可以轻松地将游戏发布到移动端和Web平台。

8.5.1 移动端发布

通过使用Cocos2d的移动端发布工具,可以将游戏发布到iOS和Android平台。

cocos compile -p ios -m releasecocos compile -p android -m release 8.5.2 Web发布

Cocos2d支持将游戏发布为Web应用,使得玩家可以通过浏览器直接访问游戏。

cocos compile -p web -m release

通过上述介绍,你可以了解到Cocos2d是一个用于创建2D游戏和应用的框架,支持多平台发布,包括移动端和Web。其场景和图层的组织方式、精灵和动画的使用以及多平台发布功能使得Cocos2d成为一个强大的2D游戏开发工具。

其他相关库 9. Taichi 9.1 简介

Taichi是用于高性能数值计算和物理模拟的库,可用于游戏物理引擎等方面。

9.2 常见应用场景

Taichi适用于物理模拟和计算,以及游戏中的物理引擎。

import taichi as ti# 在此使用Taichi进行高性能数值计算和物理模拟 9.3 Taichi的基本使用和数值计算

Taichi是一个专注于高性能数值计算的库,下面是一个简单的使用示例,演示了如何进行矩阵乘法的高性能计算。

9.3.1 安装Taichi

首先,需要安装Taichi库。

pip install taichi 9.3.2 矩阵乘法的高性能计算 import taichi as ti# 设置Taichi的计算范围和数据类型ti.init(arch=ti.gpu) # 使用GPU加速,也可以使用ti.cpun = 512a = ti.field(ti.f32, shape=(n, n))b = ti.field(ti.f32, shape=(n, n))c = ti.field(ti.f32, shape=(n, n))# 定义矩阵乘法的计算核心@ti.kerneldef matmul():for i, j in ti.ndrange(n, n):c[i, j] = 0.0for k in range(n):c[i, j] += a[i, k] * b[k, j]# 初始化矩阵数据for i in range(n):for j in range(n):a[i, j] = 1.0 # 填充矩阵ab[i, j] = 2.0 # 填充矩阵b# 执行矩阵乘法计算matmul()# 输出结果for i in range(n):for j in range(n):print(c[i, j], end=' ')print()

上述代码演示了如何使用Taichi进行高性能的矩阵乘法计算。通过使用Taichi,你可以充分利用GPU的并行计算能力,提高数值计算的效率。

9.4 Taichi在游戏中的物理引擎应用 9.4.1 弹簧质点系统

Taichi可以用于模拟弹簧质点系统,实现游戏中的物理引擎效果。以下是一个简单的弹簧质点系统的模拟示例。

import taichi as titi.init(arch=ti.gpu)# 粒子质量、位置、速度particle_mass = 1.0particle_pos = ti.Vector(2, dt=ti.f32, shape=())particle_vel = ti.Vector(2, dt=ti.f32, shape=())# 弹簧的弹性系数和阻尼系数spring_stiffness = 10000.0damping_coefficient = 100.0# 弹簧连接的两个粒子spring_p1 = ti.var(ti.i32, shape=())spring_p2 = ti.var(ti.i32, shape=())@ti.kerneldef simulate():# 计算弹簧力spring_vec = particle_pos[spring_p2] - particle_pos[spring_p1]spring_length = spring_vec.norm()spring_force = -spring_stiffness * (spring_length - 1.0)spring_force += -damping_coefficient * (particle_vel[spring_p2] - particle_vel[spring_p1]).dot(spring_vec) / spring_lengthforce_dir = spring_vec.normalized()# 更新粒子速度particle_vel[spring_p1] += spring_force / particle_mass * force_dirparticle_vel[spring_p2] -= spring_force / particle_mass * force_dir# 更新粒子位置particle_pos[spring_p1] += particle_vel[spring_p1]particle_pos[spring_p2] += particle_vel[spring_p2]# 初始化弹簧连接的两个粒子spring_p1[None] = 0spring_p2[None] = 1# 模拟弹簧质点系统for _ in range(1000):simulate()print(particle_pos[0], particle_pos[1])

上述代码演示了如何使用Taichi模拟弹簧质点系统。通过定义粒子的质量、位置、速度,以及弹簧的弹性系数和阻尼系数,可以实现简单的物理引擎效果。

通过上述介绍,你可以了解到Taichi是一个用于高性能数值计算和物理模拟的库,适用于游戏物理引擎等方面。通过Taichi,你可以实现高效的数值计算和复杂的物理模拟,为游戏开发提供强大的支持。

10. Pyglet 10.1 简介

Pyglet是一个用于创建多媒体应用,包括游戏的库,支持OpenGL渲染和音频处理。

10.2 常见应用场景

Pyglet适用于制作基于OpenGL的游戏或应用,以及学习OpenGL渲染和音频处理。

import pyglet# 创建窗口window = pyglet.window.Window()# 在窗口上绘制图形或执行游戏逻辑@window.eventdef on_draw():window.clear()# 在此绘制Pyglet游戏元素# 运行Pyglet事件循环pyglet.app.run() 10.3 Pyglet的图形绘制和事件处理

Pyglet提供了简单的图形绘制和事件处理功能,下面是一个基本的Pyglet应用示例,演示了如何创建窗口、绘制图形和处理事件。

10.3.1 创建窗口 import pyglet# 创建窗口window = pyglet.window.Window()# 运行Pyglet事件循环pyglet.app.run() 10.3.2 绘制图形 import pyglet# 创建窗口window = pyglet.window.Window()# 在窗口上绘制图形@window.eventdef on_draw():window.clear()# 在此绘制Pyglet游戏元素# 运行Pyglet事件循环pyglet.app.run() 10.3.3 事件处理 import pyglet# 创建窗口window = pyglet.window.Window()# 在窗口上绘制图形@window.eventdef on_draw():window.clear()# 在此绘制Pyglet游戏元素# 处理鼠标点击事件@window.eventdef on_mouse_press(x, y, button, modifiers):print(f"Mouse pressed at ({x}, {y}) with button {button}")# 运行Pyglet事件循环pyglet.app.run() 10.4 Pyglet的OpenGL渲染和音频处理 10.4.1 OpenGL渲染

Pyglet支持OpenGL渲染,可以通过设置OpenGL上下文来实现高性能的图形渲染。

import pygletfrom pyglet.gl import *# 创建窗口并设置OpenGL上下文config = Config(double_buffer=True)window = pyglet.window.Window(config=config)# 在窗口上执行OpenGL渲染@window.eventdef on_draw():glClear(GL_COLOR_BUFFER_BIT)# 在此进行OpenGL渲染# 运行Pyglet事件循环pyglet.app.run() 10.4.2 音频处理

Pyglet提供了音频处理功能,可以加载音频文件并进行播放。

import pyglet# 加载音频文件audio = pyglet.media.load("audio_file.mp3")# 播放音频audio.play()# 运行Pyglet事件循环pyglet.app.run()

通过上述介绍,你可以了解到Pyglet是一个用于创建多媒体应用,包括游戏的库,支持OpenGL渲染和音频处理。通过Pyglet,你可以轻松地创建窗口、绘制图形、处理事件、进行OpenGL渲染和处理音频,为游戏开发提供了全面的支持。

11. Pygame-sdl2 11.1 简介

Pygame-sdl2是Pygame的替代实现,使用SDL2库,兼容Pygame大部分API但更快。

11.2 常见应用场景

Pygame-sdl2可用于加速Pygame应用或游戏,以及替代Pygame应用或游戏。

import pygame_sdl2 as pygamepygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 游戏主循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 在窗口上绘制图形或执行游戏逻辑pygame.display.flip()pygame.quit() 11.3 Pygame-sdl2的性能优势和API兼容性

Pygame-sdl2是Pygame的替代实现,使用SDL2库,具有更好的性能和兼容性。下面是一个基本的Pygame-sdl2应用示例,演示了如何创建窗口、绘制图形和处理事件。

11.3.1 创建窗口 import pygame_sdl2 as pygamepygame.init()# 创建窗口screen = pygame.display.set_mode((800, 600))# 运行Pygame-sdl2事件循环running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 在窗口上绘制图形或执行游戏逻辑pygame.display.flip()pygame.quit() 11.3.2 性能优势

Pygame-sdl2使用SDL2库,通过底层的优化提供更好的性能,特别是在图形渲染方面。

11.3.3 API兼容性

Pygame-sdl2兼容Pygame大部分API,因此可以方便地替代现有的Pygame应用或游戏,而无需修改大量代码。

11.4 Pygame-sdl2的安装

要安装Pygame-sdl2,可以使用以下命令:

pip install pygame_sdl2

通过上述介绍,你可以了解到Pygame-sdl2是Pygame的替代实现,使用SDL2库,具有更好的性能和API兼容性。通过使用Pygame-sdl2,你可以加速现有的Pygame应用或游戏,并在不修改太多代码的情况下享受更好的性能。

拓展领域的Python库 12. PyTorch 12.1 简介

PyTorch是一个深度学习框架,可用于实现人工智能和机器学习算法。

12.2 常见应用场景

PyTorch在游戏中可以用于实现智能体的学习和决策,尤其适用于强化学习算法的实现和游戏中的人工智能。

import torch# 在此使用PyTorch实现游戏中的智能体学习和决策 12.3 PyTorch在游戏中的强化学习应用

PyTorch是一个强大的深度学习框架,适用于实现人工智能和机器学习算法。在游戏开发中,PyTorch可以用于实现智能体的学习和决策,尤其在强化学习算法的实现上具有广泛的应用。

12.3.1 安装PyTorch

首先,需要安装PyTorch库。你可以根据官方网站提供的安装命令选择适合你系统的版本,例如:

pip install torch 12.3.2 强化学习示例

下面是一个简单的强化学习示例,使用PyTorch实现一个基本的Q-learning算法。这个算法用于训练智能体在一个虚拟环境中学习最优的动作,以最大化累积奖励。

import torchimport torch.nn as nnimport torch.optim as optimimport numpy as np# 定义Q-networkclass QNetwork(nn.Module):def __init__(self, state_size, action_size):super(QNetwork, self).__init__()self.fc1 = nn.Linear(state_size, 64)self.fc2 = nn.Linear(64, 64)self.fc3 = nn.Linear(64, action_size)def forward(self, state):x = torch.relu(self.fc1(state))x = torch.relu(self.fc2(x))return self.fc3(x)# 定义Q-learning算法class QLearning:def __init__(self, state_size, action_size, learning_rate=0.001, gamma=0.99):self.q_network = QNetwork(state_size, action_size)self.optimizer = optim.Adam(self.q_network.parameters(), lr=learning_rate)self.criterion = nn.MSELoss()self.gamma = gammadef train_step(self, state, action, reward, next_state, done):state = torch.tensor(state, dtype=torch.float32)next_state = torch.tensor(next_state, dtype=torch.float32)# 计算Q值q_values = self.q_network(state)q_value = q_values[action]# 计算目标Q值if done:target_q = rewardelse:target_q = reward + self.gamma * torch.max(self.q_network(next_state))# 计算损失并优化模型loss = self.criterion(q_value, target_q)self.optimizer.zero_grad()loss.backward()self.optimizer.step()# 创建QLearning实例state_size = 4action_size = 2q_learning = QLearning(state_size, action_size)# 训练Q-learning模型for episode in range(1000):state = np.random.rand(state_size) # 替换成实际的环境状态action = np.random.randint(action_size) # 替换成根据策略选择的动作reward = np.random.rand() # 替换成实际的环境奖励next_state = np.random.rand(state_size) # 替换成实际的环境下一状态done = False # 替换成实际的环境终止判断q_learning.train_step(state, action, reward, next_state, done)# 在实际游戏中使用训练好的Q-network进行决策def make_decision(state):state = torch.tensor(state, dtype=torch.float32)q_values = q_learning.q_network(state)action = torch.argmax(q_values).item()return action

上述代码演示了如何使用PyTorch实现一个简单的Q-learning算法。在实际游戏中,你可以根据游戏环境的状态和奖励设计合适的Q-network结构,并使用Q-learning算法来训练智能体学习最优的决策策略。

通过PyTorch,你可以轻松地构建和训练深度学习模型,为游戏中的人工智能提供强大的支持。

13. Kivy 13.1 简介

Kivy是一个用于创建跨平台的移动应用和多点触控应用的框架,具有丰富的用户界面组件。

13.2 常见应用场景

Kivy适用于移动端游戏开发和多点触控应用的制作。

from kivy.app import Appfrom kivy.uix.button import Buttonclass MyApp(App):def build(self):return Button(text='Hello Kivy!')if __name__ == '__main__':MyApp().run() 13.3 Kivy应用的界面设计和事件处理

Kivy是一个用于创建跨平台的移动应用和多点触控应用的框架,通过简单的Python代码就能实现丰富的用户界面。下面是一个基本的Kivy应用示例,演示了如何创建一个简单的按钮,以及如何处理按钮的点击事件。

13.3.1 安装Kivy

首先,需要安装Kivy库。你可以使用以下命令进行安装:

pip install kivy 13.3.2 创建一个简单的Kivy应用 from kivy.app import Appfrom kivy.uix.button import Buttonclass MyApp(App):def build(self):# 创建按钮button = Button(text='Hello Kivy!')# 绑定按钮点击事件处理函数button.bind(on_press=self.on_button_press)return buttondef on_button_press(self, instance):print('Button pressed!')if __name__ == '__main__':MyApp().run()

在这个简单的例子中,我们创建了一个按钮,并使用bind方法将按钮的点击事件与处理函数on_button_press绑定在一起。当按钮被点击时,on_button_press函数将被调用,输出"Button pressed!"。

通过Kivy,你可以轻松地创建具有交互性的移动应用和多点触控应用,为游戏开发提供了丰富的用户界面设计和事件处理能力。

14. Ren’Py 14.1 简介

Ren’Py是专注于视觉小说和交互小说的引擎,包含脚本语言,简化故事和角色管理。

14.2 常见应用场景

Ren’Py适用于视觉小说和交互小说制作,以及制作故事驱动型游戏。

# Ren'Py使用自定义脚本语言,构建交互式故事和游戏 14.3 Ren’Py脚本语言和交互式故事

Ren’Py是专注于视觉小说和交互小说的引擎,通过使用自定义脚本语言,简化了故事和角色的管理。下面是一个简单的Ren’Py脚本语言示例,演示了如何构建一个基本的交互式故事。

14.3.1 安装Ren’Py

首先,需要安装Ren’Py引擎。你可以从官方网站下载安装程序进行安装。

14.3.2 创建一个简单的Ren’Py项目

创建一个Ren’Py项目,遵循Ren’Py的项目结构和脚本语法。

14.3.3 编写Ren’Py脚本

在Ren’Py项目中,你可以使用Ren’Py脚本语言编写交互式故事。以下是一个简单的示例:

# 游戏标题title "My Ren'Py Game"# 定义角色define e = Character('Eileen')# 开场白label start:e "Hello, welcome to Ren'Py!"e "This is a simple interactive story."# 选择分支menu:"Choose an action":"Continue the story":e "You decided to continue the story."jump next_scene"End the game":e "You chose to end the game."return# 下一个场景label next_scene:e "You've reached the next scene."e "Thanks for playing!"# 启动游戏$ renpy.game.script.early_load()$ renpy.game.context().call("start")

在这个示例中,我们定义了一个角色"Eileen",并在start标签中开始了故事。通过menu,玩家可以选择继续故事或结束游戏。选择继续故事将跳转到next_scene标签,结束游戏将退出。

通过Ren’Py,你可以通过简单的脚本语言创建复杂的交互式故事,为视觉小说和交互小说的制作提供了强大的引擎支持。

15. PyBullet 15.1 简介

PyBullet是一个物理引擎库,用于模拟刚体和软体的物理行为,适用于游戏中的物理模拟和仿真。

15.2 常见应用场景

PyBullet可用于游戏中的物理模拟,机器人学习和仿真等领域。

import pybullet as p# 在此使用PyBullet进行游戏中的物理模拟和仿真 15.3 PyBullet在Python中的应用

PyBullet是一个强大的物理引擎库,通过Python API提供了丰富的功能,适用于游戏中的物理模拟和仿真。以下是一个简单的PyBullet示例:

15.3.1 安装PyBullet

首先,需要安装PyBullet库。你可以使用以下命令通过pip进行安装:

pip install pybullet 15.3.2 PyBullet基础示例 import pybullet as p# 连接到PyBullet物理引擎physicsClient = p.connect(p.GUI) # 使用图形界面(也可以使用p.DIRECT)# 设置重力p.setGravity(0, 0, -10)# 创建平面planeId = p.createPlane(planeNormal=[0, 0, 1])# 创建一个立方体cubeStartPos = [0, 0, 1]cubeStartOrientation = p.getQuaternionFromEuler([0, 0, 0])boxId = p.createBox(1, 1, 1, position=cubeStartPos, orientation=cubeStartOrientation)# 设置时间步长和重复次数timeStep = 1/240numIterations = 5# 模拟循环for _ in range(1000):# 进行物理模拟p.stepSimulation()# 断开与物理引擎的连接p.disconnect()

在这个例子中,我们使用PyBullet创建了一个带有平面和立方体的简单场景,并进行了物理模拟。你可以通过调整参数和添加更多物体来进行进一步的实验。

15.3.3 PyBullet和机器人学习

PyBullet还被广泛用于机器人学习和仿真领域。它提供了丰富的API,可以用于创建虚拟机器人、进行强化学习等任务。以下是一个简单的机器人学习示例:

import pybullet as p# 连接到PyBullet物理引擎physicsClient = p.connect(p.GUI) # 使用图形界面# 加载机器人模型robot = p.loadURDF("path/to/robot.urdf", [0, 0, 1])# 设置时间步长和重复次数timeStep = 1/240numIterations = 5# 模拟循环for _ in range(1000):# 进行物理模拟p.stepSimulation()# 断开与物理引擎的连接p.disconnect()

这是一个简化的示例,实际上,机器人学习任务可能涉及更复杂的环境、传感器模拟和控制策略。PyBullet的强大功能使其成为进行这类任务的理想选择。

16. Pygame GUI 16.1 简介

Pygame GUI是用于在Pygame应用中创建用户界面的库,支持按钮、文本框等常见的UI元素。

16.2 常见应用场景

Pygame GUI适用于在Pygame游戏中添加用户界面,制作交互式的游戏界面。

import pygameimport pygame_gui# 在Pygame应用中使用Pygame GUI创建用户界面 16.3 在Pygame中使用Pygame GUI创建用户界面

Pygame GUI是一个方便的库,允许在Pygame应用中轻松地添加用户界面元素。以下是一个简单的示例,演示了如何在Pygame中使用Pygame GUI创建用户界面:

16.3.1 安装Pygame GUI

首先,需要安装Pygame GUI库。你可以使用以下命令通过pip进行安装:

pip install pygame_gui 16.3.2 Pygame GUI基础示例 import pygameimport pygame_gui# 初始化Pygamepygame.init()# 设置屏幕大小screen = pygame.display.set_mode((800, 600))pygame.display.set_caption("Pygame GUI Example")# 创建Pygame GUI的管理器manager = pygame_gui.UIManager((800, 600))# 创建一个按钮button = pygame_gui.elements.UIButton(relative_rect=pygame.Rect((350, 275), (100, 50)),text='Click me',manager=manager)# 游戏主循环clock = pygame.time.Clock()is_running = Truewhile is_running:time_delta = clock.tick(60) / 1000.0for event in pygame.event.get():if event.type == pygame.QUIT:is_running = False# 处理Pygame GUI事件manager.process_events(event)# 更新Pygame GUImanager.update(time_delta)# 在屏幕上绘制Pygame GUIscreen.fill((255, 255, 255))manager.draw_ui(screen)pygame.display.flip()pygame.quit()

在这个示例中,我们创建了一个简单的Pygame窗口,并在窗口中添加了一个按钮。Pygame GUI通过提供UIManager和各种UI元素(如UIButton)来简化用户界面的创建和管理。你可以根据需要添加更多的UI元素,创建自定义的用户界面。

总结

通过本文的阅读,读者将获得关于Python在游戏开发中多方面应用的深入了解。从轻松入门的2D游戏到挑战性的3D应用,从物理模拟到深度学习,Python提供了丰富多彩的生态系统,为游戏开发者们提供了广阔的创作空间。希望本文能够激发你在游戏开发领域的创造力,让Python成为你探索游戏世界的得力伙伴。

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接