谷歌小恐龙源代码

import pygame
import sys
from pygame.locals import *
import random

class DinosaurGame:
    def __init__(self):
        pygame.init()                                                        #初始化
        # 初始设置
        self.FPS = 30
        self.fpsclock=pygame.time.Clock()
        self.screen=pygame.display.set_mode((1000,800))
        pygame.display.set_caption("Google Dinosar Game")
        self.background=pygame.image.load('background.png')
        # 字体设置
        self.mfont = pygame.font.Font(None, 60)
        # 恐龙设置
        self.dinosar=pygame.image.load('milkdinosar.png').convert_alpha()
        self.speed=3                     #障碍物移动速度
        self.dinosar_x=100
        self.dinosar_y=555
        self.jumpValue = 4                #跳跃增变量
        # 障碍物设置
        self.obstacle=pygame.image.load('pinkobstacle.png').convert_alpha()
        self.obstaclep_x=800
        self.obstaclee_x=1024
        self.obstaclez_x=1527
        self.pink=pygame.image.load('pinkobstacle.png').convert_alpha()
        self.zombie=pygame.image.load('zombieobstacle.png').convert_alpha()
        self.evil=pygame.image.load('evilobstacle.png').convert_alpha()
        # 分数设置
        self.recording=0
        # 窗口出现
        self.run = True

    def draw_screen(self):          #背景颜色
        (self.screen).fill((0,0,0))

#第一个界面
    def title(self):
        mfont=pygame.font.Font(None,80)
        welcome=mfont.render(" W E L C O M E ",
                                  False,(85,149,91))
        self.screen.blit(welcome,(290,150))
        to=mfont.render("t o",False,(100,149,91))
        self.screen.blit(to,(460,250))
        di=mfont.render("D I N O S A U R  W O R L D !",False,(85,149,91))
        self.screen.blit(di,(150,350))
        #背景
        no=pygame.image.load("origin.jpg")
        transformed1=pygame.transform.scale(no,(81,80))
        self.screen.blit(transformed1,(545,240))
        sa=pygame.image.load("picture/choice3.jpg")
        transformed2=pygame.transform.scale(sa,(108,80))
        self.screen.blit(transformed2,(20,340))
        ur=pygame.image.load("picture/choice2.jpg")
        transformed3=pygame.transform.scale(ur,(149,80))
        self.screen.blit(transformed3,(750,650))

    def Start(self):       # 开始文字
        start = self.mfont.render(" S T A R T ",
                                  True,(0, 0, 0), (128, 128, 128))
        #self.q=self.start.get_rect() print(self.q)
        # role=mfont.render("ROLE CHOICE",True,(0,0,0),(128,128,128))
        self.screen.blit(start, (400, 500))
        self.a=Rect(400,500,203,41)

    def Exit(self):      #退出文字
        dropout = self.mfont.render("  E X I T  ", True,
                               (0, 0, 0), (128, 128, 128))
        self.screen.blit(dropout, (420, 600))
        #self.q=dropout.get_rect()  print(self.q)
        self.b=Rect(420,600,167,41)

    def click(self):        #开始界面点击
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type==pygame.MOUSEBUTTONDOWN:
                if (self.a).collidepoint(pygame.mouse.get_pos()):
                    return True
                elif (self.b).collidepoint(pygame.mouse.get_pos()):
                    #print(False)
                    pygame.quit()
                    sys.exit()
                    return False

#第二个界面
    def gbg(self):      #正式游戏背景
        self.transformed=pygame.transform.scale(self.background,(1000,305))
        self.screen.blit(self.transformed,(0,300))
        pygame.draw.polygon(self.screen,(22,45,6,0.5),
                            ((0,605),(1000,605),(1000,800),(0,800)))

    def Dinosar(self):      #恐龙
        #r=(self.dinosar).get_rect() print(r)
        transformed=pygame.transform.scale(self.dinosar,(59,50))
        self.screen.blit(transformed, (self.dinosar_x,self.dinosar_y))

    def Jump_init(self):       #奶龙跳跃
        self.jumpState = False  # 跳跃的状态
        self.jumpHeight = 300  # 跳跃的高度
        self.lowest_y = 555  # 最低坐标
        self.dinosar_y = self.lowest_y;  # 绘制Y坐标

    def Jump_judge(self):
        self.jumpState = True

    def Jump(self):
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type==pygame.KEYDOWN:
                if event.key==pygame.K_SPACE:
                    self.Jump_judge()
            # 变速
                if event.key==pygame.K_RETURN:
                    self.speed=6
                    self.jumpValue=10
            elif event.type==pygame.KEYUP:
                if event.key==pygame.K_RETURN:
                    self.speed=3
                    self.jumpValue=4
        if self.jumpState:  # 当起跳的时候
            if self.dinosar_y >= self.lowest_y:  # 如果站在地上
                self.jumpValue = 0-self.jumpValue  # 以5个像素值向上移动
            if self.dinosar_y <= self.lowest_y - self.jumpHeight:  # 到达顶部回落
                self.jumpValue = 0-self.jumpValue  # 以5个像素值向下移动
            self.dinosar_y += self.jumpValue  # 通过循环改变Y坐标
            if self.dinosar_y >= self.lowest_y:  # 如果回到地面
                self.jumpState = False  # 关闭跳跃状态
        self.screen.fill((0, 0, 0))
        self.draw_screen()
        self.gbg()
        self.draw_score()
        self.SCORE()
        self.Dinosar()
        self.Obstacle()
        pygame.display.update()
        # 计分
        if self.SCORE() == True:
            self.recording = self.recording + 1
            print(self.recording)
        elif self.SCORE() == False:
            return False

    def Obstacle(self):           #障碍物
        pink=pygame.transform.scale(self.pink,(48,40))
        evil=pygame.transform.scale(self.evil,(48,40))
        zombie=pygame.transform.scale(self.zombie,(48,40))
        self.obstaclep=pink
        self.obstaclee=evil
        self.obstaclez=zombie
        self.screen.blit(self.obstaclep, (self.obstaclep_x, 565))
        self.screen.blit(self.obstaclee, (self.obstaclee_x, 565))
        self.screen.blit(self.obstaclez, (self.obstaclez_x, 565))

    def move(self):            #障碍物移动
        while True:
            self.screen.fill((0,0,0))
            self.draw_screen()
            self.gbg()
            self.draw_score()
            self.Dinosar()
            self.Obstacle()
            pygame.display.update()
            # 障碍物移动
            self.obstaclep_x=self.obstaclep_x-self.speed
            self.obstaclee_x=self.obstaclee_x-self.speed
            self.obstaclez_x=self.obstaclez_x-self.speed
            # 恐龙应到达的位置
            self.p1=Rect(self.obstaclep_x,235,48,40)
            self.e1=Rect(self.obstaclee_x,235,48,40)
            self.z1=Rect(self.obstaclez_x,235,48,40)
            # 恐龙不能到达的位置
            self.p2=Rect(self.obstaclep_x,565,48,40)
            self.e2=Rect(self.obstaclee_x,565,48,40)
            self.z2=Rect(self.obstaclez_x,565,48,40)
            # 障碍物循环
            if self.obstaclep_x<-48:
               self.obstaclep_x=1000
            if  self.obstaclee_x<-48:
                self.obstaclee_x=1000
            if self.obstaclez_x < -48:
                self.obstaclez_x=1000
            self.Jump()
            if self.Jump()==False:
                break

    def draw_score(self):
        score=self.mfont.render("SCORE:",True,(250,250,250))
        self.screen.blit(score,(0,0))
        recorded="%d"%self.recording
        real_score=self.mfont.render(recorded,True,(250,250,250))
        self.screen.blit(real_score,(200,0))

    def SCORE(self):
        self.di=Rect(self.dinosar_x,self.dinosar_y,59,50)
        if (((self.p1).colliderect((self.di)) or (self.e1).colliderect(self.di)
                or (self.z1).colliderect(self.di))
                and self.dinosar_y==255):
            return True
        elif ((self.p2).colliderect(self.di) or (self.e2).colliderect(self.di)
                or (self.z2).colliderect(self.di)):
            return False

#第三个界面
    def draw_gameover(self):
        # 半透明背景
        surface=pygame.Surface((1000,800),pygame.SRCALPHA)
        pygame.draw.polygon(surface,(78,81,87,200),
                            ((150,200),(150,650),(850,650),(850,200)))
        self.screen.blit(surface,(0,0))
        # gameover
        mfont=pygame.font.Font(None,90)
        gameover=mfont.render("G A M E   O V E R !",False,(95,173,101))
        self.screen.blit(gameover,(220,270))
        # 得分
        mfont_=pygame.font.Font(None,75)
        LastScore="S C O R E:%d"%self.recording
        last=mfont_.render(LastScore,True,(110,173,101))
        self.screen.blit(last,(365,380))
        # 按键
        color=(61,50,40)
        pygame.draw.polygon(self.screen,color,
                            ((200,540),(200,598),(410,598),(410,540)))
        pygame.draw.polygon(self.screen,color,
                            ((580,540),(580,598),(790,598),(790,540)))
        mfont1=pygame.font.Font(None,60)
        restart=mfont1.render("RESTART",True,(180,92,28))
        Exit=mfont1.render("EXIT",True,(180,92,28))
        self.screen.blit(restart,(210,550))
        self.screen.blit(Exit,(640,550))
        pygame.display.flip()

    def OverClick(self):
        m=Rect(200,540,210,58)
        n=Rect(580,540,210,58)
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type==pygame.MOUSEBUTTONDOWN:
                if m.collidepoint(pygame.mouse.get_pos()):
                    print(True)
                    self.obstaclep_x = 800
                    self.obstaclee_x = 1024
                    self.obstaclez_x = 1527
                    self.recording=0
                    self.second()
                    return True
                elif n.collidepoint(pygame.mouse.get_pos()):
                    print(False)
                    pygame.quit()
                    sys.exit()
                    return False

#所有界面
    def first(self):     #开始界面
        while self.run:
            self.Listen()
            self.draw_screen()
            self.title()
            self.Start()
            self.Exit()
            pygame.display.update()
            if self.click() ==True:
                break

    def second(self):   #游戏界面
        while self.run:
            self.Listen()
            self.draw_screen()
            self.gbg()
            self.draw_score()
            self.Dinosar()
            self.Jump_init()
            self.move()
            if self.Jump()==False:
                break
            pygame.display.update()
            self.fpsclock.tick(self.FPS)

    def third(self):    #结束界面
        while self.run:
            self.OverClick()
            self.Listen()
            self.draw_screen()
            self.gbg()
            self.draw_score()
            self.draw_gameover()
            pygame.display.update()

    def Listen(self):   #监听
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                sys.exit()

    def main(self):
        self.first()
        self.second()
        self.third()
        pygame.display.update()
        pygame.quit()

if __name__=="__main__":
    dinosaur=DinosaurGame()
    dinosaur.main()

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值