


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