I'm in the process of recreating minesweeper in C. This is what I have so far, it's not complete i'm still testing it out. I am haveing a big problem with the floodfill which is ment to turn all the corrosponding cells that should be revealed to 1. Currently I have it displaying the bombs map then the hidden cells so I can see how it's working till I finish the program. Can you help me out with the errors that I am getting.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct ms{
int bombs;
int uncovered;
int printvalue;
} field[9][9];
int floodfill(struct ms field[][], int, int);
int main (void)
{
int b,i,o;
srand(time(NULL));
for(b=0;b<10;b++){
i=rand()%9;
o=rand()%9;
if (field[i][o].bombs == 42)b--;
field[i][o].bombs = 42;
}
for (i=0;i<9;i++){
for(o=0;o<9;o++){
if (field[i][o].bombs != 42){
field[i][o].bombs = 48;}}
}
/*outer bonds, courners, 00, 80, 08, 88*/
if (field[0][0].bombs == 42){if (field[1][0].bombs != 42)field[1][0].bombs++; if (field[1][1].bombs != 42)field[1][1].bombs++; if (field[0][1].bombs != 42)field[0][1].bombs++;}
if (field[0][8].bombs == 42){if (field[0][7].bombs != 42)field[0][7].bombs++; if (field[1][7].bombs != 42)field[1][7].bombs++; if (field[1][8].bombs != 42)field[1][8].bombs++;}
if (field[8][0].bombs == 42){if (field[7][0].bombs != 42)field[7][0].bombs++; if (field[7][1].bombs != 42)field[7][1].bombs++; if (field[8][1].bombs != 42)field[8][1].bombs++;}
if (field[8][8].bombs == 42){if (field[7][7].bombs != 42)field[7][7].bombs++; if (field[7][8].bombs != 42)field[7][8].bombs++; if (field[8][7].bombs != 42)field[8][7].bombs++;}
/*Sides left*/
for(i=1;i<8;i++){
if (field[i][0].bombs == 42){
if (field[i-1][0].bombs != 42)field[i-1][0].bombs++;
if (field[i+1][0].bombs != 42)field[i+1][0].bombs++;
if (field[i][1].bombs != 42)field[i][1].bombs++;
if (field[i+1][1].bombs != 42)field[i+1][1].bombs++;
if (field[i-1][1].bombs != 42)field[i-1][1].bombs++;
}
}
/*Side Right*/
for(i=1;i<8;i++){
if (field[i][8].bombs == 42){
if (field[i-1][8].bombs != 42)field[i-1][8].bombs++;
if (field[i+1][8].bombs != 42)field[i+1][8].bombs++;
if (field[i][7].bombs != 42)field[i][7].bombs++;
if (field[i+1][7].bombs != 42)field[i+1][7].bombs++;
if (field[i-1][7].bombs != 42)field[i-1][7].bombs++;
}
}
/*Top wall*/
for(o=1;o<8;o++){
if (field[0][o].bombs == 42){
if (field[0][o-1].bombs != 42)field[0][o-1].bombs++;
if (field[0][o+1].bombs != 42)field[0][o+1].bombs++;
if (field[1][o].bombs != 42)field[1][o].bombs++;
if (field[1][o-1].bombs != 42)field[1][o-1].bombs++;
if (field[1][o+1].bombs != 42)field[1][o+1].bombs++;
}
}
/*Bottom wall*/
for(o=1;o<8;o++){
if (field[8][o].bombs == 42){
if (field[8][o-1].bombs != 42)field[8][o-1].bombs++;
if (field[8][o+1].bombs != 42)field[8][o+1].bombs++;
if (field[7][o].bombs != 42)field[7][o].bombs++;
if (field[7][o-1].bombs != 42)field[7][o-1].bombs++;
if (field[7][o+1].bombs != 42)field[7][o+1].bombs++;
}
}
/*for i = 1-8 and o = 1-8, inner bonds*/
for (i=1;i<8;i++){
for (o=1;o<8;o++){
if (field[i][o].bombs == 42){
if (field[i-1][o].bombs != 42)field[i-1][o].bombs++;
if (field[i+1][o].bombs != 42)field[i+1][o].bombs++;
if (field[i-1][o+1].bombs != 42)field[i-1][o+1].bombs++;
if (field[i][o+1].bombs != 42)field[i][o+1].bombs++;
if (field[i+1][o+1].bombs != 42)field[i+1][o+1].bombs++;
if (field[i-1][o-1].bombs != 42)field[i-1][o-1].bombs++;
if (field[i][o-1].bombs != 42)field[i][o-1].bombs++;
if (field[i+1][o-1].bombs != 42)field[i+1][o-1].bombs++;
}
}
}
printf("\n\n\t*******************\n\t* MineSweeper *\n\t*******************\n");
printf("\n\t 0 1 2 3 4 5 6 7 8\n\t -----------------\n");
for(i=0;i<9;i++)printf("\t%d|%c %c %c %c %c %c %c %c %c|\n", i, field[i][0].bombs,field[i][1].bombs,field[i][2].bombs,field[i][3].bombs,field[i][4].bombs,field[i][5].bombs,field[i][6].bombs,field[i][7].bombs,field[i][8].bombs);
printf("\t -----------------");
printf("\n\nEnter Coordinates Values: ");
scanf("%d %d", &i, &o);
field[i][o].uncovered = 1;
floodfill(field, i, o);
if (field[i][o].bombs == 42){printf("\nBOOM!!! Game Over, you hit a bomb.\n"); return 0;}
/*compaire*/
for(i=0;i<9;i++){
for(o=0;o<9;o++){
if (field[i][o].uncovered == 1)field[i][o].printvalue = field[i][o].bombs;
if(field[i][o].uncovered== 0)field[i][o].printvalue = 45;
}
}
printf("\n\t 0 1 2 3 4 5 6 7 8\n\t -----------------\n");
for(i=0;i<9;i++)printf("\t%d|%c %c %c %c %c %c %c %c %c|\n", i, field[i][0].printvalue,field[i][1].printvalue,field[i][2].printvalue,field[i][3].printvalue,field[i][4].printvalue,field[i][5].printvalue,field[i][6].printvalue,field[i][7].printvalue,field[i][8].printvalue);
printf("\t -----------------");
return 0;
}
int floodfill(struct ms field[][], int i, int o){
if((i<0) || (o<0) || (i>8) || (o>8)){
return 0;
}
if(field[i][o].bombs = 42){
return 0;
}
field[i][o].uncovered = 1;
floodFill(field, i-1, o);
floodFill(field, i, o-1);
floodFill(field, i, o+1);
floodFill(field, i+1, o);
return 0;
}
Here are the errors that I am recieving:
Code:
--------------------Configuration: ms2 - Win32 Debug--------------------
Compiling...
ms2.c
C:\programming\ms2.c(11) : error C2087: '<Unknown>' : missing subscript
C:\programming\ms2.c(101) : warning C4048: different array subscripts : 'struct ms (*)[1]' and 'struct ms [9][9]'
C:\programming\ms2.c(101) : warning C4024: 'floodfill' : different types for formal and actual parameter 1
C:\programming\ms2.c(124) : error C2087: '<Unknown>' : missing subscript
C:\programming\ms2.c(134) : warning C4013: 'floodFill' undefined; assuming extern returning int
Error executing cl.exe.
ms2.exe - 2 error(s), 3 warning(s)