鱼C论坛

 找回密码
 立即注册
楼主: python_小白

[作品展示] 新人天气查询程序,绝对可用

    [复制链接]
发表于 2020-3-5 10:44:06 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-5 12:39:37 | 显示全部楼层
我来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 14:40:44 | 显示全部楼层
太强了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 16:08:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 10:01:01 | 显示全部楼层
参考下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 10:18:32 From FishC Mobile | 显示全部楼层
可以可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 12:25:45 | 显示全部楼层
6666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 12:28:19 | 显示全部楼层
wow
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 18:35:11 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 11:10:42 | 显示全部楼层
好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 16:37:25 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 17:31:54 | 显示全部楼层
想看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,0))

        #背景:

        #开始界面 游戏标题 如果鼠标停留 标题回到初始位置
        Place_title=self.screen.blit(self.imgs[1],(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[4], (30, 740))
            tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())
            StartPanel.isIn_BGM = tempA
        else:
            Place_BGM = self.screen.blit(self.imgs[5], (33, 743))
            tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())
            StartPanel.isIn_BGM = tempA
        #开始界面 开始按钮
        Place_StartBtm=self.screen.blit(self.imgs[2],(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[7], (185, 340))
        #开始界面 背景衬托图  透明圆
        self.screen.blit(self.imgs[3],(0,66))
        # 鼠标指针
        temp=pygame.mouse.get_pos()
        self.screen.blit(self.imgs[6], 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[0]
        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[1], (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[0]-230,self.rect.center[1]-75))

        #底部四个图 形成动图
        self.screen.blit(self.btmimgs[self.btmIndex],(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[0]
        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.herf_pigu], (self.rect.bottomleft[0]+10,self.rect.midbottom[1]))
            #控制喷气速度
            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[0], self.rect)
            else:
                self.screen.blit(self.imgs[1], self.rect)
                # self.screen.blit(self.imgs[2], (self.rect[0]-25,self.rect[1]-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[2],self.screen,(self.rect.midtop[0]-7,self.rect.midtop[1]),speed=self.bulletspeed)
                    Bullet(BulletImages[1],self.screen,(self.rect.midtop[0]-25+(30*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)
                    Bullet(BulletImages[0],self.screen,(self.rect.midtop[0]+18+(-30*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)
                    Bullet1(BulletImages[3],self.screen,(self.rect.midtop[0]-20,self.rect.midtop[1]),speed=self.bulletspeed+15)
                    # Bullet1(BulletImages[3],self.screen,(self.rect.midtop[0]-20-(40*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)
                    Bullet2(BulletImages[3],self.screen,(self.rect.midtop[0]-20,self.rect.midtop[1]),speed=self.bulletspeed+15)
                    # Bullet2(BulletImages[3],self.screen,(self.rect.midtop[0]-20-(40*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)
                    self.buttleAdd = 0

            #啥都不开启 普通模式
            elif self.On_Off_BUG1==False:
                self.buttleAdd += 1
                if self.buttleAdd == 10:
                    Bullet(BulletImages[2],self.screen,(self.rect.midtop[0]-7,self.rect.midtop[1]),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[4].play()

    def Dead(self): #死亡
        global isPlay

        #播放死亡动画
        self.screen.blit(deadImages[self.deadIndex],self.rect)
        soundlist[0].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[13],(self.rect[0]-68,self.rect[1]-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[1].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.deadIndex],self.rect)

        soundlist[0].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[random.randint(0,2)],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,580),-60),hp=1,tag=1)
            elif ranNum<=90:
                Enemy(enemyimage[random.randint(3,5)],screen=screen,speed=random.randint(2,3),pos=(random.randint(0,520),-120),hp=3,tag=2)
            elif ranNum<=100:
                Enemy(enemyimage[random.randint(6,9)],screen=screen,speed=random.randint(1,2),pos=(random.randint(0,400),-240),hp=10,tag=3)
            Factory.createAdd=0
        soundlist[3].set_volume(0.05)
        # soundlist[3].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[0],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=1)
            elif ranNum==2:
                Reward(rewardImage[1],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=2)
            elif ranNum == 3:
                Reward(rewardImage[2], 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[0]
        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[0], self.rect)
        #显示美女
        self.screen.blit(gameImgs[1],(self.rect))
        #GameOver图标
        self.screen.blit(gameImgs[2], (self.rect.midtop[0],self.rect.midtop[1]+30))
        #继续游戏图标
        again_icon=self.screen.blit(gameImgs[3], (self.rect.center[0]-80,self.rect.center[1]+30))
        self.isMouse_In_again=again_icon.collidepoint(pygame.mouse.get_pos())
        if self.isMouse_In_again:
            self.screen.blit(gameImgs[4], (self.rect.center[0] - 100, self.rect.center[1] + 20))
        #结束游戏图标
        end_icon=self.screen.blit(gameImgs[5], (self.rect.topright[0]-100, self.rect.topright[1]+10))
        self.isMouse_In_end=end_icon.collidepoint(pygame.mouse.get_pos())
        if self.isMouse_In_end:
            self.screen.blit(gameImgs[6], (self.rect.topright[0] - 109, self.rect.topright[1] + 5))
        #结束界面文字
        self.screen.blit(font.render("最终分数:%s"%heroObj.score, True, pygame.Color("green")), (self.rect.center[0]-230,self.rect.center[1]-75))
        self.screen.blit(font.render("历史最高分:%s"%history, True, pygame.Color("green")), (self.rect.center[0]+20,self.rect.center[1]-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[8],image2=startImgs[9],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[9],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[2].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[2].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=not  Hero.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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 20:14:20 | 显示全部楼层
谢谢楼主,支持一波
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 21:09:10 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 21:28:31 | 显示全部楼层
新手学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 15:55:21 | 显示全部楼层
天气查血
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 15:59:30 | 显示全部楼层
厉害了我的哥,已经不是新手的范畴了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 17:32:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-8 19:15:22 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-25 21:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表