Advertisement
Draegon

GAME

Sep 19th, 2014
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.47 KB | None | 0 0
  1. /*         _
  2.   ___     (_) ___   __ _  ___
  3.  / _ \    | |/ _ \ / _` |/ _ \
  4. | (_) |   | | (_) | (_| | (_) |
  5.  \___/   _/ |\___/ \__, |\___/
  6.         |__/       |___/
  7.      Versão 0.7 - Por Samuel Pordeus
  8.      Adicionado à equipe de desenvolvimento na versao 0.5: Elcius Ferreira
  9.      Bugs conhecidos:
  10.      Espacos no nome do personagem bugam o jogo loucamente *corrigido com gets*
  11.      Inimigo nível 0 na dungeon com dificuldade 1 *CORRIGIDO*
  12.  
  13.      Features dicionadas nesta versao:
  14.      Melhora significante de eficiencia no codigo
  15.  
  16.      Coisas a se adicionar:
  17.      Sistema de classes *ADICIONADO*
  18.      Rebalanceamento das dungeons *DONE*
  19.      Nomes pras dungeons
  20.      Loja de armas *NO PROCESSO*
  21.  
  22.      Agradecimentos especiais:
  23.      George Nunes, Marcello Marques, Gabriel Gonçalves, Lucas Lacerda, Klebson Lima, Elcius Ferreira.
  24.  */
  25.  
  26. #include <stdio.h>
  27. #include <math.h>
  28. #include <string.h>
  29. #include <stdlib.h>
  30. #include <time.h>
  31. #define MAX 5
  32. #define SLEEP 25000
  33. int main (void){
  34.     //PRIMEIRO SETOR: Declaracao de variaveis LINHA 9-56
  35. int menu, input, c, d, i , x, dificuldade, loop1; //Variaveis sistema
  36. int gold, g, j, h, hp, forinimigo; //Variaveis jogo
  37.  
  38. srand (time(NULL)); //Seed
  39.  
  40.     //Estruturas
  41.     struct arma
  42.     {
  43.     int dano,danoitem1,danoitem2,danoitem3;
  44.     int velocidade;
  45.     char nome[20]; //A SER IMPLEMENTADO
  46.     };
  47.  
  48.     struct arma a[15]; //Tipos de arma disponiveis atualmente
  49.     a[0].dano = 1;
  50.     a[1].dano = 2;
  51.     a[2].dano = 3;
  52.     a[3].dano = 4;
  53.     a[4].dano = 5;
  54.     a[5].dano = 6;
  55.     a[6].dano = 10;
  56.     a[7].dano = 25;
  57.     a[8].dano = 47;
  58.     a[9].dano = 100;
  59.     a[10].danoitem1 = 15;
  60.     a[11].danoitem2 = 50;
  61.     a[12].danoitem3 = 120;
  62.  
  63. typedef struct personagem {
  64.   int numero;
  65.   char nome[100];
  66.   char classe[50];
  67.   int agilidade;
  68.   int forca;
  69.   int vida;
  70.  
  71. };
  72.     //SEGUNDO SETOR: INICIO DO JOGO - LINHA 58-149
  73.     printf("Bem-vindo ao jogo! - Versao 0.7 Alpha\n");
  74.     printf("\nDigite o nome do seu personagem: ");
  75.  
  76.     struct personagem p[10]; //Nome do personagem
  77.     //scanf("%s",p[1].nome);
  78.     gets(p[1].nome);
  79.     printf("\nCriando personagem.");
  80.     //scanf("%i",p[2].classe);
  81.     escolhaclasse:
  82.         printf("\nEscolha a classe\n > Mago = 1\n > Cavaleiro = 2\n > Ladino = 3\n > Barbaro = 4\n");
  83.     int classez;
  84.         scanf("%i", &classez);
  85.     switch (classez) {
  86.         case 1:
  87.             p[2].classe[1] = 1;
  88.             printf("Mago selecionado");
  89.             break;
  90.         case 2:
  91.             p[2].classe[2] = 2;
  92.             printf("Cavaleiro selecionado");
  93.             break;
  94.         case 3:
  95.             p[2].classe[3] = 3;
  96.             printf("Ladino selecionado");
  97.             break;
  98.         case 4:
  99.             p[2].classe[4] = 4;
  100.             printf("Barbaro selecionado");
  101.             break;
  102.         if (classez < 1 || classez >4){
  103.     printf("\nErro. Classe invalida (minimo 1 - maximo 4)\n");
  104.     goto escolhaclasse;
  105.     }
  106.     }
  107.  
  108.     struct ambos //Estrutura que integra as estruturas de personagem e arma
  109.     {
  110.         struct personagem pers[MAX];
  111.  
  112.         struct arma wpn;
  113.     };
  114.  
  115.     struct ambos principal; //Gerando o personagem
  116.     //Nao me perguntei pq o [2] ao lado de pers, acho que nao precisa.
  117.     //Mas teria que fazer muita coisa pra mudar a essa altura.
  118.  rolamento:
  119.      principal.pers[2].forca = 0;
  120.      principal.pers[2].agilidade = 0;
  121.      principal.pers[2].vida = 0;
  122.      switch (classez){
  123.          case 1: //Mago
  124.         principal.pers[2].forca =  21 + rand()%10;
  125.         break;
  126.          case 2: //Cavaleiro
  127.         principal.pers[2].forca =  10 + rand()%10;
  128.         break;
  129.          case 3: //Ladino
  130.         principal.pers[2].forca =  5 + rand()%10;
  131.         break;
  132.          case 4: // Barbaro
  133.         principal.pers[2].forca =  13 + rand()%10;
  134.         break;
  135.      }
  136.      switch (classez){
  137.          case 1: //Mago
  138.         principal.pers[2].agilidade =  2 + rand()%10;
  139.         break;
  140.          case 2: //Cavaleiro
  141.         principal.pers[2].agilidade =  10 + rand()%10;
  142.         break;
  143.          case 3: //Ladino
  144.         principal.pers[2].agilidade =  15 + rand()%10;
  145.         break;
  146.          case 4: // Barbaro
  147.         principal.pers[2].agilidade =  8 + rand()%10;
  148.         break;
  149.      }
  150.      switch (classez){
  151.          case 1: //Mago
  152.         principal.pers[2].vida = 30 + rand()%50;
  153.         break;
  154.          case 2: //Cavaleiro
  155.         principal.pers[2].vida =  100 + rand()%50;
  156.         break;
  157.          case 3: //Ladino
  158.         principal.pers[2].vida =  50 + rand()%50;
  159.         break;
  160.          case 4: // Barbaro
  161.         principal.pers[2].vida =  70 + rand()%50;
  162.         break;
  163.      }
  164.  
  165.         hp = principal.pers[2].vida;
  166.         x = rand()%5;
  167.         principal.wpn.dano = a[x].dano;
  168.  
  169.     //Stats fornecidos ao personagem abaixo
  170.     i = 1; // NIVEL DO PERSONAGEM
  171.  
  172.     printf("\nForca: %i\n", principal.pers[2].forca);
  173.  
  174.         for(c=1;c<=SLEEP;c++)
  175.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  176.  
  177.     printf("\nAgilidade: %i\n", principal.pers[2].agilidade);
  178.  
  179.         for(c=1;c<=SLEEP;c++)
  180.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  181.  
  182.     printf("\nVida: %i\n", principal.pers[2].vida);
  183.  
  184.         for(c=1;c<=SLEEP;c++)
  185.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  186.  
  187.     printf("\nDano da arma: %i\n", principal.wpn.dano);
  188.  
  189.         for(c=1;c<=SLEEP;c++)
  190.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  191.  
  192.     printf("\nVoce deseja dar reroll nos stats do personagem?\n");
  193.         printf("\nSim, quero resetar os stats do personagem = 0 \nQuero continuar com o personagem = 1\n");
  194.       int reroll;
  195.     scanf( "%d", &reroll );
  196.     switch (reroll) { //REROLL DO PERSONAGEM
  197.     case 1:
  198.         printf("\nComecando o jogo.");
  199.         for(c=1;c<=SLEEP;c++)
  200.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  201.                 printf(".");
  202.         for(c=1;c<=SLEEP;c++)
  203.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  204.                 printf(".\n");
  205.         for(c=1;c<=SLEEP;c++)
  206.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  207.         break;
  208.     case 0:
  209.         printf("\nResetando.");
  210.         for(c=1;c<=SLEEP;c++)
  211.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  212.                 printf(".");
  213.         for(c=1;c<=SLEEP;c++)
  214.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  215.                 printf(".\n");
  216.         for(c=1;c<=SLEEP;c++)
  217.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  218.         goto rolamento;
  219.  
  220.     }
  221.     //TERCEIRO SETOR: JOGO LINHA 218-FINAL
  222. gold = 0;
  223.  
  224. //DECLARACAO DE FUNCOES
  225. void dungeon(){
  226.     erro:
  227.     printf( "\nEntrar na dungeon? 1 = Sim. 0 = Nao\n" );
  228.     int simnao;
  229.     scanf( "%d", &simnao );
  230.     switch (simnao) {
  231. case 1:
  232.     printf("\nDigite a dificuldade desejada, Limite de 100: \n");
  233.     scanf("%i",&dificuldade);
  234.     if (dificuldade < 1 || dificuldade >100){
  235.     printf("\nErro. dificuldade invalida (minimo 1 - maximo 100)\n");
  236.     goto erro;
  237.     }
  238.     else{
  239.         forinimigo = (20*dificuldade)/2 + (rand()%30 + dificuldade*10);
  240.         if (hp < 0){
  241.         printf ("HP insuficiente, se cure antes de voltar pra ca\n");
  242.             break;
  243.         }
  244.         else{
  245.             printf("\nProcurando adversario adequado\n");
  246.             for(c=1;c<=SLEEP;c++)
  247.             for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  248.             printf("\nAdversario de nivel: %i encontrado! Preparando para a batalha\n", ((forinimigo + 4) / 10));
  249.             for(c=1;c<=SLEEP;c++)
  250.             for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  251.             if (principal.pers[2].forca + principal.pers[2].agilidade + principal.wpn.dano + ((rand()%8) - 4) >=  forinimigo){
  252.                 gold = gold + forinimigo/3;
  253.                 printf ("\nVoce ganhou!! %i de gold encontrado no loot. \n",forinimigo/3);
  254.             }
  255.             else{
  256.                 hp = hp - forinimigo;
  257.                 if (hp<0){
  258.                     hp = 0;
  259.                 }
  260.                 printf("\nFracasso, voce perdeu.  Vida atual: %i \n", forinimigo, hp);
  261.             }
  262.         break;
  263.     }
  264.     }
  265. case 0:
  266.     printf ("\nVoltando ao menu principal...\n");
  267.     break;
  268. }
  269. }
  270. void Shop ()
  271. {
  272.   int item;
  273.    switch (classez) {
  274.  
  275.      case 1: //ITENS PARA MAGOS
  276.         printf ("\n Itens para um MAGO: \n");
  277.         printf ("\n > Staff lvl 5 \n"
  278.                 "     >> Custo: 100 Gold \n"
  279.                 "     >> Para comprar digite: 1 \n");
  280.         printf ("\n > Staff lvl 10 \n"
  281.                 "     >> Custo: 200 Gold \n"
  282.                 "     >> Para comprar digite: 2 \n");
  283.         printf ("\n > Staff lvl 15 \n"
  284.                 "     >> Custo: 350 Gold \n"
  285.                 "     >> Para comprar digite: 3 \n");
  286.         printf ("\n > Selection:    \n");
  287.         scanf ("%d", &item);
  288.  
  289.         switch (item) {
  290.  
  291.           case 1:
  292.               if (gold < 100) {
  293.                 printf ("\n Gold insuficiente ! \n");}
  294.               else {
  295.                principal.wpn.dano = a[10].danoitem1;
  296.                gold -= 100;
  297.                printf ("\n Staff lvl 5 comprado com sucesso...\n");}
  298.               break;
  299.           case 2:
  300.               if (gold < 200) {
  301.                 printf ("\n Gold insuficiente !"); }
  302.               else {
  303.                gold -= 200;
  304.                principal.wpn.dano = a[11].danoitem2;
  305.                printf ("\n Staff lvl 10 comprado com sucesso...\n"); }
  306.               break;
  307.           case 3:
  308.               if ( gold < 350) {
  309.                 printf ("\n Gold insuficiente !"); }
  310.               else {
  311.               gold -= 350;
  312.               principal.wpn.dano = a[12].danoitem3;
  313.                printf ("\n Staff lvl 15 comprado com sucesso...\n"); }
  314.               break;
  315.               }
  316.         break;
  317.  
  318.     case 2: //ITENS PARA CAVALEIROS
  319.         printf ("\n Itens para um CAVALEIRO: \n");
  320.         printf ("\n > Sword lvl 5 \n"
  321.                 "    >> Custo: 100 Gold \n"
  322.                 "    >> Para comprar digite: 1\n");
  323.         printf ("\n > Sword lvl 10 \n"
  324.                 "    >> Custo: 200 Gold \n"
  325.                 "    >> Para comprar digite: 2 \n");
  326.         printf ("\n > Sword lvl 15 \n"
  327.                 "    >> Custo: 350 Gold \n"
  328.                 "    >> Para comprar digite: 3 \n");
  329.         scanf ("%d", &item);
  330.  
  331.         switch (item) {
  332.  
  333.           case 1:
  334.               if (gold < 100) {
  335.                 printf ("\n Gold insuficiente ! \n"); }
  336.               else {
  337.               gold -= 100;
  338.               principal.wpn.dano = a[10].danoitem1;
  339.               printf ("\n Sword lvl 5 comprada com sucesso...\n"); }
  340.               break;
  341.           case 2:
  342.               if (gold < 200) {
  343.                 printf ("\n Gold insuficiente ! \n");}
  344.               else {
  345.               gold -= 200;
  346.               principal.wpn.dano = a[11].danoitem2;
  347.               printf ("\n Sword lvl 10 comprada com sucesso...\n"); }
  348.               break;
  349.           case 3:
  350.               if (gold < 350) {
  351.                 printf ("\n Gold insuficiente ! \n");}
  352.               else {
  353.               gold -= 350;
  354.               principal.wpn.dano = a[12].danoitem3;
  355.               printf ("\n Sword lvl 15 comprada com sucesso...\n"); }
  356.               break;
  357.               }
  358.       break;
  359.  
  360.     case 3: //ITENS PARA LADINOS
  361.         printf ("\n Itens para um LADINO: \n");
  362.         printf ("\n > Dagger lvl 5 \n"
  363.                 "    >> Custo: 100 Gold \n"
  364.                 "    >> Para comprar digite: 1 \n");
  365.         printf ("\n > Dagger lvl 10 \n"
  366.                 "    >> Custo: 200 Gold \n"
  367.                 "    >> Para comprar digite: 2 \n");
  368.         printf ("\n > Dagger lvl 15 \n"
  369.                 "    >> Custo: 350 Gold \n"
  370.                 "    >> Para comprar digite: 3 \n");
  371.         scanf ("%d", &item);
  372.  
  373.         switch (item) {
  374.  
  375.           case 1:
  376.               if (gold < 100) {
  377.                 printf ("\n Gold insuficiente ! \n");}
  378.               else {
  379.               gold -= 100;
  380.               principal.wpn.dano = a[10].danoitem1;
  381.               printf ("\n Dagger lvl 5 comprada com sucesso...\n"); }
  382.               break;
  383.           case 2:
  384.               if (gold < 100) {
  385.                 printf ("\n Gold insuficiente ! \n");}
  386.               else {
  387.               gold -= 200;
  388.               principal.wpn.dano = a[11].danoitem2;
  389.               printf ("\n Dagger lvl 10 comprada com sucesso...\n"); }
  390.               break;
  391.           case 3:
  392.               if (gold < 350) {
  393.                 printf ("\n Gold insuficiente ! \n");}
  394.               else {
  395.               gold -= 350;
  396.               principal.wpn.dano = a[12].danoitem3;
  397.               printf ("\n Dagger lvl 15 comprada com sucesso...\n"); }
  398.               break;
  399.               }
  400.       break;
  401.  
  402.  
  403.     case 4: //ITENS PARA BARBAROS
  404.         printf ("\n Itens para um BARBARO: \n");
  405.         printf ("\n > Axe lvl 5 \n"
  406.                 "    >> Custo: 100 Gold \n"
  407.                 "    >> Para comprar digite: 1 \n");
  408.         printf ("\n > Axe lvl 10 \n"
  409.                 "    >> Custo: 200 Gold \n"
  410.                 "    >> Para comprar digite: 2 \n");
  411.         printf ("\n > Axe lvl 15 \n"
  412.                 "    >> Custo: 350 Gold \n"
  413.                 "    >> Para comprar digite: 3 \n");
  414.         scanf ("%d", &item);
  415.  
  416.         switch (item) {
  417.  
  418.           case 1:
  419.               if (gold < 100) {
  420.                 printf ("\n Gold insuficiente ! \n");}
  421.               else {
  422.               gold -= 100;
  423.               principal.wpn.dano = a[10].danoitem1;
  424.               printf ("\n Axe lvl 15 comprado com sucesso...\n"); }
  425.               break;
  426.           case 2:
  427.               if (gold < 100) {
  428.                 printf ("\n Gold insuficiente ! \n");}
  429.               else {
  430.               gold -= 200;
  431.               principal.wpn.dano = a[11].danoitem2;
  432.               printf ("\n Axe lvl 15 comprado com sucesso...\n"); }
  433.               break;
  434.           case 3:
  435.               if (gold < 100) {
  436.                 printf ("\n Gold insuficiente ! \n");}
  437.               else {
  438.               gold -= 350;
  439.               principal.wpn.dano = a[12].danoitem3;
  440.               printf ("\n Axe lvl 15 comprado com sucesso...\n"); }
  441.               break;
  442.               }
  443.       break;
  444.    }
  445. }
  446.  
  447. void cura()
  448. {
  449.     printf("\nCurando, aguarde." );
  450.         for(c=1;c<=40000;c++)
  451.         for(d=1;d<=40000;d++) {}
  452.     printf (".");
  453.         for(c=1;c<=37500;c++)
  454.         for(d=1;d<=37500;d++) {}
  455.         printf (".\n");
  456.         for(c=1;c<=35000;c++)
  457.         for(d=1;d<=35000;d++) {}
  458.     printf( "\n Personagem curado! \n" );
  459.     hp = principal.pers[2].vida;
  460.  
  461. }
  462. void levelup()
  463. {
  464.     printf( "\nPara upar custa %i moedas. Sim = 1. Nao = 0.\n", (50 + (i*10)));
  465.     int simnao;
  466.     scanf( "%d", &simnao );
  467.     switch (simnao) {
  468.     case 1:
  469.         if (gold < 50+(i*10)){
  470.             printf("\n Gold insuficiente \n");
  471.         }
  472.         else{
  473.         switch (classez){
  474.         case 1:
  475.             g = 7 + rand()%4;
  476.             break;
  477.         case 2:
  478.             g = 6 + rand()%3;
  479.             break;
  480.         case 3:
  481.             g = 5 + rand()%3;
  482.             break;
  483.         case 4:
  484.             g = 5+ rand()%5;
  485.             break;
  486.         }
  487.         switch (classez){
  488.         case 1:
  489.             j = 3 + rand()%3;
  490.             break;
  491.         case 2:
  492.             j = 6 + rand()%3;
  493.             break;
  494.         case 3:
  495.             j = 7 + rand()%3;
  496.             break;
  497.         case 4:
  498.             j = 3+ rand()%5;
  499.             break;
  500.         }
  501.         if (classez == 1){
  502.             hp = 30 + rand()%20; //HP DO CAVALEIRO É MAIOR Q O DOS OUTROS
  503.             break;
  504.         }
  505.         else{
  506.             h = 15 + rand()%10;
  507.             break;
  508.         }
  509.         i = i + 1;
  510.         printf("\nVoce ganhou %i de forca!\n", g);
  511.             for(c=1;c<=SLEEP;c++)
  512.             for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  513.         printf("\nVoce ganhou %i de Agilidade!\n", j);
  514.             for(c=1;c<=SLEEP;c++)
  515.             for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  516.         printf("\nVoce ganhou %i de Vida!\n", h);
  517.             for(c=1;c<=SLEEP;c++)
  518.             for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  519.         principal.pers[2].forca = principal.pers[2].forca + g;
  520.         principal.pers[2].agilidade = principal.pers[2].agilidade + j;
  521.         principal.pers[2].vida = principal.pers[2].vida + h;
  522.         gold = gold - (50 +i*10);
  523.     case 0:
  524.         printf("\nVoltando ao menu principal\n");
  525.         for(c=1;c<=SLEEP;c++)
  526.         for(d=1;d<=SLEEP;d++) {}//ESPERA CASUAL RSRS
  527.         break;
  528.     }
  529. }
  530. }
  531.  
  532. for (menu = 0 ;  menu <= 30000 ; menu++){ //LOOP PARA INTERACAO DE MENU SEM USAR GOTO
  533.  
  534.     //INTERACAO POR MENU
  535.     printf( "\nMenu Principal\n" );
  536.     printf( "1. Dungeon\n" );
  537.     printf( "2. Cura\n" );
  538.     printf( "3. Upar\n" );
  539.     printf( "4. Status\n" );
  540.     printf( "5. Shop\n" );
  541.     printf( "Selection: " );
  542.     scanf( "%d", &input );
  543.     switch ( input ) {
  544.         case 1:
  545.             dungeon(); //DUNGEON GRIND
  546.             break;
  547.         case 2:
  548.             cura(); //CURA
  549.             break;
  550.         case 3:
  551.             levelup(); //LEVELUP
  552.             break;
  553.         case 4: //STATS
  554.             printf(":::Seu personagem\n:::Forca: %i | Agilidade: %i | Dano da arma: %i |    \n:::Vida total: %i | Vida no momento: %i | Gold: %i | Nivel: %i |\n| Nome: %s",
  555.                     principal.pers[2].forca, principal.pers[2].agilidade, principal.wpn.dano,
  556.                     principal.pers[2].vida, hp, gold, i,p[1].nome);
  557.             break;
  558.         case 5:
  559.             Shop(); //SHOP
  560.             break;
  561.         default:
  562.             printf( "\nTente novamente!\n" );
  563.             break;
  564.     }
  565.     getchar();
  566. }
  567. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement