Пример #1
0
    def __init__(self, playerNumber):
        pygame.sprite.Sprite.__init__(self)
        
        # �������
        self.life = True
        
        #���ڼ������   ̹�˵������ȼ�
        if playerNumber == 1:
            self.tank_L0_image = pygame.image.load(tank_T1_0).convert_alpha()
            self.tank_L1_image = pygame.image.load(tank_T1_1).convert_alpha()
            self.tank_L2_image = pygame.image.load(tank_T1_2).convert_alpha()
        if playerNumber == 2:
            self.tank_L0_image = pygame.image.load(tank_T2_0).convert_alpha()
            self.tank_L1_image = pygame.image.load(tank_T2_1).convert_alpha()
            self.tank_L2_image = pygame.image.load(tank_T2_2).convert_alpha()
        self.level = 0
        
        # ��ʼ̹��Ϊ0��
        self.tank = self.tank_L0_image

        self.tank_R0 = self.tank.subsurface((0, 0),(48, 48))
        self.tank_R1 = self.tank.subsurface((48, 0),(48, 48))
        self.rect = self.tank_R0.get_rect()
        if playerNumber == 1:
            self.rect.left, self.rect.top = 3 + 24 * 8, 3 + 24 * 24 
        if playerNumber == 2:
            self.rect.left, self.rect.top = 3 + 24 * 16, 3 + 24 * 24 
        
        # ̹���ٶ�   ̹�˷���   ̹������   �ӵ���ȴ
        self.speed = 3
        self.dir_x, self.dir_y = 0, -1
        self.life = 3
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
Пример #2
0
    def __init__(self, playerNumber):
        pygame.sprite.Sprite.__init__(self)

        # 玩家生命
        self.life = True

        # 第几个玩家   坦克的三个等级
        if playerNumber == 1:
            self.tank_L0_image = pygame.image.load(tank_T1_0).convert_alpha()
            self.tank_L1_image = pygame.image.load(tank_T1_1).convert_alpha()
            self.tank_L2_image = pygame.image.load(tank_T1_2).convert_alpha()
        if playerNumber == 2:
            self.tank_L0_image = pygame.image.load(tank_T2_0).convert_alpha()
            self.tank_L1_image = pygame.image.load(tank_T2_1).convert_alpha()
            self.tank_L2_image = pygame.image.load(tank_T2_2).convert_alpha()
        self.level = 0

        # 初始坦克为0级
        self.tank = self.tank_L0_image

        # 运动中的两种图片
        self.tank_R0 = self.tank.subsurface((0, 0), (48, 48))
        self.tank_R1 = self.tank.subsurface((48, 0), (48, 48))
        self.rect = self.tank_R0.get_rect()
        if playerNumber == 1:
            self.rect.left, self.rect.top = 3 + 24 * 8, 3 + 24 * 24
        if playerNumber == 2:
            self.rect.left, self.rect.top = 3 + 24 * 16, 3 + 24 * 24

        # 坦克速度   坦克方向   坦克生命   子弹冷却
        self.speed = 3
        self.dir_x, self.dir_y = 0, -1
        self.life = 3
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
Пример #3
0
    def __init__(self, playerNumber):
        pygame.sprite.Sprite.__init__(self)

        self.life = True
        '''
        convert and convert_alpha are both used to convert surfaces to the same pixel format as used by the screen. 
        This ensures that you won't lose performance because of conversions when you're blitting them to the screen. 
        convert throws away any alpha channel, whereas convert_alpha keeps it. 
        The comment that you see refers to the choice to use convert_alpha instead of convert, 
        rather than a choice to use convert_alpha instead of nothing.
        '''
        if playerNumber == 1:
            self.tank = pygame.image.load(tank_T1_0).convert_alpha()

        if playerNumber == 2:
            self.tank = pygame.image.load(tank_T2_0).convert_alpha()

        self.tank_R0 = self.tank.subsurface((0, 0), (48, 48))
        self.tank_R1 = self.tank.subsurface((48, 0), (48, 48))
        self.rect = self.tank_R0.get_rect()

        if playerNumber == 1:
            self.rect.left, self.rect.top = 3 + 24 * 13, 3 + 24 * 33
        if playerNumber == 2:
            self.rect.left, self.rect.top = 3 + 24 * 21, 3 + 24 * 33

        self.speed = 3
        self.dir_x, self.dir_y = 0, -1
        self.life = 3
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
Пример #4
0
    def __init__(self, playerNumber):
        pygame.sprite.Sprite.__init__(self)

        # 玩家生命
        self.moving = 0
        self.moveDirection = 0
        self.life = 3

        if playerNumber == 1:
            self.tank_L0_image = pygame.image.load(
                "image/tank_T1_0.png").convert_alpha()
        if playerNumber == 2:
            self.tank_L0_image = pygame.image.load(
                "image/tank_T2_0.png").convert_alpha()
        self.tank = self.tank_L0_image

        # 坦克图片
        self.tank_R0 = self.tank.subsurface((0, 0), (48, 48))
        self.rect = self.tank_R0.get_rect()
        if playerNumber == 1:
            self.rect.left, self.rect.top = 3 + 24 * 8, 3 + 24 * 24
        if playerNumber == 2:
            self.rect.left, self.rect.top = 3 + 24 * 16, 3 + 24 * 24

        # 坦克速度   坦克方向   坦克生命   子弹冷却
        self.speed = 3
        self.dir_x, self.dir_y = 0, -1
        self.life = 3
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
Пример #5
0
def makeBullet(data, tank):
    x, y = tank.arm.size
    len = y / math.sin(math.radians(tank.angle))
    print(tank.angle)
    if math.cos(math.radians(tank.angle)) >= 0:
        bx = tank.x + (x/2)
    elif math.cos(math.radians(tank.angle)) < 0:
        bx = tank.x - (x/2)
    if math.sin(math.radians(tank.angle)) >= 0:
        by = tank.y + (y/2)
    elif math.sin(math.radians(tank.angle)) < 0:
        by = tank.y - (y/2)
    if math.isclose(tank.angle, 0, rel_tol = .04) or math.isclose(tank.angle, 180, rel_tol = 0.04):
        by = tank.y
    elif math.isclose(tank.angle, 90, rel_tol = .04) or math.isclose(tank.angle, 270, rel_tol = 0.04):
        bx = tank.x
    bx = tank.x + (tank.armLen * math.cos(math.radians(tank.angle)))
    by = tank.y + (tank.armLen * math.sin(math.radians(tank.angle)))
    return bulletClass.Bullet(bx, by, tank.angle)
Пример #6
0
    def __init__(self, x=None, kind=None, isred=None):
        pygame.sprite.Sprite.__init__(self)

        # ̹�˳���ǰ�����Ƿ񲥷�
        self.flash = False
        self.times = 90

        # ����:̹������
        self.kind = kind
        if not kind:
            self.kind = random.choice([1, 2, 3, 4])

        # ѡ��о�̹������
        if self.kind == 1:
            self.enemy_x_0 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_1_0.png"
            ).convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_1_3.png"
            ).convert_alpha()
        if self.kind == 2:
            self.enemy_x_0 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_2_0.png"
            ).convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_2_3.png"
            ).convert_alpha()
        if self.kind == 3:
            self.enemy_x_0 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_3_1.png"
            ).convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_3_0.png"
            ).convert_alpha()
        if self.kind == 4:
            self.enemy_x_0 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_4_0.png"
            ).convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"E:\github\MyExecise\python\TankWar\image\enemy_4_3.png"
            ).convert_alpha()
        self.enemy_3_0 = pygame.image.load(
            r"E:\github\MyExecise\python\TankWar\image\enemy_3_0.png"
        ).convert_alpha()
        self.enemy_3_2 = pygame.image.load(
            r"E:\github\MyExecise\python\TankWar\image\enemy_3_2.png"
        ).convert_alpha()

        # ����:�Ƿ�Я��ʳ��
        self.isred = isred
        if not None:
            self.isred = random.choice((True, False, False, False, False))
        if self.isred:
            self.tank = self.enemy_x_3
        else:
            self.tank = self.enemy_x_0
        # ����:̹��λ��
        self.x = x
        if not self.x:
            self.x = random.choice([1, 2, 3])
        self.x -= 1

        # �˶��е�����ͼƬ
        self.tank_R0 = self.tank.subsurface((0, 48), (48, 48))
        self.tank_R1 = self.tank.subsurface((48, 48), (48, 48))
        self.rect = self.tank_R0.get_rect()
        self.rect.left, self.rect.top = 3 + self.x * 12 * 24, 3 + 0 * 24

        # ̹���ٶ�   ����   ����   �ӵ�����   �ӵ��ӳ�
        self.speed = 1
        self.dir_x, self.dir_y = 0, 1
        self.life = 1
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
        # �Ƿ�ײǽ��ײǽ��ı䷽��
        self.dirChange = False

        # ÿ��̹�˲�ͬ������
        if self.kind == 2:
            self.speed = 3
        if self.kind == 3:
            self.life = 3
Пример #7
0
    def __init__(self, x=None, kind=None, isred=None):
        pygame.sprite.Sprite.__init__(self)

        # 坦克出现前动画是否播放
        self.flash = False
        self.times = 90

        # 参数:坦克种类
        self.kind = kind
        if not kind:
            self.kind = random.choice([1, 2, 3, 4])

        # 选择敌军坦克种类
        if self.kind == 1:
            self.enemy_x_0 = pygame.image.load(
                r"..\image\enemy_1_0.png").convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"..\image\enemy_1_3.png").convert_alpha()
        if self.kind == 2:
            self.enemy_x_0 = pygame.image.load(
                r"..\image\enemy_2_0.png").convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"..\image\enemy_2_3.png").convert_alpha()
        if self.kind == 3:
            self.enemy_x_0 = pygame.image.load(
                r"..\image\enemy_3_1.png").convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"..\image\enemy_3_0.png").convert_alpha()
        if self.kind == 4:
            self.enemy_x_0 = pygame.image.load(
                r"..\image\enemy_4_0.png").convert_alpha()
            self.enemy_x_3 = pygame.image.load(
                r"..\image\enemy_4_3.png").convert_alpha()
        self.enemy_3_0 = pygame.image.load(
            r"..\image\enemy_3_0.png").convert_alpha()
        self.enemy_3_2 = pygame.image.load(
            r"..\image\enemy_3_2.png").convert_alpha()

        # 参数:是否携带食物
        self.isred = isred
        if not None:
            self.isred = random.choice((True, False, False, False, False))
        if self.isred:
            self.tank = self.enemy_x_3
        else:
            self.tank = self.enemy_x_0
        # 参数:坦克位置
        self.x = x
        if not self.x:
            self.x = random.choice([1, 2, 3])
        self.x -= 1

        # 运动中的两种图片
        self.tank_R0 = self.tank.subsurface((0, 48), (48, 48))
        self.tank_R1 = self.tank.subsurface((48, 48), (48, 48))
        self.rect = self.tank_R0.get_rect()
        self.rect.left, self.rect.top = 3 + self.x * 12 * 24, 3 + 0 * 24

        # 坦克速度   方向   生命   子弹生命   子弹延迟
        self.speed = 1
        self.dir_x, self.dir_y = 0, 1
        self.life = 1
        self.bulletNotCooling = True
        self.bullet = bulletClass.Bullet()
        # 是否撞墙,撞墙则改变方向
        self.dirChange = False

        # 每种坦克不同的属性
        if self.kind == 2:
            self.speed = 3
        if self.kind == 3:
            self.life = 3
Пример #8
0
    def update(self):
        pressed = game.key.get_pressed()
        if (pressed[game.K_s] or pressed[game.K_DOWN]):
            temp = [self.pos[0], self.pos[1] + self.vel]
            if (self.CheckCol(temp)):
                self.pos = temp
        if (pressed[game.K_w] or pressed[game.K_UP]):
            temp = [self.pos[0], self.pos[1] - self.vel]
            if (self.CheckCol(temp)):
                self.pos = temp
        if (pressed[game.K_d] or pressed[game.K_RIGHT]):
            temp = [self.pos[0] + self.vel, self.pos[1]]
            if (self.CheckCol(temp)):
                self.pos = temp
        if (pressed[game.K_a] or pressed[game.K_LEFT]):
            temp = [self.pos[0] - self.vel, self.pos[1]]
            if (self.CheckCol(temp)):
                self.pos = temp
        settings.CameraPos = [
            -(self.pos[0] - self.opos[0]), -(self.pos[1] - self.opos[1])
        ]

        if (pressed[game.K_r]):  #reload
            if (self.ammo != self.MaxAmmo and self.MaxAmmo > 0
                    and self.r is None):
                self.r = time.time()
                #self.ReloadSound.play()
        if (game.mouse.get_pressed()[0] == 1
                and time.time() - self.t > self.FireRate and self.ammo > 0
                and self.r is None):  #full auto shoot
            settings.instances.insert(0, bulletClass.Flash(self.win, .08))
            settings.instances.insert(0, bulletClass.Bullet(15))
            self.ShottingSound.play()
            self.t = time.time()
            self.ammo -= 1

        #reload
        if (self.r is not None):
            if (time.time() - self.r > self.TimeToReload):
                self.r = None
                if (self.MaxAmmo >= self.magSize - self.ammo):
                    self.MaxAmmo -= self.magSize - self.ammo
                    self.ammo = self.magSize
                else:
                    self.ammo = self.MaxAmmo
                    self.MaxAmmo = 0

        #updating the direction the person is looking at
        dir = [
            game.mouse.get_pos()[0] - self.opos[0],
            game.mouse.get_pos()[1] - self.opos[1]
        ]
        tempAngle = self.dirAngle
        self.dirAngle = math.degrees(math.atan2(dir[1], dir[0]))
        self.image = game.transform.rotate(self.OriginalImage, -self.dirAngle)
        self.imagerect = self.image.get_rect(center=self.pos)
        self.mask = game.mask.from_surface(self.image)

        #updating the position where the bullets and flash spawn
        self.bulletSpawn = Vector2(47, 12)
        self.bulletSpawn = Vector2.rotate(self.bulletSpawn, self.dirAngle)
        self.bulletSpawn = Vector2(self.bulletSpawn[0] + self.pos[0],
                                   self.bulletSpawn[1] + self.pos[1])

        #updating for collision and updating hitboxoffset
        self.HitBoxOffset = Vector2.rotate(self.OHitBoxOffset, self.dirAngle)
        if (tempAngle != self.dirAngle):
            self.pos = self.CheckCol2()

        self.CheckCol3()