Advertisement
Guest User

Untitled

a guest
May 27th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.37 KB | None | 0 0
  1. /*
  2.  * JOGO DA VELHA
  3.  *
  4.  * by Paulo Lamb
  5.  *
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <time.h>
  10. #include <windows.h>
  11. #include <conio.h>
  12.  
  13. /*prototipo de funcoes*/
  14. void gotoxy(int x, int y);
  15. void montacenario();
  16. void usuariojoga();
  17. void imprime (int tecla);
  18. void cpujoga();
  19. void verificavitoria();
  20. void cpuverificaseganhaouperde(int n);
  21.  
  22. /*variaveis globais*/
  23. int lance; // conta as jogadas
  24. int gameover;
  25. int tabuleiro[10];
  26. int jogada[10];
  27. int jogadacpu;
  28.  
  29. int main(){
  30. int quemjoga=0;  //0 = cpujoga , 1 = usuario joga
  31. char tecla;
  32. srand ( time(NULL) );
  33. do{
  34.    montacenario();
  35.    lance=0;
  36.    gameover=0;
  37.    for (int i=1; i<10; i++)
  38.       tabuleiro[i]=0;
  39.    do{
  40.      lance++;
  41.      quemjoga=1-quemjoga; //inverte jogador
  42.      (quemjoga==1)?usuariojoga():cpujoga();
  43.      verificavitoria();
  44.      }while(lance<9 && gameover==0);
  45.    gotoxy(1,20);
  46.    if (gameover==0)
  47.       printf("Empatou  ");
  48.    gotoxy(1,21);
  49.    printf("Deseja jogar novamente (s/n)? ");
  50.    do{
  51.      tecla=getch();
  52.    }while(tecla!='S'&&tecla!='N'&&tecla!='s'&&tecla!='n');
  53. }while(tecla=='S'||tecla=='s');
  54. return 0;
  55. }
  56.  
  57. void montacenario(){
  58. int i;
  59. system("cls");
  60. gotoxy(34,3);
  61. printf("Jogo da velha");
  62. for (i=6; i<17; i++){
  63.    gotoxy(35,i);
  64.    printf("%c%c       %c%c",219,219,219,219);
  65.    }
  66. gotoxy(28,9);
  67. for (i=0; i<25; i++)
  68.    printf("%c",219);
  69. gotoxy(28,13);
  70. for (i=0; i<25; i++)
  71.    printf("%c",219);
  72. }
  73.  
  74. void usuariojoga(){
  75. int tecla;
  76. gotoxy(1,20);
  77. printf("Voce joga");
  78. do{
  79.   tecla=getch()-48;
  80.   }while(tecla<1 || tecla>9 || tabuleiro[tecla]!=0);
  81. imprime(tecla);
  82. tabuleiro[tecla]=1;
  83. jogada[lance]=tecla;
  84. }
  85.  
  86. void imprime (int tecla){
  87. int x,y;
  88. char simbolo;
  89. simbolo=(lance%2!=0)?'x':'o';
  90. switch(tecla){
  91.    case 1:
  92.     x=31;y=15;
  93.     break;
  94.    case 2:
  95.     x=40;y=15;
  96.     break;
  97.    case 3:
  98.     x=49;y=15;
  99.     break;
  100.    case 4:
  101.     x=31;y=11;
  102.     break;
  103.    case 5:
  104.     x=40;y=11;
  105.     break;
  106.    case 6:
  107.     x=49;y=11;
  108.     break;
  109.    case 7:
  110.     x=31;y=7;
  111.     break;
  112.    case 8:
  113.     x=40;y=7;
  114.     break;
  115.    case 9:
  116.     x=49;y=7;
  117.     break;
  118.    }
  119.    gotoxy(x,y);
  120.    printf("%c",simbolo);
  121. }
  122.  
  123. void cpujoga(){
  124. gotoxy(1,20);
  125. printf("Eu jogo  ");
  126. _sleep(500);
  127. switch(lance){
  128.    case 1: //joga ou no meio ou em uma quina
  129.       jogadacpu=1+rand()%5*2;
  130.       break;
  131.  
  132.    case 2: //joga no meio caso esteja livre, senao joga numa quina
  133.       if (tabuleiro[5]==0)
  134.      jogadacpu=5;
  135.       else
  136.      do{
  137.        jogadacpu=1+rand()%5*2;
  138.      }while(tabuleiro[jogadacpu]!=0);
  139.       break;
  140.  
  141.    case 3: //tem 5 casos dentro deste
  142.        //computador inicia em quina e humano responde no centro
  143.        if (jogada[1]%2==1 && jogada[2]==5)
  144.        jogadacpu=10-jogada[1];  //CPU joga na quina oposta
  145.        //computador inicia no centro e humano responde em quina
  146.        else if (jogada[1]==5 && jogada[2]%2==1)
  147.        jogadacpu=10-jogada[2];   //CPU joga na quina oposta
  148.        //computador inicia no centro e humano responde em nao-quina
  149.        else if (jogada[1]==5 && jogada[2]%2==0)
  150.        do{
  151.           jogadacpu=1+rand()%5*2;
  152.        }while(jogadacpu==5);    //CPU joga numa quina
  153.        //computador inicia em quina e humano responde em outra quina
  154.        else if (jogada[1]%2==1 && jogada[2]%2==1)
  155.        do{   //CPU joga em outra quina
  156.           jogadacpu=1+rand()%5*2;
  157.        }while(jogadacpu==5 || tabuleiro[jogadacpu]!=0);
  158.        //caso restante: quina x casa par  -  jogar sempre no centro
  159.        else
  160.        jogadacpu=5;
  161.       break;
  162.  
  163.    case 4:
  164.       if (tabuleiro[2]==1 && tabuleiro[4]==1) jogadacpu=1;
  165.       else if (tabuleiro[2]==1 && tabuleiro[6]==1) jogadacpu=3;
  166.       else if (tabuleiro[4]==1 && tabuleiro[8]==1) jogadacpu=7;
  167.       else if (tabuleiro[6]==1 && tabuleiro[8]==1) jogadacpu=9;
  168.       else if (tabuleiro[1]==1 && tabuleiro[6]==1) jogadacpu=3;
  169.       else if (tabuleiro[1]==1 && tabuleiro[8]==1) jogadacpu=7;
  170.       else if (tabuleiro[2]==1 && tabuleiro[7]==1) jogadacpu=1;
  171.       else if (tabuleiro[2]==1 && tabuleiro[9]==1) jogadacpu=3;
  172.       else if (tabuleiro[3]==1 && tabuleiro[4]==1) jogadacpu=1;
  173.       else if (tabuleiro[3]==1 && tabuleiro[8]==1) jogadacpu=9;
  174.       else if (tabuleiro[4]==1 && tabuleiro[9]==1) jogadacpu=7;
  175.       else if (tabuleiro[6]==1 && tabuleiro[7]==1) jogadacpu=9;
  176.       else if (tabuleiro[1]==1 && tabuleiro[9]==1 ||
  177.            tabuleiro[3]==1 && tabuleiro[7]==1)
  178.           jogadacpu=2+rand()%4*2;
  179.       else
  180.       do{
  181.         jogadacpu=1+rand()%9;
  182.       }while(tabuleiro[jogadacpu]!=0);
  183.       cpuverificaseganhaouperde(1);
  184.       break;
  185.  
  186.    default:
  187.       do{
  188.     jogadacpu=1+rand()%9;
  189.       }while(tabuleiro[jogadacpu]!=0);
  190.       cpuverificaseganhaouperde(1);
  191.       cpuverificaseganhaouperde(2);
  192.       break;
  193. }
  194. imprime(jogadacpu);
  195. tabuleiro[jogadacpu]=2;
  196. jogada[lance]=jogadacpu;
  197. _sleep(500);
  198. }
  199.  
  200. void verificavitoria(){
  201. if ( (tabuleiro[1]==1 && tabuleiro[2]==1 && tabuleiro[3]==1)||
  202.      (tabuleiro[4]==1 && tabuleiro[5]==1 && tabuleiro[6]==1)||
  203.      (tabuleiro[7]==1 && tabuleiro[8]==1 && tabuleiro[9]==1)||
  204.      (tabuleiro[1]==1 && tabuleiro[4]==1 && tabuleiro[7]==1)||
  205.      (tabuleiro[2]==1 && tabuleiro[5]==1 && tabuleiro[8]==1)||
  206.      (tabuleiro[3]==1 && tabuleiro[6]==1 && tabuleiro[9]==1)||
  207.      (tabuleiro[1]==1 && tabuleiro[5]==1 && tabuleiro[9]==1)||
  208.      (tabuleiro[3]==1 && tabuleiro[5]==1 && tabuleiro[7]==1) ){
  209.    gotoxy(1,20);
  210.    printf("Voce ganhou");
  211.    gameover=1;
  212.    }
  213. if ( (tabuleiro[1]==2&&tabuleiro[2]==2&&tabuleiro[3]==2)||
  214.      (tabuleiro[4]==2&&tabuleiro[5]==2&&tabuleiro[6]==2)||
  215.      (tabuleiro[7]==2&&tabuleiro[8]==2&&tabuleiro[9]==2)||
  216.      (tabuleiro[1]==2&&tabuleiro[4]==2&&tabuleiro[7]==2)||
  217.      (tabuleiro[2]==2&&tabuleiro[5]==2&&tabuleiro[8]==2)||
  218.      (tabuleiro[3]==2&&tabuleiro[6]==2&&tabuleiro[9]==2)||
  219.      (tabuleiro[1]==2&&tabuleiro[5]==2&&tabuleiro[9]==2)||
  220.      (tabuleiro[3]==2&&tabuleiro[5]==2&&tabuleiro[7]==2) ){
  221.    gotoxy(1,20);
  222.    printf("Eu ganhei");
  223.    gameover=1;
  224.    }
  225.  
  226. }
  227.  
  228. void cpuverificaseganhaouperde(int i){
  229.  
  230.     if (tabuleiro[1]==0 && (tabuleiro[2]==i && tabuleiro[3]==i ||
  231.                 tabuleiro[5]==i && tabuleiro[9]==i ||
  232.                 tabuleiro[4]==i && tabuleiro[7]==i))
  233.     jogadacpu=1;
  234.    
  235.     if (tabuleiro[3]==0 && (tabuleiro[1]==i && tabuleiro[2]==i ||
  236.                 tabuleiro[5]==i && tabuleiro[7]==i ||
  237.                 tabuleiro[6]==i && tabuleiro[9]==i))
  238.     jogadacpu=3;
  239.    
  240.     if (tabuleiro[7]==0 && (tabuleiro[1]==i && tabuleiro[4]==i ||
  241.                 tabuleiro[3]==i && tabuleiro[5]==i ||
  242.                 tabuleiro[8]==i && tabuleiro[9]==i))
  243.     jogadacpu=7;
  244.    
  245.     if (tabuleiro[9]==0 && (tabuleiro[1]==i && tabuleiro[5]==i ||
  246.                 tabuleiro[3]==i && tabuleiro[6]==i ||
  247.                 tabuleiro[7]==i && tabuleiro[8]==i))
  248.     jogadacpu=9;
  249.    
  250.     if (tabuleiro[2]==0 && (tabuleiro[1]==i && tabuleiro[3]==i ||
  251.                 tabuleiro[5]==i && tabuleiro[8]==i))
  252.     jogadacpu=2;
  253.    
  254.     if (tabuleiro[4]==0 && (tabuleiro[1]==i && tabuleiro[7]==i ||
  255.                 tabuleiro[5]==i && tabuleiro[6]==i))
  256.     jogadacpu=4;
  257.    
  258.     if (tabuleiro[6]==0 && (tabuleiro[3]==i && tabuleiro[9]==i ||
  259.                 tabuleiro[4]==i && tabuleiro[5]==i))
  260.     jogadacpu=6;
  261.    
  262.     if (tabuleiro[8]==0 && (tabuleiro[2]==i && tabuleiro[5]==i ||
  263.                 tabuleiro[7]==i && tabuleiro[9]==i))
  264.     jogadacpu=8;
  265.    
  266.     if (tabuleiro[5]==0 && (tabuleiro[2]==i && tabuleiro[8]==i ||
  267.                 tabuleiro[4]==i && tabuleiro[6]==i ||
  268.                 tabuleiro[1]==i && tabuleiro[9]==i ||
  269.                 tabuleiro[3]==i && tabuleiro[7]==i))
  270.     jogadacpu=5;
  271.  
  272. }
  273. void gotoxy(int x, int y) {
  274.   COORD c;
  275.   c.X = x - 1;
  276.   c.Y = y - 1;
  277.   SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement