Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Discussion sur un jeu genre Mario en Panoramic | |
|
+4Yannick JL35 Jean Claude papydall 8 participants | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Discussion sur un jeu genre Mario en Panoramic Ven 10 Fév 2017 - 18: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.zipCré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 ... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Ven 10 Fév 2017 - 18:54 | |
| Bienvenu dans le monde des jeux Papydall ! 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. 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 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 - 20:24, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Ven 10 Fév 2017 - 20:20 | |
| C'est plutôt mou sur le forum... 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. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Ven 10 Fév 2017 - 22:36 | |
| Effectivement, si c'est pour les vieux je ne me sens pas concerné 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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 0: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 et aussi pour les moins jeunes comme Jean Claude , sans oublier les carrément vieux comme moi et les autres panoramiciens de tout âge . Panoramario pour tout le monde et Panoramario pour les autres ! Bon, assez causé, je retourne m'instruire en poursuivant le tuto. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 11 Fév 2017 - 3: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. Je participerai donc dans la mesure de mes modestes moyens. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 7: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+ | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 11: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. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 11: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. 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 . Les programmeurs du dimanche que nous sommes vont devoirs se gratter la tête! . Je suis curieux de voir ce que cela peut donner, je vais suivre ça avec attention | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 11: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 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+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 11 Fév 2017 - 15: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. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 11 Fév 2017 - 15: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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 16: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. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 17: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#mozTocId58846A 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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 18: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. | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 19: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:
- Code:
-
' --------- TESTE JEU 2D ------------ full_space 0 : font_name 0,"Arial" label bouge dim larg%,haut% : larg% = width(0)/2-60 : haut% = height(0) - 500 dim img% , code% , d_l% , d_h%:' d_l% et d_h% décalage du dessin largeur et hauteur
image 1 : image 2 : image 3 : image 4 : image 5 : image 6
PICTURE 10 : top 10,40 :height 10,haut% : width 10,larg% : color 10,0,0,0 :hide 10
SCENE2D 20 : top 20,40 :height 20,haut% : width 20,larg% : left 20,larg%+10
grid 30 : top 30,top(20)+haut%+10 :grid_column 30,50 : grid_row 30,50: grid_column_width 30,30 : grid_row_height 30,20 width 30, larg%*2 memo 50 : top 50,top(30)+height(30)+10:width 50,width(0)-20 : height 50,height(30) : bar_both 50:font_size 50,10:font_bold 50 height 50,200 set_focus 50 : ' sinon ça ne marche pas : il faut trouver un objet qui prend le focus on_key_down 50,bouge creation_tuile()
END ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sub creation_tuile() ' item_add 50,"creation_tuile()" dim_local a% , d% , h% , i% , v% for a% = 2 to 50 step 2 for d% = 2 to 50 step 2 grid_write 30,a%,d%,1 grid_write 30,a%+1,d%,2 grid_write 30,a%,d%+1,3 grid_write 30,a%+1,d%+1,4 next d% grid_write 30,5,2,5 :' ajouter des marques grid_write 30,2,7,5 grid_write 30,9,8,5 next a% 2d_target_is 10 2d_fill_color 255,255,0 : 2d_rectangle 0,0,50,50 2d_image_copy 1, 0,0,50,50 file_save 1 ,"C:\temp\image1.bmp" 2d_fill_color 200,100,0 : 2d_rectangle 0,50,50,100 2d_image_copy 2, 0,50,50,100 file_save 2 ,"C:\temp\image2.bmp" 2d_fill_color 100,50,10 : 2d_rectangle 0,100,50,150 2d_image_copy 3, 0,100,50,150 file_save 3 ,"C:\temp\image3.bmp" 2d_fill_color 50,100,100: 2d_rectangle 0,150,50,200 2d_image_copy 4, 0,150,50,200 file_save 4 ,"C:\temp\image4.bmp" 2d_fill_color 250,0,100: 2d_rectangle 0,200,50,250 2d_image_copy 5, 0,200,50,250 file_save 5 ,"C:\temp\image4.bmp" ' mettre un fond de tuile comme une seule image d_h% =1 : d_l% = 1 affiche_scene() end_sub
sub selection_image(i%) ' item_add 50,"selection_image()" img% = i% end_sub ' ============================================= bouge: off_key_down 0 : off_key_down 20 : off_key_down 50 ' item_add 50,"bouge: "+str$(key_down_code)
if key_down_code = 37 and d_h% > 0 then d_h% = d_h%-1 if key_down_code = 39 and d_h% < 40 then d_h% = d_h% + 1 if key_down_code = 40 and d_l% < 40 then d_l% = d_l% + 1 if key_down_code = 38 and d_l% > 0 then d_l% = d_l%-1 if key_down_code = 27 then terminate affiche_scene() return ' ============================================= sub affiche_scene() ' item_add 50,"affiche_scene()" color 10,0,0,0 : print_target_is 10 : font_size 10,10:font_color 10,255,0,0: font_bold 10 if variable("h%") = 0 then dim_local h% , v% , i% for h% = 1 to 8 step 2 for v% = 1 to 12 step 2 i% = grid_read$(30, v% + d_h% +1 , h% + d_l%+1 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%-1)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+ d_l% +1) selection_image(i%) : 2d_image_paste img%,(v%)*50 , (h%-1)*50
i% = grid_read$(30, v% +1 + d_h% , h%+ d_l% +2 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+d_l% +2) selection_image(i%) : 2d_image_paste img%,v%*50 , h%*50 next v% next h% 2d_image_copy 6, 0,0, width(20), height(20) : file_save 6,"C:\temp\image6.bmp" file_load 20,"C:\temp\image6.bmp" set_focus 50 : top 50,screen_y on_key_down 50,bouge end_sub
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:
- Code:
-
' --------- TESTE JEU 2D ------------ full_space 0 : font_name 0,"Arial" label bouge dim larg%,haut% : larg% = width(0)/2-60 : haut% = height(0) - 500 dim img% , code% , touche% , nez%, d_l% , d_h%:' d_l% et d_h% décalage du dessin largeur et hauteur
image 1 : image 2 : image 3 : image 4 : image 5 : image 6 : image 7
PICTURE 10 : top 10,40 :height 10,haut% : width 10,larg% : color 10,0,0,0 :hide 10
SCENE2D 20 : top 20,40 :height 20,haut% : width 20,larg% : left 20,larg%+10
grid 30 : top 30,top(20)+haut%+10 :grid_column 30,50 : grid_row 30,50: grid_column_width 30,30 : grid_row_height 30,20 width 30, larg%*2 memo 50 : top 50,top(30)+height(30)+10:width 50,width(0)-20 : height 50,height(30) : bar_both 50:font_size 50,10:font_bold 50 height 50,200 set_focus 50 : ' sinon ça ne marche pas : il faut trouver un objet qui prend le focus on_key_down 50,bouge creation_tuile()
END ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sub creation_tuile() ' item_add 50,"creation_tuile()" dim_local a% , d% , h% , i% , v% for a% = 2 to 50 step 2 for d% = 2 to 50 step 2 grid_write 30,a%,d%,1 grid_write 30,a%+1,d%,2 grid_write 30,a%,d%+1,3 grid_write 30,a%+1,d%+1,4 next d% grid_write 30,5,2,5 :' ajouter des marques grid_write 30,2,7,5 grid_write 30,9,8,5 next a% 2d_target_is 10 2d_fill_color 255,255,0 : 2d_rectangle 0,0,50,50 2d_image_copy 1, 0,0,50,50 file_save 1 ,"C:\temp\image1.bmp" 2d_fill_color 200,100,0 : 2d_rectangle 0,50,50,100 2d_image_copy 2, 0,50,50,100 file_save 2 ,"C:\temp\image2.bmp" 2d_fill_color 100,50,10 : 2d_rectangle 0,100,50,150 2d_image_copy 3, 0,100,50,150 file_save 3 ,"C:\temp\image3.bmp" 2d_fill_color 50,100,100: 2d_rectangle 0,150,50,200 2d_image_copy 4, 0,150,50,200 file_save 4 ,"C:\temp\image4.bmp" 2d_fill_color 250,0,100: 2d_rectangle 0,200,50,250 2d_image_copy 5, 0,200,50,250 file_save 5 ,"C:\temp\image4.bmp" 2d_fill_color 255,255,0 : 2d_circle 0,280,5 2d_fill_color 0,255,0 : 2d_circle 275,270,15 2d_fill_color 0,200,100:2d_circle 275,310,25 2d_fill_color 0,0,255 :2d_rectangle 255,330,295,350 2d_image_copy 7,250,250,300,350 file_save 7,"c:\temp\image7.bmp" ' mettre un fond de tuile comme une seule image d_h% =1 : d_l% = 1 affiche_scene() end_sub
sub selection_image(i%) ' item_add 50,"selection_image()" img% = i% end_sub ' ============================================= bouge: off_key_down 0 : off_key_down 20 : off_key_down 50 ' item_add 50,"bouge: "+str$(key_down_code) touche% = key_down_code select touche% case 37 : if d_h% > 0 then d_h% = d_h%-1 case 39 : if d_h% < 40 then d_h% = d_h% + 1 case 40 : if d_l% < 40 then d_l% = d_l% + 1 case 38 : if d_l% > 0 then d_l% = d_l%-1 case 27 : terminate end_select affiche_scene() return ' ============================================= sub affiche_scene() ' item_add 50,"affiche_scene()" color 10,0,0,0 : print_target_is 10 : font_size 10,10:font_color 10,255,0,0: font_bold 10 if variable("h%") = 0 then dim_local h% , v% , i% for h% = 1 to 8 step 2 for v% = 1 to 12 step 2 i% = grid_read$(30, v% + d_h% +1 , h% + d_l%+1 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%-1)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+ d_l% +1) selection_image(i%) : 2d_image_paste img%,(v%)*50 , (h%-1)*50
i% = grid_read$(30, v% +1 + d_h% , h%+ d_l% +2 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+d_l% +2) selection_image(i%) : 2d_image_paste img%,v%*50 , h%*50 next v% next h% 2d_image_paste 7,250,250 : ' nez 2d_fill_color 255,255,255 if touche% = 39 then nez% = 1 if touche% = 37 then nez% = 2 if nez% = 1 then 2d_rectangle 290,272,302,280 if nez% = 2 then 2d_rectangle 250,272,262,280 2d_image_copy 6, 0,0, width(20), height(20) : file_save 6,"C:\temp\image6.bmp" file_load 20,"C:\temp\image6.bmp" set_focus 50 : top 50,screen_y on_key_down 50,bouge end_sub
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 - 1:01, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Sam 11 Fév 2017 - 21: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 - 12:57, édité 2 fois | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 0: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:
- Code:
-
' --------- TESTE JEU 2D ------------ full_space 0 : font_name 0,"Arial" label bouge dim larg%,haut% : larg% = width(0)/2-60 : haut% = height(0) - 500 dim img% , code% , touche% , nez%, d_l% , d_h%:' d_l% et d_h% décalage du dessin largeur et hauteur
image 1 : image 2 : image 3 : image 4 : image 5 : image 6 : image 7
PICTURE 10 : top 10,40 :height 10,haut% : width 10,larg% : color 10,0,0,0 :hide 10
SCENE2D 20 : top 20,40 :height 20,haut% : width 20,larg% : left 20,larg%+10
grid 30 : top 30,top(20)+haut%+10 :grid_column 30,50 : grid_row 30,50: grid_column_width 30,30 : grid_row_height 30,20 width 30, larg%*2 memo 50 : top 50,top(30)+height(30)+10:width 50,width(0)-20 : height 50,height(30) : bar_both 50:font_size 50,10:font_bold 50 height 50,200 sprite 1
set_focus 50 : ' sinon ça ne marche pas : il faut trouver un objet qui prend le focus on_key_down 50,bouge creation_tuile()
END ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ sub creation_tuile() ' item_add 50,"creation_tuile()" dim_local a% , d% , h% , i% , v% for a% = 2 to 50 step 2 for d% = 2 to 50 step 2 grid_write 30,a%,d%,1 grid_write 30,a%+1,d%,2 grid_write 30,a%,d%+1,3 grid_write 30,a%+1,d%+1,4 next d% grid_write 30,5,2,5 :' ajouter des marques grid_write 30,2,7,5 grid_write 30,9,8,5 next a% 2d_target_is 10 2d_fill_color 255,255,0 : 2d_rectangle 0,0,50,50 2d_image_copy 1, 0,0,50,50 file_save 1 ,"C:\temp\image1.bmp" 2d_fill_color 200,100,0 : 2d_rectangle 0,50,50,100 2d_image_copy 2, 0,50,50,100 file_save 2 ,"C:\temp\image2.bmp" 2d_fill_color 100,50,10 : 2d_rectangle 0,100,50,150 2d_image_copy 3, 0,100,50,150 file_save 3 ,"C:\temp\image3.bmp" 2d_fill_color 50,100,100: 2d_rectangle 0,150,50,200 2d_image_copy 4, 0,150,50,200 file_save 4 ,"C:\temp\image4.bmp" 2d_fill_color 250,0,100: 2d_rectangle 0,200,50,250 2d_image_copy 5, 0,200,50,250 file_save 5 ,"C:\temp\image4.bmp" 2d_fill_color 255,255,0 : 2d_circle 0,280,5 2d_fill_color 0,255,0 : 2d_circle 275,270,15 2d_fill_color 0,200,100:2d_circle 275,310,25 2d_fill_color 0,0,255 :2d_rectangle 255,330,295,350 2d_image_copy 7,250,250,300,350 file_save 7,"c:\temp\image7.bmp" sprite_file_load 1, "C:\temp\image7.bmp" sprite_position 1,250,252 ' mettre un fond de tuile comme une seule image d_h% =1 : d_l% = 1 affiche_scene() end_sub
sub selection_image(i%) ' item_add 50,"selection_image()" img% = i% end_sub ' ============================================= bouge: off_key_down 0 : off_key_down 20 : off_key_down 50 ' item_add 50,"bouge: "+str$(key_down_code) touche% = key_down_code select touche% case 37 : if d_h% > 0 then d_h% = d_h%-1 case 39 : if d_h% < 40 then d_h% = d_h% + 1 case 40 : if d_l% < 40 then d_l% = d_l% + 1 case 38 : if d_l% > 0 then d_l% = d_l%-1 case 27 : terminate end_select affiche_scene() return ' ============================================= sub affiche_scene() ' item_add 50,"affiche_scene()" color 10,0,0,0 : print_target_is 10 : font_size 10,10:font_color 10,255,0,0: font_bold 10 if variable("h%") = 0 then dim_local h% , v% , i% for h% = 1 to 8 step 2 for v% = 1 to 12 step 2 i% = grid_read$(30, v% + d_h% +1 , h% + d_l%+1 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%-1)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+ d_l% +1) selection_image(i%) : 2d_image_paste img%,(v%)*50 , (h%-1)*50
i% = grid_read$(30, v% +1 + d_h% , h%+ d_l% +2 ) selection_image(i%) : 2d_image_paste img%,(v%-1)*50 , (h%)*50
i% = grid_read$(30, v%+ d_h% +2 , h%+d_l% +2) selection_image(i%) : 2d_image_paste img%,v%*50 , h%*50 next v% next h% ' 2d_image_paste 7,250,250 : ' nez 2d_fill_color 255,255,255 if touche% = 39 then nez% = 1 if touche% = 37 then nez% = 2 if nez% = 1 then 2d_rectangle 290,272,302,280 if nez% = 2 then 2d_rectangle 250,272,262,280 2d_image_copy 6, 0,0, width(20), height(20) : file_save 6,"C:\temp\image6.bmp" file_load 20,"C:\temp\image6.bmp" set_focus 50 : top 50,screen_y :' caché le memo, mais pouvoir avoir le focus pour les touches. on_key_down 50,bouge end_sub
Je pense que je vais pouvoir me déconnecter. Je ne vois plus ce que je peux apporter de plus. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 8:12 | |
| - Klaus a écrit:
- Pour convertir ça en Panoramic, bonjour !
Je pensais surtout à FBPano 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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 9: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+ | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 12:21 | |
| Il va encore y avoir de la bafouille! - 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'. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 12: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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 13: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 , 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+ | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 14: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 Salutation à la famille Panoramicienne. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic Dim 12 Fév 2017 - 15: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
| |
| | | Contenu sponsorisé
| Sujet: Re: Discussion sur un jeu genre Mario en Panoramic | |
| |
| | | | Discussion sur un jeu genre Mario en Panoramic | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |