Ir ao conteúdo
  • Cadastre-se

Switch com matrizes/vetor?


Rager

Posts recomendados

Olá,

após muitas pesquisas cheguei nesse programa que é um jogo da velha. Minha dúvida é a seguinte, gostaria ao invés de escolher a posição no tabuleiro por linha e coluna, usar o teclado numérico do computador.

Exemplo do teclado: 7 8 9   Se o usuário escolher a posição "tabul[2][1]" na matriz, ele digitará 4.

                                 4 5 6

                                 3 2 1

Seria possível utlizar um Switch com matrizes?

Tentei aqui mas não obtive sucesso.

Algué pode me ajudar?

Desde já agredeço!!

#include<stdio.h>#include<conio.h>main(){    char tabul[3][3];    char O='O', X='X';    int jogada=0, linha, coluna;    for(linha=0; linha<3; linha++)        for(coluna=0; coluna<3; coluna++)            tabul[linha][coluna]=' ';    while(jogada<=9)        {        printf("\t ###################################\n");	        printf("\t ########## JOGO DA VELHA ##########\n");        printf("\t ###################################\n\n\n");		for(linha=0; linha<3; linha++)        	{            printf("\t\t     %c \xBA %c \xBA %c\n", tabul[linha][0], tabul[linha][1], tabul[linha][2]);            if(linha < 3-1)                {				printf("\t\t    ÍÍÍ\xCEÍÍÍ\xCEÍÍÍ\n");                }        	}                  if(jogada%2)printf("JOGADOR 2 \nLINHA: ");         else printf("JOGADOR 1 \nLINHA: ");        scanf("%d", &linha);        printf("COLUNA: ");        scanf("%d", &coluna); 						        if(tabul[linha-1][coluna-1]==' ')        {            if(jogada%2)tabul[linha-1][coluna-1]=X;            else tabul[linha-1][coluna-1]=O;            jogada++;        }        if((tabul[0][0]==O && tabul[0][1]==O && tabul[0][2]==O)||           (tabul[1][0]==O && tabul[1][1]==O && tabul[1][2]==O)||           (tabul[2][0]==O && tabul[2][1]==O && tabul[2][2]==O)||           (tabul[0][0]==O && tabul[1][0]==O && tabul[2][0]==O)||           (tabul[0][1]==O && tabul[1][1]==O && tabul[2][1]==O)||           (tabul[0][2]==O && tabul[1][2]==O && tabul[2][2]==O)||           (tabul[0][0]==O && tabul[1][1]==O && tabul[2][2]==O)||           (tabul[0][2]==O && tabul[1][1]==O && tabul[2][0]==O))        	{                printf("\n\a\t\tJOGADOR 1 VENCEU!!!");                break;        	}        	        if((tabul[0][0]==X && tabul[0][1]==X && tabul[0][2]==X)||           (tabul[1][0]==X && tabul[1][1]==X && tabul[1][2]==X)||           (tabul[2][0]==X && tabul[2][1]==X && tabul[2][2]==X)||           (tabul[0][0]==X && tabul[1][0]==X && tabul[2][0]==X)||           (tabul[0][1]==X && tabul[1][1]==X && tabul[2][1]==X)||           (tabul[0][2]==X && tabul[1][2]==X && tabul[2][2]==X)||           (tabul[0][0]==X && tabul[1][1]==X && tabul[2][2]==X)||           (tabul[0][2]==X && tabul[1][1]==X && tabul[2][0]==X))        	{           		 printf("\n\n\n\n\a\t\tJOGADOR 2 VENCEU!!!");           		 break;        	}        if(jogada==9)        {            printf("PARTIDA EMPATADA");            break;        }    }    getch();    return(0);}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Rager82

Pelo pouco que aprendi sobre C#, acho que você pode usar o evento keypress para capturar a tecla digitada. Depois pode usar um condicional ou switch para atribuir o número digitado a sua posição de matriz correspondente.

http://www.arquivodecodigos.net/dicas/c-csharp-aprenda-a-tratar-eventos-do-teclado-em-suas-aplicacoes-c-2922.html


https://msdn.microsoft.com/pt-br/library/ms171538(v=vs.110).aspx

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Oi amigo, espero que esse código lhe responda :
 

 

#include <stdio.h>
#include <stdlib.h>
 
 
 
int main (void){
    int a[1][1];
a[1][1]=2;
int operacao = a[1][1];
    switch (operacao){
        case 1:
printf("Entrou no 1");
            break;
        case 2:
printf("Entrou no 2");
            break;
default:
printf("entrou no default");
 
    }
 
// OU
 
int B[1][1];
 
operacao=1;
switch (operacao){
        case 1:
printf("Entrou no 1");
B[1][1]=1;
            break;
        case 2:
printf("Entrou no 2");
B[1][1]=2;
            break;
default:
printf("entrou no default");
 
    }
 
 
 
    system ("pause");
    return EXIT_SUCCESS;
}

 

 

 

Coloquei um exemplo bem pobre de como se pode ser feito .. qualquer duvida só entrar em contato novamente
 


@Math.Pi , sou novo em programação e também não tenho conhecimento em C#, esse ai fiz em C.

Ele ta querendo em C mesmo.. não sei daonde saiu o C# hehe

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pronto, como prometido.


 

#include <stdio.h>#include <stdlib.h>int main(){int op;// Caractere '32' na tabela ASCII representa campos vazios ou espaço ' '.// Caractere '88' na tabela ASCII representa 'X'.// Caractere '79' na tabela ASCII representa 'O'.char bloco[3][3];int x,y;for(x=0;x<3;x++){    for(y=0;y<3;y++){        bloco[x][y]=32; // Parece confuso mas isso e um espaco    }}int jogador=1;int ganhou=0;int posicao=0;do{    // lembrando que voce pediu o quadro assim    // 1 2 3    // 4 5 6    // 7 8 9    for(x=0;x<3;x++){        for(y=0;y<3;y++){           if(y!=2)                printf("%c |",bloco[x][y]) ;           else                printf("%c",bloco[x][y]);        }        if(x!=2)            printf("\n-- -- --\n");    }    printf("\n");    printf("Jogador %d Digite a posicao (1-9) \n",jogador);    scanf("%d",&posicao);    switch(posicao){    case 1:        if(jogador==1){            bloco[0][0]=88;            jogador=2;        }else{            bloco[0][0]=79;            jogador=1;        }        break;    case 2:        if(jogador==1){            bloco[0][1]=88;            jogador=2;        }else{            bloco[0][1]=79;            jogador=1;        }        break;    case 3:        if(jogador==1){            bloco[0][2]=88;            jogador=2;        }else{            bloco[0][2]=79;            jogador=1;        }        break;    case 4:        if(jogador==1){            bloco[1][0]=88;            jogador=2;        }else{            bloco[1][0]=79;            jogador=1;        }        break;    case 5:        if(jogador==1){            bloco[1][1]=88;            jogador=2;        }else{            bloco[1][1]=79;            jogador=1;        }        break;    case 6:        if(jogador==1){            bloco[1][2]=88;            jogador=2;        }else{            bloco[1][2]=79;            jogador=1;        }        break;    case 7:        if(jogador==1){            bloco[2][0]=88;            jogador=2;        }else{            bloco[2][0]=79;            jogador=1;        }        break;    case 8:        if(jogador==1){            bloco[2][1]=88;            jogador=2;        }else{            bloco[2][1]=79;            jogador=1;        }        break;    case 9:        if(jogador==1){            bloco[2][2]=88;            jogador=2;        }else{            bloco[2][2]=79;            jogador=1;        }        break;    default:        system("cls");        printf("Valor Invalido !");        break;    }}while(ganhou!=1);}

Ainda falta um return no final e implementar as regras de vitorias, caso algum jogador ganhe... aí pra sair do loop basta colocar ganhou=1;

Espero que tenha entendido o código, qualquer duvida eu explico =) só postar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu acho mais conveniente para o usuário do aplicativo se você criar um vetor de renderização de caracteres. Assim será possível ele navegar com as setas do teclado pelo jogo da velha. Ele também poderá usar uma tecla para confirmar a jogada, por exemplo a tecla 'x' ou enter. Para confirmar a jogada substitua um caractere minúsculo por um maiúsculo na posição indicada pelo jogador.

 

Para ilustrar, uma tela antes da confirmação da jogada:

 ║x║X═╬═╬═ ║O║ ═╬═╬═ ║O║ 

Uma tela depois da jogada ter sido confirmada

O║X║X═╬═╬═x║O║ ═╬═╬═ ║O║

Se já tiver um ideia de como implementar, beleza. Se não, na dúvida de como fazer renderização de vetor de caracteres, dê um toque.

Link para o comentário
Compartilhar em outros sites

@Rafael Domingues Corrêa, muito bacana essa sua ideia, mas como sou meio inexperiente não imagino como faça mesmo,rs. Acredito que logo termino esse que o @Rio está dando uma força, ai na sequência quero tentar fazer desse modo que falou sim! :)

Dêem uma olhada como está ficando. Ainda tenho algumas dúvidas nesse erros:

- caso o usuário digite algo diferente que está dentro do case, não estou conseguindo fazer com que informe "valor invalido" e repita a jogada

- se o usuário escolhe uma posição que já está preechida, o programa aceita e troca pela  atual executada.

 

Muito obrigado a todos pela ajuda!!

#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){// Caractere '32' na tabela ASCII representa campos vazios ou espaço ' '.// Caractere '88' na tabela ASCII representa 'X'.// Caractere '79' na tabela ASCII representa 'O'.char bloco[3][3];int jogada=0;	printf("---------------------------\n");	printf("-------Jogo da Velha-------\n");	printf("---------------------------\n\n");  	  int x, y; for(x=0; x<3; x++){    for(y=0;y<3;y++){        bloco[x][y]=32; // Parece confuso mas isso e um espaco    } }int jogador=1;int posicao=0;int pos=0;while(pos<9){    // lembrando que voce pediu o quadro assim    // 1 2 3    // 4 5 6    // 7 8 9			    for(x=0;x<3;x++){        for(y=0;y<3;y++){           if(y!=2)           		printf("%c |",bloco[x][y]) ;           else                printf("%c",bloco[x][y]);        }        if(x!=2)            printf("\n-- -- --\n");    }    printf("\n\n");    printf("Jogador %d Digite a posicao (1-9): ", jogador);    scanf("%d", &posicao);    printf("\n");       	    switch(posicao){    case 1:        if(jogador==1){            bloco[0][0]=88;            jogador=2;            pos++;                       }else{            bloco[0][0]=79;            jogador=1;            pos++;        }        break;            case 2:        if(jogador==1){            bloco[0][1]=88;            jogador=2;            pos++;                    }else{            bloco[0][1]=79;            jogador=1;            pos++;        }        break;            case 3:        if(jogador==1){            bloco[0][2]=88;            jogador=2;            pos++;        }else{            bloco[0][2]=79;            jogador=1;            pos++;        }        break;            case 4:        if(jogador==1){            bloco[1][0]=88;            jogador=2;            pos++;        }else{            bloco[1][0]=79;            jogador=1;            pos++;        }        break;            case 5:        if(jogador==1){            bloco[1][1]=88;            jogador=2;           pos++;        }else{            bloco[1][1]=79;            jogador=1;            pos++;        }        break;            case 6:        if(jogador==1){            bloco[1][2]=88;            jogador=2;            pos++;        }else{            bloco[1][2]=79;            jogador=1;            pos++;        }        break;            case 7:        if(jogador==1){            bloco[2][0]=88;            jogador=2;            pos++;        }else{            bloco[2][0]=79;            jogador=1;            pos++;        }        break;            case 8:        if(jogador==1){            bloco[2][1]=88;            jogador=2;            pos++;        }else{            bloco[2][1]=79;            jogador=1;            pos++;        }        break;            case 9:        if(jogador==1){            bloco[2][2]=88;            jogador=2;            pos++;        }else{            bloco[2][2]=79;            jogador=1;            pos++;        }        break;            default:        system("cls");        printf("Valor Invalido !\n");        break; 	        }        	       		if((bloco[0][0]==88 && bloco[0][1]==88 && bloco[0][2]==88)||           (bloco[1][0]==88 && bloco[1][1]==88 && bloco[1][2]==88)||           (bloco[2][0]==88 && bloco[2][1]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][0]==88 && bloco[2][0]==88)||           (bloco[0][1]==88 && bloco[1][1]==88 && bloco[2][1]==88)||           (bloco[0][2]==88 && bloco[1][2]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][1]==88 && bloco[2][2]==88)||           (bloco[0][2]==88 && bloco[1][1]==88 && bloco[2][0]==88))        	{                                for(x=0;x<3;x++){                      for(y=0;y<3;y++){                  if(y!=2)                     	printf("%c |",bloco[x][y]) ;                  else                        printf("%c",bloco[x][y]);                  }                                         	    	  if(x!=2)                    printf("\n-- -- --\n");                }								printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador-1);                break;			}					 if((bloco[0][0]==79 && bloco[0][1]==79 && bloco[0][2]==79)||            (bloco[1][0]==79 && bloco[1][1]==79 && bloco[1][2]==79)||            (bloco[2][0]==79 && bloco[2][1]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][0]==79 && bloco[2][0]==79)||            (bloco[0][1]==79 && bloco[1][1]==79 && bloco[2][1]==79)||            (bloco[0][2]==79 && bloco[1][2]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][1]==79 && bloco[2][2]==79)||            (bloco[0][2]==79 && bloco[1][1]==79 && bloco[2][0]==79))        	{                for(x=0;x<3;x++){                   for(y=0;y<3;y++){                      if(y!=2)                     	printf("%c |",bloco[x][y]) ;                      else                        printf("%c",bloco[x][y]);                                   }                                         	    	  if(x!=2)                    printf("\n-- -- --\n");                }                				printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador+1);                break;			    }							          if(pos==9){				       for(x=0;x<3;x++){                      for(y=0;y<3;y++){                 		 if(y!=2)               		      	printf("%c |",bloco[x][y]) ;               			 else               		        printf("%c",bloco[x][y]);                  	  }                         if(x!=2)                            printf("\n-- -- --\n");    	              }						           printf("\n\n");		               printf("\n\n\a\t\tO JOGO EMPATOU!\n");          }				   	}	}
Link para o comentário
Compartilhar em outros sites

Beleza, essa forma do código vai ficar um pouco mais complicada... é o seguinte... agora vamos esquecer o que está fora do switch, vamos trabalhar só dentro dos case's

Cada "case" do switch corresponde a uma tecla valida ou inválida digitada pelo usuario.
Então se ele escolheu o campo 1 ...
você vai ter q fazer uma validação lá dentro do case 1 : 
Para saber se aquele campo já está preenchido ou não.

Uma dica é colocar if(bloco[1][2] == 32) { vai marcar }else { campos ja preenchido };

 

Tipo isso. Caso o usuario digite um valor inválido. ele irá cair no "default" do switch
Eu lhe recomendo dar uma lida sobre switchs pra ficar mais claro

http://www.tiexpert.net/programacao/c/switch-case-default.php

 

https://www.youtube.com/watch?v=ApR8ECVuqU4

@

Rafael Domingues Corrêa  como você faria pra navegar pelas setas? tipo, toda vida que o cara digitar uma seta, ele mudar o foco para outro campo  ? Como seria a leitura das teclas?


 

Link para o comentário
Compartilhar em outros sites

Para capturar eventos acima, abaixo e etc... você precisa usar função de captura de eventos do teclado. Segue abaixo o código exemplo. Dê uma estudada.

#include <stdio.h>#include <conio.h> //Importa kbhit necessário para capturarr eventosint main(){    char key; //Armazena caractere asc    do    {        if(kbhit()) { // 'kbhit()' captura um evento do teclado            key = getch(); // 'getch()' envia o evento para uma variável            /** Ele devolve o evento como um inteiro de 1 byte            Se você quiser estudar os eventos basta usar um comando que imprime            o inteiro correspondente ao evento do teclado, assim:            printf("%i\n", key);            **/            switch(key) //Compara o evento            {            case 72: //Valor do evento 'tecla para cima precionada'                printf("Acima corresponde ao evento %i.\n", key);                break;            case 80:                printf("Abaixo corresponde ao evento %i.\n", key);                break;            case 75:                printf("Esquerda corresponde ao evento %i.\n", key);                break;            case 77:                printf("Direita corresponde ao evento %i.\n", key);                break;            case 13:                printf("Enter corresponde ao evento %i.\n", key);                break;            case 27:                printf("Esc corresponde ao evento %i.\n", key);                return 0; //Fecha o programa com sucesso;                break;            }        }    } while(1);    return 0;}

Espero ajudar.

Link para o comentário
Compartilhar em outros sites

Muito interessante essa ideia mesmo @Rafael Domingues Corrêa !! Valeu, vou estudar sim!

 

Acho que consegui chegar mais ou menos onde eu queria @Rio, dêem uma olhada , sei que pode estar meio confuso, mas eu chego lá rsrs

 

Queria fazer o seguinte agora, baseado nesse código, fazer o jogo "Jogador vs Máquina". Pela minhas pesquisas vi que existe uma função chamada "rand"(randomico), para que a máquina jogue.Tentei fazer aqui mas não deu certo. É possível implementar isso nesse código?

Muito obrigado pela força que estão me dando! :) 

#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){// Caractere '32' na tabela ASCII representa campos vazios ou espaço ' '.// Caractere '88' na tabela ASCII representa 'X'.// Caractere '79' na tabela ASCII representa 'O'.char bloco[3][3];int jogada=0;int jogador=1;int posicao=0;     printf("###################################\n");	     printf("########## JOGO DA VELHA ##########\n");     printf("###################################\n\n\n");	  int x, y; for(x=0; x<3; x++){    for(y=0;y<3;y++){        bloco[x][y]=32; // Parece confuso mas isso e um espaco    } }while(jogada<9){ 		    for(x=0;x<3;x++){        for(y=0;y<3;y++){           if(y!=2)           		printf(" %c |",bloco[x][y]) ;           else                printf(" %c",bloco[x][y]);        }        if(x!=2)            printf("\n--- --- ---\n");    }    printf("\n\n");    printf("Jogador %d Digite a posicao (1-9): ", jogador);    scanf("%d", &posicao);             printf("\n");    	    	  				   	switch(posicao){	    case 1:        if(jogador==1){        	if(bloco[0][0]==32){			bloco[0][0]=88;            jogador=2;            jogada++;			}                       }else{           	if(bloco[0][0]==32){            bloco[0][0]=79;            jogador=1;            jogada++;			}        }                break;            case 2:        if(jogador==1){        	if(bloco[0][1]==32){		    bloco[0][1]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[0][1]==32){            bloco[0][1]=79;            jogador=1;            jogada++;			}        }        break;            case 3:        if(jogador==1){        	if(bloco[0][2]==32){            bloco[0][2]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[0][2]==32){            bloco[0][2]=79;            jogador=1;            jogada++;			}        }        break;            case 4:        if(jogador==1){        	if(bloco[1][0]==32){            bloco[1][0]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][0]==32){            bloco[1][0]=79;            jogador=1;            jogada++;			}        }        break;            case 5:        if(jogador==1){        	if(bloco[1][1]==32){            bloco[1][1]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][1]==32){            bloco[1][1]=79;            jogador=1;            jogada++;			}        }                break;            case 6:        if(jogador==1){        	if(bloco[1][2]==32){            bloco[1][2]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][2]==32){            bloco[1][2]=79;            jogador=1;            jogada++;			}        }        break;            case 7:        if(jogador==1){        	if(bloco[2][0]==32){            bloco[2][0]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][0]==32){			bloco[2][0]=79;            jogador=1;            jogada++;            }        }        break;            case 8:        if(jogador==1){            if(bloco[2][1]==32){			bloco[2][1]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][1]==32){			bloco[2][1]=79;            jogador=1;            jogada++;            }        }        break;            case 9:        if(jogador==1){        	if(bloco[2][2]==32){            bloco[2][2]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][2]==32){			bloco[2][2]=79;            jogador=1;            jogada++;            }			        }        break;            default:        printf("Valor Invalido!\n\n");        break; 	} 	 	        if((bloco[0][0]==88 && bloco[0][1]==88 && bloco[0][2]==88)||           (bloco[1][0]==88 && bloco[1][1]==88 && bloco[1][2]==88)||           (bloco[2][0]==88 && bloco[2][1]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][0]==88 && bloco[2][0]==88)||           (bloco[0][1]==88 && bloco[1][1]==88 && bloco[2][1]==88)||           (bloco[0][2]==88 && bloco[1][2]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][1]==88 && bloco[2][2]==88)||           (bloco[0][2]==88 && bloco[1][1]==88 && bloco[2][0]==88))        	{                   for(x=0;x<3;x++){                      for(y=0;y<3;y++){                           if(y!=2)                            	printf(" %c |", bloco[x][y]) ;                           else                                printf(" %c", bloco[x][y]);                  }                                         	    	  if(x!=2)                    printf("\n--- --- ---\n");                }								printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador-1);                break;			}					 if((bloco[0][0]==79 && bloco[0][1]==79 && bloco[0][2]==79)||            (bloco[1][0]==79 && bloco[1][1]==79 && bloco[1][2]==79)||            (bloco[2][0]==79 && bloco[2][1]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][0]==79 && bloco[2][0]==79)||            (bloco[0][1]==79 && bloco[1][1]==79 && bloco[2][1]==79)||            (bloco[0][2]==79 && bloco[1][2]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][1]==79 && bloco[2][2]==79)||            (bloco[0][2]==79 && bloco[1][1]==79 && bloco[2][0]==79))        	{                for(x=0;x<3;x++){                   for(y=0;y<3;y++){                      if(y!=2)                     	printf(" %c |", bloco[x][y]) ;                      else                        printf(" %c", bloco[x][y]);                                   }                                         	    	  if(x!=2)                    printf("\n--- --- ---\n");                }                				printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador+1);                break;			    }			          if(jogada==9){				       for(x=0;x<3;x++){                      for(y=0;y<3;y++){                 		 if(y!=2)               		      	printf(" %c |",bloco[x][y]) ;               			 else               		        printf(" %c",bloco[x][y]);                  	  }                         if(x!=2)                            printf("\n--- --- ---\n");    	              }						           printf("\n\n");		               printf("\n\n\a\t\tO JOGO EMPATOU!\n");		                         }   		 	}}
Link para o comentário
Compartilhar em outros sites

Sim, é possível você implementar Máquina vs. Jogador, mas você precisará instruir a máquina para não fazer uma jogada inválida (como por exemplo, jogar numa lacuna onde já está preenchida). Mas para dificultar para o jogador você pode implementar um algorítmo padrão. Ou colocar um tempo limite para a jogada do próximo jogador, o que reduzirá o tempo de pensamento do jogador. É bom um desafiozinho, hehew.

Link para o comentário
Compartilhar em outros sites

Eu vou escrever um código com renderização de vetor de caracteres com captura de eventos pra dar uma ilustrada em como poderia ser feito. Eu mesmo já desenvolvi um joguinho onde uma nave marcava ponto ao destruir os inimigos. Eu usei métodos de renderização gráfica, só que aplicada para terminal (prompt de comando). O conceito é simples, é só usar um pouco de metologia de games, que é uma das minhas especialidades.

 

Um abraço, eu vou publicar um código sample. ok?

Link para o comentário
Compartilhar em outros sites

Eu fiz uma implementação bem simples, de jogadas randômicas. Dê uma olhadinha:

#include <stdio.h>#include <stdlib.h>#include <time.h>int jogadaComputador(){    int jogada;    srand(time(NULL));    while((jogada = rand()%9) == 0){};    return jogada;}int main(){// Caractere '32' na tabela ASCII representa campos vazios ou espaço ' '.// Caractere '88' na tabela ASCII representa 'X'.// Caractere '79' na tabela ASCII representa 'O'.char bloco[3][3];int jogada=0;int jogador=1;int posicao=0;     printf("###################################\n");     printf("########## JOGO DA VELHA ##########\n");     printf("###################################\n\n\n"); int x, y; for(x=0; x<3; x++){    for(y=0;y<3;y++){        bloco[x][y]=32; // Parece confuso mas isso e um espaco    } }while(jogada<9){    for(x=0;x<3;x++){        for(y=0;y<3;y++){           if(y!=2)           		printf(" %c |",bloco[x][y]) ;           else                printf(" %c",bloco[x][y]);        }        if(x!=2)            printf("\n--- --- ---\n");    }    printf("\n\n");    if(jogador == 1)    {        printf("Jogador %d Digite a posicao (1-9): ", jogador);        scanf("%d", &posicao);    }    else    {        posicao = jogadaComputador();    }    printf("\n");switch(posicao){    case 1:        if(jogador==1){        	if(bloco[0][0]==32){			bloco[0][0]=88;            jogador=2;            jogada++;			}           }else{           	if(bloco[0][0]==32){            bloco[0][0]=79;            jogador=1;            jogada++;			}        }        break;    case 2:        if(jogador==1){        	if(bloco[0][1]==32){		    bloco[0][1]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[0][1]==32){            bloco[0][1]=79;            jogador=1;            jogada++;			}        }        break;    case 3:        if(jogador==1){        	if(bloco[0][2]==32){            bloco[0][2]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[0][2]==32){            bloco[0][2]=79;            jogador=1;            jogada++;			}        }        break;    case 4:        if(jogador==1){        	if(bloco[1][0]==32){            bloco[1][0]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][0]==32){            bloco[1][0]=79;            jogador=1;            jogada++;			}        }        break;    case 5:        if(jogador==1){        	if(bloco[1][1]==32){            bloco[1][1]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][1]==32){            bloco[1][1]=79;            jogador=1;            jogada++;			}        }        break;    case 6:        if(jogador==1){        	if(bloco[1][2]==32){            bloco[1][2]=88;            jogador=2;            jogada++;			}        }else{        	if(bloco[1][2]==32){            bloco[1][2]=79;            jogador=1;            jogada++;			}        }        break;    case 7:        if(jogador==1){        	if(bloco[2][0]==32){            bloco[2][0]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][0]==32){			bloco[2][0]=79;            jogador=1;            jogada++;            }        }        break;    case 8:        if(jogador==1){            if(bloco[2][1]==32){			bloco[2][1]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][1]==32){			bloco[2][1]=79;            jogador=1;            jogada++;            }        }        break;    case 9:        if(jogador==1){        	if(bloco[2][2]==32){            bloco[2][2]=88;            jogador=2;            jogada++;            }        }else{            if(bloco[2][2]==32){			bloco[2][2]=79;            jogador=1;            jogada++;            }        }        break;    default:        printf("Valor Invalido!\n\n");        break; 	}        if((bloco[0][0]==88 && bloco[0][1]==88 && bloco[0][2]==88)||           (bloco[1][0]==88 && bloco[1][1]==88 && bloco[1][2]==88)||           (bloco[2][0]==88 && bloco[2][1]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][0]==88 && bloco[2][0]==88)||           (bloco[0][1]==88 && bloco[1][1]==88 && bloco[2][1]==88)||           (bloco[0][2]==88 && bloco[1][2]==88 && bloco[2][2]==88)||           (bloco[0][0]==88 && bloco[1][1]==88 && bloco[2][2]==88)||           (bloco[0][2]==88 && bloco[1][1]==88 && bloco[2][0]==88))        	{                   for(x=0;x<3;x++){                      for(y=0;y<3;y++){                           if(y!=2)                            	printf(" %c |", bloco[x][y]) ;                           else                                printf(" %c", bloco[x][y]);                  }       	    	  if(x!=2)                    printf("\n--- --- ---\n");                }				printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador-1);                break;			}		 if((bloco[0][0]==79 && bloco[0][1]==79 && bloco[0][2]==79)||            (bloco[1][0]==79 && bloco[1][1]==79 && bloco[1][2]==79)||            (bloco[2][0]==79 && bloco[2][1]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][0]==79 && bloco[2][0]==79)||            (bloco[0][1]==79 && bloco[1][1]==79 && bloco[2][1]==79)||            (bloco[0][2]==79 && bloco[1][2]==79 && bloco[2][2]==79)||            (bloco[0][0]==79 && bloco[1][1]==79 && bloco[2][2]==79)||            (bloco[0][2]==79 && bloco[1][1]==79 && bloco[2][0]==79))        	{                for(x=0;x<3;x++){                   for(y=0;y<3;y++){                      if(y!=2)                     	printf(" %c |", bloco[x][y]) ;                      else                        printf(" %c", bloco[x][y]);                                   }       	    	  if(x!=2)                    printf("\n--- --- ---\n");                }				printf("\n\n\a\t\tJOGADOR %d VENCEU!!!\n", jogador+1);                break;			    }          if(jogada==9){			       for(x=0;x<3;x++){                      for(y=0;y<3;y++){                 		 if(y!=2)               		      	printf(" %c |",bloco[x][y]) ;               			 else               		        printf(" %c",bloco[x][y]);                  	  }                         if(x!=2)                            printf("\n--- --- ---\n");    	              }			           printf("\n\n");		               printf("\n\n\a\t\tO JOGO EMPATOU!\n");          }	}}

Eu só criei uma função que retorna o valor da jogada, não 0 (zero). Falou, um abraço.

Link para o comentário
Compartilhar em outros sites

int jogadaComputador(){    int jogada; // Armazena inteiro da jogada    srand(time(NULL)); // Recolhe semente para o número randômico através do relógio do computador    /** srand() é necessário pois o computador não é criativo, então essa função    altera o valor de rand() fazendo com que a máquina some a pilha de números pseudo-randômicos    ao horário atual (coisa que nunca se repete) **/    while((jogada = rand()%9) == 0){}; // Enquanto número randomizado for 0 (zero)    /** Pois zero é uma jogada inválida no seu aplicativo **/    return jogada; // Envia o número da jogada}

Ta aí, meu querido.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Quero que alguém me ajude com esse exercício de Algoritmo, por favor, alguém me dê algumas dicas de como eu faço esse programa funcionar:

 

Faça um programa que simule um controle bancário. Para tanto, devem
ser lidos os códigos de quinze contas e os seus respectivos saldos. Os códigos
devem ser armazenados em um vetor de números inteiros e os saldos devem ser
armazenados em um vetor de números reais. O saldo deverá ser cadastrado na
mesma posição do código. Depois de fazer a leitura dos valores o usuário deverá
optar por uma das seguintes opções:
a) Efetuar depósito;
b)Efetuar saque;
c) Efetuar transferência;
d) Consultar o saldo de uma conta;
e) Consulta de todas as contas e valores;
f) Consultar o ativo bancário (ou seja, soma dos saldos de todos clientes);
g) Finalizar o programa.
- Para efetuar depósito : deve-se solicitar o código da conta. Se a conta não estiver
cadastrada, mostrar a mensagem “Conta não encontrada” e voltar ao menu. Se a conta
existir, solicitar o valor a ser depositado, atualizar o seu saldo e imprimir a mensagem
“Deposito realizado com sucesso!”.
- Para efetuar saque: deve-se solicitar o código da conta. Se a conta não estiver
cadastrada, mostrar a mensagem “Conta não encontrada” e voltar ao menu. Se a conta
existir solicitar o valor a ser sacado. Verificar se o saldo é suficiente para cobrir o saque.
Se o saldo for suficiente, realizar o saque, imprimir a mensagem “Saque realizado com
sucesso!” e voltar ao menu. Caso contrário, mostrar a mensagem “Saldo insuficiente” e
voltar ao menu.
- Para efetuar a transferência : solicite o código da conta. Se a conta não estiver
cadastrada, mostrar mensagem “Conta não encontrada” e voltar ao menu. Se a conta
existir, solicitar o código da conta que irá receber o valor. Se esta segunda conta não
existir, mostrar mensagem: “Conta não encontrada” e voltar ao menu. Se a conta existir,
solicitar o valor a ser transferido. Verificar se o saldo é suficiente para realizar a
transferência. Se o saldo for suficiente, realizar a transferência, imprimir a mensagem
“Transeferência realizada com sucesso!” e voltar ao menu. Caso contrário, mostrar a
mensagem “Saldo insuficiente” e voltar ao menu.
- Para consultar o saldo de uma conta, solicite ao usuário o código da conta e informe o
valor correspondente. Depois de mostrar esse valor, voltar ao menu.
- Para consultar o saldo de todas as contas , basta mostrar na tela todas as contas do
vetor e seu respectivo saldo.
- Para consultar o ativo bancário, deve-se somar o saldo de todas as contas do banco.
Depois de mostrar esse valor, voltar ao menu.
- O programa só termina quando for digitada a opção ‘d’ – Finalizar o programa.

Link para o comentário
Compartilhar em outros sites

25 minutos atrás, Taione Indy Silva disse:

Quero que alguém me ajude com esse exercício de Algoritmo, por favor, alguém me dê algumas dicas de como eu faço esse programa funcionar:

Primeiro você deveria ter aberto um novo tema, evite ressuscitar temas antigos, se for preciso faça menções a conteúdos que você tenha visto anteriormente. O motivo é que os fóruns são temas "separados" que uma vez concluídos servem de consulta para outros usuários, não faz sentido você reavivar temas que já foram respondidos com novas perguntas, isso é regra em praticamente todos os fóruns do mundo inteiro.

Sobre sua pergunta, é muito generalizada. Da a entender que você quer que digamos como fazer o programa completamente e não que lhe ajudemos em questões concretas que é a finalidade desse forum.

Dito o anterior vou lhe encaminhar...
Comece por criar um menu com as opções de a ao g, pergunte qual opção o usuário gostaria escolher.
Faça um while e ponha o menu dentro, esse menu deve se repetir até que o usuário escolha sair. Sair seria uma opção a mais no seu menu.
Logo com o uso de switch ou if/else-if faça cada uma das coisas que vai pedindo no seu programa.

Um exemplo seria:
 

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>



int main (){
    int sair = 0;
    setlocale(LC_ALL, "portuguese-brazilian"); // para acentos
    
    
    do{
        system("Cls");
        printf("Escolha uma opção\na\nb\nc\nd\nOpção?: ");
        
        char op;
        scanf("%c%*c", &op);
        
        system("Cls");
        switch (op) {             
            case 'a':
                printf("você entrou na opção 'A' ");
                //código para opão a
                
                break;
            case 'b':
                printf("você entrou na opção 'B' ");
                //código para opão b
                
                break;
            case 'c':
                printf("você entrou na opção 'C' ");
                //código para opão c
                
                break;
            case 'd':
                printf("você entrou na opção 'D' ");
                //código para opão a
                
                break;
            case 's':
                printf("você escolheu sair bye! ");
                sair = 1;
                break;                
            default:
                printf("Não existe essa opção. ");
                break;
        }
        system("pause");
    }while(sair != 1);
    
    
    
    
    return 0;
}

Continue desde ai... sempre faça o menu primeiro depois disso fica mais claro, é só ir dentro dos switches fazendo cada caso tal como pede no seu enunciado.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...