python飞机大战版管道鸟(简易) pygame单线程

2024-06-02 11:58

本文主要是介绍python飞机大战版管道鸟(简易) pygame单线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python飞机大战版管道鸟(简易)

相信当年的管道鸟,令许多的暴躁老哥砸了手机.
突发奇想把管道鸟和飞机大战结合会变成什么样呢?
还是老样子素材我就不提供了

# coding:utf-8
import random
import timeimport pygame
from pygame.locals import *# 初始化pygame环境
pygame.init()
pygame.font.init()
enemyTime = 0
score = 0
START = 0
LIVE = 1
OVER = 2
state = START# 创建一个长宽分别为480/650窗口
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 650
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))# 设置窗口标题
pygame.display.set_caption("飞机大战")
bg = pygame.image.load("images/bg1.png")
start = pygame.image.load("images/startGame.png")
over = pygame.image.load("images/again.png")
enemy = pygame.image.load("images/enemy1.png")
e1 = pygame.transform.rotate(enemy, -90)
hero = pygame.image.load("images/hero.png")
h = pygame.transform.rotate(hero, -90)# 父类
class FltObj():def __init__(self, x, y, width, height, img):self.x = xself.y = yself.width = widthself.height = heightself.img = imgdef hit(self, obj):x1 = self.x - obj.widthx2 = self.x + self.widthy1 = self.y - obj.heighty2 = self.y + self.heightreturn obj.x > x1 and obj.x < x2 and obj.y > y1 and obj.y < y2def paint(self):screen.blit(self.img, (self.x, self.y))# 地人类
class Enemy(FltObj):def __init__(self, x, y, width, height, life, type, img):FltObj.__init__(self, x, random.randint(y, sky.height - height), width, height, img)self.life = lifeself.type = typeself.flag = Truedef paint(self):screen.blit(self.img, (self.x, self.y))def move(self):self.x -= 3# 背景类
class Sky(FltObj):def __init__(self, x, y, width, height, img):FltObj.__init__(self, x, y, width, height, img)def paint(self):screen.blit(self.img, (self.x, self.y))# 英雄类
class Hero(FltObj):def __init__(self, x, y, width, height, life, img):FltObj.__init__(self, x, y, width, height, img)self.life = lifeself.leap = Falseself.stepY = 0# 画英雄def paint(self):angle = self.stepY * -1 * 6hero = pygame.transform.rotate(self.img, angle)screen.blit(hero, (self.x, self.y))# 英雄移动def move(self):self.y += self.stepYif self.stepY <= 15:self.stepY += 0.3if self.leap:self.stepY = -7bird.leap = False# 实例化用到的对象
sky = Sky(0, 0, 480, 852, bg)
bird = Hero(50, 100, 65, 75, 1, h)
enemys = []
TEXT_FONT = pygame.font.SysFont("console", 30, True)# 事件处理器
def handleEvent():global state, enemys, birdfor event in pygame.event.get():if event.type == QUIT:pygame.quit()exit()elif event.type == pygame.MOUSEBUTTONDOWN:if state == START:state = LIVEelif state == OVER:enemys = []bird = Hero(50, 100, 75, 65, 1, h)state = STARTelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:bird.leap = True# 添加敌人方法
def addEnemy():global enemyTimeif enemyTime % 30 == 0:rnum = random.randint(0, 5)if rnum == 0:enemys.append(Enemy(sky.width, 0, 50, 60, 1, "小敌机", e1))elif rnum == 1:enemys.append(Enemy(sky.width, 0, 50, 60, 1, "小敌机", e1))else:enemys.append(Enemy(sky.width, 0, 50, 60, 1, "小敌机", e1))# 碰撞处理器
def hit():global state, scorefor e in enemys:if e.hit(bird) or bird.y > sky.height or bird.y < 0 - bird.height:state = OVERif e.x < 0 - e.width:enemys.remove(e)breakif e.x < bird.x + bird.width and e.flag:score += 1e.flag = False# 执行程序
while True:sky.paint()hit()sc = TEXT_FONT.render("Score:{}".format(score), True, (255, 255, 0))screen.blit(sc, (10, 10))if state == START:screen.blit(start, (150, SCREEN_HEIGHT / 2.5))elif state == LIVE:bird.paint()bird.move()addEnemy()for ene in enemys:ene.paint()ene.move()enemyTime += 1elif state == OVER:screen.blit(over, (150, SCREEN_HEIGHT / 2.5))# 更新屏幕内容pygame.display.update()# 处理关闭游戏handleEvent()time.sleep(0.01)

这篇关于python飞机大战版管道鸟(简易) pygame单线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023908

相关文章

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写