1

Bnjour.
Je souhaiterais apprendre la programmation et je me suis dit que je devrais commencer en basic.
J'ai donc décidé de faire un jeu de labyrinthe en fausse 3D dans lequel il faudrait trouver des clefs pour sortir.
Le problème c'est que pour l'instant, je n'y connait rien, je me doute bien que d'autre jeux comme ça en déjà été réalisé mais j'ai décidé de ne pas aller voir des codes déjà existant.
Je vais donc avoir besoin d'aide et de conseils dans la réalisation de ce jeu.
Je remerci d'avance toutes les personnes qui voudront bien me donner des idées.

2

3

Essaie de trouver des tutoriels sur la programmation en TI-BASIC et lis ton manuel.
Ce n'est pas une mauvaise idée également de jeter un coup d'oeil sur des sources existantes, si elles sont bien codées ça peut t'apporter beaucoup.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

4

Edited_3608

5

Merci pour vos réponses si rapides, mais je souhaite réellement faire ce labyrinthe.
Bon d'accord, je vise peu être un peu haut pour mon premier programme grin , mais je suis hyper motivé et c'est un projet qui me tient vraiment à coeur heart .
J'ai commencé à programmer, j'ai fait un menu et quelques début de graphisme (des dessins).
Pour pouvoir me déplacer dans le labyrinthe, je présume que je vais devoir me servir de matrices (j'ai commencé à lire la doc dessus sur le manuel). Et je me heurte déjà à un problème:
pour mes murs je peux définir 0tongueas de mur et 1:mur mais dans une matrice on peut mettre beaucoup plus que des 0 et des 1 . Du coup, la matrice prend beaucoup de place pour rien.
Comment arranger cela?

6

Tu ne peux pas vraiment optimiser à ce niveau.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

Sasume :
Tu ne peux pas vraiment optimiser à ce niveau.


Il ne pourrait pas pas exemple considerer chaque valeur de la matrice comme un ensemble de bits, et extraire la valeur de chaque bit un par un pour tester la valeur d'un case? Par exemple, si il y a 145 dans la premiere case, cela donne 10010001 en binaire, donc des valeurs de miurs/vide correspondantes. (il faudrait pour ca limiter le nombre maximum de bits, sinon ca marchera pas).
Bien sur, ca prendra plus de temps pour tester une case, mais ca ferait gagner un peu de place..
N/A

8

Edited_3609

9

Tu devrais essayer d'apprendre le C, tu pourras plus t'amuser avec ça smile
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

10

Mouais, même conseils que d'habitude, si tu veux apprendre la programmation j'aurais plutot tendance à te conseiller de commencer par le basic, au moins tu peux te familiariser ac les notions de base sans risque. Commencer la prog par le C c'est risquer de faire bcp de conneries et se rajouter des tas de complications qui n'ont rien a voir avec la programmation mais qui ne sont que des contraintes du langage.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

Merci pour vos réponses.
Je ne vais pas optimiser la taille des matrices car une matrice de 20*20 (largement suffisante pour se perdre) pèse très peu.
En revanche, faire balader un point sur un laby vu de dessus, c'est simple il suffit de tester les cases autour pour pas rentrer dans les murs. Mais lorsque on est en vue 3d il faut définir une orientation à la caméra (nord sud est ouest) et l'on se retrouve du coup avec 4 parties du programme qui calcule la même chose, mais de manière différentes.
Comment faire pour tout regrouper en un seul morceau?

12

13

J'ai réussi à grouper les orientations Nord-Sud et Est-Ouest mais pour grouper le tout, il faudrait trouver un moyen pour passer de mat[a,b] à mat[b,a].
Devrais-je à chaque fois mettre a dans b et b dans a?
Cela prendrait autant de place que de faire 2 parties indépendantes.

ps: je comprends que sans voir le code vous ayez du mal à comprendre, je vais donc bientôt mettre en ligne le coeur du programme.

14

J'ai retapé sur l'ordinateur la partie du programme qui permet d'afficher le contenu de la matrice mat comme si l'on était dedans.
Je ne sais pas si vous comprendrez les dessins que cela donne.
Vous devez savoir aussi que 1 bloc sur 4 est plein dans la matrice, un peu comme cela:
111111111
100000001
101010101
100000001
101010101
100000001
111111111

Bon sinon por ceux qui veulent m'aider à optimiser mon code, voilà le programme:

1->d (orientation vers le haut)
20->a (emplacement de départ sur la matrice au coin en bas à droite)
20->b

Loop (boucle infini)
If d=1 or d=2 Then
Clrdraw
If d=1:1->e
If d=2:-1->e
If mat[a,b-e]=1 Then
Dessiner un mur à gauche
Else
Dessiner un mur "plat" (de face)
EndIf
If mat[a,b+e]=1 Then
Dessiner un mur à droite
Else
Dessiner un mur "plat" (de face)
EndIf
If mat[a-e,b]=1 Then
Dessiner un mur de face au milieu
EndIf

0->k
While k=0
getkey()->k
EndWhile

If d=1 then
If k=haut and mat[a-1,b]=0:a-1->a
If k=bas and mat[a+1,b]=0:a-1->a
If k=gauche:4->d
If k=droite:3->d
Else
If k=haut and mat[a+1,b]=0:a+1->a
If k=bas and mat[a-1,b]=0:a-1->a
If k=gauche:3->d
If K=droite:4->d
EndIf
EndIf

If d=3 or d=4 Then
Clrdraw
If d=3:1->e
If d=4:-1->e
If mat[a-e,b]=1 Then
Dessiner un mur à gauche
Else
Dessiner un mur "plat" (de face)
EndIf
If mat[a+e,b]=1 Then
Dessiner un mur à droite
Else
Dessiner un mur "plat" (de face)
EndIf
If mat[a,b+e]=1 Then
Dessiner un mur de face au milieu
EndIf

0->k
While k=0
getkey()->k
EndWhile

If d=3 then
If k=haut and mat[a,b+1]=0:b+1->b
If k=bas and mat[a,b-1]=0:b-1->b
If k=gauche:1->d
If k=droite:2->d
Else
If k=haut and mat[a,b-1]=0:b-1->b
If k=bas and mat[a,b+1]=0:b+1->b
If k=gauche:2->d
If K=droite:1->d
EndIf
EndIf

15

Dans ton code, tu pourrais pas remplacer tous les:

If d=1:1->e
If d=2:-1->e
If d=3:1->e
If d=4:-1->e


par quelque chose du genre

Directio={1,-1,1,-1}
...
Directio[d]->e


et aussi faire la meme chose pour les mouvements, comme cela tu pourrais tout fusionner en une seule partie?
Je dis ce que je vois rapidement, parce que le code est pas formatte, c'est dur de juger.

Edit: francais...
N/A

16

J ai programmé une adaptation de spy vs spy sur V200 ca donne ca :
73469.gif
73470.gif
73472.gif

Tu n'es pas obligé d'utiliser uniquement 0 et 1 pour ton labyrinthe

12
34

1 : Pièce du labyrinthe avec un acces en bas et sur la droite
2 : Pièce du labyrinthe avec un acces en bas et sur la gauche
3 : Pièce du labyrinthe avec un acces en haut et sur la droite
4 : ...

Si ton personnage se trouve dans la pièce numéro 2 traduit comme ceci :
1 -> a
2 -> b
if mat[a,b]=2 : rclpic pic2
ou pic2 est :Pièce du labyrinthe avec un acces en bas et sur la gauche

17

(Spy vs Spy trilove)

Sinon comment tu gerais les meubles ?

18

LinkWebmaster> Le systeme que tu as utilise gere tous les cas possible de piece (Par exemple, piece avec un acces en bas a droite et en haut a gauche, ou une piece avec 3 ou 4 acces)?
N/A

19

Non, pour spy vs spy il n'y a que 8 pièces dont j ai attribué un numéro à celles ci et chaque déplacement est défini. Mais si je devais programmé un labyrinthe il est vrai que l utilisation d'une matrice est ce qu il y a de préférable.
Oui je pense que tu devrais définir un élément de la matrice avec un numéro
le numéro 1 correspondrait à une pièce avec un seul acces en haut par exemple
le numéro 2 un seul acces en bas et ainsi de suite pour tous les cas de figure
ainsi tu pourras meme intégrer des pièces avec des éléments particuliers genre une oubliette sans oublier un acces d'entrée et de sortie, bref...
Je peux te programmer le départ de ton programme labyrinthe avec une matrice si tu veux...

20

naPO> il n y a qu'une dizaine de meuble donc avec une variable pour chacun d'eux c'est tout a fait gérable. Il y a trois items repartis aléatoirement a chaque partie "sous les meubles" ensuite j ai reintégrer une variable avec une option pour piéger les meubles. A chaque tour tu as le droit a trois déplacements. Tu peux piéger un meuble pour que ton adversaire meurt et gagner ainsi des déplacements en plus...enfin j ai intégrer pas mal de petites règles comme ca pour rendre le jeu un peu plus fun

21

Je n'ai pas très bien compris, peu vois tu tes salles sous n'importe quel angle?
Car mon labyrinthe n'a pas du tout la même forme je vous aurais bien montré mais je ne sais pas mettre d'image sur ce forum.
Comment fait on?

22

il faut mettre l'adresse de ton image entre des balises [img], comme ça : [img]adresse[/img]
(et désolé si tu es déjà au courant, mais pour que ça marche il faut que ton image soit sur un serveur web, si tu ne sais pas comment faire tu peux utiliser un truc que j'ai fait pour yN, ici : http://databob.free.fr/Volume/)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

23

une idee comme-ca pour reduire la taille des donnes du decor pour les murs :
Au lieu d'une matrix utilise une chaine de caractere ou tu stocke tes murs.
Reste a voir si c'est aussi rapide pour recuperer les valeurs.

Exemple :
"111111111
100000001
101010101
100000001
101010101
100000001
111111111"->data

si tu connais l'index de la ligne et de la colonne tu peux recuperer ton code en faisant :
ord( mid( data, nbr_col * (num_row - 1) + num_col, 1 ) ) - ord("0")

Bien sur tu precalcule ord("0") pour en connaitre la valeur histoire d'eviter une operation inutile.

Mais bon ce sera surement plus lent que les MATRIX je pense ; rien ne t'empeche de tester.





24

Ou peut-etre en stockant une chaine de caractere par ligne et en mettant le tout dans une liste:

{ "111111111", "100000001", ... , "111111111"}_>data et en recuperant les valeurs avec:

expr(mid(data[num_row],num_col,1))

si expr() n'est pas trop lent.
N/A

25

Merci pour vos idées d'optimisation, je vais tester si c'est assez rapide et si la place en mémoire est diminuée.
En attendant, voici des images (provisoire) du labyrinthe:
(Merci à Zephir top )
index.php?f=36C6DF51
index.php?f=FA923FD5


26

27

Martial Demolins> Elle a l'air pas mal cette technique, le probleme est qu'il faut avoir des variables a porte generale, donc pas possible d'utiliser Local. J'y penserai la prochaine fois que je programmerai top
N/A

28

29

dal :
Martial Demolins> Elle a l'air pas mal cette technique, le probleme est qu'il faut avoir des variables a porte generale, donc pas possible d'utiliser Local. J'y penserai la prochaine fois que je programmerai top

Tu peux aussi faire Goto #("l"&string(k)) smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

30