一、效果图

下载地址: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. QQ加群组件-iPhone、Android、网页上加入QQ群

    iPhone代码: - (BOOL)joinGroup:(NSString *)groupUin key:(NSString *)key{ NSString *urlStr = [NSString s ...

  2. ubuntu下安装jre

    jre下载地址:http://www.java.com/en/download/manual.jsp 1.将下载好的jre-7u55-linux-x64.tar.gz文件解压缩,得到jre1.7.0_ ...

  3. hdu 5950 Recursive sequence

    题意:告诉你数列的递推公式为f(n+1)=f(n)+2*f(n-1)+(n+1)^4 以及前两项a,b:问第n项为多少,结果对2147493647取模. 题解:有递推公式,马上应该就能想到矩阵快速幂: ...

  4. 打造atom成为golang开发神器

    在我在Windows系统上开发的日子里.我使用IDE开发数年之久.比如Visual Basic IDE, Borland Delphi IDE, Visual C++ 和最后的Visual Studi ...

  5. JavaSE入门学习10:Java修饰符

    Java语言提供了非常多修饰符,主要分为下面两类: 訪问修饰符 非訪问修饰符 修饰符用来定义类.方法或者变量.通常放在语句的最前端.我们通过以下的样例来说明: <span style=" ...

  6. LeetCode 171. Excel Sheet Column Number (Excel 表格列数字)

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...

  7. 浅谈API网关(API Gateway)如何承载API经济生态链

    序言 API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的API规模以及调用量,使得企业IT在架构上.模 ...

  8. Android数据存储之IO

    Android开发中免不了数据本地的存储,今天我们来说一说怎样利用IO流来进行数据存储. 这里我们通过模拟一个QQ登陆界面的小demo来实际操作IO流. 功能描写叙述:点击button能够保存用户输入 ...

  9. ES6 一些常用使用

    //1.解构数组 let arr1 = ['apple', 'coffee', 'cake']; let [fruit, drink, dessert] = arr1; console.log(fru ...

  10. POJ 1300 Door Man(欧拉通路)

    题目描写叙述: 你是一座大庄园的管家. 庄园有非常多房间,编号为 0.1.2.3..... 你的主人是一个心不在 焉的人,常常沿着走廊任意地把房间的门打开.多年来,你掌握了一个诀窍:沿着一个通道,穿 ...