9.2 KiB
9.2 KiB
libSCII
Pour utiliser libSCII, il faut créer une nouvelle variable de la classe Scii :
La classe Scii
scii = Scii(world, player, npc_collision)
Voici les arguments qu'on peut donner à Scii :
world, player, on_npc_collision, scii_keys = {"left": '4', "right": '6', "up": '8', "down": '2', "quit": 'q', "old_messages": '0'}, get_input_text = None, no_collision = " ^", collision_checker = None, message_history_max = 20, screen_width = 21, screen_height = 7, portrait_width = 7
world
va contenir les données du monde. Des explication plus précises sont plus bas.player
va conten les données du joueur. Des explication plus précises sont plus bas.on_npc_collision
doit être une fonction avec les argumentsself, npc
qui est exécutée lorsque le joueur va vers le pnj.self
contient la classeScii
et permet d'y appeler des fonctions.npc
contient les données du pnj, comme elles sont écrites dansworld
(voir plus bas).
scii_keys
contient les touches que le joueur utilise pour faire certaines action. Quandscii_keys
est égal àNone
, les touches utilisés sont :{"left": '4', "right": '6', "up": '8', "down": '2', "quit": 'q', "old_messages": '0'}
."old_messages"
permet de voir les anciennes conversations.get_input_text
est une fonction qui doit retourner une chaine de caractères qui sera affichée dans l'input pour récupérer les touches.no_collision
est une chaine de caractères qui contient les caractères que le joueur peut traverser. Par défaut, lorsqueno_collision
est égal àNone
, la chaine de caractères est" ^"
.collision_checker
est une fonction qui prend les paramètresself, world, player, x, y
et qui retourne 0 si le joueur peut passer à (x, y), 1 si il ne peut pas passer à (x, y) et 2 si il y a un pnj à (x, y).self
permet d'appeler des fonctions de la classeScii
ou à en récupérer des données etworld
etplayer
contiennent les mêmes données queworld
etplayer
qui sont des arguments deScii
.message_history_max
contient le nombre de messages maximals qui seront conservés dans l'historique des conversations.screen_width
est unint
qui contient la largeur de l'écran en nombre de caractères.screen_height
est unint
qui contient la hauteur de l'écran en nombre de caractères.portrait_width
la largeur des portraits qui peuvent s'afficher à côté du texte.
world
, le monde du jeu
world
est un dictionnaire qui contiendra tout les éléments du monde du jeu.
Un exemple de world
map0 = """
########################################################
# ________ \|/ #
# | ) | _|_ #
# |_)____| \_/ ______ #
# ^ [==-==-] _ #
# <=> [-===-=] // #
# / \ [==-==-] <=// #
# | || #
########################################################
"""
animations = {
"replace_animations": {
'-': {
"frames": ['=', '-'],
"animation_frame": 0
},
'=': {
"frames": ['-', '='],
"animation_frame": 0
}
},
"coords_animations": {
"4, 4": {
"frames": ['^', ' '],
"animation_frame": 0
}
}
}
world = {
"dmode": STICKY,
"map_num": 0,
"maps": [
{
"layers": [
{
"data": map0,
"transp_char": None,
"animations": animations
}
],
"jumps": [
{
"x": 4,
"y": 4,
"to_x": 1,
"to_y": 1,
"to_map": 0,
"isactive": 1
}
]
}
],
"npc": [
{
"x": 35,
"y": 1,
"isvisible": 1,
"collision_check": 1,
"layer": 0,
"map": 0,
"char": '&',
"name": "massena"
},
{
"x": 35,
"y": 6,
"isvisible": 1,
"collision_check": 1,
"layer": 0,
"map": 0,
"char": '&',
"name": "lephenixnoir"
}
]
}
Description
dmode
: La méthode d'affichage de la carte :STICKY
: Le joueur est au milieu à part si il est trop proche du bord de la carte, il va donc se décentrer.CENTERED
: Le joueur est toujours au centre (comme dans Asci).BLOCKS
: La carte s'affiche par portions (un peu comme c'est parfois le cas dans Megaman sur la NES).STICKYBLOCKS
: La carte s'affiche comme dansBLOCKS
, mais elle remplit toujours l'écran.
map_num
: Le numéro de la carte sur laquelle on va démarrer le jeu.maps
: Une liste de plusieurs cartes, chacune constituée de :layers
: les différentes couches qui constituent les maps. Ces layers sont dessinés du premier au dernier.data
: Une string qui contient le layer (map0
dans l'exemple).transp_char
: Le caractère qui ne sera pas affiché : permet de voir le layer d'en dessous. Si il est àNone
, aucun caractère ne sera enlevé.animations
(Optionnel) : Dictionnaire qui permet d'ajouter des animations à la map constitué de :replace_animations
: Dictionnaire pour les animations où un caractère est remplacé par un autre sur toute la map. Pour chaque caractère qui doit être animé, il faut y ajouter un autre dictionnaire où le nom est le caractère qui doit être animé. Ces dictionnaires sont constitués de :frames
: Liste qui contient les différent caractères qui constituent l'animation.animation_frame
: Quel caractère de l'animation va être affiché. C'est une position dansframes
.
coords_animations
: Dictionnaire pour les animations où un caractère est remplacé par un autre uniquement à une position bien précise. Pour chaque position qui doit être animée, il faut y ajouter un autre dictionnaire où le nom est"x, y"
où x doit être remplacé par l'abscisse et y par l'ordonnée du caractère qui doit être animé. Ces dictionnaires sont constitués de :frames
: Liste qui contient les différent caractères qui constituent l'animation.animation_frame
: Quel caractère de l'animation va être affiché. C'est une position dansframes
.
jumps
: Liste des endroits où le joueur peut sauter d'une map à l'autre et/ou d'une position à l'autre. Cette liste est constituée de dictionnaires constituées de :x
ety
: La position de départ.to_x
etto_y
: La position de d'arrivée.to_map
: La map de l'arrivée.isactive
: Booléen : est ce que ce jump peut téléporter le joueur ?
npc
: Liste des pnj qui sont des dictionnaires constituée de :x
ety
: Leur position sur la map.isvisible
: est ce qu'ils sont visibles.collision_check
: Booléen : est ce qu'on peut entrer en collision avec eux.layer
: Au dessus de quel layer ils s'affichent.map
: Sur quelle map ils sont.char
: Quel caractère est utilisé pour les afficher.name
: Le nom du pnj, ce qui permet de l'identifier.
player
, le joueur
Un exemple de player
player = {
"x": 3,
"y": 4,
"isvisible": 1,
"collision_check": 1,
"layer": 0,
"playerc": '@'
}
Description
x
ety
: Sa position sur la map.isvisible
: est ce qu'il est visible.collision_check
: Booléen : est ce qu'il est stoppé par les objets durs et les pnj.layer
: Au dessus de quel layer ils s'affiche.
La map sur laquelle il est est déjà définie dans map_num
de world
.
Les fonctions de Scii
self
est la classe Scii
.
mainloop(self)
: Lance la boucle du jeu.- Déjà utilisés dans mainloop :
get_map_width(self, map_data)
: Retourne la largeur de la map.map_data
: dictionnaire de la map comme il est dansworld["maps"]
get_map_height(self, map_data)
: Retourne la hauteur de la map.map_data
: dictionnaire de la map comme il est dansworld["maps"]
draw_map(self, mode, show_player)
mode
: Mode de dessin de la map (STICKY
,CENTERED
,BLOCKS
ouSTICKYBLOCKS
)show_player
: Booléen : est ce que le joueur doit être affiché.
def show_text(self, text)
: Affiche du texte. L'historique du texte affiché est disponible en appuyant surscii_keys["old_messages"]
ou en appelantshow_old_messages(self)
.text
: Texte à afficher.portrait
(Optionnel) : Affiche un portrait à côté du texte.
show_old_messages(self)
: Affiche les anciennes conversations.ask_choice(self, text, choices)
: Demande à l'utilisateur de faire un choix parmi les choix proposés danschoices
. Retourne le choix fait. Le premier choix est le numéro 1, et les prochains sont à chaque fois de 1 plus grands : dans["Oui", "Non", "Je ne sais pas"]
"Oui" est le choix numéro 1, "Non" est le choix numéro 2 et "Je ne sais pas" est le choix numéro 3.text
: Texte à afficher avant de demander à l'utilisateur quel proposition il fait. Les choix seront affichés en dessous.choices
: Liste de chaînes de caractères des choix que l'utilisateur.portrait
(Optionnel) : Affiche un portrait à côté du texte.