Created
September 22, 2010 01:21
-
-
Save RodrigoWantuk/590947 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <windows.h> | |
#include <conio.h> | |
void limpar() { | |
system("cls"); | |
} | |
void definir_cor(int cor) | |
{ | |
HANDLE hConsole; | |
hConsole = GetStdHandle(STD_OUTPUT_HANDLE); | |
SetConsoleTextAttribute(hConsole, cor); | |
} | |
void texto() { | |
puts(""); | |
puts(" .--. .-..-. _ .-. "); | |
puts(" : .--' : `' ::_; : : "); | |
puts(" : : .--. ,-.,-.,-..---. .--. : .. :.-.,-.,-. .--. .-' : .--. "); | |
puts(" : :__ ' .; ; : ,. ,. :: .; `' .; : : :; :: :: ,. :' .; ; ' .; :' .; :"); | |
puts(" `.__.'`.__,_;:_;:_;:_;: ._.'`.__.' :_;:_;:_;:_;:_;`.__,_;`.__.'`.__.'"); | |
puts(" : : "); | |
puts(" :_; "); | |
} | |
int tela_inicial() | |
{ | |
int a=0,d[3]={0}; | |
d[0]=539; | |
system("color F0"); | |
do { | |
limpar(); | |
texto(); | |
puts(" " ); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(248); | |
printf("¶¶¶¶¶¶¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("¶¢"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("ø¶\n"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(248); | |
printf("¶¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(248); | |
printf("ø¶¶¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("oø"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("ø"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("øo \n"); | |
printf(" "); | |
definir_cor(248); | |
printf("¶7"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(248); | |
printf("¶¶¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1o"); | |
definir_cor(240); | |
printf(" %c",201); | |
for(a=0;a<20;a++) | |
printf("%c",205); | |
printf("%c\n",187); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶"); | |
printf(" "); | |
definir_cor(248); | |
printf("¶¶¶7"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1o¶¶¶ø"); | |
definir_cor(240); | |
printf(" %c Menu: %c\n",186,186); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶"); | |
printf(" "); | |
definir_cor(248); | |
printf("¶¶¶¶¶¶¶¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1"); | |
definir_cor(240); | |
printf(" %c",204); | |
for(a=0;a<20;a++) | |
printf("%c",205); | |
printf("%c\n",185); | |
definir_cor(240); | |
printf(" "); | |
printf("o¶¶¶¶¶¶¶¶¶ø"); | |
printf(" "); | |
definir_cor(254); | |
printf("o"); | |
definir_cor(240); | |
printf(" %c 1. Novo Jogo %c %c\n",186,d[0],186); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); | |
printf(" "); | |
definir_cor(254); | |
printf("¢"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1o"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("1¶¶o"); | |
definir_cor(240); | |
printf(" %c 2. Sobre %c %c\n",186,d[1],186); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶o"); | |
printf(" "); | |
definir_cor(254); | |
printf("1"); | |
definir_cor(240); | |
printf(" %c 3. Sair %c %c\n",186,d[2],186); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); | |
printf(" "); | |
definir_cor(254); | |
printf("¶"); | |
definir_cor(240); | |
printf(" "); | |
definir_cor(254); | |
printf("o¶"); | |
definir_cor(240); | |
printf(" %c",200); | |
for(a=0;a<20;a++) | |
printf("%c",205); | |
printf("%c\n",188); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); | |
printf(" "); | |
definir_cor(254); | |
printf("¶¶\n"); | |
definir_cor(240); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶\n"); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶\n"); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶¶¶¶¶ \n"); | |
printf(" "); | |
printf("¶¶¶¶¶¶¶¶\n"); | |
a=getch(); | |
if(a == 72 && d[0] == 539) {d[0]=0; d[2]=539;} | |
else if(a == 72 && d[1] == 539) {d[1]=0; d[0]=539;} | |
else if(a == 72 && d[2] == 539) {d[2]=0; d[1]=539;} | |
if(a == 80 && d[0] == 539) {d[0]=0; d[1]=539;} | |
else if(a == 80 && d[1] == 539) {d[1]=0; d[2]=539;} | |
else if(a == 80 && d[2] == 539) {d[2]=0; d[0]=539;} | |
if(a == 13 && d[0] == 539) return 1; // Escolher Dificuldade | |
else if(a == 13 && d[1] == 539) sobre_tela(); | |
else if(a == 13 && d[2] == 539) if(really_close() == 4) return 4; | |
} while (1); | |
} | |
int sobre_tela() { | |
int a=0; | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts(""); | |
printf(" %c",201); | |
for(a=0;a<35;a++) printf("%c",205); | |
printf("%c\n",187); | |
printf(" %c Sobre - Campo Minado v1.0 %c\n",186,186); | |
printf(" %c",204); | |
for(a=0;a<35;a++) printf("%c",205); | |
printf("%c\n",185); | |
printf(" %c Desenvolvido em Linguagem C %c\n",186,186); | |
printf(" %c Utilizando o Compilador DevC++ %c\n",186,186); | |
printf(" %c %c\n",186,186); | |
printf(" %c Alunos: %c\n",186,186); | |
printf(" %c Rodrigo Wantuk e %c\n",186,186); | |
printf(" %c Lendryel Zanardine %c\n",186,186); | |
printf(" %c %c\n",186,186); | |
printf(" %c Engenharia da Computa%c%co %c\n",186,135,198,186); | |
printf(" %c Universidade Positivo. %c\n",186,186); | |
printf(" %c",200); | |
for(a=0;a<35;a++) printf("%c",205); | |
printf("%c\n",188); | |
a=0; | |
getch(); | |
return a; | |
} | |
int really_close() { | |
int a=0; | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" %c",201); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",187); | |
printf(" %c Sair do Jogo %c\n",186,186); | |
printf(" %c",204); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",185); | |
printf(" %c Deseja Realmente Sair? %c\n",186,186); | |
printf(" %c (1) Sim %c\n",186,186); | |
printf(" %c (2) N%co %c\n",186,198,186); | |
printf(" %c",200); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",188); | |
a=getch(); | |
if(a == 49) return 4; | |
} | |
int vencer() { | |
int a=0; | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" %c",201); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",187); | |
printf(" %c Parab%cns!!! %c\n",186,130,186); | |
printf(" %c",204); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",185); | |
printf(" %c Voc%c Venceu! %c\n",186,136,186); | |
printf(" %c",200); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",188); | |
getch(); | |
getch(); | |
return 0; | |
} | |
int perder() { | |
int a=0; | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" %c",201); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",187); | |
printf(" %c Que Pena... %c\n",186,186); | |
printf(" %c",204); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",185); | |
printf(" %c Voc%c Perdeu. %c\n",186,136,186); | |
printf(" %c",200); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",188); | |
getch(); | |
getch(); | |
return 0; | |
} | |
int seletor_dificuldade(int *sizex, int *sizey, int *bombs) { | |
int a=0; | |
do { | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" %c",201); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",187); | |
printf(" %c Seletor de Dificuldade: %c\n",186,186); | |
printf(" %c",204); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",185); | |
printf(" %c (1) Basico (10x10x10) %c\n",186,186); | |
printf(" %c (2) Avan%cado (15x15x30) %c\n",186,135,186); | |
printf(" %c (3) Personalizado %c\n",186,186); | |
printf(" %c",200); | |
for(a=0;a<26;a++) printf("%c",205); | |
printf("%c\n",188); | |
a=getch(); | |
} while (a != '1' && a != '2' && a != '3'); | |
if(a == '1') { | |
return 1; | |
} | |
if(a == '2') { | |
return 2; | |
} | |
if(a == '3') { | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" # Digite o Tamanho em X (Linhas, Menor ou Iguau a 15):"); | |
scanf("%d",sizex); | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" # Digite o Tamanho em Y (Colunas, Menor ou Iguau a 15):"); | |
scanf("%d",sizey); | |
system("color F0"); | |
limpar(); | |
texto(); | |
puts("\n\n"); | |
printf(" # Digite o Numero de Bombas:"); | |
scanf("%d",bombs); | |
return 3; | |
} | |
return 3; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <windows.h> | |
#include <conio.h> | |
/* Arquivo CampoMinado.h Criado com as Funções Mais Usadas, | |
tela inicial, sobre, sair, seletor de dificuldade, finalizações, | |
etc...*/ | |
#include "CampoMinado.h" | |
int tamx=10,tamy=10; // TAMANHO DO TABULEIRO. SEMPRE ADICIONAR 1 A MAIS. (Para 9, Digitar 10...) Max 15. (Valores Padrões) | |
int minas=25; // NUMERO DE BOMBAS NO TABULEIRO. (Valor Padrão) | |
int flagtype=0; // TIPO DE BANDEIRA (0 = LIMITADA COM BLOQUEIO, 1 = ILIMITADA - PARA VENCER NAO PODE USAR MAIS QUE O NUMERO DE BOMBAS EM BANDEIRAS) | |
int mines[16][16]={0}, icon[16][16]={-1}, c[16][16], open[16][16]; // DECLARAÇÃO DAS MATRIZES TABULEIRO. | |
/* Mines armazena apenas a posição das minas. Icon armazena casas a serem mostradas no tabuleiro. | |
c armazena as dicas, valores de referencia para as bombas e open armazena as casas já abertas.*/ | |
int loser=0,acertos=0,minasreg=0,bandcount=0, py = 0, px = 1, casasclose=0; // Outras Variáveis acessadas por várias funções. | |
/* Verifica a matriz inteira procurando quadrados brancos ao redor de | |
quadrados brancos já abertos, fazendo assim todas as casas brancas | |
ligadas serem abertas juntas. 1 Posição de numeros envolta dessas | |
casas brancas também é aberta aqui.*/ | |
void verifica_quadradro() | |
{ | |
int lx=-1,ly=-1, count=0, a=0, b=0; | |
// O Do Faz com que essa operação seja realizada N vezes ateh nenhum quadrado branco mais poder ser aberto. (var count). | |
do { | |
count=0; | |
// For's para verificar toda a matriz. | |
for(a=0;a<=tamx;a++) | |
for(b=0;b<=tamy;b++) { | |
if(mines[a][b] != 1 && open[a][b] != 1 && ( | |
(a-1 >= 0 && c[a-1][b] == 0 && open[a-1][b] == 1) || | |
(a+1 <= tamx && c[a+1][b] == 0 && open[a+1][b] == 1) || | |
(b-1 >= 0 && c[a][b-1] == 0 && open[a][b-1] == 1) || | |
(b+1 <= tamy && c[a][b+1] == 0 && open[a][b+1] == 1) || | |
(b-1 >= 0 && a-1 >= 0 && c[a-1][b-1] == 0 && open[a-1][b-1] == 1) || | |
(b+1 <= tamy && a-1 >= 0 && c[a-1][b+1] == 0 && open[a-1][b+1] == 1) || | |
(b-1 >= 0 && a+1 <= tamx && c[a+1][b-1] == 0 && open[a+1][b-1] == 1) || | |
(b+1 <= tamy && a+1 <= tamx && c[a+1][b+1] == 0 && open[a+1][b+1] == 1))) | |
{ | |
/* Igualando icon a c, estamos fazendo o programa mostrar o valor de c, | |
visto que a matriz icon é a matriz que é exibida e c é a que contem as referencias.*/ | |
icon[a][b]=c[a][b]; | |
// Diminui um das casas disponíveis. | |
if(open[a][b] != 1 && a > 0 && a <= tamx && b >= 0 && b <= tamy) casasclose-=1; | |
// Colocando 1 nessa posição da matriz open estamos dizendo que essa posição está aberta. | |
open[a][b]=1; | |
// Esse count indica que pelo menos um quadrado branco foi aberto a mais. | |
count+=1; | |
} | |
} | |
} while(count>0); | |
return; | |
} | |
/* Essa função gera as dicas, valores de referencia. | |
Ela é executada sempre que uma nova bomba é gerada | |
na função gera_bomba. Sua funcionalidade é simples. | |
Ela soma 1 a matriz c nos 8 quadrados envolta da | |
posição da bomba.*/ | |
void gera_dica(int xmine, int ymine) | |
{ | |
if(xmine-1 >= 0) c[xmine-1][ymine]+=1; | |
if(xmine+1 <= tamx+1) c[xmine+1][ymine]+=1; | |
if(ymine-1 >= 0) c[xmine][ymine-1]+=1; | |
if(ymine+1 <= tamy+1) c[xmine][ymine+1]+=1; | |
if(xmine-1 >= 0 && ymine-1 >= 0) c[xmine-1][ymine-1]+=1; | |
if(xmine-1 >= 0 && ymine+1 <= tamy+1) c[xmine-1][ymine+1]+=1; | |
if(xmine+1 <= tamx+1 && ymine-1 >= 0) c[xmine+1][ymine-1]+=1; | |
if(xmine+1 <= tamx+1 && ymine+1 <= tamy+1) c[xmine+1][ymine+1]+=1; | |
} | |
/* Função para Gerar as bombas. Utilizando Apenas a Função Rand | |
Conseguimos gerar todas as bombas necessárias.*/ | |
int gera_bomba() | |
{ | |
int a=0,plus=0,xmine=0,ymine=0,reg=0; | |
srand(time(NULL)); // Comando para a utilização do rand. | |
for (a = 0; a < minas; a++) { // For para criar todas as minas necessárias. | |
do { // Do para fazer com que as minas sejam criadas se qualquer empasse aparecer. | |
plus=rand() % 2; // Rand primário, geração randomica "plus" | |
xmine=rand() % tamx+plus; // Geração randomica da Bomba no Tabuleiro | |
plus=rand() % 2; // Rand primário, geração randomica "plus" | |
ymine=rand() % tamy+plus; // Geração randomica da Bomba no Tabuleiro | |
} while(mines[xmine][ymine] == 1 || xmine < 1 || xmine > tamx || ymine > tamy); // Verificação para determinar bomba fora do tabuleiro ou sobre outra já existente. | |
mines[xmine][ymine]=1; // Indicação que a mina foi criada, foi inserida na sua matriz corretamente. | |
gera_dica(xmine,ymine); // Chamada da função que irá gerar os valores de referência. | |
reg+=1; // Registro que conta o número de bombas criadas com sucesso. | |
} | |
return reg; | |
} | |
/* Essa função é chamada dentro do MAIN durante a execução do jogo. | |
a função dela é captar a tecla precionada e então executar uma ação determinada.*/ | |
// Ascii Codes Das Setas de Função | |
// 75 = < | |
// 77 = > | |
// 72 = /\ | |
// 80 = \/ | |
// 13 = ENTER | |
// 8 = Backspace (Apagar) | |
// 32 = Space. | |
// a = 97 | |
// ? = 63 | |
int esperar_tecla() { | |
int d=0, p=0; | |
d=getch(); // Capta a Tecla Precionada. | |
if(d == '0') d=0; // Caso a Tecla Precionada seja 0, o Jogo é Finalizado. | |
if(loser != 0) d=perder(); // Caso o Jogador tenha aberto uma Bomba, a Variável Loser é setada diferente de 0 O usuário abriu uma bomba, ele perdeu. | |
if(acertos == minasreg && minasreg-bandcount == 0) d=vencer(); // Se o Numero de Acertos (bandeiras) do usuário for = ao numero de bombas e as bandeiras no jogo não excedão o limite, o usuário venceu. | |
if(d >= 97 && d <= 97+14) { // Verifica se a tecla precionada no teclado é uma letra (ateh a 15ª posição) para navegação por teclado. | |
do { p=getch(); } while(p<97 || p>97+14); // Caso uma letra nesse padrão tenha sido precionada, ele aguarda por outra letra no mesmo padrão (linha x coluna) | |
if (96-d>tamx || 96-p>tamy) return; // Caso a segunda tecla precionada não seja no mesmo padrão da primeira, essa sequencia é finalizada. | |
px=d-96; // Define a Posição Na Matriz Campo Quando a navegação está sendo realizada por letras. | |
py=p-97; // Define a Posição Na Matriz Campo Quando a navegação está sendo realizada por letras. | |
} | |
if(d == 63 && icon[px][py] == 383 && open[px][py] != 1) { icon[px][py]=63; bandcount-=1; } // Insere o Caractere ? no Tabuleiro Sobrescrevendo uma Bandeira | |
if(d == 63 && icon[px][py] != 63 && open[px][py] != 1) { icon[px][py]=63;} // Insere o Caractere ? no Tabuleiro Fechado. | |
if(d == 75 && py > 0) py-=1; // Faz o Cursor Andar Para a Esquerda. Navegação por Setas. | |
if(d == 32 && icon[px][py] == 383) { icon[px][py]=-1; bandcount-=1; } // Remove uma Bandeira de Determinada Casa Utilizando o Espaço. | |
else if(d == 32 && icon[px][py] != 383 && (bandcount<minas || flagtype == 1) && open[px][py] != 1) { icon[px][py]=383; bandcount+=1; } // Insere uma Bandeira em Determinada casa Utilizando o Espaço. | |
if(d == 8 && icon[px][py] == 383 && open[px][py] != 1) { icon[px][py]=-1; bandcount-=1; } // Elimida uma Bandeira Utilizando o Backspace | |
if(d == 8 && icon[px][py] != 0 && open[px][py] != 1) { icon[px][py]=-1;} // Elimina um Caractere ? Utilizando o Backspace | |
if(d == 77 && py < tamy) py+=1; // Faz o Cursor Andar Para a Direita. Navegação por Setas. | |
if(d == 72 && px > 1) px-=1; // Faz o Cursor Andar Para Cima. Navegação por Setas. | |
if(d == 80 && px < tamx) px+=1; // Faz o Cursor Andar Para Baixo. Navegação por Setas. | |
if(d == 13 && mines[px][py] == 1 && icon[px][py] != 383 && icon[px][py] != 0) { icon[px][py]=9; open[px][py]=1; loser=1;} // Abre um Casa com Bomba. Assim que a Matriz exibir essa bomba, o usuário será informado que o jogo acabou. | |
if(d == 13 && mines[px][py] != 1 && icon[px][py] != 383 && icon[px][py] != 0) { casasclose-=1; icon[px][py]=c[px][py]; open[px][py]=1; if(c[px][py] == 0) verifica_quadradro(); } // Abre uma casa sem bomba. Logo é iniciada uma verificação por quadrados vazios. | |
return d; | |
} | |
/* Código Principal. Aqui é iniciado o jogo, bem como chamado várias funções, inclusive | |
do arquivo CampoMinado.h, desenhado a matriz jogo, etc.*/; | |
void main() | |
{ | |
int a=0, b=0, ctrl=0, tecla=0,iniciar=0, ordema=64, ordemb=64; | |
int xmine=0, ymine=0, plus=0, cor=0, dif=0; | |
definir_cor(240); | |
limpar(); | |
// é Chamada a Tela Inicial, o Menu, do arquivo CampoMinado.h Aqui o usuário irá escolher a opção. | |
// O código só retornará para essa função após o usuário escolher a dificuldade ou escolher fechar o jogo. | |
iniciar=tela_inicial(); | |
if(iniciar < 4) { // Caso o valor retornado seja menor que 4, uma dificuldade foi selecionada. Caso seja 4, o usuário optou por fexar o jogo. | |
dif=seletor_dificuldade(&tamx,&tamy,&minas); // Aqui a função também presente no CampoMinado.h é chamada para que o usuário escolha a dificuldade. | |
if(dif == 1) { // Caso a Dificuldade Fácil Seja Selecionada, a função retorna 1 e os valores são definidos aqui. | |
tamx=10; | |
tamy=10; | |
minas=10; | |
casasclose=90; | |
} | |
if(dif == 2) { // Caso a dificuldade avançado seja selecionada, a função retorna 2 e os valores são definidos aqui. | |
tamx=15; | |
tamy=15; | |
minas=30; | |
casasclose=195; | |
} | |
// Caso nem fácil nem avançado seja selecionado, e sim personalizado, os valores são definidos normalmente integrando o valor no endereço das variáveis definidas acima. | |
tamx-=0; | |
tamy-=1; // Correção de um bug na hora da criação da matriz. | |
if(casasclose == 0) casasclose=(tamx*(tamy+1))-minas; | |
//Definir Valores da Matriz NORMAL como -1 (NULO) | |
for(a=0;a<=tamx;a++) | |
for(b=0;b<=tamy;b++) | |
icon[a][b]=-1; // Como o valor 0 representa um espaço vazio, sem valor, utilizamos o -1 para representar uma casa fechada ainda. | |
minasreg=gera_bomba(); // Aqui é chamada a função que gera as minas no tabuleiro. A variável minasreg recebe quantas bombas forão inseridas com sucesso. | |
do { // Do faz com que a matriz seja redesenhada todas as vezes que o usuário entrar com uma tecla de ação, a menos que o jogo seja finalizado. | |
//loser=0; // Define a variável que indica que o usuário perdeu como 0. | |
definir_cor(240); | |
limpar(); | |
printf("\n "); | |
printf("%c",201); | |
// Criação do "Placar" Que exibe algumas informações para o usuário durante o jogo. | |
for(a=0;a<29;a++) printf("%c",205); | |
printf("%c",187); | |
printf("\n %c ",186); | |
definir_cor(249); | |
printf("Bandeiras Disponiveis: %d ",minasreg-bandcount,186); // Informa para o usuário quantas bandeiras ainda pode inserir. | |
definir_cor(240);; | |
if(minasreg-bandcount <= 9) printf(" %c\n %c ",186,186); | |
else printf(" %c\n %c ",186,186); | |
definir_cor(249); | |
printf("Bombas em Jogo: %d ",minasreg,186); // Infoirma ao usuário quantas bombas estão em jogo. | |
definir_cor(240); | |
if(minasreg <= 9) printf(" %c\n %c ",186,186); | |
else printf(" %c\n %c ",186,186); | |
definir_cor(249); | |
if(casasclose <= 9) printf("Casas sem Bomba: %d ",casasclose); // Informa para o usuário quantas casas ainda faltam abrir. | |
if(casasclose <= 99 && casasclose > 9) printf("Casas sem Bomba: %d ",casasclose); | |
if(casasclose > 99) printf("Casas sem Bomba: %d ",casasclose); | |
definir_cor(240); | |
if(casasclose <= 9) printf(" %c\n %c",186,200); | |
if(casasclose <= 99 && casasclose > 9) printf("%c\n %c",186,200); | |
if(casasclose > 99) printf("%c\n %c",186,200); | |
for(a=0;a<29;a++) printf("%c",205); | |
printf("%c",188); | |
printf("\n\n"); | |
definir_cor(135); | |
for(a = 0; a <= tamx; a++) // Inicia o Desenho do Tabuleiro. (LINHA) | |
{ | |
definir_cor(240); | |
if (a > 0) ordema++; // Valor Inicial é 64 Gera os "numeros" de ordem que se tornaram letras, para as laterais do tabuleiro. | |
if(dif == 1 && a > 0) printf(" %c ",ordema); | |
if(dif != 1 && a > 0) printf(" %c ",ordema); | |
definir_cor(135); | |
if (a > 0) printf("|"); | |
for(b = 0; b <= tamy; b++) // Desenho do Tabuleiro (COLUNA) | |
{ | |
ordemb++; // Gera os "numeros" de ordem que se tornaram letras, para a parte superior do tabuleiro. | |
definir_cor(240); | |
if(a == 0 && dif == 1 && b == 0) printf(" %c",ordemb); | |
if(a == 0 && dif != 1 && b == 0) printf(" %c",ordemb); | |
if(a == 0 && dif == 1 && b > 0) printf(" %c",ordemb); | |
if(a == 0 && dif != 1 && b > 0) printf(" %c",ordemb); | |
definir_cor(135); | |
if (a > 0) { | |
ctrl=0; | |
// Verifica se o Quadrado está aberto, para mudar a sua "cor de fundo" | |
if(icon[a][b] >= 0 && icon[a][b] <= 9) definir_cor(119); | |
else definir_cor(135); | |
printf("_"); | |
definir_cor(135); | |
if(icon[a][b] == 63) { // Insere o Caractere ? na Matriz. | |
definir_cor(142); | |
printf("%c",63); | |
definir_cor(135); | |
ctrl+=2; | |
} | |
if(icon[a][b] == 383) { // Insere o Caractere Indicando a Bandeira no Código. | |
definir_cor(138); | |
printf("%c",383); | |
definir_cor(135); | |
ctrl+=2; | |
} | |
if(icon[a][b] >= 0 && icon[a][b] <= 8) { // Insere o Numero de Referência a Quadrados abertos ou espaço vazio no código. | |
definir_cor(127); | |
if(icon[a][b] > 0) printf("%d",icon[a][b]); // Caso a casa não seja vazia, insere o numero de referência. | |
else | |
printf(" "); | |
definir_cor(135); | |
ctrl+=2; | |
} | |
if(icon[a][b] == 9 || loser == 1) { // Caso o usuário abra uma bomba, é exibido um X vermelho para ele. | |
if((loser == 1 && mines[a][b]==1) || icon[a][b] == 9) { | |
definir_cor(124); | |
printf("X",icon[a][b]); | |
definir_cor(135); | |
ctrl+=2; | |
//loser+=1; // E o mesmo irá para a tela que o informa sua derrota. | |
} } | |
if(icon[a][b] >= 0 && icon[a][b] <= 9) definir_cor(119); | |
else definir_cor(135); | |
if(icon[a][b] == -1 || a != px || b != py) printf("_"); // Caso a seta de navegação não esteja no campo em questão, o terceiro caractere é um _ | |
definir_cor(135); | |
//printf("%d %d",px,py); | |
if(a == px && b == py) // Caso a seta de navegação ESTEJA no campo em questão, o terceiro caractere é uma Seta. | |
{ | |
if(icon[a][b] >= 0 && icon[a][b] <= 9) definir_cor(127); | |
else definir_cor(143); | |
printf("%c",539); | |
definir_cor(135); | |
ctrl+=1; | |
} | |
if(ctrl == 0) printf("_"); // Caso não haja nada aberto no campo em questão, o 3º _ é inserido indicando casa vazia ou branca. | |
printf("|"); | |
} | |
} | |
printf("\n"); // Pula para a Proxima linha do Tabuleiro. | |
} | |
ordema=64; // Código inicial para a letra a na tabela ascii. | |
ordemb=64; // Código inicial para a letra a na tabela ascii. | |
definir_cor(240); | |
printf("\n # Informe a Linha e em Seguida a Coluna ou Pressione uma Tecla de A%c%co: ",135,198); | |
tecla=esperar_tecla(); // é Aguardado o precionamento de uma tecla pelo usuário. | |
a=0; | |
b=0; | |
acertos=0; | |
do { | |
for(a=0;a<=tamx;a++) // 2 FORs para varrerem a matriz buscando quantas bombas o usuário acertou, utilizando a bandeira. | |
for(b=0;b<=tamx;b++) | |
if(mines[a][b] == 1 && icon[a][b]==383) acertos++; // A Variável acertos é incrementada sempre que acontecer. | |
} while (acertos < bandcount && (a < tamx && b < tamy)); | |
} while(tecla != 0); // Redesenha o tabuleiro se a tecla '0' ou uma ação não acontecer. | |
} | |
} | |
// END. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment