Ir ao conteúdo
  • Cadastre-se

Arthur Boss

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

0
  1. @1freakday Realmente me equivoquei naquela parte, não pensando em todas as condições. Agradeço a vocês por me ajudarem com isto. E no laço aonde você perguntou seria executado 2 vezes, sendo i=0 é executado até se tornar i=1, porém passei o dia escrevendo o código e alterei algumas coisas, então desfiz o laço por necessidade de ocupar valores independentes depois. Outra pergunta que é um dos principais requisitos para o jogo, existe algum modo de, em qualquer momento que pressionado ESC, saia do jogo (ou apareça uma tela com a opção)? O requisito informa que a qualquer momento que pressionada a tecla saia do jogo, mas eu somente consegui implementar em dados momentos do jogo, utilizando a condição "if (getch()=27)". Tentei executar todo o jogo dentro de um "do{} while (getch()!=27)", mas não funcionou (talvez por não saber de onde começar e terminar o que incluo dentro de do while). Como não vou ter tempo de passar o jogo para uma biblioteca tipo allegro, muito menos de aprender a usar tal, será que é possível criar alguma condição utilizando somente bibliotecas padrão, ou no máximo "conio2"? Segue o código mais atual: //BIBLIOTECAS #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include <windows.h> #include <conio2.h> #define SIZE 6 //PROTÓTIPOS DAS FUNÇÕES void game(); void table (char hidden[][SIZE]); void score (int *points); void generate (char pieces[][SIZE]); void request (char pieces[][SIZE], char hidden[][SIZE], int *points); //FUNÇÃO PRINCIPAL int main() { setlocale (LC_ALL, "Portuguese"); SetConsoleTitle ("Memory Game in C - by Arthur & Paola"); //Define o título para a janela do console srand ((unsigned)time(NULL)); //Alimenta rand() com números diferentes game(); //Chama a função que dá início ao jogo return 0; } //EXECUÇÃO DO JOGO void game() { char pieces[5][SIZE]={}; //Matriz que conterá as peças char hidden[5][SIZE]={}; //Matriz que conterá os pares encontrados int points=0; //Pontuação do jogo table (hidden); score (&points); generate (pieces); request (pieces, hidden, &points); } //IMPRIME A MESA void table (char hidden[][SIZE]) { int i, j; cputsxy (8,2, "1 2 3 4 5 6\n\n"); //Imprime o índice das colunas for (i=0; i<5; i++) { printf (" %d ", i+1); //Imprime o índice das linhas for (j=0; j<SIZE; j++) printf ("[%c] ", hidden[j]); printf ("\n\n"); } } //IMPRIME A PONTUAÇÃO void score (int *points) { gotoxy (7,15); printf ("Pontuação: %d", *points); } //GERA AS PEÇAS void generate (char pieces[][SIZE]) { char cards[15]={'A','E','I','O','U','a','e','i','o','u','&','<','>','?','@'}; //Peças do jogo int n=0, x1, y1, x2, y2; while (n<15) { x1=rand()%5; x2=rand()%5; y1=rand()%6; y2=rand()%6; if (pieces[x1][y1]==0 && pieces[x2][y2]==0) { if (x1!=x2 || y1!=y2) { pieces[x1][y1]=cards[n]; pieces[x2][y2]=cards[n]; n++; } } } } //OPERAÇÃO DO JOGADOR void request (char pieces[][SIZE], char hidden[][SIZE], int *points) { int x[2], y[2]; do { cputsxy (35,4, "Qual a localização da primeira peça?"); cputsxy (35,6, "Linha: "); scanf ("%d", &x[0]); cputsxy (35,7, "Coluna: "); scanf ("%d", &y[0]); hidden[x[0]-1][y[0]-1]=pieces[x[0]-1][y[0]-1]; system ("cls"); table (hidden); score (points); cputsxy (35,4, "Qual a localização da primeira peça?"); cputsxy (35,6, "Linha: "); scanf ("%d", &x[1]); cputsxy (35,7, "Coluna: "); scanf ("%d", &y[1]); if ((x[0]==x[1]) && (y[0]==y[1])) //Caso o jogador digite 2 vezes a mesma peça, ela é virada novamente { printf ("\a"); //Emite um som de alerta cputsxy (35,10, "Digite uma posição diferente!"); delay (1500); hidden[x[0]-1][y[0]-1]=0; hidden[x[1]-1][y[1]-1]=0; system ("cls"); table (hidden); score (points); } else { hidden[x[1]-1][y[1]-1]=pieces[x[1]-1][y[1]-1]; system ("cls"); table (hidden); score (points); gotoxy (2,15); if (hidden[x[0]-1][y[0]-1]==hidden[x[1]-1][y[1]-1]) { cputsxy (35,4, "Parabéns, você acertou!"); *points+=100; score (points); delay (1500); } else { printf ("\a"); //Emite um som de alerta cputsxy (35,4, "Você errou! Tente novamente."); if (*points!=0) *points-=100; score (points); delay (1500); hidden[x[0]-1][y[0]-1]=0; hidden[x[1]-1][y[1]-1]=0; table (hidden); } } }while (*points<=1500); }
  2. Poxa amigo, agradeço demais!! Realmente era a questão do && e ||. Quebrei muito a cabeça com isso, e pelo visto ainda tenho dificuldades com a lógica em geral. No caso é um tabuleiro de 30 cartas, isso não será alterado. Mas qual dos métodos de sorteio seria mais eficiente no caso, você saberia indicar? Infelizmente estes ainda são meus primeiros contatos com programação, e devido ao prazo dado pra fazer este trabalho juntamente de tantos outros compromissos, realmente preciso de ajuda ou qualquer crítica, caso não se importem. É de grande importância pra mim!
  3. Agradeço pela simplificação da função table, de fato não pensei em utilizar o i+1. Meu professor disse que pode ser algo que escrevi errado na função rand() (porém ele não olhou o código). Pelo que revi diversas vezes, não há nada de errado com a forma em que utilizei rand() no código. Pior é que tenho 2 dias restantes pra terminar tudo, e não estou conseguindo finalizar.
  4. Boa tarde pessoal! Procurei em muitos fóruns e de todas formas que consegui pensar, mas não encontrei solução para meu problema, nem alguém com problema parecido. Tenho 4 dias pra entregar um jogo da memória feito em C, e devo gerar peças aleatórias a cada jogo novo. O código funciona algumas vezes, mas outras não executa, simplesmente fica a tela do console toda preta e o cursor piscando. O debugger também não funciona assim que chamo uma função no main, logo após a declaração de srand. Se eu tiro srand do código, ele funciona todas as vezes que executado. Alguém por favor consegue me ajudar? (OBS.: Ainda estão faltando algumas lógicas do jogo em si, portanto, tem outras coisas que estou com dificuldades a serem finalizadas): //BIBLIOTECAS #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #define SIZE 6 //Constante global para o uso da palavra SIZE //PROTÓTIPOS DAS FUNÇÕES void game (char deck[][SIZE]); void generate (char deck[][SIZE]); void table (char matrix[][SIZE]); void request (char printable_deck[][SIZE], char deck[][SIZE]); //FUNÇÃO PRINCIPAL int main() { setlocale (LC_ALL, "Portuguese"); srand (time(NULL)); //Alimenta rand() com números diferentes char deck[5][SIZE]={}; //Baralho que conterá as cartas game(deck); //Chama a função que dá início ao jogo return 0; } //EXECUÇÃO DO JOGO void game(char deck[][SIZE]) { char printable_deck[5][SIZE]={}; //Matriz que oculta as cartas generate (deck); table (deck); system ("pause"); system ("cls"); table (printable_deck); request (printable_deck, deck); } //GERA AS CARTAS PARA O BARALHO void generate (char deck[][SIZE]) { char cards[15]={'A','E','I','O','U','a','e','i','o','u','&','<','>','?','@'}; //Cartas disponíveis no jogo int n=0, x1, y1, x2, y2; while (n<15) { x1=rand()%5; x2=rand()%5; y1=rand()%6; y2=rand()%6; if (deck[x1][y1]==0 && deck[x2][y2]==0) { if (x1!=x2 && y1!=y2) { deck[x1][y1]=cards[n]; deck[x2][y2]=cards[n]; n++; } } } } //IMPRIME O BARALHO NA TELA void table (char matrix[][SIZE]) { int i, j; int m=1; printf ("\n 1 2 3 4 5 6\n\n"); //Imprime o índice das colunas for (i=0; i<5; i++) { printf (" %d ", m); //Imprime o índice das linhas for (j=0; j<SIZE; j++) printf ("[%c] ", matrix[j]); printf ("\n\n"); m++; } } //PERGUNTA AO USUÁRIO A CARTA QUE DESEJA VIRAR void request (char printable_deck[][SIZE], char deck[][SIZE]) { int i, m, n; int x[2], y[2]; for (i=0; i<=1; i++) { printf ("Qual a localização da carta desejada?" "\nLinha: "); scanf ("%d", &m); printf ("Coluna: "); scanf ("%d", &n); x=m-1; y=n-1; printable_deck[m-1][n-1]=deck[m-1][n-1]; system ("cls"); table (printable_deck); } if (deck[x[0]][y[0]]!=deck[x[1]][y[1]]) printf ("\n\nVocê errou! Tente novamente."); else { printf ("Parabéns! Você acertou.\n\n"); request (printable_deck, deck); } }
  5. Boa tarde pessoal! Acabei de comprar um notebook Sony Vaio SVE14A15FBW usado, e fiz toda instalação de drivers e tudo, porém obtive erros ao instalar o DirectX, ao abrir jogos aparece o erro (0x000007b), no Windows 7 o Índice de experiência de Usuário deu uma nota baixa para vídeo, 4,5 para Radeon 7600m dedicada é muito baixo, o que me faz pensar que executou o teste com a HD Graphics 3000 do i7-2620m. Enfim, consegui abrir um jogo ontem, um simples que provavelmente estava usando vídeo integrado. Depois fui lá e forcei o uso da Radeon com ele. O jogo até abriu, mas ao chegar no menu a tela fica preta. Estou desconfiando fortemente de um possível BGA somente no vídeo dedicado. O que podem me ajudar sobre isso?

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...