Python 之pygame飞机游戏
一、效果图

下载地址: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飞机游戏的更多相关文章
- 用Python和Pygame写游戏-从入门到精通(py2exe篇)
这次不是直接讲解下去,而是谈一下如何把我们写的游戏做成一个exe文件,这样一来,用户不需要安装python就可以玩了.扫清了游戏发布一大障碍啊! perl,python,java等编程语言,非常好用, ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发
游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- pygame开发PC端微信打飞机游戏
pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件gam ...
- Pygame制作微信打飞机游戏PC版
使用Pygame制作微信打飞机游戏PC版 转至:http://www.cnblogs.com/dukeleo/p/3339780.html 前一阵子看了一篇文章:青少年如何使用Python开始游戏 ...
- python 之路,200行Python代码写了个打飞机游戏!
早就知道pygame模块,就是没怎么深入研究过,恰逢这周未没约到妹子,只能自己在家玩自己啦,一时兴起,花了几个小时写了个打飞机程序. 很有意思,跟大家分享下. 先看一下项目结构 "" ...
- Python和Pygame游戏开发 pdf
Python和Pygame游戏开发 目录 第1章 安装Python和Pygame 11.1 预备知识 11.2 下载和安装Python 11.3 Windows下的安装说明 11.4 Mac OS X ...
- Pygame小游戏练习一
@Python编程从入门到实践 Python项目练习 一.安装Python包Pygame 通过pip安装包工具安装 python3 -m pip --version #查看是否安装pip 确定安装pi ...
- Python制作的射击游戏
如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作 ...
随机推荐
- 浅谈SQL Server 对于内存的管理--宋沄剑 英文名:CareySo
http://www.cnblogs.com/CareySon/archive/2012/08/16/HowSQLServerManageMemory.html
- Android: 帮助找出内存泄漏的工具
1. Intellij Idea的Memory Monitor 通过Memory Monitor,我们可以知道哪个页面哪些操作会占用比较多的内存.如果需要更详细的信息,可以导出heap,通过MAT来分 ...
- postgresql vacuum table
2down vote according to Documentation VACUUM reclaims storage occupied by dead tuples. But according ...
- 2015南阳CCPC D - Pick The Sticks 背包DP.
D - Pick The Sticks Description The story happened long long ago. One day, Cao Cao made a special or ...
- 频繁模式挖掘 Apriori算法 FP-tree
啤酒 尿布 组合营销 X=>Y,其中x属于项集I,Y属于项集I,且X.Y的交集等于空集. 2类算法 Apriori算法 不断地构造候选集.筛选候选集来挖掘出频繁项集,需要多次扫描原始数据.磁盘I ...
- OTA升级包制作工具处理过程分析
http://blog.csdn.net/ly890700/article/details/56048815 Android Recovery(30) 1.概述 OTA升级包制作工具是一个用pyt ...
- 【POJ 1275】 Cashier Employment
[题目链接] 点击打开链接 [算法] 设Ti为第i小时有多少个出纳员开始工作,Vi表示第i小时有多少个来应聘的出纳员 那么,有 : 1. 0 <= Ti <= Vi 2. Ti + Ti- ...
- P5180 【模板】支配树
这个题乱七八糟的,和之前的灭绝树有点像,但是不一样.那个是DAG,这个是有向图.简单步骤就是先求出来dfs序,然后求出半支配点(?),然后通过这个求支配点. 算法不是很理解,先放在这. 题干: 题目背 ...
- 当Table中td内容为空时,让它显示边框的办法
1 在 table的css里面加 border-collapse:collapse; 在 td 的css里面加 empty-cells:show; border-collapse设置或检索表 ...
- Python3安装Scrapy
Microsoft Visual C++ Build Tools 最近项目在写爬虫,项目经理给了个Python Scrapy的爬虫项目,要求使用Java实现相关功能.于是乎在本地先后安装了Pytho ...