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

【作品介绍】
喵小游戏
【作品源代码】
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