home · contact · privacy
Simplified internal structure of move_player().
[plomrogue] / src / roguelike.c
index 3fd86c0575d99e91c434b726f2f1640fee50c6fb..84290f1e5f032530608cea5904f973207a17fbd1 100644 (file)
@@ -135,36 +135,26 @@ void move_monster (struct World * world, struct Monster * monster) {
 
 void move_player (struct World * world, char d) {
 // Move player in direction d, increment turn counter and update log.
-  static char prev = 0;
-  char success = 0;
-  char * dir;
   struct yx_uint16 t = mv_yx_in_dir (d, world->player->pos);
   struct Monster * monster;
   for (monster = world->monster; monster != 0; monster = monster->next)
     if (yx_uint16_cmp (t, monster->pos)) {
-      success = 2;
-      break; }
-  if (2 != success && is_passable(world->map, t.y, t.x)) {
-    success = 1;
-    world->player->pos = t; }
-  if (success * d == prev)
-    update_log (world, ".");
-  else {
-    if (2 == success)
       update_log (world, "\nYou hit the monster.");
-    else {
-      if      (NORTH == d) dir = "north";
-      else if (EAST  == d) dir = "east" ;
-      else if (SOUTH == d) dir = "south";
-      else if (WEST  == d) dir = "west" ;
-      char * msg = calloc(25, sizeof(char));
-      char * msg_content = "You fail to move";
-      if (1 == success)
-        msg_content = "You move";
-      sprintf(msg, "\n%s %s.", msg_content, dir);
-      update_log (world, msg);
-      free(msg); } }
-  prev = success * d;
+      turn_over (world, d);
+      return; }
+  char * msg = calloc(25, sizeof(char));
+  char * msg_content = "You fail to move";
+  char * dir;
+  if      (NORTH == d) dir = "north";
+  else if (EAST  == d) dir = "east" ;
+  else if (SOUTH == d) dir = "south";
+  else if (WEST  == d) dir = "west" ;
+  if (is_passable(world->map, t.y, t.x)) {
+    msg_content = "You move";
+    world->player->pos = t; }
+  sprintf(msg, "\n%s %s.", msg_content, dir);
+  update_log (world, msg);
+  free(msg);
   turn_over (world, d); }
 
 void player_wait (struct World * world) {