philip-lynxLe 28/11/2010 à 14:33
source, 2eme partie:
/**************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;
SetBuffers(SCREEN, RENDER ,0);
posx=76;
posy=47;
xpush=-48;
ypush=34;
// SCBX(SCB) = 60;
// SCBY(SCB) = 42;
// SCBDATA(SCB) = ititre;
// 1er sprite chainé (fond + raquette)
SCBX(SCBg) = -200;
SCBY(SCBg) = 0;
SCBDATA(SCBg) = fondg;
SCBNEXT(SCBg) = SCBp; // chainage de sprite info commande
SCBX(SCBp) = xpush;
SCBY(SCBp) = ypush;
SCBDATA(SCBp) = pushup;
//SCBCTL0(SCBp)= 0x001;//99; // pas glop
SCBNEXT(SCBp) = SCBr; // chainage de sprite raquette
SCBX(SCBr) = -200;
SCBY(SCBr) = 0;
SCBDATA(SCBr) = raquet;
SCBNEXT(SCBr) = SCBball; // chainage de sprite balle
SCBX(SCBball) = -200;
SCBY(SCBball) = 0;
SCBDATA(SCBball) = fball;
SCBNEXT(SCBball) = SCBfd; // chainage de sprite fleche directionnelle
SCBX(SCBfd) = 0;
SCBY(SCBfd) = 0;
SCBDATA(SCBfd) = fdtab[dirf%7];//fleche;
horszone=150;// mettre les briques hors de l'écran visible. Sprite brique d'une taille de 6*14, 0=normale 1=dure 2=incassable.
SCBNEXT(SCBfd) = SCBbr01; // chainage de la brique 01
SCBX(SCBbr01) = 85-horszone;
SCBY(SCBbr01) = 16;
SCBDATA(SCBbr01) = brtab[0%3]; //
SCBNEXT(SCBbr01) = SCBbr02; // chainage de la brique 02
SCBX(SCBbr02) = 85-horszone;
SCBY(SCBbr02) = 16+14;
SCBDATA(SCBbr02) = brtab[0%3]; //
SCBNEXT(SCBbr02) = SCBbr03; // chainage de la brique 03
SCBX(SCBbr03) = 85-horszone;
SCBY(SCBbr03) = 16+28;
SCBDATA(SCBbr03) = brtab[0%3]; //
SCBNEXT(SCBbr03) = SCBbr04; // chainage de la brique 04
SCBX(SCBbr04) = 85-horszone;
SCBY(SCBbr04) = 16+42;
SCBDATA(SCBbr04) = brtab[0%3]; //
SCBNEXT(SCBbr04) = SCBbr05; // chainage de la brique 05
SCBX(SCBbr05) = 85-horszone;
SCBY(SCBbr05) = 16+56;
SCBDATA(SCBbr05) = brtab[0%3]; //
SCBNEXT(SCBbr05) = SCBbr06; // chainage de la brique 06
SCBX(SCBbr06) = 91-horszone;
SCBY(SCBbr06) = 16;
SCBDATA(SCBbr06) = brtab[0%3]; //
SCBNEXT(SCBbr06) = SCBbr07; // chainage de la brique 07
SCBX(SCBbr07) = 91-horszone;
SCBY(SCBbr07) = 16+14;
SCBDATA(SCBbr07) = brtab[0%3]; //
SCBNEXT(SCBbr07) = SCBbr08; // chainage de la brique 08
SCBX(SCBbr08) = 91-horszone;
SCBY(SCBbr08) = 16+28;
SCBDATA(SCBbr08) = brtab[0%3]; //
SCBNEXT(SCBbr08) = SCBbr09; // chainage de la brique 09
SCBX(SCBbr09) = 91-horszone;
SCBY(SCBbr09) = 16+42;
SCBDATA(SCBbr09) = brtab[0%3]; //
SCBNEXT(SCBbr09) = SCBbr10; // chainage de la brique 10
SCBX(SCBbr10) = 91-horszone;
SCBY(SCBbr10) = 16+56;
SCBDATA(SCBbr10) = brtab[0%3]; //
SCBNEXT(SCBbr10) = SCBbr11; // chainage de la brique 11
SCBX(SCBbr11) = 97-horszone;
SCBY(SCBbr11) = 16;
SCBDATA(SCBbr11) = brtab[0%3]; //
SCBNEXT(SCBbr11) = SCBbr12; // chainage de la brique 12
SCBX(SCBbr12) = 97-horszone;
SCBY(SCBbr12) = 16+14;
SCBDATA(SCBbr12) = brtab[0%3]; //
SCBNEXT(SCBbr12) = SCBbr13; // chainage de la brique 13
SCBX(SCBbr13) = 97-horszone;
SCBY(SCBbr13) = 16+28;
SCBDATA(SCBbr13) = brtab[0%3]; //
SCBNEXT(SCBbr13) = SCBbr14; // chainage de la brique 14
SCBX(SCBbr14) = 97-horszone;
SCBY(SCBbr14) = 16+42;
SCBDATA(SCBbr14) = brtab[0%3]; //
SCBNEXT(SCBbr14) = SCBbr15; // chainage de la brique 15
SCBX(SCBbr15) = 97-horszone;
SCBY(SCBbr15) = 16+56;
SCBDATA(SCBbr15) = brtab[0%3]; //
SCBNEXT(SCBbr15) = SCBbr16; // chainage de la brique 16
SCBX(SCBbr16) = 103-horszone;
SCBY(SCBbr16) = 16;
SCBDATA(SCBbr16) = brtab[0%3]; //
SCBNEXT(SCBbr16) = SCBbr17; // chainage de la brique 17
SCBX(SCBbr17) = 103-horszone;
SCBY(SCBbr17) = 16+14;
SCBDATA(SCBbr17) = brtab[0%3]; //
SCBNEXT(SCBbr17) = SCBbr18; // chainage de la brique 18
SCBX(SCBbr18) = 103-horszone;
SCBY(SCBbr18) = 16+28;
SCBDATA(SCBbr18) = brtab[0%3]; //
SCBNEXT(SCBbr18) = SCBbr19; // chainage de la brique 19
SCBX(SCBbr19) = 103-horszone;
SCBY(SCBbr19) = 16+42;
SCBDATA(SCBbr19) = brtab[0%3]; //
SCBNEXT(SCBbr19) = SCBbr20; // chainage de la brique 15
SCBX(SCBbr20) = 103-horszone;
SCBY(SCBbr20) = 16+56;
SCBDATA(SCBbr20) = brtab[0%3]; //
SCBNEXT(SCBbr20) = SCBbr21; // chainage de la brique 21
SCBX(SCBbr21) = 109-horszone;
SCBY(SCBbr21) = 16;
SCBDATA(SCBbr21) = brtab[0%3]; //
SCBNEXT(SCBbr21) = SCBbr22; // chainage de la brique 22
SCBX(SCBbr22) = 109-horszone;
SCBY(SCBbr22) = 16+14;
SCBDATA(SCBbr22) = brtab[0%3]; //
SCBNEXT(SCBbr22) = SCBbr23; // chainage de la brique 23
SCBX(SCBbr23) = 109-horszone;
SCBY(SCBbr23) = 16+28;
SCBDATA(SCBbr23) = brtab[0%3]; //
SCBNEXT(SCBbr23) = SCBbr24; // chainage de la brique 24
SCBX(SCBbr24) = 109-horszone;
SCBY(SCBbr24) = 16+42;
SCBDATA(SCBbr24) = brtab[0%3]; //
SCBNEXT(SCBbr24) = SCBbr25; // chainage de la brique 25
SCBX(SCBbr25) = 109-horszone;
SCBY(SCBbr25) = 16+56;
SCBDATA(SCBbr25) = brtab[0%3]; //
SCBNEXT(SCBbr25) = SCBscore1; // chainage score unité
SCBX(SCBscore1) = 4;
SCBY(SCBscore1) = 99-8;
SCBDATA(SCBscore1) = chiffrestab[0%14]; //
SCBNEXT(SCBscore1) = SCBscore2; // chainage score dizaine
SCBX(SCBscore2) = 4;
SCBY(SCBscore2) = 99-16;
SCBDATA(SCBscore2) = chiffrestab[0%14]; //
SCBNEXT(SCBscore2) = SCBscore3; // chainage score centaine
SCBX(SCBscore3) = 4;
SCBY(SCBscore3) = 99-24;
SCBDATA(SCBscore3) = chiffrestab[0%14]; //
SCBNEXT(SCBscore3) = SCBscore4; // chainage score millier
SCBX(SCBscore4) = 4;
SCBY(SCBscore4) = 99-32;
SCBDATA(SCBscore4) = chiffrestab[0%14]; //
SCBX(SCBscore1) = -10;SCBX(SCBscore2) = -10;SCBX(SCBscore3) = -10;SCBX(SCBscore4) = -10; // score placés hors de l'écran
// 3ème sprite chainé (score)
SCBX(SCBchiffres1) = 0;
SCBY(SCBchiffres1) = 0;
//SCBDATA(SCBchiffres1) = chiffres;
SCBNEXT(SCBchiffres1) = SCBchiffres2; // chainage de sprite
SCBX(SCBchiffres2) = 0;
SCBY(SCBchiffres2) = 0;
//SCBDATA(SCBchiffres2) = chiffres;
SCBNEXT(SCBchiffres2) = SCBchiffres3; // chainage de sprite
SCBX(SCBchiffres3) = 0;
SCBY(SCBchiffres3) = 0;
//SCBDATA(SCBchiffres3) = chiffres;
etape=10;SetRGB(palg); // provisoire
level=1;//3;//1;
tempa=0;tempb=0;etape=10;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
xpush=-48;ypush=34;
score=0;drap1=0; // drap1 agit sur l'affichage du score.
filife=3;
silence();
abcmusic(0,abcmenu1);
abcmusic(1,abcmenu2);
SetRGB(palg); // Ceci sert à changer la palette de la Lynx.
SCBX(SCBg) = 0; // fond zone de jeu
SCBX(SCBp) = xpush;
//SCBX(SCBr) = 200; // raquette
relach=1;
*/
/**************************************************************************
** BOUCLE PRINCIPALE **
**************************************************************************/
for( ; ; )
{
Vsync();
SwapBuffers();
update_music(); // petite subtilité de la gestion sonore
++gsblip; // economie ressource machine --> certaines des conditions n'ont pas besoin d'être lu par la LYNX à chaque boucle.
if (gsblip==5)
{
gsblip=1;
if (switches & BUTTON_PAUSE)
{
if (gspause==0) {gspause=1;silence();abcmusic(0,abcaptvir);}
}
if (!(switches & BUTTON_PAUSE))
{
if (gspause==1) gspause=2;
}
if (switches & BUTTON_PAUSE)
{
if (gspause==2) gspause=3;
}
if (!(switches & BUTTON_PAUSE))
{
if (gspause==3) gspause=0;
}
}
/**************************************************************************
**************************************************************************/
if (etape>=0 & etape<=4) // écran titre
{
/* set the palette */
SetRGB(pali); // Ceci sert à changer la palette de la Lynx.
DrawFBox(0,0,160,102,0); // couleur 0 (noire)
SCBX(SCBr) = -200; // raquette mis hors de l'écran
SCBX(SCBball) = -200; // balle mis hors de l'écran
SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran
SCBX(SCB) = 78; SCBY(SCB) = 52;
SCBDATA(SCB) = imole;
if (gspause==0)
{
if (etape==4) {
if (molescx>256) molescx=molescx-4;
if (molescy>128) molescy=molescy-8;
if (molescx<257 & molescy<129) {molescx=256;molescy=128;etape=2;mhaut=4;}
}
if (etape==3) {
if (molescx>128) molescx=molescx-8;
if (molescy>256) molescy=molescy-4;
if (molescx<129 & molescy<257) {molescx=128;molescy=256;etape=2;mbas=4;}
}
if (etape==2) {
if (molescx<384) molescx=molescx+(4+mbas);
if (molescy<384) molescy=molescy+(4+mhaut);
if (molescx>383 & molescy>383)
{
molescx=384;molescy=384;++tempc;mhaut=0;mbas=0;
if (tempc==3) tempc=1;
if (tempc==1) etape=3;
if (tempc==2) etape=4;
}
}
if (etape==1) {
++tempb;
if (tempb>64) {
tempb=0;etape=2;
}
}
if (etape==0) {
if (molescx<256) {
molescx=molescx+2;molescy=molescy+2;
if (molescx>255) {molescx=256;molescy=256;etape=1;gmole=2;}
}
}
}
SCBHS(SCB) = molescx;
SCBVS(SCB) = molescy;
DrawSprite(SCB); // affichage molecule
if (etape>0) {SCBHS(SCB) = 256;SCBVS(SCB) = 256;} // remise à 0 echelle des images SCB
SCBX(SCB) = 34; SCBY(SCB) = 2; SCBDATA(SCB) = iname; DrawSprite(SCB);
SCBX(SCB) = 74; SCBY(SCB) = 26; SCBDATA(SCB) = ititre; DrawSprite(SCB);
//
SCBX(SCBscore1) = 4;SCBX(SCBscore2) = 4;SCBX(SCBscore3) = 4;SCBX(SCBscore4) = 4;
SCBDATA(SCBscore1) = chiffrestab[0%14];
SCBDATA(SCBscore2) = chiffrestab[1%14];
SCBDATA(SCBscore3) = chiffrestab[0%14];
SCBDATA(SCBscore4) = chiffrestab[2%14];
//Fchiffres(6,68,2); // 2
//Fchiffres(6,76,0); // 0
//Fchiffres(6,84,1); // 1
//Fchiffres(6,92,0); // 0
SCBDATA(SCBp) = pushup;
SCBX(SCBp) = xpush;//48;
SCBY(SCBp) = ypush;
SCBX(SCBg) = -200; // fond zone de jeu
//SCBX(SCBp) = xpush;
SCBX(SCBr) = -200; // raquette
DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score
if (gspause==0 & etape>0)
{
if (xpush<8) xpush=xpush+2; // apparition de la bulle info "Push UP"
if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu.
{
xpush=8;
++tempa; // bulle info clignote doucement
if (tempa>63) tempa=1;
if (tempa>0 & tempa<32) ypush=34;
if (tempa>31) ypush=-100;
if (joystick & JOY_RIGHT)
{
level=1;//3;//1;
tempa=0;tempb=0;etape=10;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
xpush=-48;ypush=34;
score=0;drap1=0; // drap1 agit sur l'affichage du score.
filife=3;
// bruitage menu :
silence();
abcmusic(0,abcmenu1);
abcmusic(1,abcmenu2);
// // bruitage panne sèche :
// silence();
// abcmusic(3,abcpanne);
SetRGB(palg); // Ceci sert à changer la palette de la Lynx.
SCBX(SCBg) = 0; // fond zone de jeu
SCBX(SCBp) = xpush;
relach=1;
SCBDATA(SCBscore1) = chiffrestab[0%14];
SCBDATA(SCBscore2) = chiffrestab[0%14];
SCBDATA(SCBscore3) = chiffrestab[0%14];
SCBDATA(SCBscore4) = chiffrestab[0%14];
}
}
}
//TextOut(24, 2, 2, 0, "Philippe Haouli present"); // lettre grise 32,32,32
//TextOut(24, 2, 1, 0, "Philippe Haouli"); // lettre blanche
}
/**************************************************************************
**************************************************************************/
if (etape==10) // ecran level
{
ShowScreen(); // Coordonnées de toutes les briques (voir au début de ce joyeux code).
//DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score
SCBDATA(SCBp) = pushup;
SCBX(SCBp) = xpush;//48;
SCBY(SCBp) = ypush;
SCBX(SCBr) = -200; // Coordonnée X de la raquette (ici mis hors de l'écran).
DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + score
Fchiffres(120,18,11); //L
Fchiffres(120,18+8,12); //E
Fchiffres(120,18+16,13); //V
Fchiffres(120,18+24,12); //E
Fchiffres(120,18+32,11); //L
unite = level % 10;
dizaine = level / 10 % 10;
// unité:
SCBDATA(SCBchiffres1) = chiffrestab[unite%14];
SCBX(SCBchiffres1) = 120;
SCBY(SCBchiffres1) = 50+24;
// dizaine:
SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14];
SCBX(SCBchiffres2) = 120;
SCBY(SCBchiffres2) = 50+16;
DrawSprite(SCBchiffres1); // Affichage valeur testé
if (relach==1) {
if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut
}
if (gspause==0 & xpush<8 & horszone==0) xpush=xpush+2;
if (gspause==0 & xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu.
{
xpush=7;
++tempa; // bulle info clignote doucement
if (tempa>63) tempa=1;
if (tempa>0 & tempa<32) ypush=34;
if (tempa>31) ypush=200;
if (relach==0 & horszone==0) {
if (joystick & JOY_RIGHT) {
//level=1;//3;//1;
tempa=0;tempb=0;etape=20,yplayer=39;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
xpush=-48;ypush=34;
dirf=3;ydirf=6;
//score=0;drap1=0; // drap1 agit sur l'affichage du score.
//goship=0; posx=-40; posy=39;
//filife=3;
//govil=0;goroch=0;tyroch=0;chroch=0;
//SCBDATA(SCB) = fondlvl;
// bruitage menu :
silence();
abcmusic(0,abcmenu1);
abcmusic(1,abcmenu2);
// // bruitage panne sèche :
// silence();
// abcmusic(3,abcpanne);
//SetRGB(palg); // Ceci sert à changer la palette de la Lynx.
//SCBX(SCBg) = 0; // fond zone de jeu
SCBX(SCBp) = xpush;
//SCBX(SCBr) = 200; // raquette
relach=1; // utile pour vérifier si le joueur n'appui plus sur D-pad haut
Vsync();
SwapBuffers();
}
}
}
}
/**************************************************************************
**************************************************************************/
if (etape==20) // écran jeu 1 (fleche directionnelle)
{
// raquette :
SCBDATA(SCBr) = raquet;
SCBX(SCBr) = 32;
SCBY(SCBr) = yplayer;
// balle :
SCBX(SCBball) = 42;
SCBY(SCBball) = 50;
// fleche directionnelle :
SCBDATA(SCBfd) = fdtab[dirf%7];
SCBX(SCBfd) = 39+8;
SCBY(SCBfd) = (42-6)+ydirf;
if (gspause==0)
{
if (tempa>0) {--tempa;}
if (joystick & JOY_DOWN)
{
if (tempa==0 & dirf<6) {++dirf;tempa=16;++ydirf;++ydirf;}
}
if (joystick & JOY_UP)
{
if (tempa==0 & dirf>0) {--dirf;tempa=16;--ydirf;--ydirf;}
}
if (relach==1)
{
if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut
}
if (joystick & JOY_RIGHT)
{
if (relach==0) {
SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran
dirf=dirf-3;bdirx=1;
tempa=0;etape=30;
balldirX=SCBX(SCBball);
balldirY=SCBY(SCBball);
}
}
}
DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score
}
/**************************************************************************
**************************************************************************/
if (etape==30) // écran jeu 2
{
if (gspause==0)
{
if (dirf<0) // Si la balle se dirige vers la gauche, alors...
{
if (balldirY<3)
{
balldirY=3;dirf=-dirf; // cadre gauche
// bruitage balle cadre:
silence();
abcmusic(1,abcball2);
}
if (dirf==-3) {
++Ytemp;
if (Ytemp>1) {Ytemp=0;balldirY=balldirY-3;odirx=3;} // vitesse Y réelle --> -1,5
}
if (dirf==-2) {balldirY=balldirY-1;odirx=2;} // vitesse Y --> -1
if (dirf==-1) {
++Ytemp;odirx=1;
if (Ytemp>1) {Ytemp=0;balldirY=balldirY-1;} // vitesse Y réelle --> -0,5
}
}
if (dirf==0) {odirx=0;} // vitesse X --> +2 balle se dirige droit devant.
if (dirf>0) // Si la balle se dirige vers la droite, alors...
{
if (dirf==1) {
++Ytemp;odirx=1;
if (Ytemp>1) {Ytemp=0;balldirY=balldirY+1;} // vitesse Y réelle --> +0,5
}
if (dirf==2) {balldirY=balldirY+1;odirx=2;} // vitesse Y --> +1
if (dirf==3) {
++Ytemp;
if (Ytemp>1) {Ytemp=0;balldirY=balldirY+3;odirx=3;} // vitesse Y réelle --> +1,5
}
if (balldirY>93)
{
balldirY=93;dirf=-dirf;// cadre droite (102-6 = 96-3 = 93)
// bruitage balle cadre:
silence();
abcmusic(1,abcball2);
}
}
if (odirx==0)
{
++Xtemp;
if (Xtemp>1)
{
Xtemp=0;
if (bdirx==1) balldirX=balldirX+3; // vitesse X réelle --> +1,5
if (bdirx==-1) balldirX=balldirX-3; // vitesse X réelle --> -1,5
}
}
if (odirx==1)
{
++Xtemp;
if (Xtemp>1)
{
Xtemp=0;
if (bdirx==1) balldirX=balldirX+3; // vitesse X réelle --> +1,5
if (bdirx==-1) balldirX=balldirX-3; // vitesse X réelle --> -1,5
}
}
if (odirx==2)
{
if (bdirx==1) balldirX=balldirX+1; // vitesse X --> +1
if (bdirx==-1) balldirX=balldirX-1; // vitesse X --> -1
}
if (odirx==3)
{
++Xtemp;
if (Xtemp>1)
{
Xtemp=0;
if (bdirx==1) balldirX=balldirX+1; // vitesse X réelle --> +0,5
if (bdirx==-1) balldirX=balldirX-1; // vitesse X réelle --> -0,5
}
}
if (bdirx==1) { // Si la balle monte
if (balldirX>154)
{// collision haut du cadre: changement de direction
balldirX=154;bdirx=-bdirx; // inverse la direction de la balle
if (dirf==0) {
basar=random()%3; // de 0 à 2
--basar;dirf=basar; // -1 ou 0 ou 1
}
// bruitage balle cadre:
silence();
abcmusic(1,abcball2);
}
else
{
// ici peut être test collision balle/brique
}
}
if (bdirx==-1) { // Si la balle descend
if (balldirX<18) // provisoire
{// collision bas du cadre: changement de direction
balldirX=18;bdirx=-bdirx; // inverse la direction de la balle
}
if (balldirX>34 & balldirX<42)// collision ball/raquette: changement de direction
{
//if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+24) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+24))
if (balldirY>yplayer-1 & balldirY<yplayer+24)
{
balldirX=42;bdirx=-bdirx;
// bruitage balle raquette:
silence();
abcmusic(0,abcball1);
//centre de la raquette :
//if ((balldirY+1>yplayer+7 & balldirY+1<yplayer+16) | (balldirY+4>yplayer+7 & balldirY+4<yplayer+16))
if (balldirY>yplayer+7 & balldirY<yplayer+16)
{
if (dirf==1) {dirf=0;oboucl=1;}
if (dirf==2) {dirf=1;oboucl=1;}
if (dirf==3) {dirf=2;oboucl=1;}
if (dirf==-1) {dirf=0;oboucl=1;}
if (dirf==-2) {dirf=-1;oboucl=1;}
if (dirf==-3) {dirf=-2;oboucl=1;}
}
if (oboucl==1) {oboucl=0;goto test_finish;}
//gauche de la raquette :
//if ((balldirY+1>yplayer+2 & balldirY+1<yplayer+8) | (balldirY+4>yplayer+2 & balldirY+4<yplayer+8))
if (balldirY>yplayer+2 & balldirY<yplayer+8)
{
//if (dirf==-1) {dirf=-2;oboucl=1;}
if (dirf==-1) {dirf=-1;oboucl=1;}
if (dirf==-3) {dirf=-2;oboucl=1;}
if (dirf==1) {dirf=-1;oboucl=1;}
if (dirf==2) {dirf=-2;oboucl=1;}
if (dirf==3) {dirf=-2;oboucl=1;}
if (dirf==0) {dirf=-1;oboucl=1;}
}
if (oboucl==1) {oboucl=0;goto test_finish;}
//droite de la raquette :
//if ((balldirY+1>yplayer+15 & balldirY+1<yplayer+21) | (balldirY+4>yplayer+15 & balldirY+4<yplayer+21))
if (balldirY>yplayer+15 & balldirY<yplayer+21)
{
//if (dirf==1) {dirf=2;oboucl=1;}
if (dirf==1) {dirf=1;oboucl=1;}
if (dirf==3) {dirf=2;oboucl=1;}
if (dirf==-1) {dirf=1;oboucl=1;}
if (dirf==-2) {dirf=2;oboucl=1;}
if (dirf==-3) {dirf=2;oboucl=1;}
if (dirf==0) {dirf=1;oboucl=1;}
}
if (oboucl==1) {oboucl=0;goto test_finish;}
//exgauche de la raquette :
//if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+3) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+3))
if (balldirY>yplayer-1 & balldirY<yplayer+3)
{
if (dirf==-1) {dirf=-2;oboucl=1;}//break;
if (dirf==-2) {dirf=-3;oboucl=1;}
if (dirf==1) {dirf=-2;oboucl=1;}
if (dirf==2) {dirf=-3;oboucl=1;}
if (dirf==3) {dirf=-3;oboucl=1;}
if (dirf==0) {dirf=-2;oboucl=1;}
}
if (oboucl==1) {oboucl=0;goto test_finish;}
//exdroite de la raquette :
//if ((balldirY+1>yplayer+20 & balldirY+1<yplayer+24) | (balldirY+4>yplayer+20 & balldirY+4<yplayer+24))
if (balldirY>yplayer+20 & balldirY<yplayer+24)
{
if (dirf==1) {dirf=2;oboucl=1;}
if (dirf==2) {dirf=3;oboucl=1;}
if (dirf==-1) {dirf=2;oboucl=1;}
if (dirf==-2) {dirf=3;oboucl=1;}
if (dirf==-3) {dirf=3;oboucl=1;}
if (dirf==0) {dirf=2;oboucl=1;}
}
if (oboucl==1) {oboucl=0;goto test_finish;}
}
}
else
{
// ici peut être test collision balle/brique
}
}
//}
test_finish:
if (joystick & JOY_DOWN) {
yplayer=yplayer+2;
if (yplayer>75) {yplayer=75;} // (102-24 = 78-3 = 75) ; 24 = largeur de la raquette
}
if (joystick & JOY_UP) {
yplayer=yplayer-2;
if (yplayer<3) {yplayer=3;}
}
}
SCBX(SCBball)=balldirX;SCBY(SCBball)=balldirY; // appliquer les variables balldirX et balldirY aux coordonnées de la balle.
SCBY(SCBr) = yplayer;
ShowScreen(); // Coordonnées de toutes les briques (voir au début de ce joyeux code).
// Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques :
DrawSprite(SCBg);
}
/**************************************************************************
**************************************************************************/
/* test
//atest=balldirX;//yplayer;//speedX;//dirf;//etape;
atest=etape;//SCBCTL0(SCBbr);
unite = atest % 10;
dizaine = atest / 10 % 10;
centaine = atest / 100 % 10;
// unité:
SCBDATA(SCBchiffres1) = chiffrestab[unite%14];
SCBX(SCBchiffres1) = 100;
SCBY(SCBchiffres1) = 53;
// dizaine:
SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14];
SCBX(SCBchiffres2) = 100;
SCBY(SCBchiffres2) = 53-8;
// centaine:
SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0
SCBX(SCBchiffres3) = 100;
SCBY(SCBchiffres3) = 53-16;
*/
//SCBDATA(SCBchiffres1) = chiffrestab[10%14];
//SCBX(SCBchiffres1) = 40;
//SCBY(SCBchiffres1) = yplayer;
//SCBY(SCBchiffres1) = yplayer+23;
/*** Tests important des coordonnées des images ***/
// SCBDATA(SCBchiffres1) = chiffrestab[10%14];
// SCBX(SCBchiffres1) = SCBX(SCBball);
// SCBY(SCBchiffres1) = SCBY(SCBball);
/*** fin de ces tests de coordonnée ***/
// DrawSprite(SCBchiffres1); // Affichage valeur testé
//if (etape==2 & gspause>0)
if (gspause>0) {
SCBDATA(SCB) = ipause;
SCBHS(SCB) = 256;SCBVS(SCB) = 256;
SCBX(SCB) = 73;SCBY(SCB) = 30;
DrawSprite(SCB);
}
//Vsync();
//SwapBuffers();
}
/**************************************************************************
** FIN de la BOUCLE PRINCIPALE **
**************************************************************************/
}