From cbc07fdf16ad2a7e9b842e4b9b15234b3f82ff23 Mon Sep 17 00:00:00 2001 From: Zaponium Date: Tue, 19 Mar 2024 00:49:20 +0100 Subject: [PATCH] Commit 19/03-24 Fixed issue with terrain height level (y level on the x-y coordinate system) not properly being assigned and creating double-layers. Also fixed problem with "null terrain" being created and turned into a biome. Added biome balance to help regulate amount of each biome spawning. --- Archive/V1/GFX/sample.txt | 0 Archive/V1/Main.py | 126 +++++++++++++ Archive/V1/Map/Images/blackstripes.png | Bin 0 -> 5498 bytes Archive/V1/Map/Images/sample.jpg | Bin 0 -> 10093 bytes Archive/V1/Map/Images/sample.png | Bin 0 -> 360 bytes Archive/V1/Map/Images/sampledone.png | Bin 0 -> 5036 bytes Archive/V1/Map/MapManager.py | 175 ++++++++++++++++++ Archive/V1/Map/TileTypes.py | 73 ++++++++ .../__pycache__/MapManager.cpython-312.pyc | Bin 0 -> 9108 bytes .../Map/__pycache__/TileTypes.cpython-312.pyc | Bin 0 -> 4865 bytes Archive/V1/Realms/RealmManager.py | 0 Archive/V1/Realms/template.realm | 0 Archive/V1/SFX/sample.txt | 0 Main.py | 7 +- Map/Images/sampledone.png | Bin 59536 -> 5036 bytes Map/MapManager.py | 42 +++-- Map/TileTypes.py | 69 +++++-- Map/__pycache__/MapManager.cpython-312.pyc | Bin 8190 -> 9108 bytes Map/__pycache__/TileTypes.cpython-312.pyc | Bin 3028 -> 5344 bytes 19 files changed, 462 insertions(+), 30 deletions(-) create mode 100644 Archive/V1/GFX/sample.txt create mode 100644 Archive/V1/Main.py create mode 100644 Archive/V1/Map/Images/blackstripes.png create mode 100644 Archive/V1/Map/Images/sample.jpg create mode 100644 Archive/V1/Map/Images/sample.png create mode 100644 Archive/V1/Map/Images/sampledone.png create mode 100644 Archive/V1/Map/MapManager.py create mode 100644 Archive/V1/Map/TileTypes.py create mode 100644 Archive/V1/Map/__pycache__/MapManager.cpython-312.pyc create mode 100644 Archive/V1/Map/__pycache__/TileTypes.cpython-312.pyc create mode 100644 Archive/V1/Realms/RealmManager.py create mode 100644 Archive/V1/Realms/template.realm create mode 100644 Archive/V1/SFX/sample.txt diff --git a/Archive/V1/GFX/sample.txt b/Archive/V1/GFX/sample.txt new file mode 100644 index 0000000..e69de29 diff --git a/Archive/V1/Main.py b/Archive/V1/Main.py new file mode 100644 index 0000000..57f6123 --- /dev/null +++ b/Archive/V1/Main.py @@ -0,0 +1,126 @@ +import pygame +import sys +from threading import Thread + +sys.path.append('./Map') + +import MapManager + +# pygame setup +pygame.init() +screen = pygame.display.set_mode((1280, 720)) +clock = pygame.time.Clock() +running = True + +map = pygame.image.load( "./Map/Images/sample.jpg") +maprect = map.get_rect() + +mapWidth = int(map.get_width()) +mapHeight = int(map.get_height()) + +y = 0 +bY = 5 +bX = 4 + +time1 = pygame.time.get_ticks() + +while bX < mapWidth: + for x in range(bX, mapWidth): + if y < mapHeight: + map.set_at((x, y), (0,0,0,255)) + y += 1 + if y % 5 == 0: + map.set_at((x, y), (0,0,0,255)) + y += 1 + screen.blit(map, maprect) + pygame.display.flip() + bX += 8 + y = 0 + +y = bY + +while bY < mapHeight: + for x in range(0, mapWidth): + if y < mapHeight: + map.set_at((x, y), (0,0,0,255)) + y += 1 + if y % 5 == 0: + map.set_at((x, y), (0,0,0,255)) + y += 1 + screen.blit(map, maprect) + pygame.display.flip() + bY += 10 + y = bY + +bX = 4 +y = 0 + +while bX < mapWidth: + for x in range(bX, -1, -1): + if y < mapHeight: + map.set_at((x, y), (0,0,0,255)) + y += 1 + if y % 5 == 0: + map.set_at((x, y), (0,0,0,255)) + y += 1 + screen.blit(map, maprect) + pygame.display.flip() + bX += 8 + y = 0 + +bY = 2 +y = bY + +while bY < mapHeight: + for x in range(mapWidth, 0, -1): + if y < mapHeight: + map.set_at((x, y), (0,0,0,255)) + y += 1 + if y % 5 == 0: + map.set_at((x, y), (0,0,0,255)) + y += 1 + screen.blit(map, maprect) + pygame.display.flip() + bY += 10 + y = bY + +pygame.image.save(map, "./Map/Images/blackstripes.png") + +GameMap = MapManager.MapManager() + +GameMap.load(map) + +t = Thread(target=GameMap.populate, args=(map,)) +t.start() + +time2 = pygame.time.get_ticks() + +print(str(time2 - time1)) + +pygame.image.save(map, "./Map/Images/sampledone.png") + +timeX = pygame.time.get_ticks() + +while running: + # poll for events + # pygame.QUIT event means the user clicked X to close your window + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + # fill the screen with a color to wipe away anything from last frame + screen.fill("black") + + screen.blit(map, maprect) + + # RENDER YOUR GAME HERE + + # flip() the display to put your work on screen + pygame.display.flip() + + clock.tick(120) # limits FPS to 120 + timeY = pygame.time.get_ticks() + if timeY % 1000 == 0: + print(f"{timeY-timeX}ms per tick\n{1000/(timeY-timeX)} Ticks per second") + timeX = pygame.time.get_ticks() +pygame.quit() \ No newline at end of file diff --git a/Archive/V1/Map/Images/blackstripes.png b/Archive/V1/Map/Images/blackstripes.png new file mode 100644 index 0000000000000000000000000000000000000000..02c772ab9805624b5b9bbd868542eb1b30433445 GIT binary patch literal 5498 zcmeAS@N?(olHy`uVBq!ia0y~yV76jlU~=GK0*aiHZTY~!AnNGp;uumf=j~m?Np~zn zSRE7I)jyA97D;wk({HqC&GDSA>oYn(K7arI{g3N&KEGFfKBxGc<^Ff}^Upt<^Z&Q( zIZL2G-O>7gb!NwY{NaRfuLHT;s{XS;)fU_KFFs#x0pk4>{cmYMLB%s@`TXz8x9wlM z|5PDJ%jehs{(SnzcY9kd5Ls`XU(fTG_m8<1#I#@kHq;*jS#xgv?r>fe&qMvHc7?v zWsKf61V4QyWK{MVH- zwfhc3{J8_wpWmKO-(G$L;`EhoVMcs!|7#3#SaIFmy;%yLlct=5ITYqOc=*^||7`KA zrXA$)Iq`*P{yeXr|9%4~;BRjWz6~?tJ^$}?u*3fBs=n$lNkwxm%%SBl&%wf{cHQ&B zFF*Mp{(OYy&-wB9?j=Ivb@?`!5%=Z4orffc((kJpfvLd?BO+np^E>AJ;}@S{$qdb( z_WSqjJq!sJzg(CR`|RJ$hbAht1OSgnSonO~Iq&$z=hhH^cA@#RzOJ&m9TF^aZ^8Xq zf5ZMUSpD_8s0jcbk?`Bw}>bh3MhM|BM1N>O*rEn=A*8sWN!F`njxgN@xNAySGQ6 literal 0 HcmV?d00001 diff --git a/Archive/V1/Map/Images/sample.jpg b/Archive/V1/Map/Images/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6cd3941454a66d82ac336c41ca39a54b071dd70d GIT binary patch literal 10093 zcmeIyIZzW(7zgn0?c063*`#2@p<kO@RpqMCgm9+rGKB8Zg)rQP%aj9G z9=GX{FXV@eyj9US*GygL&X&I__7$)UWj4>_%nORexW()qn1C5Hr#%_m8BF1-CUk7W zjT^e+uzk+4X$?EZ-5c>dsFvnU3FM3Tvap_7mk?}jZ8OpeI=d6gdxz4qE9+ZaX406k zXGCHho53;hdt-+ICc8W*>hdzFI>EI`RcWv>o;!Rx_#&Fz55Ry zKI-cqh&_Gw{Kd;xgRkEVzkT=q!^cmbzkHRs81Ru;Sbv+#!d!~H2fEC~lt!G~Qni$T z@aC84;kx+LV6%}>(Aw77?MlloA4;sO?=_Rsb7C38GMba@&w{o5Q?k)uzj6(Lhcmo+ z+=5x~{agDc(+5=OJD}eI{SAl$l8_`M2}wedkR&7tNkWp4BqRw*LXwaqBne4El8_`M g2}wedkR&7tNkWp4BqRw*LXwaqBnkgtLT>l}0O-JlXaE2J literal 0 HcmV?d00001 diff --git a/Archive/V1/Map/Images/sample.png b/Archive/V1/Map/Images/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..042bc81f4680e1e671d555d79e90d4f4dc6093a7 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0y~yV76jlU~*t&28z^gYk44ofy`glX(f`u%tWs zIx;Y9?C1WI$O`1M1^9%xe)#a=|NsAWk_YU7BAf*tk;M!QeEUI|(SkKt1t|F1)5S5Q z;?~=M86`@WSrHLNHf%;;1N@oe<)W{r}(mz0NGkCiC KxvXRqzy199WKQup%jfI=zJ5RdZT&yq=OAwV z!+86;Z#(OnK~i($84u zuC)Le@U!^-w$IbI|NW?LaeG@X5Ls{j|NH!f_vh2Ezb^!t^7;Bc`Tbw6?|%rf{O)qL zNh+Q%V@w}_`2M?Bvw_7k%da+oTwwFo`u%Q*zT@v!H3Dt34d(@0v>V6;nSZ;ic6ZhR zkn`r1L8UIg3ugA5w4`L6Q~}7w<#$7w!8UJ!Df~9~`(21@lgqCiQl*!vhR z`h5jxz2;mDU&9pEKCd+gxxM(`jabtODxRyJL#@3YYq|mK{dM^mE~*7tKjj>{ui?S7 z@AE!sklQWm->j4Jn51&G7!uffUayn70rvj&?HDey16l6{vmWkic!b@ryx$8+GeCP( zJSV-{35k_^rQy6eVDG=ajp3sCAnTVxt+#m#^EEue-tT#T4CMQB@<4ll>EtUkoxI<* znhosG+h5noLJa)6vp&v@{*9^hYawP-|thZ93XE1vXDd+ooupy3sDwXcua= 0: + RelX -= 1 + else: + contact = True + if map.get_at((CurX+RelX, CurY)) == (0,0,0,255): + contact = True + if map.get_at((CurX+RelX, CurY)) == (255,255,255,255): + list.append((CurX+RelX,CurY)) + contact = False + RelX = 0 + while not contact: + if CurX+RelX+1 < map.get_width(): + RelX += 1 + else: + contact = True + if map.get_at((CurX+RelX, CurY)) == (0,0,0,255): + contact = True + if map.get_at((CurX+RelX, CurY)) == (255,255,255,255): + list.append((CurX+RelX,CurY)) + if CurY+1 < map.get_height(): + CurY += 1 + else: + floor = True + contact = False + RelX = 0 + elif map.get_at((CurX, CurY)) == (255,255,255,255) and y == 0: + list.append((CurX,CurY)) + contact = False + contactB = False + RelX = 0 + RelY = 0 + while not contact: + if map.get_at((CurX+RelX, CurY)) == (0,0,0,255): + contact = True + if map.get_at((CurX+RelX, CurY)) == (255,255,255,255): + list.append((CurX+RelX,CurY)) + while not contactB: + if CurY+RelY+1 < map.get_height(): + RelY += 1 + else: + contactB = True + if map.get_at((CurX+RelX, CurY+RelY)) == (255,255,255,255): + list.append((CurX+RelX,CurY+RelY)) + else: + contactB = True + if CurX+RelX+1 < map.get_width(): + RelX += 1 + else: + contact = True + contactB = False + RelY = 0 + contact = False + floor = True + RelX = 0 + else: + floor = True + return list + + def load(self,mapObject): + print("Loading map") + self.tiles = {} + tileprint = 0 + currentVertical = 0 + currentHorizontal = 0 + currentTile = 0 + for y in range(0, mapObject.get_height()-1): + if (y-1) % 5 == 0: + currentVertical += 1 + currentHorizontal = 0 + print(f"Current Vertical:{currentVertical}") + for x in range(0, mapObject.get_width()-1): + CurCol = mapObject.get_at((x, y)) + if CurCol == (255,255,255,255): + self.tiles[f"{currentTile}"] = Tile(currentTile,(currentHorizontal,currentVertical)) + goodtiles = self.tileChecker(x, y, mapObject) + for pixel in goodtiles: + self.tiles[f"{currentTile}"].add_pixel(pixel) + if tileprint < 20: + print(f"Added tiles: {goodtiles}") + tileprint += 1 + colour1 = 0 + colour2 = 255 + colour3 = 0 + self.tiles[f"{currentTile}"].paint_pixels(mapObject, int(colour1),int(colour2),int(colour3)) + currentTile += 1 + currentHorizontal += 1 + self.amountOfTiles = currentTile + self.Verticals = 200 + self.Horizontals = 200 + print(f"{self.tiles.keys()}") + + def populate(self, mapObject): + print("Populating map") + print("Loading terrains...") + self.TileWorker = TileTypes.TerrainWorker() + self.TileWorker.generateTerrain() + tilesMapped = [["" for i in range(self.Verticals)] for j in range(self.Horizontals)] + types = self.TileWorker.get_terrain("types") + for tile in self.tiles.keys(): + position = self.tiles[f"{tile}"].Position + print(f"{position}") + if position[1] == 0: + choice = random.randrange(1,7) + if choice != 6 and position[0] != 0: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]-1][position[1]] + else: + tilesMapped[position[0]][position[1]] = self.TileWorker.get_rand_tType(tilesMapped, position) + elif position [0] == 0: + choice = random.randrange(1,7) + if choice != 6 and position[1] != 0: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]][position[1]-1] + else: + tilesMapped[position[0]][position[1]] = self.TileWorker.get_rand_tType(tilesMapped, position) + else: + choice = random.randrange(1,21) + if choice <= 6: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]][position[1]-1] + elif choice >= 7 and choice <= 14: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]-1][position[1]] + elif choice != 20: + choice2 = random.randrange(1,3) + if choice2 == 1: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]][position[1]-1] + else: + if position[0] != int(mapObject.get_width()): + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]+1][position[1]-1] + else: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]-1][position[1]-1] + elif choice == 20: + tilesMapped[position[0]][position[1]] = self.TileWorker.get_rand_tType(tilesMapped, position) + print(f"{tilesMapped}") + mappedColours = self.TileWorker.get_terrain("colours") + for x in self.tiles.keys(): + tile = self.tiles[f"{x}"] + if tilesMapped[tile.Position[0]][tile.Position[1]] != "": + colour = mappedColours[f"{tilesMapped[tile.Position[0]][tile.Position[1]]}"] + colour1, colour2, colour3 = colour[0], colour[1], colour[2] + tile.paint_pixels(mapObject, int(colour1),int(colour2),int(colour3)) + + +class Tile: + + def __init__(self, Id, Pos): + self.Id = Id + self.Position = Pos + self.pixels = [] + self.colour = (random.randint(0,255),random.randint(0,255),random.randint(0,255)) + + def getId(self): + return self.Id + + def add_pixel(self,pixel): + self.pixels.append(pixel) + + def paint_pixels(self, map, r,g,b): + for pixel in self.pixels: + map.set_at((pixel[0],pixel[1]), (r,g,b,255)) + diff --git a/Archive/V1/Map/TileTypes.py b/Archive/V1/Map/TileTypes.py new file mode 100644 index 0000000..2f0a068 --- /dev/null +++ b/Archive/V1/Map/TileTypes.py @@ -0,0 +1,73 @@ +import random + +class TerrainWorker: + + def generateTerrain(self): + self.terrains = [] + ocean = Terrain("ocean", (0, 102, 255), 2, True, ("plains", "forest", "hills")) + self.terrains.append(ocean) + lake = Terrain("lake", (0, 204, 255), 1, True, ("plains", "forest", "hills")) + self.terrains.append(lake) + plains = Terrain("plains", (0, 200, 0), 1, False, ("ocean", "lake", "forest", "hills", "desert")) + self.terrains.append(plains) + forest = Terrain("forest", (0, 100, 0), 2, False, ("ocean", "lake", "plains", "hills")) + self.terrains.append(forest) + hills = Terrain("hills", (102, 102, 153), 2, False, ("ocean", "lake", "plains", "forest")) + self.terrains.append(hills) + desert = Terrain("desert", (230, 230, 0), 1, False, ("plains", "dune")) + self.terrains.append(desert) + dune = Terrain("dune", (153, 153, 0), 2, False, ("desert",)) + self.terrains.append(dune) + self.terrainNames = [] + for terrain in self.terrains: + self.terrainNames.append(str(terrain.name)) + print(f"Added {self.terrainNames}") + + + def get_terrain(self, action): + if action == "types": + return self.terrainNames + if action == "colours": + dictionary = {} + for terrain in self.terrains: + dictionary[terrain.name] = terrain.colour + print(f"{dictionary}") + return dictionary + + def get_rand_tType(self,dict,pos): + available_terrains = [] + proximity_terrains = [] + if pos[1] == 0: + available_terrains = self.terrainNames + else: + print(f"Testing: {dict[pos[0]][pos[1]-1]}") + if dict[pos[0]][pos[1]-1] != "" and dict[pos[0]][pos[1]-1] != None: + proximity_terrains.append(dict[pos[0]][pos[1]-1]) + print(f"Found proxy terrain: {dict[pos[0]][pos[1]-1]}") + print(f"Testing: {dict[pos[0]+1][pos[1]-1]}") + if dict[pos[0]+1][pos[1]-1] != "" and dict[pos[0]+1][pos[1]-1] != None: + proximity_terrains.append(dict[pos[0]+1][pos[1]-1]) + print(f"Found proxy terrain: {dict[pos[0]+1][pos[1]-1]}") + if proximity_terrains == []: + print("Fixing null proxy error") + available_terrains = self.terrainNames + for terrain in proximity_terrains: + print(f"Terrain using:{terrain}") + for matchterrain in self.terrains: + if matchterrain.name == terrain: + print(f"Matched with Terrain successfully") + for proxy in matchterrain.proxys: + available_terrains.append(proxy) + print(f"Found available terrain:{proxy}") + + tTypeNum = random.randrange(0, len(available_terrains)) + return available_terrains[tTypeNum] + +class Terrain: + + def __init__(self, name, colour, moveC, water, proxys): + self.name = name + self.colour = colour + self.moveCost = moveC + self.isWater = water + self.proxys = proxys \ No newline at end of file diff --git a/Archive/V1/Map/__pycache__/MapManager.cpython-312.pyc b/Archive/V1/Map/__pycache__/MapManager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73bc13906f93f808fce382b488b093eeed8210a1 GIT binary patch literal 9108 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 literal 0 HcmV?d00001 diff --git a/Archive/V1/Realms/RealmManager.py b/Archive/V1/Realms/RealmManager.py new file mode 100644 index 0000000..e69de29 diff --git a/Archive/V1/Realms/template.realm b/Archive/V1/Realms/template.realm new file mode 100644 index 0000000..e69de29 diff --git a/Archive/V1/SFX/sample.txt b/Archive/V1/SFX/sample.txt new file mode 100644 index 0000000..e69de29 diff --git a/Main.py b/Main.py index 6a51e0d..57f6123 100644 --- a/Main.py +++ b/Main.py @@ -1,5 +1,6 @@ import pygame import sys +from threading import Thread sys.path.append('./Map') @@ -89,10 +90,8 @@ GameMap = MapManager.MapManager() GameMap.load(map) -screen.blit(map, maprect) -pygame.display.flip() - -GameMap.populate(map) +t = Thread(target=GameMap.populate, args=(map,)) +t.start() time2 = pygame.time.get_ticks() diff --git a/Map/Images/sampledone.png b/Map/Images/sampledone.png index 1ba680c26ba99a57f7b2565279555d89a506fb41..9ad694fa1fbc661700fe663de0c264088e555212 100644 GIT binary patch literal 5036 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

0YVNiWPS?uV;U> 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 7 and choice <= 14: tilesMapped[position[0]][position[1]] = tilesMapped[position[0]-1][position[1]] - elif choice == 11: - tilesMapped[position[0]][position[1]] = self.TileWorker.get_rand_tType() + elif choice != 20: + choice2 = random.randrange(1,3) + if choice2 == 1: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]][position[1]-1] + else: + if position[0] != int(mapObject.get_width()): + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]+1][position[1]-1] + else: + tilesMapped[position[0]][position[1]] = tilesMapped[position[0]-1][position[1]-1] + elif choice == 20: + tilesMapped[position[0]][position[1]] = self.TileWorker.get_rand_tType(tilesMapped, position) print(f"{tilesMapped}") mappedColours = self.TileWorker.get_terrain("colours") for x in self.tiles.keys(): tile = self.tiles[f"{x}"] if tilesMapped[tile.Position[0]][tile.Position[1]] != "": colour = mappedColours[f"{tilesMapped[tile.Position[0]][tile.Position[1]]}"] - print(f"{colour}") colour1, colour2, colour3 = colour[0], colour[1], colour[2] tile.paint_pixels(mapObject, int(colour1),int(colour2),int(colour3)) @@ -145,7 +160,6 @@ class Tile: def __init__(self, Id, Pos): self.Id = Id self.Position = Pos - print(f"{Pos[0]},{Pos[1]}") self.pixels = [] self.colour = (random.randint(0,255),random.randint(0,255),random.randint(0,255)) diff --git a/Map/TileTypes.py b/Map/TileTypes.py index ff193b7..e997471 100644 --- a/Map/TileTypes.py +++ b/Map/TileTypes.py @@ -4,19 +4,19 @@ class TerrainWorker: def generateTerrain(self): self.terrains = [] - ocean = Terrain("ocean", (0, 102, 255), 2, True) + ocean = Terrain("ocean", (0, 102, 255), 2, True, ("plains", "forest", "hills")) self.terrains.append(ocean) - lake = Terrain("lake", (0, 204, 255), 1, True) + lake = Terrain("lake", (0, 204, 255), 1, True, ("plains", "forest", "hills")) self.terrains.append(lake) - plains = Terrain("plains", (0, 200, 0), 1, False) + plains = Terrain("plains", (0, 200, 0), 1, False, ("ocean", "lake", "forest", "hills", "desert")) self.terrains.append(plains) - forest = Terrain("forest", (0, 100, 0), 2, False) + forest = Terrain("forest", (0, 100, 0), 2, False, ("ocean", "lake", "plains", "hills")) self.terrains.append(forest) - hills = Terrain("hills", (102, 102, 153), 2, False) + hills = Terrain("hills", (102, 102, 153), 2, False, ("ocean", "lake", "plains", "forest")) self.terrains.append(hills) - desert = Terrain("desert", (230, 230, 0), 1, False) + desert = Terrain("desert", (230, 230, 0), 1, False, ("plains", "dune")) self.terrains.append(desert) - dune = Terrain("dune", (153, 153, 0), 2, False) + dune = Terrain("dune", (153, 153, 0), 2, False, ("desert",)) self.terrains.append(dune) self.terrainNames = [] for terrain in self.terrains: @@ -31,16 +31,61 @@ class TerrainWorker: dictionary = {} for terrain in self.terrains: dictionary[terrain.name] = terrain.colour + print(f"{dictionary}") return dictionary + + def biomebalance(self, biome): + if biome == "ocean": + return 2 + if biome == "lake": + return 3 + if biome == "plains": + return 5 + if biome == "forest": + return 4 + if biome == "hills": + return 3 + if biome == "desert": + return 2 + if biome == "dune": + return 1 - def get_rand_tType(self): - tTypeNum = random.randrange(0, len(self.terrains)) - return self.terrainNames[tTypeNum] + + def get_rand_tType(self,dict,pos): + available_terrains = [] + proximity_terrains = [] + if pos[1] == 0: + available_terrains = self.terrainNames + else: + print(f"Testing: {dict[pos[0]][pos[1]-1]}") + if dict[pos[0]][pos[1]-1] != "" and dict[pos[0]][pos[1]-1] != None: + proximity_terrains.append(dict[pos[0]][pos[1]-1]) + print(f"Found proxy terrain: {dict[pos[0]][pos[1]-1]}") + print(f"Testing: {dict[pos[0]+1][pos[1]-1]}") + if dict[pos[0]+1][pos[1]-1] != "" and dict[pos[0]+1][pos[1]-1] != None: + proximity_terrains.append(dict[pos[0]+1][pos[1]-1]) + print(f"Found proxy terrain: {dict[pos[0]+1][pos[1]-1]}") + if proximity_terrains == []: + print("Fixing null proxy error") + available_terrains = self.terrainNames + for terrain in proximity_terrains: + print(f"Terrain using:{terrain}") + for matchterrain in self.terrains: + if matchterrain.name == terrain: + print(f"Matched with Terrain successfully") + for proxy in matchterrain.proxys: + for x in range(0, self.biomebalance(proxy)): + available_terrains.append(proxy) + print(f"Found available terrain:{proxy}") + + tTypeNum = random.randrange(0, len(available_terrains)) + return available_terrains[tTypeNum] class Terrain: - def __init__(self, name, colour, moveC, water): + def __init__(self, name, colour, moveC, water, proxys): self.name = name self.colour = colour self.moveCost = moveC - self.isWater = water \ No newline at end of file + self.isWater = water + self.proxys = proxys \ No newline at end of file diff --git a/Map/__pycache__/MapManager.cpython-312.pyc b/Map/__pycache__/MapManager.cpython-312.pyc index 58d32f5fc17ad81fe167bedc8216250c57341880..dc234d94443700844f89d4a9cd96a2ba0e3a4800 100644 GIT binary patch delta 1972 zcmb7FTTC2P7@jkGzu(y_dtpJlrLMHJP%Z_wP=OGkMxm5lN>^rqWhpFYw`y_M*2ITe zdDwFLfZ8_OnwV|q16WO3V`A!4t%=Tbn|8CUu`%%h(vrD=vvD;QZ?iKz;GCAXpTink4RA(axPs3FB#Hk?n6s+31-MR-4>Yds8MWHRaQ zi@;=bI6P4g#aO;8J&nE>fKO66xS{llq~>!iLC0@9Y$H@@jyYV%Xm%- zGSlxLnGc+Jr=WFZw{qI@jHXat!D>Bsl{(f~k)2{IYFK^kP32B>OnpV{%Cr}p9@MOP zRj0sFRyI>k-*MqhsjXmjpieZr==+jOKWjb!0(x*aitC2JIAV1d#VKJ*vOuGZ!L6S? zosuwOD?Sq=j%~s{ieZa7nP^>7i*D$f!7u20gBit?hR2>>pg~#vixO$fhMipKmcHJS z0kfScDIHh((H6EmoevNjxUy0)8oErDZ7@BjVHZk!;v_Y2#c; z*P0PUrNFoc9TeK^8?Ts;RYs~=FF`bee$-bBvHL1=7#!%nzFeQ7XN`PfTwQ|3JNvWM zcm(w99`w0kk3_W=8`T?as9Wb051z)yQ=lfJ87NSnu@}hE0po7;n^EFbrj%=GG3EP( zshadHtx2oXs+4%#i>gef_Q&U64^B}})TG`h<_Vc*L$)AXs~u3YXVI+5j+>q{wN;p~ zbXko7IteGhP?QW$O-vnziDlALpB}oAvZSG`j2QU{;OeQOVlp`xG#s}@dyL!h+Ie{MQMC05lu#?CX3?Xv8m{A z1RsH?+t5!XrN(L!W;=l$7!q0xZlp0+OAe83mk@QDPY7Hxh;EtZWNdJR9gF81r_qYV zq|jOCx1MxlbvJZnNM!M&^A;ZpT2%H&R++A>G^abK;EY>x{fprX!8}S^x-@xXUBP6Z zpPmb5`*QF+;w)81*JW@nbk|va+v(?={@nDUF7K?yqhoevJ#(o-OV_mywzu!wF0Q4Y z-5+LOALjNmY-EJnKf<+)&MUGVxmV70;b@DN%bq2B-m>eS-J1=3*l^LCi{ADJIDa7T zZ_RIRyJ2rDwDquiag+gWZ;%ZQ9_989a%~6Lp;2}$$_Mkfa z$M(hk%i*P9-VwO>wD13MC3VA7p+aNJ*F9HyZZ{5ajRT}zWqenk?U%7`r5QIL{M7zuT<%Zj;$PwowY-nd@VYzk71|@oQX);&zjX-nat( zyQblh&xioWCigGDj!-^9HzcX}E7m72(wz)^3Ga*Ic=WBvL;|)WkHZQEP=mv7&0c0#_=Y$F_mrtpQ5JHLrn*r{@LUf&3TT{91D&Q#YgIo#J>ZlWT5?i|AKp zfAawnHcWuT<|h>HBb=Q8pVUh@0%!4)Fk^U+S``XK17KB&-gOzwMCTL2c1&P^0J&43 u7cIC-YsN53eu)VZenkKPxI?M#P}&E=eKhC=e^5MmkQ8b`-71BFPy8?Dz!Hi8 delta 1644 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 F{{q`tXZHXA delta 1143 zcmZuwPfQe77=Lg6?X2Bl*d17~xGa?_3=p7Au>wM4Q0unoCJnSS4KZ1nsRFw@=FO~u z#0@=ou!%+c8B%Y$Fuxf=tgE;;xXdhS+OANGanu=;xOs38g)#J+-r?Oeh2%!mK>n?z=Shj03NZ5LfjyeROswci= z74ld>3{3$DJS=}-k5|hy1RWuYU~o@vX&D|FnD`FZ+=+{sd_FUA%9$+W?7Zhrd^zQv zEu7~o@)$jRTWJtWwa57*rM^dx-@3e5yq{UEE9u9sNzc{DP3;$LQ$4h<9$FmRP!GR| zHZC?U4X)DFzEZTGUr>@F%Ihd=2Z00iLH;L7{d2yr6zO$78|tOqd^z+(&lO>m%n?&e z`?5E8$#(tFq?2_D%rzx;5DSk3_)6Kxn)o;BIXcQ8s9*p1(nvgwB;JHcB*{L4p#Pr~ z2A(^_dpkwb*oF6&MLoG{x$7L`W@BSo>EQDO?|pp`JH3d`gzC+CMz z!gs;;#jKqVY7VM51(tv$U-ib|aOpzMMOwb5_kHm(Y}{^upUDg3;HJ^KZnQ3)yyxEk z?BUSzP^qoIWDHzWpX