FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Calculatrice
par papydall Hier à 22:54

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Planétarium virtuel.
par Pedro Alvarez Mer 19 Sep 2018 - 9:28

» Demande pour Jack concernant PanExpress
par Marc Mar 18 Sep 2018 - 23:56

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 sokoban

Aller en bas 
AuteurMessage
659_minifly



Nombre de messages : 590
Age : 70
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

MessageSujet: sokoban   Lun 4 Avr 2011 - 20:01

jeu sokoban ( ou presque ).

télécharger les sprites et les niveaux au :

dl.free.fr/lnjc7NAn0

Mettre les répertoirs au même niveau que le programme suivant :

Code:



' ******************************************************************************
' Programme : Panoramic                                                        *
' Jeux                          : Sokoban                                    *
' Sur un exemple de FreeBasic                                                  *
' Commencé le : October 29, 2010                                              *
' ******************************************************************************
Label Sub_Lecture_Fichier_Niveaux,Sub_Charge_Table,Sub_Chargement_Sprite,Sub_deplacement
Label North, South, West,East ,Marque

Dim  Form_Jeux%
Dim  Numero_Fichier%
Dim  Plateform%
Dim  Nom_Fichier$
Dim  Fichier_Empty$
Dim  Fichier_Objet$
Dim  Fichier_Player$
Dim  Fichier_Target$
Dim  Fichier_Wall$
Dim  Fichier_Fond$
Dim  Fichier_Rippage$
Dim  Fichier_Pas$
Dim  Chaine$
Dim  CRLF$
Dim  Compteur_niveau%
Dim  Nombre_Caracteres%
Dim  Nligne%,Nbcolonne%
Dim  I%,J%,K%
Dim  Spr_Tableau%(100,100)
Dim  Nombre_Colonne%(100)
Dim  A$
Dim  Num_sprite%
Dim  Plateform_2D%
Dim  Largeur_sprite%
Dim  Hauteur_Sprite%
Dim  Mem_i%
Dim  Mem_j%
Dim  Player%
Dim  Num_objet%
Dim  Num_spr_objet%
Dim  Dummy$
Dim  Perd%
Dim  Rippage%
Dim  pas%

Largeur_sprite%=25
Hauteur_Sprite%=25
Compteur_niveau%=0
Num_objet%=0
Perd%=0

CRLF$=chr$(13)+chr$(10)

Form_Jeux%                        = 2000
Plateform%                        = 2001
Plateform_2D%                      = 2002
Rippage%                          = 3000
Pas%                              = 3001
Numero_Fichier%                    =    1

Nom_Fichier$="levels\classic.xsb"
Fichier_Fond$="gfx\fond.bmp"
Fichier_Empty$="gfx\empty.bmp"
Fichier_Objet$="gfx\object.bmp"
Fichier_Player$="gfx\Player.bmp"
Fichier_Target$="gfx\Target.bmp"
Fichier_Wall$="gfx\Wall.bmp"
Fichier_Rippage$="sfx\slide.wav"
Fichier_Pas$="sfx\footsteps.wav"

Sound Rippage%
Sound pas%

file_Load Rippage%,Fichier_Rippage$
File_Load Pas%,Fichier_Pas$
GoSub Sub_Lecture_Fichier_Niveaux

Form  Form_Jeux%
Height Form_Jeux%                  ,  550
Width  Form_Jeux%                  ,  540
Top    Form_Jeux%                  ,  100
Left  Form_Jeux%                  ,  600
color  Form_Jeux%,112,112,112

command_target_is Form_Jeux%



scene2d    Plateform_2D%
Height    Plateform_2D%                  ,  450
Width      Plateform_2D%                  ,  500
Top        Plateform_2D%                  ,  0
Left      Plateform_2D%                  ,  0
file_load  Plateform_2D%,Fichier_Fond$




hide    Plateform_2D%
Gosub Sub_Chargement_Sprite
Show    Plateform_2D%


Caption Form_Jeux%,"Niveau : "+ str$(Compteur_niveau%)+" SoKoramic "

'  Print_target_is Form_Jeux%
'  Font_Name Form_Jeux%,"Lucida Console"
'  Font_Size Form_Jeux% , 20
'  Font_Bold Form_Jeux%
'  Font_Italic Form_Jeux%
'  Print_locate 20,375
'  print "Jeu Sokoban"
'  Print_Locate 20,410
'  print "Level :"+  str$(Compteur_niveau%)
'  Print_target_is 0

On_Key_down Form_Jeux%,Sub_deplacement

end 

Sub_Lecture_Fichier_Niveaux:
Nligne%    = 0

' Ouverture du fichier Level
File_open_read    Numero_Fichier%,Nom_Fichier$
File_Readln        Numero_Fichier%,Chaine$

            If Chaine$="" then Compteur_niveau% = Compteur_niveau%+1

While file_eof (Numero_Fichier% ) <>1

            File_Readln    Numero_Fichier%,Chaine$
       
            If Chaine$="" then Return


               
                  Gosub Sub_Charge_Table
                 
                  Nligne% = Nligne% + 1
end_while

File_Close Numero_Fichier%
Return


Sub_Charge_Table:
Nombre_Caracteres% = len(chaine$)
Nombre_Colonne%(Nligne%)=len(chaine$)

            For Nbcolonne% = 0 to Nombre_Caracteres%
                        Spr_Tableau%(Nligne%,Nbcolonne%) = asc(mid$(chaine$,Nbcolonne%+1,1))
            Next Nbcolonne%

Return

Sub_Chargement_Sprite:

      for I%=0 to Nligne%
            for j%=0 to Nombre_Colonne%(I%)
 
'    If Spr_Tableau$(I%,j%)=chr$(32)
'              Num_sprite%=Number_sprites+1
'                    sprite  Num_sprite%
'                          sprite_file_load Num_sprite%,Fichier_Empty$
'                    sprite_position Num_sprite%,Largeur_sprite%*j%,Hauteur_sprite%*I%
'    End_If


      If Spr_Tableau%(i%,j%)=36

      Num_sprite%=Number_sprites+5000
              sprite  Num_sprite%
                      sprite_file_load Num_sprite%,Fichier_Objet$
                  sprite_position Num_sprite%,Largeur_sprite%*j%,Hauteur_sprite%*I%
              Spr_Tableau%(i%,j%)=Num_sprite%
      End_If
     
      If Spr_Tableau%(i%,j%)=64
      Mem_i%=i%
      Mem_j%=j%
                  Num_sprite%=Number_sprites+1
                  Player%=Num_sprite%
                  sprite  Num_sprite%
                        sprite_file_load Num_sprite%,Fichier_Player$
                  sprite_position Player%,Largeur_sprite%*j%,Hauteur_sprite%*I%
                  Spr_Tableau%(i%,j%)=32
      End_If
 
      If Spr_Tableau%(i%,j%)=46
            Num_sprite%=Number_sprites+7000
                  sprite  Num_sprite%
                        sprite_file_load Num_sprite%,Fichier_Target$
                  sprite_position Num_sprite%,Largeur_sprite%*j%,Hauteur_sprite%*I%
                  Spr_Tableau%(i%,j%)=Num_sprite%
      End_If
 
      If Spr_Tableau%(i%,j%)=35
            Num_sprite%=Number_sprites+1
                  sprite  Num_sprite%
                        sprite_file_load Num_sprite%,Fichier_Wall$
                  sprite_position Num_sprite%,Largeur_sprite%*j%,Hauteur_sprite%*I%
                  Spr_Tableau%(i%,j%)=35
      End_If

            next j%
      next I%
Return

Sub_deplacement:
      gosub Marque
      If Key_down_Code = 38 then Gosub North
      If Key_down_Code = 40 Then Gosub South
      If Key_down_Code = 39 Then Gosub East
      If Key_down_Code = 37 Then Gosub West
      If Key_down_Code = 87 Then Gosub Marque
     
Return


North:

            If Spr_Tableau%(Mem_i%-1,Mem_j%)=35 then Return
                  If Spr_Tableau%(Mem_i%-1,Mem_j%)=32
                  print Spr_Tableau%(Mem_i%-1,Mem_j%)
                  play pas%
                        sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%-Hauteur_sprite%
                              Mem_i% = Mem_i%-1
                        Return
                              If Spr_Tableau%(Mem_i%-1,Mem_j%)>7000
                                  sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%-Hauteur_sprite%
                                  Mem_i% = Mem_i%-1
                              end_if
                        Return
                  end_if

            If Spr_Tableau%(Mem_i%-1,Mem_j%)>5000 and Spr_Tableau%(Mem_i%-2,Mem_j%)=32 or Spr_Tableau%(Mem_i%-2,Mem_j%)>7000
            Play rippage%
           
           
                  sprite_Y_Position Spr_Tableau%(Mem_i%-1,Mem_j%),(Mem_i%-1)*Hauteur_sprite%-Hauteur_sprite%
              display   
                  sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%-Hauteur_sprite%
                  Spr_Tableau%(Mem_i%-2,Mem_j%)=Spr_Tableau%(Mem_i%-1,Mem_j%)
                  Spr_Tableau%(Mem_i%-1,Mem_j%)=Spr_Tableau%(Mem_i%,Mem_j%)
                  Mem_i% = Mem_i%-1
                  Return
            End_If
Return

      South:

            If Spr_Tableau%(Mem_i%+1,Mem_j%)=35 then Return
                  If Spr_Tableau%(Mem_i%+1,Mem_j%)=32
                  play pas%
                        sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%+Hauteur_sprite%
                              Mem_i% = Mem_i%+1
                      Return
                  end_if
                            if Spr_Tableau%(Mem_i%+1,Mem_j%)>7000
                                sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%+Hauteur_sprite%
                                Mem_i% = Mem_i%+1
                              Return
                            End_If
            If Spr_Tableau%(Mem_i%+1,Mem_j%)>5000 and Spr_Tableau%(Mem_i%+2,Mem_j%)=32 or Spr_Tableau%(Mem_i%+2,Mem_j%)>7000
                  sprite_Y_Position Spr_Tableau%(Mem_i%+1,Mem_j%),(Mem_i%+1)*Hauteur_sprite%+Hauteur_sprite%
                  sprite_Y_Position Player%,Mem_i%*Hauteur_sprite%+Hauteur_sprite%
                  Spr_Tableau%(Mem_i%+2,Mem_j%)=Spr_Tableau%(Mem_i%+1,Mem_j%)
                  Spr_Tableau%(Mem_i%+1,Mem_j%)=Spr_Tableau%(Mem_i%,Mem_j%)
                  Mem_i% = Mem_i%+1
                  Return
            End_If

Return
      East:
            If Spr_Tableau%(Mem_i%,Mem_j%+1)=35 then Return
           
                  If Spr_Tableau%(Mem_i%,Mem_j%+1)=32
                      play pas%
                        sprite_X_Position Player%,Mem_J%*Largeur_sprite%+Largeur_sprite%
                        Mem_J% = Mem_J%+1
                        Return
                  End_if
                            If Spr_Tableau%(Mem_i%,Mem_j%+1)>7000
                                sprite_X_Position Player%,Mem_J%*Largeur_sprite%+Largeur_sprite%
                                Mem_J% = Mem_J%+1
                            Return
                  End_If
                  If Spr_Tableau%(Mem_i%,Mem_j%+1)>5000 and Spr_Tableau%(Mem_i%,Mem_j%+2)=32 or Spr_Tableau%(Mem_i%,Mem_j%+2)>7000
                  sprite_X_Position Spr_Tableau%(Mem_i%,Mem_j%+1),(Mem_J%+1)*Largeur_sprite%+Largeur_sprite%
                  sprite_X_Position Player%,Mem_J%*Largeur_sprite%+Largeur_sprite%
                  Spr_Tableau%(Mem_i%,Mem_j%+2)=Spr_Tableau%(Mem_i%,Mem_j%+1)
                  Spr_Tableau%(Mem_i%,Mem_j%+1)=Spr_Tableau%(Mem_i%,Mem_j%)
                  Mem_J% = Mem_J%+1
                  Return
            End_If

Return

      West:
     
            If Spr_Tableau%(Mem_i%,Mem_j%-1)=35 then Return
                  If Spr_Tableau%(Mem_i%,Mem_j%-1)=32
                        sprite_X_Position Player%,Mem_J%*Largeur_sprite%-Largeur_sprite%
                        play pas%
                              Mem_J% = Mem_J%-1
                              Return
                  End_if
                              If Spr_Tableau%(Mem_i%,Mem_j%-1)>7000
                                    sprite_X_Position Player%,Mem_J%*Largeur_sprite%-Largeur_sprite%
                                    Mem_J% = Mem_J%-1
                                  Return
                              End_If
            If Spr_Tableau%(Mem_i%,Mem_j%-1)>5000 and Spr_Tableau%(Mem_i%,Mem_j%-2)=32 or Spr_Tableau%(Mem_i%,Mem_j%-2)>7000
                  sprite_X_Position Spr_Tableau%(Mem_i%,Mem_j%-1),(Mem_J%-1)*Largeur_sprite%-Largeur_sprite%
                  sprite_X_Position Player%,Mem_J%*Largeur_sprite%-Largeur_sprite%
                  Spr_Tableau%(Mem_i%,Mem_j%-2)=Spr_Tableau%(Mem_i%,Mem_j%-1)
                  Spr_Tableau%(Mem_i%,Mem_j%-1)=Spr_Tableau%(Mem_i%,Mem_j%)
                  Mem_J% = Mem_J%-1
                  Return
            End_if
     
Return

Marque:
' print_target_is  Form_Jeux%
  Font_Size 0, 5
cls
            for I%=0 to Nligne%
            for j%=0 to Nombre_Colonne%(I%)
            Print_locate  j%*Largeur_sprite%,i%*Hauteur_sprite%
            if Spr_Tableau%(i%,j%)>7000 then Perd%=perd%+1
            print  Spr_Tableau%(i%,j%)
  next J%
  next i%
  Print_locate  j%*Largeur_sprite%,i%*Hauteur_sprite%+20
  print perd%
  Print_locate  j%*Largeur_sprite%,i%*Hauteur_sprite%+20
  if perd%=0 then print "gagne"
  perd%=0

Return



Je ne gère pas les niveaux de jeu. dans le répertoir levels il y a d'autres niveaux si cela vous interesse.



Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1912
Date d'inscription : 28/05/2007

MessageSujet: Re: sokoban   Mar 5 Avr 2011 - 7:12

Merci pour cette magnifique contribution.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.1fr1.net
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: sokoban   Ven 27 Mai 2011 - 17:22

Désolé, j'étais pas mal occupé dernièrement, mais je viend de prendre en compte ton source Smile
Bon, maintenant, plus qu'à le passer en 3D avec le tuto de jimx78. Capable minifly ?
On essaye de se le faire en Team working si tui cales sur un point ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
659_minifly



Nombre de messages : 590
Age : 70
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

MessageSujet: Re: sokoban   Ven 27 Mai 2011 - 17:31

Désolé Jicehel
Mais pour le moment je n'ai pas vraiment le temps.
Une autre fois peut-etre.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5929
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: sokoban   Ven 27 Mai 2011 - 19:04

ok, j'aurais essayé !! ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: sokoban   

Revenir en haut Aller en bas
 
sokoban
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Sokoban (pousser les caisses)
» sokoban

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les jeux faits avec Panoramic-
Sauter vers: