Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » BUILDER - Un jeu de construction comme minecraft et terraria.
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

BUILDER - Un jeu de construction comme minecraft et terraria.

Posté le 24/06/2022 20:07

Je me suis dit qu'il n'y avait pas beaucoup de jeux de construction stables en add-in sur Graph, donc je me suis dit d'en faire un moi-même.

https://gitea.planet-casio.com/mibi88/Builder

Un terrain généré :



24/06/2022 : Générateur de terrain fonctionnel.
26/06/2022 : Générateur de terrain amélioré.

Fichier joint


1, 2, 3 Suivante
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message
Zecter Hors ligne Membre Points: 159 Défis: 0 Message

Citer : Posté le 24/06/2022 20:15 | #


Ton lien marche pas (ou alors c'est ma faute mais je clique juste moi).

Mais sinon super idée !
Oui.

Langages appris (pas tous complètement)
Cliquer pour enrouler
- Python
- Java
- Basic Casio
- C


J'ai une Casio Graph 90+E.

Ma citation favorite
Cliquer pour enrouler
« La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique :
Rien ne fonctionne... et personne ne sait pourquoi ! »
- Albert Einstein


Remerciemembres
Lephenixnoir En ligne Administrateur Points: 22762 Défis: 149 Message

Citer : Posté le 24/06/2022 20:15 | #


Le point s'est fait capturer par l'autolinker, j'ai ajouté un espace
Zecter Hors ligne Membre Points: 159 Défis: 0 Message

Citer : Posté le 24/06/2022 20:16 | #


Ah là oui !
Oui.

Langages appris (pas tous complètement)
Cliquer pour enrouler
- Python
- Java
- Basic Casio
- C


J'ai une Casio Graph 90+E.

Ma citation favorite
Cliquer pour enrouler
« La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique :
Rien ne fonctionne... et personne ne sait pourquoi ! »
- Albert Einstein


Remerciemembres
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 26/06/2022 11:59 | #


J'ai amélioré le générateur de terrain et sa démo :
gentest.c génère un fichier XPM2 et les valeurs pour la génération sont plus équilibrés.
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 27/06/2022 21:31 | # | Fichier joint


J'ai commencé à coder le scrolling mais j'ai besoin de l'aide :

Exception! (SysERROR)
TLB miss read
PC :0030069a
TEA :00037e80
TRA :00000000
SGR :8804df60
The add-in crashed.
Please reset the calc

Ci-joint le dossier build-fx pour Lephé' !
Lephenixnoir En ligne Administrateur Points: 22762 Défis: 149 Message

Citer : Posté le 27/06/2022 21:36 | #


Cet accès mémoire a planté : https://gitea.planet-casio.com/mibi88/Builder/src/branch/master/src/main.c#L32

Tu as des warnings dans ton programme ; ils servent à attirer ton attention sur des bugs potentiels. L'un d'eux te pointe directement à la source de bug.

Le cast en (int *) que tu as mis pour résoudre ton erreur n'a fait que la cacher d'une façon très obscure ; je ne suis pas sûr que tu réalises exactement ce que la ligne que tu as écrite veut dire. En tous cas ce cast doit disparaître.
Inikiwi Hors ligne Membre Points: 398 Défis: 0 Message

Citer : Posté le 28/06/2022 08:16 | #


Cela fait 6 mois que j'ai pas de calculatrice sous la main mais je fais du C/C++ souvent.
Tous les variables incrémentés avec les boucles for sont définies en int avant, et initialisés a 0 au début de la boucle for.
type = terrain[(int *)(cy*tx+px)];


Je ne vous aucun intérêt a utiliser un pointeur de mémoire, tu veux juste accéder a un élément de la liste dont le contenu est en unsigned short. T peux utiliser sans problèmes à un élément de liste non-int avec une addition d'int.

(unsigned int)type = terrain[(int)(cy*tx+px)];
//simplifié
type = terrain[cy*tx+px];

Slyvtt Hors ligne Community Manager Points: 891 Défis: 0 Message

Citer : Posté le 28/06/2022 09:00 | #


Hello,

pour en discuter, mais globalement ta fonction me semble très complexe en apparence pour un truc finalement simple à la fin :


void mappartdisplaying(int x, int y, unsigned short terrain) {
    int firsttile_x = x>>3, firsttile_y = y>>3;
        // Revient globalement à firsttile_x = x/8 et firsttile_y = y/8;

    int base_x = firsttile_x*8, base_y = firsttile_y*8;
        // donc base_x = firstilte_x*8 = x / 8 * 8 = x ??? idem pour base_y ??? non ?!?

    int sx = base_x - x, sy = base_y - y, tx = (SCREEN_WIDTH>>3) + 1, ty = (SCREEN_HEIGHT>>3) + 1;
        // donc sx = base_x - x = x - x = 0 ??? idem pour sy ???

    int cx, cy, px = sx, py = sy;
        // perso je préfère ne pas déclarer les variables temporaires de compteur de boucles for en dehors (question de portée de variables)
        // je préfère les déclarer dans la boucle for : for (int cx = 0; cx ... );
        // comme ça une fois sortie de la boucle, on risque pas d'utiliser la variable pour autre chose

    unsigned short type;
    for(cy = 0;cy != ty;cy++){
        for(cx = 0;cx != tx;cx++){
            type = terrain[(int *)(cy*tx+px)];
            switch(type){
                case 1:
                    dimage(px, py, &soil_tile);
            }
            px += 8;
        }
        py += 8;
        px = sx;
    }
}


Je pense que tu aurais intérêt à tout bien remettre ton algo à plat et à simplifier au maximum pour avoir qq chose de plus lisible.
N'hésite pas à faire des sorties de variables pour vérifier que les valeurs sont bien celles auxquelles tu t'attends.

Sly

------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Lephenixnoir En ligne Administrateur Points: 22762 Défis: 149 Message

Citer : Posté le 28/06/2022 12:23 | #


Inikiwi a écrit :
Cela fait 6 mois que j'ai pas de calculatrice sous la main mais je fais du C/C++ souvent.
Tous les variables incrémentés avec les boucles for sont définies en int avant, et initialisés a 0 au début de la boucle for.
type = terrain[(int *)(cy*tx+px)];


Je ne vous aucun intérêt a utiliser un pointeur de mémoire, tu veux juste accéder a un élément de la liste dont le contenu est en unsigned short. T peux utiliser sans problèmes à un élément de liste non-int avec une addition d'int.

Tu te doutes bien que si terrain[x] était valide alors terrain[(int *)x] serait invalide, pour des raisons de type. La raison pour laquelle ce cast en int * est là est que terrain[x] est invalide. Le cast force les types dans une situation où l'opération est valide, mais ce n'est pas du tout l'opération qu'il voulait.

Le problème a à voir avec le type de terrain.
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 28/06/2022 14:26 | #


C'est déjà bon, j'avais déjà corrigé à ma façon !
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 04/07/2022 16:41 | #


Slyvtt a écrit :

    int firsttile_x = x>>3, firsttile_y = y>>3;
        // Revient globalement à firsttile_x = x/8 et firsttile_y = y/8;


J'ai utilisé
>>
car je voulais que le quotient de la division et je me suis dit que ça serait aussi plus rapide.
Lephenixnoir En ligne Administrateur Points: 22762 Défis: 149 Message

Citer : Posté le 04/07/2022 17:25 | #


@SlyVTT :

SlyVTT a écrit :
         // donc base_x = firstilte_x*8 = x / 8 * 8 = x ??? idem pour base_y ??? non ?!?

Non, puisque x>>3 (ou x/8, peu importe) est arrondi vers le bas, donc base_x est le plus grand multiple de 8 plus petit que x (à savoir x - x%8).

SlyVTT a écrit :
         // donc sx = base_x - x = x - x = 0 ??? idem pour sy ???

sx = -(x % 8)
Slyvtt Hors ligne Community Manager Points: 891 Défis: 0 Message

Citer : Posté le 04/07/2022 20:52 | #


Exact, effectivement, autant pour moi
Heureusement que tu veilles au grain Lephé

------------------------------------------------------------------
Le monde est dangereux à vivre ! Non pas tant à cause de ceux qui font le mal, mais à cause de ceux qui regardent et laissent faire.
-------------------------------------------------------------------
Albert Einstein
Mathématicien, Physicien, Scientifique (1879 - 1955)
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 05/07/2022 15:01 | #


Les améliorations d'aujourd'hui :
* Le scrolling fonctionne (enfin) !
* Le générateur de terrain génère un terrain propre.
* Ajout des tuiles herbe et acier.
* Meilleure tuile terre.
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 06/07/2022 19:43 | #


Pour aujourd'hui :
* Arbres (pas terrible)
* Joueur animé (le pire pixel art au monde)
* Préparation des physics.
* Meilleur tuile bois.
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 07/07/2022 15:49 | #


Pour aujourd'hui :
* Le joueur peut tomber et il ne peut plus traverser les murs.
* Sprites croix de sélection et pioche
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message
-florian66- Hors ligne Ancien rédacteur Points: 2382 Défis: 20 Message

Citer : Posté le 08/07/2022 23:41 | #


C'est pas mal de nous faire part ainsi de la progression du projet
Courage !
In Arch, I trust ! And you ?
Mb88 Hors ligne Membre Points: 334 Défis: 0 Message

Citer : Posté le 19/07/2022 12:28 | #


La dernière build est maintenant dans le dossier
latest-build
de la dépôt git.
Hier j'ai fait un nouvel inventaire et j'ai commencer à ralentir la destruction des blocs.
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 v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 54 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