Python雷电小游戏、战机小游戏源代码,单机版,相关图片及声音素材包下载地址:雷电战机小游戏

'''
公众号:Python代码大全
'''
import pygame, os
import time
import random
from pygame.sprite import Sprite
from pygame.sprite import Groupdef fire_music():pass# 设置开火音乐# effect = pygame.mixer.Sound('sounds/fire.wav')# pygame.mixer.Sound.play(effect)class Boss(Sprite):def __init__(self,boss_img_name):super().__init__()# 加载BOSS图片self.image = pygame.image.load('图片/'+boss_img_name+'.png').convert_alpha()# 转换BOSS大小# self.image = pygame.transform.scale(self.image, (1, 12))# 生成BOSS矩形框架self.rect = self.image.get_rect()self.blood = 1000# boss左右移动的速度self.speed = 3.5def move(self):if self.rect.centerx>=512:self.speed =-self.speedif self.rect.centerx<=0:self.speed = -self.speedself.rect.centerx +=self.speedclass Enemy(Sprite):def __init__(self,screen):# 必须设置继承精灵 不然在使用精灵函数时会报错super().__init__()# 获取屏幕对象self.screen = screen# 随机 生成5个编号alien_num = random.randint(1,5)# 随机 加载五个飞机中的某个self.image = pygame.image.load('图片/alien_' + str(alien_num) + '.png')# picture = pygame.transform.scale(picture, (1280, 720))self.image = pygame.transform.scale(self.image,(62,62))# 获取飞机的 rectself.rect = self.image.get_rect()# 击落本机获得的分数self.score = 10# 加载子弹的图片self.bullet_img = pygame.image.load("图片/alien_bullet.png").convert_alpha()self.bullet_img = pygame.transform.scale(self.bullet_img, (12, 12))# 以下为可以调节子弹尺寸的代码# picture = pygame.transform.scale(picture, (1280, 720))#飞机的移动速度self.speed = random.randint(3,5)#生成子弹精灵组合self.bullets = Group()# 敌机射击频率self.shoot_frequency = 0# 飞机出现def move(self):self.rect.top += 5#暂时不用射击# self.shoot()# self.moveBullet()# 发射子弹def shoot(self):if self.shoot_frequency % 200 == 0:bullet = Enemy_Bullet(self.bullet_img, self.rect.midbottom)self.bullets.add(bullet)self.shoot_frequency += 1if self.shoot_frequency > 200:self.shoot_frequency = 1# 删除子弹def moveBullet(self):for bullet in self.bullets:bullet.move()if bullet.rect.bottom < 0:self.bullets.remove(bullet)# 绘制子弹def drawBullets(self, scr):self.bullets.draw(scr)class Enemy_Bullet(pygame.sprite.Sprite):def __init__(self, init_pos):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("图片/alien_bullet.png").convert_alpha()self.image = pygame.transform.scale(self.image, (12, 12))self.rect = self.image.get_rect()# 敌机子弹初始位置设置self.rect.midbottom = init_posself.rect.centery +=36self.speed = 8def move(self):self.rect.top += self.speed
class MyHero(Sprite):_rate = 100 # 每帧停留的毫秒数def __init__(self,screen,size = 1):super().__init__()# 获取屏幕对象self.screen = screen# 获取整张图片self.image_big = pygame.image.load('图片/hero.png').convert_alpha()# subsurface 形成大图的子表面框架# 获取飞机正面图片self.image = self.image_big.subsurface(pygame.Rect(120, 0, 318 - 240, 87))# 获取飞机正面矩形框架尺寸self.rect = self.image.get_rect()# 获取屏幕对象矩形self.screen_rect = screen.get_rect()# 获取屏幕正中x坐标self.rect.centerx = self.screen_rect.centerx# 获取屏幕底部y坐标self.rect.centery = self.screen_rect.bottom - self.rect.height# 设置飞机初始位置self.centerX = float(self.rect.centerx)self.centerY = float(self.rect.centery)# 飞机尾焰self.air = None# 设置飞机尾焰位置self.air_rect = pygame.Rect(self.centerX - 20,self.centerY+int((self.rect.height+72)/2)-10-36,40,72)#玩家所有发射子弹的集合self.bullets = Group()self.bullet_image = pygame.image.load('图片/bullet_1.png').convert_alpha()# 子弹射击def shoot(self):# 产生一颗子弹实例bullet = Bullet(self.bullet_image,self.rect.midtop)# 在group子弹精灵集合中加入子弹self.bullets.add(bullet)# 子弹删除def moveBullet(self):# 逐个检查子弹精灵集合 到达屏幕顶端的子弹删除for bullet in self.bullets:bullet.move()if bullet.rect.bottom < 0:self.bullets.remove(bullet)# 子弹显示def drawBullets(self, scr):# 将精灵集合中的子弹绘制到屏幕上self.bullets.draw(scr)# 向上飞时,增加喷射火焰def set_air(self, case):if case == 'up':air = pygame.image.load('图片/air.png').convert_alpha()img = air.subsurface(pygame.Rect(80, 0, 50, 87))self.air = imgelif case == 'remove':self.air = None# 根据移动方向获取飞机移动状态的图片def set_image(self, case):if case=='left':rect = pygame.Rect(195,0,318-248,87)image = self.image_big.subsurface(rect)elif case =='right':rect = pygame.Rect(195,0,318-248,87)image = pygame.transform.flip(self.image_big.subsurface(rect), True, False)elif case == 'up' or case == 'down':rect = pygame.Rect(120, 0, 318 - 240, 87)image = self.image_big.subsurface(rect)self.image = imageclass Bullet(pygame.sprite.Sprite):def __init__(self, bullet_img, init_pos):pygame.sprite.Sprite.__init__(self)self.image = bullet_imgself.rect = bullet_img.get_rect()self.rect.midbottom = init_posself.speed = 25def move(self):self.rect.top -= self.speed# 初始化pygame
pygame.init()
# pygame.mixer.init()
# pygame.mixer_music.load('sounds/enviro.mp3') # 加载播放音乐
# pygame.mixer.music.play(-1) #-1 为循环播放
# 设置游戏主题
pygame.display.set_caption('AirCraft')
# 初始化屏幕大小
screen = pygame.display.set_mode((512,768))# 设置游戏背景图片
# 游戏刚开始时的背景图
bg_img0 = pygame.image.load('图片/start_bg.jpg').convert()
# 加载游戏开始图标
start_img = pygame.image.load('图片/start.png').convert_alpha()
start_rect = start_img.get_rect()
start_rect.centerx = 262
start_rect.centery = 455
#  游戏进行中的背景图
bg_img1 = pygame.image.load('图片/map1.jpg').convert()
bg_img2 = bg_img1.copy()
# 游戏结束时的背景图
bg_img3 = pygame.image.load('图片/map3.jpg').convert()
# 加载游戏结束图标
gameover_img = pygame.image.load('图片/gameover.png').convert_alpha()
# 加载游戏成功图标
gamesuccess = pygame.image.load('图片/success.png').convert_alpha()# 加载重玩图标
restart_img = pygame.image.load('图片/restart.png').convert_alpha()
restart_rect = restart_img.get_rect()
restart_rect.centerx = 249
restart_rect.centery = 420
# 背景图片初始位置
pos_y1 = -768
pos_y2 = 0# 实例化BOSS
boss = Boss('boss_1')
bosses = Group()
bosses.add(boss)
# 测试主角图片
# air = pygame.image.load('图片/air.png').convert_alpha()
# img = air.subsurface(pygame.Rect(80, 0, 50, 87))
# image_big = pygame.image.load('图片/hero.png').convert_alpha()
# image = image_big.subsurface(pygame.Rect(195,0,318-248,87))# 生成我方飞机
student_plane = MyHero(screen)# 生成敌方飞机
# 生成敌机group
enemies = Group()
# 生成敌机子弹
enemy_bullets = Group()
max_enemies = 9  # 设置敌机数量总数为9
# 敌机随机出现的节奏 下方randint参数 为43,55
ran1,ran2 = 30,40# 生成计时频率变量
sec = 0
# 生成分数
score = 0
# 设置系统字体
my_font = pygame.font.Font('fonts/msyh.ttf', 18)# 游戏主循环
# 设置游戏状态  开始 结束
game = 'wait'while True:# 游戏在等待状态if game =='wait':# 最小游戏框架一个都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 检测鼠标是否按下 重新开始按钮if event.type == pygame.MOUSEBUTTONDOWN:# 检测鼠标点击位置是否与重启rect重叠if start_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戏结束游戏画面暂停screen.blit(bg_img0, (0, 0))screen.blit(start_img, start_rect)# 测试尾焰位置pygame.display.flip()time.sleep(0.05)# 游戏进行状态elif game == 'ing':# 设置这3行 监听事件 并且内部设定了延迟防止游戏卡死# 屏幕滚动-----------------------------------------------------screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))# 测试尾焰位置# screen.blit(img, (100, 100))pos_y1 += 1pos_y2 += 1# 屏幕背景滚动完毕后重置位置if pos_y1 >= 0:pos_y1 = -768if pos_y2 >= 768:pos_y2 = 0for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 监听键盘事件# 按键弹起取消飞机向上尾焰 矫正飞机姿势if event.type == pygame.KEYUP:student_plane.set_image('down')student_plane.air = None# 发射子弹if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE and len(student_plane.bullets) <6: # 检查子弹集合的数量限制子弹最大数量fire_music()# 产生一颗子弹实例# 在group子弹精灵集合中加入子弹student_plane.shoot()# 将精灵集合中的子弹绘制到屏幕上student_plane.drawBullets(screen)# 逐个检查子弹精灵集合 到达屏幕顶端的子弹删除student_plane.moveBullet()keys = pygame.key.get_pressed()if keys[pygame.K_a]:# 设置飞机状态图片student_plane.set_image('left')if student_plane.rect.centerx>=40:student_plane.rect.centerx -=8.5elif keys[pygame.K_d]:# 设置飞机状态图片student_plane.set_image('right')if student_plane.rect.centerx <= 478:student_plane.rect.centerx +=8.5elif keys[pygame.K_w]:#设置飞机状态图片student_plane.set_image('up')student_plane.set_air('up')if student_plane.rect.centery >= 45:student_plane.rect.centery -=8.5elif keys[pygame.K_s]:# 设置飞机状态图片student_plane.set_image('down')if student_plane.rect.centery <= 727:student_plane.rect.centery +=8.5# 显示飞机screen.blit(student_plane.image,student_plane.rect)if student_plane.air != None:screen.blit(student_plane.air, (student_plane.rect.centerx-30, student_plane.rect.centery+33))# 敌机 ---------------------------------------------------------------------------------------# 敌机移动# 控制时间节奏 sec变量sec +=1#随机控制生成敌机的节奏rhy = random.randint(ran1,ran2)# 敌机最多数量if sec%rhy ==0 and len(enemies) < max_enemies or sec ==1: # 设置敌机数量总数为9# 生成一只敌机enemy = Enemy(screen)enemy.rect.centerx=random.randint(0,512)# 生成上述敌机的子弹enemy_bullet = Enemy_Bullet((enemy.rect.centerx,enemy.rect.centery))# 敌机group 和 敌机子弹group加载敌机和子弹enemies.add(enemy)enemy_bullets.add(enemy_bullet)# 敌机出现 和 敌机子弹出现enemies.draw(screen)enemy_bullets.draw(screen)# 迭代敌机集合for enemy in enemies:# 让每个对象移动起来enemy.move()# 敌机超出屏幕边界后 自动删除敌机collision_over1 = pygame.sprite.collide_rect(student_plane, enemy)if collision_over1:# 为了重启游戏时 防止有旧子弹和飞机存在enemies.remove(enemy)game = 'over'if enemy.rect.bottom >768:enemies.remove(enemy)for enemy_bullet in enemy_bullets:# 让每个对象移动起来enemy_bullet.move()collision_over2 = pygame.sprite.collide_rect(student_plane, enemy_bullet)if collision_over2:# 为了重启游戏时 防止有旧子弹和飞机存在enemy_bullets.remove(enemy_bullet)game = 'over'# 敌机子弹超出屏幕边界后 自动删除敌机if enemy_bullet.rect.bottom >768:enemy_bullets.remove(enemy_bullet)#  -----------------------Boss --------------------------if score >=140:# 小敌机出现的节奏ran1,ran2 = 15,25max_enemies = 17screen.blit(boss.image,boss.rect)boss.move()for my_bullet in student_plane.bullets:hit_boss = pygame.sprite.collide_rect(boss,my_bullet)if hit_boss:boss.blood -=1.2score+=1if boss.blood <=0:game = 'success'# 处理碰撞    ---------------------------碰撞检测--------------------------------------------------#   参数:#   group1:精灵组1。#   group2:精灵组2。#   dokill1:发生碰撞时,是否销毁精灵组1中的发生碰撞的精灵。#   dokill2:发生碰撞时,是否销毁精灵组2中的发生碰撞的精灵。collisions = pygame.sprite.groupcollide(student_plane.bullets, enemies, True, True)if collisions:score+=10# -----------游戏结束------------# 分数和奖励的显示-------------------------------------------------------------------------surface1 = my_font.render(u"当前得分:%s"%(score),True,[255,0,0])screen.blit(surface1,[20,20])# 更新画面pygame.display.flip()# 设置帧数和延迟time.sleep(0.05)#游戏结束状态elif game == 'over':score = 0# 最小游戏框架一个都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 检测鼠标是否按下 重新开始按钮if event.type == pygame.MOUSEBUTTONDOWN:# 检测鼠标点击位置是否与重启rect重叠if restart_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戏结束游戏画面暂停screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))screen.blit(gameover_img, (163, 310))screen.blit(restart_img, restart_rect)# 测试尾焰位置# screen.blit(img, (100, 100))pos_y1 += 0pos_y2 += 0pygame.display.flip()time.sleep(0.05)# surface2 = my_font.render("Game Over" , True, [255, 0, 0])# screen.blit(surface1, [250, 350])elif game == 'success':score = 0boss.blood = 1000# 最小游戏框架一个都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 检测鼠标是否按下 重新开始按钮if event.type == pygame.MOUSEBUTTONDOWN:# 检测鼠标点击位置是否与重启rect重叠if restart_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戏结束游戏画面暂停screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))screen.blit(gamesuccess, (170, 220))screen.blit(restart_img, restart_rect)# 测试尾焰位置# screen.blit(img, (100, 100))pos_y1 += 0pos_y2 += 0pygame.display.flip()time.sleep(0.05)

更多Python源程序、源代码,请关注公众号:Python代码大全

Python雷电小游戏、战机小游戏源代码源程序相关推荐

  1. Python背单词记单词小程序源代码,背单词记单词小游戏源代码

    背单词小游戏,要有多界面交互,界面整洁.美观,可调节游戏等级难度,可配置游戏信息. 有游戏分数,游戏时间,动画特效,背景音乐,不同游戏等级的历史最高分记录. 拼写成功的英文单词显示中文意思.支持长按回 ...

  2. python代码示例500行源代码-500行代码使用python写个微信小游戏飞机大战游戏

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右 ...

  3. python小游戏_课程设计_期末大作业——小游戏合集(含源代码)

    设计小游戏盒子 本文代码链接 点击直接下载 https://download.csdn.net/download/Wps1919/87103302?spm=1001.2014.3001.5501 如将 ...

  4. 利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 在cmd ...

  5. python写出雷霆战机_利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 在cmd ...

  6. 用python写(飞机大战小游戏)

    w'cwc下面我们进入详细教程: 一.首先我们先建一个文件夹 planewars(名字随便取): 然后用我们python中的pycharm打开这个文件,我们飞机大战的项目就在这进行 二.我们要写这个小 ...

  7. 4399小游戏童年的乐趣,python爬取4399全站小游戏

    大家好,我是辣条. 前言 2021年已到尾巴尖尖了. 今天照镜子,看着镜子中的自己,发现还是跟年轻时一样的"帅",看到头部的时候又发现相比半个月之前的发际线,它好像又往上移了一点点 ...

  8. 很多小伙伴找我说要一个Python制作的消灭星星小游戏,必须给你们安排好!!

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...

  9. Python 简单实现贪吃蛇小游戏

    文章目录 1. pygame库的简介2. pygame库的安装3. python代码实现贪吃蛇小游戏4. pyinstaller打包成exe 很多人学习python,不知道从何学起. 很多人学习pyt ...

  10. 一口气用 Python 写了13个小游戏,摸鱼达人!

    来源 | Python小二 1.吃金币 源码分享: import os import cfg import sys import pygame import random from modules i ...

最新文章

  1. java命名规则_Java命名规则
  2. 51NOD 1001 数组中和等于K的数对
  3. 在@NamedQueries中枚举@NamedQuery
  4. Service Mesh 在华为公有云的实践
  5. ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxE
  6. Halcon图像预处理与形态学(图像的几何变换)
  7. 【云周刊】第148期:“盲人摸象、感而不动、雾里看花”,阿里闵万里谈城市大脑三大挑战...
  8. 杨辉三角python代码 不要括号_关于杨辉三角python代码的问题
  9. 软件测试工程师简历项目经验怎么写?
  10. can总线程序讲解_CANOpen系列教程02_理解CAN总线协议
  11. 协议解析-串口协议解析
  12. snapchat_Snapchat的新地图功能介绍(以及如何禁用它)
  13. python 利用matplolib给绘制的地图添加方框,将所需的区域圈出来
  14. NYOJ - 小柯的编译器
  15. android ae动画教程,AE动画转Web代码工具指北-Lottie
  16. realme 真我Q2系列手机及多款AIoT生态新品汇总盘点
  17. solr的DIH操作同步mysql数据
  18. 面向对象,类,属性,方法,创建调用属性方法,有参,无参,变量代码示例
  19. 博客从CSDN迁移至简书啦
  20. virtualbox安装redhat,正常关闭后需要重新安装原因分析及解决方案

热门文章

  1. 《HFSS 电磁仿真设计 从入门到精通》笔记 HFSS入门实例
  2. HFSS15.0新手村任务
  3. MTF直播整合导航网站源码
  4. 微信小程序代码提交步骤
  5. j2me模拟器linux,J2ME HELLOWORLD 小试牛刀(转)
  6. IntelliJ IDEA开发Java笔记
  7. 一个功能块实现PLC与安川机器人以太网通讯
  8. 阿里云keepalived的虚拟ip怎么让外网访问_Keepalived双机热备
  9. 计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?
  10. Python实现CarMaker TestRun的泛化