Difference between revisions of "Complete Roguelike Tutorial, using python3+libtcod, part 1 code"

From RogueBasin
Jump to navigation Jump to search
Line 7: Line 7:
== Showing the @ on screen ==
== Showing the @ on screen ==
<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
#!/usr/bin/env python
import libtcodpy as libtcod
import os


import libtcodpy as tcod
#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50


# Size of the terminal window in characters
LIMIT_FPS = 20  #20 frames-per-second maximum
SCREEN_WIDTH = 80  # characters wide
SCREEN_HEIGHT = 50  # characters tall
LIMIT_FPS = 20  # 20 frames-per-second maximum




# ######################################################################
libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
# Exceptions
# ######################################################################
class GameError(Exception):
    """Base Exception for all game errors"""


libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)


class FontError(GameError):
libtcod.sys_set_fps(LIMIT_FPS)
    """Font could not be loaded"""
 
 
# ######################################################################
# Game
# ######################################################################
def initialize_game(font_filepath=None, window_title=None, fullscreen=False):
    """Sets up libtcod and creates a window
 
    Args:
        font_filepath (str): the path to the font file [default: arial10x10]
        window_title (str): the title to display for the game [default: Python3 Tutorial]
        fullscreen (bool): Run in full screen mode [default: False]
    """
    # Setup displayed font
    font_filepath = font_filepath or 'arial10x10.png'
    font_flags = tcod.FONT_TYPE_GREYSCALE | tcod.FONT_LAYOUT_TCOD
    if not os.path.exists(font_filepath):
        raise FontError("Could not open font file: {}".format(font_filepath))
    tcod.console_set_custom_font(font_filepath, font_flags)
 
    # Setup window
    window_title = window_title or 'Python3 Tutorial'
    fullscreen = fullscreen or False
    tcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, window_title, fullscreen)
 
    # Limit frames per second
    tcod.sys_set_fps(LIMIT_FPS)
 
 
def main():
    initialize_game()
 
    # Game loop
    while not tcod.console_is_window_closed():
        tcod.console_set_default_foreground(0, tcod.white)
        tcod.console_put_char(0, 1, 1, '@', tcod.BKGND_NONE)
        tcod.console_flush()
 
 
if __name__ == '__main__':
    main()
 


while not libtcod.console_is_window_closed():
   
    libtcod.console_set_default_foreground(0, libtcod.white)
   
    libtcod.console_put_char(0, 1, 1, '@', libtcod.BKGND_NONE)
   
    libtcod.console_flush()
</syntaxhighlight></div>
</syntaxhighlight></div>


=== Github link ===
[https://github.com/RogueBasin/CompletePython3Tutorial/blob/master/tutorial/part_01_graphics/show_the_%40_on_the_screen.py Here]'s a github link.


== Moving around ==
== Moving around ==


<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
#!/usr/bin/env python
import libtcodpy as libtcod
import os


import libtcodpy as tcod
#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50


# Size of the terminal window in characters
LIMIT_FPS = 20  #20 frames-per-second maximum
SCREEN_WIDTH = 80  # characters wide
SCREEN_HEIGHT = 50  # characters tall
LIMIT_FPS = 20  # 20 frames-per-second maximum
REALTIME = False  # set True for real-time, False for turn-based




# ######################################################################
# Exceptions
# ######################################################################
class GameError(Exception):
    """Base Exception for all game errors"""
class FontError(GameError):
    """Font could not be loaded"""
# ######################################################################
# User Interface Control
# ######################################################################
def handle_keys():
def handle_keys():
    """Handles keyboard input
     global playerx, playery
 
      
    Updates:
     #key = libtcod.console_check_for_keypress() #real-time
        player_x: x coordinate of player position
     key = libtcod.console_wait_for_keypress(True) #turn-based
        player_y: y coordinate of player position
   
 
     if key.vk == libtcod.KEY_ENTER and key.lalt:
    Returns:
         #Alt+Enter: toggle fullscreen
        bool: True if exit the game is requested else False
         libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen())
    """
       
     global player_x, player_y
     elif key.vk == libtcod.KEY_ESCAPE:
 
         return True  #exit game
     exit_game = False
   
 
     #movement keys
     if REALTIME:
     if libtcod.console_is_key_pressed(libtcod.KEY_UP):
        key = tcod.console_check_for_keypress()
         playery -= 1
     else:
       
        key = tcod.console_wait_for_keypress(True)
     elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN):
 
         playery += 1
     if key.vk == tcod.KEY_ENTER and key.lalt:
       
         # Alt+Enter: toggle fullscreen
     elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT):
         tcod.console_set_fullscreen(not tcod.console_is_fullscreen())
         playerx -= 1
 
       
     elif key.vk == tcod.KEY_ESCAPE:
     elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT):
         exit_game = True  # exit game
         playerx += 1
 
     # movement keys
     if tcod.console_is_key_pressed(tcod.KEY_UP):
         player_y = player_y - 1
     elif tcod.console_is_key_pressed(tcod.KEY_DOWN):
         player_y = player_y + 1
     elif tcod.console_is_key_pressed(tcod.KEY_LEFT):
         player_x = player_x - 1
     elif tcod.console_is_key_pressed(tcod.KEY_RIGHT):
         player_x = player_x + 1
 
    return exit_game
 
 
# ######################################################################
# Game
# ######################################################################
def initialize_game(font_filepath=None, window_title=None, fullscreen=False):
    """Sets up libtcod and creates a window
 
    Updates:
        player_x: x coordinate of player position
        player_y: y coordinate of player position
 
    Args:
        font_filepath (str): the path to the font file [default: arial10x10]
        window_title (str): the title to display for the game [default: Python3 Tutorial]
    """
    global player_x, player_y
 
    # Setup displayed font
    font_filepath = font_filepath or 'arial10x10.png'
    font_flags = tcod.FONT_TYPE_GREYSCALE | tcod.FONT_LAYOUT_TCOD
    if not os.path.exists(font_filepath):
        raise FontError("Could not open font file: {}".format(font_filepath))
    tcod.console_set_custom_font(font_filepath, font_flags)


    # Setup window
    window_title = window_title or 'Python3 Tutorial'
    fullscreen = fullscreen or False
    tcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, window_title, fullscreen)


    # Limit frames per second
#############################################
    tcod.sys_set_fps(LIMIT_FPS)
# Initialization & Main Loop
#############################################


    # Setup player's initial position
libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
    player_x = SCREEN_WIDTH // 2
libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)
    player_y = SCREEN_HEIGHT // 2
libtcod.sys_set_fps(LIMIT_FPS)
 
 
def main():
    initialize_game()
 
    # Game loop
    exit_game = False
    while not tcod.console_is_window_closed() and exit_game is not True:
        tcod.console_set_default_foreground(0, tcod.white)
        tcod.console_put_char(0, player_x, player_y, '@', tcod.BKGND_NONE)
        tcod.console_flush()
        tcod.console_put_char(0, player_x, player_y, ' ', tcod.BKGND_NONE)
 
        # handle keys
        exit_game = handle_keys()
 
 
if __name__ == '__main__':
    main()


playerx = SCREEN_WIDTH/2
playery = SCREEN_HEIGHT/2


while not libtcod.console_is_window_closed():
   
    libtcod.console_set_default_foreground(0, libtcod.white)
    libtcod.console_put_char(0, playerx, playery, '@', libtcod.BKGND_NONE)
   
    libtcod.console_flush()
   
    libtcod.console_put_char(0, playerx, playery, ' ', libtcod.BKGND_NONE)
   
    #handle keys and exit game if needed
    exit = handle_keys()
    if exit:
        break
</syntaxhighlight></div>
</syntaxhighlight></div>
=== Github link ===
[https://github.com/RogueBasin/CompletePython3Tutorial/blob/master/tutorial/part_01_graphics/moving_around.py Here]'s a github link.


[[Category:Developing]]
[[Category:Developing]]

Revision as of 14:37, 16 September 2017

This is part of a series of tutorials; the main page can be found here.

Showing the @ on screen

import libtcodpy as libtcod

#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50

LIMIT_FPS = 20  #20 frames-per-second maximum


libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)

libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)

libtcod.sys_set_fps(LIMIT_FPS)

while not libtcod.console_is_window_closed():
    
    libtcod.console_set_default_foreground(0, libtcod.white)
    
    libtcod.console_put_char(0, 1, 1, '@', libtcod.BKGND_NONE)
    
    libtcod.console_flush()


Moving around

import libtcodpy as libtcod

#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50

LIMIT_FPS = 20  #20 frames-per-second maximum


def handle_keys():
    global playerx, playery
    
    #key = libtcod.console_check_for_keypress()  #real-time
    key = libtcod.console_wait_for_keypress(True)  #turn-based
    
    if key.vk == libtcod.KEY_ENTER and key.lalt:
        #Alt+Enter: toggle fullscreen
        libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen())
        
    elif key.vk == libtcod.KEY_ESCAPE:
        return True  #exit game
    
    #movement keys
    if libtcod.console_is_key_pressed(libtcod.KEY_UP):
        playery -= 1
        
    elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN):
        playery += 1
        
    elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT):
        playerx -= 1
        
    elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT):
        playerx += 1


#############################################
# Initialization & Main Loop
#############################################

libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)
libtcod.sys_set_fps(LIMIT_FPS)

playerx = SCREEN_WIDTH/2
playery = SCREEN_HEIGHT/2

while not libtcod.console_is_window_closed():
    
    libtcod.console_set_default_foreground(0, libtcod.white)
    libtcod.console_put_char(0, playerx, playery, '@', libtcod.BKGND_NONE)
    
    libtcod.console_flush()
    
    libtcod.console_put_char(0, playerx, playery, ' ', libtcod.BKGND_NONE)
    
    #handle keys and exit game if needed
    exit = handle_keys()
    if exit:
        break