相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去。下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行pygame入门讲解--设置游戏窗口,绘制游戏背景,绘制战机图片,绘制战机移动动画(后面利用面向对象重新设计整个项目)

1、先看看游戏屏幕样式及工作原理

2、再看看动画工作原理

3、分析完了,上代码,所有说明注释写的很清楚

#!/usr/bin/env python
# coding=utf-8
# author:刘仲
# datetime:2018/7/11 9:58
# software: PyCharm import pygame pygame.init() # 加载pygame中的所有模块,这是一句固定的代码
screen = pygame.display.set_mode((480, 700)) # 创建一个游戏窗口,屏幕大小480*700,这里一般背景图片多大,屏幕就设置多大 """绘制背景图片步骤:1、图片一般事先存在本地磁盘里,所以我们把需要的图片先加载到内存中
2、将加载到内存的图片绘制到屏幕指定的位置
3、刷新屏幕显示,否则绘制的图片无法显示
制作动画:动画就是将多张静止的图片快速的播放,这里就涉及到帧数的问题,一般每秒60刷新60次就能制作高品质的动画。
所以,pygame中提供了一个时钟类,可以调用tick()方法控制帧数
"""
bg = pygame.image.load('./images/background.png') # 加载背景图片到内存
im = pygame.image.load('./images/me1.png') # 加载战机到内存
enemy1 = pygame.image.load('./images/enemy1.png') # 加载敌机到内存
clock = pygame.time.Clock() # 创建时钟对象
hero = pygame.Rect(200, 500, 102, 126) # 创建一个和战机大小相等的矩形对象
# rect方法可以创建一个矩形对象,参数(x,y,weight,height),xy是原点位置,weight和height是矩形宽和高 enemy_1 = pygame.Rect(200, 100, 57, 43) # 创建一个和敌机大小的矩形对象 # 如何让游戏屏幕一直显示,这就叫游戏循环,把所有更新图片位置,刷新帧数,监听事件都写在游戏循环里
while True:
clock.tick(60) # 每秒刷新60次
for event in pygame.event.get(): # 监听用户做的各种操作,pygame.event.get()返回来的是一个用户操作的动作列表
if event.type == pygame.QUIT: # 判断用户是否点击退出按钮,即游戏窗口的叉叉
print('游戏退出...')
pygame.quit() # 卸载所有pygame的模块
exit() # 退出整个系统
hero.y -= 2 # 战机以2的速度向上移动
enemy_1.y += 1 # 敌机以1的速度乡下移动
screen.blit(bg, (0, 0)) # 将背景图片绘制到屏幕,绘制就调用屏幕对象的blit方法
# (疑问:屏幕图像不是固定的吗,也没有去改变y值,
# 为何放在循环里?这是因为每次循环都需要重新绘制一遍屏幕,再将飞机的图片绘制到新的屏幕上,这样就不会出现飞机残影) screen.blit(im, hero) # 将战机绘制到屏幕
screen.blit(enemy1, enemy_1) # 将敌机绘制到屏幕
pygame.display.update() # 这句也是固定代码,更新屏幕显示,否则无法显示绘制好的图片
pygame.quit() # 游戏退出

4、运行效果如下,我截取的是图片,实际是在一个向上移动一个向移动的动画效果

这个只是入门,制作简单的,晚上或明天会继续更新,利用面向对象实现完整的屏幕背景滚动,飞机发射子弹,碰撞检测的代码

一、利用Python编写飞机大战游戏-面向对象设计思想的更多相关文章

  1. 基于Python的飞机大战游戏

    前几天决定学Python,上网找了教程看了两天,和C比起来面向对象的特性真的都很便捷,有了类开发各种敌机,子弹什么的都很方便. 在此要感谢开发pygame模块的开发人员,真的很好用(逃 效果图↓ 主函 ...

  2. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  3. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  4. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!

    本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...

  5. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

    在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...

  6. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  7. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

    最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...

  8. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

  9. php开发面试题---游戏面向对象设计与分析实例

    php开发面试题---游戏面向对象设计与分析实例 一.总结 一句话总结: 不要光空想,多看几个实例就知道自己的游戏该怎么设计了 根据实例去理解面向对象编程的的六大原则 1.英雄种类分别有:战士.法师. ...

随机推荐

  1. python1114string_test

    #! -*- coding:utf-8 -*- str = "self_learn"print(type(str))str.title()print(str.title()) # ...

  2. Hibernatede 一对多映射配置

    Hibernatede 一对多映射配置 以公司和员工为例:公司是一,员工是多   第一步 创建两个实体类,公司和员工        写核心配置文件hibernate.cfg.xml        写映 ...

  3. WebSocket服务端和客户端使用

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...

  4. Ftp上传的方法

    using System;using System.Collections.Generic;using System.IO;using System.Net;using System.Text; na ...

  5. Confluence 6 在你的 LDAP 目录中优化用户和用户组数量

    连接 LDAP 服务器能为你的用户管理提供灵活高效的解决方案.为了达到优化的性能,后台同步程序将会从 LDAP 上查找和下载数据同步到你本地的 Confluence 服务器数据库上同时还会定时的更新数 ...

  6. 常用ajax样例

    ---恢复内容开始--- // url(String):请求地址 // param(String):请求参数 // targetId(String):结果显示id function ajaxReq(u ...

  7. JS实现继承的几种方式(转)

    转自:幻天芒的博客 前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如 ...

  8. 饮冰三年-人工智能-linux-05 Linux进程

    1:top 命令,查看cpu使用情况.(由于top是实时刷新,占用内存比较大) P:按照cpu使用率降序排列 M:按照内存使用率降序排列 2:free 命令,查看内存使用情况 free -m 以M为单 ...

  9. 饮冰三年-人工智能-linux-03 Linux文件管理(权限管理+归档+压缩)

    1:对文件的权限管理 drwxr-xr-x. 最后一个.表示在安全情况下创建的.selinux a: d表示目录:-表示普通文件:l表示快捷方式:b设备文件 b:- 属主的权限 r:读权限:w:写权限 ...

  10. 饮冰三年-人工智能-linux-01通过VM虚拟机安装contes系统

    先决条件:VM虚拟机的安装.contes系统的镜像文件 1:创建新的虚拟机 2:下一步,稍后安装操作系统 3:选择对应的系统 4:选择对应的路径 至此虚拟机已经创建完成(相当于买了一台新电脑) 5:编 ...