Найти в Дзене
Без названия

Делаем игру.

Итак. Чтобы создать игру нам необходимо создать папку HELCO и в ней уже создать модули. clouds.py exporter.py fires.py helicopter.py importer.py main.py map.py utils.py Создаем игровое поле в модуле map.py. from utils import randbool from utils import randcell from utils import randcell2 # 0 - поле # 1 - дерево # 2 - река # 3 - госпиталь # 4 - апгрейд-шоп # # # CELL_TYPES="⬜🌲🌊🏥🏡" class Map: def generate_river(self, l): rc=randcell(self.w, self.h) rx, ry=rc[0], rc[1] self.cells[rx][ry]=2 while l>0: rc2=randcell2(rx, ry) rx2, ry2=rc2[0], rc2[1] if (self.check_bounds(rx2, ry2)): self.cells[rx2][ry2]=2 rx,ry=rx2,ry2 l-=1 def generate_forest(self, r, mxr): for ri in range(self.h): for ci in range(self.w): if randbool(r,mxr): self.cells[ri][ci]=1 def print_map(self): w, h = self.w, self.h print("⬛" * (w + 3)) for row in self.cells: print("⬛", end="") for cell in row: if (cell>=0 and cell<len(CELL_TYPES)): print(CELL_TYPES[cell], end="") print("⬛") print("⬛" * (w + 3)) def check_bounds(se

Итак. Чтобы создать игру нам необходимо создать папку HELCO и в ней уже создать модули.

clouds.py

exporter.py

fires.py

helicopter.py

importer.py

main.py

map.py

utils.py

Создаем игровое поле в модуле map.py.

from utils import randbool

from utils import randcell

from utils import randcell2

# 0 - поле

# 1 - дерево

# 2 - река

# 3 - госпиталь

# 4 - апгрейд-шоп

#

#

#

CELL_TYPES="⬜🌲🌊🏥🏡"

class Map:

def generate_river(self, l):

rc=randcell(self.w, self.h)

rx, ry=rc[0], rc[1]

self.cells[rx][ry]=2

while l>0:

rc2=randcell2(rx, ry)

rx2, ry2=rc2[0], rc2[1]

if (self.check_bounds(rx2, ry2)):

self.cells[rx2][ry2]=2

rx,ry=rx2,ry2

l-=1

def generate_forest(self, r, mxr):

for ri in range(self.h):

for ci in range(self.w):

if randbool(r,mxr):

self.cells[ri][ci]=1

def print_map(self):

w, h = self.w, self.h

print("⬛" * (w + 3))

for row in self.cells:

print("⬛", end="")

for cell in row:

if (cell>=0 and cell<len(CELL_TYPES)):

print(CELL_TYPES[cell], end="")

print("⬛")

print("⬛" * (w + 3))

def check_bounds(self, x, y):

if (x<0 or y<0 or x>=self.h or y>=self.w):

return False

return True

def __init__(self, w, h):

self.w = w

self.h = h

self.cells = [[0 for i in range(w+2)] for j in range(h+2)]

tmp=Map(20,20)

tmp.generate_forest(8, 10)

tmp.generate_river(10)

tmp.generate_river(20)

#if (tmp.check_bounds(1, 3)):

# print("OK")

tmp.print_map()

Обратите внимание на то, как используется инструкция from. Ее удобно использовать для импорта только определенных идентификаторов. Синтаксис следующий:

from <название модуля> import <идентификатор> [as <псевдоним>]

В модуле utils.py мы выносим все рандомные функции:

from random import uniform as rand_uniform

from random import randint as rand

def randbool(r, mxr):

t = rand_uniform(0, mxr) # Случайное число от 0 до mxr

return t <= r # Проверяем условие

def randcell(w, h):

tw=rand(0, w-1)

th=rand(0, h-1)

return tw, th

#0-наверх, 1-вправо, 2-вниз, 3-влево

def randcell2(x,y):

moves=[(-1,0),(0,1),(1,0),(0,-1)]

t=rand(0,3)

dx,dy=moves[t][0], moves[t][1]

return (x+dx,y+dy)