Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions background.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import pygame
import pygame.locals
import sys
import os

import config

# import window
class Background(object):
def __init__(self, background, DSS, speed = 0):
self.background = background
self.x_coordinate = 0
self.speed = speed
self.DSS = DSS

def draw_static_background(self):
slef.speed = 0
pass

def draw_dynamic_background(self):
rel_x = self.x_coordinate % (self.background).get_rect().width
(self.DSS).blit((self.background), (rel_x - (self.background).get_rect().width, 0))
if rel_x < config.window_width:
(self.DSS).blit((self.background), (rel_x, 0))
self.x_coordinate -= self.speed
11 changes: 11 additions & 0 deletions buttons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import pygame
import pygame.locals
import sys
import os

# Принимает нажатия любых клавиш
def events():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
88 changes: 88 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import os
import sys
import pygame

FPS = 120

# define display surface
window_width = 1120
window_high = 800
window_size = (window_width, window_high)
area = window_high*window_width


# Hero parametrs
hero_start_HP = 100
hero_start_x = 500
hero_start_y = 400
hero_speed = 5
hero_bullet_damage = 50
hero_taran_damage = 50
hero_frames_per_bullet = 20


#Enemy parametrs
enemy_frames_per_bullet = 40
enemy_speed = 0.5
enemy_random_y = 100 # Размер отступа от краёв экрана, где не сможетпоявляться враг
enemy_delt_coord = 100 # Расстояние между врагами при их создании
enemy_bullet_indent = 6 # Расстояние от координаты врага до координаты создания его патрона
enemy_trajectory_amplitude = 0 # Характеристики траетрории врагов, 0 - если нужно случайное поведение
enemy_trajectory_phase = 0
enemy_trajectory_frequency = 0
enemy_taran_damage = 50
enemy_bullet_damage = 25
enemy_start_HP = 100

#Common parametrs
frames_update = 5
image_size = 15 # Размер спрайта персонажей
move_right = 1
move_left = -1
impact_parameter = 5 # Прицельный параметр - дельта на которой происходит столкновение
bullet_speed = 8



# background speed
level = 2

# paths
resource_path = os.path.abspath("resources") # The resource folder path
image_path = os.path.join(resource_path, 'images') # The image folder path

# upload images and sprites
bullet_sprites = [pygame.image.load(os.path.join(image_path, 'bullet.png'))]

# спрайты взрыва участников
sprites_death = [pygame.image.load(os.path.join(image_path, 'boom0.png')),
pygame.image.load(os.path.join(image_path, 'boom1.png')),
pygame.image.load(os.path.join(image_path, 'boom2.png')),
pygame.image.load(os.path.join(image_path, 'boom3.png')),
pygame.image.load(os.path.join(image_path, 'boom4.png'))]

# Главный герой
player_sprites = [pygame.image.load(os.path.join(image_path, 'spacecraft0.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft1.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft2.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft3.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft4.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft5.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft6.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft7.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft8.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft9.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft10.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft11.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft12.png')),
pygame.image.load(os.path.join(image_path, 'spacecraft13.png'))]

# Спрайты врагов быстрого типа
fast_ship_sprites = [pygame.image.load(os.path.join(image_path, 'enemy/fast_ship0.png')),
pygame.image.load(os.path.join(image_path, 'enemy/fast_ship1.png')),
pygame.image.load(os.path.join(image_path, 'enemy/fast_ship2.png'))]

# Спрайты фона(красное небо, город, туман)
city = pygame.image.load(os.path.join(image_path, "CityBackground.png"))
sky = pygame.image.load(os.path.join(image_path, "red.png"))
mist = pygame.image.load(os.path.join(image_path, "fullfog.png"))
33 changes: 27 additions & 6 deletions howto.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,29 @@
Запуск:
1) ./main.py
**Необходимый и достаточный минимум для запуска игры:**

Управление:
1) перемещеие: ← → ↑ ↓
- python 3.X
- pygame

Выход:
По нажатию крестика в окне
------------------------------------------------------------------------------------------------------
**Запуск:**

- поместить все файлы в одну папку
- перейти в папку(там должен быть main.py)
- запуск: python3 ./main.py

------------------------------------------------------------------------------------------------------
**В игре:**

- управление клавишами ←, →, ↑, ↓, SPACE
- выход из игры - крестик на окне игры
- все константы вынесены в config.py
- более подробное описание - комментарии в файлах

------------------------------------------------------------------------------------------------------
**Релиз игры на уровне MVP:**

- реализованы основные паттерны программирования
- минимальная графика
- ограничено движение персонажей размерами окна
- реализовано столкновение всех персонажей друг с другом и с -пулями(попасть можно, но пока что сложно)

------------------------------------------------------------------------------------------------------
51 changes: 51 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import pygame
import pygame.locals
import sys
import os
import math
import random
random.seed() # Иначе рандом начальных координат будет один и тот же для всех врагов

import background
import config
import window
import buttons
import players

# setup pygame
pygame.init()
CLOCK = pygame.time.Clock()

window.create_window()

# Создаём постоянные фоновых рисунков
city_back = (config.city).convert()
color_back = (config.sky).convert()
mist_back = (config.mist).convert_alpha(window.screen)

# background objects creation
city_background = background.Background(city_back,
window.screen,
config.level/4)
mist_background = background.Background(mist_back,
window.screen,
config.level/2)

game = players.Game()

# main loop
while True:
# проверка всех нажатий
buttons.events()

# создаём динамичныйфон
city_background.draw_dynamic_background()
mist_background.draw_dynamic_background()

# Отслеживание всех нажатых кнопок
key_press = pygame.key.get_pressed()

game.tick(key_press)

pygame.display.update()
CLOCK.tick(config.FPS)
Loading