Skip to content

Commit

Permalink
new file: levels/1.txt
Browse files Browse the repository at this point in the history
	modified:   platformerhabrahabr.py
  • Loading branch information
bvs committed Oct 7, 2013
1 parent c48bda8 commit 2e0d6d5
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 48 deletions.
44 changes: 44 additions & 0 deletions levels/1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[
----------------------------------|
- * -|
- * * P -|
---- *--** --|
- -- -|
- -|
- -|
- -|
-- ---- -|
- -|
-- -|
- ** -|
- --- -|
- -|
- -|
- --- -|
- -|
- -------- * ---- -|
- -|
- - -|
- ** -- -|
- * -|
- ** -|
--------------- *** -- -|
- -|
- -|
----------------------------------|
]

player 55 44

portal 128 512 900 35

portal 170 512 700 64

monster 190 250 2 1 150 10

monster 190 400 2 3 150 150

monster 150 200 1 2 150 100


/
92 changes: 44 additions & 48 deletions platformerhabrahabr.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
DISPLAY = (WIN_WIDTH, WIN_HEIGHT) # Группируем ширину и высоту в одну переменную
BACKGROUND_COLOR = "#000000"

FILE_DIR = os.path.dirname(__file__)

class Camera(object):
def __init__(self, camera_func, width, height):
self.camera_func = camera_func
Expand All @@ -35,55 +37,57 @@ def camera_configure(camera, target_rect):
t = max(-(camera.height-WIN_HEIGHT), t) # Не движемся дальше нижней границы
t = min(0, t) # Не движемся дальше верхней границы

return Rect(l, t, w, h)
return Rect(l, t, w, h)


def loadLevel():
global playerX, playerY # объявляем глобальные переменные, это координаты героя

levelFile = open('%s/levels/1.txt' % FILE_DIR)
line = " "
commands = []
while line[0] != "/": # пока не нашли символ завершения файла
line = levelFile.readline() #считываем построчно
if line[0] == "[": # если нашли символ начала уровня
while line[0] != "]": # то, пока не нашли символ конца уровня
line = levelFile.readline() # считываем построчно уровень
if line[0] != "]": # и если нет символа конца уровня
endLine = line.find("|") # то ищем символ конца строки
level.append(line[0: endLine]) # и добавляем в уровень строку от начала до символа "|"

if line[0] != "": # если строка не пустая
commands = line.split() # разбиваем ее на отдельные команды
if len(commands) > 1: # если количество команд > 1, то ищем эти команды
if commands[0] == "player": # если первая команда - player
playerX= int(commands[1]) # то записываем координаты героя
playerY = int(commands[2])
if commands[0] == "portal": # если первая команда portal, то создаем портал
tp = BlockTeleport(int(commands[1]),int(commands[2]),int(commands[3]),int(commands[4]))
entities.add(tp)
platforms.append(tp)
animatedEntities.add(tp)
if commands[0] == "monster": # если первая команда monster, то создаем монстра
mn = Monster(int(commands[1]),int(commands[2]),int(commands[3]),int(commands[4]),int(commands[5]),int(commands[6]))
entities.add(mn)
platforms.append(mn)
monsters.add(mn)

def main():
loadLevel()
pygame.init() # Инициация PyGame, обязательная строчка
screen = pygame.display.set_mode(DISPLAY) # Создаем окошко
pygame.display.set_caption("Super Mario Boy") # Пишем в шапку
bg = Surface((WIN_WIDTH,WIN_HEIGHT)) # Создание видимой поверхности
# будем использовать как фон
bg.fill(Color(BACKGROUND_COLOR)) # Заливаем поверхность сплошным цветом

hero = Player(55,55) # создаем героя по (x,y) координатам

left = right = False # по умолчанию - стоим
up = False
running = False

entities = pygame.sprite.Group() # Все объекты
animatedEntities = pygame.sprite.Group() # все анимированные объекты, за исключением героя
monsters = pygame.sprite.Group() # Все передвигающиеся объекты
platforms = [] # то, во что мы будем врезаться или опираться


hero = Player(playerX,playerY) # создаем героя по (x,y) координатам
entities.add(hero)

level = [
"----------------------------------",
"- -",
"- -- -",
"- * -",
"- -",
"- -- -",
"-- -",
"- P -",
"- ---- --- -",
"- -",
"-- -",
"- * -",
"- --- -",
"- -",
"- -",
"- * --- * -",
"- -",
"- ------- ---- -",
"- -",
"- - -",
"- -- -",
"- *** -",
"- -",
"----------------------------------"]

timer = pygame.time.Clock()
x=y=0 # координаты
for row in level: # вся строка
Expand All @@ -102,21 +106,10 @@ def main():
platforms.append(pr)
animatedEntities.add(pr)


x += PLATFORM_WIDTH #блоки платформы ставятся на ширине блоков
y += PLATFORM_HEIGHT #то же самое и с высотой
x = 0 #на каждой новой строчке начинаем с нуля

tp = BlockTeleport(128,512,800,64)
entities.add(tp)
platforms.append(tp)
animatedEntities.add(tp)

mn = Monster(190,200,2,3,150,15)
entities.add(mn)
platforms.append(mn)
monsters.add(mn)

total_level_width = len(level[0])*PLATFORM_WIDTH # Высчитываем фактическую ширину уровня
total_level_height = len(level)*PLATFORM_HEIGHT # высоту

Expand All @@ -136,7 +129,6 @@ def main():
if e.type == KEYDOWN and e.key == K_LSHIFT:
running = True


if e.type == KEYUP and e.key == K_UP:
up = False
if e.type == KEYUP and e.key == K_RIGHT:
Expand All @@ -156,6 +148,10 @@ def main():
screen.blit(e.image, camera.apply(e))
pygame.display.update() # обновление и вывод всех изменений на экран


level = []
entities = pygame.sprite.Group() # Все объекты
animatedEntities = pygame.sprite.Group() # все анимированные объекты, за исключением героя
monsters = pygame.sprite.Group() # Все передвигающиеся объекты
platforms = [] # то, во что мы будем врезаться или опираться
if __name__ == "__main__":
main()

0 comments on commit 2e0d6d5

Please sign in to comment.