#ifndef _GAME_ENGINE_H_ #define _GAME_ENGINE_H_ #include #include #include #include typedef struct _TetringoGameEngine TetringoGameEngine; typedef struct _TetringoGameEngineIface TetringoGameEngineIface; struct _TetringoGameEngineIface { GTypeInterface base_iface; void (*start)(TetringoGameEngine *game_engine); void (*stop)(TetringoGameEngine *game_engine); gboolean (*is_running)(TetringoGameEngine *game_engine); gboolean (*place_piece)(TetringoGameEngine *game_engine, guint row, guint col); TetringoBoard *(*get_game_board)(const TetringoGameEngine *game_engine); TetringoBoard *(*get_cur_piece_board)( const TetringoGameEngine *game_engine); TetringoBoard *(*get_piece_board)(const TetringoGameEngine *game_engine, guint piece); guint (*get_piece_time_remaining)(const TetringoGameEngine *game_engine); Piece (*get_cur_piece)(const TetringoGameEngine *game_engine); TetringoRuleSet *(*get_ruleset)(const TetringoGameEngine *game_engine); /* Signals */ void (*started)(TetringoGameEngine *game_engine); void (*stopped)(TetringoGameEngine *game_engine); void (*tick)(TetringoGameEngine *game_engine); void (*piece_changed)(TetringoGameEngine *game_engine); void (*score_updated)(TetringoGameEngine *game_engine, guint score, gboolean penalty); void (*block_placed)(TetringoGameEngine *game_engine, guint row, guint col); }; #define TETRINGO_TYPE_GAME_ENGINE (tetringo_game_engine_get_type()) #define TETRINGO_GAME_ENGINE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TETRINGO_TYPE_GAME_ENGINE, TetringoGameEngine)) #define TETRINGO_GAME_ENGINE_IFACE(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TETRINGO_TYPE_GAME_ENGINE, TetringoGameEngineIface)) #define TETRINGO_IS_GAME_ENGINE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TETRINGO_TYPE_GAME_ENGINE)) #define TETRINGO_IS_GAME_ENGINE_IFACE(klass) \ (G_TYPE_CHECK_IFACE_TYPE((klass), TETRINGO_TYPE_GAME_ENGINE)) #define TETRINGO_GAME_ENGINE_GET_IFACE(obj) \ (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TETRINGO_TYPE_GAME_ENGINE, TetringoGameEngineIface)) GType tetringo_game_engine_get_type(void); void tetringo_game_engine_start(TetringoGameEngine *game_engine); void tetringo_game_engine_stop(TetringoGameEngine *game_engine); gboolean tetringo_game_engine_is_running(TetringoGameEngine *game_engine); gboolean tetringo_game_engine_place_piece(TetringoGameEngine *game_engine, guint row, guint col); TetringoBoard *tetringo_game_engine_get_game_board( const TetringoGameEngine *game_engine); TetringoBoard *tetringo_game_engine_get_cur_piece_board( const TetringoGameEngine *game_engine); TetringoBoard *tetringo_game_engine_get_piece_board( const TetringoGameEngine *game_engine, guint piece); guint tetringo_game_engine_get_piece_time_remaining( const TetringoGameEngine *game_engine); Piece tetringo_game_engine_get_cur_piece( const TetringoGameEngine *game_engine); TetringoRuleSet *tetringo_game_engine_get_ruleset( const TetringoGameEngine *game_engine); void tetringo_set_game_engine(TetringoGameEngine *game_engine); TetringoGameEngine *tetringo_get_game_engine(void); #endif /* _GAME_ENGINE_H_ */