leoflores
(usa Linux Mint)
Enviado em 03/06/2015 - 10:45h
FIZ E TA DANDO UM ERRO E NAO TO CONSEGUINDO RESOLVER, ALGUEM AJUDA PF
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include<stdint.h>
#include<stdio.h>
#define MAX 1000
typedef struct campominado{
int Matriz[15][15];
int MatrizB[15][15];
char recorde[10];
double tempo;
int bombas;
}
Minas;
Minas campo[MAX];
int Menu2(){
int escolha=0;
do{
fflush(stdin);
scanf("%d",&escolha);
if(escolha<1 || escolha>3)
printf("Opcao Invalida entre com outra.\n");
}
while(escolha<1 || escolha>3);
return escolha;
}
int main(){
int opcao;
do{
fflush(stdin);
scanf("%d",&opcao);
if(opcao<1 || opcao>2)
printf("Opcao Invalida entre com outra.\n");
}while(opcao>1 || opcao<4);
return opcao;
}
int menu1() {
int opcao=0;
printf(" _______________________________________\n");
printf("|\t\t\t\t\t|\n");
printf("|\tBem vindo ao campo minado !!\t|\n");
printf("|\tO que deseja fazer \t\t|\n");
printf("|\t1-Jogar 2-Sair 3-Recorde\t|\n");
printf("|_______________________________________|\n\n");
opcao=Menu2();
return opcao;
}
char intChar(int i) {
switch (i) {
case 0: return '0';
case 1: return '1';
case 2: return '2';
case 3: return '3';
case 4: return '4';
case 5: return '5';
case 6: return '6';
case 7: return '7';
case 8: return '8';
}
}
void Imprime(int cont){
int i,j,lin,col;
printf("\t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
for(i=1;i<=15;i++){
printf("%d",i);
printf("\t");
for( j=1;j<=15;j++)
printf("[%c]",campo[cont].Matriz[i][j]);
printf("\n");
}
printf("\n[#]vazio\t[3]Bombas ao redor\t[-]Nao visitado\n[BB]BOMBA\t99-Sair\n\n");
}
void verificaVizinhanca(int i){
int qntbombas,lin,col;
for(lin=1;lin<11;lin++){
for(col=1;col<11;col++){
qntbombas=0;
if(campo[i].MatrizB[lin][col+1]==9)
qntbombas++;
if(campo[i].MatrizB[lin][col-1]==9)
qntbombas++;
if(campo[i].MatrizB[lin+1][col]==9)
qntbombas++;
if(campo[i].MatrizB[lin-1][col]==9)
qntbombas++;
if(campo[i].MatrizB[lin-1][col+1]==9)
qntbombas++;
if(campo[i].MatrizB[lin-1][col-1]==9)
qntbombas++;
if(campo[i].MatrizB[lin+1][col+1]==9)
qntbombas++;
if(campo[i].MatrizB[lin+1][col-1]==9)
qntbombas++;
if(campo[i].MatrizB[lin][col]!=9)
campo[i].MatrizB[lin][col]=qntbombas;
}
}
}
int verificaCasas(int i, int n, int livres,int c){
if((campo[c].MatrizB[i][n]>0)||(campo[c].MatrizB[i][n]==-1)||(campo[c].MatrizB[i][n]==9)){
return livres;
}else{
livres++;
campo[c].Matriz[i][n]=' ';
campo[c].MatrizB[i][n]=-1;
livres = verificaCasas(i+1,n,livres,c);
livres = verificaCasas(i-1,n,livres,c);
livres = verificaCasas(i,n+1,livres,c);
livres = verificaCasas(i,n-1,livres,c);
return livres;
}
}
void Sorteio(int c){
int lin,col,arm,qnt=0;
srand(time(NULL));
do{
do{
lin=rand()%9+1;
col=rand()%9+1;
if(campo[c].MatrizB[lin][col]==9){
arm=-1;
}else{
campo[c].MatrizB[lin][col]=9;
arm=0;
}
}while(arm==-1);
qnt++;
}while(qnt<campo[c].bombas);
}
void inicializa(int cont){
int i,j;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
campo[cont].MatrizB[i][j]=-1;
for( i=0;i<15;i++)
for( j=0;j<15;j++)
campo[cont].Matriz[i][j]='-';
for(i=1;i<15;i++)
for(j=1;j<15;j++)
campo[cont].MatrizB[i][j]=0;
}
void LER(FILE *f,int cont){
int i;
for(i=0;i<cont;i++){
fread(&campo[i], sizeof(LER),1,f);
}
}
void SalvaRecorde(int cont){
do{
fflush(stdin);
printf("\nEntre com o Nome do Jogador!!\n");
gets (campo[cont].recorde);
}while(campo[cont].recorde[0]=='\0');
}
void Salva(FILE *f,int cont){
int i;
printf("\nSalvando informacoes...\n");
fflush(f);
rewind(f);
fwrite(&cont,sizeof(int),1,f);
for(i=0;i<cont;i++){
fwrite(&campo[i],sizeof(LER),1,f);
}
fflush(f);
fclose(f);
printf("Informacoes salvas com sucesso.\n");
system("pause");
}
void ImprimeRecorde(int cont){
int i;
for(i=0;i<cont;i++){
if(campo[i].recorde[0]!='\0'){
printf("nome: %s\n",campo[i].recorde);
printf("tempo: %f segundos\n",campo[i].tempo);
printf("bombas: %d\n",campo[i].bombas);
}
}
}
void ImprimeBombas(int cont){
int lin,col;
for(lin=1;lin<=10;lin++){
for(col=1;col<=10;col++){
if(campo[cont].MatrizB[lin][col]==9){
campo[cont].Matriz[lin][col]='#';
}
}
}
Imprime(cont);
system("pause");
}
int cor (int argc, char *argv[]){
int cont=0, opcao, lin, col, qnt=0, escolha, resto, total;
char cell;
system("color 0f");
FILE *f;
if((f=fopen("CampoMinado.dat","r+b"))==NULL){
printf("\nComo nao existe um arquivo de dados o programa ira criar um\n");
if((f=fopen("CampoMinado.dat","w+b"))==NULL){
printf("\nErro na leitura do arquivo.\n");
exit(1);
}
else
printf("\nArquivo criado com sucesso.\n");
}
else
printf("\nArquivo aberto com sucesso.\n");
system("pause");
system("cls");
rewind(f);
fread(&cont,sizeof(int),1,f);
LER(f,cont);
opcao=menu1();
printf("opcao: %d\n",opcao);
if(opcao==3)
ImprimeRecorde(cont);
while((opcao!=2 && opcao!=3)&& cont<MAX){
inicializa(cont);
clock_t start_time, end_time;
printf("\n\nEscolha a Dificuldade do jogo!!\n\n[1]Facil\t\t[2]Medio\t\t[3]Dificil\n\n");
escolha = Menu2();
system("cls");
start_time = clock();
if(escolha==1)
campo[cont].bombas=10;
else if(escolha==2)
campo[cont].bombas=30;
else
campo[cont].bombas=50;
printf("\t\t BOA SORTE!!\n");
Sorteio(cont);
verificaVizinhanca(cont);
Imprime(cont);
do{
total=100-campo[cont].bombas;
system("color 0f");
do{
do{
fflush(stdin);
printf("Escolha uma linha\n");
scanf("%d",&lin);
}while((lin<1 || lin>10) && lin!=99);
if(lin==99)
break;
do{
fflush(stdin);
printf("Escolha uma coluna\n");
scanf("%d",&col);
}while((col<1 || col>10)&& col!=99);
if(col==99)
break;
escolha = campo[cont].MatrizB[lin][col];
if(campo[cont].Matriz[lin][col]!='-'){
system("cls");
Imprime(cont);
printf("\n\nCampo ja visitado entre com outro!!\n\n");
}
}while(campo[cont].Matriz[lin][col]!='-');
if(lin==99 || col==99)
break;
if(escolha==9){
campo[cont].Matriz[lin][col] ='#';
system("cls");
system("color 2A");
system("color 3C");
system("color 4D");
system("color 1E");
system("color 4B");
Imprime(cont);
printf("\nVOCE PERDEU!!! \n\n\a\a");
system("pause");
system("cls");
ImprimeBombas(cont);
break;
}else if(escolha!=0){
cell= intChar(campo[cont].MatrizB[lin][col]);
campo[cont].Matriz[lin][col] = cell;
system("cls");
Imprime(cont);
qnt++;
}else{
escolha=verificaCasas(lin, col,0,cont);
system("cls");
Imprime(cont);
qnt+=escolha;
}
resto=(100-qnt)-campo[cont].bombas;
printf("\nJogadas restantes: %d\n",resto);
}while(resto>0);
if(lin==99 || col==99)
break;
campo[cont].tempo = (end_time=clock()/600)-start_time/600;
qnt=0;
if(resto==0){
printf("\n\nPARABENS VOCE GANHOU!!\n\n");
system("pause");
system("cls");
ImprimeBombas(cont);
}
printf("Tempo total gasto %.2f segundos\n",campo[cont].tempo);
printf("deseja continuar com o jogo 1- Sim 2-nao\n");
opcao=escolha;
printf("\nDeseja listar Os Records!! \n[1]Sim [2]Nao\n");
escolha=escolha;
system("cls");
printf("%d\n",escolha);
system("cls");
if(escolha==1){
ImprimeRecorde(cont);
}
if(resto==0)
SalvaRecorde(cont);
system("pause");
system("cls");
if(resto==0);
cont++;
}
Salva(f,cont);
return EXIT_SUCCESS;
}