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 - Projets de programmation


Index du Forum » Projets de programmation » ekiwi - moteur de jeu pour casio
Inikiwi Hors ligne Membre Points: 552 Défis: 8 Message

ekiwi - moteur de jeu pour casio

Posté le 24/09/2021 08:25

ekiwi @rdp @RDP @Rdp @RdP @rdP @rDp




#include <gint/gint.h>
#include <gint/display.h>
#include <gint/keyboard.h>

enum OBJECT_TYPE{
    OBJECT,
    CAMERA
};

typedef struct {
    OBJECT_TYPE object_type,
    bopti_image_t *texture,
    int collision,
    int gravity,
    int visible,
    int position_x,
    int position_y
    int size_x,
    int size_y,
    int force_x,
    int force_y
}object_t;

int main(void){
int camera_x;
int camera_y;

    extern bopti_image_t img_test_block;
    extern bopti_image_t img_player_1;
    object_t obj_test_block = {OBJECT,&img_test_block,1,0,1,20,10,32,32,2,0};
    object_t obj_out_screen_block = {OBJECT,&img_test_block,1,0,1,115,10,32,32,0,0};
    object_t obj_player = {OBJECT,&img_player_1,1,1,1,65,47,32,32,0,0};
    while(1){
        if(obj_test_block.visible == 1)
            dimage(obj_test_block.position_x-camera_x,obj_test_block.position_y-camera_y,obj_test_block.texture);
        if(obj_out_screen_block.visible == 1)
            dimage(obj_out_screen_block.position_x-camera_x,obj_out_screen_block.position_y-camera_y,obj_out_screen_block.texture);
        if(obj_player.visible == 1)
            dimage(obj_player.position_x-camera_x,obj_player.position_y-camera_y,obj_player.texture);
        dupdate();
    }
    return 1;
}


salut! en ce moment je code un petit moteur de jeu, il actuellement il fonctionne très bien mais il y a pas beaucoup de fonctionnalités, mais ça va arriver dans les jours a suivre, je ne publie pas de version et ou de code source car le projet est clairement pas finit, je conte ajouter la gestion des touches ce vendredi et ce week-end.
le logiciel peut déjà exporter en c/gint les objets avec les propriétés, mais pas encore de physique ni de dynamique.


Breizh_craft Hors ligne Modérateur Points: 1157 Défis: 7 Message

Citer : Posté le 24/09/2021 09:58 | #


Inikiwi a écrit :
je ne publie pas de version et ou de code source car le projet est clairement pas fini


Je t’invites quand même à faire un dépôt Git public (par exemple sur la forge de Planète Casio). Ça coûte rien de le faire, et ça peut permettre à d’autres personnes de faire des suggestions, par exemple (ou de t’organiser, si t’utilises pas déjà Git pour gérer le projet, ou s’en inspirer pour d’autres projets, etc…). Pas besoin de versions dans un premier temps, par contre, effectivement.
Breizh.pm – Un adminsys qui aime les galettes.
Inikiwi Hors ligne Membre Points: 552 Défis: 8 Message

Citer : Posté le 24/09/2021 18:10 | #


j'ai pas (encore) activé git pour mon projet.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 24/09/2021 18:14 | #


Intéressant ! Dans le code il n'y a pas d'appels à des fonctions non-standard genre ekiwi_truc().

Est-ce que ça veut dire qu'il faut tout coder à la main ? Ou alors peut-être que le code est généré à partir de la fenêtre de l'éditeur ? Si c'est le cas, comment est-ce qu'on customise en détail un jeu si on ne contrôle pas le code ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 552 Défis: 8 Message

Citer : Posté le 24/09/2021 18:21 | #


c'est qu'une première version du jeu mais je vais envoyer le code de conversion avec le JSON du projet

(extrai du code)
    def app_export(self):
        header_file = open("data/header.c", "r")
        code = header_file.read()
        header_file.close()
        code_file = open(self.app_project_dir + "/" + self.app_project['project_name'] + ".c", "w")
        code_file.write(code)
        for obj in self.app_project['textures']:
            code_file.write("    extern bopti_image_t img_"+obj['name']+";\n")

        # objects
        for obj in self.app_project['objects']:
            code_file.write("    object_t obj_"+obj['name']+" = {")
            code_file.write(obj['object_type']+',')
            code_file.write('&img_'+obj['texture'] + ',')
            code_file.write(str(obj['collision']) + ',')
            code_file.write(str(obj['gravity']) + ',')
            code_file.write(str(obj['visible']) + ',')
            code_file.write(str(obj['position_x']) + ',')
            code_file.write(str(obj['position_y']) + ',')
            code_file.write(str(obj['size_x']) + ',')
            code_file.write(str(obj['size_y']) + ',')
            code_file.write(str(obj['force_x']) + ',')
            code_file.write(str(obj['force_y']) + '')
            code_file.write("};\n")

        code_file.write("while(1){\n")
        for obj in self.app_project['objects']:
            code_file.write("        if(obj_"+obj['name']+".visible == 1"+")\n")
            code_file.write("            dimage(obj_"+obj['name']+".position_x-camera_x," +
                            "obj_"+obj['name']+".position_y-camera_y," +
                            "obj_"+obj['name']+".texture" +
                            ");\n")
        code_file.write("        dupdate();")
        code_file.write("    }\n")

        # end
        code_file.write("    return 1;\n")
        code_file.write("}\n")

        code_file.close()


template_project.ekp (E-Kiwi Project)

  "project_name": "demo",
  "enable_force_physics": true,
  "objects": [
    {
      "object_type": "OBJECT",
      "name": "test_block",
      "texture": "test_block",
      "collision": 1,
      "gravity": 0,
      "visible": 1,
      "position_x": 20,
      "position_y": 10,
      "size_x": 32,
      "size_y": 32,
      "force_x": 2,
      "force_y": 0

    },
    {
      "object_type": "OBJECT",
      "name": "out_screen_block",
      "texture": "test_block",
      "collision": 1,
      "gravity": 0,
      "visible": 1,
      "position_x": 115,
      "position_y": 10,
      "size_x": 32,
      "size_y": 32,
      "force_x": 0,
      "force_y": 0

    }
  ],
  "textures": [
    {
      "name": "test_block",
      "path": "test.png"
    },
    {
      "name": "player_1",
      "path": "player1.png"
    }
  ]
}


template.c
#include <gint/gint.h>
#include <gint/display.h>
#include <gint/keyboard.h>

enum OBJECT_TYPE{
    OBJECT,
    CAMERA
};

typedef struct {
    OBJECT_TYPE object_type,
    bopti_image_t *texture,
    int collision,
    int gravity,
    int visible,
    int position_x,
    int position_y
    int size_x,
    int size_y,
    int force_x,
    int force_y
}object_t;

int main(void){
    int camera_x;
    int camera_y;



le projet n'en est qu'au début, il y a encore plein de trucs a ajouter

Ajouté le 25/09/2021 à 08:59 :
je me sois fait un planning: je vais sortir une première version de ekiwi avec la gestion de toucher/gravité/events et ensuite je vais TOUT recoder pour ajouter un semi-espace 3d avec du mapping de texture sur les surface 2d, l'utilisation de float pour les positions et un mouvement fluide et zoom de la camera, mais pour ça, j'espère que vous serez la pour m'aider avec le futur git du projet.

Ajouté le 01/10/2021 à 21:44 :
déso pour l'inactivité! j'ai repris les cours et je dois beaucoup réviser! je serait surement peu actif avant les vacances.

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 119 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