From e6e7222d5a730368ed4e84c2e0f55427460e5230 Mon Sep 17 00:00:00 2001 From: Bradley Smith Date: Mon, 21 Jan 2008 00:16:45 +0000 Subject: Imported GNU robots from CVS. Signed-off-by: Bradley Smith --- include/Makefile.am | 27 +++++++ include/api.h | 43 ++++++++++ include/configs.h | 63 +++++++++++++++ include/grobot.h | 80 ++++++++++++++++++ include/main.h | 10 +++ include/map.h | 57 +++++++++++++ include/sign.h | 3 + include/userinterface.h | 211 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 494 insertions(+) create mode 100644 include/Makefile.am create mode 100644 include/api.h create mode 100644 include/configs.h create mode 100644 include/grobot.h create mode 100644 include/main.h create mode 100644 include/map.h create mode 100644 include/sign.h create mode 100644 include/userinterface.h (limited to 'include') diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..bdd9f2d --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,27 @@ +## +## include/Makefile.am +## +## GNU Robots is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## GNU Robots is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with GNU Robots; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +## + +EXTRA_DIST =\ + api.h\ + configs.h\ + map.h\ + main.h\ + grobot.h\ + sign.h\ + userinterface.h + diff --git a/include/api.h b/include/api.h new file mode 100644 index 0000000..e04f27b --- /dev/null +++ b/include/api.h @@ -0,0 +1,43 @@ +/* Robot API for the GNU Robots game */ + +/* Copyright (C) 1998 Jim Hall, jhall1@isd.net */ + +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _API_H +#define _API_H + +#include +#include /* GNU Guile high */ + +void api_init (void); + +/* Functions */ +SCM api_robot_turn (SCM s_n); +SCM api_robot_move (SCM s_n); +SCM api_robot_smell (SCM s_th); +SCM api_robot_feel (SCM s_th); +SCM api_robot_look (SCM s_th); +SCM api_robot_grab (void); +SCM api_robot_zap (void); +SCM api_robot_stop (void); + +SCM api_robot_get_shields (void); +SCM api_robot_get_energy (void); +SCM api_robot_get_score (void); + +#endif /* _API_H */ diff --git a/include/configs.h b/include/configs.h new file mode 100644 index 0000000..b3d5125 --- /dev/null +++ b/include/configs.h @@ -0,0 +1,63 @@ +#ifndef CONFIGS_H +#define CONFIGS_H + +#define TILE_SIZE 16 +#undef USE_MITSHM + +#ifdef PKGLIBDIR +#define MODULE_PATH PKGLIBDIR +#else +#ifdef ABS_TOP_BUILDDIR +#define MODULE_PATH ABS_TOP_BUILDDIR "/lib/.libs" +#else +#define MODULE_PATH "lib/.libs" +#endif /* ABS_TOP_BUILDDIR */ +#endif /* PKGLIBDIR */ + +#ifndef MODULE_PATH_ENV +# define MODULE_PATH_ENV "GNU_ROBOTS_PLUGIN_PATH" +#endif + +#ifndef MAPS_PATH_ENV +# define MAPS_PATH_ENV "GNU_ROBOTS_MAPS_PATH" +#endif + +#ifndef SCRIPTS_PATH_ENV +# define SCRIPTS_PATH_ENV "GNU_ROBOTS_SCRIPTS_PATH" +#endif + +#define MAX_PATH 256 + +/* Defaults */ +#define DEFAULT_MAP "maze.map" +#define DEFAULT_SCRIPT "mapper.scm" + +/* Symbolic constants */ +#define SPACE ' ' +#define FOOD '+' +#define PRIZE '$' +#define WALL '#' +#define BADDIE '@' +#define ROBOT 'R' + +/* Directions */ +#define NORTH 0 +#define EAST 1 +#define SOUTH 2 +#define WEST 3 + +/* For all displays */ +#define SLEEP_TIME 200 /* in milliseconds */ +#define USLEEP_TIME 200000 /* in microseconds */ +#define USLEEP_MULT 16 /* not used yet --jh */ + +#define DEFAULT_ENERGY 1000 +#define DEFAULT_SHIELDS 100 + +#define DEFAULT_MAP_COLUMNS 40 +#define DEFAULT_MAP_ROWS 20 + +#define PKGINFO PACKAGE_NAME " " VERSION +#define COPYRIGHT "Copyright (C) 1998,1999,2000 Jim Hall " + +#endif /* CONFIGS_H */ diff --git a/include/grobot.h b/include/grobot.h new file mode 100644 index 0000000..1ef0031 --- /dev/null +++ b/include/grobot.h @@ -0,0 +1,80 @@ +#ifndef _G_ROBOT_H +#define _G_ROBOT_H +/* MACROS */ + +#include +#include +#include "userinterface.h" +#include "map.h" + +G_BEGIN_DECLS + +extern GType _g_robot_type; + +typedef struct _GRobot GRobot; + +struct _GRobot { + GObject object; + + gint x; + gint y; + gint dir; + glong score; + glong energy; + glong shields; + glong shots; + glong units; + + UserInterface *ui; + Map *map; +}; + +typedef struct _GRobotClass GRobotClass; + +struct _GRobotClass { + GObjectClass parent_class; + + void (*death) (GRobot *robot); +}; + +#define G_TYPE_ROBOT (_g_robot_type) +#define G_IS_ROBOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ROBOT)) +#define G_IS_ROBOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_ROBOT)) +#define G_ROBOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_ROBOT, GRobotClass)) +#define G_ROBOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ROBOT, GRobot)) +#define G_ROBOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_ROBOT, GRobotClass)) + +/* some convenient macros */ +#define G_ROBOT_POSITION_X(robot) ((robot)->x) +#define G_ROBOT_POSITION_Y(robot) ((robot)->y) + +/* normal GObject stuff */ +GType g_robot_get_type (void); + +/* Our object functions */ +GRobot* g_robot_new (int x, + int y, + int dir, + long score, + long energy, + long shield, + long units, + long shots, + UserInterface *ui, + Map *map); + +void g_robot_turn (GRobot *robot, gint num_turns); +gboolean g_robot_move (GRobot *robot, gint steps); +gboolean g_robot_smell (GRobot *robot, gchar *str); +gboolean g_robot_feel (GRobot *robot, gchar *str); +gboolean g_robot_look (GRobot *robot, gchar *str); +gboolean g_robot_grab (GRobot *robot); +gboolean g_robot_zap (GRobot *robot); +gboolean g_robot_stop (GRobot *robot); +glong g_robot_get_shields (GRobot *robot); +glong g_robot_get_energy (GRobot *robot); +glong g_robot_get_score (GRobot *robot); + +G_END_DECLS + +#endif diff --git a/include/main.h b/include/main.h new file mode 100644 index 0000000..d09ac65 --- /dev/null +++ b/include/main.h @@ -0,0 +1,10 @@ +/* Functions */ + +#include +#include + +void main_prog (void *closure, gint argc, gchar *argv[]); +void death (GRobot *robot); +void exit_nicely (void); +void usage (const gchar *argv0); +gint is_file (const gchar *filename); diff --git a/include/map.h b/include/map.h new file mode 100644 index 0000000..8818030 --- /dev/null +++ b/include/map.h @@ -0,0 +1,57 @@ +#ifndef _MAP_H +#define _MAP_H +/* MACROS */ + +#include +#include + +G_BEGIN_DECLS + +extern GType _map_type; + +typedef struct +{ + gint num_rows; + gint num_cols; +} MapSize; + +typedef struct _Map Map; + +struct _Map { + GObject object; + + /* The actual Map */ + gint **_map; + MapSize size; + + gint errors; +}; + +typedef struct _MapClass MapClass; + +struct _MapClass { + GObjectClass parent_class; +}; + +#define G_TYPE_MAP (_map_type) +#define G_IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_MAP)) +#define G_IS_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_MAP)) +#define MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_MAP, MapClass)) +#define MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_MAP, Map)) +#define MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_MAP, MapClass)) + +/* some convenient macros */ +#define MAP_GET_OBJECT(map, x, y) ((map)->_map[(y)][(x)]) +#define MAP_SET_OBJECT(map, x, y, thing) ((map)->_map[(y)][(x)] = thing) + +/* normal GObject stuff */ +GType map_get_type (void); + +/* Our object functions */ +Map* map_new_from_file (const gchar *map, + gint num_rows, + gint num_cols); + +G_END_DECLS + +#endif diff --git a/include/sign.h b/include/sign.h new file mode 100644 index 0000000..f98c6c1 --- /dev/null +++ b/include/sign.h @@ -0,0 +1,3 @@ +#include + +gint sign (gint n); diff --git a/include/userinterface.h b/include/userinterface.h new file mode 100644 index 0000000..ba5ade9 --- /dev/null +++ b/include/userinterface.h @@ -0,0 +1,211 @@ +/* $Id: userinterface.h,v 1.7 2005/09/06 19:55:40 zeenix Exp $ */ + +/* GNU Robots game engine. This is the header file for user_interface module */ + +/* Copyright (C) 1998 Jim Hall, jhall1@isd.net */ + +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __USER_INTERFACE_H__ +#define __USER_INTERFACE_H__ + +#include +#include "map.h" + +G_BEGIN_DECLS + +extern GType _user_interface_type; + +typedef struct _UserInterface UserInterface; +typedef struct _UserInterfaceClass UserInterfaceClass; + +struct _UserInterfaceClass { + GTypeInterface parent; + + void (* user_interface_add_thing) (UserInterface *ui, + gint x, + gint y, + gint thing); + + void (* user_interface_draw) (UserInterface *ui); + + void (* user_interface_update_status) (UserInterface *ui, + const gchar *s, + glong energy, + glong score, + glong shields); + + void (* user_interface_move_robot) (UserInterface *ui, + gint from_x, + gint from_y, + gint to_x, + gint to_y, + gint cdir, + glong energy, + glong score, + glong shields); + + void (* user_interface_robot_smell) (UserInterface *ui, + gint x, + gint y, + gint cdir, + glong energy, + glong score, + glong shields); + + void (* user_interface_robot_zap) (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + + void (* user_interface_robot_feel) (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + + void (* user_interface_robot_grab) (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + + void (* user_interface_robot_look) (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + +/* routines to get/display data from/to user */ + void (* user_interface_get_string) (UserInterface *ui, + gchar *prompt, + gchar *buff, + gint len); +}; + +#define G_TYPE_USER_INTERFACE (_user_interface_type) +#define G_IS_USER_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_USER_INTERFACE)) +#define G_IS_USER_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_USER_INTERFACE)) +#define USER_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_USER_INTERFACE, UserInterfaceClass)) +#define USER_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_USER_INTERFACE, UserInterface)) +#define USER_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_USER_INTERFACE, UserInterfaceClass)) + +/* normal GObject stuff */ +GType user_interface_get_type (void); + +/* functions we want implemented by the implementers of our interface */ +void user_interface_add_thing (UserInterface *ui, + gint x, + gint y, + gint thing); + +void user_interface_draw (UserInterface *ui); + +void user_interface_update_status (UserInterface *ui, + const gchar *s, + glong energy, + glong score, + glong shields); + +void user_interface_move_robot (UserInterface *ui, + gint from_x, + gint from_y, + gint to_x, + gint to_y, + gint cdir, + glong energy, + glong score, + glong shields); + +void user_interface_robot_smell (UserInterface *ui, + gint x, + gint y, + gint cdir, + glong energy, + glong score, + glong shields); + +void user_interface_robot_zap (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + +void user_interface_robot_feel (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + +void user_interface_robot_grab (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + +void user_interface_robot_look (UserInterface *ui, + gint x, + gint y, + gint cdir, + gint x_to, + gint y_to, + glong energy, + glong score, + glong shields); + +/* routines to get/display data from/to user */ +void user_interface_get_string (UserInterface *ui, + gchar *prompt, + gchar *buff, + gint len); + +typedef UserInterface * (* UserInterfaceInitFunc) (Map *map, + GType parent_type); +#define USER_INTERFACE_INIT_FUNCTION "user_interface_new" + +G_END_DECLS + +#endif /* __USER_INTERFACE_H__*/ -- cgit v1.1