10Fermer12
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 ** **************************************************************************/ }