python实现微信打飞机游戏

本文实例为大家分享了python实现微信打飞机游戏的具体代码,供大家参考,具体内容如下

import pygame
import random
import sys

#初始化
pygame.init()
pygame.display.set_caption('飞机火拼')#设置窗口标题
screen= pygame.display.set_mode((320, 570), 0, 32)
pygame.mouse.set_visible(False)#隐藏光标

#加载图片
boom1=pygame.image.load('../Game/fly/src/boom1.png')
boom2=pygame.image.load("../Game/fly/src/boom2.png")
bullet=pygame.image.load('../Game/fly/src/bullet.png')
plane=pygame.image.load("../Game/fly/src/plane.png").convert_alpha()
enemy=pygame.image.load('../Game/fly/src/enemy.png')
#设置窗口图标
pygame.display.set_icon(plane)
background=pygame.image.load("../Game/fly/src/bg_01.png")
start=pygame.image.load('../Game/fly/src/start.png')
pause=pygame.image.load("../Game/fly/src/pause.png")

#pygame.mixer.init()
#Xexplosion=pygame.mixer.Sound("explosion.mp3")
#Xbullet=pygame.mixer.Sound("../Game/fly/sound/bullet.mp3")
#XgameOver=pygame.mixer.Sound("../Game/fly/sound/game_over.mp3")
#Xexplosion.set_volume(1)

#pygame.mixer.music.load("../Game/fly/sound/game_music.mp3")
#pygame.mixer.music.play(-1, 0.0)
#pygame.mixer.music.set_volume(0.25)

i=0
#分数
score=0
font=pygame.font.SysFont('微软雅黑', 36)
#子弹
bullets=[]
#敌机
enemies=[]
#记录敌机爆炸位置
boomplace=[]
#游戏结束
gameover=False
pygame.mouse.set_pos(200, 200)
while True:
  i += 1
  if i > 200:
    i =0
  screen.blit(background, (0, 0))
  #通过鼠标控制飞机
  x, y=pygame.mouse.get_pos()
  #print(x, y)
  x -= plane.get_width()/2
  y -= plane.get_height()/2
  screen.blit(plane, (x, y))

  #每25帧 调用一次
  if i%25 == 0:
    #返回 按下左键 中键 右键
    l,m,r=pygame.mouse.get_pressed()
    if l ==True:
      #生成子弹位置添加
      bullets.append([x+plane.get_width()/2, y])
      #Xshoot.play()
      for place in bullets:
        #子弹位置超出边界
        if place[1]<=0:
          bullets.remove(place)
    #移动子弹位置
    for place in bullets:
      place[1] -= 55
  #绘制子弹
  for place in bullets:
    screen.blit(bullet,(place[0],place[1]))
  #敌机生成 移动 消失
  if i%199 == 0:
    enemies.append([random.randint(0,320-enemy.get_width()),-enemy.get_width()/2])
    for place in enemies:
      if place[1] >= 600:
        enemies.remove(place)
    for place in enemies:
      place[1] += 35
  for place in enemies:
    screen.blit(enemy,(place[0],place[1]))
  #敌机爆炸
  for place in boomplace:
    if place[2]>0:
      screen.blit(boom1,(place[0],place[1]))
      place[2] -=1
  #子弹碰撞检测
  for bulletplace in bullets:
    for enemyplace in enemies:
      if (bulletplace[0] > enemyplace[0] and bulletplace[0] < enemyplace[0] + enemy.get_width()) and \
        (bulletplace[1] > enemyplace[1] and bulletplace[1] < enemyplace[1] + enemy.get_height()):
        boomflag = 75
        enemyplace.append(boomflag)
        boomplace.append(enemyplace)
        enemies.remove(enemyplace)
        bullets.remove(bulletplace)
        #Sexplosion.play()
        score += 1
  #飞机碰撞检测
  for enemyplace in enemies:
    if (x + 0.7*plane.get_width() > enemyplace[0]) and (x + 0.3*plane.get_width()<enemyplace[0]+ enemy.get_width())\
      and  (y + 0.7*plane.get_height() > enemyplace[1]) and (y + 0.3*plane.get_height()<enemyplace[1]+ enemy.get_height()):
      enemies.remove(enemyplace)

      screen.blit(pause,(0,0))
      screen.blit(boom2, (x, y))
      #for place in bullets:
        #screen.blit(bullet, (place[0], place[1]))
      #for place in enemies:
        #screen.blit(enemy, (place[0], place[1]))

      text=font.render('Score%d'%score,True,(0,0,0))
      screen.blit(text,(200,270))
      text=font.render("Right ReStart",True,(0, 0,0))
      screen.blit(text,(30,310))
      pygame.display.update()#重新绘制窗口

      gameover=True
      while gameover == True and r == False :
        l, m, r = pygame.mouse.get_pressed()
        for event in pygame.event.get():
          if event.type == pygame.QUIT:
            pygame.quit()
            exit()
      #重置游戏
      i=0
      score=0
      bullets=[]
      enemies=[]
      boomplace=[]
      x, y=185-plane.get_width()/2,550 - plane.get_height()/2
  #检测 暂停 继续
  l,m,r=pygame.mouse.get_pressed()
  if r == True:
    screen.blit(background,(0,0))

    screen.blit(start,(0,0))
    screen.blit(plane,(x,y))
    for place in bullets:
      screen.blit(bullet,(place[0],place[1]))
    for place in enemies:
      screen.blit(enemy,(place[0],place[1]))
    for place in boomplace:
      if place[2] >0:
        screen.blit(boom1,(place[0],place[1]))
        place[2] -=1
    text=font.render(u'Score %d'%score,1,(0,0,0))
    screen.blit(text,(50,0))

    if gameover == True:
      x,y =185,550
      gameover =False
      text =font.render(' left to start',True,(0,0,0))
      screen.blit(text,(35,300))
    else:
      x,y=pygame.mouse.get_pos()
      text=font.render(' left to continue ',True,(0,0,0))
      screen.blit(text,(10,300))
    pygame.display.update()

    while True :
      for event in pygame.event.get():
        if event.type == pygame.QUIT:
          pygame.quit()
          exit()
      l, m, r = pygame.mouse.get_pressed()
      if l == True:
        pygame.mouse.set_pos(x,y)
        break
  text=font.render(u"%d"%score, True, (0, 0, 0))
  screen.blit(text,(50, 0))
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      exit()

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现飞机大战

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 实现的效果如下: 主程序代码如下: import pygame from plane_sprites import * class PlaneGame(object): """飞机大战主游戏""" def __init__(self): print("游戏初始化") # 1,绘制屏幕窗口 self.screen = pygame.display.

  • python飞机大战pygame碰撞检测实现方法分析

    本文实例讲述了python飞机大战pygame碰撞检测实现方法.分享给大家供大家参考,具体如下: 目标 了解碰撞检测方法 碰撞实现 01. 了解碰撞检测方法 pygame 提供了 两个非常方便 的方法可以实现碰撞检测: pygame.sprite.groupcollide() 两个精灵组 中 所有的精灵 的碰撞检测 groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict 如果将 dokill 设

  • python实现飞机大战游戏(pygame版)

    简介 使用python实现pygame版的飞机大战游戏: 环境:Windows系统+python3.8.0 游戏规则: 1.点击"PLAY"或者按键"P"开始游戏: 2.敌机根据设置频率从顶部随机位置生成,生成后向下移动: 3.飞船在底部中间生成,玩家使用上下左右键控制飞船移动,敲击空格键发射子弹: 4.子弹打到敌机,该敌机产生爆炸效果并累计分数到右上角: 5.消灭10只飞机后,等级升高,敌机生成频率变快,下落速度也变快: 6.当三条命都消失了,游戏结束. 游戏运行

  • python飞机大战pygame游戏框架搭建操作详解

    本文实例讲述了python飞机大战pygame游戏框架搭建操作.分享给大家供大家参考,具体如下: 目标 明确主程序职责 实现主程序类 准备游戏精灵组 01. 明确主程序职责 回顾 快速入门案例,一个游戏主程序的 职责 可以分为两个部分: 游戏初始化 游戏循环 根据明确的职责,设计 PlaneGame 类如下: 提示 根据 职责 封装私有方法,可以避免某一个方法的代码写得太过冗长 如果某一个方法编写的太长,既不好阅读,也不好维护! 游戏初始化 -- init() 会调用以下方法: 游戏循环 --

  • python飞机大战pygame游戏之敌机出场实现方法详解

    本文实例讲述了python飞机大战pygame游戏之敌机出场实现方法.分享给大家供大家参考,具体如下: 目标 使用 定时器 添加敌机 设计 Enemy 类 01. 使用定时器添加敌机 运行 备课代码,观察 敌机的 出现规律: 游戏启动后,每隔 1 秒 会 出现一架敌机 每架敌机 向屏幕下方飞行,飞行 速度各不相同 每架敌机出现的 水平位置 也不尽相同 当敌机 从屏幕下方飞出,不会再飞回到屏幕中 1.1 定时器 在 pygame 中可以使用 pygame.time.set_timer() 来添加

  • python飞机大战pygame游戏背景设计详解

    本文实例讲述了python飞机大战pygame游戏背景设计.分享给大家供大家参考,具体如下: 目标 背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确定 运行 备课代码,观察 背景图像的显示效果: 游戏启动后,背景图像 会 连续不断地 向下方 移动 在 视觉上 产生英雄的飞机不断向上方飞行的 错觉 -- 在很多跑酷类游戏中常用的套路 游戏的背景 不断变化 游戏的主角 位置保持不变 1.1 实现思路分析 解决办法 创建两张背景图像精灵 第 1 张 完全和屏幕重合 第 2 张在 屏幕

  • python实现飞机大战小游戏

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 初学Python,写了一个简单的Python小游戏. 师出bilibili某前辈 pycharm自带了第三方库pygame,安装一下就好了,很方便. 虽然很多大佬已经给出了步骤,我这里还是啰嗦一下,也为了自己巩固一下. 上图: 这里再给出代码的逻辑架构 plane_main.py import pygame from plane_sprites import * class PlaneGame(object): "

  • python飞机大战 pygame游戏创建快速入门详解

    本文实例讲述了python飞机大战 pygame游戏创建.分享给大家供大家参考,具体如下: 目标 项目准备 使用 pygame 创建图形窗口 理解 图像 并实现图像绘制 理解 游戏循环 和 游戏时钟 理解 精灵 和 精灵组 项目准备 新建 飞机大战 项目 新建一个 hm_01_pygame入门.py 导入 游戏素材图片 游戏的第一印象 把一些 静止的图像 绘制到 游戏窗口 中 根据 用户的交互 或其他情况,移动 这些图像,产生动画效果 根据 图像之间 是否发生重叠,判断 敌机是否被摧毁 等其他情

  • python实现飞机大战项目

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 引用了小甲鱼的框架,往上面添加了一些新功能 1.我方飞机模块 import pygame class MyPlane(pygame.sprite.Sprite): def __init__(self,bg_size): pygame.sprite.Sprite.__init__(self) self.image1 = pygame.image.load(r'E:\learn pygame\image\me1.png

  • python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工具类plane_sprites.py import random import pygame # 屏幕大小的常量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 刷新的帧率 FRAME_PER_SEC = 60 # 创建敌机的定时器常量 CREATE_ENEM

随机推荐