feat(game): 添加基础游戏引擎和渲染模块
- 新增游戏引擎核心模块,包括初始化和运行逻辑 - 实现基本的渲染功能,支持控制台输出 - 添加物理引擎基础,包括碰撞检测 - 集成日志系统,用于调试和信息输出 - 创建窗口和输入管理模块
This commit is contained in:
72
game_core/main.c
Normal file
72
game_core/main.c
Normal file
@@ -0,0 +1,72 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define GE_VEC2I_USE_SHORT_NAMES
|
||||
#define _pynic_logout_printf(...) fprintf(fp , ##__VA_ARGS__)
|
||||
|
||||
#include <ge_core.h>
|
||||
#include "plantform/win_term/interface.h"
|
||||
FILE* fp;
|
||||
logger_t logger;
|
||||
|
||||
static void log_handler
|
||||
(log_level_t level, const char* module, const char* file, int line, const char* message) {
|
||||
fprintf(fp, "[%s] %s:%d | %s: %s\n",
|
||||
pynic_level_str(level), file, line, module, message);
|
||||
fflush(fp);
|
||||
}
|
||||
|
||||
void init(ge_core_t* core) {
|
||||
register_win_term(core);
|
||||
register_win_timer(core);
|
||||
fp = fopen("./log.txt", "w+");
|
||||
init_logger_ex(&logger, "game", log_handler);
|
||||
Assert(fp != NULL);
|
||||
}
|
||||
|
||||
void run(ge_core_t* core) {
|
||||
static ge_vector2i_t pos = vec2i(0, 0);
|
||||
// LOG_INFO("vec2: %d, %d", a.x, a.y);
|
||||
|
||||
int key = terminal_get_key((win_term_t*)core->render.content);
|
||||
switch (key) {
|
||||
case 'w':
|
||||
MLOG_INFO(&logger, "w");
|
||||
core->render.clear(&core->render);
|
||||
pos = vec2i_add(pos, GE_VEC2I_UP);
|
||||
core->render.draw(&core->render, pos, "@");
|
||||
break;
|
||||
case 'a':
|
||||
MLOG_INFO(&logger, "a");
|
||||
core->render.clear(&core->render);
|
||||
pos = vec2i_add(pos, GE_VEC2I_LEFT);
|
||||
core->render.draw(&core->render, pos, "@");
|
||||
break;
|
||||
case 's':
|
||||
MLOG_INFO(&logger, "s");
|
||||
core->render.clear(&core->render);
|
||||
pos = vec2i_add(pos, GE_VEC2I_DOWN);
|
||||
core->render.draw(&core->render, pos, "@");
|
||||
break;
|
||||
case 'd':
|
||||
MLOG_INFO(&logger, "d");
|
||||
core->render.clear(&core->render);
|
||||
pos = vec2i_add(pos, GE_VEC2I_RIGHT);
|
||||
core->render.draw(&core->render, pos, "@");
|
||||
break;
|
||||
case 'q':
|
||||
core->state = GE_ENGINE_STATE_EXIT;
|
||||
MLOG_INFO(&logger, "exit");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
ge_core_t core;
|
||||
ge_engine_init(&core);
|
||||
core.callbacks.init = init;
|
||||
core.callbacks.run = run;
|
||||
ge_engine_run(&core);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user