forked from xolatile/xhartae
New chapter 5, work in progress, unexecutable...
This commit is contained in:
parent
2f4bc29217
commit
c431bde5cf
@ -160,7 +160,7 @@ int curses_character = 0;
|
|||||||
int curses_signal = SIGNAL_NONE;
|
int curses_signal = SIGNAL_NONE;
|
||||||
int curses_screen_width = 0;
|
int curses_screen_width = 0;
|
||||||
int curses_screen_height = 0;
|
int curses_screen_height = 0;
|
||||||
int curses_active = 1;
|
int curses_active = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
I need to quickly explain how I'm structuring this subprogram. You can think of functions and variables starting with 'curses_*' as tiny standalone library if it's easier. They
|
I need to quickly explain how I'm structuring this subprogram. You can think of functions and variables starting with 'curses_*' as tiny standalone library if it's easier. They
|
||||||
@ -316,6 +316,8 @@ External function definitions, those found in "chapter_2.h" header file.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void curses_configure (void) {
|
void curses_configure (void) {
|
||||||
|
curses_active = TRUE;
|
||||||
|
|
||||||
atexit (curses_deinitialize); // Deinitialization is automatically on exit.
|
atexit (curses_deinitialize); // Deinitialization is automatically on exit.
|
||||||
|
|
||||||
curses_initialize (); // Initializing curses, yaay.
|
curses_initialize (); // Initializing curses, yaay.
|
||||||
|
57
chapter/chapter_5.c
Normal file
57
chapter/chapter_5.c
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2023 : Ognjen 'xolatile' Milan Robovic
|
||||||
|
|
||||||
|
Xhartae is free software! You will redistribute it or modify it under the terms of the GNU General Public License by Free Software Foundation.
|
||||||
|
And when you do redistribute it or modify it, it will use either version 3 of the License, or (at yours truly opinion) any later version.
|
||||||
|
It is distributed in the hope that it will be useful or harmful, it really depends... But no warranty what so ever, seriously. See GNU/GPLv3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CHAPTER_5_SOURCE
|
||||||
|
#define CHAPTER_5_SOURCE
|
||||||
|
|
||||||
|
#include "chapter_5.h"
|
||||||
|
|
||||||
|
static void (* game_action [GAME_ACTION_COUNT]) (game_t * game, player_t * player);
|
||||||
|
|
||||||
|
static number_t game_is_active (game_t * game) { return (game->active); }
|
||||||
|
static number_t game_exit (game_t * game) { return (game->active = FALSE); }/*
|
||||||
|
static number_t game_get_screen_width (game_t * game) { return (game->screen_width); }
|
||||||
|
static number_t game_get_screen_height (game_t * game) { return (game->screen_height); }
|
||||||
|
static number_t game_set_screen_width (game_t * game, number_t width) { return (game->screen_width = width); }
|
||||||
|
static number_t game_set_screen_height (game_t * game, number_t height) { return (game->screen_height = height); }*/
|
||||||
|
|
||||||
|
static void game_configure (game_t * game, player_t * player) {
|
||||||
|
curses_configure ();
|
||||||
|
|
||||||
|
curses_bind (SIGNAL_Q, game_exit);
|
||||||
|
|
||||||
|
game->active = TRUE;
|
||||||
|
game->screen_width = curses_screen_width;
|
||||||
|
game->screen_height = curses_screen_height;
|
||||||
|
|
||||||
|
player->x = 0;
|
||||||
|
player->y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void game_synchronize (game_t * game, player_t * player) {
|
||||||
|
(void) game;
|
||||||
|
|
||||||
|
curses_render_background (' ', COLOUR_WHITE, EFFECT_NORMAL);
|
||||||
|
|
||||||
|
curses_render_character ('@', COLOUR_CYAN, EFFECT_BOLD, player->x, player->y);
|
||||||
|
|
||||||
|
curses_synchronize ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void play_game (void) {
|
||||||
|
game_t game;
|
||||||
|
player_t player;
|
||||||
|
|
||||||
|
game_configure (& game, & player);
|
||||||
|
|
||||||
|
while (game_is_active (& game) && curses_active) {
|
||||||
|
game_synchronize (& game, & player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
70
chapter/chapter_5.h
Normal file
70
chapter/chapter_5.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2023 : Ognjen 'xolatile' Milan Robovic
|
||||||
|
|
||||||
|
Xhartae is free software! You will redistribute it or modify it under the terms of the GNU General Public License by Free Software Foundation.
|
||||||
|
And when you do redistribute it or modify it, it will use either version 3 of the License, or (at yours truly opinion) any later version.
|
||||||
|
It is distributed in the hope that it will be useful or harmful, it really depends... But no warranty what so ever, seriously. See GNU/GPLv3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CHAPTER_5_HEADER
|
||||||
|
#define CHAPTER_5_HEADER
|
||||||
|
|
||||||
|
#include "chapter_0.h"
|
||||||
|
#include "chapter_1.h"
|
||||||
|
#include "chapter_2.h"
|
||||||
|
#include "chapter_3.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Okay, we're finally on chapter five, and now we'll write something fun, not serious and boring. Before the Great Flood, when our ancestors were riding dinosaurs, building
|
||||||
|
pyramids, killing African men and mating with Asian women, people didn't have dedicated nor integrated graphical processing units, called GPUs. They only had their terminals,
|
||||||
|
built inside some of their spaceships. And what did they do with them? They played terminal rogue-like games, similar to those that archeologists discovered in ancient Egypt,
|
||||||
|
Syria, Sumeria, Greece and Atlantis. They were reconstructed around 50 years ago by some guy that made the game Rogue. So, all those myths, sagas and legends about Anubis,
|
||||||
|
Gilgamesh, Achilles, Inana, Gaea, they were just playable characters or main characters in those games, with different statistics, skills, attributes and back-story. Now, lets
|
||||||
|
make a simple terminal rogue-like game using what we wrote in previous chapters.
|
||||||
|
|
||||||
|
First of all, lets talk briefly about keyword 'typedef' and why I hate to use it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef enum action_t {
|
||||||
|
GAME_ACTION_IDLE, GAME_ACTION_WALK, GAME_ACTION_REST, GAME_ACTION_CAMP,
|
||||||
|
GAME_ACTION_SWING_BLADE, GAME_ACTION_SWING_AXE, GAME_ACTION_SHOOT_ARROW, GAME_ACTION_THROW_SPEAR,
|
||||||
|
GAME_ACTION_SUMMON_PUPPET, GAME_ACTION_CALL_NATURE, GAME_ACTION_CITE_RUNE, GAME_ACTION_CAST_CHARM,
|
||||||
|
GAME_ACTION_COUNT
|
||||||
|
} action_t;
|
||||||
|
|
||||||
|
typedef int number_t;
|
||||||
|
typedef char * string_t;
|
||||||
|
typedef void * memory_t;
|
||||||
|
|
||||||
|
typedef struct game_t {
|
||||||
|
number_t active, screen_width, screen_height;
|
||||||
|
} game_t;
|
||||||
|
|
||||||
|
typedef struct bundle_t {
|
||||||
|
number_t minimum, maximum, current, boosted;
|
||||||
|
} bundle_t;
|
||||||
|
/*
|
||||||
|
typedef struct skill_t {
|
||||||
|
string_t name;
|
||||||
|
bundle_t stat;
|
||||||
|
action_t positive [4];
|
||||||
|
} skill_t;
|
||||||
|
|
||||||
|
typedef struct attribute_t {
|
||||||
|
string_t name;
|
||||||
|
bundle_t stat;
|
||||||
|
action_t positive [4], negative [4];
|
||||||
|
} attribute_t;
|
||||||
|
*/
|
||||||
|
typedef struct player_t {
|
||||||
|
string_t name;
|
||||||
|
number_t x, y;
|
||||||
|
bundle_t * health, * armour, * mana, * stamina;
|
||||||
|
/*attribute_t strength, edurance, intelligence, agility;
|
||||||
|
skill_t blades, axes, bows, spears;
|
||||||
|
skill_t puppet_magic, nature_magic, rune_magic, charm_magic;*/
|
||||||
|
} player_t;
|
||||||
|
|
||||||
|
extern void play_game (void);
|
||||||
|
|
||||||
|
#endif
|
@ -9,10 +9,11 @@ gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_1.o chapter/chapter_1.
|
|||||||
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_2.o chapter/chapter_2.c
|
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_2.o chapter/chapter_2.c
|
||||||
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_3.o chapter/chapter_3.c
|
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_3.o chapter/chapter_3.c
|
||||||
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_4.o chapter/chapter_4.c
|
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_4.o chapter/chapter_4.c
|
||||||
|
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o chapter/chapter_5.o chapter/chapter_5.c
|
||||||
|
|
||||||
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o xhartae.o xhartae.c
|
gcc -g -Wall -Wextra -Wpedantic -O0 -c -o xhartae.o xhartae.c
|
||||||
|
|
||||||
gcc -o xhartae xhartae.o chapter/chapter_0.o chapter/chapter_1.o chapter/chapter_2.o chapter/chapter_3.o chapter/chapter_4.o
|
gcc -o xhartae xhartae.o chapter/chapter_0.o chapter/chapter_1.o chapter/chapter_2.o chapter/chapter_3.o chapter/chapter_4.o chapter/chapter_5.o
|
||||||
|
|
||||||
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_0.h
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_0.h
|
||||||
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_0.c
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_0.c
|
||||||
@ -24,6 +25,8 @@ gcc -o xhartae xhartae.o chapter/chapter_0.o chapter/chapter_1.o chapter/chapter
|
|||||||
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_3.c
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_3.c
|
||||||
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_4.h
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_4.h
|
||||||
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_4.c
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_4.c
|
||||||
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_5.h
|
||||||
|
#~splint -weak -warnposix -retvalother -syntax -type chapter/chapter_5.c
|
||||||
#~splint -weak -warnposix -retvalother -syntax -type xhartae.c
|
#~splint -weak -warnposix -retvalother -syntax -type xhartae.c
|
||||||
|
|
||||||
#~valgrind --show-leak-kinds=all --leak-check=full ./xhartae
|
#~valgrind --show-leak-kinds=all --leak-check=full ./xhartae
|
||||||
|
@ -12,12 +12,14 @@ It is distributed in the hope that it will be useful or harmful, it really depen
|
|||||||
#include "chapter/chapter_2.c"
|
#include "chapter/chapter_2.c"
|
||||||
#include "chapter/chapter_3.c"
|
#include "chapter/chapter_3.c"
|
||||||
#include "chapter/chapter_4.c"
|
#include "chapter/chapter_4.c"
|
||||||
|
#include "chapter/chapter_5.c"
|
||||||
#else
|
#else
|
||||||
#include "chapter/chapter_0.h"
|
#include "chapter/chapter_0.h"
|
||||||
#include "chapter/chapter_1.h"
|
#include "chapter/chapter_1.h"
|
||||||
#include "chapter/chapter_2.h"
|
#include "chapter/chapter_2.h"
|
||||||
#include "chapter/chapter_3.h"
|
#include "chapter/chapter_3.h"
|
||||||
#include "chapter/chapter_4.h"
|
#include "chapter/chapter_4.h"
|
||||||
|
#include "chapter/chapter_5.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -132,5 +134,7 @@ int main (int argc, char * * argv) {
|
|||||||
|
|
||||||
preview_c_file ("program/example.c", curses_screen_width, curses_screen_height, 0, 0);
|
preview_c_file ("program/example.c", curses_screen_width, curses_screen_height, 0, 0);
|
||||||
|
|
||||||
|
play_game ();
|
||||||
|
|
||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user