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()
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()
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()
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()
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)
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
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
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()