猫史档案馆


【Python作品分享】太空狙击1.12正式版

用户:一只写程序的程序猿一只写程序的程序猿查看:0 回复:2 评论:0 创建时间:2023-03-16T19:44:15


【作品展示】

center_image

 

【作品介绍】

自带操作说明

 

【作品源代码】

aaa=True
while aaa:
    abc=input('玩法介绍请按1,小屏幕请按2,大屏幕请按3')
    if abc=='1':
        break
        print('左右键控制移动,空格攻击。')
    elif abc=='2':
        WIDTH =  480
        HEIGHT = 600
        break
    elif abc=='3':
        WIDTH = 1550#480
        HEIGHT = 800#600
        break
    else:
        print('输入错误')
import random
from pygame.locals import *
import pygame

# 创建颜色
COLOR_GREEN = (0, 255, 0)
COLOR_BLACK = (0, 0, 0)
COLOR_RED = (255, 0, 0)
COLOR_YELLOW = (255, 255, 0)
# 刷新频率
FPS = 60
score = 0
# 初始化
pygame.init()


def t(surf, text, size, x, y):
    font_name = pygame.font.match_font('黑体')

    font = pygame.font.Font(font_name, size)
    text_surface = font.render(text, True, (255, 255, 255))
    text_rect = text_surface.get_rect()
    text_rect.midtop = (x, y)
    surf.blit(text_surface, text_rect)
    #####定义精灵区域:#################

# 定义飞机对象


class Player(pygame.sprite.Sprite):
    def __init__(self):
        # 完成精灵初始化
        pygame.sprite.Sprite.__init__(self)
        # 初始化精灵的图像
        self.image = pygame.Surface((50, 50))
        # 初始化精灵的颜色
        self.image.fill(COLOR_GREEN)
        # 设置角色的长方形
        self.rect = self.image.get_rect()
        # 设置长方形中心的X,Y值
        self.rect.centerx = WIDTH/2
        self.rect.bottom = HEIGHT - 10

    def update(self):
        self.speedx = 0
        # 按键监测
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -8
        if keys[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx
        # 边缘检测
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

    # 添加射击功能
    def shoot(self):
        # 定义子弹
        bullet = Bullet(self.rect.centerx, self.rect.top)
        # 将子弹加入全部精灵组
        all_sprites.add(bullet)
        b_sprites.add(bullet)

# 定义陨石对象


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((20, 40))#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.喵()


####################################
# 创建屏幕
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 初始化计时器
clock = pygame.time.Clock()
# 实例化飞机对象
player = Player()

# 将玩家和陨石放置到精灵组中
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
b_sprites = pygame.sprite.Group()
m_sprites = pygame.sprite.Group()
# 定义8个陨石加入到精灵组
if abc=='2':
    for i in range(8):#8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
else:
    for i in range(50):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)

running = True
while running:
    clock.tick(FPS)
    screen.fill(COLOR_BLACK)
    # 将玩家刷新替换为精灵组刷新
    # player.update()
    all_sprites.update()
    all_sprites.draw(screen)
    # 将飞机对象绘制到屏幕上
    # screen.blit(player.image,player.rect)

    # 关闭游戏检测:
    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_ESCAPE:
                running = False
    hit = pygame.sprite.groupcollide(m_sprites, b_sprites, True, True)
    for i in hit:
        score += 10
        m = Meteorite()
        all_sprites.add(m)
        m_sprites.add(m)
    hit = pygame.sprite.spritecollide(player, m_sprites, True)
    if hit:
        running = False
    t(screen, str(score), 18, 240, 10)
    # 重绘界面,相当于刷新
    pygame.display.flip()
# 彻底退出
pygame.quit()
print('得分:',score)

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
一只写程序的程序猿一只写程序的程序猿

牛啊

点赞0


评论


一只橘子dB一只橘子dB

emotion_雷电猴_围观

点赞0


评论