一、效果图

下载地址: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. js有块级作用域么?

    //js私有作用域,js没有块级作用域 function Box(){ for(var i=0;i<5;i++){} console.log(i);//5,如果js有块级作用域,那么i在for循 ...

  2. Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询

    FeatureLayer是要素图层,也是Arcgis的主要图层.用这个图层可以加载本地的shp文件.下面我们看怎样加载shp文件到MapView中.查看ArcGis API可知FeatureLayer ...

  3. 配置 Profile Manager(2)

    五.配置登录用户 点开"账户->用户"页面,创建1个管理员: 创建 1 个普通用户: 六.启用 MDM 选择"服务->描写叙述文件管理器".将 sw ...

  4. POJ--3164--Command Network【朱刘算法】最小树形图

    链接:http://poj.org/problem?id=3164 题意:告诉n个点坐标,m条边表示两个点之间有路.从1点開始建立一个有向图最小生成树. 朱刘算法模板题 =============== ...

  5. hdu2852 KiKi&#39;s K-Number

    Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki i ...

  6. phonegap运行原理

    用phonegap(现在名为cordova)来开发手机应用,给人的感觉,就是写了一些HTML5的网页,加上javascript,打包安装在手机上,然后就可以运行了,并且还能访问手机的各种功能和硬件,太 ...

  7. go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针

    切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...

  8. bzoj2648

    http://www.lydsy.com/JudgeOnline/problem.php?id=2648 kdtree裸题... 抄板子一边抄对了... 挺好理解的,就是说我们先找出中间的元素,然后小 ...

  9. P3399 丝绸之路(线性二维dp)

    P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...

  10. [Swift通天遁地]四、网络和线程-(10)处理图片:压缩、缩放、圆角、CoreImage滤镜、缓存

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...