| gerer les colisions |
| Auteur |
Message |
aleo
Invité
|
Posté le : Jeu 04 Mar 2010, 19:04
|
|
|
Bonjours.
j'aurai besoin d'aide, pour gerer des colisions quand on fait le code avec codetouche+outpout.
Merci de vos futur reponces
|
| |
|
| |
titozzz
Autorisation : Membre
Nb de messages : 177
Inscrit le : Mer 27 Jan 2010, 18:55
|
Posté le : Jeu 04 Mar 2010, 19:07
|
|
|
Colision avec quoi, peut tu mieux t'expliquer,
si c'est ce que je pense, va faire un tour du coté des Pxl-test
---------------------- Le temps passe et les œufs durent ....
)=======> Concours de Skin (Virtual TI) <=======( |
 |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Jeu 04 Mar 2010, 19:14
|
|
|
Non,pas pxl-test,il a dit dans le output,et je crois que pxl-test ne marche pas pour le output.
Il faut utiliser une matrice 8*16,comme l'écran,ainsi chaque case de la matrice représente une case de l'écran et a les mêmes coordonnées.Il suffit alors de rentrer 1 ou 0 dans la matrice en fonction de si il y a un obstacle ou non à cet endroit,et de faire un test avant chaque déplacement dans la case d'arrivée du déplacement ,qui dit que si la valeur de la matrice à ces coordonnées est 1,il y a un obstacle,sinon il n'y a rien.
|
 |
|
| |
aleo
Invité
|
Posté le : Jeu 04 Mar 2010, 19:46
|
|
|
Rézus, tu ascompris ce que je voulais dire.
Le problème, c'est que je ne sais pas utiliser les matrices (comme la fonction for()
|
| |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Jeu 04 Mar 2010, 20:49
|
|
|
Ben là ça va être plus dure.Je vois pas autre chose que de mettre les coordonnées de chaque obstacle dans des variables où dans une liste,mais ça fait beaucoup de if,et le for devient indispensable.
Ou alors faut utiliser le graph et le pxl-test.
C'est pour un jeu de course ou d'esquive d'obstacles ?
|
 |
|
| |
aleo
Invité
|
Posté le : Jeu 04 Mar 2010, 21:19
|
|
|
Pour programmer une petite IA capable de se deplacer toute seul, dans un environement qu'on poura modifier.
Ca n'a pas bcp d'interet, mais c'est defi lancer entre copains. Un ami fait cette IA sur Casio.
Et cela me permettera d'affiner mes competances en prog.
|
| |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Jeu 04 Mar 2010, 22:22
|
|
|
Alors le mieux c'est la matrice ou le pxl-test.
|
 |
|
| |
aleo
Invité
|
Posté le : Jeu 04 Mar 2010, 22:33
|
|
|
Le problème, c'est que c'est la promière fois fois que je fais un programme de ce type... Je ne me considère pas comme un debutant, car je programme pas mal, et souvent dans le but de m'aider en cour (resolution dequation, et tout le tralala).
Y a-t-il un bon tuto sur lequel je pourais me diriger, afin de combler cette lacune ?
|
| |
|
| |
Didouille
Autorisation : Membre
Nb de messages : 158
Inscrit le : Dim 11 Oct 2009, 14:18
|
Posté le : Jeu 04 Mar 2010, 23:01
|
|
|
Ici c'est pas mal : https://web.archive.org/web/20120729201828/https://web.archive.org/web/20120729201828/http://www.siteduzero.com/tutoriel-3-3656-le-ti-basic.html#part_3657
---------------------- --Didouille-- |
 |
|
| |
Stupid
Autorisation : Membre
Nb de messages : 765
Inscrit le : Jeu 28 Sep 2006, 18:42
|
Posté le : Ven 05 Mar 2010, 19:20
|
|
|
Une matrice est de la forme [A](Ligne,Colonne)
{Nombre de lignes, Nombre de colonnes}->dim([A]) permet de dimensioner une matrice [A] dont chaque case prendra la valeur 0 si elle est nouvelle. Sinon la fonction Remplir(0,[A]) permet de la remplir de 0 (Fill en anglais, je crois).
T'as donc une matrice [A](8,16) remplie de 0. Tu peux mettre les 1 manuellement ou faire un 1->[A](X,Y) par exemple.
Pour ce qui est des collisions, déjà tu sais que si un mur est en face tu peux pas avancer, sinon tu peux. Donc tu pourras t'aider de booléens pour simplifier le code. Tu dois savoir que si quelque chose est vrai alors il vaut 1 et sinon il vaut 0. par exemple, 2+3=5 vaut 1, 2+3=5=1 vaut 1, 2+3=6 vaut 0. Pour faire avancer un bidule, tu peux faire Aller à droite-Aller à gauche. Si on va à droite on ne peut aller à gauche, donc ici Aller à droite vaut 1 et Aller à gauche vaut 0, et 1-0 vaut 1. Dans le cas contraire, on a 0-1 ce qui vaut -1.
Un code simple sensé marcher (je suis rouillé) qui prend en compte les murs de la matrice (Case qui ne vaut pas 0) et les bords ([A](Y,0) ou [A](9,X) n'existent pas donc bug)
| Code |
:Output(A,B," "
:(C=26)-(C=24)->T
:If B+T>0 et B+T<16
:B+T(([A](A,B+T)=0)->B
:(C=34)-(C=25)->U
:If A+U>0 et A+U<8
:B+U(([A](A+U,B)=0)->B
:Output(A,B,"O
|
Bon après à toi de bidouiller.
J'éspere avoir été clair, utile et juste.
|
 |
|
| |
sypotu
Autorisation : Membre
Nb de messages : 651
Inscrit le : Dim 13 Sep 2009, 8:27
|
Posté le : Sam 06 Mar 2010, 8:35
|
|
|
Moi je te conseille d'uttiliser le graphe et des pxl-test
Avec ça j'avais fait une IA qui traversait n'importe quel labyrinthe
---------------------- Ti-83+.fr
Passe en 1ère S
Foire Aux Questions__________Traduction des fonctions Anglais/Français
Emplacement des fonctions____Lexique
Liste des jeux
Ouvrir, éditer et créer des .82p ou .83p sans télécharger de logiciel
Logiciel pour prendre des screenshot animés
Hebergeur pour vos .83p |
 |
|
| |
linkakro
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
|
Posté le : Sam 06 Mar 2010, 12:01
|
|
|
Avec la technique de toujours tourner d'un même coté ? ^^
Alors ce n'est pas si difficile (sauf si le labyrinthe n'est pas traditionnel auquel cas cette méthode peut avoir une faille)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store |
 |
|
| |
sypotu
Autorisation : Membre
Nb de messages : 651
Inscrit le : Dim 13 Sep 2009, 8:27
|
Posté le : Sam 06 Mar 2010, 13:06
|
|
|
ouai c'est ça
je suis d'accord avec toi c'est pas très dur mais c'est pour dire que l'on peut faire des trucs plus sympa avec le graphe
et qu'il est plus facile de mettre des obstacles avec le graphe
---------------------- Ti-83+.fr
Passe en 1ère S
Foire Aux Questions__________Traduction des fonctions Anglais/Français
Emplacement des fonctions____Lexique
Liste des jeux
Ouvrir, éditer et créer des .82p ou .83p sans télécharger de logiciel
Logiciel pour prendre des screenshot animés
Hebergeur pour vos .83p |
 |
|
| |
aleo
Invité
|
Posté le : Sam 06 Mar 2010, 15:10
|
|
|
Voila, j'ai testé ton code, stupid, mais il ne marche pas.
J'ai demander conseil a un ami, et voici ce que donne mon code. Il a un bug, car j'ai mis une boucle infini, mais le programme ne la prend pas en compte.
| Code |
Effecr
//////////////
je cree une liste de dimension 121, et je met des 1 pour mettre des murs
/////////////
1->c:1->d
0->b
1->c
1->a
while a#121
b+1->d
if b=16:c+1->c
if b=16:1->b
if l1(a)=1:output (c,b,"*"
if l1(a)=2
then
output(c,b,"0"
a->u
c->w
b->v
end
a+1->a
end
1->d
lbl d
while 1=1
if d=1
then
if l1(u+16)#1
then
output(v,w," "
w+1->w
u+16->u
output(v,w,"0"
goto m
else
if l1(u+16)=1
then
goto m
else
else
if d=2
then
if l1(u-1)#1
then
output(v,w,"0"
v-1->v
u-1->u
output (v,w,"0"
else
if l1(u-1)=1
else
goto m
else
else
if d=3
then
if l1(u-16)#1
then
output(v,w," "
w-1->w
u-16->u
output(v,w,"0"
else
if l1(u-16)=1
then
goto m
else
else
il d=4
then
if l1(u+1)#1
then
output (u,w," "
v+1->v
u-1->u
output(v,w,"0"
else
if l1(u+1)=1
then
goto m
else
else
lbl m
entaléat(1,4)->d
goto d
|
|
| |
|
| |
aleo
Invité
|
Posté le : Mar 09 Mar 2010, 18:24
|
|
|
Quelqu'un peux m'aider ?
|
| |
|
| |
Stupid
Autorisation : Membre
Nb de messages : 765
Inscrit le : Jeu 28 Sep 2006, 18:42
|
Posté le : Mar 09 Mar 2010, 19:17
|
|
|
Oui mon code contenait des erreurs et était incomplet. La il marche bien chez moi.
| Code |
:4->A
:8->B
:{8,16}->dim([A]
:Remplir(0,[A]
:For(I,1,10
:entaleat(1,8->G
:entaleat(1,16->H
:Output(G,H,"X
:1->[A](G,H
:End
:While 1
:codetouche->C
:(C=26)-(C=24)->T
:Output(A,B," "
:If B+T>0 et B+T<17
:B+T(([A](A,B+T)=0)->B
:(C=34)-(C=25)->U
:If A+U>0 et A+U<9
:A+U(([A](A+U,B)=0)->A
:Output(A,B,"O
:End
|
|
 |
|
| |
aleo
Invité
|
Posté le : Mar 09 Mar 2010, 21:02
|
|
|
Je viens de tester le code, et j'ai une erreur argument à la ligne :
B+T(([A](A+B+T)=0)->b
Sur la parenthèse après le T
|
| |
|
| |
Stupid
Autorisation : Membre
Nb de messages : 765
Inscrit le : Jeu 28 Sep 2006, 18:42
|
Posté le : Mar 09 Mar 2010, 21:55
|
|
|
C'est (A,B+T). Sinon pas d'erreurs.
|
 |
|
| |
aleo
Invité
|
Posté le : Mar 09 Mar 2010, 22:06
|
|
|
Exact...
j'ai corrigé, mais j'ai encore un problème... Quand je descend sur un x, sa me le 'mange'...
ça doit etre encore un faute de recopiage... je verifie demain,et je te dis sa.
merci beaucoup
|
| |
|
| |
aleo
Invité
|
Posté le : Sam 13 Mar 2010, 17:28
|
|
|
Ton code marche parfaitement.
Quelqu'un peux me dire d'ou viens le bug dans mon programme s'il vous plait
|
| |
|
| |
sypotu
Autorisation : Membre
Nb de messages : 651
Inscrit le : Dim 13 Sep 2009, 8:27
|
Posté le : Sam 13 Mar 2010, 17:48
|
|
|
Tu ouvre pleins de Then et de Else mais tu n'en ferme presque aucun !
Il faut que tu mette des End !
---------------------- Ti-83+.fr
Passe en 1ère S
Foire Aux Questions__________Traduction des fonctions Anglais/Français
Emplacement des fonctions____Lexique
Liste des jeux
Ouvrir, éditer et créer des .82p ou .83p sans télécharger de logiciel
Logiciel pour prendre des screenshot animés
Hebergeur pour vos .83p |
 |
|
| |