python 飞翔的小鸟

main
	void  #音效存放
	picture #图片存放
	need #各种计算相关的函数
	play.py #运行
	db.db #数据库
	loadding.py #对图片进行加载

在这里插入图片描述
下面为主逻辑部分

def MainGame(info):#主游戏模块
    global distance,bird_x,bird_y,mask,temp
    name , level , default , color = info
    real_bg=random.choice(bg)
    level=dict_[level]
    mask ={}
    upper_img=pipe['green'][0]# 获得图像
    lower_img = pygame.transform.rotate(upper_img , 180)#翻转图像
     #管道距离
    mask['bird'] = (
        getHitmask(bird_c[color]))
    mask['pipe'] = (
        getHitmask(pipe['green'][0]) ,
        getHitmask(pipe['green'][1]) ,
    )
    mask['box']=(
        getHitmask(box)
    )

    score=57#分数
    distance = distance_-level*20 #每个的距离
    bet=200-10*level
    count=distance #为了pipe距离一致进行的计算
    bird_x = 57  #鸟的初始坐标
    bird_y=190
    if default=='简单':
        far=easy #设置画面速度
    elif default=='一般':
        far=commont
    else:
        far=difficult
    rotate=60 #角度
    v=0 #加速度
    g_v=0.5 #设置画面加速度
    g_v_=2 #起始下落速度
    cc=bird_c[color]#鸟的颜色
    box_x=[]
    box_y=[]
    x=[]
    far_=far
    u_y=[]
    l_y=[]
    v_=0
    counter=0
    while True:
        screen.blit(real_bg , (0 , 0))
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.display.quit()
            elif event.type==KEYDOWN and (event.key==K_SPACE or event.key==K_UP):
                m['wing'].play()
                v=8
                v_=rotate
                g_v_=2
        if v>0:
            cc=pygame.transform.rotate(bird_c[color],v_/2)
            bird_y-=v
            v_-=8
            v-=1
        else:
            v_-=1
            cc=pygame.transform.rotate(bird_c[color],v_)
            g_v_+=g_v
            bird_y+=(g_v_)

        #上面是飞行机制
        if count>=distance:
            count=0
            x.append(388)
            u_yy,l_yy=get_pipe(bet)
            u_y.append(u_yy)
            l_y.append(l_yy)
            #下面定义道具出现在俩个管道之间
            b_count = random.randint(1 , 10)
            if b_count < 10 * box_pro:
                box_x.append(random.randint(440 , 440 + distance-70))
                box_y.append(random.randint(100 , 300))
        #贴上管道
        if counter>0:
            if big:
                cc=pygame.transform.scale2x(cc)  #处于大状态
            if fast:
                pass
            if small:
                cc=pygame.transform.scale(cc, (17, 12))
        else:
            far=far_
            fast=False
            big=False
        for x_,u_y_,l_y_ in zip(x,u_y,l_y):
            if x_<-100:
                del x[0],u_y[0],l_y[0]

            screen.blit(upper_img,(x_,u_y_))
            screen.blit(lower_img,(x_,l_y_))
        for i in range(len(x)):
            x[i]-=far
        #贴上道具
        box_crash =check_crash(cc,box_x,box_y,img=box)
        if box_crash[0][0]:
            for b_x,b_y in zip(box_x,box_y):
                if b_x>55 and b_x<130:
                    del box_x[box_x.index(box_crash[1])],box_y[box_y.index(box_crash[2])]
                    far=far_
                    big=False
                    small=False
                    tmp=random.randint(1,3)
                    if tmp==1:
                        big=True
                    elif tmp==2:
                        fast=True
                        far_=far
                        far-=slowed
                    else:
                        small=True
                    counter=box_time
        count+=far
        for b_x,b_y in zip(box_x,box_y):
            if b_x<-100:
                del box_x[0],box_y[0]
            screen.blit(box,(b_x,b_y))
        for i in range(len(box_x)):
            box_x[i]-=far
        score+=far
        rel_score=int((score-438+distance)/(distance))
        if rel_score<=0:
            rel_score=0;rel_score_=0
        if rel_score>rel_score_:
            m['point'].play()
            rel_score_=rel_score
        index=0
        for i in str(rel_score):
            screen.blit(score_group[i],(200+index*30,10))
            index+=1

        counter-=4
        crash_test=check_crash(cc,x,u_y,l_y)
        if crash_test[0][0] and big==False:
            m['die'].play()
            return cc,bird_x,bird_y,name , level , default,rel_score_ #返回鸟的坐标
        if crash_test[0][0] and big==True:
            del u_y[u_y.index(crash_test[1])],l_y[l_y.index(crash_test[2])],x[x.index(crash_test[3])]
            rel_score+=distance
        if cc.get_height()+bird_y>=410 or bird_y<=0:
            m['die'].play()
            return cc,bird_x,bird_y,name , level , default,rel_score_
        screen.blit(cc,(bird_x,bird_y))
        temp = -((-temp + 4) % 48)
        screen.blit(move , (temp , base))
        clock.tick(30)
        pygame.display.update()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值