Я сейчас создаю городской генератор.Я делаю это в основном для развлечения.Одна из проблем, которую я пытаюсь решить часами, заключается в том, как заставить программу генерировать улицы.Вот весь код, который я написал, который связан с этим.
#Import#
from random import *
#Functions#
#Generate town
def generateTown(size):
#Generate town layout#
#Set town list
town = [[["-","",""] for b in range(size*10)] for i in range(size*10)]
#Generate where the center will be
temp = ["top","bottom","left","right","center"]
centerLocation = temp[randint(0,len(temp)-1)]
#Set center variable
if centerLocation == "top":
#Set center variable
center = [int((size*10)/-1.3),int((size*10)/2)]
elif centerLocation == "bottom":
#Set center variable
center = [int((size*10)/1.3),int((size*10)/2)]
elif centerLocation == "left":
#Set center variable
center = [int((size*10)/2),int((size*10)/-1.3)]
elif centerLocation == "right":
#Set center variable
center = [int((size*10)/2),int((size*10)/1.3)]
elif centerLocation == "center":
#Set center variable
center = [int((size*10)/2),int((size*10)/2)]
#Place streets
#Loop 4 times for all four corners
for i in range(4):
#Loop through the size of the town
for b in range(size*10):
#Make sure that if the for loop goes out of the boundaries of the town nothing crashes
try:
#Place street depending on what corner we are currently working on
if i == 0:
#Set street
town[center[0]][center[1]-b][0] = "street"
elif i == 1:
#Set street
town[center[0]][center[1]+b][0] = "street"
elif i == 2:
#Set street
town[center[0]-b][center[1]][0] = "street"
elif i == 3:
#Set street
town[center[0]+b][center[1]][0] = "street"
except:
break
#Place center
town[center[0]][center[1]][0] = "center"
#Print town just for testing
print(name)
for i in range(len(town)):
line = ""
for b in range(len(town[i])):
temp = list(town[i][b][0])
line += temp[0]
print(line)
#Run
generateTown(3)
input()
Сразу после того, как он размещает стартовые улицы, но до того, как он фактически размещает центральное пространство, я помещаю вещи, которые будут генерировать больше улиц.Но проблема с тем, что я пробовал, заключается в том, что иногда по какой-то причине оно истекает кровью.То есть, если он устанавливает улицу, а улица выходит за пределы города, она просто идет к противоположному концу, как Pac-Man.Я понятия не имею, почему это происходит.А также иногда это создает улицы, которые находятся рядом друг с другом, и я хочу по крайней мере один промежуток между ними.Все, что я пробовал, не работает, и я не знаю почему.Код, который был отправлен здесь, работает нормально, попробуйте сами.Пожалуйста, помогите мне!