猫史档案馆


【Python作品分享】太空大战【作品秀】

用户:YLS三郎神YLS三郎神查看:0 回复:0 评论:0 创建时间:2020-10-08T14:14:11


【作品展示】

center_image

 

【作品介绍】

飞机大战

空格键发射

附带x键作弊功能

ps:重复使用作弊可能会使帧率降到2秒一帧

一个非常好van♂的作品

要图片和音乐的可以联系我,整个文件夹打包(qq私聊)

创作不易,转载请标明出处 【YLS三郎神制作+本贴网址】 !!!

黄色即为飞机,红色敌机,要图片私聊

 

【作品源代码】

import pygame
from pygame.locals import *
import random

pygame.init()
FPS=45
score=0



WIDTH = 480
HEIGHT = 600
COLOR_YELLOW = (250, 250, 100)
COLOR_BLACK=(0,0,0)
COLOR_RED=(255,0,0)
COLOR=(255,255,255)
a=200
b=150


def draw_text(surf, text, size, x, y):
    font_neme = pygame.font.match_font('黑体')
    font=pygame.font.Font(font_neme,size)
    text_surface=font.render(text,True,COLOR)
    text_rect=text_surface.get_rect()
    text_rect.midtop=(x,y)
    surf.blit(text_surface,text_rect)


screen = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption('飞机大战')#标题title




class Player(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((50,50))
        self.image.fill(COLOR_YELLOW)
        self.rect=self.image.get_rect()
        self.rect.centerx=WIDTH/2
        self.rect.bottom=HEIGHT-50
    
    def update(self):
        self.speedx=0
        self.speedy=0
        '''
        Keys=pygame.key.get_pressed()
        if Keys[pygame.K_LEFT]:
            self.speedx=-8
        if Keys[pygame.K_RIGHT]:
            self.speedx=8
        if Keys[pygame.K_UP]:
            self.speedy=-8
        if Keys[pygame.K_DOWN]:
            self.speedy=8
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        '''
        x, y = pygame.mouse.get_pos()
        self.rect.x = x-24
        #self.rect.y = y-24

        if self.rect.right > WIDTH:
            self.rect.right=WIDTH
        if self.rect.left<0:
            self.rect.left=0
        if self.rect.bottom > HEIGHT:
            self.rect.bottom = HEIGHT
        if self.rect.top < 0:
            self.rect.top = 0

    def shoot(self):
        bullet=Bullet(self.rect.centerx , self.rect.top)
        all_sprites.add(bullet)
        all_bullets.add(bullet)

    def 喵bao(self):
        Saobao = 喵bao(self.rect.centerx, self.rect.top)
        all_sprites.add(Saobao)
        all_喵bao.add(Saobao)

class Meteorite(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((30,40))
        self.image.fill(COLOR_RED)
        self.rect=self.image.get_rect()

        self.rect.x=random.randrange(WIDTH-self.rect.width)
        self.rect.y = random.randrange(-100,40)

        self.speedy=random.randrange(1,8)
        self.speedx=random.randrange(-3,3)

    def update(self):
        self.rect.x+=self.speedx
        self.rect.y+=self.speedy
        if self.rect.top>HEIGHT+10 or self.rect.left<-30 or self.rect.right>WIDTH+30:
            self.rect.x = random.randrange(WIDTH-self.rect.width)
            self.rect.y = random.randrange(-100, 40)


class Bullet(pygame.sprite.Sprite):
    def __init__(self,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10,20))
        self.image.fill(COLOR_YELLOW)
        self.rect = self.image.get_rect()

        self.rect.bottom=y
        self.rect.centerx=x

        self.speedy=-10

    def update(self):
        self.rect.y+=self.speedy
        if self.rect.bottom<0:
            self.喵()

#随便取个名 fanyi.baidu.com
class 喵bao(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((70,15))
        self.image.fill(COLOR)
        self.rect = self.image.get_rect()

        self.rect.bottom = y
        self.rect.centerx = x

        self.speedy = -4

    def update(self):
        self.rect.y += self.speedy
        self.rect.x += random.randint(-5,5)
        self.rect.x += random.randint(-5,5)
        self.rect.x += random.randint(-5, 5)
        if self.rect.bottom < 0:
            self.喵()


        





player = Player()

clock=pygame.time.Clock()

all_sprites=pygame.sprite.Group()
all_sprites.add(player)

all_meteorite=pygame.sprite.Group()

all_bullets=pygame.sprite.Group()

all_喵bao = pygame.sprite.Group()

for i in range(8):
    met=Meteorite() #实例化
    all_sprites.add(met)
    all_meteorite.add(met)
    all_喵bao.add(met)

running = True
hits={}
while running:
    clock.tick(FPS)
    screen.fill(COLOR_BLACK)
    #screen.blit(player.image, player.rect)
    #飞机存在精灵组中 无需单独写
    #player.update()
    all_sprites.update()
    all_sprites.draw(screen)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                player.shoot()
            if event.key == pygame.K_x:
                player.喵bao()
            if event.key == pygame.K_ESCAPE:
                running = False
    hits=pygame.sprite.groupcollide(all_meteorite,all_bullets,True,True)#碰撞角色1,碰撞角色2,是否消灭角色1,是否消灭角色2
    for hit in hits:
        score+=1
        meteorite=Meteorite()
        all_sprites.add(meteorite)
        all_meteorite.add(meteorite)
        meteorite = Meteorite()
        all_sprites.add(meteorite)
        all_meteorite.add(meteorite)
        #你打的越多,我就给你生越多
    hits = pygame.sprite.groupcollide(
        all_meteorite, all_喵bao, True, True)  
    for hit in hits:
        score+=1
        meteorite = Meteorite()
        all_sprites.add(meteorite)
        all_meteorite.add(meteorite)
        
    hits = pygame.sprite.spritecollide(player, all_meteorite,True)
    if hits:
        score-=5

    draw_text(screen,str(score),30,WIDTH/2,10)
    pygame.display.update()


pygame.quit()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页