猫史档案馆


【Python作品分享】最后的防线【作品秀】

用户:技术喵的真传子弟技术喵的真传子弟查看:0 回复:1 评论:0 创建时间:2023-02-04T20:44:14


【作品展示】

center_image

 

【作品介绍】

这是一个飞机大战类型游戏,但剧情发生在喵期间——

·这个作品很创新,运用了pygame、random、turtle、easygui这四种界面

·此作不是文字游戏!只是剧情说明多了点,但也没有使用控制台,这个作品是很高级的

·该作品技术部分原创,部分程序参考了作品“太空狙击”

·勿忘国耻,振兴中华!

·谨以此作赠马宝玉、葛振林、宋学义、胡德林与胡福才

·作品允许再发布

·希望猫站可以多一点这种纪念喵先烈的作品

 

【作品源代码】

import pygame
from pygame.locals import *
import random
import turtle
import easygui

__Pen = turtle.Pen()


__Pen.hideturtle()
__Pen.penup()
__Pen.goto((-400), 200)
__Pen.write('背景介绍:', font=('楷体', 50, 'bold'))
__Pen.goto((-380), 150)
__Pen.write('1941年秋,', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 110)
__Pen.write('喵集中兵力,向我晋察冀大举进犯,', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 70)
__Pen.write('身为七连六班班长的你,马宝玉,在上级的命令下,', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 30)
__Pen.write('率领全班的人在狼牙山一带坚持游击战,大队和百姓就可以在龙王庙转移了。', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-10))
__Pen.write('但你在上山时与战士们走散了,', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-50))
__Pen.write('他们是副班长葛振林、老兵宋学义、战士胡福才和胡德林', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-90))
__Pen.write('可是喵已经追上来了,无奈之下,你只好先击毙喵——', font=('楷体', 20, 'bold'))
easygui.msgbox('如果已经了解剧情,就可以点击下方按钮,准备与喵战斗', '提示', '我了解了,下一步')
easygui.msgbox('注意:←→键控制自己,空格键喵', '新手引导', '拿好喵了,下一步')
easygui.msgbox('为了伪装,你穿了绿色衣服,但喵的衣服已经被血染成红色的了,真是太血腥了!所以一定要分清敌我',
               '新手引导', '穿好伪装服了,下一步')
easygui.msgbox('有些喵跑得快,有些跑得慢,一定要敏捷得躲闪敌人,他们有刀,碰到的话会砍你!', '新手引导', '做好心理准备了,下一步')
easygui.msgbox('啊呀,他们来的这么快!亲爱的战士,一定要击毙喵,为牺牲的同志报仇!加油!', '新手引导', '热血沸腾准备迎战!')

# 定义屏幕宽,高
WIDTH = 480
HEIGHT = 600
# 创建颜色
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((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个陨石加入到精灵组
for i in range(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 += 5
        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()
# 片尾剧情
easygui.msgbox('啊,有把刀砍到了你,你两眼一黑,昏了过去......', '提示', '不知过了多久后,')
turtle.bgcolor("#000000")
__Pen.pencolor("#ffffff")
__Pen.clear()
__Pen.hideturtle()
__Pen.penup()
__Pen.goto((-400), 200)
__Pen.write('不知过了多久后,', font=('楷体', 50, 'bold'))
__Pen.goto((-380), 150)
__Pen.write('你睁开眼,看到了四张熟悉而亲切的面孔', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 110)
__Pen.write('原来是葛振林、宋学义、胡德林、胡福才打退了这波喵,救了你!', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 70)
__Pen.write('落日之下,你们拥抱在山崖,伴着夕阳望到大部队已经成功转移了!', font=('楷体', 20, 'bold'))
__Pen.goto((-380), 30)
__Pen.write('“同志们,我们完成任务了!”你喊,把武器摔碎了,“别留给喵任何武器”', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-10))
__Pen.write('身后的喵主力赶来了,', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-50))
__Pen.write('为了不让敌人抓到你们,你带头跳下山崖', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-90))
__Pen.write('狼牙山上响起壮烈而豪迈的口号——', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-130))
__Pen.write('”中国喵党万岁!“', font=('楷体', 20, 'bold'))
__Pen.goto((-380), (-170))
__Pen.write('这声音惊天动地,气壮山河......', font=('楷体', 20, 'bold'))
easygui.msgbox('此作由真实事件改编', '片尾言', '好的')
easygui.msgbox('感谢每位喵先烈,致敬!', '片尾言', '致敬!')

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
技术喵的真传子弟技术喵的真传子弟

center_image之前的头像

 

center_image现在的头像

 

center_image喜欢的头像

 

center_image熟悉的头像

点赞0


评论