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

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。