Advertisement
Drowze

Projeto: roguelike v0.3 (beta)

Jun 8th, 2014
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.56 KB | None | 0 0
  1.  /*
  2. Roguelike v0.3b
  3. Autor: Rafael Gibim
  4. Limitações: 1º semestre de APC; não há uso de funções.
  5.  
  6. Changelog:
  7. 0.1: Personagem se move sem "entrar" nas paredes
  8. 0.2: Mapa 15x40 com câmera expandível (mas não é móvel)
  9. 0.3a: Sistema básico de encontros. Experiência cumulativa, mas level-up não implementado
  10. 0.3b: Sistema básico de encontros (bug ocasional?) level-up implementado
  11.  
  12. Definições:
  13. @ : personagem
  14. . : Espaço vazio
  15. # : parede
  16.  
  17. Monstros:
  18. ! : Troll
  19. % : Ogro
  20. + : Professor que da nota baixa
  21. */
  22.  
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <time.h> //necessária para melhorar a aleatoriedade
  26. #include <conio.h> //necessária para a função getch
  27.  
  28.  /* Quantidade de fileiras e colunas */
  29. #define FILE 17
  30. #define COLU 42
  31.  
  32.  /* Valores ASCII das setas e da tecla ESC */
  33. #define SETA_CIMA 72
  34. #define SETA_BAIXO 80
  35. #define SETA_ESQUERDA 75
  36. #define SETA_DIREITA 77
  37. #define ESC 27
  38.  
  39. /* Valores facilmente modificáveis */
  40. #define EXPERIENCIA_TROLL 10
  41. #define EXPERIENCIA_OGRO 30
  42. #define EXPERIENCIA_PROF 50
  43.  
  44. #define HP_TROLL 10
  45. #define HP_OGRO 30
  46. #define HP_PROF 50
  47.  
  48. #define ATK_TROLL 7
  49. #define ATK_OGRO 15
  50. #define ATK_PROF 20
  51.  
  52. #define HP_INICIAL 100
  53. #define HP_POR_LEVEL 20
  54. #define EXPERIENCIA_LEVEL_UP 50
  55. #define ATK_INICIAL 15
  56. #define ATK_POR_LEVEL 5
  57.  
  58. void main(){
  59.     int hp = HP_INICIAL;
  60.     int hp_total = HP_INICIAL;
  61.     int atk = ATK_INICIAL;
  62.     int exp_atual = 0;
  63.     int exp_total = 0;
  64.     int level_atual = 1;
  65.  
  66.     int hp_monstro;
  67.  
  68.     int camera_x = 6, camera_y = 11;
  69.     int random; //auxiliador randômico
  70.     int aux = 0; //Variável puramente auxiliar
  71.     int contador_monstros=0;
  72.     int i, j; //meros contadores
  73.     int i_atual, j_atual; //guarda a posição do jogador
  74.     char ch=0; //variável para reconhecer as setas
  75.     char tabuleiro[FILE][COLU];
  76.     srand(time(NULL));
  77.  
  78.     /* Preenchendo o tabuleiro */
  79.     for(i=0;i<FILE;i++){
  80.         for(j=0;j<COLU;j++){
  81.             tabuleiro[i][j] = '.';
  82.             if(i==0 || j == 0 || i==FILE-1 || j==COLU-1) tabuleiro[i][j] = '#';
  83.         }
  84.     }
  85.  
  86.  
  87.     /* Definindo posição do jogador */
  88.     i_atual = 1;
  89.     j_atual = 1;
  90.     tabuleiro[i_atual][j_atual] = '@';
  91.  
  92.     /* Colocando monstros aleatórios */
  93.     contador_monstros = rand()%10+1; //numero aleatório de monstros
  94.     for(aux = 0; aux < contador_monstros; aux++){
  95.         do{
  96.             i = rand()%(FILE-2) + 1;
  97.             j = rand()%(COLU-2) + 1;
  98.             if(tabuleiro[i][j] == '.') {
  99.                 random = rand()%10+1;
  100.                 if(random <= 2) tabuleiro[i][j] = '+'; //20% do assustador professor da nota baixa
  101.                 else if(random <= 5) tabuleiro[i][j] = '%'; //30% de um monstruoso ogro
  102.                 else tabuleiro[i][j] = '!'; //50% de um troll bobão
  103.             }
  104.         }while(tabuleiro[i][j] == '@');
  105.     }
  106.  
  107.  
  108.     /* Bloco onde a mágica acontece */
  109.  
  110.     do{
  111.         system("cls");
  112.  
  113.         /* Imprimindo o tabuleiro. */
  114.  
  115.         for(j=0; j<camera_y+2; j++) printf("?");
  116.         printf("\n");
  117.         for(i=0; i<camera_x; i++){
  118.             printf("?");
  119.             for(j=0;j<camera_y;j++) printf("%c", tabuleiro[i][j]);
  120.             printf("?");
  121.             printf("\n");
  122.         }
  123.         for(j=0; j<camera_y+2; j++) printf("?");
  124.         printf("\n");
  125.  
  126.         /* Informações na tela */
  127.         printf("\n\nLevel atual: %d",level_atual);
  128.         printf("\nHP restante: %d",hp);
  129.         printf("\nExperiencia: %d",exp_atual);
  130.         printf("\nMonstros restantes: %d",contador_monstros);
  131.  
  132.         printf("\n\nUtilize as setas para movimentar seu personagem\n");
  133.         printf("Aperte ESC para sair\n");
  134.        
  135.  
  136.         /* Reconhecimento de tecla. */
  137.         ch = getch();
  138.  
  139.  
  140.         switch(ch){
  141.         case SETA_CIMA:
  142.             /* Encontro Troll */
  143.             if(tabuleiro[i_atual-1][j_atual] == '!'){
  144.                 hp_monstro = HP_TROLL ;
  145.                 do{
  146.                     hp = hp - rand()%ATK_TROLL+1;
  147.                     if(hp>=0) printf("Troll desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  148.                     else printf("Voce morreu\n\n");
  149.                     hp_monstro = hp_monstro - rand()%atk+1;
  150.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O troll possui %d de vida restantes\n\n",hp_monstro);
  151.                     else {
  152.                         printf("O monstro morreu\n\n");
  153.                         exp_atual = exp_atual + EXPERIENCIA_TROLL;
  154.                         exp_total = exp_total + exp_atual;
  155.                         tabuleiro[i_atual-1][j_atual] = '.';
  156.                         contador_monstros--;
  157.                     }
  158.                     system("Pause");
  159.                 }while(hp > 0 && hp_monstro > 0);
  160.             }
  161.  
  162.             /* Encontro Ogro */
  163.             if(tabuleiro[i_atual-1][j_atual] == '%'){
  164.                 hp_monstro = HP_OGRO ;
  165.                 do{
  166.                     hp = hp - rand()%ATK_OGRO+1;
  167.                     if(hp>=0) printf("Ogro desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  168.                     else printf("Voce morreu\n\n");
  169.                     hp_monstro = hp_monstro - rand()%atk+1;
  170.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O ogro possui %d de vida restantes\n\n",hp_monstro);
  171.                     else {
  172.                         printf("O monstro morreu\n\n");
  173.                         exp_atual = exp_atual + EXPERIENCIA_OGRO;
  174.                         exp_total = exp_total + exp_atual;
  175.                         tabuleiro[i_atual-1][j_atual] = '.';
  176.                         contador_monstros--;
  177.                     }
  178.                     system("Pause");
  179.                 }while(hp > 0 && hp_monstro > 0);
  180.             }
  181.  
  182.             /* Encontro Professor */
  183.             if(tabuleiro[i_atual-1][j_atual] == '+'){
  184.                 hp_monstro = HP_PROF ;
  185.                 do{
  186.                     hp = hp - rand()%ATK_PROF+1;
  187.                     if(hp>=0) printf("Professor das notas baixas desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  188.                     else printf("Voce morreu\n\n");
  189.                     hp_monstro = hp_monstro - rand()%atk+1;
  190.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O professor possui %d de vida restantes\n\n",hp_monstro);
  191.                     else {
  192.                         printf("O professor morreu (e sua nota continua alta!)\n\n");
  193.                         exp_atual = exp_atual + EXPERIENCIA_PROF;
  194.                         exp_total = exp_total + exp_atual;
  195.                         tabuleiro[i_atual-1][j_atual] = '.';
  196.                         contador_monstros--;
  197.                     }
  198.                     system("Pause");
  199.                 }while(hp > 0 && hp_monstro > 0);
  200.             }
  201.                    
  202.             if(tabuleiro[i_atual-1][j_atual] == '.'){
  203.                 aux = tabuleiro[i_atual][j_atual];
  204.                 tabuleiro[i_atual][j_atual] = tabuleiro[i_atual-1][j_atual];
  205.                 tabuleiro[i_atual-1][j_atual] = aux;
  206.                 i_atual--;
  207.                 if(i_atual<12) camera_x--;
  208.             }
  209.             break;
  210.  
  211.  
  212.         case SETA_BAIXO:
  213.             /* Encontro Troll */
  214.             if(tabuleiro[i_atual+1][j_atual] == '!'){
  215.                 hp_monstro = HP_TROLL ;
  216.                 do{
  217.                     hp = hp - rand()%ATK_TROLL+1;
  218.                     if(hp>=0) printf("Troll desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  219.                     else printf("Voce morreu\n\n");
  220.                     hp_monstro = hp_monstro - rand()%atk+1;
  221.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O troll possui %d de vida restantes\n\n",hp_monstro);
  222.                     else {
  223.                         printf("O monstro morreu\n\n");
  224.                         exp_atual = exp_atual + EXPERIENCIA_TROLL;
  225.                         exp_total = exp_total + exp_atual;
  226.                         tabuleiro[i_atual+1][j_atual] = '.';
  227.                         contador_monstros--;
  228.                     }
  229.                     system("Pause");
  230.                 }while(hp > 0 && hp_monstro > 0);
  231.             }
  232.  
  233.             /* Encontro Ogro */
  234.             if(tabuleiro[i_atual+1][j_atual] == '%'){
  235.                 hp_monstro = HP_OGRO ;
  236.                 do{
  237.                     hp = hp - rand()%ATK_OGRO+1;
  238.                     if(hp>=0) printf("Ogro desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  239.                     else printf("Voce morreu\n\n");
  240.                     hp_monstro = hp_monstro - rand()%atk+1;
  241.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O ogro possui %d de vida restantes\n\n",hp_monstro);
  242.                     else {
  243.                         printf("O monstro morreu\n\n");
  244.                         exp_atual = exp_atual + EXPERIENCIA_OGRO;
  245.                         exp_total = exp_total + exp_atual;
  246.                         tabuleiro[i_atual+1][j_atual] = '.';
  247.                         contador_monstros--;
  248.                     }
  249.                     system("Pause");
  250.                 }while(hp > 0 && hp_monstro > 0);
  251.             }
  252.  
  253.             /* Encontro Professor */
  254.             if(tabuleiro[i_atual+1][j_atual] == '+'){
  255.                 hp_monstro = HP_PROF ;
  256.                 do{
  257.                     hp = hp - rand()%ATK_PROF+1;
  258.                     if(hp>=0) printf("Professor das notas baixas desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  259.                     else printf("Voce morreu\n\n");
  260.                     hp_monstro = hp_monstro - rand()%atk+1;
  261.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O professor possui %d de vida restantes\n\n",hp_monstro);
  262.                     else {
  263.                         printf("O professor morreu (e sua nota continua alta!)\n\n");
  264.                         exp_atual = exp_atual + EXPERIENCIA_PROF;
  265.                         exp_total = exp_total + exp_atual;
  266.                         tabuleiro[i_atual+1][j_atual] = '.';
  267.                         contador_monstros--;
  268.                     }
  269.                     system("Pause");
  270.                 }while(hp > 0 && hp_monstro > 0);
  271.             }
  272.  
  273.             if(tabuleiro[i_atual+1][j_atual] == '.'){
  274.                 aux = tabuleiro[i_atual][j_atual];
  275.                 tabuleiro[i_atual][j_atual] = tabuleiro[i_atual+1][j_atual];
  276.                 tabuleiro[i_atual+1][j_atual] = aux;
  277.                 i_atual++;
  278.                 if(i_atual<13) camera_x++;
  279.             }
  280.             break;
  281.  
  282.  
  283.         case SETA_DIREITA:
  284.             /* Encontro Troll */
  285.             if(tabuleiro[i_atual][j_atual+1] == '!'){
  286.                 hp_monstro = HP_TROLL ;
  287.                 do{
  288.                     hp = hp - rand()%ATK_TROLL+1;
  289.                     if(hp>=0) printf("Troll desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  290.                     else printf("Voce morreu\n\n");
  291.                     hp_monstro = hp_monstro - rand()%atk+1;
  292.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O troll possui %d de vida restantes\n\n",hp_monstro);
  293.                     else {
  294.                         printf("O monstro morreu\n\n");
  295.                         exp_atual = exp_atual + EXPERIENCIA_TROLL;
  296.                         exp_total = exp_total + exp_atual;
  297.                         tabuleiro[i_atual][j_atual+1] = '.';
  298.                         contador_monstros--;
  299.                     }
  300.                     system("Pause");
  301.                 }while(hp > 0 && hp_monstro > 0);
  302.             }
  303.  
  304.             /* Encontro Ogro */
  305.             if(tabuleiro[i_atual][j_atual+1] == '%'){
  306.                 hp_monstro = HP_OGRO ;
  307.                 do{
  308.                     hp = hp - rand()%ATK_OGRO+1;
  309.                     if(hp>=0) printf("Ogro desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  310.                     else printf("Voce morreu\n\n");
  311.                     hp_monstro = hp_monstro - rand()%atk+1;
  312.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O ogro possui %d de vida restantes\n\n",hp_monstro);
  313.                     else {
  314.                         printf("O monstro morreu\n\n");
  315.                         exp_atual = exp_atual + EXPERIENCIA_OGRO;
  316.                         exp_total = exp_total + exp_atual;
  317.                         tabuleiro[i_atual][j_atual+1] = '.';
  318.                         contador_monstros--;
  319.                     }
  320.                     system("Pause");
  321.                 }while(hp > 0 && hp_monstro > 0);
  322.             }
  323.  
  324.             /* Encontro Professor */
  325.             if(tabuleiro[i_atual][j_atual+1] == '+'){
  326.                 hp_monstro = HP_PROF ;
  327.                 do{
  328.                     hp = hp - rand()%ATK_PROF+1;
  329.                     if(hp>=0) printf("Professor das notas baixas desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  330.                     else printf("Voce morreu\n\n");
  331.                     hp_monstro = hp_monstro - rand()%atk+1;
  332.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O professor possui %d de vida restantes\n\n",hp_monstro);
  333.                     else {
  334.                         printf("O professor morreu (e sua nota continua alta!)\n\n");
  335.                         exp_atual = exp_atual + EXPERIENCIA_PROF;
  336.                         exp_total = exp_total + exp_atual;
  337.                         tabuleiro[i_atual][j_atual+1] = '.';
  338.                         contador_monstros--;
  339.                     }
  340.                     system("Pause");
  341.                 }while(hp > 0 && hp_monstro > 0);
  342.             }
  343.                
  344.             if(tabuleiro[i_atual][j_atual+1] == '.'){
  345.                 aux = tabuleiro[i_atual][j_atual];
  346.                 tabuleiro[i_atual][j_atual] = tabuleiro[i_atual][j_atual+1];
  347.                 tabuleiro[i_atual][j_atual+1] = aux;
  348.                 j_atual++;
  349.                 if(j_atual<33) camera_y++;
  350.             }
  351.             break;
  352.  
  353.  
  354.         case SETA_ESQUERDA:
  355.             /* Encontro Troll */
  356.             if(tabuleiro[i_atual][j_atual-1] == '!'){
  357.                 hp_monstro = HP_TROLL ;
  358.                 do{
  359.                     hp = hp - rand()%ATK_TROLL+1;
  360.                     if(hp>=0) printf("Troll desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  361.                     else printf("Voce morreu\n\n");
  362.                     hp_monstro = hp_monstro - rand()%atk+1;
  363.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O troll possui %d de vida restantes\n\n",hp_monstro);
  364.                     else {
  365.                         printf("O monstro morreu\n\n");
  366.                         exp_atual = exp_atual + EXPERIENCIA_TROLL;
  367.                         exp_total = exp_total + exp_atual;
  368.                         tabuleiro[i_atual][j_atual-1] = '.';
  369.                         contador_monstros--;
  370.                     }
  371.                     system("Pause");
  372.                 }while(hp > 0 && hp_monstro > 0);
  373.             }
  374.  
  375.             /* Encontro Ogro */
  376.             if(tabuleiro[i_atual][j_atual-1] == '%'){
  377.                 hp_monstro = HP_OGRO ;
  378.                 do{
  379.                     hp = hp - rand()%ATK_OGRO+1;
  380.                     if(hp>=0) printf("Ogro desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  381.                     else printf("Voce morreu\n\n");
  382.                     hp_monstro = hp_monstro - rand()%atk+1;
  383.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O ogro possui %d de vida restantes\n\n",hp_monstro);
  384.                     else {
  385.                         printf("O monstro morreu\n\n");
  386.                         exp_atual = exp_atual + EXPERIENCIA_OGRO;
  387.                         exp_total = exp_total + exp_atual;
  388.                         tabuleiro[i_atual][j_atual-1] = '.';
  389.                         contador_monstros--;
  390.                     }
  391.                     system("Pause");
  392.                 }while(hp > 0 && hp_monstro > 0);
  393.             }
  394.  
  395.             /* Encontro Professor */
  396.             if(tabuleiro[i_atual][j_atual-1] == '+'){
  397.                 hp_monstro = HP_PROF ;
  398.                 do{
  399.                     hp = hp - rand()%ATK_PROF+1;
  400.                     if(hp>=0) printf("Professor das notas baixas desferiu um ataque. Voce possui %d de vida restantes\n",hp);
  401.                     else printf("Voce morreu\n\n");
  402.                     hp_monstro = hp_monstro - rand()%atk+1;
  403.                     if(hp_monstro>=0) printf("Voce desferiu um ataque. O professor possui %d de vida restantes\n\n",hp_monstro);
  404.                     else {
  405.                         printf("O professor morreu (e sua nota continua alta!)\n\n");
  406.                         exp_atual = exp_atual + EXPERIENCIA_PROF;
  407.                         exp_total = exp_total + exp_atual;
  408.                         tabuleiro[i_atual][j_atual-1] = '.';
  409.                         contador_monstros--;
  410.                     }
  411.                     system("Pause");
  412.                 }while(hp > 0 && hp_monstro > 0);
  413.             }
  414.  
  415.             if(tabuleiro[i_atual][j_atual-1] == '.'){
  416.                 aux = tabuleiro[i_atual][j_atual];
  417.                 tabuleiro[i_atual][j_atual] = tabuleiro[i_atual][j_atual-1];
  418.                 tabuleiro[i_atual][j_atual-1] = aux;
  419.                 j_atual--;
  420.                 if(j_atual<32) camera_y--;
  421.             }
  422.             break;
  423.         }
  424.  
  425.         /* Algoritmo do "level-up" */
  426.         if(exp_atual / EXPERIENCIA_LEVEL_UP == 1){
  427.             printf("Parabens, voce \"upou\" de level!\n\n");
  428.             level_atual++;
  429.             hp_total = hp_total+HP_POR_LEVEL;
  430.             hp = hp_total;
  431.             exp_atual = exp_atual%EXPERIENCIA_LEVEL_UP;
  432.             atk = atk+ATK_POR_LEVEL;
  433.             getch();
  434.         }
  435.  
  436.  
  437.     }while(ch!= ESC && contador_monstros > 0 && hp > 0);
  438.  
  439.     getch();
  440. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement