home · contact · privacy
Map is now somewhat randomized.
[plomrogue] / roguelike.c
index 2319963448077b077908e5aa4cb063f051ab729c..396f1f6afa8fabcc3309d1503cf09a500e90f5bb 100644 (file)
@@ -219,18 +219,23 @@ void init_keybindings(struct World * world) {
 struct Map init_map () {
 // Initialize map with some experimental start values.
   struct Map map;
-  map.width = 128;
-  map.height = 128;
+  map.width = 96;
+  map.height = 32;
   map.offset_x = 0;
   map.offset_y = 0;
   map.cells = malloc(map.width * map.height);
-  int x, y;
+  int x, y, ran;
+  char terrain;
   for (y = 0; y < map.height; y++)
-    for (x = 0; x < map.width; x++)
-      map.cells[(y * map.width) + x] = '.';
-  map.cells[(5 * map.width) + 5] = 'X';
-  map.cells[(3 * map.width) + 8] = 'X';
-  map.cells[(8 * map.width) + 3] = 'X';
+    for (x = 0; x < map.width; x++) {
+      terrain = '.';
+      ran = rand();
+      if (   0 == ran % ((x*x) / 3 + 1)
+          || 0 == ran % ((y*y) / 3 + 1)
+          || 0 == ran % ((map.width - x - 1) * (map.width - x - 1) / 3 + 1)
+          || 0 == ran %((map.height - y - 1) * (map.height - y - 1) / 3 + 1))
+        terrain = ' ';
+      map.cells[(y * map.width) + x] = terrain; }
   return map; }
 
 void update_info (struct World * world) {
@@ -317,7 +322,7 @@ char * get_keyname(int keycode) {
     sprintf(keyname, "(unknown)");
   return keyname;  }
 
-char is_passable (struct World * world, int y, int x) {
+char is_passable (struct World * world, int x, int y) {
 // Check if coordinate on (or beyond) map is accessible to movement.
   char passable = 0;
   if (0 <= x && x < world->map->width && 0 <= y && y < world->map->height)
@@ -350,7 +355,7 @@ void move_player (struct World * world, char d) {
     if (is_passable(world, world->player->x + 1, world->player->y)) {
       world->player->x++;
       success = 1; } }
-  if (prev == d)
+  if (success * d == prev)
     update_log (world, ".");
   else {
   char * msg = calloc(25, sizeof(char));
@@ -372,8 +377,8 @@ int main () {
   struct Map map = init_map();
   world.map = &map;
   struct Player player;
-  player.y = 2;
-  player.x = 2;
+  player.y = 10;
+  player.x = 10;
   world.player = &player;
 
   WINDOW * screen = initscr();