Jogo Campo Minado
Publicado por Eduardo Paim Silveira (última atualização em 09/04/2010)
[ Hits: 22.165 ]
Homepage: http://saidecimadomuro.blogspot.com
Jogo do Campo Minado em C, 8x8, com possibilidade de escolher o número de bombas e contador de bombas.
// CampoMinado.cpp // Eduardo "TheDrummer" Silveira #include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <time.h> void preenche_pos (int mat[10][10]) { short l,c; for(l=0; l<10; l++) for(c=0; c<10; c++) mat[l][c] = 5; } short escolhe_posicao (short pos) { do{ printf ("Digite uma posicao para abrir(1 a 8): "); scanf ("%hd",&pos); fflush (stdin); if (pos < 0 || pos > 8) printf ("\nValor invalido!\n"); }while(pos < 0 || pos > 8); return pos; } int conta_minas (int pos[10][10],int minas) { int espacos=0; short l,c; for(l=1; l<9; l++) for(c=1; c<9; c++) if (pos[l][c] != 1) espacos++; return (espacos-minas); } void mostra (int mat[10][10],int pos[10][10]) { short l,c; printf ("\n 1 2 3 4 5 6 7 8"); for(l=0; l<10; l++){ if (l > 0 && l < 9) printf ("\n%hd ",l); else printf (" \n"); for(c=0; c<10; c++) printf((l == 0 && c == 0 || l == 9 && c == 0) ? " + " : (l == 0 || l == 9 || c == 0 || c == 9) ? "+ " : (pos[l][c] == 0 || pos[l][c] == 1) ? "%d " : "? ",mat[l][c]); } printf ("\n"); } void mostra_aberto (int mat[10][10]) { short l,c; printf ("\n 1 2 3 4 5 6 7 8"); for(l=0; l<10; l++){ if (l > 0 && l < 9) printf ("\n%hd ",l); else printf (" \n"); for(c=0; c<10; c++) printf((l == 0 && c == 0 || l == 9 && c == 0) ? " + " : (l == 0 || l == 9 || c == 0 || c == 9) ? "+ " : (mat[l][c] == 9) ? "* " : "%d ",mat[l][c]); } printf ("\n"); } void abre_vazios (int cm[10][10],int pos[10][10],short l, short c) { short x,y; bool continua; do{ for (x = l - 1; x <= l + 1; x++) for (y = c - 1; y <= c + 1; y++){ continua = false; if (pos[x][y] != 1){ continua = true; pos[x][y] = 1; if (cm[x][y] == 0) abre_vazios(cm,pos,x,y); } } }while(continua); } void posicao (int cm[10][10], int minas) { int pos[10][10],sem_minas=64-minas; short l=0,c=0; preenche_pos(pos); do{ printf ("\nUse a posicao 0,0 para sair.\n"); printf ("\nLinha: "); l = escolhe_posicao(l); printf ("\nColuna: "); c = escolhe_posicao(c); if (l == 0 && c == 0){ exit(0); } else if (pos[l][c] == 1 || pos[l][c] == 0 && l != 0 && c != 0) printf ("\nEsta posicao ja esta aberta!\n"); else if (cm[l][c] == 9){ pos[l][c] = 0; printf ("\nVoce atingiu uma bomba!\n"); mostra_aberto(cm); break; } else if (cm[l][c] == 0){ pos[l][c] = 1; abre_vazios(cm,pos,l,c); mostra(cm,pos); sem_minas = conta_minas(pos,minas); printf ("\nRestam %d espacos sem bomba.\n",sem_minas); } else { pos[l][c] = 1; mostra(cm,pos); sem_minas = conta_minas(pos,minas); printf ("\nRestam %d espacos sem bomba.\n",sem_minas); } }while(sem_minas != 0); if (sem_minas == 0) printf ("\nParabens! Voce ganhou!\n"); } void calcula (int mat[10][10]) { short l,c,x,y; for(l=0; l<10; l++) for(c=0; c<10; c++) if (mat[l][c] == 9) for (x = l - 1; x <= l + 1; x++) for (y = c - 1; y <= c + 1; y++) if (mat[x][y] != 9) mat[x][y] += 1; } void gerador (int mat[10][10],int minas) { short l,c,cont=0; int gerado; srand(time(NULL)); do{ gerado = rand() % 8 + 1; l = gerado; gerado = rand() % 8 + 1; c = gerado; if (mat[l][c] != 9){ mat[l][c] = 9; cont++; } }while (cont < minas); } void preenche (int mat[10][10]) { short l,c; for(l=0; l<10; l++) for(c=0; c<10; c++) mat[l][c] = ((l == 0 || l == 9 || c == 0 || c == 9) ? '+' : 0); } void main () { int cm[10][10],minas; short l,c; do{ printf ("Digite a quantidade de minas (1 ate 60): "); scanf ("%d",&minas); fflush (stdin); if (minas < 1 || minas > 60) printf ("\nValor invalido!\n\n"); }while(minas < 1 || minas > 60); preenche(cm); gerador(cm,minas); calcula(cm); posicao(cm,minas); getchar(); }
Full linux c++ implementation of conio.h (conio.h para linux)
Conhecendo atributos do Ncurses
Conio.h para Linux (Nova versão)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Mensagem quando tento fazer o apt update && apt upgrade no kal... (2)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta