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

From RogueBasin
Jump to navigation Jump to search
Line 10: Line 10:
== 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">
import libtcodpy as libtcod
#!/usr/bin/env python3
 
import tdl


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


LIMIT_FPS = 20  #20 frames-per-second maximum
LIMIT_FPS = 20  #20 frames-per-second maximum




libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
tdl.set_font('arial10x10.png', greyscale=True, altLayout=True)


libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)
console = tdl.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Roguelike", fullscreen=False)


libtcod.sys_set_fps(LIMIT_FPS)
tdl.setFPS(LIMIT_FPS)


while not libtcod.console_is_window_closed():
while not tdl.event.is_window_closed():
   
 
    libtcod.console_set_default_foreground(0, libtcod.white)
     console.draw_char(1, 1, '@', bg=None, fg=(255,255,255))
   
     libtcod.console_put_char(0, 1, 1, '@', libtcod.BKGND_NONE)
      
      
     libtcod.console_flush()
     tdl.flush()
</syntaxhighlight></div>
</syntaxhighlight></div>


Line 38: Line 38:


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


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


LIMIT_FPS = 20  #20 frames-per-second maximum
LIMIT_FPS = 20  #20 frames-per-second maximum


def handle_keys():
def handle_keys():
     global playerx, playery
     global playerx, playery
      
      
     #key = libtcod.console_check_for_keypress() #real-time
    '''
     key = libtcod.console_wait_for_keypress(True) #turn-based
     #realtime
   
 
     if key.vk == libtcod.KEY_ENTER and key.lalt:
    keypress = False
    for event in tdl.event.get():
        if event.type == 'KEYDOWN':
          user_input = event
          keypress = True
    if not keypress:
        return
    '''
 
    #turn-based
     #user_input = tdl.event.key_wait()
 
     if user_input.key == 'ENTER' and user_input.alt:
         #Alt+Enter: toggle fullscreen
         #Alt+Enter: toggle fullscreen
         libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen())
         tdl.set_fullscreen(True)
       
     elif key.vk == libtcod.KEY_ESCAPE:
     elif user_input.key == 'ESCAPE':
         return True  #exit game
         return True  #exit game
   
 
     #movement keys
     #movement keys
     if libtcod.console_is_key_pressed(libtcod.KEY_UP):
     if user_input.key == 'UP':
         playery -= 1
         playery -= 1
       
 
     elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN):
     elif user_input.key == 'DOWN':
         playery += 1
         playery += 1
       
 
     elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT):
     elif user_input.key == 'LEFT':
         playerx -= 1
         playerx -= 1
       
 
     elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT):
     elif user_input.key == 'RIGHT':
         playerx += 1
         playerx += 1




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


libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
tdl.set_font('arial10x10.png', greyscale=True, altLayout=True)
libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)
console = tdl.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Roguelike", fullscreen=False)
libtcod.sys_set_fps(LIMIT_FPS)
tdl.setFPS(LIMIT_FPS)
 
playerx = int(SCREEN_WIDTH/2)
playery = int(SCREEN_HEIGHT/2)


playerx = SCREEN_WIDTH/2
while not tdl.event.is_window_closed():
playery = SCREEN_HEIGHT/2
 
    console.draw_char(playerx, playery, '@', bg=None, fg=(255,255,255))
 
    tdl.flush()
 
    console.draw_char(playerx, playery, ' ', bg=None)


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
     #handle keys and exit game if needed
     exit = handle_keys()
     exit_game = handle_keys()
     if exit:
     if exit_game:
         break
         break
</syntaxhighlight></div>
</syntaxhighlight></div>


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

Revision as of 10:33, 13 November 2016

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

The tutorial uses libtcod version 1.6.0 and above.

If you choose to use 1.5.1, you can find the old version here.
If you choose to use 1.5.0, you can find the old version here.

Showing the @ on screen

#!/usr/bin/env python3

import tdl

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

LIMIT_FPS = 20  #20 frames-per-second maximum


tdl.set_font('arial10x10.png', greyscale=True, altLayout=True)

console = tdl.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Roguelike", fullscreen=False)

tdl.setFPS(LIMIT_FPS)

while not tdl.event.is_window_closed():

    console.draw_char(1, 1, '@', bg=None, fg=(255,255,255))
    
    tdl.flush()


Moving around

#!/usr/bin/env python3

import tdl

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

LIMIT_FPS = 20  #20 frames-per-second maximum

def handle_keys():
    global playerx, playery
    
    '''
    #realtime

    keypress = False
    for event in tdl.event.get():
        if event.type == 'KEYDOWN':
           user_input = event
           keypress = True
    if not keypress:
        return
    '''

    #turn-based
    #user_input = tdl.event.key_wait()

    if user_input.key == 'ENTER' and user_input.alt:
        #Alt+Enter: toggle fullscreen
        tdl.set_fullscreen(True)
 
    elif user_input.key == 'ESCAPE':
        return True  #exit game

    #movement keys
    if user_input.key == 'UP':
        playery -= 1

    elif user_input.key == 'DOWN':
        playery += 1

    elif user_input.key == 'LEFT':
        playerx -= 1

    elif user_input.key == 'RIGHT':
        playerx += 1


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

tdl.set_font('arial10x10.png', greyscale=True, altLayout=True)
console = tdl.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Roguelike", fullscreen=False)
tdl.setFPS(LIMIT_FPS)

playerx = int(SCREEN_WIDTH/2)
playery = int(SCREEN_HEIGHT/2)

while not tdl.event.is_window_closed():

    console.draw_char(playerx, playery, '@', bg=None, fg=(255,255,255))

    tdl.flush()

    console.draw_char(playerx, playery, ' ', bg=None)

    #handle keys and exit game if needed
    exit_game = handle_keys()
    if exit_game:
        break