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()

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 本课题的研究意义 如今,游戏风行的程度,是第一台电子游戏机的研制者诺兰?布什纳尔先生始料不及的。在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。然而,究竟是什么原因使游戏机如此风行呢? 在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。但是,技术进步绝不是游戏机风行的唯一因素。随着终端设备开发能力的加强,作为娱乐终端的游戏也得到了很大程度的发展。这也加速了游戏在全球风行程度,所以对于游戏的研究和设计具有很重要的意义,这也是本课题研究的意义所在。 用java语言来设计一个游戏,不同于现在的大型网络游戏和手机游戏,也不同于其他的小型的单机控制程序,它对游戏编写者对java语言特点认知、语法运用、工作模式、面向对象的理解的把握都提出了更高的要求,特别是在游戏运行当中对外部按键的处理,各子程序的调用流程,先后顺序等码的复杂程度也都是一般程序不能比的。可以这样说,能完整的编出游戏,并可以稳定运行,会让我们对游戏有一个更深刻的认识;对游戏编写的难度有一个更切身的理解;对自己的编程能力及逻辑思维能力有一个很大的提高;再一次看到了java语言的面向对象性、动态性、高性能性,相信对java语言的学习也不无帮助。 二、课题的国内外开发动态 随着人们生活质量的不断提高以及个人电脑和网络的普及,人们的业余生活质量要求也在不段提高,选择一款好玩、精美、画面、品质优良的休闲游戏已经成为一种流行的休闲方式。可以说在人们的日常生活中,除了工作,学习,玩一款自己喜欢的游戏正在成为一种时尚。所以,开发一款大家都比较喜欢的,高品质的休闲游戏,将会收到人们的普遍欢迎。让人们在工作学习之余,享受游戏的快乐,也是一款游戏真正成功的意义。Java是一种简单的,面向对象的,分布式的,健壮的,安全的,可移植的,性能很优异的语言。Java是休闲互动游戏开发的先导语言,使用java作为开发工具,是一种很理性的选择。 三、课题的基本内容 这是一款十分变态虐心的休闲游戏游戏主打像素风格,粗看画面十分简陋,,游戏中玩家需要点击屏幕操作一只小鸟在类似《超级马里奥》的绿色管道改变的数字中穿行,游戏的方式是飞翔小鸟带数字和2048游戏的结合体,要是不幸小鸟带的数字碰到不对应的数字障碍,或者不点击屏幕就直接Game Over。游戏里对小鸟的触碰判定非常严格,只要稍微节奏慢少许或者快了一点就会结束。由于游湖完全没有道具辅助,很多时候开局连第一个障碍也过不了就不得不重来。虽然只是一款小游戏,玩法也不特别,不过却抓住了玩家输不起的心理,用超高难度吸引玩家来挑战。 四、拟需要解决的主要问题 飞翔小鸟+2048小游戏开发的技术难点主要两个方面:一是界面的布局;二是游戏数据的安排。游戏很注重玩家的感受,所以界面的布局很重要,其次数据的显示在一个游戏的玩耍中也很重要,合理规划设计,开发出让玩家享受的游戏。正确理解实际运行中玩家的感受,解决游戏中模块的科学划分与结构组织,更好更快的开发设计游戏。 五、课题设计的实现方案 (1)本游戏开发语言的选 飞翔小鸟游戏以纯java语言来开发编写。Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 (2)本游戏开发工具的选择 飞翔小鸟游戏使用的开发工具是一个开放源代码的、基于Java的可扩展开发平台eclipse来开发实现。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 六、研究方法 该毕业设计采用的研究方法主要有文献法和调查法。该毕业设计具体功能的获取过程主要使用文献法和走访调查法,通过网络调查和查阅网络资料来具体确定该软件的功能需求细节;在软件开发过程中,解决技术问题使用的方法是文献法,通过查阅课本、图书馆资料和网络在线文献等,解决在软件开发过程中的技术问题,比如数据库、建模工具的使用、软件测试等。 七、选题的特色及创新点 选题的特色:本毕业设计的开题经过走访调查和文献查阅等多种方式,基本可以与现实的需求相一致,并能体现用所学的知识和计算机技术解决实际问题。 选题的创新点:该选题采用的均是计算机成熟的技术,在计算机技术方面并没有体现创新点,但是通过完成该毕业设计,可以使得自己对计算机软件开发由更深的认识,积极培养自己的创新意识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值