Help about a function - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Help about a function (/thread-15387.html) |
Help about a function - walernor - Jan-15-2019 Hi to everyone, I have a question. I have a game map and 5 monsters. I want all my monsters born on the "dirt" not on the rock or water and I have this code; while True: mnstrh=random.randint(0,mapheight-1) mnstrw=random.randint(0,mapwidth-1) if floormap[mnstrh][mnstrw]=="dirt": monsterpos[0]=mnstrw monsterpos[1]=mnstrh break else: True while True: mnstrh1=random.randint(0,mapheight-1) mnstrw1=random.randint(0,mapwidth-1) if floormap[mnstrh1][mnstrw1]=="dirt": monster1pos[0]=mnstrw1 monster1pos[1]=mnstrh1 break else: TrueMonster variable names are monster,monster1... and their position names are monsterpos, monster1pos, monster2pos.. How can I shorten this code by using a function? I know that there is a short way by using a function but I can't do it :) Thanks in advance. RE: Help about a function - ichabod801 - Jan-15-2019 Here's how a function could be useful: get_position(floormap): while True: row = random.randint(0, mapheight - 1) column = random.randint(0, mapwidth - 1) if floormap[row][column]=="dirt": return [row, column] monsterpos = get_position() monsterpos1 = get_position() ...That is a step forward, but not what I would recommend. I would have a list of monsters. Each monster would be a dictionary. Say you have a list of names, you could do it like this: monster_names = ['demi-gorgon', 'bunny rabbit', 'medusa'] monsters = [] for name in monster_names: monsters.append({'name': name, 'position': get_position()})One thing to note is that it is currently possible to have two monsters in the same position. If that is not what you want, the get_position function is not the best idea. Better would be to loop through all the positions, and make a list of the ones that are dirt. Then use random.shuffle to mix up the list of positions, and do: monsters = [] for name, position in zip(monster_names, dirt_positions): monsters.append({'name': name, 'position': position}) RE: Help about a function - walernor - Jan-15-2019 (Jan-15-2019, 07:20 PM)ichabod801 Wrote: Here's how a function could be useful: Thank you so much for your reply and your time. I have learnt so many things from this coding logic :) |