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 witho…


This content originally appeared on DEV Community and was authored by Draculinio

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)

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()

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

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

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!


This content originally appeared on DEV Community and was authored by Draculinio


Print Share Comment Cite Upload Translate Updates
APA

Draculinio | Sciencx (2024-07-26T13:09:04+00:00) Making a Roguelike while chillin out part II. Retrieved from https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/

MLA
" » Making a Roguelike while chillin out part II." Draculinio | Sciencx - Friday July 26, 2024, https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/
HARVARD
Draculinio | Sciencx Friday July 26, 2024 » Making a Roguelike while chillin out part II., viewed ,<https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/>
VANCOUVER
Draculinio | Sciencx - » Making a Roguelike while chillin out part II. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/
CHICAGO
" » Making a Roguelike while chillin out part II." Draculinio | Sciencx - Accessed . https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/
IEEE
" » Making a Roguelike while chillin out part II." Draculinio | Sciencx [Online]. Available: https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/. [Accessed: ]
rf:citation
» Making a Roguelike while chillin out part II | Draculinio | Sciencx | https://www.scien.cx/2024/07/26/making-a-roguelike-while-chillin-out-part-ii/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.