Advertisement
Drowze

Projeto: roguelike v1.0

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