(cours 4) Programmer sur PcEngine, c'est facile !

Voir le sujet précédent Voir le sujet suivant Aller en bas

(cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Dim 14 Mai 2017 - 22:51

cours 1 >>> installation et debut avec Huc
cours2 >>> afficher un background
cours3 >>> afficher un sprite


10 - créer une boucle, gerer le clavier pour bouger le sprite


voici ce que nous avons affiché grace aux cours précédents

ce qu il serait sympa de faire maintenant, ça serait de bouger ce sprite...

pour y arriver, il faut tout simplement modifier ses coordonnées d'affichage en direct et en continu.

dans la premiere partie du tuto, j'avais dit que nos codes etaient contenus
dans une boucle nommée main()
ce main n'est pas vraiment une boucle mais plutot le corps du programme.
les codes à l'interieur du main y sont lu une seule fois puis le programme s'arette.
c'est suffisant pour afficher le background mais pas pour bouger un sprite.

le principe d'une boucle c'est qu'une les codes à l'intérieur soient lu "en boucle" à l'infini
(ou presque)
donc il va falloir créer à l'intérieur du corps du programme une boucle ,
qui va contenir les coordonnées du sprite, modifiées par le pad, puis son affichage.

pour faire tout ceci, il faut quelques étapes :


10.1. créer une boucle

on va commencer simple en créant une boucle la plus basique possible,
la voici :

while (1)

{

}

et voila notre boucle infinie !
le programme fera en boucle infinie tous les codes à l'intérieur des accolades.

il suffit d'integrer ces trois lignes dans un main comme ceci :


pour l'instant cette boucle ne fait rien.
pour verifier que ça fonctionne bien, on va lui faire afficher quelque chose

par exemple, on va afficher une variable nommée "temps" qui augmentera de +1 à chaque boucle (ou loop )
cette variable sera utile car elle nous donnera en temps réel la vitesse de la boucle
voici comment faire :


 
Code:
#include "huc.h"
int VSyncCnt;
int TimerCnt;
int MainCnt;
int SubCnt;
int temps;
main()
{
while (1)
{
temps = temps + 1 ;
put_number(temps,5,1,1);
}
}
pour resumer,
on declare la variable temps avant le main
puis dans le main, on crée une boucle qui fait augmenter la variable de 1, puis qui l'affiche

testez le code, vous verrez comme ça avance vite,
ça vous donne un aperçu en direct de la vitesse de votre boucle.


10.2  controler sa boucle

pour l'instant, elle est bridée à 60 boucles par secondes par defaut.
il existe trois reglages de vitesse :
- vsync(0) votre boucle sera libre mais à 60 fps maxi
- vsync(1) 60fps forcé
- vsync(2) 30fps forcé

il est important de controler la vitesse de sa boucle grace à vsync,
car la vitesse de votre jeu en depend
testez vsync(2) sur le code precedent en le mettant en fin de boucle ,
et vous verrez que la variable temps augmentera deux fois moins vite !


10.3  gerer les entrées pad

afin de bouger ce fameux sprite, il faut gerer le ou les joypad
avec Huc, c'est assez simple, voici un exemple :

if ( joy( 0 ) & JOY_SLCT ) { temps = 0; }

ceci verifie si le bouton "select" du joypad 1 "joy(0)" est appuyé.
et si c'est le cas, la variable temps, sera remise à zéro
cette verification (ou "if") s'apelle une condition.
les conditions sont tres importantes en programmation,
nous verrons ça plus en détail dans le prochain numéro du tuto.
si vous debutez avec le C, faites bien attention à la synthaxe des ; et des accolades
sur cet exemple j'ai tout mis sur une meme ligne.
vous verrez que quand on a plusieures lignes, le ";" ne sera pas au meme endroit Wink

voici cette condition intégrée à notre boucle :

 


 while (1)

{

temps = temps + 1 ;

if ( joy( 0 ) & JOY_SLCT ) { temps = 0; }

put_number(temps,5,1,1);


}


compilez ce code et appuyez sur la touche "s" avec mednafen.
vous pouvez vous amuser à changer le choix de la touche,
voici la liste :
JOY_SLCT : select
JOY_STRT : start
JOY_A : bouton I
JOY_B : bouton II
JOY_UP, JOY_DOWN, JOY_LEFT, JOY_RGHT pour les fleches

joy( 0 ) : manette 1
joy( 1 ) : manette 2

vous pouvez aussi faire deux touches en meme temps, par exemple :
if ( joy( 0 ) == (JOY_A | JOY_B )) { temps = 0; }

ps: avec mednafen, les touches I et II sont "d" et "f" pour la manette 1

voici ce que ça donne niveau code
 

modifier la variable temps c'est bien, mais pour notre projet, il serait plus utile
de modifier les coordonnées de notre sprite.
nous allons donc créer et modifier une variable qui sera la position X du sprite.
cette variable nous la nommerons positionX.
comme d'habitude, il faut la declarer avant le main,
lui donner une valeur dans le main, puis modifier cette valeur dans la boucle.
et voici ce que ça donne :

int positionX;
int positionY;

positionX = 80;
positionY = 100;

if ( joy( 0 ) & (JOY_LEFT)) { positionX = positionX -1 ; }
if ( joy( 0 ) & (JOY_RGHT)) { positionX = positionX +1 ; }


10.4  structurer son code

maintenant nous savons faire une boucle, gérer le pad et modifier une valeur.
mais avant de pouvoir enfin bouger le sprite,
il va falloir structurer un minimum son code afin de ne pas "lacher" ses codes
à la va-vite

voici l'architecture type qu'il nous faudra :
si vous avez suivi depuis le debut, tout vous semblera logique

-declaration des variables
-chargement des tiles

debut du main ()

- creation du sprite
- affichage du background

**** debut de boucle
- entrées pad
- affichage du sprite
**** fin de boucle

fin du main ()



10.5  code complet


maintenant, il est temps de mettre toutes ces nouveautés dans notre code.
le voici, avec des commentaires pour bien visualiser les differentes parties :

#include "huc.h"

int VSyncCnt;
int TimerCnt;
int MainCnt;
int SubCnt;

/* declaration des variables */
int temps;
int positionX;
int positionY;


/* chargement du decor */
#incchr(tiles_decor,"decor.pcx",40,27 )
#incbat(map_decor,"decor.pcx",0x1000,40,27 )
#incpal(palette_decor,"decor.pcx" )

/* chargement des tiles du sprite */
#incspr(hero_debout,"debout.pcx",0,0,2,4)
#incpal(palette_hero,"debout.pcx")

main()
{

set_xres( 320 );

/* affichage du decor */
load_background(tiles_decor,palette_decor,map_decor,40,27);

/* creation du sprite */
spr_set( 1 );
set_sprpal( 0 , palette_hero);
load_vram( 0x6000 , hero_debout , 512);
spr_pattern( 0x6000 );
spr_ctrl( SIZE_MAS|FLIP_MAS , SZ_32x64|NO_FLIP );
spr_pal( 0 );
spr_pri( 1 );

/* affectation au sprite des tiles ,de la palette et de la position */
load_vram( 0x6000 , hero_debout , 512);
set_sprpal( 0 , palette_hero );
positionX = 80;
positionY = 100;


while (1)

{

temps = temps + 1 ;

/* entrée pad et modifs de la position */
if ( joy( 0 ) & (JOY_LEFT)) { positionX = positionX -1 ; }
if ( joy( 0 ) & (JOY_RGHT)) { positionX = positionX +1 ; }

/* affichage du temps */
put_number(temps,5,1,1);

/* positionnement du sprite */
spr_set( 1 );
spr_x( positionX );
spr_y( positionY );


/* synchronisation et affichage à l'ecran */
vsync( 1 );
satb_update();
disp_on();

}

}


voila, vous n'avez plus qu'à compiler ça et vous amuser à bouger le héros avec les fleches.
prochaine étape du tuto, faire des conditions pour que le sprite ne sorte pas de l'écran.


@+


Dernière édition par F.L le Lun 15 Mai 2017 - 22:27, édité 3 fois
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par drfloyd le Dim 14 Mai 2017 - 22:56

attention, tu as fais une boucle de répétition à la fin de ton cours Mr. Green

Merci pour ce nouveau cours !

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124494
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Dim 14 Mai 2017 - 22:59

oui, j'ai vu : une boucle dans le cours sur les boucles, ça c'est pas mal ! MDR
sinon, cette partie là est un peu plus complexe, j'espere avoir été assez clair !
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par drfloyd le Dim 14 Mai 2017 - 23:01

Metal Slug bientot sur PC Engine !

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124494
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Dim 14 Mai 2017 - 23:10

drfloyd a écrit:Metal Slug bientot sur PC Engine !

ça serait un vrai reve !
refaire seulement le niveau 1 sur pce ça serait possible, il y aurait beaucoup de boulot.
mais j'ai peur qu'il faille faire des grosses concessions sur le jeu, du genre zapper le scrolling et faire ecran par ecran, comme pour gryzor sur CPC, et aussi avoir moins d'animations du héros.
à la fin ça ne serait plus trop le meme jeu.... mais ça serait quand meme génial
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par drfloyd le Lun 15 Mai 2017 - 8:17

le gros soucis sera le scrolling en effet... impossible à mon sens d'avoir le meme rendu que sur NeoGeo.

C'est possible avec un scrolling en remodelant tous les graphismes sauce "8bit et demi", avec des décors épurés.

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124494
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Lun 15 Mai 2017 - 9:31

Le soucis ne serrait pas que sur PCE, car il faudrait une très grosse cartouche, et faire bcp de concessions sur les anims et les sprites à l'écran .
Franchement les MS sont infaisables sur console 16 bits de salon sans pertes massives, vu que le gros attrait du jeu ce sont les sprites colossaux et nombreux mixés à des patterns d'anims super chiadés en plus d'être en très grand nombre,et je parle même pas du nombre de couleurs,c'est à mon avis pour ça qu'aucune version 16 bits n'existe  Very Happy.

Donc quitte à tout retravailler, autant faire un jeu nouveau qui exploite la machine.

Sinon super tuto F.L  Wink
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Orion_ le Lun 15 Mai 2017 - 9:41

le C sur PC Engine c'est pratique, mais ça ne marche que pour des toute petite démo
dès que vous allez vouloir ajouter beaucoup de graphisme et des grandes map vous allez être ultra limité par la mémoire disponible et les bank de 8ko
la librairie HuC prend beaucoup de place et faire de bankswitching de 8ko en C ça va vite être très contraignant
avatar
Orion_
Patient contaminé

Masculin Nombre de messages : 389
Age : 33
Localisation : Perpignan
Date d'inscription : 13/06/2012

http://onorisoft.free.fr/

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Lun 15 Mai 2017 - 12:21

Oui le C n'est pas génial, et Huc n'est absolument pas fait pour de gros projets (dixit son auteur), il a été fait à la base pour mettre les gens à l'étrier pour ensuite passer à l'ASM .
Mais y'a pas mal de jeux hombrews qui sont sont sortis et 100% C et d'autres en cours de dev.
ATLANTEAN : Aetherbyte : Action/Shooting
BARBARIAN : F.L : Beat 'em up conversion
BUG HUNT : Cabbage : Action
HYPERNOVA BLAST : Mindrec : Shooting
INSANITY : Aetherbyte : Action (pressed CD)
INSANTATY : Aetherbyte : Action (Free ISO)
MYSTERIOUS SONG : Frozen Utopia : RPG (pressed CD)
PROTOCADE : Aetherbyte : Action/Compilation (AbCARD)
PYRAMID PLUNDER : Aetherbyte : Action (pressed CD)
REFLECTRON : Aetherbyte : Action (Free download)
REVIVAL CHASE : BFG : Action (comes bundled with Revival magazine) (pressed CD)
SANTATLANTEAN : Aetherbyte : Shooting (Free download)

Cependant la nouvelle version peut permettre d'aller bcp plus loin, mais bon même en ASM faut oublier MS .
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Orion_ le Lun 15 Mai 2017 - 12:34

heuuu t'est sur que MYSTERIOUS SONG est en C ?
ça me parait tellement impossible de gerer des maps et la complexité d'un RPG avec HuC
avatar
Orion_
Patient contaminé

Masculin Nombre de messages : 389
Age : 33
Localisation : Perpignan
Date d'inscription : 13/06/2012

http://onorisoft.free.fr/

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Hpman le Lun 15 Mai 2017 - 13:01

Je me permet une correction, il faut utiliser un et logique pour tester les contrôles, pas une égalité (if(joy(0)&(JOY_LEFT)) {blah}). Sinon il risque fort de se passer d'étranges choses 

Hpman
Patient contaminé

Masculin Nombre de messages : 128
Age : 40
Localisation : Lille
Date d'inscription : 22/08/2014

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Lun 15 Mai 2017 - 13:46

pour les controles le code est le meme que dans mes barbarian sur pce,,donc il marche. mais je testerais quand meme pour voir avec un &
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Lun 15 Mai 2017 - 13:59

Orion_ a écrit:heuuu t'est sur que MYSTERIOUS SONG est en C ?
ça me parait tellement impossible de gerer des maps et la complexité d'un RPG avec HuC
Sur à 100% son auteur ne code qu'en C .

@F.L: pour les tests hpman à raison car la fonction joy(0) te revoie toute l'entrée pad dans une même valeur(chaque bit correspond à une entrée)
Donc si tu veux tester une valeur en particulier il faut faire un &  Wink
Sinon avec un = tu peux pas tester un appuis sur I ou II pendant que tu avances par exemple,mais ça marche si seul I ou II sont pressés .
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Lun 15 Mai 2017 - 21:24

Ok je  vais tester ça et mettre à jour le cours.
C'est ballo d'apprendre ça maintenant alors que j'ai fini les remakes de barbarian Wink
Enfin, tu me diras, ils fonctionnent tres bien au niveau pad. Va comprendre ginette !
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Lun 15 Mai 2017 - 22:29

salut
je viens d'editer le cours, avec les & à la place des ==
par contre, le & ne marche pas pour l'appui simultané entre deux touches du genre:
if ( joy( 0 ) & (JOY_A | JOY_B )) { temps = 0; }
car il suffit qu'on ne touche à une seule touche pour que ça remette le temps à zero
pourquoi ?
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par upsilandre le Lun 15 Mai 2017 - 22:32

En tout cas c'est une bonne idée d'utiliser le pixel art de Metal Slug pour motiver les gens, ca donne forcement envie.
avatar
upsilandre
Patient incurable

Masculin Nombre de messages : 1638
Age : 42
Localisation : val de marne 94
Date d'inscription : 31/05/2015

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Tryphon le Lun 15 Mai 2017 - 22:38

Tente :

Code:
if ( joy(0) & (JOY_A | JOY_B ) == JOY_A | JOY_B) {
    temps = 0;
}

Explicassion :
joy(0) doit te renvoyer l'état du contrôleur joypad. C'est un octet dont chaque bit est à 1 si le bouton correspondant est appuyé, 0 sinon.

Par exemple, de mémoire, le contrôleur joypad de la MD (mais je me plante certainement, de toutes façons c'est certainement pas cette forme là sur PCE mais c'est le même principe) c'est quelque chose comme :

Code:
S0CABRLDU
S = Start
A, B, C : les boutons
U, D, L, R : haut bas gauche droite

Si tu appuies sur A+B, tu obtiens

Code:
00110000 -> 0x30 = 48

JOY_A, JOY_B sont des constantes qui valent l'état de cet octet contrôleur si seulement A (resp. B) est appuyé :

Code:
JOY_A = 00100000 = 0x20 = 32
JOY_B = 00010000 = 0x10 = 16

Quand tu fais un | entre deux octets, tu obtiens un octet où les bits sont à 1 si l'un des deux, ou les deux bits correspondants dans les deux octets sont à 1 :

Code:

JOY_A         : 00100000
JOY_B         : 00010000
JOY_A | JOY_B : 00110000

Quand tu fais un & entre deux octets, tu obtiens un octet dont les bits sont à 1 lorsque les deux bits correspondants sont à 1. Autrement dit on s'en sert pour effacer les bits qui ne servent pas. Quand tu fais :

Code:
joy(0) & (JOY_A | JOY_B)

tu récupères un octet de la forme 00AB0000 qui contient l'état des boutons A et B et rien d'autre.

Donc si t'appuies sur A et pas B, tu as :

Code:

joy(0)                   : 00100000
JOY_A | JOY_B            : 00110000
joy(0) & (JOY_A | JOY_B) : 00100000

si ton test est uniquement :

Code:
if (joy(0) & (JOY_A | JOY_B))

ça revient au même que d'écrire :

Code:
if (joy(0) & (JOY_A | JOY_B) != 0)

le test réussit si le résultat n'est pas 0, donc là il passe.

Toi tu vérifier que les 2 bits de A et B sont à 1, donc un simple test de non-nullité ne suffit pas. Tu dois donc taper :

Code:
if (joy(0) & (JOY_A | JOY_B) == JOY_A | JOY_B)

Attention ça devient technique :

Tu aurais aussi pu faire :

Code:
if ((joy(0) & JOY_A) && (joy(0) & JOY_B))

car le && est différent du & : il ne fait pas une opération bit à bit, mais regarde si les deux conditions sont vraies simultanément.

C'est peut-être plus clair de cette façon, mais c'est un chouilla moins efficace, déjà parce que tu appelles deux fois la fonction joy.
Ce serait plus rapide d'écrire :

Code:

j = joy(0);
if ((j & JOY_A) && (j & JOY_B))
mais je pense que ça serait encore un pico-poil plus lent que la première solution.

Bon la fin c'est pas forcément nécessaire à comprendre quand on débute, mais les opérations sur les bits et les résultats d'un test où tu mets pas de == ou de !=, c'est très courant (surtout en programmation console).

Tryphon
Infirmier

Masculin Nombre de messages : 4404
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Mar 16 Mai 2017 - 9:26

par contre, le & ne marche pas pour l'appui simultané entre deux touches du genre:
if ( joy( 0 ) & (JOY_A | JOY_B )) { temps = 0; }
car il suffit qu'on ne touche à une seule touche pour que ça remette le temps à zero
pourquoi ?
Bon la réponse de tryphon à l'air très complète (trop peut être ?)
sinon & ou | font des opérations binaires, donc il faut penser en binaire, et non en valeur décimale .
En gros JOY_A va avoir un bit qui lui est propre,et JOY_B un autre .
Si on dit que le bit 0 correspond à JOY_A et le 1 à JOY_B on aura comme valeur:
si on presse seuleument JOY_A alors bit 0 = 1 => valeur décimale= 1
si on presse seuleument JOY_B alors bit 1 = 1 => valeur 
décimale = 2

si on presse JOY_A et JOY_B alors bit 0 = 1 et bit 1 = 1
=> valeur décimale = 3

Donc tu peux voir que tu as 0 seulement quand aucun bouton n'est pressé,et dans ce cas il faut bien mettre un == et pas un & car tu testes la pression sur les 2 boutons .
Pour ton cas il faudrait faire:
Code:
if ( joy( 0 ) == (JOY_A | JOY_B ) ) { temps = 0; }

Donc le & est la bonne méthode pour tester 1 seule entrée .

Et donc c'est pareil pour les autres tests avec haut,bas,etc ..


Dernière édition par TOUKO le Mar 16 Mai 2017 - 9:49, édité 1 fois
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Tryphon le Mar 16 Mai 2017 - 9:39

J'ai essayé de détailler la signification de JOY_A et JOY_B (ce sont des masques, des entiers dont l'écriture binaire est à 1 sur ce qu'on veut garder et 0 sur ce qu'on veut ignorer) et ce qu'on obtenait quand on faisait un & avec joy(0) parce que la technique de masquer des bits se retrouve un peu partout en prog bas niveau.

Au passage, la confusion entre & et && en C (parce que c'est un peu ça aussi son erreur : il a pensé "&" comme "et", alors que c'est "et bit à bit", le vrai "et logique" c'est &&) c'est un classique. Perso je la fais au moins une fois par semaine Mr. Green (python, toujours lui, est mieux foutu, il utilise "&" et "and").

Tryphon
Infirmier

Masculin Nombre de messages : 4404
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Mar 16 Mai 2017 - 9:46

Oui c'est vrai la confusion entre le & binaire et le logique est fréquente .
D'ailleurs j'y avais même pas pensé à cette probable confusion .
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Hpman le Mar 16 Mai 2017 - 10:17

TOUKO a écrit:
Donc tu peux voir que tu as 0 seulement quand aucun bouton n'est pressé,et dans ce cas il faut bien mettre un == et pas un & car tu testes la pression sur les 2 boutons .
Pour ton cas il faudrait faire:
Code:
if ( joy( 0 ) == (JOY_A | JOY_B ) ) { temps = 0; }

Donc le & est la bonne méthode pour tester 1 seule entrée .


Ça pose le même problème, ça ne marchera pas si le joueur appuie sur autre chose en même temps (une touche de direction pour avancer par exemple).

Hpman
Patient contaminé

Masculin Nombre de messages : 128
Age : 40
Localisation : Lille
Date d'inscription : 22/08/2014

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par TOUKO le Mar 16 Mai 2017 - 10:35

C'est vrai, il faut faire le test complet:
Code:
if ( joy( 0 ) & (JOY_A | JOY_B ) == (JOY_A | JOY_B )  ) { temps = 0; }
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12103
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par F.L le Mar 16 Mai 2017 - 21:36

Merci à vous trois pour toutes ces precisions !
Mon prochain numéro du tuto sera sur les if, j'integrerais ceci 

Sinon, est ce qu'il y a encore des debutants qui ont testé ce nouveau cours ?
J'aimerais savoir si je suis resté clair car ce cours là ça commence à faire reflechir Wink
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2304
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par drfloyd le Mar 16 Mai 2017 - 23:09

le débutant doit commencer à avoir un peu mal au crane

Qu'il ne se décourage pas, et qu'il retape 5ou 10 x le code, il finira par tout comprendre et il sortira ensuite ce code comme il écrit ou parle... Deja si vous arrivez à maitriser les 4 premiers chapitres, le plus dur est presque passé, car vous etes en train de comprendre la programmation, et c'est l'étape décisive à passer.

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124494
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par drfloyd le Mer 17 Mai 2017 - 18:32

j'ai publié le cours, surtout si je fais les boulettes de recopie dites le moi Wink

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124494
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: (cours 4) Programmer sur PcEngine, c'est facile !

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum