猫史档案馆


【Python作品分享】pygame_disonson_run【作品秀】

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


【作品展示】

center_image

 

【作品介绍】

......

 

【作品源代码】

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


回复

上一页1 页 / 共 1下一页
11011100101000111101110010100011

wc

点赞0


评论