Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Connexion

Récupérer mon mot de passe

Chatbox externe


Derniers sujets
» [JEU] Mon voisin du dessous
Lun 4 Déc 2017 - 8:59 par persalteas

» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026

» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro

» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41

» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro

» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++

» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++

» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++

» flappy bird
Jeu 15 Déc 2016 - 10:23 par Ti64CLi++

Partenaires
TI-Planet Espace-TI : Forum

Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)

Les posteurs les plus actifs du mois
Ti64CLi++
 
persalteas
 


ZGOAL : Tirs aux buts!

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

ZGOAL : Tirs aux buts!

Message par m@thieu41 le Mar 17 Juin 2014 - 20:27

Hey tout le monde! Smile

Pour le Ti-Concours, en asm z80, il fallait programmer un jeux de tirs aux buts : le sujet.
Je vous présente mon projet : ZGOAL !
Notez que ça tombe bien avec la coupe du monde Wink.

Vous jouez à tour de rôle contre une IA comme tireur et comme goal. La jauge à gauche du joueur indique la vitesse de tir.

Un petit screen:


Les commandes:
Se déplacer: les flèches directionnelles.
Tirer : [2nde].
Quitter : [clear].

Les liens de téléchargement (82stats/82stats.fr/83 uniquement):
ZGOAL
GOAL
Lancez le prgm GOAL, qui se charge de lancer le prgm ZGOAL.
Sinon, vous pouvez lancer directement le prgm ZGOAL en faisant Send(9prgmZGOAL (il est en unsquished donc ça marche). Send = Envoi pour les modèles français.

/!\ Ne lancez pas ce programme sur un autre modèle, vous connaissez les risques Wink.
Une version 83+/84+ arrive, il y a juste 2-3 détails à peaufiner.

Il fait 4Ko environ, je vais voir à le porter pour un shell, pour réduire la taille du prgm Smile.


Et enfin, pour les courageux qui voudraient lire le code pour me donner des conseils :P (bon vu qu'il y a pas trop de personne qui code en asm ici Razz):
Code:
.nolist
#include "ion.inc"
.list

#ifdef TI83P
 .org progstart-2
 .db $bb,$6d
#else
 .org progstart
#endif

;Début du prgm
start:
 bcall _indicatorOff
 bcall _homeup
 
Menu:
        ;Le menu
        ld de,grbuf
        ld hl,FondMenu
        ld bc,12 * 64
        ldir

Menu_loop:

        ;On affiche l'écran
        call DispBallMenu
        bcall _copygbuf
        call DispBallMenu
        
        ;On teste si on veut quitter
        bcall _getcsc
        cp skClear
        ret z
        
        ;On teste si on change de choix
        cp skUp
        jr z,Choix1

        cp skDown
        jr z,Choix2
        
        ;On teste si on a choisi
        cp skEnter
        jr z,Menu_Done

        cp sk2nd
        jr nz,Menu_loop
        
Menu_Done:
        ;On agit en fonction de la sélection
        ld a,(ChoixMenu)
        or a
        ret nz

        call StartGame
        jr Menu

Choix1
        xor a
        ld (ChoixMenu),a
        jr Menu_loop

Choix2:
        ld a,1
        ld (ChoixMenu),a
        jr Menu_loop

StartGame:
 ;On affiche les buts
 bcall _clrlcdfull
 bcall _cleargbuf
 
        ld bc,$6040 - $1901
        ld de,$6040 - $4401
        bcall _darkline
        
        inc b
        dec c
        ld d,b
        ld e,$40 - $12
        bcall _darkline
        
        ld b,$60 - $45
        ld d,b
        bcall _darkline
        
        inc d
        inc d
        ld b,d
        dec c
        dec c
        bcall _darkline
        
        push de
        
        ld b,$60 - $1A
        ld d,b
        bcall _darkline
        
        push de
        
        inc c
        ld e,c
        dec b
        ld d,$60 - $42
        bcall _darkline

        pop bc
        ld d,1
        inc b
        bcall _ipoint
        
        dec b
        ld de,$6040 - $1E0E
        bcall _darkline

        pop bc
        ld d,1
        dec b
        bcall _ipoint

        inc b
        ld d,$60 - $3F
        bcall _darkline
        
        ld c,e
        ld b,$60 - $1E
        bcall _darkline
        push bc
        
        ld bc,$6040 - $4204
        bcall _darkline
        
        pop de
        ld b,$60 - $1B
        bcall _darkline

        ld bc,$40 - $12
        ld de,$40 - $6012
        bcall _darkline

        ld bc,$6040 - $1029
        ld de,$6340 - $5029
        bcall _darkline

        ld d,b
        ld e,$40 - $12
        bcall _darkline

        ld b,$63 - $50
        ld d,b
        bcall _darkline
        
        ;On trace la zone de scores (les 5 derniers tirs)
        ld bc,$40 - $01
        ld de,$1940 - $01
        bcall _darkline

        ld c,$40 - $06
        ld e,c
        bcall _darkline

        ld c,$40 - $0B
        ld e,c
        bcall _darkline

        ld e,$40 - 2
        ld l,6
TraceScores_loop:
        ld d,b
        bcall _darkline
        ld a,5
        add a,b
        ld b,a
        
        dec l
        jr nz,TraceScores_loop
        
        ;On mets les scores etc à 0
        xor a
        ld (ScoreIA),a
        ld (ScoreJoueur),a
        ld a,10
        ld (ManchesRestantes),a
        
        ld hl,$54F
        ld (pencol),hl
        ld hl,TextScores
 set textwrite,(IY+sgrflags)
        bcall _vputs
 res textwrite,(IY+sgrflags)
        
Game:
        ;On teste s'il reste des manches, on les rajoute sinon
        ld a,(ManchesRestantes)
        or a
        jr nz,GameStart
        
        ;On rajoute 1 tir chacun
        inc a
        inc a
        ld (ManchesRestantes),a
        
        ;On décale le tableau de scores
DecalerScores:
        ;On décale les 9 lignes concernées
        ld hl,grbuf+12
        ld b,9
DecalerScores_loop:
        push bc
        ;3 octets concernés par ligne
        inc hl
        inc hl
        ld b,3
        
        xor a
        ld e,a

DecalerScores_loop2:
        ;On traite l'octet
        ld a,(hl)
        push bc
        ;Sur 5 bits
        ld b,5

DecalerScores_loop3:
        rl e
        rl a
        djnz DecalerScores_loop3
        
        ;On fait passer les bits récupérés à gauche de e
        rl e
        sla e
        sla e
        sla e
        
        ;On stocke l'octet et on recommence
        pop bc
        ld (hl),a
        dec hl
        djnz DecalerScores_loop2
        
        ;On change de ligne
        ld de,13
        add hl,de
        pop bc
        djnz DecalerScores_loop

        ;On décale les pxl à droite de la barre si on avait perdu (il n'est pas compris dans les 3octets)
        ld b,2
        ld e,0

TestPxl_loop:
        push bc
        ;On teste s'il est allumé
        ld a,$40 - 2
        sub e
        ld c,a
        ld b,$18
        push bc
        ld d,3
        bcall _ipoint
        pop bc
        jr z,TestPxlNo

        ;On l'éteint
        ld d,2
        bcall _ipoint

        ;On allume l'autre
        ld b,19
        bcall _ipoint

TestPxlNo:
        ld e,5
        pop bc
        djnz TestPxl_loop

        ;On trace les lignes manquantes
        ld bc,$1340 - 6
        ld de,$1940 - 6
        bcall _darkline

        ld bc,$1440 - 1
        ld de,$1440 - 11
        bcall _darkline
        
        xor a
        ld h,a
        ld b,a
        ld d,a
        bcall _iline
        
GameStart:
        ;On met les positions etc initiales
        xor a
        ld (BallStoped),a
        ld (deplacementXGardien),a
        ld (MoveTireurIANombresDeplacements),a
        ld (MoveTireurIADeplacementsDone),a
        ld a,45
        ld (posXTireur),a
        ld (posXGardien),a
        ld a,$33
        ld (posYTireur),a
        ld a,80
        ld (posYGardien),a
        ld a,$C9
        ld (BallSent),a
        ld hl,45*8
        ld (RealPosXGardien),hl
        
Game_loop:
        ;On charge les joueurs
        call drawGardienChange
        call drawTireurChange
        call drawBall

        ;On affiche l'écran
        bcall _copygbuf
        
        call RALENTIR
        
        ;On efface les joueurs
        call drawGardien
        call drawTireur
        call drawBall
        
        ;On calcule les nouvelles coordonnées
        call MoveGardien
        call MoveTireur
        call MoveBall

        ;On teste si on veut quitter
        bcall _getcsc
        cp skClear
        ret z
        
        ;On teste si la balle est à l'arrêt
BallStoped = $+1
        ld a,0
        or a
        jr z,Game_loop
        
        ;Le message de fin
        ld hl,$526
        
        push af
        ;Le tableau de scores
        ld a,(ManchesRestantes)
        ld d,a
        and 1
        jr z,TourJoueur
        ld a,5
TourJoueur:
        ld e,a
        ld a,$40 - 3
        sub e
        ld c,a

        ld a,d
        dec a
        srl a
        ld d,a
        add a,d
        add a,a
        add a,d
        ld b,a
        ld a,22
        sub b
        ld b,a
        
        pop af
        ;On teste si on a marqué
        dec a
        ld de,TextArretFormidable
        jp nz,PasMarque

        ld de,TextRate

        ld a,(posXBall)
        cp $60 - $1E
        jp p,PasMarque
        cp $60 - $49
        jp m,PasMarque

        ;Qulqu'un a marqué
        ld a,(ManchesRestantes)
        rra
        jr c,IAMarque

        ;Le joueur a marque
        ld a,(ScoreJoueur)
        inc a
        ld (ScoreJoueur),a

        push hl
        push de
        push bc

        ;On affiche le score
        ld hl,$54F
        cp 10
        jp m,NoDepassement
        ld de,-4
        add hl,de
        
NoDepassement:
        ld (pencol),hl
        push hl
 set textwrite,(IY+sgrflags)
 bcall _setxxop1
 ld a,3
 bcall _dispop1a
 res textwrite,(IY+sgrflags)
 ld a,3
 pop hl
        ld (pencol),hl
 bcall _dispop1a
 
 ;On répare les dégats (la barre de séparation se fait rogner)
 ld bc,$4F40 -9 + $400
 ld de,$4F40 -9 + $500
 bcall _darkline
 
        pop bc
 pop de
 pop hl
        jr JoueurMarque

IAMarque:
        ;L'IA
        ld a,(ScoreIA)
        inc a
        ld (ScoreIA),a
        
        push hl
        push de
        push bc

        ;On affiche le score
        ld hl,$54F + 8
        ld (pencol),hl
 set textwrite,(IY+sgrflags)
 bcall _setxxop1
 ld a,3
 bcall _dispop1a
 res textwrite,(IY+sgrflags)
        ld hl,$54F + 8
        ld (pencol),hl
 ld a,3
 bcall _dispop1a
 
 pop bc
 pop de
 pop hl

JoueurMarque:
        
        ;on complète l'affichage des points
        ld d,1
        bcall _ipoint
        inc b
        bcall _ipoint
        dec c
        bcall _ipoint
        dec b
        bcall _ipoint
        
        ;On charge le message adéquat
        ld de,TextGOAL
        push de
        ld l,$22
        jr DispFinalMessage

PasMarque:
        ;On complète l'affichage des scores
        inc b
        inc b
        inc c
        ld a,c
        push de
        ld d,2
        bcall _ipoint
        dec c
        dec b
        bcall _ipoint
        dec c
        dec b
        bcall _ipoint
        dec c
        dec b
        bcall _ipoint
        
DispFinalMessage:
        ;On affiche le message pré-chargé
        ld (pencol),hl
        ld b,$FF
DispFinalMessage_loop:
        call RALENTIR
        djnz DispFinalMessage_loop

        pop hl
        set textInverse,(iY+textflags)
        bcall _vputs
        res textInverse,(iY+textflags)

        ld b,$FF
DispFinalMessage_loop2:
        call RALENTIR
        djnz DispFinalMessage_loop2
        
        bcall _getcsc
        bcall _getkey

        ;On décrémente le nombre de manches restantes
ManchesRestantes = $+1
        ld a,10
        dec a
        ld hl,ManchesRestantes
        ld (hl),a

;On teste si quelqu'un a remporté le match ou s'il faut poursuivre
ScoreJoueur = $+1
        ld a,0
ScoreIA = $+1
        sub 0
        jp z,Game

        ;On teste s'il reste assez de manches
        ld c,a
        ld a,(hl)
        jp m,TestIfEnouthManchesForPlayer
        
        ;C'est l'IA qui perd: on doit tester s'il lui reste une partie de plus (elle joue en 2eme)
        srl a
        adc a,0
        
        sub c
        jp p,Game

;Fin : Joueur Gagne
        ld hl,TextGagne
        jr FinPartie
 
        
TestIfEnouthManchesForPlayer:
        srl a
        add a,c
        jp p,Game
;Fin : IA Gagne
        ld hl,TextPerdu
FinPartie:
        push hl
        ld c,$1A
        xor a
        ld de,$601A
        ld b,8
FinPartie_loop:
        push bc
        ld b,a
        inc e
        ld c,e
        bcall _darkline
        pop bc
        djnz FinPartie_loop

        ld hl,$1E14
        ld (pencol),hl
        pop hl
        bcall _vputs
        bcall _getkey
 ret
 
 
;-------------------------------------
;On déplace la Balle
MoveBall:
        ld a,(BallSent)
        or a
        ret nz
        
        ;On déplace la balle si elle a été lancée
        ld a,(posYBall)
VitesseBall = $+1
        sub 3
        ld (posYBall),a
        ret


 
;-------------------------------------
;On déplace le gardien

;Gestion de l'IA (elle s'efforce de suivre le tireur (ou la balle))
MoveGardienIA:
        ld a,(BallSent)
        or a
        ld hl,posXBall
        jr z,MoveGardienIABall
        ld hl,posXTireur
        
MoveGardienIABall:
        
        ld a,(posXGardien)
        cp (hl)
        ld a,0
        jr z,MoveGardienTest
        
        jp p,MoveGardienIALeft

        ld a,4
        jr MoveGardienTest
        
MoveGardienIALeft:
        ld a,2
        jr MoveGardienTest


MoveGardien:
        ;Le gardien ralenti s'il est en mouvement
deplacementXGardien = $+1
        ld a,0
        or a
        jr z,NoDeplacementGardien
        bit 7,a
        jr z,DeplacementGardienRight
        
        inc a
        cp $F4 - 10
        jr nz,NoDeplacementGardien
        inc a
        jr NoDeplacementGardien
        
DeplacementGardienRight:
        dec a
        cp $1A
        jr nz,NoDeplacementGardien
        dec a
        

NoDeplacementGardien:
        ld (deplacementXGardien),a
        push af
        
        ld a,(ManchesRestantes)
        rra
        jr nc,MoveGardienIA

        xor a
        out (1),a
        
        ;On teste l'appui sur les flèches
        xor a
        out (1),a
        ld a,Fleches
        out (1),a
        in a,(1)
        
        cpl
MoveGardienTest:
        or a
        call nz,MoveGardienYes
        
        ;On gère le déplacement horizontal
RealPosXGardien = $+1
        ld hl,45*8
        pop af
        sra a
        sra a
        ld e,a
        xor a
        bit 7,e
        jr z,MoveGardienLeft
        dec a
MoveGardienLeft:
        ld d,a
        add hl,de
        ld (RealPosXGardien),hl
        
        rr h
        rr l
        xor a
        rr h
        rr l
        xor a
        rr h
        rr l
        ld a,l
        


        ;On teste un dépassement
        cp $47
        jp m,testPosXUnder
        ld a,$47
        ld hl,$47 * 8
        jr saveRealGardienPosX

testPosXUnder:
        cp $12
        jp p,posXGardienOk
        ld a,$12
        ld hl,$12 * 8
saveRealGardienPosX:
        ld (RealPosXGardien),hl

posXGardienOk:
        ;On sauve la position validée
        ld (posXGardien),a
 ret


;On a appuye sur une flèche
MoveGardienYes:
        rra
        jr nc,MoveGardienNoDown

        ;On va en bas
        ld hl,posYGardien
        inc (hl)

MoveGardienNoDown:

        rra
        jr nc,MoveGardienNoLeft

        ;On va à gauche
        ld hl,deplacementXGardien
        dec (hl)
        dec (hl)

MoveGardienNoLeft:

        rra
        jr nc,MoveGardienNoRight

        ;On va à droite
        ld hl,deplacementXGardien
        inc (hl)
        inc (hl)

MoveGardienNoRight:

        rra
        ret nc

        ;On va en haut
        ld hl,posYGardien
        dec (hl)
 ret


;-----------------------------------------
;Deplacement du tireur

PositionsTireurIA:
        .db 0,0,0,0
        .db 0,0,0,0

MoveTireurIA:
MoveTireurIANombresDeplacements = $+1
        ld a,0
        or a
        jr nz,MoveTireurIADeplace
        
        ;On tire le nombre de positions
        ld b,7
        call random
        inc a
        ld (MoveTireurIANombresDeplacements),a
        
        ;On tire les positions
        ld b,a
        ld hl,PositionsTireurIA
        
MoveTireurIAPosition:
        push bc
        ld b,$47 - $12
        call random
        add a,$12
        ld (hl),a
        inc hl
        pop bc
        djnz MoveTireurIAPosition
        
MoveTireurIADeplace:
        ;Il ne se déplace 2 fois sur ~3
        ld a,%11011010
        rlca
        ld (MoveTireurIADeplace+1),a
        ret nc
        
MoveTireurIADeplacementsDone = $+1
        ;On teste quelle position on doit faire
        ld de,0
        ld hl,PositionsTireurIA
        add hl,de

        ld a,(posXTireur)
        cp (hl)
        jr z,PositionTireurAtteinte
        
        jp m,MoveTireurIARight
        ;On doit aller à gauche
        ld a,2
        jr MoveTireurTest

MoveTireurIARight:
        ;On doit aller à droite
        ld a,4
        jr MoveTireurTest


PositionTireurAtteinte:
        ;Si on a finis de le déplacer
        ld a,(MoveTireurIANombresDeplacements)
        dec a
        cp e
        jr z,SendBall
        
        ;Sinon on passe à la position suivante
        ld hl,MoveTireurIADeplacementsDone
        inc (hl)
        ret

MoveTireur:
        ld a,(ManchesRestantes)
        rra
        jr c,MoveTireurIA
        
        xor a
        out (1),a

        ;On teste l'appui sur les flèches
        xor a
        out (1),a
        ld a,Fleches
        out (1),a
        in a,(1)

        cpl
MoveTireurTest:
        or a
        jr z,TestSendBall
        
;On a appuye sur une flèche
        rra
        jr nc,MoveTireurNoDown

        ;On va en bas
        ld hl,posYTireur
        inc (hl)

MoveTireurNoDown:

        rra
        jr nc,MoveTireurNoLeft

        ;On va à gauche
        ld hl,posXTireur
        dec (hl)

MoveTireurNoLeft:

        rra
        jr nc,MoveTireurNoRight

        ;On va à droite
        ld hl,posXTireur
        inc (hl)

MoveTireurNoRight:

        rra
        jr nc,TestSendBall

        ;On va en haut
        ld hl,posYTireur
        dec (hl)
        
TestSendBall:
        ld a,(ManchesRestantes)
        rra
        ret c
        
        ;La balle part si on a appuyé sur 2nde ou entrer
        xor a
        out (1),a
        ld a,Haut
        out (1),a
        in a,(1)

        cp kp2nd
        ret nz
        
SendBall:
        ld a,(BallSent)
        or a
        ret z
        
        ;La balle est envoyé avec les coordonnées et la vitesse adéquates
        xor a
        ld (BallSent),a
        
        ld a,(posXTireur)
        sub 1
        adc a,0
        ld (posXBall),a
        
        ld a,(posYTireur)
        dec a
        dec a
        dec a
        rla
        rla
        ld (posYBall),a
        
        ld a,(powerOfShoot)
        
        inc a
        ld (VitesseBall),a
 ret
 
 
;-------------------
;Ralentir le prgm
;Conserve les registres

RALENTIR:
        push bc
        ld bc,$FF
RALENTIR_loop:
        push bc
        pop bc
        djnz RALENTIR_loop
        pop bc
 ret


;==========
;Ressources
;==========

;##############################################################
;Sprites

ImgGardienBras = $+2
ImgGardien:
        .db %01110
        .db %01010
        .db %10100
        .db %11111
        .db %00101
        .db %01010
        .db %11011

ImgTireurPieds = $+6
ImgTireur:
        .db %1001110
        .db %1001110
        .db %1010100
        .db %1011111
        .db %1000101
        .db %1001010
        .db %0011011

ImgBall:
        .db %0110
        .db %1001
        .db %1001
        .db %0110

ImgBallMenu:
        .db %01110
        .db %10111
        .db %11101
        .db %11011
        .db %01110
        
FondMenu:
    .db     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,255,255,255,255,96,0
    .db     0,7,255,192,0,7,3,255,255,255,255,255,255,255,255,224,0,7,255,255,255,255,255,255,255,255,255,224,0,0,0
    .db     0,0,152,159,254,255,255,240,96,0,0,0,1,192,204,255,255,239,254,112,96,0,0,1,224,126,127,231,255,254,127
    .db     192,96,0,0,0,62,7,254,127,255,63,255,0,96,0,0,0,39,252,31,255,255,251,252,152,96,0,0,17,34,31
    .db     255,153,145,255,204,156,96,0,0,113,34,98,15,255,255,196,196,252,96,0,0,63,178,34,56,0,12,199,255,216,96
    .db     0,0,17,255,255,56,31,13,255,196,128,96,0,0,113,18,255,120,61,136,204,196,128,96,0,0,63,146,34,124,118
    .db     200,204,196,248,64,0,0,25,255,255,188,107,200,204,223,192,64,0,0,25,18,35,30,123,136,255,252,0,64,0,0
    .db     125,18,35,27,55,141,228,196,0,96,0,0,31,250,35,13,30,12,68,192,96,96,0,0,17,63,254,13,0,12,68
    .db     192,144,64,0,0,113,18,15,13,0,12,69,251,16,64,0,0,127,16,17,159,0,13,255,195,16,96,0,0,19,240
    .db     16,190,0,127,196,199,240,96,0,0,17,23,152,252,0,12,68,206,16,64,0,0,17,5,143,204,0,12,68,222,8
    .db     96,0,0,63,134,143,216,0,12,127,144,15,224,0,0,0,3,143,236,0,63,228,22,79,224,0,0,0,3,152,230
    .db     0,0,68,63,8,224,0,0,0,3,184,227,0,0,68,47,60,96,0,0,0,1,231,1,224,0,7,111,124,96,0
    .db     0,0,1,79,131,240,7,254,127,212,96,0,0,0,1,153,195,28,63,0,255,146,224,0,0,0,1,224,111,142,0
    .db     0,131,138,224,0,0,0,0,192,61,219,0,1,131,7,160,0,0,0,0,0,25,243,192,1,135,7,160,0,0,0
    .db     0,0,8,191,224,1,15,3,160,0,0,0,0,0,15,131,240,3,30,15,255,0,0,0,0,0,15,224,216,3,156
    .db     0,0,0,0,0,0,0,15,254,124,3,248,0,0,0,0,0,0,0,255,158,31,7,112,0,0,0,0,0,0,0
    .db     255,253,127,255,112,0,0,0,0,0,0,0,0,1,127,251,240,0,0,0,0,0,0,0,0,0,0,55,240,0,0
    .db     0,0,0,0,0,0,0,3,237,144,0,0,0,0,0,0,0,0,0,3,184,144,0,0,0,0,0,0,0,0,0
    .db     3,240,208,0,0,0,0,0,0,0,0,0,0,112,208,0,0,0,7,255,255,255,255,255,255,255,223,255,255,224,7
    .db     255,255,255,255,255,255,255,248,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0
    .db     112,0,0,0,0,0,57,10,32,0,0,0,240,0,0,0,0,0,37,21,64,0,0,0,224,0,0,0,0,0,57
    .db     28,128,0,1,243,255,0,0,0,0,0,33,20,128,0,1,255,224,0,0,0,0,0,33,212,128,0,0,0,0,0
    .db     0,0,0,0,0,0,0,0,0,0,0,4,0,68,0,0,28,171,192,0,4,6,65,32,128,204,0,0,34,169,0
    .db     0,6,166,201,165,85,68,0,0,34,169,0,0,5,69,85,53,149,228,0,0,54,169,0,0,6,69,77,172,204,78
    .db     0,0,28,233,0,0,0,128,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0
    
;##############################################################





;##############################################################
;Textes

TextGOAL:
        .db $20, $23, " GOAL ", $23, $20, 0
        
TextArretFormidable:
        .db " ARRET! ",0

TextRate:
        .db " Rat", $96, "... ",0

TextScores:
        .db "0-0",0

TextGagne:
        .db "Vous avez GAGNE!!!",0

TextPerdu:
        .db "Vous avez perdu...",0

;##############################################################





;##############################################################
;ROUTINES



;--------------------------------------------------------------
;drawTireurChange
;On charge le Tireur dans le gbuf (xor) et on lui bouger les pieds (1/16)
; On fait également varier la barre de puissance de tir si la balle n'est pas partie
;input:    posYTireur  ;$32 - $39
;          posXTireur  ;$00 - $54
;output:   none
;destroy:  all

drawTireurChange:
         ;On fait varier la barre de puissance une fois sur 4 si le tir n'est
         ; pas déjà parti
drawTireurChange4 = $+1
         ld a,%10001
         rlca
         ld (drawTireurChange4),a
         jr nc,drawTireur
        
         ld a,(BallSent)
         or a
         jr z,drawTireurChange4b - 1

powerOfShoot = $+1
         ld a,0
         ld d,0
         ld e,a
         ld hl,ImgTireurPieds
         xor a
         sbc hl,de
         ld a,(hl)
         xor %1000000
         ld (hl),a
         add hl,de

powerChange = $+1
         ld a,1

         ld b,a
         add a,e
         jp m,powerChangeSens

         cp 7
         jr nz,powerChangeSensOk
powerChangeSens:
         ;On change le sens de variation de la barre
         sub b
         sub b
         ld c,a

         ld a,b
         neg
         ld (powerChange),a

         ld a,c

powerChangeSensOk:
         ld (powerOfShoot),a
         ld e,a
         xor a
         sbc hl,de
         ld a,(hl)
         xor %1000000
         ld (hl),a
        
        
drawTireurChange4b = $+1
         ld a,%10001000
         rlca
         ld (drawTireurChange4b),a
         jr nc,drawTireur

         ;On bouge les pieds (en changeant la configuration à chaque fois)
         ; une fois sur 16
drawTireurChangePieds = $+1
         ld e,1
        
         ld hl,ImgTireurPieds
         ld a,(hl)
         xor e
         ld (hl),a
        
         ;On change la configuration une fois sur 2
drawTireurChangeRestants = $+1
         ld a,%01010101
         rlca
         ld (drawTireurChangeRestants),a
         jr nc,drawTireur
        
         ;On teste la configuration
         ld hl,drawTireurChangePieds
         ld a,(hl)
         dec a
         jr z,drawTireurChangePieds1
         inc a
         inc a
        
drawTireurChangePieds1:
         xor %10000
         ld (hl),a
        

;end drawTireurChange
;--------------------------------------------------------------


;--------------------------------------------------------------
;drawTireur
;On charge le Tireur dans le gbuf (xor)
;input:    posYTireur  ;$32 - $39
;          posXTireur  ;$00 - $54
;output:   none
;destroy:  all

drawTireur:
posYTireur = $+1
        ld a,$33

        ;On teste un dépassement
        cp $39
        jp m,testPosYTireurUnder
        ld a,$39

testPosYTireurUnder:
        cp $32
        jp p,posYTireurOk
        ld a,$32

posYTireurOk:
        ;On sauve la pausition validée
        ld (posYTireur),a
        ld l,a


posXTireur = $+1
        ld a,45

        ;On teste un dépassement
        cp $54
        jp m,testPosXTireurUnder
        ld a,$54

testPosXTireurUnder:
        cp 2
        jp p,posXTireurOk
        ld a,2

posXTireurOk:
        ;On sauve la pausition validée
        ld (posXTireur),a

        ld b,7
        ld ix,ImgTireur
        jr dispSprite

;end drawTireur
;--------------------------------------------------------------



;--------------------------------------------------------------
;drawGardienChange
;On charge le Gardien dans le gbuf (xor) et on lui bouger les bras (1/8)
;input:    posYGardien  ;$12 - $1A  (*2)
;          posXGardien  ;$12 - $47
;output:   none
;destroy:  all

drawGardienChange:
         ;On ne bouge les pieds qu'un fois sur 16-24
         ld a,1
         rlca
         ld (drawGardienChange+1),a
         jr nc,drawGardien

         ;On bouge les bras
         ld hl,ImgGardienBras
         ld a,(hl)
         xor %10001
         ld (hl),a
        
         inc hl
         inc hl
         ld a,(hl)
         xor %10001
         ld (hl),a

;end drawGardienChange
;--------------------------------------------------------------


;--------------------------------------------------------------
;drawGardien
;On charge le gardien dans le gbuf (xor)
;input:    posYGardien  ;$12 - $1A  (*4)
;          posXGardien  ;$12 - $47
;output:   none
;destroy:  all

drawGardien:
posYGardien = $+1
        ld a,80

        ;On teste un dépassement
        cp $1A * 4
        jp m,testPosYUnder
        ld a,$1A * 4

testPosYUnder:
        cp $12 * 4
        jp p,posYGardienOk
        ld a,$12 * 4

posYGardienOk:
        ;On sauve la pausition validée
        ld (posYGardien),a
        srl a
        srl a
        ld l,a


posXGardien = $+1
        ld a,45

        ld b,7
        ld ix,ImgGardien

;end drawGardien
;--------------------------------------------------------------

;--------------------------------------------------------------
;dispSprite
;On affiche un sprite (en mode xor)
;input:    a : abscisse
;          l : ordonnée
;          ix : adresse du sprite
;          b : nombre de lignes du sprite
;output:   none
;destroy:  all

dispSprite:
       ld e,l
       ld h,0
       ld d,h
       add hl,de
       add hl,de
       add hl,hl
       add hl,hl
       ld e,a
       and 7
       ld c,a
       srl e
       srl e
       srl e
       add hl,de
       ld de,gbuf
       add hl,de
putSpriteLoop1:
sl1:   ld d,(ix)
       ld e,0
       ld a,c
       or a
       jr z,putSpriteSkip1
putSpriteLoop2:
       srl d
       rr e
       dec a
       jr nz,putSpriteLoop2
putSpriteSkip1:
       ld a,(hl)
       xor d
       ld (hl),a
       inc hl
       ld a,(hl)
       xor e
       ld (hl),a
       ld de,11
       add hl,de
       inc ix
       djnz putSpriteLoop1
 ret

;end dispSprite
;--------------------------------------------------------------



;--------------------------------------------------------------
;drawBall
;On charge le Ball dans le gbuf (xor)
;input:    posYBall  ;Same - 3 as PosYTireur when shoot  (*4)
;          posXBall  ;Same as PosXTireur when shoot
;output:   none
;destroy:  all



PasDArretA:
        ld a,c
PasDArret:
        ld l,b
        ld b,4
        ld ix,ImgBall
DispSprite:
        jr dispSprite
        
drawBall:
BallSent:
        ret
posYBall = $+1
        ld a,0
        ld d,a
        srl a
        srl a
        ld b,a

        ;On teste si on a dépassé la ligne de buts
        cp $D
        jp p,posXBall-1
        xor a
        inc a
        ld (BallStoped),a

posXBall = $+1
        ld a,45
        
        ;On teste si le gardien a fait un arrêt
        ld hl,posXGardien
        ld c,(hl)
        ld l,c
        dec c
        dec c
        dec c
        dec c
        cp c
        jp m,PasDArret

        ld c,l
        inc c
        inc c
        inc c
        inc c
        cp c
        jp p,PasDArret
        
        ld c,a
        ld a,d
        ld hl,posYGardien
        add a,3*4
        cp (hl)
        jp m,PasDArretA
        
        ld a,d
        sub 7*4
        cp (hl)
        jp p,PasDArretA
        
        ;Il y a eut un arret!
        xor a
        dec a
        ld (BallStoped),a
        ret

;end drawBall
;--------------------------------------------------------------



;--------------------------------------------------------------
;DispBallMenu

;On affiche un sprite (en mode xor)
;input:    a : abscisse
;          l : ordonnée
;          ix : adresse du sprite
;          b : nombre de lignes du sprite
;output:   none
;destroy:  all
DispBallMenu:
        ;On place la balle en face du choix
ChoixMenu = $+1
        ld a,0
        ld l,$34
        or a
        jr z,DispBallMenu2
        ld l,$34+6
DispBallMenu2:
        ld b,5
        ld ix,ImgBallMenu
        ld a,9
        jr DispSprite


;end drawBallMenu
;--------------------------------------------------------------



;--------------------------------------------------------------
;Tire un nombre aléatoire entre 0 et b dans a
random:
            push    hl
            push    de
            ld      hl,(randData)
            ld      a,r
            ld      d,a
            ld      e,(hl)
            add     hl,de
            add     a,l
            xor     h
            ld      (randData),hl
            sbc     hl,hl
            ld      e,a
            ld      d,h
randomLoop:
            add     hl,de
            djnz    randomLoop
            ld      a,h
            pop     de
            pop     hl
            ret

randData:  .dw 12

;end random
;--------------------------------------------------------------

;##############################################################


end_prgm:
 
.echo "TEST: Prgm compiled, size is ",end_prgm - start," bytes"
      

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par ashtrail le Mer 18 Juin 2014 - 11:40

Whâ c'est beau! Bon boulot! (par contre au niveau code compte pas sur moi  Razz ) T'es arrivé à quelle place avec ça?

__________________________________________________________________________
Mes programmes :
-JEUX : Le TAPTAUPE, Le MINSTEP, Un Plus-Moins
-MATHS : Regroupement n°1, Regroupement n°2, tout sur les pourcentages
-AUTRE : Le programme qui jauge les prénoms
avatar
ashtrail
Connaisseur
Connaisseur

Messages : 248
Points Concours : 21
Productivité : 21
Date d'inscription : 18/06/2013
Localisation : Paris
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur http://ti-freeworld.fr1.co/

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par m@thieu41 le Mer 18 Juin 2014 - 11:43

Merci Smile

Je suis arrivé dernier... Sur 1 :P

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par ashtrail le Mer 18 Juin 2014 - 11:45

On diras ce qu'on veut mais ils manquent de participants ces concours quand même Razz. Peut-être y aura-t-il une nouvelle vague avec la rentrée?

__________________________________________________________________________
Mes programmes :
-JEUX : Le TAPTAUPE, Le MINSTEP, Un Plus-Moins
-MATHS : Regroupement n°1, Regroupement n°2, tout sur les pourcentages
-AUTRE : Le programme qui jauge les prénoms
avatar
ashtrail
Connaisseur
Connaisseur

Messages : 248
Points Concours : 21
Productivité : 21
Date d'inscription : 18/06/2013
Localisation : Paris
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur http://ti-freeworld.fr1.co/

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par m@thieu41 le Mer 18 Juin 2014 - 11:58

Mouais tu as de l'espoir :P

On était plus d'inscrits à la base mais au final bah j'étais tout seul...

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par jo2geek le Mer 18 Juin 2014 - 13:59

en tous cas c'est super et c'est d'actualité...  clapclap  
je vais essayer d'étudier un peu le code pour continuer à apprendre un peu l'assembleur.
je vais essayer de m'inspirer de ça pour faire un pong light .  mais ce n'est pas gagné...

jo2geek
Connaisseur
Connaisseur

Messages : 116
Points Concours : 81
Productivité : 9
Date d'inscription : 27/01/2014
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par m@thieu41 le Mer 18 Juin 2014 - 20:04

Merci Smile

Bon courage pour lire mon code Wink

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par jo2geek le Mer 18 Juin 2014 - 21:03

je vais essayer de faire du Retro-engineering ...
c'est pour les sprites et notamment FondMenu je ne sais pas comment tu as codé les images (il y a des outils ?)

jo2geek
Connaisseur
Connaisseur

Messages : 116
Points Concours : 81
Productivité : 9
Date d'inscription : 27/01/2014
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par Linkakro le Mer 18 Juin 2014 - 21:11

Oui des outils existent pour convertir des fichiers en code source de données. Moi j'en ai vu pour le langage C. Si tu n'as pas d'outil dédié aux images, crées un bitmap bicolore et ouvres le avec un éditeur hexadécimal.

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par jo2geek le Jeu 19 Juin 2014 - 8:12

m@thieu41 a écrit:Merci Smile

Bon courage pour lire mon code Wink
Bonjour,

tu peux me donner le fichier #include "ion.inc" qu tu utilises ?

merci

jo2geek
Connaisseur
Connaisseur

Messages : 116
Points Concours : 81
Productivité : 9
Date d'inscription : 27/01/2014
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par m@thieu41 le Jeu 19 Juin 2014 - 15:10

Les sprites je les ai fait "à la main", les images j'ai téléchargé un prgm qui me le fait Smile

Voici mon fichier ion.inc:
mediafire.com view/g940u5eblhd46z1/ion.inc

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par Linkakro le Jeu 19 Juin 2014 - 18:31

Télécharger le shell ion et ses composants aurait suffit pour trouver ion.inc.
Quel programme pour les images ?

__________________________________________________________________________
Vétéran du TI-Basic Zilog80. Ti82statfr sur Tout82 depuis 2009 et ti84pocketfr depuis noël 2012. Ti83plusfrUSB (été 2014, concours tiplanet suite du geek). Bidouille un peu d'assembleur Z80.
Incappable de gérer le temps et manque de tact, plutôt serviable.
Je prend les commandes de programme. Je suis motivé par les maths et la physique tant que ce n'est pas une simple copie d'antisèche.
Vous pouvez trouver une grande partie de mes données hébergées dans mon mediafire. Le ZIP et la liste sont périmées depuis longtemps.
coucou Invité What a Face
avatar
Linkakro
----------------------
----------------------

Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

Message par m@thieu41 le Jeu 19 Juin 2014 - 19:05

J'ai un peu modifié l'include je crois Razz

J'utilise pic83. Le problème c'est qu'il faut que l'image à traiter soit en pcx...

__________________________________________________________________________
ZSNAKE Mon premier (et unique) jeu en ASM:
Un Snake 2 joueurs (2caltos)
-> Je travaille sur une version plus stable du jeu, je poste dès que possible.
avatar
m@thieu41
----------------------
----------------------

Messages : 934
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :
  • TI-82 Stats.fr

. : TI-82 Stats.fr

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: ZGOAL : Tirs aux buts!

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