Python: я не могу придумать правильный код для генерации улиц для города - PullRequest
0 голосов
/ 06 марта 2019

Я сейчас создаю городской генератор.Я делаю это в основном для развлечения.Одна из проблем, которую я пытаюсь решить часами, заключается в том, как заставить программу генерировать улицы.Вот весь код, который я написал, который связан с этим.

#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.Я понятия не имею, почему это происходит.А также иногда это создает улицы, которые находятся рядом друг с другом, и я хочу по крайней мере один промежуток между ними.Все, что я пробовал, не работает, и я не знаю почему.Код, который был отправлен здесь, работает нормально, попробуйте сами.Пожалуйста, помогите мне!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...