diff --git a/Makefile b/Makefile index 55a5f38..e501d34 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ RM= rm -r MKDIR= mkdir -p ####### Directories SRCDIR= src +DOCDIR= doc OUTDIR= bin OBJDIR= $(OUTDIR)/objects ####### Project @@ -17,7 +18,7 @@ OBJDIR= $(OUTDIR)/objects OBJEND= o SRCEND= c # name of programm (and executable) -NAME= game +NAME= adventgame # path to executable EXE = $(OUTDIR)/$(NAME) @@ -53,7 +54,13 @@ clean: # start programm run: $(OUTDIR)/$(NAME) - ./$(OUTDIR)/$(NAME) + ./$(OUTDIR)/$(NAME) -v + +man: $(DOCDIR)/$(NAME).6 + gzip $(DOCDIR)/$(NAME).6 > $(OUTDIR)/$(NAME).6.gz + +man-test: $(DOCDIR)/$(NAME).6 + groff -man -Tascii $(DOCDIR)/$(NAME).6 # execute clean every time .PHONY: clean diff --git a/doc/adventgame.6 b/doc/adventgame.6 new file mode 100644 index 0000000..d4ca1c4 --- /dev/null +++ b/doc/adventgame.6 @@ -0,0 +1,82 @@ +.TH adventgame 6 "December 2009" "" "version 0.1" +.SH NAME +adventgame - an interactive open source programming tutorial +.SH SYNOPSIS +.B adventgame +[-v] [-h] [--man] +.SH DESCRIPTION +The +.B adventgame +is the resulting output from the advent calendar series from the website +.I advent.aaron-mueller.de +(in the year 2009). In 12 articles Aaron Mueller +explain the basics of open source and all its activities. This game is +the working example. It represents a simple (unfinished) +.I Worms +clone. +.SH OPTIONS +.TP +.B -v +Set verbose output, so the user can see debug messages. This option is usefull +in development or if a wired bug occurs and you want to know whats going on. +.TP +.B -h +Display a short description of all options. This is nice to know what options +exists without open up this manpage and read this text. +.TP +.B --man +Open up this manpage. This option is only a notice to the user to let him +know that a manpage exists. +.SH PLAY THE GAME +The game itself is not that hard. When you start the game without a parameter +or the +.B -v +parameter to see more output, you land in the main menu. Here you can choose +if you want to start a new game or view the credits or even quit the game. If +you choose to start a new game, the next menu appears. Here you can choose the +number of players to play the game. Navigating in the menu is done by +.B j +or +.B PAGE DOWN +and +.B k +or +.B PAGE UP. +To select a menu utem just press +.B RETURN +or +.B SPACE +and you change the screen. +.PP +If you choose the number of players and continue, you see the game field. +At this time, there is not really a game, it just display the dynamically +generated landscape. If you press +.B RETURN, +you can regenerate the landscape. If you press +.B ESC +or +.B F10 +, you can quit the game and return to the main menu. +.SH BUGS +There area many unfinished things in this game. If you feel a light prickle +under your thumbs, feel free to contribute some code or documentation like +this. This would be great! +.SH AUTHOR AND LINKS +The project is created by Aaron Mueller . If you want +to contribute, visit + +.I http://advent.aaron-mueller.de/ +.RS +Article page +.RE +.I http://feitel.indeedgeek.de/2009/adventskalender/ +.RS +Advent calendar +.RE +.I http://github.com/aaronmueller/advent2009 +.RS +Sourcecode +.RE +.SH CONTRIBUTORS +Florian Eitel, Ruben Mueller + diff --git a/src/config.c b/src/config.c index e50a810..e8a46c8 100644 --- a/src/config.c +++ b/src/config.c @@ -3,6 +3,8 @@ #include #include "config.h" +bool DEBUG = false; + // Initialization for the global variables SDL_Surface *screen = NULL; SDL_Event event; diff --git a/src/config.h b/src/config.h index e650fff..345d2de 100644 --- a/src/config.h +++ b/src/config.h @@ -22,9 +22,9 @@ enum states { // Screen size static const int SCREEN_WIDTH = 800; static const int SCREEN_HEIGHT = 600; - #endif +extern bool DEBUG; // Global variables and definitions extern SDL_Surface *screen; // Screen to paint on diff --git a/src/draw.c b/src/draw.c index 411e92d..256c090 100644 --- a/src/draw.c +++ b/src/draw.c @@ -2,11 +2,15 @@ #include "SDL.h" #include #include +#include #include "draw.h" #include "config.h" void drawPixel(int x, int y, int color) { + assert(x < SCREEN_WIDTH && x >= 0); + assert(y < SCREEN_HEIGHT && y >= 0); + unsigned int *p = (unsigned int*)screen->pixels; int lineOffset = y * (screen->pitch/4); @@ -18,6 +22,8 @@ int _sign(float a) { } float _random(float from, float to) { + assert(from < to); + return ((to-from)*((float)rand()/RAND_MAX))+from; } @@ -73,8 +79,8 @@ void drawRect(int x1, int y1, int x2, int y2, int color, bool filled) { } } -// TODO: Write some code in here! void drawCircle(int x, int y, int radius, int color, bool filled) { + // TODO: Write some code in here! } int* generateTerrain(float peakheight, float flatness) { @@ -83,7 +89,8 @@ int* generateTerrain(float peakheight, float flatness) { float r2 = _random(1.0, 5.0); float r3 = _random(1.0, 5.0); int *yvals = (int*)malloc(SCREEN_WIDTH*sizeof(int)); - printf("r1=%f, r2=%f, r3=%f\n", r1, r2, r3); + + if (DEBUG) printf("Generate new terrain with randoms: r1=%f, r2=%f, r3=%f\n", r1, r2, r3); for (int x=0; x #include #include +#include #include #include "SDL.h" #include "SDL_ttf.h" @@ -11,7 +12,28 @@ #include "menu.h" +/** + * This is the main file for the advent game. The adventgame is an interactive + * tutorial on aaron-mueller.de (winter 2009). YOu can read the whole list of + * articles on http://advent.aaron-mueller.de/. + */ int main(int argc, char **argv) { + // Check input parameters + if (argc == 2) { + if (strcmp(argv[1], "-v") == 0) DEBUG = true; + if (strcmp(argv[1], "--man") == 0) { + system("man adventgame"); + exit(0); + } + if (strcmp(argv[1], "-h") == 0) { + printf("Advent Game 2009\n\n \ + -v Verbose output, show debug messages\n \ + -h Show this lines and quit\n \ + --man Open up the manpage\n\n"); + exit(0); + } + } + // Initialize SDL and open up a screen SDL_Init(SDL_INIT_VIDEO); TTF_Init();