Poster un nouveau sujet Poster une réponse
Sokoban
Auteur Message
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Dim 05 Jui 2011, 19:03   Citer 

Bonjour,bonsoir,
Je vous poste ici un sokoban que j'ai créé hiers soir et aujourd'hui.
Il se lance avec le programme SOKO. La première fois que vous le lançez, sélectionnez "AUTRE NIVEAU" et entrez 1. vous vous déplacez avec les flèches, quittez avec annul (si vous choisisais se sauvegarder, la sauvegarde ne reste valide que tans que vous ne modifiez pas la matrice [A] et que vous ne jouez pas une autre partie de sokoban ; elle doit être rappelée au lancement en choisissant "CHARGER SAUV". Attention, par soucis de fluidité, le programme ne test si vous avez gagnés qu'à l'appuis sur [entrer].





Vous pouvez créer vos propres niveaux (n'hésittez pas à les poster) en créant une matrice dont les dimmentions correspondent au nombre de tuiles, de la remplir de 0 (fonction "Remplir(0,[A])" ou "fill(0,[A])" pour les TI en anglais), de placer pour chaque tuile initiallement occupée :
6 si c'est un mur
5 si c'est une caisse sur un objectif
4 si c'est vous sur un objectif
3 si c'est un objectif seul
2 si c'est une caisse seule
1 si c'est vous seul
0 si c'est vide

Ensuite rajoutez, dans les 2 lignes vides de CHOIXNIV (issérez en d'autres à cet endroit pour avoir assez de place,

Code
If [théta]=Nombre      //Nombre est à remplacer par un nombre entier et positif
Then
[rapeler ici la matrice où vous avez placés les code des tuiles] -> [A]  //vous pouvez enlever le "]]" de la fin
[abscice du personnage en tuiles (4*4 pixels) ] -> X
[ordonnée du personnage en tuiles (4*4 pixels) ] -> Y
Return
End







Voici SOKO, le programme pricipal SOKO.83p
Code
Full
FnOff
PlotsOff
GridOff
AxesOff
LabelOff
ExprOff
0 -> Xmin
94 -> Xmax
-62 -> Ymin
0 -> Ymax
While 1
Lbl CN
prgmCHOIXNIV
ClrDraw
dim([A] -> L1
For(A,1,L1(1
For(B,1,L1(2
If 1=[A](A,B:Then:A -> Y:B -> X:End
prgmSOKOAFF
End
End
Lbl C
X -> S
Y -> T
1 -> Z
While Z
Repeat K=24 or K=25 or K=26 or K=34 or K=45 or K=105
getKey -> K
End
If K=45:Goto Q
If K=105:prgmSOKOVICT
Y-(K=25)+(K=34 -> T
X+(K=26)-(K=24 -> S
If 6[différend de][A](T,S
Then
If 3=[A](T,S) or not([A](T,S
Then
[A](Y,X)-1[différend de] [A](Y,X
S -> X
TüY
1+[A](Y,X -> [A](Y,X
Else
If (2=[A](T,S) or 5=[A](T,S)) and (3=[A](2T-Y,2S-X) or not([A](2T-Y,2S-X
Then
[A](T,S)-1 -> [A](T,S
[A](Y,X)-1 -> [A](Y,X
2+[A](2T-Y,2S-X -> [A](2T-Y,2S-X
S -> X
T -> Y
End
End
If K=25 or K=34:Then
For(C,4X-4,4X-1
Line(C,8-4Y,C,ú=-3-4Y,0
End
Y -> A:X -> B:prgmSOKOAFF
Y+1 -> A:prgmSOKOAFF
Y-1 -> A:prgmSOKOAFF
End
If K=24 or K=26:Then
For(C,1-4Y,4-4Y
Line(4X-8,C,4X+3,C,0
End
Y -> A:X -> B:prgmSOKOAFF
X+1 -> B:prgmSOKOAFF
X-1 -> B:prgmSOKOAFF
End
Y -> A:X -> B:prgmSOKOAFF
X-1 -> B:prgmSOKOAFF
X+1 -> B:prgmSOKOAFF
Y+1 -> A:X -> B:prgmSOKOAFF
Y-1 -> A:prgmSOKOAFF
End
End
End
Lbl Q
Menu("","CONTINUER",C,"QUITTER",QQ,"SAUVER+QUITTER",Q2,"CHANGER DE NIV",CN
Lbl Q2
{A,B,C,N,O,S,T,X,Y,Z,[théta] -> ListeSOKO
Goto Q3
Lbl QQ
DelVar [A]ClrList L1
{0 -> ListeSOKO
Lbl Q3
ClrDraw
AxesOn
ExprOn
ZStandard
FnOn
ClrHome
"



Voici CHOIXNIV, le programme ou sont enregistrés les niveaux. (CHOIXNIV.83p)

Code
Lbl AN
Input "NIVEAU N°",[théta]
iPart(abs([théta] -> [théta]
Lbl NA
If [théta]=1
Then
[[0,0,0,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0][0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0][0,0,0,0,6,2,0,0,6,0,0,0,0,0,0,0,0,0,0][0,0,6,6,6,0,0,2,6,6,0,0,0,0,0,0,0,0,0][0,0,6,0,0,2,0,2,0,6,0,0,0,0,0,0,0,0,0][6,6,6,0,6,0,6,6,0,6,0,0,0,6,6,6,6,6,6][6,0,0,0,6,0,6,6,0,6,6,6,6,6,0,0,3,3,6][6,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,3,3,6][6,6,6,6,6,0,6,6,6,0,6,1,6,6,0,0,3,3,6][0,0,0,0,6,0,0,0,0,0,6,6,6,6,6,6,6,6,6][0,0,0,0,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0 -> [A]
12 -> X
9 -> Y
Return
End
If [théta]=2
[[6,6,6,6,6,6,6,6,6,6,6,6,0,0][6,3,3,0,0,6,0,0,0,0,0,6,6,6][6,3,3,0,0,6,0,2,0,0,2,0,0,6][6,3,3,0,0,6,2,6,6,6,6,0,0,6][6,3,3,0,0,0,0,1,0,6,6,0,0,6][6,3,3,0,0,6,0,6,0,0,2,0,0,6][6,6,6,6,6,6,0,6,6,2,0,2,0,6][0,0,6,0,2,0,0,2,0,2,0,2,0,6][0,0,6,0,0,0,0,6,0,0,0,0,0,6][0,0,6,6,6,6,6,6,6,6,6,6,6,6 -> [A]
5 -> Y
8 -> X
Return
End
If [théta]=3
Then
[[0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,0][0,0,0,0,0,0,0,0,6,0,0,0,0,0,1,6,0][0,0,0,0,0,0,0,0,6,0,2,6,2,0,6,6,0][0,0,0,0,0,0,0,0,6,0,2,0,0,2,6,0,0][0,0,0,0,0,0,0,0,6,6,2,0,2,0,6,0,0][6,6,6,6,6,6,6,6,6,0,2,0,6,0,6,6,6][6,3,3,3,3,0,0,6,6,0,2,0,0,2,0,0,6][6,6,3,3,3,0,0,0,0,2,0,0,2,0,0,0,6][6,3,3,3,3,0,0,6,6,6,6,6,6,6,6,6,6][6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0 -> [A]
15 -> X
2 -> Y
Return
End
If [théta]=4
Then
[[0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6][0,0,0,0,0,0,0,0,0,0,0,6,0,0,3,3,3,3,6][6,6,6,6,6,6,6,6,6,6,6,6,0,0,3,3,3,3,6][6,0,0,0,0,6,0,0,2,0,2,0,0,0,3,3,3,3,6][6,0,2,2,2,6,2,0,0,2,0,6,0,0,3,3,3,3,6][6,0,0,2,0,0,0,0,0,2,0,6,0,0,3,3,3,3,6][6,0,2,2,0,6,2,0,2,0,2,6,6,6,6,6,6,6,6][6,0,0,2,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0][6,6,0,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0][6,0,0,0,0,6,0,0,0,0,6,6,0,0,0,0,0,0,0][6,0,0,0,0,0,2,0,0,0,6,6,0,0,0,0,0,0,0][6,0,0,2,2,6,2,2,0,0,1,6,0,0,0,0,0,0,0][6,0,0,0,0,6,0,0,0,0,6,6,0,0,0,0,0,0,0][6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0 -> [A]
12 -> Y
11 -> X
Return
End


ClrHome
Pause "NIVEAU INEXISTANT
Goto 1



Voici SOKOAFF (le programme qui gère l'affichage des tuiles SOKOAFF.83p

Code
4A -> O
4B -> N
If 6=[A](A,B
Then
Line(N-1,1-O,N-4,4-O
Line(N-3,1-O,N-4,2-O
Line(N-1,3-O,N-2,4-O
End
If 2=[A](A,B
Then
Pt-On(N-3,3-O
Pt-On(N-3,3-O,2
End
If 3=[A](A,B
Pt-On(N-3,3-O
If 5=[A](A,B
Pt-On(N-3,3-O,2
If 1=[A](A,B) or 4=[A](A,B
Pt-On(N-3,3-O,3



Et enfin le dernier sous-programme, SOKOVICT qui sert à vérifier les victoires (
#SOKOVICT.83p)

Code
ClrHome
Output(3,3,"VERIFICATION    DE VICTOIRE       EN COURS
0 -> Z
For(A,1,L1(1
For(B,1,L1(2
If 2=[A](A,B
1 -> Z
End
End
ClrHome
If not(Z:Output(4,2,"NIVEAU REUSSIT
If Z:Output(4,1,"VOUS DEVEZ VOUS    TROMPER!
Pause
DispGraph



Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Dim 05 Jui 2011, 21:36   Citer 

ca a l'air bien!

je me demandais si mettre des
6->[A](nombre,autre_nombre)
ca reviendrais pas moins lourd

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Cocodidou



Autorisation : Membre
Nb de messages : 79
Inscrit le : Dim 15 Mai 2011, 11:33
Posté le : Lun 06 Jui 2011, 7:19   Citer 

Manque plus que SOKOAFF winkle.gif
Bon courage!

 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 06 Jui 2011, 18:23   Citer 

J'édite mon premmier programme pour rajouter les 2 sous-programmes manquants et pour rajouter les consignes d'utilisation et de création de niveau (malheureusement sans éditeur, direct les matrices).

Sandro

EDIT : je ne crois pas qu'un :2 -> [A](12,13 soit plus intéréssant : ça fait de 9 à 11 octés pour une tuile et ça complique la fabrication du niveau, après, si tu as le courage de créer le niveau comme ça (déjà que ça prend du temps avec la méthode de la matrice), n'ésite pas à le poster, on pourra comparer le résultat.

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Lun 06 Jui 2011, 21:01   Citer 

Et avec des for?

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 06 Jui 2011, 21:04   Citer 

Possible que l'on gagne un peu de place, mais celà ralentirrait le programme et rendrait très compliqué la création d'un niveau : il ne suffit plus de faire juste le dessin sur une feuille à carreaux et de remplacer chaque élément par son numérau.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Lun 06 Jui 2011, 21:07   Citer 

j'ai fait comme ca quand j'ai fait un mario sur 82statsfr

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 06 Jui 2011, 21:12   Citer 

Pour un jeux de type mario, c'est peut-être adapté, mais pour un sokoban, il faut beacoup de niveaux car on ne les rejoue pas plus de 2-3 fois et il est bien plus rapide de créer les niveaux par la méthode expliquée au premier niveau, méthode qui prend au max 800 octés par niveau.

Merci quand même
Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Lun 06 Jui 2011, 22:31   Citer 

mouis enfin bon j'avait fait quand meme une quinzaine de niveaux.

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 07 Jui 2011, 8:07   Citer 

oui sauf que chaque niveau avait probablement un "scénario", alors que pour le Sokoban il ne s'agit que des positions des tuiles non vides, donc pas de mouvements cycliques à programmer.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Mar 07 Jui 2011, 11:57   Citer 

aucun mouvement cyclique, juste des matrices. comme toi. sinon ca aurait été beaucoup plus lent

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 07 Jui 2011, 19:38   Citer 

crazy.gif Quoi crazy.gif un crazy.gif mario crazy.gif sans crazy.gif ennemis crazy.gif qui crazy.gif bougent? crazy.gif
A moins qu'ils avancent mais ne font jamais demi tours?
Sandro crazy.gif crazy.gif crazy.gif

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Jeu 09 Jui 2011, 21:55   Citer 

nan, pas sur ti 82 ca serait du suicide, juste des truc qui faut sauter paar dessus etc... c'est pourtant tres sympa crois moi

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 09 Jui 2011, 22:09   Citer 

En ASM, il y en a avec et des bons.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Akmdad



Autorisation : Membre
Nb de messages : 713
Inscrit le : Mar 22 Jui 2010, 21:03
Posté le : Ven 10 Jui 2011, 18:53   Citer 

En ASM.

----------------------
retrouvez moi sur twitter!!!


j'ai une ti 82 stats fr et une ti89 titanium happy.gif
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes