猫史档案馆


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

用户:Aa௰淡つ沫Aa௰淡つ沫查看:0 回复:1 评论:0 创建时间:2019-12-27T20:21:59


【作品展示】

center_image

 

【作品介绍】

喵小游戏

 

【作品源代码】

import pygame
import sys
import random

#******************初始化游戏
pygame.init()

#******************初始化游戏窗口
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("喵")
background = pygame.image.load(r"sky.jpg")
screen.blit(background, (0, 0))
fpsClock = pygame.time.Clock()

#******************调入我的英雄飞机
myflighter = pygame.image.load("myfighter.png")
myflighter = pygame.transform.scale(myflighter, (80, 60))
myrect = myflighter.get_rect()
myx, myy = 350, 500
myspeed = 0

#******************调入敌机
eflighter = pygame.image.load("fighter2.png")
eflighter = pygame.transform.scale(eflighter, (100, 60))
erect = eflighter.get_rect()
#敌机初始坐标,用随机数生成初始坐标
ex = 10 + random.randint(0, 10)
ey = 30 + random.randint(0, 200)
espeed = 5  # 敌机每次移动的像素数=5

#******************调入子弹
bul = pygame.image.load("bullet.png")
bulrect = bul.get_rect()
bulflag = False  # 子弹的初始显示状态为隐藏
bulx, buly = myx+40, myy  # 子弹的初始位置在英雄飞机机头部位
bulspeed = 0

#******************增加背景音乐和音效
#子弹和爆炸音效声音初始化
sound1 = pygame.mixer.Sound("shoot.wav")  # 音效播放写入发射事件
sound2 = pygame.mixer.Sound("explosion.wav")  # 音效播放写入爆炸动画事件
#背景音乐初始化
pygame.mixer.music.load('background.wav',)
pygame.mixer.music.play(-1)  # 背景音乐重复播放


#******************定义爆炸动画
def expl(x, y):
        sound2.play()  # 音效播放写入爆炸动画事件
        ep1 = pygame.image.load("1.png")
        ep2 = pygame.image.load("2.png")
        ep3 = pygame.image.load("3.png")
        ep4 = pygame.image.load("4.png")
        screen.blit(ep1, (x, y))
        pygame.display.update()
        pygame.time.wait(100)
        screen.blit(ep2, (x, y))
        pygame.display.update()
        pygame.time.wait(100)
        screen.blit(ep3, (x, y))
        pygame.display.update()
        pygame.time.wait(1)
        screen.blit(ep4, (x, y))
        pygame.display.update()
        pygame.time.wait(100)


#******************定义击落飞机数量
shootdown = 0  # 放在碰撞检测里使用
#调用系统字体用来显示击落数量
font1 = pygame.font.SysFont("arial", 30)

#******************加入时间限制
ticks = 15000  # 计时器倒计时循环初值
gameover = False  # 放在窗口侦测事件中,用户中断游戏点击关闭时为True结束游戏


#******************进入游戏事件循环

while (ticks - pygame.time.get_ticks()) >= 0 and not gameover:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameover = True  # 用户中断游戏点击关闭时为True结束游戏
            pygame.quit()
            sys.exit()

#******************响应用户按键
        elif event.type == pygame.KEYDOWN:  # 移动自己的飞机
            if event.key == pygame.K_LEFT:
                myspeed = -3  # 向左移动自己的飞机每次3像素
            elif event.key == pygame.K_RIGHT:
                myspeed = 3  # 向右移动自己的飞机每次3像素
        elif event.type == pygame.KEYUP:
            # 某一个方向的键盘被松开,这个方向的偏移量赋为0
            if event.key == pygame.K_LEFT:
                myspeed = 0
            elif event.key == pygame.K_RIGHT:
                myspeed = 0

#******************处理子弹发射事件
            elif event.key == pygame.K_SPACE:  # 这里写发射程序,很重要!
                bulx, buly = myx+40, myy
                bulspeed = 15  # 指定速度,即位移的像素数
                bulflag = True
                sound1.play()  # 音效播放写入发射事件

    screen.blit(background, (0, 0))  # 布置背景,如果不重绘背景,会出现拖影

#******************处理我的英雄飞机
    #当用户按键或松开时,英雄飞机左右移动
    myx = myx+myspeed
    myrect.x, myrect.y = myx, myy
    #重绘自己的英雄飞机
    screen.blit(myflighter, (myx, myy))
    #英雄飞机移除边界处理
    if myrect.right >= screen.get_width():
        myx = screen.get_width()-80
    if myrect.left <= 0:
        myx = 10

#******************处理敌机
    #更新敌机坐标,x轴不断加像素,y轴不变,表示敌机将向右水平移动
    ex = ex+espeed
    erect.x, erect.y = ex, ey
    #如果矩形区域跑出窗口,则重新定位敌机起始坐标
    if erect.right >= screen.get_width():
        ex = 10 + random.randint(0, 10)
        ey = 30 + random.randint(0, 200)
    #绘制敌机对象,显示画面
    screen.blit(eflighter, (ex, ey))

#******************处理子弹
    buly = buly-bulspeed  # 子弹的飞行轨迹和速度
    bulrect.x, bulrect.y = bulx, buly
    if bulflag:
        screen.blit(bul, (bulrect.x, bulrect.y))

#******************处理子弹和飞机的碰撞检测
    hit = pygame.Rect.colliderect(erect, bulrect)
    if hit:
        #调用爆炸画面
        expl(erect.x-50, erect.y-30)
        ##碰撞后,敌机爆炸,处理敌机消失,也就是重新生成敌机坐标
        ex = 10+random.randint(0, 10)  # 随机定义敌机的飞行坐标x
        ey = 30+random.randint(0, 200)  # 随机定义敌机的飞行坐标y

#******************处理飞机的击落记录
        shootdown = shootdown+1  # 击落敌机数加1
    hittext = font1.render(" Broken Enemy Aircraft:    " +
                           str(shootdown), True, (0, 0, 0))
    screen.blit(hittext, (10, 550))  # 显示击落数量的文本信息

#******************处理倒计时
    texttimer = (ticks - pygame.time.get_ticks())//100  # 显示计时器
    hittext = font1.render("Remaining time:"+str(texttimer), True, (0, 0, 0))
    screen.blit(hittext, (500, 550))

    pygame.display.update()
    fpsClock.tick(60)  # 每秒执行60帧

#******************处理GameOver
else:  # "Game Over"清理画面,显示击落数量等信息

      pygame.mixer.music.stop()
      #清理画面
      screen.blit(background, (0, 0))  # 重绘背景
      font1 = pygame.font.SysFont("arial", 50)
      hittext = font1.render(
          " Broken   Enemy   Aircraft:    "+str(shootdown), True, (0, 0, 0))
      screen.blit(hittext, (100, 300))  # (600,550)
      textover = font1.render("Game Over!!!", True, (0, 0, 0))
      screen.blit(textover, (250, 200))  # (600,550)
      pygame.display.update()

      while True:
        for event in pygame.event.get():
           if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
比比芭比波哩波比比芭比波哩波

大佬大佬,腻害了

点赞0


评论