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()
11-28
5738
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-14
1228
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-10
4273
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交