DEV Community

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

Posted on

2

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!

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay