Advertisement
Guest User

pjikhoih

a guest
May 5th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.39 KB | None | 0 0
  1. #include <curses.h>
  2. #include <vector>
  3. #include <ctime>
  4. #include <cstdlib>
  5. #include <string>
  6. #include <iostream>
  7. #define O 0
  8. #define N 1
  9. #define S 2
  10. #define W 3
  11. #define E 4
  12. #define NW 5
  13. #define SW 6
  14. #define NE 7
  15. #define SE 8
  16. #define U 9
  17. #define D 10
  18.  
  19. using namespace std;
  20.  
  21. const int map_y = 200;
  22. const int map_x = 200;
  23. const int map_z = 1;
  24.  
  25. short int map_g[map_y][map_x][map_z];
  26.  
  27. struct creature
  28. {
  29.   int y;
  30.     int x;
  31.     int z;
  32.     string name;
  33.     int min_dmg;
  34.     int max_dmg;
  35.     int mhp;
  36.     int hp;
  37.     int fov;
  38.     char symbol;
  39.     bool hostile;
  40.     bool dead;
  41.     bool mv(short dir);
  42. };
  43.  
  44. vector <creature> creatures;
  45.  
  46. creature blank
  47. {
  48.     0,
  49.     0,
  50.     0,
  51.     "BLANK",
  52.     0,
  53.     0,
  54.     0,
  55.     0,
  56.     0,
  57.     '?',
  58.     0,
  59.     0
  60. };
  61.  
  62. creature human
  63. {
  64.     100,
  65.     100,
  66.     1,
  67.     "Human",
  68.     20,
  69.     30,
  70.     100,
  71.     100,
  72.     10,
  73.     '@',
  74.     0,
  75.     0
  76. };
  77.  
  78. //vector <item> item_v;
  79. creature *player;
  80.  
  81. #include "bresenham.h"
  82.  
  83. int creature_on_tile(int y, int x, int z)
  84. {
  85.     int i = -1;
  86.     for(int ct = 0 ; ct < creatures.size() ; ct++)
  87.     {
  88.         if(creatures[ct].y == y && creatures[ct].x == x && creatures[ct].z == z)
  89.         {
  90.             i = ct;
  91.         }
  92.     }
  93.     return i;
  94. }
  95.  
  96. bool creature::mv(short dir)
  97. {
  98.     switch(dir)
  99.     {
  100.         case N:
  101.             if(creature_on_tile(y - 1, x , z) != -1 || dead == 1)
  102.             {
  103.                 return false;
  104.             }
  105.             else
  106.             {
  107.                 if(map_g[y - 1][x][z] != 2)
  108.                 {
  109.                     y--;
  110.                 }
  111.                 else
  112.                 {
  113.                     return false;
  114.                 }
  115.             }
  116.         break;
  117.  
  118.         case S:
  119.             if(creature_on_tile(y + 1, x , z) != -1 || dead == 1)
  120.             {
  121.                 return false;
  122.             }
  123.             else
  124.             {
  125.                 if(map_g[y + 1][x][z] != 2)
  126.                 {
  127.                     y++;
  128.                 }
  129.                 else
  130.                 {
  131.                     return false;
  132.                 }
  133.             }
  134.         break;
  135.  
  136.         case W:
  137.             if(creature_on_tile(y, x - 1, z) != -1 || dead == 1)
  138.             {
  139.                 return false;
  140.             }
  141.             else
  142.             {
  143.                 if(map_g[y][x - 1][z] != 2)
  144.                 {
  145.                     x--;
  146.                 }
  147.                 else
  148.                 {
  149.                     return false;
  150.                 }
  151.             }
  152.         break;
  153.  
  154.         case E:
  155.             if(creature_on_tile(y, x + 1, z) != -1 || dead == 1)
  156.             {
  157.                 return false;
  158.             }
  159.             else
  160.             {
  161.                 if(map_g[y][x + 1][z] != 2)
  162.                 {
  163.                     x++;
  164.                 }
  165.                 else
  166.                 {
  167.                     return false;
  168.                 }
  169.             }
  170.         break;
  171.     }
  172. }
  173.  
  174. void render_map()
  175. {
  176.     int cr;
  177.     for(int yt = player->y - player->fov ; yt < player->y + player->fov ; yt++)
  178.     {
  179.         for(int xt = player->x - player->fov ; xt < player->x + player->fov ; xt++)
  180.         {
  181.             cr = creature_on_tile(yt , xt , player->z);
  182.             if(line(yt, xt, player->y, player->x, player->z))
  183.             {
  184.                 if(cr != -1)
  185.                 {
  186.                     printw("%c", creatures[cr].symbol);
  187.                 }
  188.                 else
  189.                 {
  190.                     switch(map_g[yt][xt][player->z])
  191.                     {
  192.                         case 0:
  193.                             printw("*");
  194.                         break;
  195.  
  196.                         case 1:
  197.                             printw("+");
  198.                         break;
  199.  
  200.                         case 2:
  201.                             printw("#");
  202.                         break;
  203.  
  204.                         default:
  205.                             printw("?");
  206.                         break;
  207.                     }
  208.                 }
  209.             }
  210.             else
  211.             {
  212.                 printw(" ");
  213.             }
  214.         }
  215.         printw("\n");
  216.     }
  217. }
  218.  
  219. void gen_map()
  220. {
  221.     for(int yt = 0; yt < map_y; yt++)
  222.     {
  223.         for(int xt = 0; xt < map_x; xt++)
  224.         {
  225.             map_g[yt][xt][1] = 1;
  226.         }
  227.     }
  228. }
  229.  
  230. void play(char ch)
  231. {
  232.     switch(ch)
  233.     {
  234.         case 'w':
  235.             player->mv(N);
  236.         break;
  237.  
  238.         case 's':
  239.             player->mv(S);
  240.         break;
  241.  
  242.         case 'a':
  243.             player->mv(W);
  244.         break;
  245.  
  246.         case 'd':
  247.             player->mv(E);
  248.         break;
  249.  
  250.         case 'r':
  251.             map_g[player->y][player->x][player->z] = 2;
  252.         break;
  253.     }
  254. }
  255.  
  256. int main()
  257. {
  258.     creatures.push_back(blank);
  259.     creatures.push_back(human);
  260.     player = &creatures[1];
  261.     initscr();
  262.     resize_term(50, 100);
  263.     char ch;
  264.     gen_map();
  265.     map_g[player->y + 2][player->x - 1][1] = 2;
  266.     printw("%d", creatures.size());
  267.     refresh();
  268.     while(player->dead == 0 && ch != 'q')
  269.     {
  270.         render_map();
  271.         printw("\n");
  272.         refresh();
  273.         printw("%d", player->y);
  274.         printw("\n");
  275.         printw("%d", player->x);
  276.         printw("\n");
  277.         printw("%d", player->z);
  278.         printw("\n");
  279.         printw("\n");
  280.         refresh();
  281.         ch = getch();
  282.         play(ch);
  283.         clear();
  284.     }
  285.     endwin();
  286.     return 0;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement