一、效果图

下载地址:https://github.com/yangsphp/airplane-game-master

二、代码

import pygame
from pygame.locals import *
import time
import random # 我机
class HeroPlane(object):
def __init__(self, screen):
# 设置飞机默认的位置
self.x = 230
self.y = 550
# 设置要显示内容的窗口
self.screen = screen
# 用来保存英雄飞机需要的图片名字
self.imageName = "./feiji/hero.gif"
# 根据名字生成飞机图片
self.image = pygame.image.load(self.imageName)
# 用来保存英雄飞机发射出的所有子弹
self.bullet = [] # 爆炸效果用的如下属性
self.hit = False # 表示是否要爆炸
self.bomb_list = [] # 用来存储爆炸时需要的图片
self.__crate_images() # 调用这个方法向bomb_list中添加图片
self.image_num = 0 # 用来记录while True的次数,当次数达到一定值时才显示一张爆炸的图,然后清空,,当这个次数再次达到时,再显示下一个爆炸效果的图片
self.image_index = 0 # 用来记录当前要显示的爆炸效果的图片的序号 def __crate_images(self):
self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n1.png"))
self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n2.png"))
self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n3.png"))
self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n4.png")) def bomb(self):
self.hit = True def display(self):
if self.hit:
self.screen.blit(self.bomb_list[self.image_index], (self.x, self.y))
self.image_num += 1
if self.image_num == 7:
self.image_num = 0
self.image_index += 1
if self.image_index > 3:
time.sleep(1)
exit() # 调用exit让游戏退出
else:
self.screen.blit(self.image, (self.x, self.y))
# 用来存放需要删除的对象信息
needDelItemList = []
for b in self.bullet:
b.display()
b.move()
if b.judge():
needDelItemList.append(b)
# 删除self.bulletL中需要删除的对象
for i in needDelItemList:
self.bullet.remove(i) def moveLeft(self):
self.x -= 10 def moveRight(self):
self.x += 10 def sheBullet(self):
newBullet = Bullet(self.x, self.y, self.screen)
self.bullet.append(newBullet) # 子弹
class Bullet(object):
def __init__(self, x, y, screen):
self.x = x + 40
self.y = y - 20
self.screen = screen
self.image = pygame.image.load("./feiji/bullet-3.gif") def move(self):
self.y -= 20 def display(self):
self.screen.blit(self.image, (self.x, self.y)) # 判断子弹是否越界
def judge(self):
if self.y < 0:
return True
return False # 敌机
class EnemyPlane(object): def __init__(self, screen):
# 设置飞机默认的位置
self.x = 0
self.y = 0
# 设置要显示内容的窗口
self.screen = screen
self.imageName = "./feiji/enemy-1.gif"
self.image = pygame.image.load(self.imageName)
# 用来存储敌人飞机发射的所有子弹
self.bulletList = []
self.direction = "right" def display(self):
self.screen.blit(self.image, (self.x, self.y))
# 存储待删除的子弹
needDelItemList = []
for b in self.bulletList:
b.display()
b.move()
if b.judge():
needDelItemList.append(b)
# 删除self.bulletL中需要删除的对象
for i in needDelItemList:
self.bulletList.remove(i) def move(self):
if self.direction == "right":
self.x += 5
elif self.direction == "left":
self.x -= 5
if self.x > 480 - 50:
self.direction = "left"
elif self.x < 0:
self.direction = "right" # 敌机发射子弹
def shot(self):
random_num = random.randint(1, 100)
if random_num == 10 or random_num == 20:
EnemyNewBullet = EnemyBullet(self.x, self.y, self.screen)
self.bulletList.append(EnemyNewBullet) # 敌机子弹
class EnemyBullet(object):
def __init__(self, x, y, screen):
self.x = x + 22
self.y = y + 40
self.screen = screen
self.image = pygame.image.load("./feiji/bullet1.png") # 移动子弹
def move(self):
self.y += 20 # 显示子弹
def display(self):
self.screen.blit(self.image, (self.x, self.y)) # 判断子弹是否越界
def judge(self):
if self.y > 650:
return True
return False # 键盘监听
def key_control(plane):
# 获取事件,比如按键等
for event in pygame.event.get():
# 判断是否是点击了退出按钮
if event.type == QUIT:
exit()
# 判断是否是按下了键
elif event.type == KEYDOWN:
# 检测按键是否是a或者left
if event.key == K_a or event.key == K_LEFT:
plane.moveLeft()
# 检测按键是否是d或者right
elif event.key == K_d or event.key == K_RIGHT:
plane.moveRight() # 检测按键是否是空格键
elif event.key == K_SPACE:
plane.sheBullet()
elif event.key == K_b:
plane.bomb() def main():
# 创建一个游戏窗口
screen = pygame.display.set_mode((480, 650), 0, 32)
# 创建背景图片
background = pygame.image.load("./feiji/background.png")
# 创建一个飞机对象
plane = HeroPlane(screen)
# 创建一个敌人飞机
enemyPlane = EnemyPlane(screen)
while True:
# 将图片放到屏幕上
screen.blit(background, (0, 0))
# 显示我的飞机到屏幕
plane.display()
# 显示敌机到屏幕
enemyPlane.display()
# 移动敌机
enemyPlane.move()
# 敌机发射子弹
enemyPlane.shot()
# 更新显示
pygame.display.update()
# 监听键盘,控制我机
key_control(plane)
time.sleep(0.08)
pass if __name__ == '__main__':
main()

  

Python 之pygame飞机游戏的更多相关文章

  1. 用Python和Pygame写游戏-从入门到精通(py2exe篇)

    这次不是直接讲解下去,而是谈一下如何把我们写的游戏做成一个exe文件,这样一来,用户不需要安装python就可以玩了.扫清了游戏发布一大障碍啊! perl,python,java等编程语言,非常好用, ...

  2. 吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发

    游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...

  3. python学习笔记(七) 类和pygame实现打飞机游戏

    python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  4. pygame开发PC端微信打飞机游戏

    pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件gam ...

  5. Pygame制作微信打飞机游戏PC版

    使用Pygame制作微信打飞机游戏PC版 转至:http://www.cnblogs.com/dukeleo/p/3339780.html   前一阵子看了一篇文章:青少年如何使用Python开始游戏 ...

  6. python 之路,200行Python代码写了个打飞机游戏!

    早就知道pygame模块,就是没怎么深入研究过,恰逢这周未没约到妹子,只能自己在家玩自己啦,一时兴起,花了几个小时写了个打飞机程序. 很有意思,跟大家分享下. 先看一下项目结构 "" ...

  7. Python和Pygame游戏开发 pdf

    Python和Pygame游戏开发 目录 第1章 安装Python和Pygame 11.1 预备知识 11.2 下载和安装Python 11.3 Windows下的安装说明 11.4 Mac OS X ...

  8. Pygame小游戏练习一

    @Python编程从入门到实践 Python项目练习 一.安装Python包Pygame 通过pip安装包工具安装 python3 -m pip --version #查看是否安装pip 确定安装pi ...

  9. Python制作的射击游戏

    如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作 ...

随机推荐

  1. Java并发:线程安全的单例模式

    转载请注明出处:jiq•钦'stechnical Blog 1.饿汉式 public class Singleton { private final static Singleton INSTANCE ...

  2. Android 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 非常久以前也过一个html5的刮刮 ...

  3. Solidworks如何整体缩放零件

    比如我有一个飞机模型,当前长度有20000mm,即20M,我想要整体缩放   点击插入-特征-缩放比例   在左侧的框中输入所有要缩放的零部件(如果全部缩放,则全部框选所有零件,就可以把所有零件都放到 ...

  4. C++对象模型——函数的效能(第四章)

    4.3 函数的效能 在以下的这组測试中,在不同的编译器上计算两个3D点,当中用到一个nonmember friend function,一个member function,以及一个 virtual m ...

  5. C#趣味程序---九九乘法表

    using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { for ...

  6. erlang二进制数据垃圾回收机制

    erlang二进制数据在内存中有两种存在形式,当数据大小不到 64 bytes,就直接存在进程堆内.假设超过了64 bytes.就被保存到进程外的共享堆里,能够给节点内全部进程共享. erlang有两 ...

  7. bootstrap-table方法之:expandRow-collapseRow,展开或关闭当前行数据

    官方演示地址:http://issues.wenzhixin.net.cn/bootstrap-table/methods/expandRow-collapseRow.html <!DOCTYP ...

  8. Andriod开发技巧——Fragment的懒载入

    我们在做应用开发的时候.一个Activity里面可能会以viewpager(或其它容器)与多个Fragment来组合使用.而假设每一个fragment都须要去载入数据.或从本地载入.或从网络载入,那么 ...

  9. Java原型模式之浅拷贝-深拷贝

    一.是什么? 浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量仅仅复制引用,不复制引用的对象 深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制 内部机制: ...

  10. The Open Graph protocol

    https://www.quora.com/What-does-this-tag-mean-html-lang-en-US-prefix-og-http-ogp-me-ns https://stack ...