home · contact · privacy
Finished applying new code formatting and documentation rules on main module.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 30 Jul 2013 01:00:51 +0000 (03:00 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 30 Jul 2013 01:00:51 +0000 (03:00 +0200)
src/keybindings.h
src/main.c
src/main.h

index 9c2296584211b31f973b5dea7d587355db0b2a5d..085de9af4532447f156c9d8d8c05ccd620490ccc 100644 (file)
@@ -23,12 +23,12 @@ struct KeyBinding
 
 
 
-/* Metadata for the keybindings plurality and their editing window. */
+/* Metadata used by the keybinding editing window. */
 struct KeysWinData
 {
-  uint16_t max;    /* ? */
-  char edit;       /* ? */
-  uint16_t select; /* ? */
+  uint16_t max;    /* index of last keybinding (= n of keybindings - 1) */
+  char edit;       /* 1 if currently editing a keybinding, else 0 */
+  uint16_t select; /* index of keybinding selected for editing */
 };
 
 
index 693f204d9f785d6034e765a33c1a5eb173bbee95..b430925bbea390d3ae9fc3de10cf5f94b0e5825b 100644 (file)
+/* main.c */
+
 #include "main.h"
-#include <stdlib.h>
-#include <ncurses.h>
-#include <time.h>
-#include <unistd.h>
-#include "windows.h"
-#include "draw_wins.h"
-#include "keybindings.h"
-#include "readwrite.h"
-#include "map_objects.h"
-#include "map_object_actions.h"
-#include "map.h"
-#include "misc.h"
+#include <stdlib.h> /* for atoi(), exit(), EXIT_FAILURE, calloc() */
+#include <stdio.h> /* for FILE typedef, F_OK */
+#include <ncurses.h> /* for initscr(), noecho(), curs_set(), keypad(), raw() */
+#include <time.h> /* for time() */
+#include <unistd.h> /* for getopt(), optarg */
+#include "windows.h" /* for structs WinMeta, Win, init_win(), init_win_meta(),
+                      * draw_all_wins()
+                      */
+#include "draw_wins.h" /* for draw_keys_win(), draw_map_win(), draw_info_win(),
+                        * draw_log_win()
+                        */
+#include "keybindings.h" /* for initkeybindings(), get_action_key() */
+#include "readwrite.h" /* for read_uint16_bigendian, read_uint32_bigendian,
+                        * write_uint32_bigendian
+                        */
+#include "map_objects.h" /* for structs Monster, Item, Player,
+                          * init_map_object_defs(), read_map_objects(),
+                          * read_map_objects_monsterdata,
+                          * read_map_objects_itemdata, build_map_objects()
+                          */
+#include "map_object_actions.h" /* for player_wait(), move_player() */
+#include "map.h" /* for struct Map, init_map() */
+#include "misc.h" /* for rrand(), update_log(), toggle_window(), exit_game(),
+                   * find_passable_pos(), meta_keys(), save_game()
+                   */
+#include "yx_uint16.h" /* for dir enum */
 
-int main (int argc, char *argv[]) {
-  struct World world;
+int main(int argc, char *argv[])
+{
+    struct World world;
 
-  // Read in startup options (i.e. replay option and replay start turn).
-  int opt;
-  uint32_t start_turn;
-  world.interactive = 1;
-  while ((opt = getopt(argc, argv, "s::")) != -1) {
-    switch (opt) {
-      case 's':
-        world.interactive = 0;
-        start_turn = 0;
-        if (optarg)
-          start_turn = atoi(optarg);
-        break;
-      default:
-        exit(EXIT_FAILURE); } }
+    /* Read in startup options (i.e. replay option and replay start turn). */
+    int opt;
+    uint32_t start_turn;
+    world.interactive = 1;
+    while ((opt = getopt(argc, argv, "s::")) != -1)
+    {
+        switch (opt)
+        {
+            case 's':
+                world.interactive = 0;
+                start_turn = 0;
+                if (optarg)
+                    start_turn = atoi(optarg);
+                 break;
+            default:
+                exit(EXIT_FAILURE);
+        }
+    }
 
-  // Initialize log, player, monster/item definitions and monsters/items.
-  world.log = calloc(1, sizeof(char));
-  update_log (&world, " ");
-  struct Player player;
-  player.hitpoints = 5;
-  world.player = &player;
-  world.monster = 0;
-  world.item = 0;
-  init_map_object_defs(&world, "defs");
+    /* Initialize log, player, monster/item definitions and monsters/items. */
+    world.log = calloc(1, sizeof(char));
+    update_log (&world, " ");
+    struct Player player;
+    player.hitpoints = 5;
+    world.player = &player;
+    world.monster = 0;
+    world.item = 0;
+    init_map_object_defs(&world, "defs");
 
-  // For interactive mode, try to load world state from savefile.
-  FILE * file;
-  if (1 == world.interactive && 0 == access("savefile", F_OK)) {
-    file = fopen("savefile", "r");
-    world.seed = read_uint32_bigendian(file);
-    world.turn = read_uint32_bigendian(file);
-    player.pos.y = read_uint16_bigendian(file) - 1;
-    player.pos.x = read_uint16_bigendian(file) - 1;
-    player.hitpoints = fgetc(file);
-    read_map_objects (&world.monster, file, sizeof(struct Monster), read_map_objects_monsterdata);
-    read_map_objects (&world.item,    file, sizeof(struct Item),    NULL);
-    fclose(file); }
+    /* For interactive mode, try to load world state from savefile. */
+    FILE * file;
+    if (1 == world.interactive && 0 == access("savefile", F_OK))
+    {
+        file = fopen("savefile", "r");
+        world.seed = read_uint32_bigendian(file);
+        world.turn = read_uint32_bigendian(file);
+        player.pos.y = read_uint16_bigendian(file) - 1;
+        player.pos.x = read_uint16_bigendian(file) - 1;
+        player.hitpoints = fgetc(file);
+        read_map_objects(&world.monster, file, sizeof(struct Monster),
+                          read_map_objects_monsterdata);
+        read_map_objects(&world.item,    file, sizeof(struct Item), NULL);
+        fclose(file);
+    }
 
-  // For non-interactive mode, try to load world state from record file.
-  else {
-    world.turn = 1;
-    if (0 == world.interactive) {
-      file = fopen("record", "r");
-      world.seed = read_uint32_bigendian(file); }
+    /* For non-interactive mode, try to load world state from record file. */
+    else
+    {
+        world.turn = 1;
+        if (0 == world.interactive)
+        {
+            file = fopen("record", "r");
+            world.seed = read_uint32_bigendian(file);
+        }
 
-    // For interactive-mode in newly started world, generate a start seed from the current time.
-    else {
-      file = fopen("record", "w");
-      world.seed = time(NULL);
-      write_uint32_bigendian(world.seed, file);
-      fclose(file); } }
+      /* For interactive-mode in newly started world, generate a start seed
+       * from the current time.
+       */
+      else
+      {
+          file = fopen("record", "w");
+          world.seed = time(NULL);
+          write_uint32_bigendian(world.seed, file);
+          fclose(file);
+      }
+  }
 
-  // Generate map from seed and, if newly generated world, start positions of actors.
-  rrand(1, world.seed);
-  struct Map map = init_map();
-  world.map = &map;
-  if (1 == world.turn) {
-    player.pos = find_passable_pos(&map);
-    void * foo = build_map_objects (&world, &world.monster, 0, 1 + rrand(0,0) % 27, sizeof(struct Monster),
-                                    build_map_objects_monsterdata);
-    foo = build_map_objects (&world, foo, 1, 1 + rrand(0,0) % 9, sizeof(struct Monster),
-                             build_map_objects_monsterdata);
-    build_map_objects (&world, foo, 2, 1 + rrand(0,0) % 3, sizeof(struct Monster),
-                       build_map_objects_monsterdata);
-    foo = build_map_objects (&world, &world.item, 3, 1 + rrand(0,0) % 3, sizeof(struct Item),
-                             build_map_objects_itemdata);
-    build_map_objects (&world, foo, 4, 1 + rrand(0,0) % 3, sizeof(struct Item), build_map_objects_itemdata); }
+    /* Generate map from seed and, if newly generated world, start positions of
+     * actors.
+     */
+    rrand(1, world.seed);
+    struct Map map = init_map();
+    world.map = &map;
+    if (1 == world.turn)
+    {
+        player.pos = find_passable_pos(&map);
+        void * foo = build_map_objects(&world, &world.monster,
+                                       0, 1 + rrand(0,0) % 27,
+                                       sizeof(struct Monster),
+                                       build_map_objects_monsterdata);
+        foo = build_map_objects(&world, foo, 1, 1 + rrand(0,0) % 9,
+                                sizeof(struct Monster),
+                                build_map_objects_monsterdata);
+        build_map_objects(&world, foo, 2, 1 + rrand(0,0) % 3,
+                          sizeof(struct Monster),
+                          build_map_objects_monsterdata);
+        foo = build_map_objects(&world, &world.item, 3, 1 + rrand(0,0) % 3,
+                                sizeof(struct Item),
+                                build_map_objects_itemdata);
+        build_map_objects(&world, foo, 4, 1 + rrand(0,0) % 3,
+                          sizeof(struct Item), build_map_objects_itemdata);
+    }
 
-  // Initialize window system and windows.
-  WINDOW * screen = initscr();
-  noecho();
-  curs_set(0);
-  keypad(screen, TRUE);
-  raw();
-  init_keybindings(&world);
-  struct WinMeta win_meta = init_win_meta(screen);
-  struct Win win_keys = init_win(&win_meta, "Keys", &world, draw_keys_win);
-  struct Win win_map = init_win(&win_meta, "Map", &world, draw_map_win);
-  struct Win win_info = init_win(&win_meta, "Info", &world, draw_info_win);
-  struct Win win_log = init_win(&win_meta, "Log", &world, draw_log_win);
-  win_keys.frame.size.x = 29;
-  win_map.frame.size.x = win_meta.pad.size.x - win_keys.frame.size.x - win_log.frame.size.x - 2;
-  win_info.frame.size.y = 2;
-  win_log.frame.size.y = win_meta.pad.size.y - (2 + win_info.frame.size.y);
-  toggle_window(&win_meta, &win_keys);
-  toggle_window(&win_meta, &win_map);
-  toggle_window(&win_meta, &win_info);
-  toggle_window(&win_meta, &win_log);
+    /* Initialize window system and windows. */
+    WINDOW * screen = initscr();
+    noecho();
+    curs_set(0);
+    keypad(screen, TRUE);
+    raw();
+    init_keybindings(&world);
+    struct WinMeta win_meta = init_win_meta(screen);
+    struct Win win_keys = init_win(&win_meta, "Keys", &world, draw_keys_win);
+    struct Win win_map = init_win(&win_meta, "Map", &world, draw_map_win);
+    struct Win win_info = init_win(&win_meta, "Info", &world, draw_info_win);
+    struct Win win_log = init_win(&win_meta, "Log", &world, draw_log_win);
+    win_keys.frame.size.x = 29;
+    win_map.frame.size.x = win_meta.pad.size.x - win_keys.frame.size.x
+                           - win_log.frame.size.x - 2;
+    win_info.frame.size.y = 2;
+    win_log.frame.size.y = win_meta.pad.size.y - (2 + win_info.frame.size.y);
+    toggle_window(&win_meta, &win_keys);
+    toggle_window(&win_meta, &win_map);
+    toggle_window(&win_meta, &win_info);
+    toggle_window(&win_meta, &win_log);
 
-  // Replay mode.
-  int key;
-  unsigned char quit_called = 0;
-  unsigned char await_actions = 1;
-  if (0 == world.interactive) {
-    int action;
-    while (1) {
-      if (start_turn == world.turn)
-        start_turn = 0;
-      if (0 == start_turn) {
-        draw_all_wins (&win_meta);
-        key = getch(); }
-      if (1 == await_actions &&
-          (world.turn < start_turn || key == get_action_key(world.keybindings, "wait / next turn")) ) {
-        action = getc(file);
-        if (EOF == action) {
-          start_turn = 0;
-          await_actions = 0; }
-        else if (0 == action)
-          player_wait (&world);
-        else if (NORTH == action)
-          move_player(&world, NORTH);
-        else if (EAST  == action)
-          move_player(&world, EAST);
-        else if (SOUTH == action)
-          move_player(&world, SOUTH);
-        else if (WEST == action)
-          move_player(&world, WEST); }
-      else
-        quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log);
-        if (1 == quit_called)
-          exit_game(&world, &map); } }
+    /* Replay mode. */
+    int key;
+    unsigned char quit_called = 0;
+    unsigned char await_actions = 1;
+    if (0 == world.interactive)
+    {
+        int action;
+        while (1)
+        {
+            if (start_turn == world.turn)
+            {
+                start_turn = 0;
+            }
+            if (0 == start_turn)
+            {
+                draw_all_wins (&win_meta);
+               key = getch();
+            }
+            if (1 == await_actions
+                && (world.turn < start_turn
+                    || key == get_action_key(world.keybindings,
+                                             "wait / next turn")) )
+            {
+                action = getc(file);
+                if (EOF == action)
+                {
+                    start_turn = 0;
+                    await_actions = 0;
+                }
+                else if (0 == action)
+                {
+                    player_wait (&world);
+                }
+                else if (NORTH == action)
+                {
+                    move_player(&world, NORTH);
+                }
+                else if (EAST  == action)
+                {
+                    move_player(&world, EAST);
+                }
+                else if (SOUTH == action)
+                {
+                    move_player(&world, SOUTH);
+                }
+                else if (WEST == action)
+                {
+                    move_player(&world, WEST);
+                }
+            }
+            else
+            {
+                quit_called = meta_keys(key, &world, &win_meta, &win_keys,
+                                             &win_map, &win_info, &win_log);
+                if (1 == quit_called)
+                {
+                    exit_game(&world, &map);
+                }
+            }
+        }
+    }
 
-  // Interactive mode.
-  else {
-    uint32_t last_turn = 0;
-    while (1) {
-      if (last_turn != world.turn) {
-        save_game(&world);
-        last_turn = world.turn; }
-      if (1 == await_actions && 0 == player.hitpoints)
-        await_actions = 0;
-      draw_all_wins (&win_meta);
-      key = getch();
-      if      (1 == await_actions && key == get_action_key(world.keybindings, "player up"))
-        move_player(&world, NORTH);
-      else if (1 == await_actions && key == get_action_key(world.keybindings, "player right"))
-        move_player(&world, EAST);
-      else if (1 == await_actions && key == get_action_key(world.keybindings, "player down"))
-        move_player(&world, SOUTH);
-      else if (1 == await_actions && key == get_action_key(world.keybindings, "player left"))
-        move_player(&world, WEST);
-      else if (1 == await_actions && key == get_action_key(world.keybindings, "wait / next turn"))
-        player_wait (&world);
-      else
-        quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log);
-        if (1 == quit_called)
-          exit_game(&world, &map); } } }
+    /* Interactive mode. */
+    else
+    {
+        uint32_t last_turn = 0;
+        while (1)
+        {
+            if (last_turn != world.turn)
+            {
+                save_game(&world);
+                last_turn = world.turn;
+            }
+            if (1 == await_actions && 0 == player.hitpoints)
+            {
+                await_actions = 0;
+            }
+            draw_all_wins (&win_meta);
+            key = getch();
+            if      (1 == await_actions
+                     && key == get_action_key(world.keybindings,
+                                              "player up"))
+            {
+                move_player(&world, NORTH);
+            }
+            else if (1 == await_actions
+                     && key == get_action_key(world.keybindings,
+                                              "player right"))
+            {
+                move_player(&world, EAST);
+            }
+            else if (1 == await_actions
+                     && key == get_action_key(world.keybindings,
+                                              "player down"))
+            {
+                move_player(&world, SOUTH);
+            }
+            else if (1 == await_actions
+                     && key == get_action_key(world.keybindings,
+                                              "player left"))
+            {
+                move_player(&world, WEST);
+            }
+            else if (1 == await_actions
+                     && key == get_action_key(world.keybindings,
+                                              "wait / next turn"))
+            {
+                player_wait (&world);
+            }
+            else
+            {
+                quit_called = meta_keys(key, &world, &win_meta, &win_keys,
+                                             &win_map, &win_info, &win_log);
+                if (1 == quit_called)
+                {
+                    exit_game(&world, &map);
+                }
+            }
+        }
+    }
+}
index 14287d044561705b2d625f2fb978bcdfcb783b6c..fc9bbc377dbec6f3f8cd41e76a4cee0d444006d2 100644 (file)
@@ -1,8 +1,14 @@
+/* main.h
+ *
+ * Contains the World struct holding all game data together.
+ */
+
 #ifndef MAIN_H
 #define MAIN_H
 
-#include <stdint.h>
 
+
+#include <stdint.h> /* for uint32_t*/
 struct WinMeta;
 struct Win;
 struct KeyBinding;
@@ -11,18 +17,24 @@ struct Map;
 struct ItemDef;
 struct MonsterDef;
 
-struct World {
-  char interactive;
-  struct KeyBinding * keybindings;
-  struct KeysWinData * keyswindata;
-  uint32_t seed;
-  uint32_t turn;
-  char * log;
-  struct Map * map;
-  struct ItemDef * item_def;
-  struct Item * item;
-  struct MonsterDef * monster_def;
-  struct Monster * monster;
-  struct Player * player; };
+
+
+struct World
+{
+    char interactive;                 /* 1: playing; 0: record playback. */
+    struct KeyBinding * keybindings;  /* Pointer to the keybindings. */
+    struct KeysWinData * keyswindata; /* Pointer to key edit window metadata. */
+    uint32_t seed;                    /* Randomness seed. */
+    uint32_t turn;                    /* Current game turn. */
+    char * log;                       /* Pointer to the game log string. */
+    struct Map * map;                 /* Pointer to the game map cells. */
+    struct ItemDef * item_def;        /* Pointer to the item definitions. */
+    struct Item * item;               /* Pointer to the items' data. */
+    struct MonsterDef * monster_def;  /* Pointer to the monster definitions. */
+    struct Monster * monster;         /* Pointer to the monsters' data. */
+    struct Player * player;           /* Pointer to the player data. */
+};
+
+
 
 #endif