Python Pygame游戏之 合金弹头

[复制链接]
作者: 沉默的砖 | 时间: 2021-2-27 10:49:23 | python开源代码|
0 62
发表于 2021-2-27 10:49:23| 显示全部楼层 |阅读模式

这是一个让坦克不断切换形态,用户通过按下键盘的上下左右键来控制坦克的方法

首先,把窗口的基本框架搭好

import pygame,sys
from pygame.locals import *

pygame.init()   #初始化模块
pygame.mixer.init()     #初始化播放器
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption("合金弹头")

clock = pygame.time.Clock() #控制帧数
back = pygame.image.load('photo/bg.jpg') #加载背景图片
backposition = back.get_rect()           #获取图片的外接矩形

pygame.mixer.music.load('game_music.ogg')   #加载背景音乐
pygame.mixer.music.set_volume(0.5)          #设置音量
pygame.mixer.music.play(-1)                 #循环播放

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    screen.blit(back,backposition)      #绘制背景图片
    pygame.display.update()             #刷新屏幕
    clock.tick(60)                      #帧数设置为60

这样一个带背景图的窗口就创建好啦

接下去让我们把坦克加入进来(解释在代码行的后面)

import pygame,sys

pygame.init()
pygame.mixer.init()

screen = pygame.display.set_mode((640,480))

pygame.display.set_caption("合金弹头")

clock = pygame.time.Clock()            #调节帧数

speed = [1,0]

i=0           #记录帧
change = 1    #记录切换
state = False #坦克形态开关
direct = 'L'  #转向开关
fire = False  #开火开关

back = pygame.image.load('photo/bg.jpg')        #加载背景图片
tank = pygame.image.load('photo/tank_01.png')   #加载坦克1的图片

pygame.mixer.music.load('game_music.ogg')       #加载音乐
pygame.mixer.music.set_volume(0.5)              #设置音量
pygame.mixer.music.play(-1)                     #循环播放


backposition = back.get_rect()          #获取外接矩形
tankposition = tank.get_rect()
tankposition.center = (80,240)          #把初始位置放地图前端位置

while True:

    #每过一段时间切换坦克的形态(用i记录)
    i = i + 1           
    if i%10 == 0:
        state = True
    else:
        state = False

    #让坦克在两种形态中不断切换
    if state:
        if change == 1:
            tank = pygame.image.load('photo/tank_02.png')   
            change = 2
        else:
            tank = pygame.image.load('photo/tank_01.png')
            change = 1

    #图片水平翻转180度(按下左右键让坦克掉头,不然坦克一直是头朝着右方)
    if direct == 'R':
        img2=pygame.transform.flip(tank,True,False)       
    else:
        img2=tank

    for event in pygame.event.get():        #获取事件
        if event.type == pygame.QUIT:       #鼠标按下窗口的关闭
            sys.exit()                      #退出
        if event.type == pygame.KEYDOWN:    #按下键盘
            if event.key == pygame.K_ESCAPE:#按下ESC键
                sys.exit()                  #退出
            if event.key == pygame.K_RIGHT: #按下右键
                speed = [2,0]               #速度
                direct = 'L'                #掉头
            if event.key == pygame.K_LEFT:  #按下左键
                speed = [-2,0]              #速度
                direct = 'R'                #掉头
            if event.key == pygame.K_UP:    #按下上键
                speed = [0,-2]              #速度
            if event.key == pygame.K_DOWN:  #按下下键
                speed = [0,2]               #速度
            if event.key == pygame.K_SPACE: #按下空格
                fire = True                 #开火
        if event.type == pygame.KEYUP:      #键盘释放
            speed = [0,0]                   #原地不动
            if event.key == pygame.K_SPACE: #空格键释放
                fire = False                #开火停止

    tankposition = tankposition.move(speed) #让坦克以速度speed前进


    screen.blit(back,backposition)  #绘制背景图片
    screen.blit(img2,tankposition)  #绘制坦克

    pygame.display.update()         #刷新屏幕
    clock.tick(60)                  #控制帧数

这是坦克的两种形态,让它以一定时间不断切换,就会产生开头那样坦克一上一下的动作喽

坦克的开火开关已经做好,有兴趣的小伙伴只要找个子弹的图片,设置代码让其在坦克的前端以一定速度前进就好啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

!jz_fbzt! 快速回复 !jz_sctz! !jz_fhlb! 按钮
快速回复 返回列表 返回顶部