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
» Détection connexion internet
par JL35 Aujourd'hui à 18:39

» Le parcours du cavalier sur un échiquier 8 x 8
par pascal10000 Hier à 13:26

» Casse-tête : Echanger les positions des cavaliers
par papydall Sam 22 Juil 2017 - 19:42

» Compilateur FBPano
par jean_debord Sam 22 Juil 2017 - 10:54

» demande pour recuperer un text speciale
par pascal10000 Ven 21 Juil 2017 - 22:04

» KGF_dll - nouvelles versions
par Klaus Ven 21 Juil 2017 - 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 Discussion sur un jeu genre Mario en Panoramic

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5456
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Discussion sur un jeu genre Mario en Panoramic   Ven 10 Fév 2017 - 20:23

Salut tout le monde.
Je me suis toujours posé la question : comment étaient codés les jeux de plate-forme genre Super Mario, où un personnage se déplace dans un monde (pouvant être très grand)  alors que l’écran défile.
A cette époque, les PC et consoles de jeu ne disposaient que d’une très petite mémoire et pourtant ces jeux étaient (et le sont toujours) là !
Il y a surement une technique de programmation qui se cache derrière.
J’ai posé la question à mon ami GOOGLE et … chemin faisant j’ai atterri sur ce tuto.
L’auteur du tuto présente et explique la technique utilisée pour ce genre de jeux et s’appuie sur la programmation en C et l’utilisation de la SDL.
SDL  est une bibliothèque particulièrement utilisée pour créer des jeux en 2D.

J’ai tenté de suivre le tuto tout en réfléchissant PANORAMIC.
Mais comme chacun le sait, Panoramic ne sait pas gérer les  tuiles bien que Jack ait développé quelque chose de ce genre en PANGINE.

Bref, j’ai tenté de faire avec ce qu’on a et je vous demande si on peut faire quelque chose ensemble.
Peut-être que Jack y participera et adaptera Pangine à Panoramic : une fusion de deux sera la bienvenue.

Maintenant, si vous voulez tester :
Sur mon webdav, téléchargez PANORAMARIO.zip

Créer un répertoire où vous voulez et nommez-le PANORAMARIO.
Vous pouvez proposer un autre nom.


Chargez le code suivant Decompose_Tileset1.bas, enregistrez-le dans PANORAMARIO pour bien définir le répertoire en cours, et exécutez-le.
Si tout va bien, le programme extraira les 8 images Tile1.bmp à Tile8.bmp dans le sous-répertoire images.
Code:

rem ============================================================================
rem                 Decompose_Tileset1.bas
rem    Extraire les 8 tuiles contenues dans le fichier "Tileset1.bmp"
rem ============================================================================
dim i,rep$
rep$ = dir_current$
image 10
file_load 10,rep$ + "\images\tileset1.bmp"
2d_image_paste 10,100,50
for i = 1 to 8
    2d_image_copy 10,100+(i-1)*24,50,100+i*24,50+16
    2d_image_paste 10,400,50+i*16
    file_save 10,rep$ + "\images\Tile"+str$(i)+".bmp"
next i
terminate
rem ============================================================================

Maintenant, passons à l’étape suivante.
Exécuter le code suivant pour afficher le monde de Mario.
En fait ce n’est qu’un test pour afficher un monde très petit et figé.

Code:

rem ============================================================================
rem               PANORAMARIO
rem          UN MARIO EN PANORAMIC
rem ============================================================================
' Pour définir un monde, on a besoin de :
' * Tileset : fichier image bmp contenant les differentes tuiles à poser
' * Un tableau de correspondance contenant des nombres; à chaque nombre correspont une tuile
' Schématiquement, cela donne : tileset + tableau = monde
rem ============================================================================
Init()
Charger_Table()
Afficher_Monde()

end
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
SUB Init()
' Déclaration et initialisation des constantes
    dim Largeur_Tile : Largeur_Tile = 24  : ' Largeur d'une tuile
    dim Hauteur_Tile : Hauteur_Tile = 16  : ' Hauteur d'une tuile
    dim Nombre_Blocs_Largeur : Nombre_Blocs_Largeur = 15 : ' Nombre de tuiles en largeur
    dim Nombre_Blocs_Hauteur : Nombre_Blocs_Hauteur = 13 : ' Nombre de tuiles en hauteur
    dim Table(Nombre_Blocs_Largeur,Nombre_Blocs_Hauteur) : ' Tableau décrivant le monde de Mario
    dim h : h = Hauteur_Tile * Nombre_Blocs_Hauteur      : ' Hauteur et largeur de l'image finale ...
    dim w : w = Largeur_Tile * Nombre_Blocs_Largeur      : ' ... qui représentera le monde de Mario
' ------------------------------------------------------------------------------
    width 0,w+100 : height 0,h+100
    picture 10 : width 10,w : height 10,h  : 2d_target_is 10
    top 10,(height_client(0)-height(10))/2 : left 10,(width_client(0)-width(10))/2

END_SUB
rem ============================================================================
' Charger le tableau définissant le monde de Mario
SUB Charger_Table()
    dim_local i,j
    for i = 1 to Nombre_Blocs_Hauteur
        for j = 1 to Nombre_Blocs_Largeur
            read Table(j,i)
        next j
    next i
END_SUB
rem ============================================================================
' Afficher l'image du monde de Mario
SUB Afficher_Monde()
    dim_local i,j,Dest_X,Dest_Y
    dim_local f$ : f$ = dir_current$
    image 1 : ' Pour manipuler une image en mémoire
    for i = 1 to Nombre_Blocs_Hauteur
        for j = 1 to Nombre_Blocs_Largeur
            Dest_X = (j-1)*Largeur_Tile  : ' Position en X et en Y de la ...
            Dest_Y = (i-1)*Hauteur_Tile  : ' ... tuile à afficher
            file_load 1,f$ + "\images\Tile" + str$(table(j,i)+1) + ".bmp" : ' Charger l'image contenant...
            2d_image_paste 1,Dest_X,Dest_Y  : ' ... la tuile et l'afficher au bon endroit
        next j
    next i
    delete 1  : ' On n'a plus besoin de cet objet, alors bye bye !
END_SUB
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
' Description du monde de Mario
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 2,0,0,0,0,0,0,0,0,2,2,2,2,2,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,3,4,0,0,0,1,1,1,1,0,0,1,1
data 0,0,5,6,0,0,0,0,0,0,0,0,0,0,0
data 0,0,5,6,0,0,0,0,0,0,0,0,0,0,0
data 0,0,5,6,0,0,0,0,0,0,0,0,0,0,0
data 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================

La suite est dans le tuto et j'avance à petits pas ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Ven 10 Fév 2017 - 20:54

Bienvenu dans le monde des jeux Papydall !  Very Happy

Je viens de tester,

Bon, tes explications pour la mise en oeuvre sont un peu brouillonnes.
En fait il s'agit simplement de charger le zip, d'extraire tout, et de lancer PANORAMARIO_1.bas.

L'important c'est que ça marche.
Je trouve l'astuce des DATA(s) pour créer le monde "PANORAMARIO" très visuel pour sa fabrication, plutôt pratique.  Very Happy

Une remarque: je constate que tu n'utilises pas de SCENE2D pour y placer tes tuiles, donc tu ne pourras pas utiliser de SPRITE(s). Est-ce volontaire  Question

Je dois arrêter maintenant, mais je vais repasser dans la soirée, voir les réactions et propositions...

A+


Dernière édition par Jean Claude le Ven 10 Fév 2017 - 22:24, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Ven 10 Fév 2017 - 22:20

C'est plutôt mou sur le forum...  Mad

Ton idée d'explorer le domaine des jeux en 2D "plate_forme" est très intéressante.
J'en connais qui savent de quoi tu parles, et je suis sûr qu'ils pourront très certainement nous aider dans ce domaine.

Personnellement je n'était pas très "jeu" en arrivant sur ce forum, mais comme je n'ai plus très envie de réinventer la roue pour faire des programmes qu'on trouve partout, j'ai commencé à explorer cet univers.
Comme toi, j'ai envie que l'on nous guide et de voir comment on peut agencer tout ça.
De plus, c'est aussi une occasion de voir la programmation sous un autre angle.

J'espère que ton sujet, Papydall, va déclencher plein de réactions et de propositions. Je sais qu'il y a déjà eu des tentatives parmi les plus jeunes qui n'ont pas abouties, mais maintenant que les vieux s'y intéressent c'est une nouvelle chance. Very Happy  Very Happy  Very Happy

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5894
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 0:36

Effectivement, si c'est pour les vieux je ne me sens pas concerné Very Happy

Ceci dit je ne suis pas très jeux et je préfère les utilitaires même s'ils ne sont pas utiles à grand chose... c'est ça mon domaine de jeu.

Mais j'approuve des deux mains l'initiative de notre ami papydall, ça ne peut que susciter la curiosité et des réactions, et les techniques utilisées seront bienvenues dans d'autres domaines.
Ça va peut-être réveiller quelques velléités qui s'étaient manifestées à une époque et que se sont un peu endormies, comme tu dis Jean Claude.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
papydall

avatar

Nombre de messages : 5456
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 2:06

Salut tout le monde.
@ Les deux Jean (Jean Claude et Jean L35, sans oublier les autres Jean et les autres).
Moi aussi je ne suis pas « très jeu » comme écrivirent nos deux Jean et on trouve sur le net 36 000 codes de Mario.

Si vous avez jeté un œil sur le tuto mentionné dans mon 1er post, il parle du « tile mapping », technique de programmation que j’ignore.
Je la trouve très intéressante.
La question qui se pose est : est-ce que Panoramic est capable de mettre en application cette technique ?
Dans l’état actuel, c’est peut-être difficile, mais Pangine intègre déjà plusieurs fonctions dans ce sens.
Jack sera sans doute intéressé pour fusionner Panoramic et Pangine.

Jean Claude a écrit:
Je trouve l'astuce des DATA(s) pour créer le monde "PANORAMARIO" très visuel pour sa fabrication, plutôt pratique.

Je rappelle que c’est un test en suivant le dit tuto : j’ai adapté le code donné en C avec la SDL en Panoramic pour voir si ça marche.
Dans la suite du tuto , il parle de faire un fichier texte bien structuré que le programme manipulera par la suite.

Avec la même méthode des DATA, j’ai pu afficher un monde très grand (plus grand que la fenêtre de visualisation).

Cliquer pour voire:
 

Jean Claude a écrit:
Une remarque: je constate que tu n'utilises pas de SCENE2D pour y placer tes tuiles, donc tu ne pourras pas utiliser de SPRITE(s). Est-ce volontaire

Mon but était de coder une image représentant un grand monde, pas plus, en utilisant les tuiles extraites d’un autre fichier Tileset.bmp par Decompose_Tileset.bas.
Dans le tuto, les tuiles sont gérées d’une façon transparente pour le programmeur par la bibliothèque SDL.  

JL35 a écrit:
Effectivement, si c'est pour les vieux je ne me sens pas concerné

C’est pour les jeunes dont tu fais partie  tongue  et aussi pour les moins jeunes comme Jean Claude  Wink , sans oublier les carrément vieux comme moi  Embarassed et les autres panoramiciens de tout âge  Razz .

Panoramario pour tout le monde et Panoramario pour les autres !

Bon, assez causé, je retourne m'instruire en poursuivant le tuto.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7930
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 11 Fév 2017 - 5:36

Le sujet m' intéresse.
Même je ne suis pas très jeu, le "comment que cela fonctionne"
m' intrigue et j' aimerai savoir.
study

Je participerai donc dans la mesure de mes modestes moyens.
Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 9:51

Bonjour à tous,

Hier, j'ai répondu juste après avoir téléchargé le zip et avoir fait un essai.
Maintenant pour répondre plus précisément, il faut que je fasse comme Papydall, lire et comprendre le tutoriel (ce que je n'ai pas encore fait).

Pour la méthode de fabrication d'une image pour un SCENE2D, j'ai fait un peu le même principe.
Par exemple pour Puissance 4: Pour faire la grille, j'ai fait un code (une boucle FOR/NEXT) pour disposer un SPRITE de 100x100 sur un tableau de 7 colonnes et de 6 lignes, ensuite une copie d'écran pour capturer l'image.
Mais cette méthode ne peut pas marcher pour des mondes genre Mario (enfin, je ne crois pas).

C'est pourquoi je vais jeter un œil au tuto.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 734
Age : 62
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 13:04

@papydall,

J'avais déjà vu ce tutoriel. Je dois même en avoir une copie quelque part.

Que penses-tu de la méthode de scrolling que j'ai utilisée dans mes programmes FBPano (jeu de la vie et fourmi de Langton) ? je pense qu'elle devrait pouvoir s'appliquer ici.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
silverman

avatar

Nombre de messages : 463
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 13:20

Salut à tous

Ta proposition est très intéressante papydall, mais je pense que tu n'a pas idée des difficultés qui t'attendent. Panoramic n'est pas conçu pour ça, et sa lenteur naturelle ne va pas aider, il faudra être astucieux. bounce bounce bounce

Pour la partie visible:

  • Les tiles, ce sont des sprites; Les animations des sprites également, ça va en faire beaucoup pour panoramic
  • La vitesse d'affichage et scrolling : au vue de la démo de marc37, disons que j'espère avoir une agrèable surprise(plus il y a de sprite à l'écran, plus la vitesse d'affichage ralenti)

Pour la partie invisible:

  • les collisions : panoramic ne les gères pas nativement, ça va grignoter du temps de calcul
  • IA : ça va manger du temps de calcul
  • Gestion de la map : ça aussi ça va manger du temps de calcul
  • calculs divers : uniformité de la vitesse du jeu quelque soit l'ordinateur(ancien et lent ou récent et rapide), animations, déplacement rapide, scrolling,...

Ca ne va pas être aisé, il y a des écueils à éviter. L'optimisation va être de mise Twisted Evil . Les programmeurs du dimanche que nous sommes vont devoirs se gratter la tête! drunken .
Je suis curieux de voir ce que cela peut donner, je vais suivre ça avec attention Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 13:46

Je suis assez d'accord avec Silverman,
Mais je me pose deux questions:
1) PANGINE2D serait-il plus puissant que Panoramic, vu qu'il a été conçu spécialement pour le jeux en 2D Question
2) Jack à signaler qu'il pensait inclure certaine "commande" de Pangine2D dans Panoramic, s'il le fait: est-ce que le "moteur" de Panoramic pourra les avaler.

Je m'explique comme je peux, je suis pas trop connaisseur, mais Jack pourrait nous éclairer.

Bref, on peut toujours essayer de faire un petit PanoMario pour voir jusqu'où on peut aller...

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7930
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 11 Fév 2017 - 17:46

Si mes souvenir sont bons, car j' ai royalement zappé Pangine_2d,
ce dernier n' avait en fait qu' un scene2d que l' on ne déclarait pas
puisqu' il était d' office en écran.
Et, le moteur 2d était plus avancait que celui de panoramic.
Le hic, c' est que le moteur ne gérait qu' un seul et unique scene2d.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7930
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 11 Fév 2017 - 17:53

Le top serait que Jack créé un scene2d bis avec n' importe quel nom (c' est pas le plus important) et intègre ce moteur à Panoramic.

On pourrait avoir un scene2d_Static (l' actuel) et un scene2d_movie ( celui de Pangine2d). chacun ayant son propre moteur 2d.

Et, pitié, ne me dites pas cela va prendre de la place en Mo ou Go et j' en passe.
La taille des disques durs actuels est largement capable d' absorber un Panoramic
de grande taille.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5456
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 18:52

Salut tout le monde.

Merci à tous ceux qui ont pris la peine d’intervenir et donner leur point de vue.
C’est déjà ça de gagné.
Peut-être que jack hâtera l’évolution de Panoramic vers la 2D et la 3D.
Peut-être aussi que des idées de programmation inattendues jailliront de l’esprit de quelqu’un.
C’est une idée pour pousser Panoramic et voire jusqu’où il peut aller.
Si vous êtes d’accord, répétez après moi :
Jack, donne-nous des méthodes pour créer notre PanoMario;  guide-nous dans ce projet;  participe avec nous;  propose-nous un code « à la Jack » !
Panoramic n’en sortira que plus puissant.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 734
Age : 62
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 19:31

Pour un type de jeux un peu différents (les "roguelikes" qui sont les ancêtres des jeux de rôles) il y a un très bon tutoriel ici :

http://users.freebasic-portal.de/rdc/tutorials.html#mozTocId58846

A noter que l'auteur n'utilise que des caractères ASCII, mais on peut les remplacer par des sprites.

L'avantage, c'est que tout est en FreeBASIC. Pas de SDL ni de C !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 20:08

Eh bien, j'ai téléchargé et généré le jeu que tu indiques, Jean_Debord. C'est un monstre, en réalité ! Pour convertir ça en Panoramic, bonjour ! La doc est très bien faite, et la partie génération du monde est intéressante.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Oscaribout



Nombre de messages : 40
Date d'inscription : 29/12/2016

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 21:06

Bonsoir,

Je ne vous dis pas le temps que j'ai mis pour me brancher. J'ai fait un programme exprès pour compliquer ceci. Comme vous le voyez je regarde le Forum.

Pour ce sujet, j'ai fait un petit teste sur une idée que j'ai eu il y a plusieurs années, à l'époque où le sprite faisaient maxi 200 x 200 pixels. C'était un programme d'aide en vidéo, avec des sprites qui déplaçaient un curseur... JL35 a montré ces derniers temps le principe, celui de faire une image sur un Picture, et de le reporter sur une scene2D (d'ailleurs je ne suis pas sur que cet objet soit utile.

Je vous montre le principe que j'ai adopté, à vous de voir si cela semble intéressant. Pour la peinr j'ai mon petit-fils qui veut programmer des jeux, il est en 6ème, il était partie pour essayé JAVA, mais je l'ai orienté ici. On verra. (c'est d'ailleurs une des raisons qui je teste).

code:
 

Je suis parti pour les tuiles sur des rectangles colorés, c'est simplement pour le principe.

A vous de voir maintenant. (Je ne vais pas déconnecter pour ne pas avoir à refaire le cirque de tout à l'heure) pour le cas je devrais répondre.

Je viens d'apporter un suplément: un personnage centré. C'est le paysage qui bouge. Pas de collision, ni de déplacement du personnage. Juste pour voir.

code:
 

Si vous pensez que l'idée n'est pas la bonne, dites-le. Il n'y a pas de problème, c'est pour voir.


Dernière édition par Oscaribout le Dim 12 Fév 2017 - 3:01, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Sam 11 Fév 2017 - 23:13

Bon, il y a beaucoup d'interventions, c'est plutôt bon signe.

@Oscaribout,
J'ai eu un peu de mal avec tes 2 codes, avant de comprendre qu'il fallait utiliser les flèches de direction.
Ton idée est bonne, mais je constate que tu n'emploie aucun sprite. Du coup, je doute que cela puisse aller beaucoup plus loin.
Néanmoins, tu donnes une approche pour déplacer le paysage à la place du personnage. Cela peut servir....

@Klaus et jean,
Heu... le tutoriel est en anglais: pour moi c'est cuit...
Klaus dit: "le jeu est un monstre" je suppose qu'il parle du code, je pense qu'on en est pas encore à ce niveau.

@Ygeronimi,
Pour Pangine2D, tu as raison il n'y a qu'un seul scene2d et non déclaré. Personnellement, je pense que pour commencer, c'est plus que suffisant pour comprendre comment Pangine2d fonctionne.

@tous,
Mon avis pour ce que souhaite faire Papydall, c'est, que dans un premier temps et dans l'état actuel de Panoramic, c'est PANDINE2D qui correspond le mieux à ce que l'on veut faire.
PANDINE2D est téléchargeable sur mon Webdev, avec l'éditeur, les exemples et surtout le PDF d'explication de Jack.

J'ai fait (avec l'aide de Jicehel et d'autres Panoramiciens dont Bignono pour la musique) un jeu qui s'appelle Aster.v4 sous PANDINE2D.
Vu que ce jeu ne tiens pas sur mon Webdev, je vous l'ai mis à disposition ici =>https://fzip.li/47z8/ .
Ou si ça ne marche pas ici => https://www.fichier-zip.com/2017/02/11/asterv4/ .Prouvez que vous n'êtes pas un robot, puis cliquez sur télécharger, ensuite dézippez.
Vous y trouverez tous ce qu'il faut pour jouer, et surtout Pangine2d_EDITOR qui vous permettra de voir le code.bas du programme.
Prenez le temps de regarder, et vous verrez les commandes intéressantes de Pangine2d.


PS: (16/02/2017) Si vous souhaitez avoir ce jeu, envoyer moi un MP, car les liens ci_dessus ne fonctionnent plus.

A+


Dernière édition par Jean Claude le Jeu 16 Fév 2017 - 14:57, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 40
Date d'inscription : 29/12/2016

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 2:56

Ok je prend note. Pagine2D je viens de l'essayer. Il faut travailler avec pour savoir jusqu'où on peut aller. C'est trop nouveau pour moi pour prendre position.

Par contre quand je vois le tuto que Papydall montre, je trouve personnellement pertinent ma méthode. Ceci n'est qu'un teste, mais le grid possède un N° de chaque position qui est le choix d'une image. Avant tout l'espèce de bonhomme devrait-être un sprite, car on peut voir le fond d'écran, ce qui n'est pas le cas avec image (ou alors il y a du travail).

La gestion du décor est très simple dans le cas de Mario, en regardant le tutoriel. Il suffit de faire une image d'une tuile. Je ne pense pas que Mario à son départ a été réalisé avec Engine2D, et la mémoire à cette époque était très faible, donc les tuiles en picture, qui sont assemblées comme je l'ai fait, ça ne me parrait pas un problème. Il faut gérer les collisions, on a grid qui est le tableau à voir si il y a collision ou non, et puis, il faut un autre tableau pour savoir si Mario est devant l'objet, sur le même plan, ou en arrière. Dans mon exemple très simpliste, Mario est centré, mais il faut aussi pouvoir le faire avancer ou reculer, selon le décor lorsqu'on est en bordure. Les objets image remplacent les sprites. En voyant vet exemple, je trouve que la vitesse suit, même si il n'y a pas les calculs. Mais les calculs ne sont pas visibles. Seule le travail des dessins prend du temps, Pour cette raison le picture est mieux caché.

Personnellement je ne vais pas trop m'attarder sur ce programme, je préfère retourner sur celui qui est encours et qui va prendre du temps.

C'est celui qui fait le travail qui aura raison sur l'autre, et comme ce n'est pas ce que je pense faire, alors j'aurai donc tord. Mais amusez-vous comme vous l'entendez! Je voulais avoir une approche, j'ai une partie des réponses.

Citation :
J'ai eu un peu de mal avec tes 2 codes, avant de comprendre qu'il fallait utiliser les flèches de direction.
Ton idée est bonne, mais je constate que tu n'emploie aucun sprite. Du coup, je doute que cela puisse aller beaucoup plus loin.

Désolé, j'ai pas pensé à dire qu'il fallait déplacé avec les flèches. Je mets la version avec Mario (il faut le savoir!) en sprite.

code:
 

Je pense que je vais pouvoir me déconnecter. Je ne vois plus ce que je peux apporter de plus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 734
Age : 62
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 10:12

Klaus a écrit:
Pour convertir ça en Panoramic, bonjour !

Je pensais surtout à FBPano Smile

C'est vrai qu'il y a beaucoup de travail. Il faudra procéder par étapes. Peut-être commencer par la génération des mondes.

Et pour ceux qui ne lisent pas l'anglais, faire des tutoriels en français dans PLM.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 11:15

Bonjour à tous,

@Oscaribout,
Ne te méprends pas, je ne critique pas ta méthode. J'ai donné mon avis, mais il n'est peut-être pas bon.
La gestion dans un grid, pourquoi pas, je n'y avais jamais pensé.

@Jean,
Il va falloir, qu'un jour, je me décide à explorer FBpano.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 40
Date d'inscription : 29/12/2016

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 14:21

Il va encore y avoir de la bafouille! Smile
Jean Claude a écrit:
Ne te méprends pas, je ne critique pas ta méthode. J'ai donné mon avis, mais il n'est peut-être pas bon.

Pour moi la critique est toujours positive, aussi ne t'en prives pas. Vous pouvez y aller autant que vous le voulez. Je ne prend que ce qui est intéressante. Pour le reste personne n'est parfait.

Personnellement je ne suis pas vraiment intéressé pour ceci, mais comme j'ai mon petit fils se lance dans la programmation, et veut faire des jeux, je suis de près cette discussion.

Je suis parti de l'idée que Panoramic était trop lent pour faire des tas de sprites, et Silverman le confirme aussi. Donc je suis parti de ce que vois dans le tuto Tile Mapping avec le retour de dessins simples.

Pour sortir de ma présentation, j'ai regardé les exemples de Pagine2D. C'est très intéressant. Mais je me pose des questions dont tu as peut-être les réponses. Combien de sprites peuvent être animés en même temps, sans que cela nuise à la vitesse? Déjà là il serait bon de faire une série de teste pour savoir jusqu'où on peut aller. Cela me parait un bon début. Tester toutes les possibilités pour avoir un bon choix. Ensuite, je n'arrive pas à comprendre comment faire la gestion des positions de Sprites dans ce monde. Surtout qu'il y a des instructions comme "SPRITE_X_SCALE N,CX" "SPRITE_X_SCALE N,CY" SPRITE_Y_SCALE N,CY qui doit surement "problèmiser" les collisions, et aussi "SPRITE_DEPTH N,D". J'ai du mal de comprendre.

Ensuite pour les animations, je ne vois pas comment est défini la largeur et hauteur d'une image dans une planche .( à si: SPRITE_ANIMATED_IMAGE_LOAD N,L,C,I on a le nb de lignes et colonnes)

Donc pour ma part, si tu as les réponses, il serait bon que tu fasses un tuto pour cela. J'ai essayé dans mon exemple de faire un sprite qui s'anime, c'est un échec, mais il faudrait surement revoir le principe de gestion, celle-ci ayant été faite à 'l'arrache'.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 14:50

@Oscaribout:
Citation :

Je suis parti de l'idée que Panoramic était trop lent pour faire des tas de sprites, et Silverman le confirme aussi.
Certes. C'est un peu vrai. Mais il y a d'autres techniques pour animer une image. On peut par exemple faire l'économie d'un objet SCENE2D entièrement et utiliser des FORM avec BORDER_HIDE à la place des SPRITE. Cela donne des possibilitées intéressantes.

J'ai fait une version utilisant KGF.dll, mais cela peut se coder directement en Panoramic. Voici ce que ça donne:
Code:
' Patience.bas

' Ce programme est une permière tentative d'implémenter un jeu de patience
' à l'aide des fonctions MyCards.
'
' Ce jeu se joue avec 104 cartes (2 jeux de 52 cartes), sans jokers.
' On crée les piles suivantes:
'  pile ST(0): le talon, contenant initialement les 104 cartes mélangées
'  piles ST(1) ... ST(10): les colonnes de cartes, toutes de définitions identiques:
'    groupe:        sgTopDown          - organisée de haut vers le bas
'    organisation:  soDescendant        - triée par valeurs descendentes
'    couleurs:      scAlternateBlackRed - noir/rouge en alternance
'    image de pile: siNone              - place vide
'    glisser:      dragLast            - la dernière carte seulement
'                                          (plus tard, tout mais seulement les fins de pile triées)
'    déposer:      DropLast            - déposer en fin de pile
'    vitesse:      tsVeryHigh          - trés élevée
'    3 rangs couverts
'    les autres rangs découverts
'  STas(1) ... STas(8): les piles recevant les cartes retirées du jeu, avec les définitions suivantes:
'    groupe:        sgStockTopFaceUp    - organisée en un talon cartes visibles
'    organisation:  soAscendant        - triée par valeurs ascendentes
'    couleurs:      scSpades, scDiamonds, scClubs, scHearts (2x)
'    image de pile: siClub, siDiamond, siSpade, siHeart (2x)
'    glisser:      dragLast            - la dernière carte seulement
'    déposer:      DropLast            - déposer en fin de pile
'    vitesse:      tsVeryHigh          - trés élevée

label event, close0

full_space 0 : caption 0,"Jeu de Patience" : on_close 0,close0
dll_on "KGF.dll"

 #INCLUDE "MyCards.inc"


dim ImageDeFond$ : ImageDeFond$ = ""
dim ImageList$  : ImageList$  = ""

dim PG%, ST%(10), STas%(8)
dim res%, nom$, n%, couleur%, s$, s1$, sc$, xST%

creer_objets_speciaux()
creer_terrain()
creer_piles()
Creer_cartes()
Donne_initiale()
end

event:
 off_change 99
  s$ = text$(99)
  if left$(s$,2)="CC"
    sc$ = mid$(s$,3,8)
    s1$ = mid$(s$,21,8)
    s$ = mid$(s$,12,8)
    xST% = hex(s$)
    if xST%=ST%(0)
      une_donne()
      on_change 99,event
      return
    end_if
'    message sc$+"  "+s$+"  "+s1$
    if s$=s1$
      n% = hex(sc$)
'      message hex$(n%)+"  "+sc$
      res% = dll_call2("ManageMyCardsCard",n%,mcShowCardFace%)
    end_if
  end_if
 
'  message text$(99)
  on_change 99,event
  return
 
close0:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  return
 
sub creer_objets_speciaux()
  ' *********************** objets spéciaux
  form 97 : hide 97
  memo 98 : parent 98,97 : bar_both 98 : ' hide 98
  edit 99 : left 99,700 : width 99,300 : on_change 99,event : hide 99
end_sub

sub creer_terrain()
' *********************** terrain de jeu
  ' création du terrain de jeu
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(ImageDeFond$),adr(ImageList$))

  ' on ne peut "accrocher" aucune carte dans le terrain de jeu
  ' on ne peut déposer nulle part
  ' identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)
end_sub

sub creer_piles()
' *********************** créer toutes les piles
  creer_talon()
  creer_talons_as()
  creer_talons_jeu()
end_sub

sub creer_talon()
  ' *********************** créer le talon
  ST%(0) = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en haut à gauche
  res% = dll_call3("LocateMyCardsStack",ST%(0),10,10)

  nom$ = "Talon"
  '  on ne peut "accrocher" que la dernière carte de la pile 5
  '  on ne peut déposer aucune carte
  res% = dll_call5("MyCardsCardStackOptions",ST%(0),dragLast%,dropNone%,0,adr(nom$))
end_sub

sub creer_talons_as()
  ' *********************** créer les 8 talons des As
  STas%(1) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scSpades%,0,siSpade%)
  res% = dll_call3("LocateMyCardsStack",STas%(1),90,10)
  nom$ = "Pique Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(1),dragLast%,dropLast%,0,adr(nom$))
  STas%(2) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scSpades%,0,siSpade%)
  res% = dll_call3("LocateMyCardsStack",STas%(2),170,10)
  nom$ = "Pique Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(2),dragLast%,dropLast%,0,adr(nom$))

  STas%(3) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scDiamonds%,0,siDiamond%)
  res% = dll_call3("LocateMyCardsStack",STas%(3),250,10)
  nom$ = "Caro Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(3),dragLast%,dropLast%,0,adr(nom$))
  STas%(4) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scDiamonds%,0,siDiamond%)
  res% = dll_call3("LocateMyCardsStack",STas%(4),330,10)
  nom$ = "Caro Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(4),dragLast%,dropLast%,0,adr(nom$))

  STas%(5) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scClubs%,0,siClub%)
  res% = dll_call3("LocateMyCardsStack",STas%(5),410,10)
  nom$ = "Trèfle Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(5),dragLast%,dropLast%,0,adr(nom$))
  STas%(6) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scClubs%,0,siClub%)
  res% = dll_call3("LocateMyCardsStack",STas%(6),490,10)
  nom$ = "Trèfle Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(6),dragLast%,dropLast%,0,adr(nom$))

  STas%(7) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scHearts%,0,siHeart%)
  res% = dll_call3("LocateMyCardsStack",STas%(7),570,10)
  nom$ = "Coeur Rouge"
  res% = dll_call5("MyCardsCardStackOptions",STas%(7),dragLast%,dropLast%,0,adr(nom$))
  STas%(8) = dll_call6("CreateMyCardsStack",PG%,sgStockTopFaceUp%,soStrictlyAscendantOnDrop%,scHearts%,0,siHeart%)
  res% = dll_call3("LocateMyCardsStack",STas%(8),650,10)
  nom$ = "Coeur Noir"
  res% = dll_call5("MyCardsCardStackOptions",STas%(8),dragLast%,dropLast%,0,adr(nom$))
end_sub

sub creer_talons_jeu()
  ' *********************** créer les 10 talons de jeu  soNone% ==> soDescendant%
  dim_local i%
  for i%=1 to 10
    nom$ = "Colonne "+str$(i%)
    ST%(i%) = dll_call6("CreateMyCardsStack",PG%,sgTopDown%,soStrictlyDescendantOnDrop%,scAlternateBlackRed%,20,siNone%)
    res% = dll_call3("LocateMyCardsStack",ST%(i%),10+i%*80,130)
    res% = dll_call5("MyCardsCardStackOptions",ST%(i%),dragValidTail%,dropLast%,3,adr(nom$))
'    res% = dll_call5("MyCardsCardStackOptions",ST%(i%),dragLast%,dropLast%,3,adr(nom$))
  next i%
end_sub

sub creer_cartes()
  dim_local couleur%, n%, CD%
  ' mettre la vitesse "immédiat"
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsNone%)
  ' *********************** créer le premier jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD% = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes1%,0,0)
      res% = dll_call4("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%,acAlways%)
    next n%
  next couleur%
  ' *********************** créer le deuxième  jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD% = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes2%,0,0)
      res% = dll_call4("MoveMyCardsCardToStack",CD%,ST%(0),caAddCardAtEnd%,acAlways%)
    next n%
  next couleur%
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST%(0))
  ' remetre la vitesse "très rapide"
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)
end_sub

sub donne_initiale()
' *********************** effectuer la donne initiale (4 rangs)
  dim_local i%
  for i%=1 to 4
    une_donne()
  next i%
end_sub

sub une_donne()
' *********************** effectuer une donne (1 rang)
  dim_local n%
  for n%=1 to 10
    res% = dll_call4("MoveMyCardsCardToStack",ST%(0),ST%(n%),caAddCardAtEnd%,acAlways%)
'    message str$(n%)+": "+str$(res%)
  next n%
end_sub


Le jeu n'est pas fini et pas complet - c'est juste pour avoir une idée de l'affichage. Idem avec le jeu suivant:
Code:
' Bataille.bas

' Ce programme est une première version du jeu de bataille.
' Le joueur joue contre l'ordinateur.

' Les règles (origine: Wikipedia):

' On distribue l'ensemble d'un (ou plusieurs) jeu de cartes (54 ou 32) aux joueurs,
' qui n'en prennent pas connaissance. À chaque tour, chaque joueur retourne la carte
' du haut de sa main (ou son tas). Celui qui a la carte de la plus haute valeur -
' selon la hiérarchie du bridge : As, Roi, Dame, Valet, dix… jusqu'au deux - fait
' la levée, qu'il place sous son tas.

' En cas d'égalité de valeurs - cas appelé bataille - les joueurs en ballotage
' disent « bataille ! », et commencent par placer une première carte face cachée
' puis une seconde carte face visible pour décider qui fera la levée.
' En cas de nouvelle égalité, la procédure est répétée. La bataille est
' parfois l'occasion d'acquérir une grosse carte et c'est l'unique manière
' de gagner un as. Sans bataille et à moins qu'un joueur ne possède tous les as,
' il serait impossible de terminer une partie de bataille. La partie se termine
' et le gagnant est déterminé lorsque ce dernier a en sa possession toutes les
' cartes du jeu.

' Technique:
' le programme prépare un terrain de jeu, avec 5 piles:
'  pile 1: tas du joueur - pile non triée, face cachée
'  pile 2: enjeu du joueur : pile non triée, face cachée et ouverte, cartes non glissables
'  pile 3: tas du programme - pile non triée, face cachée, cartes non glissables
'  pile 4: enjeu du programme : pile non triée, face cachée et ouverte, cartes non glissables
'  pile 5: talon initial pour dustribuer les cartes, puis outil technique pour des manipulations

label event, close0, jouer, bataille, distribuer, ramasser

full_space 0 : caption 0,"Jeu de Bataille" : on_close 0,close0
dll_on "KGF.dll"

#INCLUDE "MyCards.inc"

dim ImageDeFond$ : ImageDeFond$ = ""
dim ImageList$  : ImageList$  = ""

dim PG%, ST1%, ST2%, ST3%, ST4%, ST5%, CD%(52), hPG%
dim res%, nom$, n%, couleur%


creer_objets_speciaux()
creer_terrain()
creer_objets_visuels()
creer_tas_joueur()
creer_enjeu_joueur()
creer_tas_programme()
creer_enjeu_programme()
creer_talon()
creer_jeu_52_cartes()

end

close0:
  PG% = dll_call1("DeleteMyCardsPlayground",PG%)
  return

event:
  return
 
jouer:
  jouer_une_carte()
  return
 
bataille:
  faire_la_bataille()
  return
 
distribuer:
  distribuer_les_cartes()
  return
 
ramasser:
  ramasser_les_cartes()
  return
 
 
sub creer_terrain()
' *********************** terrain de jeu
  ' création du terrain de jeu
  PG% = dll_call6("CreateMyCardsPlayground",handle(0),handle(99),10,40,adr(ImageDeFond$),adr(ImageList$))

  ' on ne peut "accrocher" aucune carte dans le terrain de jeu
  ' on ne peut déposer nulle part
  ' identification de la pile en fonction d'un contact avec un des 4 coins de la carte
  res% = dll_call5("MyCardsPlaygroundOptions",PG%,dragNone%,dropNone%,poExtended%,tsVeryHigh%)

  ' dimensionner le terrain de jeu
  res% = dll_call5("MyCardsPlaygroundGeometry",PG%,0,40,1200,650)

  ' récupérer le handle du terrain de jeu
  hPG% = dll_call3("GetMyCardsInfo",PG%,ciGetObjectHandle%,0)
end_sub
 
 
 
sub creer_tas_joueur()
  ' *********************** pile 1: tas du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST1% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en bas au milieu
  res% = dll_call3("LocateMyCardsStack",ST1%,600,500)

  nom$ = "Tas du joueur"
  '  on ne peut "accrocher" que la dernière carte de la pile 1
  '  peut ne déposer aucune carte
  res% = dll_call5("MyCardsCardStackOptions",ST1%,dragLast%,dropNone%,0,adr(nom$))
end_sub



sub creer_enjeu_joueur()
  ' *********************** pile 2: enjeu du joueur
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST2% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au-dessus de la pile 1
  res% = dll_call3("LocateMyCardsStack",ST2%,600,350)

  nom$ = "Enjeu du joueur"
  '  on ne peut "accrocher" aucune carte de la pile 2
  '  les cartes déposées se placent automatiquement sur le dessus de la pile (à la fin)
  res% = dll_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropLast%,0,adr(nom$))
end_sub
 
 
 
sub creer_tas_programme()
  ' *********************** pile 3: tas du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST3% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en haut au milieu
  res% = dll_call3("LocateMyCardsStack",ST3%,600,10)

  nom$ = "Tas du programme"
  '  on ne peut "accrocher" aucune carte de la pile 3
  '  peut ne déposer aucune carte
  res% = dll_call5("MyCardsCardStackOptions",ST3%,dragNone%,dropNone%,0,adr(nom$))
end_sub



sub creer_enjeu_programme()
  ' *********************** pile 4: enjeu du programme
  ' créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST4% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile en-dessous de la pile 3
  res% = dll_call3("LocateMyCardsStack",ST4%,600,160)

  nom$ = "Enjeu du programme"
  '  on ne peut "accrocher" aucune carte de la pile 4
  '  on ne peut déposer aucune carte sur cette pile
  res% = dll_call5("MyCardsCardStackOptions",ST4%,dragNone%,dropNone%,0,adr(nom$))
end_sub



sub creer_talon()
  ' *********************** créer la pile
  ' faces cachées, toutes couleurs, aucun décalage des cartes, image de pile par défaut
  ST5% = dll_call6("CreateMyCardsStack",PG%,sgStockTopBackUp%,soNone%,scAll%,0,siNone%)

  ' placer la pile au milieu à gauche
  res% = dll_call3("LocateMyCardsStack",ST5%,300,250)
 
  nom$ = "Talon"
  '  on ne peut "accrocher" aucune carte de la pile 5
  '  on ne peut déposer aucune carte sur cette pile
  res% = dll_call5("MyCardsCardStackOptions",ST5%,dragNone%,dropNone%,0,adr(nom$))
end_sub



sub creer_jeu_52_cartes()
    ' *********************** créer le jeu de 52 cartes (invisibles)
  for couleur%=0 to 3
    for n%=1 to 13
      CD%(couleur%*13+n%) = dll_call6("CreateMyCardsCard",PG%,couleur%,n%,cdFishes2%,0,0)
      res% = dll_call4("MoveMyCardsCardToStack",CD%(couleur%*13+n%),ST5%,caAddCardAtEnd%,acNormal%)
    next n%
  next couleur%
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  text 85,"52"
end_sub



sub distribuer_les_cartes()
  dim_local i%, res%
' *********************** copier alternativement le jeu dans la main du joueur et du programme
  text 96,""
  for n%=1 to 26
    res% = dll_call4("MoveMyCardsCardToStack",ST5%,ST1%,caAddCardAtEnd%,acNormal%)  : ' main du joueur
    res% = dll_call4("MoveMyCardsCardToStack",ST5%,ST3%,caAddCardAtEnd%,acNormal%)  : ' main du programme
  next n%
  comptage()
  inactive 3
  active 1
  active 4
end_sub



sub ramasser_les_cartes()
  ' *********************** ramasser les cartes de toutes les piles
  text 96,""
  res% = dll_call4("MoveMyCardsStackToStack",ST1%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST3%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST5%,caPreserveStack%,caAddCardAtEnd%)
  comptage()
  ' battre le jeu
  res% = dll_call1("ShuffleMyCardsStack",ST5%)
  inactive 1
  inactive 2
  inactive 4
  active 3
end_sub



sub creer_objets_speciaux()
  ' *********************** objets spéciaux
  form 97 : hide 97
  memo 98 : parent 98,97 : bar_both 98 : ' hide 98
  edit 99 : left 99,700 : width 99,300 : on_change 99,event : hide 99
end_sub



sub creer_objets_visuels()
  ' *********************** boutons techiques
  button 1 : top 1,570 : left 1,480 : caption 1,"Jouer" : on_click 1,jouer : inactive 1
  button 2 : top 2,570 : left 2,720 : caption 2,"Bataille !" : on_click 2,bataille : inactive 2
  button 3 : top 3,300 : left 3,380 : caption 3,"Distribuer" : on_click 3,distribuer
  button 4 : top 4,360 : left 4,380 : caption 4,"Ramasser" : on_click 4,ramasser : inactive 4
  ' *********************** affichage du nombre de cartes par pile
  edit 81 : top 81,640 : left 81,620 : width 81,25 : text 81,"0" : inactive 81
  edit 82 : top 82,490 : left 82,620 : width 82,25 : text 82,"0" : inactive 82
  edit 83 : top 83,150 : left 83,620 : width 83,25 : text 83,"0" : inactive 83
  edit 84 : top 84,300 : left 84,620 : width 84,25 : text 84,"0" : inactive 84
  edit 85 : top 85,390 : left 85,320 : width 85,25 : text 85,"0" : inactive 85
  ' *********************** affichage visuel des messages, à la place d'une commande Message
  edit 96 : top 96,640 : left 96,720 : width 96,350 : inactive 96
    font_size 96,12 : font_bold 96 : font_color 96,255,100,100
end_sub



sub comptage()
  dim_local v%
  v% = dll_call3("GetMyCardsInfo",ST1%,ciStackCardCount%,0)
  text 81,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST2%,ciStackCardCount%,0)
  text 82,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST3%,ciStackCardCount%,0)
  text 83,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST4%,ciStackCardCount%,0)
  text 84,str$(v%)
  v% = dll_call3("GetMyCardsInfo",ST5%,ciStackCardCount%,0)
  text 85,str$(v%)
end_sub


sub jouer_une_carte()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%
  inactive 2
  inactive 1
  text 96,""
  CDjoueur%    = dll_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%)  : ' joueur
  CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%)  : ' programme
  comptage()

  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcTurnCard%)    : ' retourner la carte !
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcTurnCard%)  : ' retourner la carte !
  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                    : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14        : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                    : ' bataille ?
    inactive 1
    active 2
'    message "Bataille !"
    text 96,"Bataille !"
    exit_sub
  end_if
  if ValeurProgramme%>ValeurJoueur%                    : ' le programme emporte la mise ?
'    message "Dommage ! Vous avez perdu la mise."
    text 96,"Dommage ! Vous avez perdu la mise." : pause 2000
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtFront%)
  else                                                  : ' le joueur emporte la mise !
'    message "Super ! Vous avez gagné la mise."
    text 96,"Super ! Vous avez gagné la mise." : pause 2000
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtFront%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtFront%)
  end_if
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  active 1
end_sub



sub faire_la_bataille()
  dim_local CDjoueur%, CDprogramme%, ValeurJoueur%, ValeurProgramme%, v%
  inactive 2
  text 96,""
  ' chacun joue une carte cachée
  CDjoueur%    = dll_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%)  : ' joueur
  CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
  comptage()
  if text$(81)="0"
    message "Oups - vous avez perdu !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if

  ' et une carte ouverte
  CDjoueur%    = dll_call4("MoveMyCardsCardToStack",ST1%,ST2%,caAddCardAtEnd%,acNormal%)  : ' joueur
  CDprogramme% = dll_call4("MoveMyCardsCardToStack",ST3%,ST4%,caAddCardAtEnd%,acNormal%)  : ' programme
  res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardFace%)
  res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardFace%)
  comptage()

  v% = dll_call3("GetMyCardsInfo",CDjoueur%,ciGetCardSuitValue%,0)
  ValeurJoueur% = bin_and(v%,65535)                    : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurJoueur% = 14        : ' As est le plus fort !
  v% = dll_call3("GetMyCardsInfo",CDprogramme%,ciGetCardSuitValue%,0)
  ValeurProgramme% = bin_and(v%,65535)                  : ' valeur de la carte
  if ValeurProgramme%=1 then ValeurProgramme% = 14      : ' As est le plus fort !
  if ValeurProgramme%=ValeurJoueur%                    : ' bataille ?
    inactive 1
    active 2
'    message "Bataille !"
    text 96,"Bataille !"
    exit_sub
  end_if
  inactive 2
  active 1
  if ValeurProgramme%>ValeurJoueur%                    : ' le programme emporte la mise ?
'    message "Dommage ! Vous avez perdu la mise avec bataille."
    text 96,"Dommage ! Vous avez perdu la mise avec bataille." : pause 2000
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST3%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du joueur sous les cartes du tas du programme
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST3%,caPreserveStack%,caAddCardAtEnd%)
  else                                                  : ' le joueur emporte la mise !
'    message "Super ! Vous avez gagné la mise avec bataille."
    text 96,"Super ! Vous avez gagné la mise avec bataille." : pause 2000
    res% = dll_call2("ManageMyCardsCard",CDjoueur%,mcShowCardDeck%)  : ' carte face cachée
    res% = dll_call2("ManageMyCardsCard",CDprogramme%,mcShowCardDeck%)
    res% = dll_call4("MoveMyCardsStackToStack",ST4%,ST1%,caPreserveStack%,caAddCardAtEnd%)  : ' placer les cartes de ma mise du programme sous les cartes du tas du joueur
    res% = dll_call4("MoveMyCardsStackToStack",ST2%,ST1%,caPreserveStack%,caAddCardAtEnd%)
  end_if
  comptage()
  if text$(81)="0"
    inactive 1
    active 2
'    message "Bataille !"
    text 96,"Bataille !"
    exit_sub
  end_if
  if text$(83)="0"
    message "BRAVO - vous avez gagné !"
    inactive 1
    inactive 2
    exit_sub
  end_if
  active 1
end_sub

Attendre la fin de la mise en place, puis cliquer sur "Distribuer", puis jouer...

Il n'y a aucun SCENE2D ni aucun SPRITE. Aussi bien le terrain de jeu que les cartes sont des objets FORM. Encore une fois, réalisées en Delphi via KGF.dll, mais cela peut se faire directement en Panoramic:
Code:
label tick
dim x1%, y1%, x2%, y2%

full_space 0

form 1 : border_hide 1 : width 1,100 : height 1,200 : color 1,255,0,0
  x1% = 80 : y1% = 30
  left 1,x1% : top 1,y1%
form 2 : border_hide 2 : width 2,100 : height 2,200 : color 2,0,0,255
  x2% = 400 : y2% = 500
  left 2,x2% : top 2,y2%

timer 10 : timer_interval 10,15 : on_timer 10,tick

end

tick:
  timer_off  10
  x1% = x1% + 5 : if x1%>(width(0)-20-width(1)) then x1% = 20
  y1% = y1% + 10 : if y1%>(height(0)-80-height(1)) then y1% = 30
  x2% = x2% + 5 : if x2%>(width(0)-20-width(2)) then x2% = 20
  y2% = y2% - 10 : if y2%<30 then y2% = height(0)-80-height(2)
  left 1,x1% : top 1,y1%
  left 2,x2% : top 2,y2%
  timer_on 10
  return
 
La démo n'a pas beaucoup de sens - c'est juste pour la technique.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jean Claude

avatar

Nombre de messages : 4981
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 15:53

Oscaribout a écrit:
Pour sortir de ma présentation, j'ai regardé les exemples de Pagine2D. C'est très intéressant. Mais je me pose des questions dont tu as peut-être les réponses. Combien de sprites peuvent être animés en même temps, sans que cela nuise à la vitesse? Déjà là il serait bon de faire une série de teste pour savoir jusqu'où on peut aller. Cela me parait un bon début. Tester toutes les possibilités pour avoir un bon choix. Ensuite, je n'arrive pas à comprendre comment faire la gestion des positions de Sprites dans ce monde. Surtout qu'il y a des instructions comme "SPRITE_X_SCALE N,CX" "SPRITE_X_SCALE N,CY" SPRITE_Y_SCALE N,CY qui doit surement "problèmiser" les collisions, et aussi "SPRITE_DEPTH N,D". J'ai du mal de comprendre.

Oscaribout a écrit:
Donc pour ma part, si tu as les réponses, il serait bon que tu fasses un tuto pour cela

Pour faire simple, j'ai exploré Pangine2D, ensuite je me suis dit que c'était peut-être un bon logiciel pour faire des jeux en 2D.
MAIS, je ne suis en aucun cas un expert de Pangine2D, le l'ai simplement testé pour voir, c'est tout.

Maintenant, je peux te dire que j'ai galéré au tout début, mais je me suis obstiné et grâce à la bonne volonté d'un bon nombre de Panoramiciens j'ai réussi à faire AsrerV4.
Je suis parti en me disant "Imagine un jeu, prends Pangine2D pour le réaliser et on verra bien". C'est ce que j'ai fait.

Ma réflexion d'aujourd'hui: Pangine2D est bien fait pour des jeux en 2D. Est-ce la panacée Question , je n'en sait rien (vu que je n'ai été plus loin).
Je n'ai pas toutes les réponses, en tous cas je ne suis pas un expert de Pangine2D.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 40
Date d'inscription : 29/12/2016

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 16:41

Jean Claude a écrit:
Maintenant, je peux te dire que j'ai galéré au tout début, mais je me suis obstiné et grâce à la bonne volonté d'un bon nombre de Panoramiciens j'ai réussi à faire AsrerV4.

Pour moi c'est foutu. Comme je l'ai déjà dit, c'est pas mon ambition de me lancer dans les jeux, et dans Pagine2D en plus. Si ceux qui ont essayé (ne le prend pas mal, j'accepte les critiques de mon côté) ne donnent pas d'informations, cela n'arrange rien. Si à chaque fois il faut tout reprendre, on reste au point de départ.

Je vois mal comment gérer des collisions, si on touche une case alors qu'on a des sprites qui peuvent avoir n'importe dimensions, grâce aux commandes  qu'on peut leur attribuer, cela me parait peut gérable. Ou alors il faut rester dans quelque chose de simple. Avoir des sprites de même dimensions que des tuiles, pouvoir calculer sur des collisions de rectangles sans plus, éviter tout ce qui modifie l'apparence (en dehors des changements d'image dans un sprite). Autrement dites-moi comment vous faites!

@Klaus,

Je n'ai pas testé car si tu as d'autres solutions, je me vois mal expliquer à un gamin, que je vois rarement, 200km nous sépare qui commence à s'intéresser à la programmation, programmer dès maintenant avec les DLLs, il a d'abord les bases à apprendre, et ensuite petit à petit, monter en puissance. Je le vois peut être la semaine prochaine, et il y de grande marche à franchir. On verra ce que cela donne. A cet âge, on apprend vite, mais quant même.

Ce qui aurait été bien est que Panoramic sur Androïde soit une vrai réalité.

Je vais pouvoir peut-être maintenant hiberner Exclamation affraid

Salutation à la famille Panoramicienne. cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   Dim 12 Fév 2017 - 17:06

Juste pour compléter - voici 2 pseudo-sprites implémentés par des FORM, en 100 % Panoramic, qui bougent de façon fluide. On peut jouer sur le timer et d'autres paramètres.
Code:
label tick
dim x1%, y1%, x2%, y2%, res%, dx1%, dy1%, dx2%, dy2%

full_space 0

dx1% = 5
dy1% = 10
dx2% = 3
dy2% = 8
form 1 : border_hide 1 : width 1,100 : height 1,200 : color 1,255,0,0
  x1% = 80 : y1% = 30
  left 1,x1% : top 1,y1%
form 2 : border_hide 2 : width 2,100 : height 2,200 : color 2,0,0,255
  x2% = 400 : y2% = 400
  left 2,x2% : top 2,y2%

timer 10 : timer_interval 10,10 : on_timer 10,tick

end

tick:
  timer_off  10
  x1% = x1% + dx1%
    if x1%<10 then dx1% = 0 - dx1%
    if x1%>(width(0)-20-width(1)) then dx1% = 0 - dx1%
  y1% = y1% + dy1%
    if y1%<30 then dy1% = 0 - dy1%
    if y1%>(height(0)-80-height(1)) then dy1% = 0 - dy1%
  x2% = x2% + dx2%
    if x2%<10 then dx2% = 0 - dx2%
    if x2%>(width(0)-20-width(2)) then dx2% = 0 - dx2%
  y2% = y2% + dy2%
    if y2%<30 then dy2% = 0 - dy2%
    if y2%>(height(0)-80-height(2)) then dy2% = 0 - dy2%
  left 1,x1% : top 1,y1%
  left 2,x2% : top 2,y2%
  timer_on 10
  return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Discussion sur un jeu genre Mario en Panoramic   

Revenir en haut Aller en bas
 
Discussion sur un jeu genre Mario en Panoramic
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» EDI réalisé entièrement en Panoramic
» EDI réalisé entièrement en Panoramic
» pas un panoramic mais utilitaires delphi.
» [Résolu] Faire un ennemi à la mario ?
» New mario

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Présentation et bavardage-
Sauter vers: