Fermer2
philip-lynxLe 25/11/2010 à 20:44
Fission est un casse-brique, la 0.1 est la toute première version "jouable", donc pas encore de brique à l'écran. fatigue Et comme d'hab, console tenu à la verticale, bon test. smile

tromb Fichier joint : fission_01.o
Et là un peu de lecture : /* Fission (casse brique) 0.1 - LYNX - kit BLL (newcc65) 24/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX - video game */ #include <stdlib.h> #include <lynx.h> #include <lynxlib.h> //{ extern void silence(); extern void abcmusic(); extern void update_music(); char abcmusic0[]; char abcmusic1[]; char abcmusic2[]; char abcmusic3[]; char abcmenu1[]; char abcmenu2[]; char abcbric[]; char abcaptvir[]; char abcboum[]; char abcpanne[]; char abces[]; #asm xref _abcmenu1 xref _abcmenu2 xref _abcbric xref _abcaptvir xref _abcboum xref _abcpanne xref _abces xref _abcmusic0 xref _abcmusic1 xref _abcmusic2 xref _abcmusic3 _abcmenu1 dc.b "O2X7I1V32T20R54H7K8" dc.b "|:C4" dc.b 0 _abcmenu2 dc.b "O3X7I1V16T20R54H7K12" dc.b "|:c2" dc.b 0 _abcbric dc.b "O4X7I1V16T20R54H7K12" dc.b "|:C1" dc.b 0 _abcaptvir dc.b "O2X15I1V32T1R14H6K30" dc.b "|:C4D4C4E4D4C4D4" dc.b 0 _abcboum dc.b "O2X248I1V16T50R80H2K2" dc.b "|:C2" dc.b 0 _abcpanne dc.b "O4X6I1V127T6R5H6K6" dc.b "|:C4D4C4E4D4C4D4E4C4" dc.b 0 _abces dc.b "O4X6I1V127T6R16H2K3" dc.b "|:C2D2C2E2D2C2D2E2C2" dc.b 0 _abcmusic0 dc.b "O2X3I1V70T20R54H2K1" dc.b "|:C4O3T2C4" dc.b 0 _abcmusic1 dc.b "O2X7I0V45T20R80H8K1" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 _abcmusic2 dc.b "O1X7I0V45T20R40H2K3" dc.b "zzzzzzzz" dc.b "|:CDEEDEFFEFGEFDGG" dc.b "I1CDEEDEFFEFGEFDCC" dc.b "I0cBAABAGGAGFFEDEE" dc.b "cBAABAGGAGFFEDCC" dc.b "ECDDFDEEGEFGABcc" dc.b "ECDDFDEEGEFGABcc" dc.b "CDEEDEFFEFGEFDGG" dc.b "CDEEDEFFEFGEFDCC:" dc.b 0 _abcmusic3 dc.b "O2X7I0V45T20R80H8K1" dc.b "z4z4z2" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 #endasm //} /* LYNX-specific #defines: */ #define JOY_RIGHT 0x10 #define JOY_LEFT 0x20 #define JOY_DOWN 0x40 #define JOY_UP 0x80 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT 0x02 #define BUTTON_RIGHT 0x01 #define BUTTON_PAUSE 0x01 #define SC BSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro #define SC BTILT(a) (*(uint *)((a)+17)) // déformation, macro char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); char pali[]={ 0x00,0x0F,0x02,0x03,0x0A,0x04,0x05,0x06,0x07,0x0B,0x08,0x09,0x04,0x0B,0x0C,0x01, 0x00,0xFF,0x22,0x33,0xAA,0x44,0x55,0x66,0x77,0x00,0x88,0x99,0x53,0xBB,0xCC,0x11}; char palg[]={ 0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x03,0x02,0x00, 0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x63,0x52,0x21}; /***************************************************************************** ** Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp ** ** set image01=imole.bmp SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01% cmd ** ** Le point d'action de l'image imole est mis au centre de celle-ci, ** ** 72/2 = 36 (-a036036). Le but de la manoeuvre est de réaliser un zoom ** ** correctement. ** *****************************************************************************/ // Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp // set image01=imole.bmp // SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01% // cmd // ci-dessus, le point d'action de l'image imole est mis au centre de celle-ci, 72/2 = 36 (-a036036). extern char ipause[]; // image game over, d'une taille de 13*43; extern char ititre[]; // image titre, d'une taille de 15*49; extern char iname[]; // image nom/prénom de auteur, d'une taille de 93*9; extern char imole[]; // image molecule, d'une taille de 72*72; char SCB[]; #asm _SCB dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char fondg[]; // image fond game, d'une taille de 160*102; char SCBg[]; #asm _SCBg dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char pushup[]; // image appuyez sur haut, d'une taille de 48*35; char SCBp[]; #asm _SCBp dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char raquet[]; // image raquette, d'une taille de 8*24; char SCBr[]; #asm _SCBr dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ char chiffres[]; // // clip du sprite chiffres: 0123456789.LEV extern char bc000000[]; extern char bc000001[]; extern char bc000002[]; extern char bc000003[]; extern char bc000004[]; extern char bc000005[]; extern char bc000006[]; extern char bc000007[]; extern char bc000008[]; extern char bc000009[]; extern char bc000010[]; extern char bc000011[]; extern char bc000012[]; extern char bc000013[]; char *chiffrestab[14] = {bc000000, bc000001, bc000002, bc000003, bc000004, bc000005, bc000006, bc000007, bc000008, bc000009, bc000010, bc000011, bc000012, bc000013}; char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite #asm _SCBchiffres1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char fleche[]; // // clip du sprite fleches extern char fd000000[]; extern char fd000001[]; extern char fd000002[]; extern char fd000003[]; extern char fd000004[]; extern char fd000005[]; extern char fd000006[]; char *fdtab[7] = {fd000000, fd000001, fd000002, fd000003, fd000004, fd000005, fd000006}; char SCBfd[]; // déclaration d'un nouveau controleur de sprite #asm _SCBfd dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char fball[]; // image raquette, d'une taille de 8*24; char SCBball[]; #asm _SCBball dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char fbriq[]; // // clip du sprite brique, d'une taille de 6*14, normale, dure et incassable. extern char br000000[]; extern char br000001[]; extern char br000002[]; char *brtab[3] = {br000000, br000001, br000002}; char SCBbr[]; // déclaration d'un nouveau controleur de sprite #asm _SCBbr dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ int posx,posy,level,score,compteur,xpush,ypush,relach; int i; char tempa,tempb,tempc,tempd,tempe,etape,filife,drap1,gspause,gsblip,mhaut,mbas; // de -128 à 127 int molescx,molescy,gmole; int atest,unite,dizaine,centaine; // ydirf --> déplacer légérement la flèche. // dirf --> direction fleche de 0 à 6, mais aussi direction Y de la balle (-3 -2 -1 0 +1 +2 +3) (ici gauche/droite car LYNX verticale). // bdirx --> direction X de la balle (ici haut/bas car le jeu se joue la LYNX tenu à la verticale). char ydirf,dirf,bdirx,speedX,oboucl,basar; int balldirX,balldirY; int yplayer; // assembler vertical retrace syncronisation routine void Vsync() { #asm vretrace: lda $fd0a bne vretrace #endasm } // Hors de l'assembleur, point de salut... // L'utilisation de la procedure suivante, lors de l'écran d'action, // fait ramer le jeu. void Fchiffres(clx,cly,classe) int clx,cly,classe; { SCBDATA(SCBchiffres1) = chiffrestab[classe%14]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /************************************************************************** ** ** ** ** **************************************************************************/ 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) = fleche; SCBX(SCBbr) = -200; SCBY(SCBbr) = 0; SCBDATA(SCBbr) = fbriq; // 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; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for( ; ; ) { 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-(molescx/gmole);SCBY(SCB) = 42-(molescy/gmole) //SCBX(SCB) = SCBX(SCB) - (molescx/6); SCBY(SCB) = SCBY(SCB) - (molescy/6); 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); 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); 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); SetRGB(palg); // Ceci sert à changer la palette de la Lynx. SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; relach=1; } } } } /************************************************************************** **************************************************************************/ if (etape==10) // ecran level { 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 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) 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) { 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) = 40; SCBY(SCBball) = 48; // 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 } /************************************************************************** **************************************************************************/ if (etape==30) // écran jeu 2 { if (gspause==0) { if (dirf<0) // Si la balle se dirige vers la gauche, alors... { balldirY=balldirY-1; if (dirf==-3) {speedX=3;} if (dirf==-2) {speedX=2;} if (dirf==-1) {speedX=1;} if (balldirY<3) {balldirY=3;dirf=-dirf;} // cadre gauche } if (dirf==0) // Si la balle se dirige droit devant, alors... { speedX=0; } if (dirf>0) // Si la balle se dirige vers la droite, alors... { balldirY=balldirY+1; if (dirf==1) {speedX=1;} if (dirf==2) {speedX=2;} if (dirf==3) {speedX=3;} if (balldirY>93) {balldirY=93;dirf=-dirf;} // cadre droite (102-6 = 96-3 = 93) } ++tempa; if (tempa>speedX) { tempa=0; if (bdirx==1) { balldirX=balldirX+2; // ball 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 } } } if (bdirx==-1) { balldirX=balldirX-2;// ball descend if (balldirX>32 & balldirX<40)// collision ball/raquette: changement de direction { if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+24) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+24)) { balldirX=40;bdirx=-bdirx; //gauche de la raquette : if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+4) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+4)) { if (dirf==-1) {dirf=-3;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;} //gauche de la raquette : if ((balldirY+1>yplayer+3 & balldirY+1<yplayer+9) | (balldirY+3>yplayer+4 & balldirY+4<yplayer+9)) { if (dirf==-1) {dirf=-2;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;} //centre de la raquette : if ((balldirY+1>yplayer+8 & balldirY+1<yplayer+15) | (balldirY+4>yplayer+8 & balldirY+4<yplayer+15)) { 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;} //droite de la raquette : if ((balldirY+1>yplayer+14 & balldirY+1<yplayer+20) | (balldirY+4>yplayer+14 & balldirY+4<yplayer+20)) { if (dirf==1) {dirf=2;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+19 & balldirY+1<yplayer+24) | (balldirY+4>yplayer+19 & balldirY+4<yplayer+24)) { if (dirf==1) {dirf=3;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;} } } } } 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; // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle : DrawSprite(SCBg); } /************************************************************************** **************************************************************************/ /* test */ //atest=balldirX;//yplayer;//speedX;//dirf;//etape; atest=etape;//SCBCTL0(SCBbr); unite = atest % 10; dizaine = atest / 10 % 10; centaine = score / 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; 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 ** **************************************************************************/ }