前言:

安装完pygame模块,就去网上找了一些demo来学习,最终锁定在了飞船这个游戏开发上。网上有很多教程,当然这游戏在《Python编程从入门到实践》这本书上就有,只是我没有这本书,也找不到这本书的pdf,所以就跟《手把手教你用python写游戏》这篇文章学习。

设置游戏窗口

新建一个游戏文件夹,用于存放游戏代码和一些游戏相关文件。在新建的文件夹中新建一个“打飞机.py”

import sys
import pygame
def run_game():#初始化pygamepygame.init()# 设置游戏窗口大小screen=pygame.display.set_mode((1200,800))# 设置游戏标题pygame.display.set_caption("打飞机")# 设置游戏背景bg_color=(230,230,230)while True:for event in pygame.event.get():if event.type==pygame.QUIT:# 退出Pythonsys.exit()# 加载背景色screen.fill(bg_color)# visualiaze窗口pygame.display.flip()
run_game()

运行上述代码,便可获取到一个名为“打飞机”的游戏窗口:

置入主角飞船:

在文件夹里新建一个存放图片的image文件夹,放入在百度随便下载到的飞机图片

然后创建一个飞船类“ship.py”

import pygame
class Ship():def __init__(self,screen):self.screen=screen# 读取图片并设置为矩形self.image=pygame.image.load('image/feiji.png')# get_rect()是一个处理矩形图像的方法self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()# 设置飞船位置为底部中心self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomdef blitme(self):# 在指定位置绘制飞船self.screen.blit(self.image,self.rect)

在打飞机.py中调用ship

import sys
import pygame
from  ship import Ship
def run_game():#初始化pygamepygame.init()# 设置游戏窗口大小screen=pygame.display.set_mode((1200,800))# 设置游戏标题pygame.display.set_caption("打飞机")# 设置游戏背景bg_color=(230,230,230)# 调用shipship=Ship(screen)while True:for event in pygame.event.get():if event.type==pygame.QUIT:# 退出Pythonsys.exit()screen.fill(bg_color)ship.blitme()pygame.display.flip()
run_game()

再次运行打飞机.py,就可以看见游戏窗口多了一架飞机

飞船移动:

在ship.py中,添加让飞船位置发生改变的代码

import pygame
class Ship():def __init__(self,screen):self.screen=screen# 读取图片并设置为矩形self.image=pygame.image.load('image/feiji.png')# get_rect()是一个处理矩形图像的方法self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()# 设置飞船位置为底部中心self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.moving_right=Falseself.moving_left=Falsedef blitme(self):# 在指定位置绘制飞船self.screen.blit(self.image,self.rect)def update(self):if self.moving_right:# 改变飞船x轴位置,可根据所需设置飞船移动速度self.rect.centerx +=1elif self.moving_left:self.rect.centerx -=1

然后在“打飞机.py”中添加按键处理方法

import sys
import pygame
from  ship import Ship
def run_game():#初始化pygamepygame.init()# 设置游戏窗口大小screen=pygame.display.set_mode((1200,800))# 设置游戏标题pygame.display.set_caption("打飞机")# 设置游戏背景bg_color=(230,230,230)# 调用shipship=Ship(screen)while True:for event in pygame.event.get():if event.type==pygame.QUIT:# 退出Pythonsys.exit()elif event.type==pygame.KEYDOWN:check_keydown_events(event,ship)elif event.type == pygame.KEYUP:checl_keyup_events(event, ship)ship.update()screen.fill(bg_color)ship.blitme()pygame.display.flip()
# 按键按下处理
def check_keydown_events(event,ship):if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = True# 按键放开处理
def checl_keyup_events(event,ship):if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = False
run_game()

再次运行后,按下左右按键,便可实现飞船的左右移动

更改飞船大小:

因为图片过大,用pygame.image.load()加载会延用图片的大小,使得游戏里的飞船显得过大不美观。要改变飞船图片大小,一般直接用ps重新定义图片宽高,但这里使用pygame.transform.scale(image, (x, y))方法进行图片定义。

修改ship代码

# 读取图片并设置为矩形
self.image=pygame.transform.scale(pygame.image.load('image/feiji.png'), (100, 100))

再次运行,飞船大小发生改变

重构函数:

新建一个settings.py,用于存放一些设置参数。

class Settings(object):def __init__(self):# 将一些设置放在这里,方便以后调整self.screen_width=1200self.screen_height=800self.bg_color=(230,230,230)self.game_title='打飞机'# 飞船移动速度self.ship_speed_factor=2.5

新建一个game_functions。py,存放一些游戏运行方法。

import sys
import pygamedef check_events(ship):for event in pygame.event.get():if event.type == pygame.QUIT:# 退出Pythonsys.exit()elif event.type == pygame.KEYDOWN:check_keydown_events(event, ship)elif event.type == pygame.KEYUP:checl_keyup_events(event, ship)# 按键按下处理
def check_keydown_events(event,ship):if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = True# 按键放开处理
def checl_keyup_events(event,ship):if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef update_screen(ai_settings,screen,ship):screen.fill(ai_settings.bg_color)ship.blitme()pygame.display.flip()

修改ship.py

import pygame
class Ship():def __init__(self,ai_settings,screen):self.screen=screenself.ai_settings = ai_settings# 读取图片并设置为矩形self.image=pygame.transform.scale(pygame.image.load('image/feiji.png'), (100, 100))# get_rect()是一个处理矩形图像的方法self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()# 设置飞船位置为底部中心self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.moving_right=Falseself.moving_left=Falsedef blitme(self):# 在指定位置绘制飞船self.screen.blit(self.image,self.rect)def update(self):if self.moving_right:self.rect.centerx +=self.ai_settings.ship_speed_factorelif self.moving_left:self.rect.centerx -=self.ai_settings.ship_speed_factor

修改打飞机.py代码,调用settings.py和game_functions.py的参数和方法

import sys
import pygame
from settings import Settings
from  ship import Ship
import  game_functions as gf
def run_game():#初始化pygamepygame.init()# 调用settings.py里设置好的参数ai_settings=Settings()# 设置游戏窗口大小screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))# 设置游戏标题pygame.display.set_caption(ai_settings.game_title)# 调用shipship=Ship(ai_settings,screen)while True:# 调用game_functions里的方法gf.check_events(ship)ship.update()gf.update_screen(ai_settings,screen,ship)
run_game()

重构后,打飞机.py的代码量就会变得看起来很少,而且以后需要修改代码或参数时,只需要到指定文件中修改指定参数数值就行。

今天就学到这里,加油

《python游戏开发学习》打飞机小游戏(一)相关推荐

  1. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  2. 视频教程-Layabox3D游戏开发入门-微信3D小游戏案例 -微信开发

    Layabox3D游戏开发入门-微信3D小游戏案例 有多年Unity程序开发经验,有策划和美术设计的经验.愿意在csdn这个平台和大家一起分享! 金龙 ¥29.00 立即订阅 扫码下载「CSDN程序员 ...

  3. 【小游戏合集】之用Python自己开发一个闯关小游戏——开心消消乐

    导语: 今天这期小游戏是最适合小伙伴们一同挑战的精美手游,其因画面精美.上手简单.休闲有趣.有惊喜有挑战而获得广大玩家的喜爱...这款小游戏没错就是开心消消乐,相信大家都不陌生,其曾在 2015 年获 ...

  4. html5游戏开发-弹幕+仿雷电小游戏demo

    本游戏使用的是html5的canvas,运行游戏需要浏览器支持html5. 本篇文章详细讲解如何用html5来开发一款射击游戏,雷电可以说是射击游戏中的经典,下面就来模仿一下. 先看一下游戏截图 演示 ...

  5. 游戏开发15课 微信小游戏自审报告

    微信小游戏个人提交的时候需要写下自审报告 然后打印签名 后拍照上传以下是模板有兴趣的可以看看 自审报告 本⼈根据<网络游戏管理暂行办法>对我开发的小游戏产品<xxxx>进行自行 ...

  6. 《游戏开发》html5 益智小游戏-小熊吃星星

    游戏截图 项目结构 一共3个文件 分别为 index.html   script.js style.css index.html文件源码展示 <!DOCTYPE html> <htm ...

  7. 游戏开发22课 cocoscreator 小游戏分包

    小游戏分包 部分小游戏平台支持分包功能以便对资源.脚本和场景进行划分.Creator 从 v2.4 开始支持 Asset Bundle,开发者可以将需要分包的内容划分成多个 Asset Bundle, ...

  8. php 连连看游戏开发,JavaScript编写连连看小游戏_javascript技巧

    天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...

  9. 学习完美方块小游戏(cocos creator)

    学习完美方块小游戏 通过学习完美方块小游戏,了解缓动系统(cc.tween)的简单运用 [游戏效果图] [游戏玩法]:玩家通过长按屏幕,使方块放大到一定的大小后下落,如果被基座接住算是过关,掉落或者被 ...

  10. python|利用打飞机小游戏学习分支和循环|今天是记录自己学习的第四天呀!加油!

    ** python|利用打飞机小游戏学习分支和循环|今天是记录自己学习的第四天呀!加油! ** /*** Author:Jiang Zhiying Data:2017.11.11 Emial:1443 ...

最新文章

  1. OpenGL 矩阵变换
  2. 微软批量授权版WINDOWS 10资料(截至到2015年11月,此处无下载地址)
  3. Redis未授权访问写Webshell和公私钥认证获取root权限
  4. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
  5. 琢磨琢磨,while (true) 和 for (;;) 哪个更快?!
  6. python 异步io_python之同步IO和异步IO
  7. 【TensorFlow-windows】学习笔记五——自编码器
  8. vb treeview 展开子节点_详解最长公共子序列问题,秒杀三道动态规划题目
  9. python编程入门课_程序设计入门—Python
  10. Java @SuppressWarnings注解
  11. 找CTO杜仲:再谈中年危机和应对策略
  12. ief12执行一次js才有效_陈列到底多久调一次才有效?
  13. Git学习总结(5)——搭建Git简易高效服务器
  14. Java中JTextField.getText() 和 JPassword.getPassword() 的区别
  15. 对极域64位禁止终止进程、键盘锁定的分析
  16. Windows11 开发版bt磁力链种子及其他下载地址整理
  17. 弱口令安全弱口令字典
  18. Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制
  19. mysql难不难_mysql数据库难学吗?
  20. Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件

热门文章

  1. 《本人娶刘亦菲的可行性报告》省级期刊收录,杂志社回应:早年管理不规范...
  2. 51单片机 酒精浓度测试仪 proteus 仿真 程序 LCD1602
  3. pythonexcel怎么读_python怎么读写excel
  4. GCM(最大公度量)
  5. 使用Macaw发生Unsupported operand types错误
  6. 浏览器,服务器,浏览器和服务器之间的通信协议
  7. Qt之QComboBox 解决下拉列表样式不生效、item文字重叠
  8. IBM实习生笔试题目
  9. 【python ip提取】从log日志提取ip
  10. Flutter 视频列表的简单实现