DEV Community

Cover image for Making a Roguelike while chillin out part II
Draculinio
Draculinio

Posted on

Making a Roguelike while chillin out part II

Let's continue with the development of the roguelike in the chill & python sessions.
As I mentioned earlier, when I have some free time and want to relax, I will turn on my youtube channel live streaming, put some cool music and start coding without pressure, just for fun.

Chill out and #python sesión II - YouTube

Un poco de #pythonprogramming y música relajante para acompañarte. Ni microfonos ni camaras. Solo musica y codigo al azar.Cada tanto esto va a suceder.La mus...

favicon youtube.com

All what I am going to talk about is in the game repo

First I wanted to clear a little the code in the main zone, something like this, kind of standard in curses libraries.

def main(stdscr): # my code here wrapper(main) 
Enter fullscreen mode Exit fullscreen mode

From there it is way easier to code stuff, because even if now you see a lot of code there, in the future it will be easier to send the code to functions/classes.

The second change that I did was changing the way you send commands. Instead of writing a command, I will expect an ascii code, so, depending on which key the player press, it will do different stuff.For keypad there are special curses commands

while command != 101: stdscr.addstr(p.posy,p.posx,'@',curses.color_pair(1)) #WRITE THE CHARACTER #We need to put any enemy that is available in the room for i in room.enemies: stdscr.addstr(i.posy,i.posx,i.symbol) print_player(p, stdscr) print_board(stdscr) print_room(room,stdscr) command = stdscr.getch() #Interesting, this returns an ASCII char... stdscr.erase() if command == curses.KEY_LEFT: #Interesting, if I want to have arrows I should not convert ascii... if p.posx>1: p.posx -=1 if command == curses.KEY_RIGHT: if p.posx<79: p.posx +=1 if command == curses.KEY_UP: if p.posy>2: p.posy -=1 if command == curses.KEY_DOWN: if p.posy<22: p.posy +=1 #Yes, terrible... #Move enemies room.move_enemies() 
Enter fullscreen mode Exit fullscreen mode

Now, I don't expect 'exit' or 'e', I just expect ASCII code 101 (e) to finish the main loop.
For movement of the character, now I have a position in x and y in the character class, so everytime the player press an arrow key, it moves.

This is what I added in the player constructor:

def __init__(self, name, creature): self.name = name self.creature = creature #let's start with human or elf. self.strength = 0 self.defense = 0 self.gold = 0 self.room = '' #here is a question... do the character need to know where he is or the room should know who is there???? self.posx = 10 self.posy = 10 
Enter fullscreen mode Exit fullscreen mode

The ifs that I put in arrow movement are because I assume that a terminal is 80x25 (there might be other configurations but, as I have to have fixed positions, I want to make it possible to be run in almost any terminal).

Then is the enemies movement. I also added that position stuff to enemies in the room and gave them random movement in the room class.

def move_enemies(self): for i in self.enemies: move = random.randint(1,4) if move == 1: if i.posx>1: i.posx -=1 if move == 2: if i.posx<79: i.posx +=1 if move == 3: if i.posy>2: i.posy -=1 if move == 4: if i.posy<22: i.posy +=1 
Enter fullscreen mode Exit fullscreen mode

I know there might be better ways to do this but for now, this works and as logic starts to be harder, I will move all this.

Then added some colors and functions for the board and...

Image description

As I mentioned, in the article you have the repo, feel free to do whatever you want and subscribe to the channel!

Top comments (0)