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

From RogueBasin
Jump to navigation Jump to search
m ("Showing the @ on screen": corrected coords to (1,1) like in the tutorial)
(changed default to turn-based, added syntax highlighting, removed "Generalizing" (it's now in Part 2))
Line 4: Line 4:


== Showing the @ on screen ==
== Showing the @ on screen ==
 
<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
<pre>import libtcodpy as libtcod
import libtcodpy as libtcod


#actual size of the window
#actual size of the window
Line 27: Line 27:
      
      
     libtcod.console_flush()
     libtcod.console_flush()
</pre>
</syntaxhighlight></div>
 


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


<pre>
<div style="background-color: #EEEEEE; border-style: dotted"><syntaxhighlight lang="python">
import libtcodpy as libtcod
import libtcodpy as libtcod


Line 44: Line 45:
     global playerx, playery
     global playerx, playery
      
      
     key = libtcod.console_check_for_keypress()  #real-time
     #key = libtcod.console_check_for_keypress()  #real-time
     #key = libtcod.console_wait_for_keypress(True)  #turn-based
     key = libtcod.console_wait_for_keypress(True)  #turn-based
      
      
     if key.vk == libtcod.KEY_ENTER and key.lalt:
     if key.vk == libtcod.KEY_ENTER and key.lalt:
Line 79: Line 80:
playery = SCREEN_HEIGHT/2
playery = SCREEN_HEIGHT/2


#first_time = True  #for turn-based games
first_time = True  #for turn-based games


while not libtcod.console_is_window_closed():
while not libtcod.console_is_window_closed():
Line 86: Line 87:
      
      
     #handle keys and exit game if needed
     #handle keys and exit game if needed
     #if not first_time:  #for turn-based games, remember to indent after!
     if not first_time:  #for turn-based games, remember to indent after!
    exit = handle_keys()
        exit = handle_keys()
    if exit:
        if exit:
        break
            break
      
      
     #first_time = False  #for turn-based games
     first_time = False  #for turn-based games
      
      
     libtcod.console_set_foreground_color(0, libtcod.white)
     libtcod.console_set_foreground_color(0, libtcod.white)
Line 97: Line 98:
      
      
     libtcod.console_flush()
     libtcod.console_flush()
</pre>
</syntaxhighlight></div>
 
 
== Generalizing ==
 
<pre>
import libtcodpy as libtcod
 
#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50
 
LIMIT_FPS = 20  #20 frames-per-second maximum
 
 
class Object:
    #this is a generic object: the player, a monster, an item, the stairs...
    #it's always represented by a character on screen.
    def __init__(self, x, y, char, color):
        self.x = x
        self.y = y
        self.char = char
        self.color = color
   
    def move(self, dx, dy):
        #move by the given amount
        self.x += dx
        self.y += dy
   
    def draw(self):
        #set the color and then draw the character that represents this object at its position
        libtcod.console_set_foreground_color(0, self.color)
        libtcod.console_put_char(0, self.x, self.y, self.char, libtcod.BKGND_NONE)
   
    def clear(self):
        #erase the character that represents this object
        libtcod.console_put_char(0, self.x, self.y, ' ', libtcod.BKGND_NONE)
 
 
def handle_keys():
    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):
        player.move(0, -1)
       
    elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN):
        player.move(0, 1)
       
    elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT):
        player.move(-1, 0)
       
    elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT):
        player.move(1, 0)
 
 
#############################################
# 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)
 
#create object representing the player
player = Object(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, '@', libtcod.white)
 
#create an NPC
npc = Object(SCREEN_WIDTH/2 - 5, SCREEN_HEIGHT/2, '@', libtcod.yellow)
 
#the list of objects with those two
objects = [npc, player]
 
 
#first_time = True  #for turn-based games
 
while not libtcod.console_is_window_closed():
 
    #erase all objects at their old locations, before they move
    for object in objects:
        object.clear()
   
    #handle keys and exit game if needed
    #if not first_time:  #for turn-based games
    exit = handle_keys()
    if exit:
        break
    #first_time = False  #for turn-based games
   
    #draw all objects in the list
    for object in objects:
        object.draw()
   
    libtcod.console_flush()
</pre>

Revision as of 01:05, 2 June 2010

This is part of the code for 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_foreground_color(0, libtcod.white)
    
    libtcod.console_print_left(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

first_time = True  #for turn-based games

while not libtcod.console_is_window_closed():
    
    libtcod.console_print_left(0, playerx, playery, libtcod.BKGND_NONE, ' ')
    
    #handle keys and exit game if needed
    if not first_time:  #for turn-based games, remember to indent after!
        exit = handle_keys()
        if exit:
            break
    
    first_time = False  #for turn-based games
    
    libtcod.console_set_foreground_color(0, libtcod.white)
    libtcod.console_print_left(0, playerx, playery, libtcod.BKGND_NONE, '@')
    
    libtcod.console_flush()