Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » "Compilation" niveau
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

"Compilation" niveau

Posté le 29/01/2016 20:35

Bonjour,

Ayant envie de passer à la vitesse supérieure niveau prog, je suis actuellement en train de travailler sur un jeu de plateforme fonctionnant par tableaux successifs (d'ailleurs si quelqu'un sait comment gérer du scrolling en basic, je suis preneur x), et pour me faciliter la tâcher, j'ai créé un éditeur dans lequel je peux modifier un des tableaux assez facilement avec le test et tout le bazar.

Le plan étant d'ensuite proposer une sorte de "compilation" rudimentaire où la calculatrice me condenserait toute la matrice de travail (de 21*7) dans une seule ligne que j'ajouterais dans un programme stockant les niveaux que le programme chargerait ensuite quand le joueur se déplace de tableau en tableau. Oui je suis flemmard et j'ai moyennement envie de recopier tout ça à la main vu que je prévois une centaine de tableaux xD (en espérant que les 60ko de la puce tiennent le coup)

Du coup là où survient le problème, c'est que j'aimerais que le compilateur "lise" la matrice case par case (ça c'est facile) mais qu'il me transfère le résultat dans le presse-papier afin que je puisse le coller ensuite avec le reste des niveaux, ce qui revient à renvoyer ce genre de texte : [[1,2,3,..,21][[1,2,3,..,21]...]
Est-ce que c'est possible, où y'aurait moyen de contourner le problème ?

Merci par avance !

(je mets le prog d'édition et de test en pièce-jointe, si vous avez envie de vous crever les yeux c'est par là : les progs marchent avec les matrices C et D dimensionnées à 7*21)

Fichier joint


1, 2, 3 Suivante
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 29/01/2016 21:16 | #


Bonjour ! Ca ressemble à un de mes projet J'aime la concurrence !

Alors c'est assez simple. Il faut utiliser les chaines de caractères. Avant de t'expliquer je te conseille d'aller voir Mario in CW et Super Drawstat (2 de mes programmes lien dans ma signature) Le premier pour le scrolling grâce au Str. Le second pour la compilation.

Donc pour le scrolling :
Tu as une Str que tu initialises
"    O    L    M            1   59   "→Str 1

Ensuite tu peux la faire "tourner" avec StrRotate (shift, vars, F6, F6, F1, F6, F6 et F5)
Locate 1,1,StrRotate(Str 1, X) //T'as chaine de caractère va être décalé de X vers la gauche

Imaginons :
"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"→Str 1
4→X
Locate 1,1,StrRotate(Str 1, X)
Tu verras affiché 3 4 5 6 7 8 9 10 11 12 13 14 15


Tu peux donc faire "scroller" les Str quand tu appuies sur la flèche de droite pour avancer

Après tu peux savoir ou tu es dans ta matrice grâce X


Pour la compilation, il faut toujours les Str.

Tu as créé ton niveau/matrice.

Tu lis case par case les valeurs (je pense que tu sais faire). Tu transformes cette variable en Str grâce à Var2Str de Totoyo.
Après grâce à ça tu peux "écrire" le code a coller dans ton programme grâce aux Str
[[1,2][3,4]]→Mat A
//Lire la premiere valeur et la mettre dans V
//Tu fais passer V dans Var2Str et il te sort la Str 1 qui est donc ton chiffre V
//V = 1 donc Str 1 = "1"
//Ensuite tu crées ton code
"[["+Str 1+","+.....+"]]→Mat A"→fn1


Mais qu'est que c'est qui dis donc la fn1 ?
C'est une F-memory (OPTN, F6, F6, F3) qui peux stocker des caractères et qui peuvent être coller ensuite grâce à RCL (F2 après la suite d'avant). Qui va copier le contenu de la F-memory dans ton programme (il faut appuyer sur ces touches manuellement, il n'y rien qui permet de coller quelque chose dans un programme via le code d'un programme. Tu me suis ?).


Je n'ai pas forcément été très clair mais j'espère t'avoir aidé. Si tu as des questions n'hésite pas

(Et si tu veux vraiment te lancer et si tu es d'accord j'aimerais beaucoup faire ce projet à deux puisque je peine à trouver la motivation tout seul pour finir mon Mario )
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 29/01/2016 22:06 | #


Merci de ta réponse rapide !

Donc, si je comprends bien, le "scroll" va en fait consister à modifier l'affichage une longue chaîne correspondant à tout le niveau, c'est ça ? Je n'y avais pas pensé du tout, bien vu ! Après j'ai une question : est-ce que afficher un caractère vide (espace) est plus rapide que d'afficher un caractère random ? Oui, tu me diras : c'est potentiellement mieux que ça soit la même vitesse, sinon adieu les fps stables xD

Je me sens un peu bête, j'avais déjà utilisé les fonctions pour un programme en maths : en fait c'est plus utile que ça en a l'air ce machin ! Du coup, je vais plus travailler avec les matrices je le sens, ça a l'air mieux ton machin.

Je vais tester tout ça de mon côté, et je donnerais des nouvelles un peu plus tard, parce que là autant tout recommencer vu que c'est plus du tout le même système ni ma manière de coder beaucoup trop barbare ^^'

Pour la collab, je suis pour sans problème mais je suis encore un noob, mon meilleur programme restant un 2048 de très bonne qualité mais c'est pas ouf xD (faudra que je l'upload, tiens je vais le faire vu qu'il est performant à donf)

Bonne soirée !
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 29/01/2016 22:14 | #


Exactement ! L'astuce vient de remiweb
C'est la même vitesse heureusement

Tu ne veux plus utiliser les matrices ? Comment tu vas faire ?

J'espère que tu vas y arriver sans problème

Si tu arrives a comprendre ça si facilement tu n'es pas un noob Si tu as fait un bon 2048 (bonne idée de le poster) tu dois avoir un certain niveau.

Mon meilleur jeu pour l'instant c'est..... Euh .... Tankasio ? Non en fait je ne sais même pas si il peut être considéré comme mon meilleur jeu (dans l'etat actuel des choses).

Tu as skype ? Comme ça nous pourrions discuter plus facilement (Si oui et que tu veux bien tu peux m'envoyer ton pseudo en MP )
Ne0tux Hors ligne Membre d'honneur Points: 3525 Défis: 265 Message

Citer : Posté le 30/01/2016 01:27 | #


Salut !

La problématique à laquelle tu fais face est extrêmement intéressante (celle de faire rentrer un maximum d'informations en un minimum d'espace mémoire puis de permettre de l'insérer manuellement dans un programme).

Nous y avons beaucoup travaillé avec Alex_1186 il fut un temps, avec pas mal de théorie mathématique (Shanon etc) et bien que le fruit de nos travaux n'ait (toujours) pas été partagé ici, j'ai publié un jeu, dont le lien figure dans ma signature, "Arkenstone", qui propose justement à l'utilisateur de générer des niveaux qui sont compilés puis ajoutés au presse-papier pour enfin être collés directement dans le bon sous-programme.

J'avais développé en moins de 48H ce système pour faire rentrer un niveau entier de jeu en une seule variable, je te propose d'y jeter un couper d'oeil. Je ne me souviens plus si c'est lisible ou bien commenté alors si jamais le code n'est pas clair fais-nous signe !

Pour ce qui est du scrolling, si tu développes tout en Basic et tu fais de "jolis" graphismes en mode "ViewWindows", il y a moyen d'innover en combinant le MultiDrawstat suggéré par Matt' et l'astuce de Purobaz (trop peu exploitée) que j'utilise dans le menu de "Clonelab" (lien dans ma signature).

Bon courage pour ton projet !
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 30/01/2016 10:10 | #


Merci Ne0tux ! Pour l'instant, je vais tenter de faire le jeu avec des graphismes simplifiés, après je vais voir pour vos techniques de fous furieux que je ne maîtrise absolument pas xD Le problème étant que maintenant je vais partir sur un jeu imitant le level design de Super Mario Bros (NES) histoire de voire jusqu'à où je peux aller parce que là j'ai un gros gros problème. Je m'explique : en fait Arkenstone est un jeu basé sur des tableaux fixes, c'est ce que j'avais réussi à faire avec mon éditeur (manquait qu'une bonne compilation), maintenant j'aimerais plutôt aller sur un jeu utilisant un scrolling, mais le problème c'est que les niveaux sont gigantesques par rapport à ce que tu m'as proposé.

Donc pour l'instant, mon défi ça va être de faire un jeu fonctionnant en mécanique avec des matrices, et je vais tenter de faire le premier niveau, histoire de voire si ça tient dans la cartouche La mémoire de la calto est trop limitée pour faire de la programmation dure et simpliste pour ce genre de jeu, va falloir que j'optimise totalement et que je multiplie les "bank switching" (en bon anglais) afin de charger différentes matrices dans un seul et même niveau afin de contourner les problèmes de mémoire liées en grande partie aux matrices qui sont loin de s'étendre à l'infini.

Néanmoins, ton idée pour afficher les sprites m'a l'air très intéressante (et même relevant plutôt de magie noire), mais comme je l'ai laissé sous-entendre un peu plus haut, je préfère progresser à mon rythme et avancer pas à pas, quitte à devoir tout recoder si y'a trop de trucs à modifier dans l'upgrade

Merci pour vos réponses si rapides, ça m'aide vraiment beaucoup et ça m'ouvre des perspectives que je n'aurais pas pu concevoir tout seul ! (du moins pas à mon niveau x) Je vous tiendrais au courant de mes avancées ! (genre quand je finis ce foutu first level ^^')
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 30/01/2016 11:53 | #


Ce que tu veux faire, c'est exactement de que je fais dans Mario in CW
C'est bien sur parfaitement optimisable et le moteur de jeu est pourri c'est pour ça que je le refais
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 30/01/2016 12:04 | #


Pour l'instant, je fais un peu de solo histoire de voir comment je me débrouille :3 Bonne chance à toi et que le plus mauvais de nous deux explose sa mémoire flash !
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 30/01/2016 12:35 | #


Ouai \o/ !
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 30/01/2016 13:53 | # | Fichier joint


Rebonjour mes chers compagnons,

J'ai pas mal avancé sur un tout nouvel éditeur, il est à présent adapté au scrolling même si un petit bug graphique que je ne parviens pas à supprimer reste présent contre toute attente (le pointeur laisse une empreinte quand son axe Y=2). Je vous le met en pièce-jointe, pour l'instant ça ne gère que des matrices de 7*150 (la fameuse inversion X/Y incompréhensible x') et il sera nécessaire de compiler la ligne sur laquelle on se trouve si on veut voir d'éventuelles modifications (oui du coup ça prend du temps, je m'efforcerais de faire un mode "caméra fixe" où l'on pourra travailler sur une section de manière dynamique, après on compile le tout et c'est parti x)

J'ai également un peu modifié le Var2Str afin de correspondre à un univers 'jeu' plutôt que binaire en modifiant la base des nombres et j'ai aussi supprimé l'input/output

Pour les commandes : Flèches pour se déplacer / EXE pour placer un bloc(ou en supprimer un existant) / F<->D pour compiler la ligne sur laquelle on se trouve.

Enjoie.
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 30/01/2016 19:03 | #


Woah ! T'as bien avancé ! Même si j'ai pas trop compris le truc avec Var2Str
Je teste ça demain
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 13:31 | # | Fichier joint


Encore de grandes avancées !

Cette fois-ci, le programme pèse clairement plus lourd, y'a beaucoup de travail à faire à ce niveau vu que y'a énormément de répétitions mais bon comme c'est un éditeur qui n'est pas sensé être public et qui reste rapide j'mens fous de la taille du machin xD

Changelog :

- Ajout d'une caméra fixe (ALPHA), avec possibilité de voir en temps réel ce qu'on modifie
-Lorsque l'on ré-appuie sur ALPHA pour sortir de ce mode, le programme propose de tout recompiler ou bien de compiler certaines lignes seulement (sachant qu'une compilation complètes dure environ 30 secondes montre en main, c'est pas mal de temps d'attente gagné). On peut aussi dire au programme qu'on préfère recompiler les strings à la main, donc les modifications vont disparaître de la vision (pas de la matrice) et on va devoir se mettre sur la ligne qu'on veut et ensuite appuyer sur F<->D
-En appuyant sur F1, on a la possibilité de nettoyer intégralement la map d'un coup, autant au niveau de la matrice que des strings (y'a un pop-up de confirmation ne vous inquiétez pas)
-Création d'un petit sous-programme qui remplace Var2Str. En effet, vu que je ne travaille que sur deux états de blocs pour l'instant, je ne vois pas pourquoi je devrais autant faire ramer ma calculatrice pour rien. Le nouveau se nomme Bin2Str et allège grandement la compilation malgré ses 72 octets.

Je réserve le bouton shift pour pouvoir changer de bloc à l'avenir, heureusement j'ai conçu l’extension du compilateur pour ça depuis le début et il est extrêmement modulable. En effet, il suffira de modifier en surface Bin2Str pour changer l'apparence d'un état de bloc, il suffira de recompiler les strings pour voir la différence.
Au programme pour la prochaine maj, des blocs différents autant à l'apparence qu'à l'entité : le bloc normal, le bloc en briques destructible, le bloc ? qui donne des pièces et évidemment les fameuses pièces. Heureusement, le plus gros est déjà fait ^o^

Maintenant, j'aimerais vous demander si vous trouviez que 30 secondes de chargement par niveau de 150 blocs c'est beaucoup trop long. Parce que je prévois de pouvoir compiler la matrice entière, mais après va falloir que le coco recompile tous les strings qui gèrent l'affichage lors d'un changement de niveau. Du coup, soit je supprime quasiment les temps de chargement en incluant les strings avec les matrices (et là je double la taille du fichier x_x), soit le programme recompile tout tout seul après avoir chargé la matrice. Qu'auriez-vous fait à ma place ? :3 J'avoue être face à un dilemme total présentement vu que j'ignore totalement la taille future des fichiers '|D

Enfin bref merci de votre précieuse aide, sans elle je n'aurais jamais pu avancer aussi vite !
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 31/01/2016 13:38 | #


Je suis estomaqué de cet avancée fulgurante Bravo !

Ayant déjà testé les deux options, il vaut mieux mettre les str avec les matrices plutôt que de recompiler car c'est vraiment horrible :@. Ca ralentit considérablement l'avancement dans le jeu, c'est embêtant et insupportable pour le joueur.
Ce n'est que mon avis donc fait ce qu'il te semble le mieux
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 14:16 | #


Merci :3

Je pense que je vais me ranger de ton côté, mais j'espère juste que ça va tenir dans la petite puce de la mémoire principale parce que là c'est pas négligeable. Néanmoins, j'espère vraiment que les chaînes de caractère pèsent significativement moins lourd que les matrices, sinon je suis pas mal dans le caca xD Si y'a pas assez de place, je vais devoir en trouver malheureusement Du coup, je vais enfin aller manger (ouais quand je suis sur un truc j'ai du mal à m'arrêter) et puis je vais voir cette aprèm pour des customs blocks
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 31/01/2016 14:20 | #


Non ça va ça ne prend pas une place incalculable
Mais note bien que les Str ne peuvent contenir que 255 caractères et que certains caractères comptent double.
(c'est pour ça que je suis limité à 10 fichus blocs différents maximum )
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 17:12 | # | Fichier joint


Voilà, la block update est là Je suis content parce que j'ai déjà la matrice du premier niveau, elle est dans le.g1m si tu veux tester :3

Le problème étant présentement que le sol en block noir plein valait double dans le string comme tu l'as dis un peu avant, donc je l'ai remplacé par une dièse et ça passe crème xD (ils sont omniprésents, tu m'étonnes que ça bouffe de la mémoire o_O) J'étais en stress, j'ai quasiment la fin du niveau et là on me dit "Erreur Mémoire" ... Yay ! Mais bon visiblement les niveaux de Super Mario Bros tournent VRAIMENT autour des limites techniques des Str, c'est marrant... Ça passe limite pour le premier, j'espère que ça sera la même pour les suivants parce que j'ai pas envie de me frotter au Str Switching même si j'ai laissé un peu de marge pour ça au cas où ^^' D'ailleurs, est-ce que tu sais vers où tournent les limites de Fn ? Ça risque de beaucoup m'aider histoire que je me retrouve pas toujours avec des erreurs mémoire de partout !

Bref, là je vais taffer les jours suivants sur une vraie compilation de matrice (j'ai déjà les strings du coup yes), puis je vais me contenter de réutiliser en partie mon premier moteur de jeu, ça va me faire gagner du temps je sens \o/
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 31/01/2016 17:26 | #


Le problème avec ça c'est que bon nombre de blocs qui conviendrait parfaitement avec le level design sont inutilisables

J'avais aussi pensé au Str Switching mais c'est pas le truc le plus léger qui soit

Elles n'ont pas de limites pénalisantes je pense (tu peux sans problème enregistrer un gros programme dedans) mais quand tu fais "machin"+Str 1+"bidule"→fn1, le maximum de caractère est aussi de 255

Bon courage !

Ajouté le 31/01/2016 à 17:29 :
Les Str ne sont pas initialisés au début de ton programme
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 17:33 | #


Compile les strings ! J'ai oublié de le préciser mais en gros il suffit de double appuyer sur ALPHA et tu prends la première option ':D
~Geek incompris ayant trouvé refuge sur l'Internet~
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 31/01/2016 17:51 | #


Je veux dire que dès que l'on lance EDITOR il met une erreur car il veut afficher les Str qui ne sont pas initialisés
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 17:56 | #


Ow, c'est un léger problème que je vais m'empresser de corriger !

EDIT : En fait nan, sinon faut tout recompiler à chaque fois que l'on reboote le prog, pas une bonne idée Sinon, j'ai réussi à résumer une matrice entière en une ligne, ça tient dans 3000 octets environ... Je sens qu'il va falloir retourner la cassette à un moment si je veux faire le jeu en entier xD
~Geek incompris ayant trouvé refuge sur l'Internet~
Epicmario Hors ligne Membre Points: 72 Défis: 0 Message

Citer : Posté le 31/01/2016 18:37 | # | Fichier joint


Finalement, je suis parvenu à créer une belle initialisation de matrice ! A vrai, ça a été plus d'attente de compilation qu'autre chose, mais je suis enfin venu à bout de tout ce qui me gênait Avec énormément de travail, je pourrais optimiser et générer les matrices de manières procédurale (vu que y'a énormément de vide) mais chaque chose en son temps et ça ne risque pas d'être facile ! Bref, à présent tu peux supprimer la matrice C, il ne te suffira que d'exécuter INIT~W1 et tout sera bon, y compris pour les strings ^o^ Je te mets tout ça, prochaine étape le moteur de jeu et après, je refais peu à peu tous les niveaux !

Une dernière chose, est-ce que tu sais si y'a moyen de dire à la calculatrice : pendant les X prochaines cases, tu remplis avec ça ? Ça pourrait faire gagner masse place bien utilisé !

En tout cas ça avance bien, merci pour les tuyaux ! (ba-dam-tzin)
~Geek incompris ayant trouvé refuge sur l'Internet~
1, 2, 3 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 110 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd