Загрузить файлы в «plagiats»
parent
a1739d2564
commit
099f8fb565
|
@ -0,0 +1,67 @@
|
||||||
|
import os
|
||||||
|
from pygame import image
|
||||||
|
import pygame
|
||||||
|
import pygame.transform
|
||||||
|
|
||||||
|
|
||||||
|
class Projectile:
|
||||||
|
UP = "up"
|
||||||
|
DOWN = "down"
|
||||||
|
LEFT = "left"
|
||||||
|
RIGHT = "right"
|
||||||
|
|
||||||
|
def __init__(self, game, x, y, direction: str):
|
||||||
|
self.game = game
|
||||||
|
self.settings = self.game.settings
|
||||||
|
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.direction = direction
|
||||||
|
|
||||||
|
self.h, self.w = self.settings.projectile_size, self.settings.projectile_size
|
||||||
|
|
||||||
|
self.image = image.load(os.path.join(self.settings.img_folder, "tanks", "explotions", "shot", self.direction + ".png"))
|
||||||
|
self.image = pygame.transform.scale(self.image, (self.settings.projectile_size, self.settings.projectile_size))
|
||||||
|
|
||||||
|
def move(self):
|
||||||
|
if self.direction == self.UP:
|
||||||
|
self.y -= self.settings.projectile_speed
|
||||||
|
elif self.direction == self.DOWN:
|
||||||
|
self.y += self.settings.projectile_speed
|
||||||
|
elif self.direction == self.LEFT:
|
||||||
|
self.x -= self.settings.projectile_speed
|
||||||
|
elif self.direction == self.RIGHT:
|
||||||
|
self.x += self.settings.projectile_speed
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
self.move()
|
||||||
|
self.game.screen.blit(self.image, (self.x, self.y))
|
||||||
|
|
||||||
|
def change_coords_by_delta(self, dx=None, dy=None):
|
||||||
|
self.x = self.x - dx
|
||||||
|
self.y = self.y - dy
|
||||||
|
|
||||||
|
def get_check_points(self):
|
||||||
|
result = None
|
||||||
|
if self.direction == self.UP:
|
||||||
|
result = (
|
||||||
|
(self.x + 1, self.y),
|
||||||
|
(self.x + self.w - 1, self.y)
|
||||||
|
)
|
||||||
|
elif self.direction == self.DOWN:
|
||||||
|
result = (
|
||||||
|
(self.x + 1, self.y + self.h),
|
||||||
|
(self.x + self.w - 1, self.y + self.h)
|
||||||
|
)
|
||||||
|
elif self.direction == self.LEFT:
|
||||||
|
result = (
|
||||||
|
(self.x, self.y + 1),
|
||||||
|
(self.x, self.y + self.h - 1)
|
||||||
|
)
|
||||||
|
elif self.direction == self.RIGHT:
|
||||||
|
result = (
|
||||||
|
(self.x + self.w, self.y + 1),
|
||||||
|
(self.x + self.w, self.y + self.h - 1)
|
||||||
|
)
|
||||||
|
|
||||||
|
return result
|
|
@ -0,0 +1,50 @@
|
||||||
|
class Projectiles:
|
||||||
|
def __init__(self, game):
|
||||||
|
self.projectiles = []
|
||||||
|
self.game = game
|
||||||
|
self.map = game.map
|
||||||
|
|
||||||
|
def add(self, projectile):
|
||||||
|
self.projectiles.append(projectile)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
result = set()
|
||||||
|
for projectile in self.projectiles:
|
||||||
|
cp1, cp2 = projectile.get_check_points()
|
||||||
|
|
||||||
|
for enemy in self.game.enemies:
|
||||||
|
r = enemy.get_rect()
|
||||||
|
if r.collidepoint(cp1) or r.collidepoint(cp2):
|
||||||
|
#Check if projectile collides enemy
|
||||||
|
self.game.enemies.remove(enemy)
|
||||||
|
self.remove(projectile)
|
||||||
|
self.game.score += 1
|
||||||
|
break
|
||||||
|
|
||||||
|
pr = self.game.player.get_rect()
|
||||||
|
if pr.collidepoint(cp1) or pr.collidepoint(cp2):
|
||||||
|
self.game.settings.running = False
|
||||||
|
|
||||||
|
if self.map != None:
|
||||||
|
block1 = self.map.find_block_on_coords(cp1[0], cp1[1])
|
||||||
|
block2 = self.map.find_block_on_coords(cp2[0], cp2[1])
|
||||||
|
|
||||||
|
if block1.projectile_passable and block2.projectile_passable:
|
||||||
|
projectile.update()
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
index = self.projectiles.index(projectile)
|
||||||
|
del self.projectiles[index]
|
||||||
|
del projectile
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def change_coords_by_delta(self, dx=None, dy=None):
|
||||||
|
for projectile in self.projectiles:
|
||||||
|
projectile.change_coords_by_delta(dx, dy)
|
||||||
|
|
||||||
|
def remove(self, projectile):
|
||||||
|
self.projectiles.pop(self.projectiles.index(projectile))
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
class GameSettings:
|
||||||
|
def __init__(self):
|
||||||
|
self.screen_height = 640
|
||||||
|
self.screen_width = 1024
|
||||||
|
self.c_x = self.screen_width // 2
|
||||||
|
self.c_y = self.screen_height // 2
|
||||||
|
self.fps = 30
|
||||||
|
self.caption = "TankiOffline"
|
||||||
|
self.running = True
|
||||||
|
|
||||||
|
self.path_separator = os.sep
|
||||||
|
self.img_folder = os.path.join(os.path.realpath(sys.argv[0]).rsplit(os.sep, 1)[0], 'sprites')
|
||||||
|
self.map_folder = os.path.join(os.path.realpath(sys.argv[0]).rsplit(os.sep, 1)[0], 'maps')
|
||||||
|
self.move_speed = 60 / self.fps
|
||||||
|
|
||||||
|
self.block_size = 64
|
||||||
|
self.entity_size = 60
|
||||||
|
|
||||||
|
self.projectile_size = 20
|
||||||
|
self.projectile_speed = 240 / self.fps
|
||||||
|
self.recharge_time = 0.5
|
||||||
|
|
||||||
|
self.enemy_spawn_rev = 6000 / self.fps
|
||||||
|
self.enemy_spawn_rev_thresh = 30
|
||||||
|
self.enemy_spawn_rev_delta = 0.001
|
||||||
|
self.enemy_shot_rev = 1200 / self.fps
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
import pygame
|
||||||
|
from pygame import image, Surface
|
||||||
|
|
||||||
|
def load_image(settings, image_path: str) -> Surface:
|
||||||
|
s = settings
|
||||||
|
i = image.load(image_path)
|
||||||
|
return pygame.transform.scale(i, (s.block_size, s.block_size))
|
||||||
|
|
||||||
|
|
||||||
|
def load_entity_image(settings, image_path: str) -> Surface:
|
||||||
|
s = settings
|
||||||
|
i = image.load(image_path)
|
||||||
|
return pygame.transform.scale(i, (s.entity_size, s.entity_size))
|
Loading…
Reference in New Issue