用户:
一川一查看:0 回复:1 评论:0 创建时间:2022-07-31T18:15:30
【作品展示】

【作品介绍】
......
【作品源代码】
import pygame
import sys
import os
import random as r
import time
import threading
#植物类
class plant (pygame.sprite.Sprite):
def __init__(self,speed=40,weith=840, height=500):
pygame.sprite.Sprite.__init__(self)
self.speed=speed
self.height=height
self.weith=weith
self.image='all_image.png'
self.random_pp()
def random_pp(self):
idx=r.randint(0,1)
temp=pygame.image.load(self.image).convert_alpha()
if idx==0:
self.plant=temp.subsurface(69*7,0,167-(r.randint(0,4)*34),101) #小植物
else:
self.plant=temp.subsurface(101*7,0,246-(r.randint(0,4)*50),101) #大植物
self.rect=self.plant.get_rect()
self.rect.left=self.weith+60
self.rect.top=int(self.height/2)
def move (self):
self.rect.left=self.rect.left-self.speed
def draw (self,screen):
screen.blit(self.plant,self.rect)
#飞鸟类
class fly (pygame.sprite.Sprite):
def __init__(self,speed=40,weith=840,height=380):
pygame.sprite.Sprite.__init__(self)
self.weith=weith
self.height=height
self.speed=speed
self.image='all_image.png'
self.idx=0
self.random_ppp()
def random_ppp(self):
temp=pygame.image.load(self.image).convert_alpha()
self.fly=temp.subsurface(85*3,0,101,101)
self.rect=self.fly.get_rect()
self.rect.left=self.weith-60
self.rect.top=int(self.height/2)
def move(self):
temp=pygame.image.load(self.image)
if self.idx%2 == 0:
self.fly=temp.subsurface(85*3,0,101,101)
else:
self.fly=temp.subsurface(87*4,0,97,101)
self.rect.left = self.rect.left-self.speed
self.idx+=1
def draw(self, screen):
screen.blit(self.fly,self.rect)
#主角恐龙类
class drongon (pygame.sprite.Sprite):
def __init__(self,weith=100,height=470):
pygame.sprite.Sprite.__init__(self)
self.weith=weith
self.height=height
self.image='all_image.png'
temp=pygame.image.load(self.image).convert_alpha()
self.drongon=temp.subsurface(1675,0,95,101)
self.rect=self.drongon.get_rect()
self.rect.left = self.weith-60
self.rect.top = int(self.height/2)
self.idx=0
def draw(self, screen):
temp=pygame.image.load(self.image).convert_alpha()
if over:
if self.idx<3:
self.idx+=1
else:
self.idx=0
if not player_down and not player_jumping:
self.drongon=temp.subsurface(1675+88*self.idx,0,95,101)
elif not player_jumping:
self.drongon=temp.subsurface(1775+110*(self.idx%2+4),0,110,101)
else:
self.drongon=temp.subsurface(1675, 0, 95, 101)
else:
self.drongon=temp.subsurface(2115, 0, 95, 101)
screen.blit(self.drongon,self.rect)
time.sleep(0.05)
class background(pygame.sprite.Sprite):
def __init__ (self,weith=0,height=590):
pygame.sprite.Sprite.__init__(self)
self.weith=weith
self.height=height
self.speed=40
self.image='all_image.png'
temp=pygame.image.load(self.image).convert_alpha()
self.bg=temp.subsurface(0,100,2446,30)
self.rect=self.bg.get_rect()
self.rect.top=int(self.height/2)
self.rect.left=self.weith+60
def move(self):
self.rect.left-=self.speed
def draw(self,screen):
screen.blit(self.bg,self.rect)
class cloud(pygame.sprite.Sprite):
def __init__(self, weith=840, height=290):
pygame.sprite.Sprite.__init__(self)
self.weith = weith
self.height = height
self.speed = 20
self.image = 'all_image.png'
temp = pygame.image.load(self.image).convert_alpha()
self.cloud = temp.subsurface(163, 0, 101, 101)
self.rect = self.cloud.get_rect()
self.rect.top = int(self.height/2)
self.rect.left = self.weith+60
def move(self):
self.rect.left -= self.speed
def draw(self, screen):
screen.blit(self.cloud, self.rect)
class gameover(pygame.sprite.Sprite):
def __init__(self, weith=150, height=220):
pygame.sprite.Sprite.__init__(self)
self.weith = weith
self.height = height
self.image = 'all_image.png'
temp = pygame.image.load(self.image).convert_alpha()
self.gameover= temp.subsurface(1290, 30, 385, 40)
self.rect = self.gameover.get_rect()
self.rect.top = int(self.height/2)
self.rect.left = self.weith+60
def draw(self, screen):
screen.blit(self.gameover, self.rect)
class overlogo(pygame.sprite.Sprite):
def __init__(self, weith=300, height=300):
pygame.sprite.Sprite.__init__(self)
self.weith = weith
self.height = height
self.image = 'all_image.png'
temp = pygame.image.load(self.image).convert_alpha()
self.logo= temp.subsurface(0, 128, 75, 60)
self.rect = self.logo.get_rect()
self.rect.top = int(self.height/2)
self.rect.left = self.weith+60
self.idx=0
def draw(self, screen):
temp = pygame.image.load(self.image).convert_alpha()
self.logo= temp.subsurface(0+(580/8)*self.idx, 128, 70, 60)
if self.idx<=7:
self.idx+=1
screen.blit(self.logo, self.rect)
#画恐龙
def draw_drongon(self,screen):
global player_jumping
global player_down
for event in pygame.event.get():
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_DOWN and not player_jumping:
player_down = True
elif event.key==pygame.K_SPACE or event.key==pygame.K_UP:
if self.rect.top>=235 and not player_down:
player_jumping = True
elif event.type==pygame.KEYUP:
if event.key==pygame.K_DOWN:
player_down=False
if player_jumping:
self.rect.top-=40
if self.rect.top<=-20:
player_jumping=False
else:
if not self.rect.top>=235:
self.rect.top+=40
self.draw(screen)
#程序主入口
def mygame():
f=open('best_score.txt','r')
global best
best=int(f.read())
f.close()
pygame.init()
global player_jumping
global player_down
global over
player_jumping=False
player_down=False
over=True
weith,height=800,500
colors=(255,255,255)
score=0
logo = pygame.image.load('logo.png')
pygame.display.set_caption('THE Dinosaurs Run Fast')
pygame.display.set_icon(logo)
os.environ['SDL_VIDEO_CENTERED'] = '1' #开始时居中
sreecn = pygame.display.set_mode([weith,height])
g1=drongon()
b1=background()
clock=pygame.time.Clock()
fidx=0
while over:
for event in pygame.event.get():
if event.type==pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.display.quit()
sys.exit()
p1=plant()
f1=fly(40,840,r.randint(380,500))
if fidx%2==0:
c1=cloud()
p2=plant()
else:
f2=fly()
idx=r.randint(0,1)
for i in range(40):
sreecn.fill(colors)
if idx==0:
f1.move()
f1.draw(sreecn)
if g1.rect.colliderect(f1.rect) and (not player_down or f1.height>=480):
over=False
break
else:
p1.move()
p1.draw(sreecn)
if g1.rect.colliderect(p1.rect):
over=False
break
if fidx%2==0:
if i>=15:
p2.move()
p2.draw(sreecn)
if g1.rect.colliderect(p2.rect):
over=False
break
else:
if i>=15:
f2.move()
f2.draw(sreecn)
if g1.rect.colliderect(f2.rect) and (not player_down or f2.height>=480):
over=False
break
b1.move()
b1.draw(sreecn)
c1.move()
c1.draw(sreecn)
draw_drongon(g1, sreecn)
font1 = pygame.font.Font(None, 30)
surface1 = font1.render("HI:"+str(best)+" Points:"+str(score), True, (60, 60, 60))
font1 = pygame.font.Font(None, 20)
surface2 = font1.render("THE Dinosaurs Run Fast",True,(60,60,60))
surface3 = font1.render("VER:1.0 DESIGN:zzc",True,(60,60,60))
sreecn.blit(surface3,(550,420))
sreecn.blit(surface2,(550,400))
sreecn.blit(surface1, (600, 20))
pygame.display.update()
clock.tick(30)
score+=1
if score%10==0:
b1=background()
fidx+=1
o1=gameover()
l1=overlogo()
if best
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn