三角洲辅助卡盟新版上线,应有尽有
当前位置:首页 > 游戏攻略> 正文

什么游戏可以玩

发布时间:06/21 10:36:14
基于Python和Pygame从零构建一个可玩的2D平台游戏

游戏开发环境准备

在开始编写代码之前,你需要一个能够运行Python和Pygame库的编程环境。

第一步:安装Python

访问Python官方网站(https://www.python.org/downloads/),下载并安装适用于你操作系统的最新稳定版本。在安装过程中,请务必勾选“Add Python to PATH”选项。

安装完成后,打开命令行终端(Windows上是CMD或PowerShell,macOS/Linux上是Terminal),输入以下命令验证安装是否成功:

``` python --version ```

如果终端显示类似“Python 3.x.x”的版本信息,说明安装正确。

第二步:安装Pygame库

Pygame是用于创建2D游戏的核心库。在命令行终端中,使用Python的包管理工具pip进行安装:

``` pip install pygame ```

安装成功后,你可以通过创建一个简单的Python脚本来验证Pygame是否正常工作。创建一个名为test_pygame.py的新文件,输入以下代码:

``` import pygame pygame.init() print("Pygame初始化成功!") pygame.quit() ```

在终端中运行这个脚本:

``` python test_pygame.py ```

如果终端输出“Pygame初始化成功!”,则环境配置完成。

项目结构与初始化窗口

我们将创建一个简单的文件夹结构来组织代码和资源。在你的工作目录中,创建以下文件和文件夹:

  • main.py (游戏主程序)
  • player.py (玩家角色类)
  • platform.py (平台类)
  • assets/ (存放图片和音效的文件夹)

我们编写main.py文件,初始化游戏窗口和主循环。

打开main.py,输入以下代码:

``` import pygame import sys 初始化Pygame pygame.init() 游戏窗口尺寸 SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 颜色定义 (RGB) WHITE = (255, 255, 255) BLACK = (0, 0, 0) BLUE = (0, 120, 255) 创建游戏窗口 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("我的第一个平台游戏") clock = pygame.time.Clock() 用于控制帧率 游戏主循环标志 running = True while running: 处理事件(如退出游戏) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False 监听键盘按键事件 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False 填充背景色 screen.fill(BLUE) 更新屏幕显示 pygame.display.flip() 控制游戏帧率为60帧/秒 clock.tick(60) 退出Pygame并关闭程序 pygame.quit() sys.exit() ```

保存并运行这个文件:

``` python main.py ```

此时,你应该看到一个蓝色的游戏窗口,按ESC键或点击窗口关闭按钮可以退出。

创建玩家角色

接下来,我们创建一个可以由键盘控制的玩家角色。打开player.py文件,定义玩家类。

player.py中输入以下代码:

``` import pygame class Player: def __init__(self, x, y): 角色的位置、速度、尺寸 self.x = x self.y = y self.width = 40 self.height = 60 self.vel_x = 0 self.vel_y = 0 self.is_jumping = False self.jump_power = -15 向上的速度,负值表示向上 self.gravity = 0.8 self.move_speed = 5 角色的颜色(稍后可以替换为图片) self.color = (255, 50, 50) 红色 def update(self, platforms): """更新玩家位置和状态,并处理与平台的碰撞""" 应用重力 self.vel_y += self.gravity 水平移动 self.x += self.vel_x 处理水平方向碰撞 self._handle_horizontal_collision(platforms) 垂直移动 self.y += self.vel_y 处理垂直方向碰撞 self._handle_vertical_collision(platforms) 防止角色掉出屏幕底部(简单的地面判定) if self.y > 550: self.y = 550 self.vel_y = 0 self.is_jumping = False def _handle_horizontal_collision(self, platforms): """处理与平台的水平碰撞""" player_rect = pygame.Rect(self.x, self.y, self.width, self.height) for platform in platforms: if player_rect.colliderect(platform.rect): if self.vel_x > 0: 向右移动时撞到 self.x = platform.rect.left - self.width elif self.vel_x < 0: 向左移动时撞到 self.x = platform.rect.right self.vel_x = 0 def _handle_vertical_collision(self, platforms): """处理与平台的垂直碰撞""" player_rect = pygame.Rect(self.x, self.y, self.width, self.height) for platform in platforms: if player_rect.colliderect(platform.rect): if self.vel_y > 0: 向下移动时撞到(落在平台上) self.y = platform.rect.top - self.height self.vel_y = 0 self.is_jumping = False elif self.vel_y < 0: 向上移动时撞到(顶到头) self.y = platform.rect.bottom self.vel_y = 0 def jump(self): """执行跳跃动作""" if not self.is_jumping: self.vel_y = self.jump_power self.is_jumping = True def draw(self, screen): """在屏幕上绘制玩家角色""" pygame.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height)) ```

现在,我们需要在main.py中实例化玩家对象并集成控制逻辑。更新main.py中的代码:

首先在文件顶部添加导入语句:

``` from player import Player ```

然后在创建游戏窗口的代码之后,实例化玩家对象:

``` 创建玩家对象,初始位置在(100, 300) player = Player(100, 300) ```

在游戏主循环中,我们需要处理持续按下的按键(之前的代码只处理了按键按下事件)。修改主循环中的事件处理部分,并添加玩家更新和绘制逻辑:

在主循环开始处,获取当前所有被按下的键:

``` 获取当前按下的所有键 keys = pygame.key.get_pressed() ```

在填充背景色之前,根据按键更新玩家速度,并调用玩家的更新和绘制方法:

``` 处理玩家移动(持续按键) player.vel_x = 0 每帧重置水平速度 if keys[pygame.K_LEFT]: player.vel_x = -player.move_speed if keys[pygame.K_RIGHT]: player.vel_x = player.move_speed if keys[pygame.K_SPACE]: player.jump() 更新玩家状态(暂时传入空列表作为平台参数) player.update([]) 填充背景色 screen.fill(BLUE) 绘制玩家 player.draw(screen) ```

保存并运行main.py,现在你应该可以使用左右方向键移动红色方块,按空格键跳跃。

创建平台系统

一个平台游戏需要平台供角色站立和跳跃。打开platform.py文件,创建一个简单的平台类。

platform.py中输入以下代码:

``` import pygame class Platform: def __init__(self, x, y, width, height): self.rect = pygame.Rect(x, y, width, height) self.color = (0, 200, 0) 绿色 def draw(self, screen): """在屏幕上绘制平台""" pygame.draw.rect(screen, self.color, self.rect) ```

接下来,在main.py中集成平台。首先在文件顶部导入Platform类:

``` from platform import Platform ```

在创建玩家对象的代码之后,创建一个平台列表:

``` 创建一些平台 platforms = [ Platform(0, 550, 800, 50), 底部地面 Platform(100, 450, 200, 20), 第一个平台 Platform(400, 350, 150, 20), 第二个平台 Platform(200, 250, 100, 20), 第三个平台 ] ```

更新主循环中调用玩家update方法的部分,将平台列表作为参数传入,并在绘制玩家之后绘制所有平台:

将原来的player.update([])改为:

``` player.update(platforms) ```

player.draw(screen)之后,添加绘制平台的循环:

``` 绘制所有平台 for platform in platforms: platform.draw(screen) ```

保存并运行main.py。现在你的角色可以在地面和绿色平台上行走、跳跃,并且不会穿过平台。

添加游戏目标和基本交互

为了让游戏有明确的目标,我们添加一个简单的“终点”和碰撞检测。在main.py中,我们添加一个目标区域。

在颜色定义部分添加一个新颜色:

``` GOLD = (255, 215, 0) ```

在创建平台列表的代码之后,定义目标矩形的属性:

``` 目标区域(终点) goal_rect = pygame.Rect(700, 200, 60, 60) goal_achieved = False ```

在主循环中,在绘制玩家和平台之后,绘制目标区域:

``` 绘制目标区域 pygame.draw.rect(screen, GOLD, goal_rect) 检查玩家是否到达目标 player_rect = pygame.Rect(player.x, player.y, player.width, player.height) if player_rect.colliderect(goal_rect) and not goal_achieved: goal_achieved = True print("恭喜!你到达了终点!") ```

为了提供视觉反馈,我们可以在目标达成时改变屏幕显示。在绘制目标区域之前,可以添加一个条件判断,改变目标颜色或在屏幕上显示文字。

在主循环中,修改绘制目标区域的代码:

``` 根据是否达成目标改变颜色 goal_color = GOLD if not goal_achieved else (100, 100, 100) pygame.draw.rect(screen, goal_color, goal_rect) 如果达成目标,在屏幕上显示文字 if goal_achieved: 注意:这里需要先初始化字体,请在pygame.init()之后添加 font = pygame.font.Font(None, 36) 然后在循环内渲染文字 goal_text = font.render("目标达成!", True, WHITE) screen.blit(goal_text, (SCREEN_WIDTH//2 - 70, 50)) pass 你可以取消注释上面的代码来启用文字显示 ```

要启用文字显示功能,你需要在main.pypygame.init()之后初始化字体:

``` font = pygame.font.Font(None, 36) ```

并取消主循环中相关代码的注释。

添加简单敌人与生命值

为了增加挑战性,我们添加一个会移动的简单敌人。在main.py中直接实现一个简单的敌人逻辑。

在创建平台列表的代码之后,添加敌人属性:

``` 敌人属性 enemy_rect = pygame.Rect(500, 500, 40, 40) enemy_color = (150, 0, 150) 紫色 enemy_speed = 2 enemy_direction = 1 1表示向右,-1表示向左 ```

在主循环中,更新敌人位置并处理与玩家的碰撞:

在更新玩家状态之后,添加敌人更新逻辑:

``` 更新敌人位置(简单左右移动) enemy_rect.x += enemy_speed enemy_direction 简单边界检测,在x=300和x=600之间来回移动 if enemy_rect.x >= 600: enemy_direction = -1 if enemy_rect.x <= 300: enemy_direction = 1 ```

在绘制平台之后,绘制敌人:

``` 绘制敌人 pygame.draw.rect(screen, enemy_color, enemy_rect) ```

在检查玩家是否到达目标的代码之前,添加敌人碰撞检测:

``` 检查玩家是否碰到敌人 if player_rect.colliderect(enemy_rect): 简单处理:将玩家重置到起点 player.x = 100 player.y = 300 print("碰到敌人!重置位置。") ```

保存并运行游戏。现在你需要避开移动的紫色方块,到达金色终点。

总结与后续扩展

至此,你已经完成了一个具备基本可玩性的2D平台游戏原型。它包含了玩家控制、物理(重力和碰撞)、平台、目标和敌人等核心元素。

你可以在此基础上进行以下扩展,让游戏更加完整:

  • 图形资源:将玩家、平台、敌人的纯色方块替换为真正的图片。使用pygame.image.load(‘assets/player.png’)加载图片,并在draw方法中使用screen.blit(image, (x, y))进行绘制。
  • 音效:使用pygame.mixer.Sound(‘assets/jump.wav’).play()在玩家跳跃或碰到敌人时播放音效。
  • 关卡设计:将平台和敌人的位置数据存储在列表或外部文件中,方便设计多个关卡。
  • 生命值与计分系统:为玩家添加生命值变量,碰到敌人时减少生命值,到达终点时增加分数,并在屏幕角落显示这些信息。
  • 摄像机跟随:当玩家移动到屏幕边缘时,让游戏场景滚动,实现更大的关卡地图。

所有代码文件应保持在同一目录下,并确保assets文件夹中存在你引用的任何图片或音效文件。通过不断迭代和添加新功能,你可以将这个基础框架发展成一个完整的游戏项目。

版权保护: 本文由 741卡盟 原创,转载请保留链接: http://741ka.com/gamenews/19927.html