Code:
# include <stdio.h>
# include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#define WHITE 'w'
#define BLACK 'b'
static int numRows;
static int numCols;
static int whiteCount=0;
static int blackCount=0;
static int numMoves=0;
static char *ptr, *tmp = NULL;
static char *passer = NULL;
void printMatrix(char * addr,int a, int b);
void initializeMatrix(char * addr, int a, int b);
void putwhite(char * addr, int num);
int main (void)
{
int r,w,second;
char first;
bool defaultMatrix = false;
bool incorrectWhiteEntry = false;
bool incorrectBlackEntry = false;
bool gameFinish = false;
bool allOK = false;
int memCount = 0;
char str[10];
int temp;
printf("Enter the num of rows: ");
scanf("%d", &numRows);
printf("Enter the num of cols: ");
scanf("%d", &numCols);
if(defaultMatrix || numRows >19 || numCols >19)
{
printf("Matrix Size is: %i x %i \n", numRows, numCols);
printf("Defaulting the matrix to 10 x 10 \n");
numRows = 10;
numCols = 10;
allOK = true;
}
else
{
//printf("test");
printf("Matrix Size is: %i x %i \n", numRows, numCols);
allOK = true;
}
ptr = malloc(numRows*numCols);
tmp = memset (ptr, '\0', numRows*numCols);
//printf("test");
if(tmp == NULL)
{
printf("Could not associate Dynamic Memory. Error !! Exiting...\n");
return 0;
}
else
{
ptr = tmp;
}
if(allOK)
{
char othelloMatrix[numRows - 1][numCols - 1];
}
passer = &(*ptr);
initializeMatrix(passer, numRows,numCols);
printMatrix(passer, numRows, numCols);
//printf("test1");
while(!gameFinish)
{
for(memCount = 0; memCount < numRows*numCols; memCount++)
{
if(ptr[memCount] = '\0')
gameFinish = false;
else
gameFinish = true;
}
printf("White Player enter your matrix row :");
scanf("%s", &first);
printf("White Player enter your matrix col :");
scanf("%d", &second);
//printf("%i % i", first ,second);
if(first - 96 > numRows || second > numCols)
{
incorrectWhiteEntry = true;
}
else
{
incorrectWhiteEntry = false;
}
while(incorrectWhiteEntry)
{
printf("White Player enter your matrix row :");
scanf("%s", &first);
printf("White Player enter your matrix col :");
scanf("%d", &second);
if(first - 96 > numRows || second > numCols)
{
incorrectWhiteEntry = true;
}
else
{
incorrectWhiteEntry = false;
}
}
//printf("test");
//printf("White player entered at %cx%i \n",first,(numCols-1)*(first -96 -1) + (second -1)+ *ptr);
for(temp = 0; temp < numRows*numCols; temp++)
{
printf("temp %c", ptr[temp]);
}
printf("test %i %i %i",second, first-96, (numCols -1)*(first -96 ) + (second-1) );
putwhite(passer, (numCols-1)*(first -96 -1) + (second-1));
printMatrix(passer, numRows, numCols);
}
int d;
scanf("%d", &d);
free(ptr);
return 1;
}
void putwhite(char *addr, int num)
{
char * mtrxPtr;
mtrxPtr = addr;
mtrxPtr[num] = WHITE;
whiteCount++;
numMoves++;
}
void initializeMatrix(char *addr, int a, int b)
{
int firstw,firstb,secondw,secondb = 0;
char * mtrxPtr;
mtrxPtr = addr;
//printf("address is:");
firstw = ((b* (a/2 -1)) + (b/2 -1));
firstb = ((b* (a/2-1)) + (b/2));
secondb = ((b* (a/2)) + (b/2-1));
secondw = ((b* (a/2)) + (b/2));
mtrxPtr[firstw] = WHITE;//white;
mtrxPtr[firstb] = BLACK;//blacke;
mtrxPtr[secondw] = WHITE;//white;
mtrxPtr[secondb] = BLACK;//black;
//mtrxPtr[test+1] = black;
}
void printMatrix(char *addr, int a, int b)
{
int i,j = 0;
char * mtrxPtr;
mtrxPtr = addr;
system("clear");
//printf("rt");
for(i=0;i<= a; i ++)
{
printf(" %i |",i);
}
printf("\n");
for(i=0;i<= a; i ++)
{
printf("-----");
}
printf("\n");
i = 1;
for(j=1; j <= b; j++)
{
printf(" %c |",(j+96));
for(i = 1; i <=a; i ++)
{
if(mtrxPtr[b*(i-1) + (j -1)] == '\0')
printf(" |");
else
printf(" %c |",mtrxPtr[b*(i -1)+ (j-1)]);
}
printf("\n");
for(i=0;i<= a; i ++)
{
printf("-----");
}
printf("\n");
}
//}
}
my problem is that i cannot seem to save the value of ptr pointer.... every time i reference it the value seems to reset. after the initializatin it should have 2w's and 2b's in it.. but when i try and print it. it comes as empty... the entry is int for rows and cols...ne ideas ??