★ AMSTRAD CPC ★ GAMESLIST ★ BILLARD AMERICAIN (c) CPC REVUE ★ |
CPC Revue |
Ce logiciel est un simulateur de billard américain ou “pool” avec 15 boules numérotées et une blanche. Il y a en fait 2 règles, la première est décrite dans les livres spécialisés et celle qui est utilisée dans les “cafés”. La différence essentielle se situe à plusieurs niveaux : le comptage des points, les pénalités, le côté du joueur. Ces deux règles sont donc intégrées dans le logiciel, les joueurs choisissant celle avec laquelle ils préfèrent jouer. Est incluse aussi la façon de tirer sur la boule de choc, soit par un affichage de la queue de billard directement sur la table, soit par une représentation sur le côté, cette dernière façon de faire étant nettement plus difficile pour tirer dans une direction particulière. Les principales règles sont incluses dans le programme.LE PROGRAMME se compose de plusieurs modules chaînés entre eux. Le programme "BILLARD" est il un chargeur qui positionne le HIMEM à &86AE afin de pouvoir charger le programme "DATA.IMG", résultat de la compilation d'une image faite à partir d'un logiciel de dessin. Le programme suivant appelé DATA.DEC est un décompilateur oui va afficher le dessin de présentation pendant que les autres programmes se chargent. On trouve le programme OBJET qui est le programme en langage machine de déplacement des boules. Puis la procédure se termine par le chargement du programme BASIC principal. Une fois charge on demande au joueur les règles désirées, c'est-à-dire les règles officielles ou les règles de "café", en fonction de la réponse, le calcul des points sera différent. L'affichage direct est le mode le plus simple car la représentation de la queue se fait directement sur la table, alors que l'affichage sur le côté est une représentation de la direction par rapport à la boule. Une fois ces questions complétées, l'écran devient noir puis au bout de quelques instants, l'écran de jeu apparaît. A gauche, il y a la table de billard vue du dessus. A droite, en haut, il y a les cases contenant les boules qui tomberont dans les blouses. En dessous les scores des joueurs s'inscrivent. Juste au-dessus du score d'un joueur, se trouve un point jaune indiquant lequel des deux joueurs va jouer. Dans le cas des règles de café, le joueur ne s'affiche pas aussi longtemps qu'aucune boule n est tombée dans une blouse. Les joueurs jouent donc à tour de rôle. A droite de la table se trouve la valeur des boules, elles sont numérotées de haut en bas et de gauche à droite, les dizaines ne sont pas indiquées mais sont comptées dans le jeu. Suivent trois tableaux de détermination du tir. La boule blanche isolée ou entourée par un segment blanc représente la boule de tir. Dans le cas de la méthode de tir sur le côté, le segment blanc représente la direction du tir. Juste'en dessous se trouve une représentation symbolique d'une boule et la fin de la queue afin de simuler la position de la queue par rapport à la boule pour lui imprimer un effet. Pour finir, en dessous, se trouve une règle graduée qui détermine la force du tir. " " Le programme assembleur... De &9000 à &935F il y a les dessins des boules de billard. Etant donné que l'affichage se fait en mode 0, il y a 2 représentations pour une boule. Le dessin des boules de deux couleurs a été inversé afin de simuler un mouvement de la boule. Théoriquement la gestion des sprites se fait par un programme spécialisé qui comprend la hauteur et la largeur. Ici, ce n'est pas nécessaire étant donné qu'il n'y a qu'un seul type de sprite, en l'occurrence les boules de billard. En fonction de la position paire ou impaire de la boule, on affiche l'un ou l'autre sprite de la même boule. Les tables RTA1 et RTA2 sont celles utilisées par le programme de gestion de l'effet. En fait, l'effet se matérialise par une modification de l'angle, soit dans le sens trigonométrique, soit dans l'autre sens ; il y a donc deux tables. Pour avoir la déviation modifiée, il suffit de chercher dans la table la valeur de DX et DY, puis de prendre les deux valeurs suivantes. La table TT est la table des trous... Elle est divisée en trois colonnes, les deux premières colonnes sont les positions des trous, la troisième donne l'octet pour la mise à jour dans la table TBT. LA TABLE DES CHOCS. TBC
Les tables T1 à T8, en fonction du déplacement de la boule, il y a choc si et seulement si une boule se trouve aux positions adéquates, ces tables donnent les positions relatives en fonction du déplacement de la boule sachant que le premier octet donne le nombre de positions possibles d'une boule. TABLE TCB Table relative pour chaque boule La table TBT correspond aux boules tombées. En &98AD commence le programme proprement dit, il gère le déplacement des boules de billard et ne rend la main au programme BASIC que lorsque toutes les boules se sont immobilisées. Les explications contenues dans le listing source doivent être suffisantes pour comprendre l'algorithme, en résumé, &98ADà &997A C'est la boucle principale, c'est ici qu'est gérée l'initialisation du nombre ae chocs sur la bande, le nombre de boules en mouvement, l'initialisation du registre IX qui pointe sur la table TCB de la boule en mouvement, la vitesse de la boule avec le ralentissement. Le déplacement de la boule se fait par appel à un sous-programme en &997C, l'affichage des boules tombées dans une blouse, la mise à jour de la table TBT, l'effacement et l'affichage de la boule à sa nouvelle position et enfin c'est ici que l'on détermine s'il y a encore une boule en mouvement. &997C à &99E2 On aère le déplacement de chaque boule, on calcule la position future de la boule et avec un appel au sous-programme TCHOC, on vérifie s'il y a un choc, si oui, on continue sur CHOC sinon on passe à la position suivante. Le nombre de déplacements dépend de la vitesse. &99E3 à &9A72 Sous-programme de test en cas de choc. On commence à ini-tialiser la table des chocs, puis on vérifie s'il y a un choc sur la bande ou une chute dans une blouse. Sinon on charge la table des coups en fonction de la direction de la boule. C'est à partir de cette table que l'on vérifie s'il y a choc avec une autre boule. &9A73 à &9AB6 On initialise le registre HL avec une des tables T1 à T8 en fonction de la direction de la boule. &9AB7 à &9AD1 Mise à jour de la table TBC dans le cas de choc avec une boule. &9AD4 à &9B4A C'est ici que se fait le test pour savoir si la boule tape contre une banae ou bien tombe dans une blouse. &9B4B à &9B6A On initialise le sprite d'affichage de la boule en fonction de la position de la boule (position paire ou impaire en x). &9B6B à &9B7B Mise à jour de la table TBC &9B7C à &9EAE C'est la partie la plus importante du programme, c'est ici que l'on gère les chocs entre les boules ou contre la bande. On teste si la boule est tombée dans un trou, si oui, on arrête le sous-programme sinon on regarde si c'est un choc de côté, si oui, on ralentit la boule, on incrémente pour cette boule le nombre de chocs bande, on met à jour le côté du choc, on calcule la nouvelle direction puis on saute au programme qui gère l'effet. Dans le cas d'un choc avec une boule, on met à 0 les octets qui servent pour ce choc, on initialise le registre IY avec l'adresse de la boule choquée, on calcule l'octet SS de la boule choquée, ensuite les directions DX2 et DY2 en fonction du choc, enfin l'angle de choc. On initialise ensuite DX1 et DY1 afin de pouvoir calculer l'angle de rebond de la boule en mouvement. On calcule la vitesse des boules choquées à partir du calcul précédent des angles et de la table des "sinus" puis la vitesse résultante de la boule de départ à partir de la table des "cosinus". Pour terminer, on gère l'effet, tout simplement en modifiant l'angle de rebond en fonction du sens. Sachant que l'octet qui se trouve en (IX +#11) correspond à l'effet, on y met le nombre déterminé par la déviation de la queue sur la boule et en fonction du sens, on positionne le bit 8. En cas de choc, on inverse le sens de rotation de la boule. Suivent un certain nombre de sous-programmes : le premier détermine l'angle de la boule en fonction du sens et de la déviation en X et Y de la boule. Sachant que le cercle trigonométrique ici ne comporte que 32 angles différents. Ensuite on trouve le sous-programme SAN qui est en fait un sous-programme de CAN. Le sous-programme CPT affiche les boules tombées dans les blouses. Le bruitage est effectué par le sous-programme BRU qui utilise les 3 tables TBR1, TBR2 ETTBR3, pour charger les registres du PGES. Le programme AFF est celui qui permet d'afficher les sprites des boules, il a été adapté pour ce jeu afin de gagner en rapidité et pour avoir un affichage au pixel. En &A100, c'est l'appel par le BASIC pour afficher une boule, appelé par CALL &A1 00, x, y, ad avec x et y la position de la boule et ad l'adresse du sprite à afficher. En &A1 10, c'est l'initialisation des tables DRO, GAU et TBT en début de partie. Quelques informations supplémentaires La vitesse : à partir du BASIC, on détermine la force par la variable FO qui est "pokée" en IX + 6, en supposant que IX pointe sur la boule que l'on frappe. Donc, en IX + 6 on a un octet compris entre 1 et 10, en IX + 10, on a au départ 0, on ajoute une valeur égale à # 1 0 à chaque fois que l'on déplace la boule. Quand cet octet déborde, on décrémente la vitesse, donc l'octet IX+ 6. Ainsi lorsque l'octet IX + 6 arrive à 0, la boule s'arrête. C'est l'octet IX +#10 que j'ai appelé "décimale" dans le programme source. Le programme BASIC principal 10 à 90 Demande des règles Les variables principales A Angle de tir Que les dieux informatiques nous pardonnent ! Les (nombreux) lecteurs qui nous ont téléphoné avaient deviné que le programme publié dans le numéro 33 était en Assembleur. Il fallait donc posséder un programme permettant d'entrer les codes. Cette longue liste n'est pas inutile puisque vous réclamez souvent des listings Assembleur commentés, ainsi que des jeux bien réalisés. PROCEDURES Si vous avez un Assembleur et si vous avez réussi, grâce à la fin du listing paru dans ce numéro, à obtenir un listing objet (OBJET.BIN), alors vous n'aurez pas de problèmes pour rassembler les morceaux du puzzle. SANS ASSEMBLEUR Le numéro précédent vous a permis d'apprendre par cœur le mode . d'emploi, donc plus de problèmes de ce côté-là. En revanche, le chargement des programmes risaue de vous poser quelques problèmes. Récapitulons donc la marche à suivre, deux cas se distinguant : vous possédez un lecteur de disques ou bien un lecteur de cassettes. VERSION DISQUE Tapez et chargez tous les listings, c'est-à-dire : "LISTING1", "LISTING2", "BILLARD.BAS", "BILLARD1 .BAS". VERSION CASSETTE Les choses se compliquent un peu : il faut utiliser deux cassettes pour ne pas trop se perdre dans les dédales informatiques. Bon courage ! CPC n°32,33 |
|
|
Page créée en 280 millisecondes et consultée 1801 fois L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |