全民飞机大战刷金币(全民飞机大战刷金币软件)

更新时间:2023-03-02 09:45:09 阅读: 评论:0

导语

三月疫情原因,很多地方都封闭式管理了!

在回家无聊的打酱油,小编今天给大伙带来了一波小游戏——全民左右飞机大战!在这个快熬

不下去的日子里,打打飞机消遣闲暇时间,也是蛮惬意的,这几天小编必须全身心投入到飞机

大战中来!肝了几天这款小游戏终于面市啦!

​​

正文

这次的游戏操作很简单,就是左右移动飞机,躲避敌人飞机,打落敌机会随机掉落金币,我们

要打击的敌人!每个玩家有五条命,被敌机撞到即挂掉一条命,所以要珍惜生命哟!这款是升

级版本的飞机大战哦~还有更多不同的飞机类型等你来探索,看看你能闯过多少关吧!

小编才闯到第二个飞机,相信你肯定会超过我滴!来试试呀~

一、环境安装

1)各种素材(图片、字体等)

2)运行环境

小编使用的环境:Python3、Pycharm社区版、Pygame模块部分自带。

模块安装:pip install -i https://pypi.douban.com/simple/ pygame

二、代码展示

1)文章思路

Plane 打飞机小游戏 ——

游戏说明: * 目前只做了一个关卡,有三种敌机,自己飞机的子弹类型有四种 * 在游戏中空格键

是暂停,游戏结束后ESC键是重新开始 * 暂时没有加入音效 * 游戏窗口尺寸为512*768

关卡内元素介绍 ——

1. ENEMY_RED:红色小敌机,数量多,出现频率高,击落后有机率出现钱币,可以加分。

2. ENEMY_BLUE:蓝色中型敌机,出现频率低,需要多颗子弹击落,击落后有机率出现星

星,可以加强火力 。

3. ENEMY_BOSS:绿色大型敌机,出现频率低,可以发射子弹,需要很多颗子弹击落,击落后

得分较高 。

4. BULLET_BOSS: 绿色大型敌机发射的子弹

5. OWN: 自己的飞机 6. OWN_BULLET: 自己飞机发射的子弹

系统文件——

【start.py】:开始游戏的主文件 -

【level_01.py】:游戏第一关 - 【sprites.py】:建立游戏精灵类文件

【initialize.py】:系统设置文件,包含各种游戏基本元素的设定值 - .fonts\...:游戏使用的

字体 - .images\...:游戏使用的图像文件 - .screenshot...:游戏画面截屏 ## 游戏画面

截屏 * 游戏载入图片 ![游戏载入]

2)附代码讲解

配置的文件、窗口、图片等设置。

import pygameSCREEN_RECT = pygame.Rect(0, 0, 512, 768) # 用一个常量来存储屏幕的位置和大小,常量用全大写表示SCREEN_CENTER = [SCREEN_RECT.width/2, SCREEN_RECT.height/2]CREATE_ENEMY_EVENT = pygame.USEREVENT # 敌机事件定时器常量值OWN_FIRE_EVENT = pygame.USEREVENT + 1 # 发射子弹定时器常量值BONUS_ENEMY_EVENT = pygame.USEREVENT + 2 # 加分敌机的定时器常量值STAR_ENEMY_EVENT = pygame.USEREVENT + 3 # 星星敌机的定时器常量值BOSS_ENEMY_EVENT = pygame.USEREVENT + 4 # BOSS敌机的定时器常量值BULLET_BOSS_EVENT = pygame.USEREVENT + 5 # BOSS敌机的子弹定时器常量值ENEMY_TIMER = 600 # 敌机出现的时间频率BULLET_TIMER = 400 # 子弹出现的时间频率BONUS_TIMER = 5000 # 加分敌机出现的时间频率START_TIMER = 20000 # 星星敌机出现的时间频率BOSS_TIMER = 120000 # BOSS敌机出现的时间频率BULLET_BOSS_TIMER = 1500 # BOSS敌机子弹出现的时间频率LIFE_NUMS = 5 # 生命值MOVE_SPEED = 5 # 已方飞机移动速度STAR_ENEMY_LIFE = 6 # 打掉星星敌机需要的子弹BOSS_ENEMY_LIFE = 100 # 打掉BOSS敌机需要的子弹BACKGROUND = r'.imagesackground.png'GAME_OVER = r'.imagesgameover.png'OWN_IMAGE = r'.imagesown.png'OWN_DOWN_IMAGE = r'.imagesown_died.png'ENEMY_RED_IMAGE = r'.imagenemy_red.png'ENEMY_BLUE_IMAGE = r'.imagenemy_blue.png'ENEMY_DOWN_IMAGE = r'.imagenemy_down.png'BULLET_IMAGE = r'.imagesullet.png'BULLET_BOSS_IMAGE = r'.imagesullet_boss.png'LIFE_IMAGE = r'.imageslife.png'GOLD_COIN_IMAGE = r'.imagesonus.png'STAR_IMAGE = r'.imagesstar.png'READY_IMAGE = r'.imageady.png'BOSS_IMAGE = r'.imagesoss.png'LOGO_IMAGE = r'.imageslogo.ico'SYS_FONT = r'.fontsBOLDER.ttf'GAME_NAME = '小飞机'FPS = 60 # 屏幕刷新频率

3)主程序

import threadingfrom sprites import *from initialize import *# noinspection PyPep8Naming# 主游戏类class PlaneGame(object): def __init__(lf): lf.score = 0 lf.bullet_grade = 1 # 初始的子弹等级 lf.boss_flag = 0 # 判断BOSS是否出现 lf.ready_time = pygame.time.get_ticks() # 用来控制显示ready画面的时钟 lf.star_enemy_life = STAR_ENEMY_LIFE # 星星敌机需要几颗子弹 lf.boss_enemy_life = BOSS_ENEMY_LIFE # BOSS敌机需要几颗子弹 lf.bullet_type = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four'} lf.screen = pygame.display.t_mode(SCREEN_RECT.size) logo = pygame.image.load(LOGO_IMAGE) # 设置游戏窗口图标 pygame.display.t_icon(logo) pygame.display.t_caption(GAME_NAME) # 设置游戏窗口名称 lf.clock = pygame.time.Clock() # 创建游戏时钟 lf.__createSprite() # 调用私有方法, 创建精灵和组 pygame.time.t_timer(CREATE_ENEMY_EVENT, ENEMY_TIMER) # 设置定时器事件 pygame.time.t_timer(OWN_FIRE_EVENT, BULLET_TIMER) pygame.time.t_timer(BONUS_ENEMY_EVENT, BONUS_TIMER) pygame.time.t_timer(STAR_ENEMY_EVENT, START_TIMER) pygame.time.t_timer(BOSS_ENEMY_EVENT, BOSS_TIMER) pygame.time.t_timer(BULLET_BOSS_EVENT, BULLET_BOSS_TIMER) lf.life_num = LIFE_NUMS def __createSprite(lf): """ 私有方法,创建精灵和组 """ bg1 = BackGround(BACKGROUND) # 创建背景和组 bg2 = BackGround(BACKGROUND) bg2.rect.y = -bg2.rect.height # ??? lf.back_group = pygame.sprite.Group(bg1, bg2) lf.ready_go_group = pygame.sprite.Group() # 创建ready组 lf.ready_go_group.add(ReadyGo()) lf.enemy_red_group = pygame.sprite.Group() # 创建红色敌机组 lf.enemy_down_group = pygame.sprite.Group() # 创建被击中敌机组 lf.bonus_enemy_group = pygame.sprite.Group() # 创建加分敌机组 lf.gold_coin_group = pygame.sprite.Group() # 创建金币组 lf.star_enemy_group = pygame.sprite.Group() # 创建星星敌机组 lf.boss_enemy = EnemyBoss() # ??? lf.boss_enemy_group = pygame.sprite.Group() # 创建BOSS敌机组 lf.bullet_boss_group = pygame.sprite.Group() # 创建BOSS子弹组 lf.star_coin_group = pygame.sprite.Group() # 创建星星组 lf.own_died_group = pygame.sprite.Group() # 创建自己死亡飞机的组 lf.__retOwn() # 创建自己的飞机和组 def start(lf): """ 游戏开始 """ while True: lf.clock.tick(FPS) # 刷新帧率 lf.__eventHandler() # 事件监听 lf.__checkCollide() # 碰撞检测 lf.__updateSprites() # 更新/绘制画面 pygame.display.update() # 更新屏幕显示 lf.__gameOver() # 游戏结束 def __eventHandler(lf): """ 事件监听(监听定时器常量) """ for event in pygame.event.get(): if event.type == pygame.QUIT: # 判断是否退出游戏 PlaneGame.quit() elif event.type == CREATE_ENEMY_EVENT: # 当事件值等于CREATE_ENEMY_EVENT时,将敌机精灵添加到组 enemy = EnemyRed() lf.enemy_red_group.add(enemy) elif event.type == BONUS_ENEMY_EVENT: # 当事件值等于BONUS_ENEMY_EVENT时,将加分敌机加入到组 bonus_enemy = EnemyRed() lf.bonus_enemy_group.add(bonus_enemy) elif event.type == STAR_ENEMY_EVENT: # 当事件值等于STAR_ENEMY_EVENT时,将星星敌机加入到组 lf.star_enemy_life = STAR_ENEMY_LIFE # 赋予新的星星敌机生命值 star_enemy = EnemyBlue() lf.star_enemy_group.add(star_enemy) elif event.type == BOSS_ENEMY_EVENT: # 当事件值等于BOSS_ENEMY_EVENT时,将BOSS敌机加入到组 lf.boss_enemy_life = BOSS_ENEMY_LIFE # 赋予新的BOSS敌机生命值 lf.boss_enemy = EnemyBoss() # ???? lf.boss_enemy_group.add(lf.boss_enemy) lf.boss_flag = 1 # 修改BOSS出现的flag elif event.type == OWN_FIRE_EVENT: # 当事件值等于OWN_FIRE_EVENT时,按子弹等级开火 for n in lf.bullet_type: grade = 4 if lf.bullet_grade > 4 el lf.bullet_grade if grade == n: exec('lf.own.fire{}()'.format(lf.bullet_type[n])) if lf.boss_flag == 1: # 如果BOSS出现,则发射子弹 if event.type == BULLET_BOSS_EVENT: lf.boss_enemy.fire() keys_presd = pygame.key.get_presd() # 使用键盘提供的方法获取按键, 得到一个按键元组 if keys_presd[pygame.K_RIGHT]: # 按右方向键时向右移动,水平速度为4 lf.own.speed_y = 0 # 同时将垂直方向的速度变为0 lf.own.speed_x = MOVE_SPEED elif keys_presd[pygame.K_LEFT]: # 按左方向键时向右移动,水平速度为4 lf.own.speed_y = 0 lf.own.speed_x = -MOVE_SPEED elif keys_presd[pygame.K_UP]: # 按上方向键时向右移动,垂直速度为-4 lf.own.speed_x = 0 # 同时将水平方向的速度变为0 lf.own.speed_y = -MOVE_SPEED elif keys_presd[pygame.K_DOWN]: # 按下方向键时向右移动,垂直速度为4 lf.own.speed_x = 0 lf.own.speed_y = MOVE_SPEED elif keys_presd[pygame.K_SPACE]: # 按空格键时暂停游戏 lf.__gamePau(True) el: # 按其他键或不按时不移动 lf.own.speed_x = 0 lf.own.speed_y = 0 def __checkCollide(lf): """ 碰撞检测 """ # 当子弹和敌机碰撞,敌机爆炸,得分加1,groupcollide()是精灵基类中的方法,返回一个字典,子弹是键,敌机是值 killers = pygame.sprite.groupcollide(lf.own.bullets, lf.enemy_red_group, True, True) # 子弹摧毁敌机 if len(killers) > 0: # 如果返回值长度大于0时,得分加1 lf.score += 1 enemy_down = SpriteDown(ENEMY_DOWN_IMAGE, list(killers.keys())[0].rect, 0) # 取出碰撞字典中的键用来定位显示爆炸 lf.enemy_down_group.add(enemy_down) # 当敌机和已机碰撞,飞机数量减1,1秒后重新显示一架飞机 died_1 = pygame.sprite.groupcollide(lf.enemy_red_group, lf.own_group, True, True) # 敌机撞毁自己飞机 died_2 = pygame.sprite.groupcollide(lf.bonus_enemy_group, lf.own_group, True, True) # 加分敌机撞毁自己飞机 died_3 = pygame.sprite.groupcollide(lf.star_enemy_group, lf.own_group, True, True) # 星星敌机撞毁自己飞机 died_4 = pygame.sprite.groupcollide(lf.boss_enemy.bullets, lf.own_group, True, True) # BOSS敌机子弹击毁已机 died_5 = pygame.sprite.groupcollide(lf.boss_enemy_group, lf.own_group, True, True) # BOSS敌机撞毁已机 died_owns = {**died_1, **died_2, **died_3, **died_4, **died_5} # 合并字典 if len(died_owns) > 0: # 列表有内容代表发生碰撞了 lf.life_num -= 1 # 飞机数量减1 own_died = SpriteDown(OWN_DOWN_IMAGE, list(died_owns.keys())[0].rect, 0) lf.own_died_group.add(own_died) lf.s = threading.Timer(1, lf.__retOwn) # 设置一个多线程定时调用函数,1秒后开始执行 lf.s.start() # 当子弹和加分敌机碰撞,出现金币继续下落 bonus_enemies = pygame.sprite.groupcollide(lf.own.bullets, lf.bonus_enemy_group, True, True) if len(bonus_enemies) > 0: lf.score += 1 gold_coin = SpriteDown(GOLD_COIN_IMAGE, list(bonus_enemies.keys())[0].rect, 1) lf.gold_coin_group.add(gold_coin) # 当已机和硬币碰撞,得分+5,金币消失 gold = pygame.sprite.groupcollide(lf.gold_coin_group, lf.own_group, True, Fal) if len(gold) > 0: lf.score += 5 # 当子弹和星星敌机碰撞,子弹消失,超过n颗子弹后出现星星继续下落 if lf.star_enemy_life <= 0: star_enemy = pygame.sprite.groupcollide(lf.own.bullets, lf.star_enemy_group, True, True) if len(star_enemy) > 0: lf.score += 5 star_coin = SpriteDown(STAR_IMAGE, list(star_enemy.keys())[0].rect, 1) lf.star_coin_group.add(star_coin) el: star_enemies = pygame.sprite.groupcollide(lf.own.bullets, lf.star_enemy_group, True, Fal) if len(star_enemies) > 0: lf.star_enemy_life -= 1 # 当子弹和BOSS敌机碰撞,子弹消失,超过n颗子弹后BOSS敌机爆炸 if lf.boss_enemy_life <= 0: boss_enemy = pygame.sprite.groupcollide(lf.own.bullets, lf.boss_enemy_group, True, True) if len(boss_enemy) > 0: lf.score += 300 enemy_down = SpriteDown(ENEMY_DOWN_IMAGE, list(boss_enemy.keys())[0].rect, 1) lf.enemy_down_group.add(enemy_down) lf.boss_flag = 0 el: boss_enemies = pygame.sprite.groupcollide(lf.own.bullets, lf.boss_enemy_group, True, Fal) if len(boss_enemies) > 0: lf.boss_enemy_life -= 1 # 当已机和星星碰撞,得分+10,子弹等级+1 star = pygame.sprite.groupcollide(lf.star_coin_group, lf.own_group, True, Fal) if len(star) > 0: lf.score += 10 lf.bullet_grade += 1 def __retOwn(lf): """ 自己飞机重生 """ lf.own = Own() # 创建自己的飞机精灵和精灵组 lf.own_group = pygame.sprite.Group(lf.own) lf.bullet_grade = 1 # 初始的子弹等级 def __infoDisplay(lf, text, pos, angle): """ -- 显示游戏信息 :param text: 文字内容 :param pos: 位置[x, y] :param angle: 用来定位的角 :return: """ score_font = pygame.font.Font(SYS_FONT, 24) score_text = score_font.render(text, True, (255, 255, 255)) text_rect = score_text.get_rect() exec('text_rect.{}={}'.format(angle, pos)) lf.screen.blit(score_text, text_rect) def __updateSprites(lf): """ 更新/绘制精灵组 """ lf.back_group.update() lf.back_group.draw(lf.screen) lf.__infoDisplay('score ' + str(lf.score), [20, 10], 'topleft') lf.__infoDisplay('level 01', [492, 10], 'topright') lf.__infoDisplay('life ' + str(lf.life_num), [230, 10], 'topleft') if pygame.time.get_ticks() < lf.ready_time + 3000: # 显示ready画面3秒 lf.ready_go_group.update() lf.ready_go_group.draw(lf.screen) if pygame.time.get_ticks() > lf.ready_time + 4000: # ready画面1秒后开始显示游戏元素 lf.enemy_red_group.update() lf.enemy_red_group.draw(lf.screen) # 显示敌机 lf.bonus_enemy_group.update() lf.bonus_enemy_group.draw(lf.screen) # 显示加分敌机 lf.star_enemy_group.update() lf.star_enemy_group.draw(lf.screen) # 显示星星敌机 lf.boss_enemy_group.update() lf.boss_enemy_group.draw(lf.screen) # 显示BOSS敌机 lf.enemy_down_group.update() lf.enemy_down_group.draw(lf.screen) # 显示敌机爆炸 lf.own.bullets.update() lf.own.bullets.draw(lf.screen) # 显示已方子弹 lf.boss_enemy.bullets.update() lf.boss_enemy.bullets.draw(lf.screen) # 显示BOSS子弹 lf.own_died_group.update() lf.own_died_group.draw(lf.screen) # 显示已方飞机爆炸 lf.gold_coin_group.update() lf.gold_coin_group.draw(lf.screen) # 显示金币 lf.star_coin_group.update() lf.star_coin_group.draw(lf.screen) # 显示星星 lf.own_group.update() lf.own_group.draw(lf.screen) # 显示已方飞机 def __gamePau(lf, pau=Fal): """ 暂停游戏, 按任意键退出""" lf.__infoDisplay('Any key to continue...', SCREEN_CENTER, 'center') pygame.display.update() # 更新屏幕显示 while pau: for event in pygame.event.get(): if event.type == pygame.QUIT: PlaneGame.quit() elif event.type == pygame.KEYDOWN: pau = Fal def __gameOver(lf): """ 游戏结束,按ESC重新开始 """ if lf.life_num == 0: # 如果飞机数量为0,退出游戏 game_over = pygame.image.load(GAME_OVER) # 显示GAMEOVER图片 lf.screen.blit(game_over, (50, 150)) lf.__infoDisplay('press ESC play again...', SCREEN_CENTER, 'center') pygame.display.update() # 更新屏幕显示 flag = True while flag: for event in pygame.event.get(): if event.type == pygame.QUIT: PlaneGame.quit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: # 按SPACE重新开始游戏 flag = Fal PlaneGame().start() @staticmethod def quit(): """ 静态函数,退出游戏 """ pygame.quit() exit()

三、效果展示

1)游戏界面

​2)运行游戏

3)金币掉落

4)游戏结束

总结

嘻嘻!打掉蓝色战机加星星之后玩起来特别爽的哦~以上没截图,大家可以自己试试的啦!

文章写到这里结束,需要源码滴私信小编06即可免费领取啦!

往期还有更多好玩儿的源码等你来领取哦~

本文发布于:2023-02-28 21:04:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167772150998032.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:全民飞机大战刷金币(全民飞机大战刷金币软件).doc

本文 PDF 下载地址:全民飞机大战刷金币(全民飞机大战刷金币软件).pdf

标签:金币   全民   大战   飞机   软件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|