Forum

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

Jeu Stargate SG1

82statsfr le 27/07/2013 à 18:47
Bonjour,
je suis en train de créer un jeu "stargate SG1"

Ce qui est prévu :
-choix entre : Teal'c, Jack, Jonas, Samantha, daniel, et le général Hammond.
-les missions se succèdent et quand vous en avez fini une, vous pouvez retourner sur la planète lorsque vous êtes à la base.
-26 planètes différentes.
-Teal'c a une arme différente.
-Lorsque vous êtes le général vous n'allez pas sur les planètes mais vous commandez les opérations de la base.
-Lorsque vous êtes Daniel vous n'allez pas sur les planètes, vous êtes au "cieux" et vous pouvez utilisez des machines (pour modifier l'ADN,...)

En ce momoent :

-intro
-Choix entre Teal'c, Jack, Jonas, Samantha, Daniel et le général Hammond
m@thieu41 le 27/07/2013 à 19:43
Bonjour!
Bienvenue sur le fofo winkle.gif
Si tu as besoin d'aide ou que tu veux des conseils, n'hésites pas à poster ton code ou à nous poser des questions!
rpgcreator le 27/07/2013 à 19:45
Jespere que ca sera le meme jeu, car tous ceux que j'ai vus sur le forum com sa qui sont ambitieux, ca n'aboutit pas...
m@thieu41 le 27/07/2013 à 19:55
C'est sur qu'il vaut mieux commencer par des jeux plus "simple", ou du moins plus rapides à réaliser, comme un snake, morpion ou autre, comme ça on voit vraiment le résultat de notre travail et c'est plus motivant, comme ça on a plus de chance d'arriver au bout winkle.gif
Et ensuite on peut augmenter la complexité des programme ^^
rpgcreator le 28/07/2013 à 11:26
C'est comme moi avec skyrim: la premiere version affichait 6 lignes de texte, avait deux attaques et c'etait assez facile!! Il ne pesait aussi que 800 octets... maintenant, c'est sur que c'est pas du tout la meme chose: c'est maintenant un monstre de 9700 octets, ave trois modes de jeu, 6 attaques differentes, et maintenant un generateur de maps: ca fonctionne comme dans pokemon!! godgrace.gif et pour ainsi dire, comme mattieu41 l'a dit, le resultat t'impressionne et tu le trouve meilleur que bo2(maintenant, faut peut etre faire gaffe happy.gif ) mais bon, t'es dans tous les cas tres fier de toi si ca marche bien et que ca bugge pas comme les progs mal recopies maxiangry.gif
82statsfr le 28/07/2013 à 13:39
Tous les jours, je posterai l'avancement du projet.

le 28/07/13
ce qui est fait a 100% :
-choix du perso
-intro

Ce qui est en train de se faire :
-mission 1

PS : ce je posterai le début du programme demain. cupsmiley.gif
Il risque d'être très long au total. cry.gif
linkakro le 28/07/2013 à 15:27
Je te conseille tout de suite d'éditer un seul message de mise à jour en précisant les dâtes. (sauf peut-être pour les codes)

Tu n'es pas obligé de poster toutes les versions de code bien sûr.

Bonne chance pour finir le programme. happy.gif
Toute aide demandée doit être satisfaite.
82statsfr le 29/07/2013 à 09:47
Aujourd'hui :
-comme hier clown.gif
-si Jack est au lv 1 il peur aller sur la planète 1. lv 2 : planète 2 ... lv 26 : planète 26

Je poste l'intro (si on peux appeler sa comme sa ) car il risque d'y avoir des modifications après.

Les "L" s'obtiennent en faisant [2nde]+[liste (stat)]+[>]+[B]
Dans un autre programme il faut mettre :
Code
{0}->La

Dans le "vrai" programme :

Code
EffEcr
Output(1,1,"star
Output(2,1,"gate
Output(1,8,"x
Output(2,7,"x x
Output(3,6,"x   x     //3 espaces
Output(4,5,"x sg1 x
Output(5,5,"x     x        //5 espaces
Output(6,6,"x   x       //3 espaces
Output(7,7,"x x
Output(8,8,"x
Pause
EffEcr
m@thieu41 le 29/07/2013 à 10:41
Je ne vois pas trop à quoi va te servir l'autre programme où il n'y a que {0->LA...

Tu peux optimiser le code avec des boucles for(
Code
EffEcr
Output(1,1,"star
Output(2,1,"gate
Output(4,7,"sg1
For(A,0,3
For(B,-1,1,2
Output(A+1,8-BA,"X
Output(8-A,8-BA,"X
End
End
Pause
EffEcr

Tu peux même obtenir un certain effet d'ouverture en introduisant un délai dans les boucles winkle.gif
82statsfr le 29/07/2013 à 11:22
Le programme avec {0}->La doit etre ouvert avant de lancer le jeu.
Voila en gros comment va se présenter le reste (pour que si c'est la première fois qu'on lance le prgm il y ai un truc spécial) :

Code
=/= différent

Lbl 0
La(1)->z
If z=0:Goto m
If La(1)=/=z:z->La(1)
End
Lbl m
...
z+1->z
Goto 0
End
m@thieu41 le 29/07/2013 à 12:28
Je ne suis pas convaincu par ta façon de faire... Je m'explique:
Au cas où c'est la première fois qu'on lance le jeu, à l'instruction La(1->Z, tu vas bien stocker 0 dans Z
Après le If, on va donc aller au Lbl M
Là, Tu effectues les actions que tu veux ne faire qu'une fois au début, puis tu incrémentes Z (Z=1), avant de retourner au Lbl 0 (d'ailleurs le End qui suit ne sert strictement à rien je ne vois pas pourquoi tu l'as mis... ?)
Au Lbl 0 la première instruction qu'il y a c'est LA(1->Z... Or, LA(1 vaut toujours 0 à ce moment, donc Z va valoir 0 après cette instruction...
Au test Z=0, on va donc retourner au Lbl M... et ainsi de suite indéfiniment...

Il y a une autre astuce qui consiste à fixer la taille de la liste au début du prgm. Ainsi, si elle existe déjà, elle est créée avec la taille demandée, et remplie de 0. sinon il ne se passe rien (où sa taille change si elle n'était pas celle demandée). Ainsi, tu peux même te servir d'autres termes de la liste pour stocker des données (comme le lvl du joueur par ex )
Ex:
Code
2->dim(LA // Voire explications plus haut (le deuxième terme servira pour le lvl par ex)

If non(LA(1  // Revient à faire If 0=LA(1
Then

//Actions si on joue pour la première fois
1->LA(1 //On sauvegarde le fait qu'on a déjà joué
1->LA(2 //On est on Lvl 1 au début (note: on pourrait stocker le Lvl dans LA(1 et simplement tester comme avant If non(LA(1 puisque le Lvl ne sera jamais nul sauf quand on ne l'a pas encore initialisé

End

//Actions normales

If condition pour passer au Lvl suivant
1+LA(2->LA(2

...

Là ça devrait marcher, et pas besoin d'un autre prgm en plus!

--------------

Quelques conseils d'optimisations à partir de ton code:

Code
=/= différent

Lbl 0

La(1)->z
//Équivaut à:
LA(1->Z
//explication: inutile de fermer les parenthèses/guillemets/accolades/crochets devant un retour à la ligne ou un sto (->)

If z=0:Goto m
//Equivaut à:
If non(Z
Goto M
//explication: non(Z) renvoi vrai (1) si Z=0 et faux (0) sinon
//Mettre à la ligne le Goto M permet de ne pas fermer la parenthèse, et c'est plus lisible


If La(1)=/=z:z->La(1)
//Tu peux remplacer par:
Z->LA(1
//explication: Inutile de tester quoi que ce soit, puisqu'à la fin de ces 2 instructions on a forcément Z=LA(1

End //Qu'est ce que c'est que ce End?
//Un End se met: Après une boucle (For/While/Repeat) ou l'instruction If quand elle est suivie de End, pour indiquer la fin de ces instructions, elle ne signifie pas fin du prgm! (qui correspond à Stop/Return)

Lbl m
...

z+1->z //Ici on a forcément Z=0 puis après Z=1 donc tu peux remplacer par:
1->Z

Goto 0

End  //Pareil que pour l'autre End ...


pour plus de conseils d'optimisation, va voir ici: https://tout82.forumactif.org/[...]-l-optimisation

Bonne chance pour la suite winkle.gif
82statsfr le 29/07/2013 à 16:44
Merci Mathieu45 j'ai effectivement fiat une erreur j'ai inversé 2 lignes
ça donne :

Code
If La(1)=/=z:z->La(1)
La(1)->z
If z=0:Goto m

Au fait dans le deuxième prgm il y aura pas que La (La=Jack) happy.gif
m@thieu41 le 29/07/2013 à 17:51
Tu veux dire que ça fait:
Code
Lbl 0
If La(1)=/=z:z->La(1)
La(1)->z
If z=0:Goto m
...

Lbl m
...
z+1->z
Goto 0

Dans ce cas comme je t'ai dis
Code
If La(1)=/=z:z->La(1)
ça revient à faire
Code
z->LA(1

Donc la ligne qui suit devient inutile:
Code
Lbl 0
z->La(1)
//La(1)->z est inutile puisqu'on a déjà stocké Z dans LA(1
If z=0:Goto m  //Malheureusement du coup tu teste la valeur de Z avant d'avoir lancé le prgm, et non LA(1
...

Lbl m
...
z+1->z
Goto 0


En fait, ce qu'il aurait fallu que tu fasses c'est:
Code
Lbl 0
If non(LA(1
Goto m
...  //Code principal si on a déjà joué

Lbl m
...
1->LA(1
Goto 0

Même pas besoin d'utiliser Z en fait ^^

Néanmoins, la technique que je t'ai indiqué dans mon précédent message conviendrait bien mieux, et permettrai d'éviter que l'utilisateur ait à lancer un autre prgm la première fois, ce qui n'est pas pratique du tout... plus de précisions [url=]ici[/url], mon article tout frai winkle.gif , chap 2.
82statsfr le 30/07/2013 à 10:17
le 30 Juillet

Comme hier
Si carter est lv 1 elle peut aller sur la planète 1 ... [70 %]
Planète 1A [60 %]

PS : demain je ne pourrai pas beaucoup avancer sur le prgm : CE SERA MON ANNIV. godgrace.gif

Donnez vos idées ça peut m'aider.
(Pour m@thieu41 : je vais poster le bon code)
82statsfr le 30/07/2013 à 10:24
Correction de mon code (encore)(ne le mettez pas encore sur votre calto)

2->dim(La
If non(La(1
Then
... //action de la 1ere fois où on joue
1->La(1
1->La(2
End

PS je mettrai un peu de temps avant de poster le début du code : des modifs à faire
m@thieu41 le 30/07/2013 à 10:56
82statsfr a écrit :
Donnez vos idées ça peut m'aider.


Tu veux des idées pour faire quoi en fait? (quel aspect du programme je veux dire)
linkakro le 30/07/2013 à 13:46
Bien, ça avance et se corrige. m@thieu41 tu fais tout sans moi !

Si ta liste ne sera pas plus longue, tu peux remplir avec un des codes suivants dans ton alternative.
Code
2->dim(La
If non(La(1
Then
... //action de la 1ere fois où ( ) on joue
Fill(1,lA)  // ou bien {1,1->A
End

Retenez que j'ai ommis le "l" de {1,1->A parce que ça marche. La TI devine que c'est un nom de liste.
82statsfr le 30/07/2013 à 19:51
En réponse à M@thieu41 :

Donnez des morceau de code ça pourrais optimiser mon prgm (comme des meilleurs score par exemple )
m@thieu41 le 30/07/2013 à 20:46
Le plus simple serait que tu mettes toi se que tu as codé et nous on te dis ce qu'il y a à optimiser, au moins ça te permet de progresser (sinon on peut te faire tout le code mais je ne vois pas l’intérêt crazy.gif ). Un peu comme on a fait pour la gestion d'un premier lancement de jeu ^^
82statsfr le 02/08/2013 à 13:27
02/08/13

-Suppression du 2eme prgm
-Pour la V1 il n'y aura que 10 planète.

Aucun autres changement majeur, j'ai juste un peu réduit le code à certains endroits.
82statsfr le 04/08/2013 à 10:05
bjr, j'ai un problème: lorsque on se déplace, le"O" se s'efface pas :

=< inférieur ou égal à
=> supérieur ou égal à

Code
Lbl 0
8->p:8->o
EffEcr
While 1=1
Output(1,1,"x       x"    //14 espaces
Output(8,1,"x       x"    //14 espaces
Output(4,7,"xxx
codeTouche->x
If x=24
o-1->o
If x=26
o+1->o
If x=25
p-1->p
If x=34
p+1->p
If p>7:7->p
If p<2:2->p
If o>15:15->o
If o<2:2->o
Output(p,o," "
Output(p,o,"o"
end


aidez moi svp
m@thieu41 le 04/08/2013 à 12:55
Le prochaine fois essaye de respecter la casse (majuscules/minuscules) dans ton code stp winkle.gif

-----------

Déjà:
While 1=1
Peut être remplacé par While 1

-----------

Concernant ton problème: C'est normal que le "O" ne s'efface pas:
Tu calcules les nouvelles coordonnées
Tu affiches un espace aux nouvelles coordonnées
Puis tu affiches le "O" aux nouvelles coordonnées!

Donc tu n'affiches jamais rien aux anciennes coordonnées!

Voici un code qui devrait marcher et faire ce que tu veux:

Code
Lbl 0
8->P
8->O
EffEcr
While 1
Output(1,1,"x       x    //guillemets fermantes inutiles
Output(8,1,"x       x    //idem
Output(4,7,"xxx
codeTouche->X
O-(X=24)+(X=26->Q  //Si tu ne connais pas les booléens va voir ici: https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=2741
P-(X=25)+(X=34->R
max(2,min(7,R->R  //Explication et optimisation possible plus bas
max(2,min(15,Q->Q
If P!=R ou O!=Q  //Que si on s'est déplacé (permet d'éviter un clignotement)
Then
Output(P,O," //On efface aux anciennes coordonnées
R->P  //On charge les nouvelles coordonnées
Q->O
Output(P,O,"O //On affiche aux nouvelles coordonnées
End
End //Fin de la boucle While


Explication pour le max(2,min(7,R
Lorsqu'elle prend en argument 2 entiers, la fonction max renvoi le plus grand des 2, et la fonction min le plus petit.
Ainsi, quand tu fait min(7,R), si R est supérieur à 7, elle renvoi 7, et sinon R.

Quand on fait max(2,min(7,R)):

Si R>7
min(7,R) renvoi 7
max(2,7) renvoi 7 et c'est ce qu'on voulait

Si R<2
min(7,R) renvoi R
max(2,R) renvoi 2 et c'est ce qu'on voulait

Si 2<=R<=7
min(7,R) renvoi R
max(2,7) renvoi R et c'est ce qu'on voulait


Tu peux aussi directement faire:
Code
max(2,min(7,P-(X=25)+(X=34->R
max(2,min(15,O-(X=24)+(X=26->Q
82statsfr le 04/08/2013 à 16:41
ok merci je vais éssayer
82statsfr le 05/08/2013 à 13:52
maintenant je ne peux plus me déplacer
m@thieu41 le 05/08/2013 à 18:37
Tu es sur d'avoir bien recopié?
Parce que ça marche sur émulateur...

Image manquante
82statsfr le 16/08/2013 à 13:56
oui j'ai vérifié,

peut-être que j'ai déjà utilisé ces variables ? Je vais vérifier
m@thieu41 le 16/08/2013 à 22:59
Le fait que tu ais déjà utilisé ces variables ne peut rien changer à quoi que ce soit...
Tu t'es forcément trompé quelque part (0 à la place de O, ou quelque chose du style peut être...)

Relis bien le code et vérifie par rapport à ma capture d'écran parce que ça ne peut pas ne pas marcher si ça marche sur ému