当前位置: 首页 > news >正文

pygame开发课程系列(7):打砖块,飞行射击,跳跃游戏实例开发

第七章 实践项目

在本章中,我们将通过三个实践项目来巩固和应用前面章节中学到的知识。这些项目涵盖了经典打砖块游戏、飞行射击游戏和简单的平台游戏,它们将帮助你更好地理解 Pygame 的使用,并为你开发自己的游戏提供灵感和实践经验。

7.1 项目 1: 经典打砖块在这里插入图片描述

目标: 设计一个简单的打砖块游戏,玩家控制一个挡板,反弹一个球,打破砖块以获得分数。

7.1.1 设计基本逻辑
  1. 初始化 Pygame

    import pygame
    import syspygame.init()
    
  2. 设置游戏窗口

    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("经典打砖块")
    
  3. 定义颜色

    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    RED = (255, 0, 0)
    
  4. 创建挡板、球和砖块

    # 挡板
    paddle = pygame.Rect(350, 550, 100, 20)
    paddle_speed = 5# 球
    ball = pygame.Rect(390, 530, 20, 20)
    ball_speed_x = 3
    ball_speed_y = -3# 砖块
    bricks = [pygame.Rect(60 + i * 60, 50 + j * 30, 50, 20) for i in range(10) for j in range(5)]
    
  5. 游戏循环

    clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:paddle.x -= paddle_speedif keys[pygame.K_RIGHT]:paddle.x += paddle_speed# 更新球的位置ball.x += ball_speed_xball.y += ball_speed_y# 碰撞检测if ball.left <= 0 or ball.right >= 800:ball_speed_x = -ball_speed_xif ball.top <= 0:ball_speed_y = -ball_speed_yif ball.colliderect(paddle):ball_speed_y = -ball_speed_y# 砖块碰撞for brick in bricks[:]:if ball.colliderect(brick):ball_speed_y = -ball_speed_ybricks.remove(brick)# 绘制screen.fill(BLACK)pygame.draw.rect(screen, WHITE, paddle)pygame.draw.ellipse(screen, RED, ball)for brick in bricks:pygame.draw.rect(screen, WHITE, brick)pygame.display.flip()clock.tick(60)
    

完整代码如下:

import pygame
import syspygame.init()screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("经典打砖块")BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)# 挡板
paddle = pygame.Rect(350, 550, 100, 20)
paddle_speed = 5# 球
ball = pygame.Rect(390, 530, 20, 20)
ball_speed_x = 3
ball_speed_y = -3# 砖块
bricks = [pygame.Rect(60 + i * 60, 50 + j * 30, 50, 20) for i in range(10) for j in range(5)]clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:paddle.x -= paddle_speedif keys[pygame.K_RIGHT]:paddle.x += paddle_speed# 更新球的位置ball.x += ball_speed_xball.y += ball_speed_y# 碰撞检测if ball.left <= 0 or ball.right >= 800:ball_speed_x = -ball_speed_xif ball.top <= 0:ball_speed_y = -ball_speed_yif ball.colliderect(paddle):ball_speed_y = -ball_speed_y# 砖块碰撞for brick in bricks[:]:if ball.colliderect(brick):ball_speed_y = -ball_speed_ybricks.remove(brick)# 绘制screen.fill(BLACK)pygame.draw.rect(screen, WHITE, paddle)pygame.draw.ellipse(screen, RED, ball)for brick in bricks:pygame.draw.rect(screen, WHITE, brick)pygame.display.flip()clock.tick(60)

最终运行效果如图:
在这里插入图片描述

7.2 项目 2: 飞行射击游戏

目标: 创建一个简单的飞行射击游戏,玩家控制飞行器,射击敌人,避免被敌人击中。

7.2.1 设计基本逻辑
  1. 初始化 Pygame设置窗口

    import pygame
    import syspygame.init()
    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("飞行射击游戏")
    
  2. 定义颜色和资源

    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)# 飞行器
    player = pygame.Rect(375, 500, 50, 30)
    player_speed = 5# 子弹
    bullets = []# 敌人
    enemies = [pygame.Rect(i * 60, j * 50, 40, 30) for i in range(10) for j in range(3)]
    
  3. 游戏循环

    clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:player.x -= player_speedif keys[pygame.K_RIGHT]:player.x += player_speedif keys[pygame.K_SPACE]:bullets.append(pygame.Rect(player.centerx - 5, player.top - 10, 10, 20))# 更新子弹位置for bullet in bullets[:]:bullet.y -= 10if bullet.bottom < 0:bullets.remove(bullet)# 碰撞检测for bullet in bullets[:]:for enemy in enemies[:]:if bullet.colliderect(enemy):bullets.remove(bullet)enemies.remove(enemy)# 绘制screen.fill(BLACK)pygame.draw.rect(screen, WHITE, player)for bullet in bullets:pygame.draw.rect(screen, WHITE, bullet)for enemy in enemies:pygame.draw.rect(screen, WHITE, enemy)pygame.display.flip()clock.tick(60)
    

整体代码:

import pygame
import syspygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("飞行射击游戏")WHITE = (255, 255, 255)
BLACK = (0, 0, 0)# 飞行器
player = pygame.Rect(375, 500, 50, 30)
player_speed = 5# 子弹
bullets = []# 敌人
enemies = [pygame.Rect(i * 60, j * 50, 40, 30) for i in range(10) for j in range(3)]clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:player.x -= player_speedif keys[pygame.K_RIGHT]:player.x += player_speedif keys[pygame.K_SPACE]:bullets.append(pygame.Rect(player.centerx - 5, player.top - 10, 10, 20))# 更新子弹位置for bullet in bullets[:]:bullet.y -= 10if bullet.bottom < 0:bullets.remove(bullet)# 碰撞检测for bullet in bullets[:]:for enemy in enemies[:]:if bullet.colliderect(enemy):bullets.remove(bullet)enemies.remove(enemy)# 绘制screen.fill(BLACK)pygame.draw.rect(screen, WHITE, player)for bullet in bullets:pygame.draw.rect(screen, WHITE, bullet)for enemy in enemies:pygame.draw.rect(screen, WHITE, enemy)pygame.display.flip()clock.tick(60)

运行效果如下:
在这里插入图片描述

7.3 项目 3: 简单的爬梯跳跃游戏

目标: 设计一个基本的小游戏玩家可以在梯子上移动和跳跃。

7.3.1 设计基本逻辑
  1. 初始化 Pygame设置窗口

    import pygame
    import syspygame.init()
    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("简单的平台游戏")
    
  2. 定义颜色和资源

    WHITE = (255, 255, 255)
    GREEN = (0, 255, 0)
    BLUE = (0, 0, 255)# 玩家
    player = pygame.Rect(50, 500, 40, 60)
    player_speed = 5
    player_jump = False
    player_y_velocity = 0# 平台
    platforms = [pygame.Rect(0, 550, 800, 50), pygame.Rect(200, 400, 200, 20)]
    gravity = 0.5
    
  3. 游戏循环

    clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:player.x -= player_speedif keys[pygame.K_RIGHT]:player.x += player_speedif keys[pygame.K_SPACE] and not player_jump:player_y_velocity = -10player_jump = True# 应用重力player_y_velocity += gravityplayer.y += player_y_velocity# 平台碰撞for platform in platforms:if player.colliderect(platform):if player_y_velocity > 0:player.bottom = platform.topplayer_y_velocity = 0player_jump = False# 边界检测if player.bottom > 600:player.bottom = 600player_y_velocity = 0player_jump = False# 绘制screen.fill(BLUE)pygame.draw.rect(screen, WHITE, player)for platform in platforms:pygame.draw.rect(screen, GREEN, platform)pygame.display.flip()clock.tick(60)
    

运行效果如下:
在这里插入图片描述

小结

在本章中,我们通过三个实践项目展示了如何使用 Pygame 开发简单的游戏。这些项目不仅让你了解了游戏开发的基本流程,还帮助你掌握了 Pygame 的核心功能。你可以使用这些项目作为起点,继续扩展和改进你的游戏,或者尝试创建更多不同类型的游戏。通过不断实践和优化,你将能够创建更复杂、更有趣的游戏项目。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 为什么我编写不出优秀的ChatGPT提示词?
  • 深度学习中常用参数解释
  • ADE7953ACPZ-RL带零线电流测量的单相多功能计量IC 高精度与功能特性概览
  • 车载T-Box通信稳定性弱网测试方案
  • transforms
  • C语言-指针
  • 【数学分析笔记】第2章第3节无穷大量(1)
  • PMP核心知识点—之项目管理基础
  • vue3+ts+vant4 列表下拉刷新+分页加载
  • C学习(数据结构)--> 实现顺序结构二叉树
  • 使用maven快速生成打包文件2
  • EmguCV学习笔记 C# 5.2 仿射变换
  • 从CSS注入到渗透未知网页
  • Nuxt学习_基础知识(二)
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调模型合并-Axolotl-单机单卡-V100(十)
  • 10个最佳ES6特性 ES7与ES8的特性
  • download使用浅析
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript 哈希表
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Laravel5.4 Queues队列学习
  • Laravel核心解读--Facades
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpringBoot几种定时任务的实现方式
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从tcpdump抓包看TCP/IP协议
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 前端临床手札——文件上传
  • 前端性能优化——回流与重绘
  • 前嗅ForeSpider采集配置界面介绍
  • 首页查询功能的一次实现过程
  • 思考 CSS 架构
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 正则学习笔记
  • - 转 Ext2.0 form使用实例
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #### go map 底层结构 ####
  • #define 用法
  • #微信小程序:微信小程序常见的配置传值
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (Java)【深基9.例1】选举学生会
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建