Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1742
Réponses : 12
Type : discussion
Etat : réponses autorisées

TANK en graphique

calcugeek le 11/07/2011 à 19:21
Voila la version 1 de mon jeu de tank. Pour l'instant les tanks ne bougent pas, il n'y a pas de relief et pas de vent mais on peut dores et déjà se tirer dessus en choisissant l'angle et la force (en appuyant sur les fleches haut et bas et on valide après).


Code

:degré
:0->K:2->H:50->I:I->J
:entaleat(1,2->H
:0->Ymin
:10->Ymax
:0->Xmin
:Ymax->Xmax
:AxesNAff
:EffDessin
:For(A,.4,1.4,.1
:Ligne(1,A,2,A
:Ligne(8,A,9,A
:End
:Horizontale .4
:Horizontale .1
:SauveImage Img1
:Lbl 1
:45->[theta]
:7->V
:H-2ent(H/2)+1->H
:If H:Then
:2->S:2.7->N:10->O: .3->P
:End
:If H=2:Then
:8->S:7.3->N:0->O: -.3->P
:End
:While K [différent de] 105
:codeTouche->K
:If K=25 et [theta]<90:Then:[theta]+1->[theta]:EffDessin:End
:If K=34 et [theta]>0:Then:[theta]-1->[theta]:EffDessin:End
:RappelImage Img1
:Texte(1,5,"ANGLE:
:Texte(1,30,"        "
:Texte(1,30,[theta]
:Texte(1,60,"J1:
:Texte(1,70,"     "
:Texte(1,70,I
:Texte(9,60,"J2:
:Texte(9,70,"     "
:Texte(9,70,J
:If H=1
:Ligne(S,1.4,S+cos([theta]),1.4+sin([theta]
:If H=2
:Ligne(S,1.4,S-cos([theta]),1.4+sin([theta]
:End
:0->K
:While K[différent de]105
:codeTouche->K
:If K=25 et V<15
:V+1->V
:If K=34 et V>0
:V-1->V
:Texte(9,5,"FORCE:
:Texte(9,25,"        "
:Texte(9,30,V
:End
:For(X,N,O,P
:-4.9(X-2.7)²/(V²(cos([theta])²))+(X-2.7)tan([theta])+1.4+sin([theta]->Y
:Pt-On(X,Y
:If X[supérieur ou égal]8 et X[inférieur ou égal]9 et Y[inférieur ou égal]1.4:Then:J-5->J:Goto 2:End
:If X[supérieur ou égal]1 et X[inférieur ou égal]2 et Y[inférieur ou égal]1.4:Then:I-5->I:Goto 2:End
:End
:Lbl 2
:If I=0:Then:Texte(31,20,"LE JOUEUR 2 GAGNE!":Stop:End
:If J=0:Then:Texte(31,20,"LE JOUEUR 1 GAGNE!":Stop:End
:0->K
:Pause
:EffDessin
:Goto1




Quelqu'un peut me dire ce qu'il en pense?
Programaths le 11/07/2011 à 19:50
Dans ce jeu (enfin le jeu que je pensais) les tank ne bouge pas happy.gif c'est le premier qui tue l'autre qui gagne happy.gif
(et normalement les tank sont très petit)

même si je ne suis pas un spécialiste des octet au moins, il y a quelque ligne a simplifier :

Code

:Texte(1,5,"ANGLE:
:Texte(1,30,[theta],"     "      //
:Texte(1,60,"J1:
:Texte(1,70,I,"      "           //
:Texte(9,60,"J2:
:Texte(9,70,J,"     "            //


Un grand bravo !
J'ai sans doute fais quelque erreur car le tracé de la courbe ne commence pas a partir du tank mais depuis le ciel !
Le clrDraw a chaque fois que l'on change l'angle fais mal au yeux winkle.gif
Et, dès que l'un des deux joueurs a fini son tour ça fini le programmes.

Voila happy.gif
calcugeek le 01/08/2011 à 10:53
Voici la version 2 de mon jeu de tank paufinée et fignolée aux petits oignons. Les améliorations sont : la position aléatoire des tanks, du vent, des tanks plus petits (mais tout aussi éfficaces), du relief avec des crevasses aléatoires, des barres de vie (parceque c'est plus classe) et euh je crois que c'est tout. J'ai un peu oublié ce qu'il y avait dans la V1 qui n'était qu'une ébauche alors voila:

Code

:degré
:50->I:I->J:EffvarWEffvarR:45->N:N->0:7->P:7->Q
:entaleat(1,2->H
:entaleat(5,20->D
:entaleat(74,89->H
:AxesNAff
:EffDessin
:0->Ymin
:62->Ymax
:0->Xmin
:94->Xmax
:Menu("FORME DU TERRAIN","PLAT",0,"(PRESQUE) PLAT",A,"COLLINE",B,"MONTAGNE",C
:Lbl 0
:0->M:-1->C
:Goto D
:Lbl A
:.2->M:18->C
:Goto D
:Lbl B
:.4->M:37->C
:Goto D
:Lbl C
:.7->M:65->C
:Lbl D
:Effecr
:Disp "DENIVELE TERRAIN","(ENTRE 1 ET 15)
:Input "",B
:If B<1:1->B
:If B>15:15->B
:EffDessin
:For(Z,1,47
:entaleat(1,B->L
:Ligne(Z,0,Z,MZ+L
:If Z [supérieur ou égal à]D et Z[inférieur ou égal à]D+5 et MZ+L+4>W
:MZ+L+4->W
:End
:For(Z,47,94
:entAleat(1,B->L
:Ligne(Z,0,Z,C+B-MZ-L
:If Z [supérieur ou égal à]E et Z[inférieur ou égal à]E+5 et C+B-MZ-L+4>R
:C+B-MZ-L+4
:For(A,W-4,W
:Ligne(D,A,D+5,A
:End
:For(A,R-4,R
:Ligne(E,A,E+5,A
:End
:SauveImage Img1
:Lbl 1
:H-2ent(H/2)+1->H
:If H:Then
:0->K
:N+(O-N)(H=2->[theta]
:P+(Q-P)(H=2->V
:entAleat(-3,3->F
:Effdessin
:RappelImage Img1
:While K [différent de] 105
:codeTouche->K
:[theta]+2(K=25 et [theta]<90)-2(K=34 et [theta]>1->[theta]
:If K et K [différent de]105:Then
:If H=1
:Texte(ent(62-W-5),D+6,"    "
:If H=2
:Texte(ent(62-R-5),E-4,"    "
:0->K:End
:Texte(1,5,"ANGLE:",[theta],"        "
:Texte(1,60,"J1:",I,"     "
:Ligne(70,58,70+I/3,58
:Texte(9,60,"J2:",J,"     "
:Ligne(70,52,70+J/3,52
:Texte(1,5,"Vent",F,"    "
:Ligne(50,59,50+2F,59
:Ligne(50+2F,59,47(F>0)+50(F=0)+53(F<0)+2F,62
:Ligne(50+2F,59,47(F>0)+50(F=0)+53(F<0)+2F,56
:If H=1
:Ligne(D+5,W,D+6+4cos([theta]),W+4sin([theta]
:If H=2
:Ligne(E,R,E-1-4cos([theta]),R+4sin([theta]
:End
:If H=1
:[theta]->N
:If H=2
:[theta]->O
:0->K
:While K[différent de]105
:codeTouche->K
:V+(K=25 et V<15)-(K=34 et V>4)->V
:Texte(13,5,"FORCE:",V,"        "
:End
:If H=1
:V->P
:If H=2
:V->Q
:For(M,0,94,3
:PxlOff(0,M
:Texte(1,M"   "
:Texte(7,M,"   "
:Texte(13,M,"   "
:End
:D+5+(89-E-D)(H=2->T
:For(X,T,Xmax
:ent(-4.9(X-T)²/(8(V+F-2F(H=2))²(cos([theta])²))+(X-T)tan([theta])+W+(R-W)(H=2)+sin([theta]->Y
:If Y<0:Goto 2
:If Y>0 et Y<62 et X[différent de]94 et X>T+5
:Then
:If pxl-Test(62-Y,X+(93-2X)(H=2
:Goto 2
:Pxl-On(62-Y,X+(93-2X)(H=2
:End:End
:End
:Lbl 2
:If H=2 et X[supérieur ou égal à]94-D-5 et X[inférieur ou égal à]94-D et Y[inférieur ou égal à]W et Y[supérieur ou égal à]W-4
:I-5->I
:If H=1 et X[supérieur ou égal à]E et X[inférieur ou égal à]E+5 et Y[inférieur ou égal à]R et Y[supérieur ou égal à]R-4
:I-5->I
:If non(I ou non(J:Then:Texte(31,20,"LE JOUEUR",H,"GAGNE!":Stop:End
:Pause
:Goto1




Des questions?
Persalteas le 01/08/2011 à 13:35
Bravo, c'est la classe ce genre de jeu !!

Je ne l'ai pas testé, mais le principe me fait un peu penser à Worms (comme celui qui a gagné le TI concours cette année).

Il te reste donc une amélioration à faire si tu veux que ce soit Worms: Les "tanks" doivent pouvoir se déplacer.

Deuxième idée si t'est vraiment motivé: Plusieurs tanks par joueur...
calcugeek le 01/08/2011 à 14:16
Pour le déplacement il faudrait que je revoie totalement le relief parce que c'est très chaotique parfois et donc difficile de s'y "déplacer" mais c'est ce qui rend l'autre difficile à toucher surtout quand il y a du "vent".
Pour les différents tanks, il n'y aurait pas assez de place. On est qand même en 62x94 pixels. C'est pas terrible comme définition et puis j'ai pratiquement utilisé toutes les variables pour le prog déja existant alors à moins d'utiliser des listes...
Mais merci du compliment et des suggestions ça fait plaisir quand même. beer.gif bigmouth.gif
calcugeek le 04/08/2011 à 20:11
Quelqu'un peut-il tester mon programme et me dire ce qu'il en pense? Ce serait sympa clown.gif clown.gif clown.gif
Et les éventuelles optimisations même si je pense avoir fait le tour (on est jamais trop prudent bigmouth.gif bigmouth.gif )
calcugeek le 06/08/2011 à 22:22
Euh youhou? y'a quelqu'un? Je me sent alone sur mon sujet la cry.gif cry.gif
sandro le 07/08/2011 à 10:50
Pour le tester, je n'ai pas trop le temps de recopier un programme long comme ça (en ce moment je suis en train de travailler sur 2 concours à la fois (zContest2011 et celui d'espace TI) et d'essayer d'apprendre l'ASM (j'aimerais faire le programme pour le concours d'espace TI en ASM, plus peut-être un autre en ASM pour le zContest (c'est une autre catégorie donc on peut présenter un autre programme)).
Par contre, si jamais tu met un lien de téléchargement, je veux bien tester.

Sinon, pour l'optimisation, voici ce que j'ai trouvé:
Code
:Menu("FORME DU TERRAIN","PLAT",0,"(PRESQUE) PLAT",A,"COLLINE",B,"MONTAGNE",C
:Lbl 0
:0->M:-1->C              //à transformer en :Effvar M-1->C    //ici "-" = [(-)]
:Goto D


Code
SauveImage Img1
:Lbl 1
:H-2ent(H/2)+1->H
:If H:Then
:0->K                //à suprimer
:N+(O-N)(H=2->[theta]         //à remplacer par  :effvar KN+(O-N)(H=2->[théta]
:P+(Q-P)(H=2->V
:entAleat(-3,3->F




Code
While K [différent de] 105
:codeTouche->K
:[theta]+2(K=25 et [theta]<90)-2(K=34 et [theta]>1->[theta]
:If K et K [différent de]105:Then
:If H=1
:Texte(ent(62-W-5),D+6,"    "
:If H=2
:Texte(ent(62-R-5),E-4,"    "
:0->K:End

est à remplacer par:
Code
While K [différent de] 105
:codeTouche->K
:[theta]+2(K=25 et [theta]<90)-2(K=34 et [theta]>1->[theta]
:If K et K [différent de]105:Then
:effvar KIf H=1
:Texte(ent(62-W-5),D+6,"    "
:If H=2
:Texte(ent(62-R-5),E-4,"    "
:End


Code
:Ligne(50+2F,59,47(F>0)+50(F=0)+53(F<0)+2F,62    //remplacer "(F=0)" par "non(F)
:Ligne(50+2F,59,47(F>0)+50(F=0)+53(F<0)+2F,56     //idem



Code
0->K    //à supprimer
:While K[différent de]105   //à remplacer pas :effvar KWhile K[différent de]105     
:codeTouche->K
:V+(K=25 et V<15)-(K=34 et V>4)->V    //parenthèse avant le sto à suprimer
:Texte(13,5,"FORCE:",V,"        "
:End


Sandro


PS : pour le dénivelé du terrain, il ne faudrait pas vérifier que le résultat est entier?
calcugeek le 07/08/2011 à 12:25
Merci d'avoir répondu. Non ça marche bien comme ça pour le dénivelé. Sinon je ne peux pas poster de 82p pour la bonne raison que je n'ai pas le cable cry.gif cry.gif
Bonne chance pour les concours!!!!!! bigmouth.gif bigmouth.gif bigmouth.gif
come1995 le 21/09/2011 à 17:12
c'est super mais il manque un tanke je ne comprend ps pourquoi il peut tirer mais il est invisible et le tank de doite ne peut pas dirigr sont connon sur celui de gauche(l'invisible)
calcugeek le 22/09/2011 à 19:34
Verifie qu'il n'y a pas d'erreur dans ton code. Une faute de frappe est vite arrivée
come1995 le 26/09/2011 à 16:46
ok merci je vait encore reverifier
come1995 le 26/09/2011 à 18:38
apres avoir verifier le probleme du placement aleatoire est resolue mais pas celui du tank invisible je croit qu'il sont confondu car c'est comme si je jouai avec le meme tank tout le temps