X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=roguelike.c;h=cba46ad44675453f749cf51d4a5f6acad68405fe;hb=6977fdf9517c4d4c46673ac047fb1dd9d6130556;hp=7abc32337e876e671993e29c6924c3b0db29f218;hpb=0d03343c9e13078b01ec8da1d7266b9e2ac39faf;p=plomrogue diff --git a/roguelike.c b/roguelike.c index 7abc323..cba46ad 100644 --- a/roguelike.c +++ b/roguelike.c @@ -1,5 +1,5 @@ #include -//#include +#include #include #include #include @@ -12,7 +12,7 @@ uint16_t rrand(char use_seed, uint32_t new_seed) { // Pseudo-random number generator (LGC algorithm). Use instead of rand() to ensure portable predictability. - static uint32_t seed = 0; + static uint32_t seed; if (0 != use_seed) seed = new_seed; seed = ((seed * 1103515245) + 12345) % 2147483648; // Values as recommended by POSIX.1-2001 (see rand(3)). @@ -21,7 +21,7 @@ uint16_t rrand(char use_seed, uint32_t new_seed) { uint32_t load_seed() { // Load seed integer from seed file. uint32_t seed; - const uint16_t nchar = 256; + const uint16_t nchar = UCHAR_MAX + 1; FILE * file = fopen("seed", "r"); unsigned char a = fgetc(file); unsigned char b = fgetc(file); @@ -33,7 +33,7 @@ uint32_t load_seed() { void save_seed(uint32_t seed) { // Save seed integer to seed file. - const uint16_t nchar = 256; + const uint16_t nchar = UCHAR_MAX + 1; unsigned char a = seed / (nchar * nchar * nchar); unsigned char b = (seed - (a * nchar * nchar * nchar)) / (nchar * nchar); unsigned char c = (seed - ((a * nchar * nchar * nchar) + (b * nchar * nchar))) / nchar; @@ -69,10 +69,9 @@ void growshrink_active_window (struct WinMeta * win_meta, char change) { struct Map init_map (uint32_t seed) { // Initialize map with some experimental start values. - rrand(1, seed); struct Map map; - map.width = 96; - map.height = 32; + map.width = 64; + map.height = 64; map.offset_x = 0; map.offset_y = 0; map.cells = malloc(map.width * map.height); @@ -105,8 +104,8 @@ void next_turn (struct World * world) { // Increment turn and move enemy. world->turn++; char d = rrand(0, 0) % 5; - char ty = world->monster->y; - char tx = world->monster->x; + uint16_t ty = world->monster->y; + uint16_t tx = world->monster->x; if (1 == d) ty++; else if (2 == d) @@ -146,8 +145,8 @@ void move_player (struct World * world, char d) { static char prev = 0; char success = 0; char * dir; - char ty = world->player->y; - char tx = world->player->x; + uint16_t ty = world->player->y; + uint16_t tx = world->player->x; if ('s' == d) { dir = "south"; ty++; } @@ -188,15 +187,12 @@ void player_wait (struct World * world) { update_log (world, "\nYou wait."); } int main (int argc, char *argv[]) { - uint32_t seed = time(NULL); - int opt; - while ((opt = getopt(argc, argv, "l")) != -1) { - switch (opt) { - case 'l': - seed = load_seed(); - break; - default: - exit(EXIT_FAILURE); } } + uint32_t seed; + if (0 == access("seed", F_OK)) + seed = load_seed(); + else + seed = time(NULL); + rrand(1, seed); struct World world; init_keybindings(&world); @@ -206,12 +202,12 @@ int main (int argc, char *argv[]) { struct Map map = init_map(seed); world.map = ↦ struct Player player; - player.y = 16; - player.x = 16; + player.y = 8; + player.x = 8; world.player = &player; struct Monster monster; - monster.y = 16; - monster.x = 80; + monster.y = 55; + monster.x = 55; world.monster = &monster; WINDOW * screen = initscr();