如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。

  最近开始学习Python语言,发现Python有一个神奇的Pygame模块,在编写小游戏时显得非常方便,于是参照教学视频编写了一个微信打飞机的小游戏,网上有很多相关的博客,但都不是很详细,大都是直接贴代码,于是决定沉下心来把编写程序的过程记录下来,与大家分享。

  首先声明一点,这篇博客完全参照了小甲鱼的《零基础入门学习Python》教学视频,为了尊重原创,特将原作者的视频地址公布如下:《零基础入门学习Python》

  Python编译器和Pygame模块的安装网上的教程很多,这里不再赘述,需要强调的一点是,两者之前不仅要求版本一致,所对应操作系统位数也应该一致,例如32位的Pygame模块必须对应32位的Python编译器,我采用的是Python3.4(32位),所用Python的IDE为Pycharm。

  在编写游戏的过程中需要用到大量图片和声音资源,如背景图片、背景音乐等,这里将相关资源统一打包,供大家下载:《微信打飞机图片音效资源》

  Python编写微信打飞机小游戏(一)

  Python编写微信打飞机小游戏(二)

  Python编写微信打飞机小游戏(三)

  Python编写微信打飞机小游戏(四)

  Python编写微信打飞机小游戏(五)

  Python编写微信打飞机小游戏(六)

  Python编写微信打飞机小游戏(七)

  Python编写微信打飞机小游戏(八)

  Python编写微信打飞机小游戏(九)

  Python编写微信打飞机小游戏(十)

  Python编写微信打飞机小游戏(十一)

  Python编写微信打飞机小游戏(十二)

  1、导入相关模块。

  创建主函数文件,如“mian.py”,在程序开始前将用到的Python模块导入:

# 导入相关模块
# coding: utf-8
import pygame
import sys
import tracebackfrom random import *
from pygame.locals import *

  这里有几个问题需要解释一下:(1)如果Python不能正常打印中文字符,需要在文件开头加上“# coding: utf-8”来指定对应的编码类型;(2)“sys”为系统模块,“traceback”为Python用来捕获异常的模块,“random”为随机数生成模块,“pygame.locals”则包含了Pygame中的一些固定的标志常量,在下面的程序中将会用到。(3)这里涉及了Python两种导入模块的方式,一种是形如“import pygame”,这种方法表示声明一个模块,如果需要使用其中的元素,应采用“模块名.变量名”的格式;另一种形如“from random import *”,表示将模块中的所有元素全部导入当前工程,在使用时直接使用元素名称即可。

  2、加载相关资源

  将下载得到的资源(一个image文件夹,一个sound文件夹)放入工程目录下(与mian.py相同的文件夹中),之后在主程序中加载这些资源。在加载之前,需要对pygame的相关功能进行初始化:

# ==================初始化==================
pygame.init()
pygame.mixer.init()  # 混音器初始化
bg_size = width, height = 480, 852  # 设计背景尺寸
screen = pygame.display.set_mode(bg_size)  # 设置背景对话框
pygame.display.set_caption("飞机大战……FishC Demo")
background = pygame.image.load("image/background.png")  # 加载背景图片,并设置为不透明

  注意:(1)mixer为pygame模块的声音控制对象(俗称混音器),在涉及到与声音有关的操作时会用到。(2)bg_size取决于背景图片的尺寸

  在完成相关初始化后,可以正式的加载背景图片和相关音效了:

# ==========载入游戏音乐====================
pygame.mixer.music.load("sound/game_music.wav")
pygame.mixer.music.set_volume(0.2)
bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
bullet_sound.set_volume(0.2)
big_enemy_flying_sound = pygame.mixer.Sound("sound/big_spaceship_flying.wav")
big_enemy_flying_sound.set_volume(0.2)
enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
enemy1_down_sound.set_volume(0.2)
enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
enemy2_down_sound.set_volume(0.2)
enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
enemy3_down_sound.set_volume(0.2)
me_down_sound = pygame.mixer.Sound("sound/game_over.wav")
me_down_sound.set_volume(0.2)
button_down_sound = pygame.mixer.Sound("sound/button.wav")
button_down_sound.set_volume(0.2)
level_up_sound = pygame.mixer.Sound("sound/achievement.wav")
level_up_sound.set_volume(0.2)
bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
bomb_sound.set_volume(0.2)
get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
get_bomb_sound.set_volume(0.2)
get_bullet_sound = pygame.mixer.Sound("sound/get_double_laser.wav")
get_bullet_sound.set_volume(0.2)

  注意,由于pygame音频处理能力有限,在读取音频信息时,需要将音频文件转换成wav格式,普通的MP3格式一般情况下是无法正常读取的,更多pygame有关音频文件的操作可以参考下面的博客:《Pygame音频操作》

  3、游戏主进程,循环播放背景音乐

  在加载完相关资源之后,开始编写游戏的主函数。由于还没有定义相关的模块,这里显示编写一个最简单的框架,让程序能够循环运行起来。

if __name__ == '__main__':try:main()except SystemExit:passexcept:traceback.print_exc()pygame.quit()input()

  这是Python的主程序入口,如果我们运行main.py文件,程序则自动开始运行。如果只是将main.py作为一个模块import到其他工程中,则不会触发这个函数的运行。注意在这里我们使用了try语句来捕获程序运行时出现的异常,如果main()函数在运行过程中抛出任何异常,除了系统正常退出(SystemExit)的异常外,其他异常都通过“traceback.print_exc()”来打印异常信息,同时调用“pygame.quit()”退出程序。

  由于还没有编写其他代码,在此处我们只编写一个最简单的main()函数来保证程序的正常运行,即简单的显示背景图片并循环播放背景音乐:

def main():pygame.mixer.music.play(-1)running = Truewhile running:screen.blit(background, (0, 0))for event in pygame.event.get():  # 响应用户的偶然操作if event.type == QUIT:  # 如果用户按下屏幕上的关闭按钮,触发QUIT事件,程序退出pygame.quit()sys.exit()pygame.display.flip()

  这里对混音器mixer的成员函数play()赋值为-1代表循环播放该音乐,如果形参为空,则只播放一次该音乐。这里在主程序循环中需要设置用户退出操作,当检测到用户按下界面的关闭按钮时(×),程序将调用pygame.quit()和sys.exit()完成退出。注意如果不设置这个操作,将会导致程序无法正常关闭(一般表现为程序无法响应)。在屏幕绘制方面,Python采用了一种双缓冲的屏幕刷新机制,即先通过blit()函数将一个图片(统称为surface对象)绘制在内存中,最后统一用pygame.display.flip()函数将绘制好的surface对象一次全部刷新到屏幕上。至于什么是surface对象,可以暂时理解为Python世界中的所有的图形图像吧。ok,第一部分就先介绍这些。

《Python编写微信打飞机小游戏(一)》

Python编写微信打飞机小游戏(一)相关推荐

  1. Python编写微信打飞机小游戏(三)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  2. Python编写微信打飞机小游戏(八)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  3. Python编写微信打飞机小游戏(十一)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  4. Python编写微信打飞机小游戏(七)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  5. Python编写微信打飞机小游戏(十)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  6. Python编写微信打飞机小游戏(五)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  7. Python编写微信打飞机小游戏(十二)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  8. Python编写微信打飞机小游戏(九)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  9. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  10. 微信打飞机小游戏的尝试

    微信打飞机小游戏的尝试 问题:微信打飞机游戏出现不断跳出的问题 原因:未加return. ​

最新文章

  1. NYOJ--2--括号配对问题
  2. Ubuntu 用vsftpd 配置FTP服务器
  3. 学会使用svn:externals
  4. java最长回文子序列_LeetCode[5] - 最长回文子串动态规划
  5. XcodeGhost风波过后,苹果如何防范风险?
  6. python打包成二进制文件_pyinstall python文件打包成二进制exe文件
  7. 数据库(表结构和数据) 保存为 *.sql文件
  8. python3 用递归方法列出所有目录与文件
  9. 华为杯2020-2021年数学建模大赛题目分享
  10. 解决电脑双网卡不能同时连接内网和外网的问题
  11. 全国省市县oracle,最新行政区划 省市区三级 街道乡镇四级 社区/村五级 每月更新(2021年4月版)...
  12. 微信查好友单删检测方法,无打扰,快来学
  13. 信息安全技术 实验四 木马及远程控制技术
  14. Tyrion (含示例源码)
  15. 比较精确的计算农历节气的java源码
  16. 雪球网爬取数据并存入数据库
  17. eclipse中jsp页面图片不显示问题
  18. Leetcode 387. 字符串中的第一个唯一字符
  19. Latex论文排版——图片
  20. adb shell 中查看文件大小指令 ls -al 和 du -k \ du-h

热门文章

  1. 五、瞰景Smart3D空三解算
  2. 小米 samba linux,解决小米路由器升级固件后samba无法访问一例
  3. 2022年 MathorCup 思路分享
  4. 发那科机器人点位编辑_分步详解 | 发那科机器人如何进行零点标定
  5. linux fastboot 工具下载,FastBoot刷机工具
  6. 得力考勤机excel密码_可以修改原始考勤记录数据的是哪种人脸指纹考勤机?
  7. mac maven安装与配置镜像
  8. 【语料库】语料库资源汇总
  9. 60道计算机网络面试题(附答案,背诵版)
  10. 威纶通触摸屏232脚位_触摸屏通讯口(USB、RS232、RS422/485)的正确使用