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制作的射击游戏
如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作 ...
随机推荐
- 解决多个Xcode导致的N个模拟器的问题
<欢迎大家增加iOS开发学习交流群:QQ529560119> 完美解决多个Xcode从而导致了出现N个模拟器的问题
- android_handler(一)
仅仅是一个简单的handler的样例,目的就是对handler有一个初步的接触. 在layout上加入一个button,点击按钮,然后打印出利用handler传送的数据.(都是执行在mainthrea ...
- leetcode笔记:Wiggle Sort
一. 题目描写叙述 Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nu ...
- jstl自己定义函数的使用
因为本人之前并没有接触过jstl标签,说来也可笑,之前一直使用struts2标签.近期项目用到jstl,所以做些记录方便以后自己查看. jstl的强大原因之中的一个我觉得就是他的自己定义函数,我们能够 ...
- android:怎样在TextView实现图文混排
我们通常在TextView文本中设置文字.但是怎样设置图文混排呢? 我就在这里写一个样例 .我们须要用到一点简单的HTML知识 在TextView中预订了一些类似HTML的标签,通过标签能够使Text ...
- C# winform通过按钮上移下移 解决了datasource绑定问题
事件代码: private void btn_frmDicType_MoveUp_Click(object sender, EventArgs e) { int lstLength = this.ls ...
- JSP-Runoob:JSP 异常处理
ylbtech-JSP-Runoob:JSP 异常处理 1.返回顶部 1. JSP 异常处理 当编写JSP程序的时候,程序员可能会遗漏一些BUG,这些BUG可能会出现在程序的任何地方.JSP代码中通常 ...
- PCB ODB++(Gerber)图形绘制实现方法
这里讲解一下用net解析PCB图形绘制实现方法 一.解析PCB图形绘制实现 解析PCB图形,说简单也非常简单,先说一下,PCB Gerber图形由:点,线,弧,铜皮,文字 5类元素组成,通常简写为:P ...
- SRAM and DRAM
DRAM:(Dynamic Random Access Memory)动态随机访问存储器,只能将数据保存较短的时间.每隔一段时间需要对数据进行刷新一次,没有刷新的单元数据会丢失.常见的用途是作为内存( ...
- thinkphp vender
vender在thinkphp里面时引入系统的类库的意思,具体用法如下. Vendor('Classes.PHPExcel');表示引入vendor目录下的classes文件夹下面的phpexcel文 ...