这个练习项目来自《Python基础教程(第2版)》,案例原名为“DIY街机游戏”。

原文中做的是一个天上掉秤砣的游戏,玩家需要控制屏幕底部的香蕉左右移动,躲避掉下来的秤砣。

在这篇教程中,我们使用的素材是两个飞机。

也就是说,玩家要控制屏幕底部的飞机,躲避其他从屏幕上方飞来的敌机。

这个练习项目,我们需要使用到pygame模块。

安装命令:py -m pip install pygame –user

安装完成之后,可以运行下方命令进行测试,测试程序是一个带有图像与声音小游戏。

测试命令:py -m pygame.examples.aliens

在完成模块的安装之后,我们就可以开始进行项目练习了。

在这篇教程中,我们的练习目标是完成一个敌机在屏幕中向下移动,并且当敌机从屏幕下方消失时,再次让敌机从顶部随机位置出现。

一、导入模块

sys:用于退出游戏程序

pygame:用于游戏的功能

pygame.locals:游戏中需要用到的一些常量

random:用于敌机水平方向随机出现的位置

这里特别说明以下pygame.locals这个模块,它的里面包含所有定义好的常量,例如:FULLSCREEN(全屏)和KEYDOWN(按键按下)。

常量和变量一样,用于保存某些值,区别在于变量的值会发生改变,而常量的值是固定的。

在Python中一般表示常量的名称是全部大写字母的单词。

示例代码:

import sys, pygame, time # 导入需要的模块

from pygame.locals import * # 导入所有常量

from random import randrange # 导入随机范围的方法

二、创建游戏对象

在游戏中的每一个飞机都是一个游戏对象(子图形),要通过素材图片进行创建。

在游戏对象中要包含对图片的处理以及重置和更新的方法。

在这个游戏中,重置方法负责将游戏对象移动回初始位置,更新方法则控制游戏对象的移动方向。

一个游戏对象类的创建,需要继承pygame.sprite模块中的Sprite类。

通过图片创建游戏对象时,需要用载入的图片(Surface对象)调用get_rect()方法,这个方法会返回一个Rect对象(rectangle:矩形,理解为一个默认与图片尺寸相同的不可见矩形。),这个对象包含很多特性,例如:left、top、width和height属性,也就是位置与宽高。

每个游戏对象的类都要包含image和rect两个特性,image(Surface对象)决定游戏对象显示的内容,rect(Rect对象)决定游戏对象的位置、尺寸。

所以,我们可以通过设置rect对象的特性改变游戏对象的位置。

示例代码:

class Enemy(pygame.sprite.Sprite): # 通过图片创建游戏对象类

def __init__(self):

self.image = enemy_image

pygame.sprite.Sprite.__init__(self) # 重载超类的构造方法

self.rect = self.image.get_rect() # 从图片创建游戏对象的rect特性

self.reset() # 游戏对象重置位置

def reset(self): # 定义游戏对象重置位置的方法

self.rect.top = -self.rect.height # 设置游戏对象y轴初始随机位置

self.rect.centerx = randrange(screen_size[0]) # 设置游戏对象x轴的随机位置

def update(self): # 重写超类中更新游戏对象位置的方法

self.rect.top += 1 # 每次位置向下移动1像素

if self.rect.top > screen_size[1]: # 如果超出屏幕下边界

self.reset() # 重置位置

注意:在上方代码中的变量enemy_image和screen_size会在之后的主程序代码中定义。

二、主程序

主程序包含以下功能:

初始化:包括屏幕尺寸、显示模式以及鼠标指针的设定;

载入图像:读取本地的图像文件

游戏对象集:创建游戏对象集将所有游戏对象添加(当前就1个)

屏幕初始化:定义屏幕的颜色,创建屏幕外观并填充颜色后,弹出显示屏幕。

清除游戏对象的方法:对游戏对象经过的区域进行清理;因为游戏运行时是在不停的绘图,要将之前的图擦除,再绘制新图。

循环:监控退出事件以及进行游戏对象的处理

大家可以通过代码中的注释,仔细理解整个实现过程。

示例代码:

# 初始化

pygame.init()

screen_size = 360, 640 # 设置游戏屏幕尺寸

pygame.display.set_mode(screen_size, FULLSCREEN) # 设置显示模式(FULLSCREEN:全屏)

pygame.mouse.set_visible(0) # 隐藏鼠标指针

# 载入游戏对象的图像

enemy_image = pygame.image.load('enemy.png').convert_alpha() # 载入图片

# 创建游戏对象集并添加游戏对象

sprites = pygame.sprite.RenderUpdates() # 创建游戏对象集

sprites.add(Enemy()) # 添加游戏对象

# 设置屏幕外观

bgcolor = (255, 255, 255) # 游戏屏幕背景颜色

screen = pygame.display.get_surface() # 创建屏幕外观

screen.fill(bgcolor) # 屏幕填充背景颜色

pygame.display.flip() # 弹出屏幕

# 清除游戏对象

def clear_callback(surf, rect): # 定义清除游戏对象的方法

surf.fill(bgcolor, rect) # 屏幕外观中的游戏对象区域填充背景颜色

# 监控退出事件

while True:

for event in pygame.event.get(): # 获取事件

if event.type == QUIT: # 如果事件类型是退出

sys.exit() # 退出程序

if event.type == KEYDOWN and event.key == K_ESCAPE: # 如果事件类型为按键并且按键为ESC

sys.exit() # 退出程序

# 实现游戏对象的不停移动

pygame.time.Clock().tick(100) # 设置每秒帧数

sprites.clear(screen, clear_callback) # 清除游戏对象经过的区域

sprites.update() # 更新所有游戏对象

updates = sprites.draw(screen) # 屏幕中绘制所有游戏对象

pygame.display.update(updates) # 更新所有游戏对象的显示

完成以上代码之后,我们运行程序,就能够看到一个由上至下移动的敌机。

本节练习源代码:【点此下载】

python游戏-练习项目19:使用python制作游戏(上)相关推荐

  1. Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

    资源介绍 课程简介:xa0xa0 Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频 ----------------------课程目录 Python项目实战篇 ...

  2. pycharm创建python工程_使用Pycharm(Python工具)新建项目及创建Python文件的教程

    创建项目 首先打开Pycharm 勾选I confirm that I have read and accept the terms of this User Agreement 接下来选择Don't ...

  3. (转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

    CocosCreator零基础制作游戏<极限跳跃>二.制作游戏开始场景 我们刚刚分析了<极限跳跃>这款游戏,下面我们开始制作第一个游戏场景,也就是游戏的开始场景. 首先,打开C ...

  4. creator 跳跃弧线_(转)CocosCreator零基础制作游戏《极限跳跃》七、制作游戏结束场景并实现场景切换...

    CocosCreator零基础制作游戏<极限跳跃>七.制作游戏结束场景并实现场景切换 前面我们实现了游戏的碰撞检测,碰到障碍物我们的角色就会死掉并开始掉落,角色掉落到屏幕底部时候游戏结束, ...

  5. (转)CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...

    CocosCreator零基础制作游戏<极限跳跃>六.制作游戏障碍物实现碰撞检测 前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能. 一.制作障碍物Prefa ...

  6. CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

    转自:http://www.byjth.com/CocosCreator/67.html CocosCreator零基础制作游戏<极限跳跃>二.制作游戏开始场景 我们刚刚分析了<极限 ...

  7. creator 跳跃弧线_CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测...

    CocosCreator零基础制作游戏<极限跳跃>六.制作游戏障碍物实现碰撞检测 前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能. 一.制作障碍物Prefa ...

  8. 如何自学python到做项目-如何使用python进行第一个机器学习项目(详细教程篇)...

    你是否想使用python进行机器学习但却难以入门? 在这篇教程中,你将用Python完成你的第一个机器学习项目. 在以下的教程中,你将学到: 1.下载并安装Python SciPy,为Python中的 ...

  9. python爬虫小项目挣钱兼职,python程序员兼职平台

    python爬虫去哪接单 python爬虫接单的方式有两种一.接定制需求的单子爬虫定制的需求其实很多,比如 "爬取某某电商网站的评论",这类需求一般是按照爬取数据量的大小来收费,价 ...

最新文章

  1. 机器视觉检测中的图像预处理方法
  2. 服务发布或重启,发生抖动怎么办?
  3. jquery中ajax参数说明
  4. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)
  5. 工单系统的设计与实现(4)
  6. HttpHandler动态生成图片
  7. git 配置origin_git配置及操作
  8. zblog php搜索页面,Z-Blog PHP实现搜索分页
  9. c语言中extent的用法,extent C
  10. 建立SQL Server警告和给操作员发送email通知
  11. 【图像处理基础知识】-傅里叶变换
  12. python判断手机号码是否正确_python检测手机号码是否合法
  13. 扒一扒那些叫欧拉的定理们(二)——简单多面体欧拉定理的证明
  14. Django项目定时任务(django-crontab)
  15. 【推荐】移动App测试中的最佳做法
  16. 体验车联网,你选对物联网卡了吗?
  17. 计算机老师新年贺卡祝福语,老师新年贺卡祝福语
  18. 【C语言】逗号表达式
  19. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc
  20. 综述 | 实例分割研究

热门文章

  1. 2019年北航OO第四单元(UML任务)及学期总结
  2. reshape2 数据操作 数据融合( cast)
  3. 支付宝分库分表中间件--zdal简介
  4. spring配置freemarker
  5. GNU make manual 翻译( 一百八十三)
  6. POJ 1039 Pipe
  7. 静态html文件js读取url参数
  8. Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节
  9. React SPA学习(一)
  10. 封装、继承和构造函数