猫史档案馆


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

用户:一只写程序的程序猿一只写程序的程序猿查看:0 回复:0 评论:0 创建时间:2023-04-02T16:13:47


【作品展示】

center_image

 

【作品介绍】

自带操作说明

 

【作品源代码】


aaa = True
qwe = 0
print('本游戏由一只写程序的程序猿制作')
while aaa:
    abc = input('玩法介绍请按1,小屏幕普通请按2,大屏幕普通请按3,小屏幕困难请按4,大屏幕困难请按5(新手建议使用小屏幕简单),超困难模式请按6(仅支持小屏幕),超简单模式请按7(仅支持大屏幕),自定义请按8(仅支持大屏幕),自定义请按9(仅支持小屏幕),隐形战争请按10(仅支持小屏幕)')
    if abc == '1':
        print('左右键控制移动,空格攻击。')

    elif abc == '2':
        WIDTH = 480
        HEIGHT = 600
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '3':
        WIDTH = 1550  # 480
        HEIGHT = 800  # 600
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '4':
        WIDTH = 480
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)

        break
    elif abc == '5':
        WIDTH = 1550  # 480
        HEIGHT = 800  # 600
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '6':
        WIDTH = 480  # 480
        HEIGHT = 600  # 600
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '7':
        WIDTH = 1550  # 480
        HEIGHT = 800  # 600
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '8':
        WIDTH = 1550  # 480
        HEIGHT = 800  # 600
        qwe = int(input('敌人数量'))
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc == '9':
        WIDTH = 480
        HEIGHT = 600
        qwe = int(input('敌人数量'))
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0, 0, 0)
        COLOR_RED = (255, 255, 255)
        COLOR_YELLOW = (0, 0, 255)
        break
    elif abc=='10':
        COLOR_GREEN = (255, 255, 0)
        COLOR_BLACK = (0,0, 0)
        COLOR_RED = (0,0, 0)
        COLOR_YELLOW = (0, 0, 255)
        WIDTH = 480
        HEIGHT = 600
        break
    else:
        print('输入错误')
    


from pygame.locals import *
import random
import pygame
# 创建颜色

# 刷新频率
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((40, 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'or '10':
    for i in range(10):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '4':
    for i in range(100):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '5':
    for i in range(500):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '6':
    for i in range(500):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '7':
    for i in range(10):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '8':
    for i in range(qwe):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
elif abc == '9':
    for i in range(qwe):  # 8
        met = Meteorite()
        all_sprites.add(met)
        m_sprites.add(met)
else:
    for i in range(100):  # 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 页 / 共 0下一页