python/pygame坦克游戏边学边写笔记(三)

双方坦克都绘制显示了,现在开始移动敌方坦克。 

一、敌方坦克移动

四种坦克,移速和伤害各自不同,防御值也不同,整理好这些数据,统一加到type_list列表,再通过随机产生的order进行各自赋值。

设置了一个累加变量,让坦克移动起来有点点卡顿的感觉。

设定移动开关,触发时能够让坦克改变方向并重新根据方向载入图片。暂时先这样实现这些功能,后面再修改。

# 导入库
import random
import os.path

import pygame


# 敌方坦克类
class EnemyTank(pygame.sprite.Sprite):
    # 根据坦克种类及各种类的状态数量,建立一个列表来遍历。如第1种坦克有3种状态。。。。第4种坦克有10种状态。
    type_list = [(1, 3, 8, 0), (2, 1, 10, 3), (3, 2, 12, 2), (4, 10, 11, 1)]
    # 随机选择一种坦克
    order = type_list[random.randint(0, len(type_list) - 1)]
    enemy_tank_dict = {
        'up': [],
        'down': [],
        'left': [],
        'right': []
    }
    for i in range(order[1]):
        enemy_tank_dict['up'].append(
            pygame.image.load(os.path.join('image', 'enemy', 'enemy_tank' + str(order[0]), 'up' + str(i + 1) + '.png')))
        enemy_tank_dict['down'].append(
            pygame.image.load(os.path.join('image', 'enemy', 'enemy_tank' + str(order[0]), 'down' + str(i + 1) + '.png')))
        enemy_tank_dict['left'].append(
            pygame.image.load(os.path.join('image', 'enemy', 'enemy_tank' + str(order[0]), 'left' + str(i + 1) + '.png')))
        enemy_tank_dict['right'].append(
            pygame.image.load(os.path.join('image', 'enemy', 'enemy_tank' + str(order[0]), 'right' + str(i + 1) + '.png')))
    print(order[0], enemy_tank_dict)

    # 初始化函数,定义方向、速度等
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.direction = 'up'
        self.amour = self.order[1]
        self.image = self.enemy_tank_dict[self.direction][self.amour - 1]
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(0, 1000 - self.rect.width)
        self.rect.y = random.randrange(0, 600 - self.rect.height)
        self.move = True
        self.speed = self.order[2]
        self.damage = self.order[3]
        self.step = 30
        self.accumulationMax = 0
        self.accumulation = 0.1

    # 移动、重绘坦克
    def update(self):
        if self.move:
            if self.accumulationMax >= 1:
                self.accumulationMax = 0
                if self.direction == 'up' and self.step > 0:
                    self.rect.y -= self.speed
                    self.step -= 1
                elif self.direction == 'down' and self.step > 0:
                    self.rect.y += self.speed
                    self.step -= 1
                elif self.direction == 'left' and self.step > 0:
                    self.rect.x -= self.speed
                    self.step -= 1
                elif self.direction == 'right' and self.step > 0:
                    self.rect.x += self.speed
                    self.step -= 1
            else:
                self.accumulationMax += self.accumulation

        else:
            self.direction = random.choice(['up', 'down', 'left', 'right'])
            self.image = self.enemy_tank_dict[self.direction][self.amour - 1]
            self.step = 30
            self.move = True

        if self.direction == 'up' and self.rect.top <= 0:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值