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.
Citer : Posté le 24/09/2021 09:58 | #
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.
Citer : Posté le 24/09/2021 18:10 | #
j'ai pas (encore) activé git pour mon projet.
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 ?
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)
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/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.