王富帅 发表于 2020-3-5 10:44:06

厉害

kkkmp 发表于 2020-3-5 12:39:37

我来看看

wlxgod 发表于 2020-3-5 14:40:44

太强了

stormhume 发表于 2020-3-5 16:08:57

{:5_109:}

q62321952 发表于 2020-3-6 10:01:01

参考下

rocky凯 发表于 2020-3-6 10:18:32

可以可以{:10_254:}

dabinqi 发表于 2020-3-6 12:25:45

6666666666

足迹jwr 发表于 2020-3-6 12:28:19

wow

小小蛙 发表于 2020-3-6 18:35:11

1

Cymatics 发表于 2020-3-7 11:10:42

好的

xiaomiany 发表于 2020-3-7 16:37:25

学习

正射弧 发表于 2020-3-7 17:31:54

想看看

gujiapei 发表于 2020-3-7 20:13:47

import pygame,os,sys,math,time,random
from pygame.locals import *

#分析飞机大战:

#1.开始界面: 背景,标题,按钮 ,底部动画,背景音乐music
# 开始界面类:
#      属性: 图片 , 屏幕
#      方法: 显示
#开始界面 图片
startImgs=[
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk2.jpg"),(640,825)),   #开始界面背景图
    pygame.image.load(r"Game_Main\Img_File\title2.png"),                                           #开始界面标题
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\icon2.png"), (220, 60)),                                    #开始按钮图标
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\loading.png"),(640,640)),      #背景衬托图透明圆
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\music_stop.png"),(45,45)),   #音乐暂停按钮
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\music_start.png"),(45,45)),    #音乐开始按钮
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\mouse3.png"),(30,30)),         #鼠标指针
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\icon2.png"),(284,82)),      #开始按钮图标 变换图
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk1.png"),(640,850)),    #850-825   #游戏内背景1
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk4.png"),(640,850)),         #游戏内背景2
    # pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk6.jpeg"),(640,825)),   #载入界面图
            ]
#加载界面底部四张图 组成动画效果
statBotImg=[
    pygame.image.load(r"Game_Main\Img_File\1.png"),
pygame.image.load(r"Game_Main\Img_File\2.png"),
pygame.image.load(r"Game_Main\Img_File\3.png"),
pygame.image.load(r"Game_Main\Img_File\4.png"),
pygame.image.load(r"Game_Main\Img_File\5.png"),
pygame.image.load(r"Game_Main\Img_File\6.png"),
pygame.image.load(r"Game_Main\Img_File\7.png"),
pygame.image.load(r"Game_Main\Img_File\8.png"),
pygame.image.load(r"Game_Main\Img_File\9.png"),
pygame.image.load(r"Game_Main\Img_File\10.png"),
pygame.image.load(r"Game_Main\Img_File\11.png"),

            ]
#开始界面类
class StartPanel:
    #判断鼠标是否在开始游戏按钮上
    isIn_Start=False
    #判断鼠标是否在BGM按钮上
    isIn_BGM=False
    #判断是否暂停BGM
    isOn_BGM=True

    def __init__(self,screen,imgs=startImgs):
      self.screen=screen
      self.imgs=imgs
      # self.btmimgs=btmimgs

      #控制标题浮动
      self.sin_y=0

    #显示开始界面
    def Show(self):

      self.screen.blit(self.imgs,(0,0))

      #背景:

      #开始界面 游戏标题 如果鼠标停留 标题回到初始位置
      Place_title=self.screen.blit(self.imgs,(180+30*math.cos(self.sin_y),100+50*math.sin(self.sin_y)))
      tempC=Place_title.collidepoint(pygame.mouse.get_pos())
      self.sin_y += 0.05
      if self.sin_y>=100:   #约束变量累加过大产生的系统卡顿
            self.sin_y=0
      elif tempC:
            Place_title=tempC
      #BGM开关
      if StartPanel.isOn_BGM==True:
            Place_BGM=self.screen.blit(self.imgs, (30, 740))
            tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())
            StartPanel.isIn_BGM = tempA
      else:
            Place_BGM = self.screen.blit(self.imgs, (33, 743))
            tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())
            StartPanel.isIn_BGM = tempA
      #开始界面 开始按钮
      Place_StartBtm=self.screen.blit(self.imgs,(210,350))
      tempB=Place_StartBtm.collidepoint(pygame.mouse.get_pos())
      StartPanel.isIn_Start=tempB
      # self.isIn_Start=tempB
      if StartPanel.isIn_Start:
      # if self.isIn_Start:
            self.screen.blit(self.imgs, (185, 340))
      #开始界面 背景衬托图透明圆
      self.screen.blit(self.imgs,(0,66))
      # 鼠标指针
      temp=pygame.mouse.get_pos()
      self.screen.blit(self.imgs, pygame.mouse.get_pos())
#游戏加载界面
loadImages=[
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/bk5.png"),(640,800)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/bk6.png"),(150,160)),
]
class LoadWindows():
    #控制图片变换 时间
    load_time=False
    time_add=0


    def __init__(self, screen, pos,imgs=loadImages,btmimgs=statBotImg):
      self.screen=screen
      self.imgs=loadImages
      self.rect=self.imgs.get_rect()
      self.rect.topleft=pos
      self.image=imgs
      self.btmimgs = btmimgs

      # 控制加载界面底部图片动画
      self.btmIndex = 0
      self.btmAdd = 0# 累加变量 控制动画速度

    def Show(self):
      #判断 加载界面是否完成
      if self.load_time==False:
            self.time_add += 1
      #渲染图片
      self.screen.blit(self.imgs, self.rect)
      self.screen.blit(self.image, (10, 10))
      if self.time_add == 260:
            self.load_time = True
      self.Move()
      #渲染文字
      self.screen.blit(font_tips.render("Tips:",True,pygame.Color("black")),(25,540))
      self.screen.blit(font_tips.render("1.您可通过F1键更换键鼠操作模式。",True,pygame.Color("red")),(50,580))
      self.screen.blit(font_tips.render("2.游戏主界面左下角可关闭背景音乐。ESC键可强制返回主界面",True,pygame.Color("red")),(50,610))
      self.screen.blit(font_tips.render("3.空格键可暂停游戏,再次按下即可开启。",True,pygame.Color("red")),(50,640))
      self.screen.blit(font_tips.render("4.更多精彩内容将会陆续更新。",True,pygame.Color("red")),(50,670))

      # self.screen.blit(font.render("最终分数:%s"%heroObj.score, True, pygame.Color("green")), (self.rect.center-230,self.rect.center-75))

      #底部四个图 形成动图
      self.screen.blit(self.btmimgs,(245,700))
      self.btmAdd+=1
      if self.btmAdd==25:    #控制图片转换速度
            self.btmIndex+=1
            self.btmAdd=0
      if self.btmIndex>=11:    #限制转换图片索引 使其循环
            self.btmIndex=0

    def Move(self):
      if self.rect.x==0:
            self.rect.move(0,0)
      else:
            self.rect = self.rect.move(-32, 40)
#2.游戏界面类
#游戏界面背景
class GameBG:
    def __init__(self,image1,image2,screen1,screen2,speed1,speed2) -> None:
      #背景1背景2背景2 在上层 speed小
      self.image1=image1
      self.image2=image1.copy()
      self.rect1=self.image1.get_rect()
      self.rect2=self.image2.get_rect()
      self.rect2.topleft=(0,-850)

      self.image3 = image2
      self.image4 = image2.copy()
      self.rect3 = self.image3.get_rect()
      self.rect4 = self.image4.get_rect()
      self.rect4.topleft = (0, -850)

      self.screen1=screen1
      self.speed1 = speed1

      self.screen2 = screen2
      self.speed2 = speed2

    def Show(self):
      #背景底板1
      self.rect1 = self.rect1.move(0, self.speed1)
      self.rect2 = self.rect2.move(0, self.speed1)

      if self.rect1.y>=825:
            self.rect1.y=self.rect2.y-850
      if self.rect2.y>=825:
            self.rect2.y=self.rect1.y-850
      self.screen1.blit(self.image1, self.rect1)
      self.screen1.blit(self.image2, self.rect2)
      #背景 云2
      self.rect3 = self.rect3.move(0, self.speed2)
      self.rect4 = self.rect4.move(0, self.speed2)
      if self.rect3.y>=825:
            self.rect3.y = self.rect4.y - 850
      if self.rect4.y >= 825:
            self.rect4.y = self.rect3.y - 850
      self.screen2.blit(self.image3, self.rect3)
      self.screen2.blit(self.image4, self.rect4)
#主角图片
GameImg=[
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero3.png"), (68, 68)),
    # pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero3.png"),(68,68)),
    # pygame.image.load(r"Game_Main\Img_File\hero3.png"),       #主角1
    # pygame.image.load(r"Game_Main\Img_File\hero3.png"),       #主角2
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero4.png"),(68,68)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\heroskill.png"),(120,120)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(20,20)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(40,40)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(60,80)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(80,80)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(100,100)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(80,80)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(60,60)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(40,40)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(20,20)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(0,0)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\safetao.png"),(200,200)),
]
#主角类
class Hero:
    #人物移动
    up = False
    down = False
    left = False
    right = False
    #判断人物是否死亡
    isHeroDead=False
    #isIn判断鼠标在主角的上方
    isIn=False
    #判断切换键鼠操作
    isCMK=False
    #子弹类 约束速度 类型
    buttleAdd=0
    #子弹类 控制弹道
    buttleCurve=0
    #BUG_1模式BUG1持续时间
    On_Off_BUG1=False
    BUG1_time=0
    #主角动态屁股控制
    herf_pigu=3
    #主角动态屁股速度
    herf_pigu_Add=0
    #检测主角安全状态以及安全时间
    isSafe=False
    safeTime=0
    #死亡画面
    deadIndex=0
    deadAdd=0
    # 可释放大招次数
    R_skill = 0

    #image2 screen2 speed2 都是最上层云的属性 其余为主角
    def __init__(self,image,pos,screen,speed,hp,score,bulletspeed,image2,screen2,speed2):
      self.image = GameImg
      self.rect = self.image.get_rect()# 获得矩形对象
      self.rect.topleft = pos# 初始化位置
      self.screen = screen
      self.speed = speed
      self.hp = hp
      self.score = score
      self.bulletspeed=bulletspeed



      #控制子弹速度 以及子弹图片
      self.imgs=image
      self.heroAdd=0
      self.heroIndex=0
      #云背景
      self.image3 = image2
      self.image4 = image2.copy()
      self.rect3 = self.image3.get_rect()
      self.rect4 = self.image4.get_rect()
      self.rect4.topleft = (0, -850)
      self.speed2=speed2
      self.screen2=screen2

    def Move(self): #移动
      # 键盘移动
      if Hero.up:
            self.rect = self.rect.move(0, -self.speed)
      elif Hero.down:
            self.rect = self.rect.move(0, self.speed)
      elif Hero.left:
            self.rect = self.rect.move(-self.speed, 0)
      elif Hero.right:
            self.rect = self.rect.move(self.speed, 0)
      #鼠标移动
      if Hero.isCMK:
            self.rect.center=pygame.mouse.get_pos()
      #更换键盘操作默认
      else:
            Hero.isIn=self.rect.collidepoint(pygame.mouse.get_pos())
      #约束移动区间640 800   68   68
      if self.rect.x>=572:
            self.rect.x=572
      if self.rect.x<=0:
            self.rect.x=0
      if self.rect.y>=732:
            self.rect.y=732
      if self.rect.y<=0:
            self.rect.y=0
    #显示主角
    def Show(self):
      if self.hp>0:
            self.Move()
            self.Collide()
            self.screen.blit(self.imgs, (self.rect.bottomleft+10,self.rect.midbottom))
            #控制喷气速度
            self.herf_pigu_Add += 1
            if self.herf_pigu_Add==4:
                self.herf_pigu += 1
                self.herf_pigu_Add=0
            if self.herf_pigu==13:
                self.herf_pigu=3
            #主角是否开启BUG1模式 切换不同人物特
            if self.On_Off_BUG1 ==False:
                self.screen.blit(self.imgs, self.rect)
            else:
                self.screen.blit(self.imgs, self.rect)
                # self.screen.blit(self.imgs, (self.rect-25,self.rect-20))

            #发射子弹
            #开启BUG1模式
            if self.On_Off_BUG1 == True:
                heroObj.BUG1_time+=1

                #控制子弹速度 和 子弹的变换样式
                self.buttleAdd += 1
                self.buttleCurve+=0.1
                if self.buttleAdd>3:
                  # Bullet(BulletImages,self.screen,(self.rect.midtop-7,self.rect.midtop),speed=self.bulletspeed)
                  Bullet(BulletImages,self.screen,(self.rect.midtop-25+(30*math.sin(self.buttleCurve)),self.rect.midtop),speed=self.bulletspeed+15)
                  Bullet(BulletImages,self.screen,(self.rect.midtop+18+(-30*math.sin(self.buttleCurve)),self.rect.midtop),speed=self.bulletspeed+15)
                  Bullet1(BulletImages,self.screen,(self.rect.midtop-20,self.rect.midtop),speed=self.bulletspeed+15)
                  # Bullet1(BulletImages,self.screen,(self.rect.midtop-20-(40*math.sin(self.buttleCurve)),self.rect.midtop),speed=self.bulletspeed+15)
                  Bullet2(BulletImages,self.screen,(self.rect.midtop-20,self.rect.midtop),speed=self.bulletspeed+15)
                  # Bullet2(BulletImages,self.screen,(self.rect.midtop-20-(40*math.sin(self.buttleCurve)),self.rect.midtop),speed=self.bulletspeed+15)
                  self.buttleAdd = 0

            #啥都不开启 普通模式
            elif self.On_Off_BUG1==False:
                self.buttleAdd += 1
                if self.buttleAdd == 10:
                  Bullet(BulletImages,self.screen,(self.rect.midtop-7,self.rect.midtop),speed=self.bulletspeed+50)
                  self.buttleAdd = 0

            #约束弹道函数 优化运行
            if self.buttleCurve>10:
                self.buttleCurve=0
            #遍历子弹列表 打印
            for bullet1 in Bullettemp:
                bullet1.Show()
            #控制 BUG1的时间
            if self.BUG1_time > 100:
                self.BUG1_time = 0
                self.On_Off_BUG1 = False

            # for bullet in Bullettemp2:
            #   bullet.Show2()
            #背景 云
            # self.rect3 = self.rect3.move(0, self.speed2)
            # self.rect4 = self.rect4.move(0, self.speed2)
            # if self.rect3.y>=825:
            #   self.rect3.y = self.rect4.y - 850
            # if self.rect4.y >= 825:
            #   self.rect4.y = self.rect3.y - 850
            # self.screen2.blit(self.image3, self.rect3)
            # self.screen2.blit(self.image4, self.rect4)
      else:

            self.Dead()
            soundlist.play()

    def Dead(self): #死亡
      global isPlay

      #播放死亡动画
      self.screen.blit(deadImages,self.rect)
      soundlist.play()
      self.deadAdd+=1
      if self.deadAdd==4:
            self.deadIndex+=1
            self.deadAdd=0
            if self.deadIndex==len(deadImages):
                self.deadIndex=0
                # 判断分数更新
                if self.score > history:
                  UpdateScore(self.score)
                heroObj.isHeroDead=True
                # isPlay = False

    def Collide(self): #碰撞
      #碰撞奖励
      tempReward=pygame.sprite.spritecollideany(self,rewardlist,collided=pygame.sprite.collide_mask)
      if tempReward!=None:
            #判断! 当hero血量满时 血不增加 并且 补给血不会消失
            if tempReward.tag==3 and self.hp>=10:
                pass
            else:
                if tempReward.tag==1:
                  self.On_Off_BUG1=True
                  self.BUG1_time=0
                elif tempReward.tag==2:
                  for i in enemylist:
                        i.hp=0
                elif tempReward.tag==3 and self.hp<10:
                  self.hp+=1
                if tempReward in rewardlist:
                     rewardlist.remove(tempReward)

      #碰撞敌机
      if self.isSafe==False:
            tempEnemy=pygame.sprite.spritecollideany(self,enemylist,collided=pygame.sprite.collide_mask)
            if tempEnemy!=None:
                tempEnemy.hp=0
                self.hp -= 1
                self.isSafe=True
      else:
            self.safeTime+=1
            self.screen.blit(GameImg,(self.rect-68,self.rect-68))
            if self.safeTime==100:
                self.safeTime=0
                self.isSafe=False
#3.子弹类
#子弹图片
BulletImages=[
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet6.png"), (15, 30)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet5.png"), (15, 30)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet4.png"), (50, 30)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)),
    pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)),
]
#临时存储子弹列表
Bullettemp=[]
class Bullet:

    def __init__(self,image,screen,pos,speed):
      self.image = image
      self.screen=screen
      self.rect=self.image.get_rect()    #获得主角对象
      self.rect.center=pos      #初始化位置
      self.speed=speed

      Bullettemp.append(self)
      soundlist.play()
    def Show(self):
      self.rect=self.rect.move(0,-self.speed)   #移动
      self.screen.blit(self.image,self.rect)    #位置
    #消失子弹
      if self.rect.y < -50:
            if self in Bullettemp:
                Bullettemp.remove(self)
    #碰撞检测
      self.Collide()
    def Collide(self):
      temp=pygame.sprite.spritecollideany(self,enemylist,collided=pygame.sprite.collide_mask)
      if temp!=None:
            temp.hp-=1
            if self in Bullettemp:
                Bullettemp.remove(self)
#散弹子弹向右
class Bullet1(Bullet):

    def __init__(self, image, screen, pos, speed):
      super().__init__(image, screen, pos, speed)

    def Show(self):
      self.rect=self.rect.move(20,-self.speed)   #移动
      self.screen.blit(self.image, self.rect)# 位置
      # 消失子弹
      if self.rect.y < -50:
            if self in Bullettemp:
                Bullettemp.remove(self)
      # 碰撞检测
      self.Collide()
    def Collide(self):
      super().Collide()
#散弹子弹向左
class Bullet2(Bullet):
    def __init__(self, image, screen, pos, speed):
      super().__init__(image, screen, pos, speed)

    def Show(self):
      self.rect=self.rect.move(-20,-self.speed)   #移动
      self.screen.blit(self.image, self.rect)# 位置
      # 消失子弹
      if self.rect.y < -50:
            if self in Bullettemp:
                Bullettemp.remove(self)
      # 碰撞检测
      self.Collide()
    def Collide(self):
      super().Collide()
#4.敌机类
#敌机图片
enemyimage=[
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair1.png"),(60,60)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair2.png"),(60,60)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair3.png"),(60,60)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair4.png"), (120, 120)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair5.png"),(120,120)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair6.png"),(120,120)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair7.png"),(240,240)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair8.png"),(240,240)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair9.png"),(240,240)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair10.png"),(240,240)),
]
#存放敌机飞机
enemylist=[]
#敌机类
class Enemy:
    def __init__(self,imgs,screen,speed,pos,hp,tag):
      self.imgs=imgs
      self.image=imgs
      self.screen=screen
      self.speed=speed
      self.rect=self.image.get_rect()
      self.rect.midbottom=pos
      self.tag=tag
      self.hp=hp

      #死亡动画索引
      self.deadIndex=0
      self.deadAdd=0

      #存放新产生飞机
      enemylist.append(self)

    def Show(self):
      if self.hp>0:
            self.Move()
            self.screen.blit(self.image,self.rect)
      else:
            self.Dead()
    def Move(self):
      self.rect=self.rect.move(0,self.speed)
      if self.rect.y>=801:
            if self in enemylist:
                enemylist.remove(self)
    def Dead(self):

      #播放死亡动画
      self.screen.blit(deadImages,self.rect)

      soundlist.play()
      self.deadAdd+=1
      if self.deadAdd==2:
            self.deadIndex+=1
            self.deadAdd=0
            if self.deadIndex==len(deadImages):
                if self.tag == 1:
                  heroObj.score += 1
                elif self.tag == 2:
                  heroObj.score += 3
                elif self.tag == 3:
                  heroObj.score += 5

                enemylist.remove(self)

    def Collide(self):
      pass
#5.奖励类
rewardImage=[
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward1.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward2.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward3.png"),(80,80)),
]
rewardlist=[]   #存放奖励
class Reward:
    def __init__(self,image,screen,speed,pos,tag):
      self.image=image
      self.screen=screen
      self.speed=speed
      self.rect=self.image.get_rect()
      self.rect.midbottom=pos
      self.tag=tag

      #存放新产生奖励
      rewardlist.append(self)
    def Show(self):
      self.Move()
      self.screen.blit(self.image,self.rect)
    def Move(self):
      self.rect=self.rect.move(0,self.speed)
      if self.rect.y>=801:
            if self in rewardlist:
                rewardlist.remove(self)
#工厂 类 敌机 和奖励
class Factory:
    createAdd=0
    createrewardAdd=0
    @staticmethod
    def CreateEnemy():
      #随机产生敌机
      Factory.createAdd+=1
      if Factory.createAdd==20:
            ranNum=random.randint(1,100)
            if ranNum<=70:
                Enemy(enemyimage,screen=screen,speed=random.randint(4,6),pos=(random.randint(0,580),-60),hp=1,tag=1)
            elif ranNum<=90:
                Enemy(enemyimage,screen=screen,speed=random.randint(2,3),pos=(random.randint(0,520),-120),hp=3,tag=2)
            elif ranNum<=100:
                Enemy(enemyimage,screen=screen,speed=random.randint(1,2),pos=(random.randint(0,400),-240),hp=10,tag=3)
            Factory.createAdd=0
      soundlist.set_volume(0.05)
      # soundlist.play()
      for temp in enemylist:
            temp.Show()
    @staticmethod
    def CreateReward():
      Factory.createrewardAdd+=1
      if Factory.createrewardAdd==100:
            ranNum=random.randint(1,10)
            if ranNum==1:
                Reward(rewardImage,screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=1)
            elif ranNum==2:
                Reward(rewardImage,screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=2)
            elif ranNum == 3:
                Reward(rewardImage, screen=screen, speed=random.randint(4, 6), pos=(random.randint(0, 560), -81),tag=3)
            Factory.createrewardAdd=0
      for i in rewardlist:
            i.Show()
#用户死亡结束画面类
#死亡动画动图
deadImages=[
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_0.png"),(80,40)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_1.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_2.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_3.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_4.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_5.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_6.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_7.png"),(80,80)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_8.png"),(80,80)),
]
#死亡界面
gameImgs=[
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover1.jpg"),(640,800)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover2.png"),(611,412)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover3.png"), (150, 100)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover4.png"), (180, 75)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover4.png"), (220, 90)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover5.png"), (64, 64)),
    pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover5.png"), (80, 80)),
]
class GameOver:
    #判断鼠标在哪个位置上
    isMouse_In_end=False
    isMouse_In_again = False
    def __init__(self,imgs,pos,screen) -> None:
      self.imgs=gameImgs
      self.image=gameImgs
      self.rect=self.image.get_rect()
      self.rect.topleft=pos
      self.screen=screen

    def Show(self):
      pygame.mouse.set_visible(True)
      #显示背景板
      self.screen.blit(gameImgs, self.rect)
      #显示美女
      self.screen.blit(gameImgs,(self.rect))
      #GameOver图标
      self.screen.blit(gameImgs, (self.rect.midtop,self.rect.midtop+30))
      #继续游戏图标
      again_icon=self.screen.blit(gameImgs, (self.rect.center-80,self.rect.center+30))
      self.isMouse_In_again=again_icon.collidepoint(pygame.mouse.get_pos())
      if self.isMouse_In_again:
            self.screen.blit(gameImgs, (self.rect.center - 100, self.rect.center + 20))
      #结束游戏图标
      end_icon=self.screen.blit(gameImgs, (self.rect.topright-100, self.rect.topright+10))
      self.isMouse_In_end=end_icon.collidepoint(pygame.mouse.get_pos())
      if self.isMouse_In_end:
            self.screen.blit(gameImgs, (self.rect.topright - 109, self.rect.topright + 5))
      #结束界面文字
      self.screen.blit(font.render("最终分数:%s"%heroObj.score, True, pygame.Color("green")), (self.rect.center-230,self.rect.center-75))
      self.screen.blit(font.render("历史最高分:%s"%history, True, pygame.Color("green")), (self.rect.center+20,self.rect.center-75))

      self.Move()
    def Move(self):
      if self.rect.y<0:
            self.rect=self.rect.move(0,12)
      else:
            self.rect=self.rect.move(0,0)
#****************************************************************
#判断游戏是否开始
isPlay=False
#创建整体帧率速度
clock=pygame.time.Clock()
#字体对象
pygame.font.init()
font=pygame.font.Font("Game_Main/Img_File/fount.otf",35)
font_end=pygame.font.Font("Game_Main/Img_File/fount.otf",80)
font_tips=pygame.font.Font("Game_Main/Img_File/fount.otf",20)
#1.引入
pygame.init()
#2.生产屏幕
screen2=pygame.display.set_mode((640,800))
screen=pygame.display.set_mode((640,800))
#3.BGM
pygame.mixer.music.load(r"Game_Main/Img_File/bgm2.wav")
pygame.mixer.music.play(-1)
#4.产生开始界面对象
startObj=StartPanel(screen)
#加载界面
loadObj=LoadWindows(screen=screen,pos=(640,-800))
#5.游戏背景对象
gameObj=GameBG(image1=startImgs,image2=startImgs,screen1=screen,screen2=screen2,speed1=4,speed2=2)
#6.游戏主角对象
heroObj=Hero(image=GameImg,pos=(310,600),screen=screen,speed=25,hp=1,score=0,bulletspeed=10,image2=startImgs,screen2=screen2,speed2=2)
#7.游戏结束画面
gameoverObj=GameOver(imgs=gameImgs,pos=(0,-800),screen=screen)
#历史分数
history=0
#8.音效
soundlist=[
pygame.mixer.Sound("Game_Main/Img_File/boom.wav"),
pygame.mixer.Sound("Game_Main/Img_File/fashe.wav"),
pygame.mixer.Sound("Game_Main/Img_File/kaishiyouxi.ogg"),
pygame.mixer.Sound("Game_Main/Img_File/planhuxiao.wav"),
pygame.mixer.Sound("Game_Main/Img_File/herodead.wav"),
]
#7.事件 监测 方法
def EventAll():
    global isPlay
    for event in pygame.event.get():
      #退出事件
      if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
      #鼠标事件
      if event.type==pygame.MOUSEBUTTONDOWN:
            #开始按钮事件是否开始游戏
            if event.button==1 and StartPanel.isIn_Start==1:
                StartPanel.isIn_Start=False
                # 读取历史分数 初始化信息
                InitMethod()
                gameObj.Show()
                soundlist.play()
                isPlay = True
            if event.button==1 and gameoverObj.isMouse_In_again==1:
                gameoverObj.isMouse_In_again=False
                heroObj.isHeroDead=False
                # 读取历史分数 初始化信息
                InitMethod()
                gameObj.Show()
                soundlist.play()
                isPlay = True
                heroObj.isHeroDead = False
            if event.button==1 and gameoverObj.isMouse_In_end==1:
                exit()
                sys.exit()
            #右键开启BUG模式
            # if event.button==3:
            #   Hero.On_Off_BUG1=notHero.On_Off_BUG1
            #BGM按钮事件 更替声音按钮图标
            elif event.button==1 and StartPanel.isIn_BGM==1:
                StartPanel.isOn_BGM=not StartPanel.isOn_BGM
                if StartPanel.isOn_BGM:
                  pygame.mixer.music.unpause()
                else:
                  pygame.mixer.music.pause()
      # 键盘
      if event.type == pygame.KEYDOWN:# 按下
            #返回主菜单
            if event.key==pygame.K_ESCAPE:
                isPlay=False
            #暂停死循环处理
            if event.key==pygame.K_SPACE:
                x=True
                pygame.mixer_music.pause()
                while x:
                  for stop in pygame.event.get():
                        if stop.type==pygame.KEYDOWN:
                            if stop.key==pygame.K_SPACE:
                              pygame.mixer_music.unpause()
                              x=False
                              break

            #主角移动
            if event.key == pygame.K_w:
                Hero.up = True
            elif event.key == pygame.K_s:
                Hero.down = True
            elif event.key == pygame.K_a:
                Hero.left = True
            elif event.key == pygame.K_d:
                Hero.right = True
      if event.type == pygame.KEYUP:# 抬起
            if event.key == pygame.K_w:
                Hero.up = False
            elif event.key == pygame.K_s:
                Hero.down = False
            elif event.key == pygame.K_a:
                Hero.left = False
            elif event.key == pygame.K_d:
                Hero.right = False

      if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_F1:
                Hero.isCMK=not Hero.isCMK
#读取配置文件
def ReadScore(path="score.json"):
    if os.path.exists(path):
      with open(path,"r") as f_r:
            return int(f_r.read())
    else:
      with open(path,"w") as f_w:
            f_w.write("0")
            return 0
#更新配置文件
def UpdateScore(newScore,path="score.json"):
    with open(path,"w") as f_w:
      f_w.write(str(newScore))
#初始化信息
def InitMethod():
    global history
    history=ReadScore()
    heroObj.hp=1
    heroObj.score=0
    heroObj.rect.topleft=(310,600)
    enemylist.clear()
    Bullettemp.clear()
    rewardlist.clear()
    gameoverObj.rect.topleft=(0,-800)
def Main():
    pygame.mouse.set_visible(False)
    while True:
      EventAll()
      if isPlay and heroObj.isHeroDead==False:
            #开始游戏主体
            loadObj.Show()
            if loadObj.load_time==True:
                gameObj.Show()
                Factory.CreateEnemy()
                Factory.CreateReward()
                heroObj.Show()
                #显示信息
                screen.blit(font.render("血量:%s"%heroObj.hp,True,pygame.Color("red")),(0,0))
                screen.blit(font.render("分数:%s"%heroObj.score,True,pygame.Color("red")),(0,50))
                screen.blit(font.render("历史最高分:%s"%history,True,pygame.Color("red")),(0,100))
                screen.blit(font.render("终极技能:%s" %(heroObj.R_skill), True, pygame.Color("green")), (200, 0))
      elif isPlay==False:
            #开始界面
            startObj.Show()
      elif isPlay and heroObj.isHeroDead==True:
                gameoverObj.Show()
      #更新画面
      pygame.display.update()
      #设置帧率
      clock.tick(120)
if __name__=="__main__":
    Main()
————————————————
版权声明:本文为CSDN博主「fe1yu7」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011478668/article/details/86670058

gujiapei 发表于 2020-3-7 20:14:20

谢谢楼主,支持一波

yelucha 发表于 2020-3-7 21:09:10

看看

好先生坏印象 发表于 2020-3-7 21:28:31

新手学习

wanghao_0000 发表于 2020-3-8 15:55:21

天气查血

echozhou1983 发表于 2020-3-8 15:59:30

厉害了我的哥,已经不是新手的范畴了

蜂蜜黄油大薯片 发表于 2020-3-8 17:32:41

{:5_105:}

季宗元 发表于 2020-3-8 19:15:22

看看
页: 245 246 247 248 249 250 251 252 253 254 [255] 256 257 258 259 260 261 262 263 264
查看完整版本: 新人天气查询程序,绝对可用