#include #include #include #include #define MAX_board_settingEN 18 #define NUM_LOG_ITEM 5 #define LOG_SIZE 18*18/2+1 #define TRUE 1 #define FALSE 0 #define BOARD_SETTING_ITEM 3 #define PEN -10 /*2D array to store every move and score*/ int move_log[NUM_LOG_ITEM][MAX_board_settingEN*MAX_board_settingEN/2+1]; /*Playing board, stored in int type*/ int board[MAX_board_settingEN][MAX_board_settingEN]; int R,C,T; //number of rows, columns and tiles /*stores x_board_setting, y_board_setting, and number of tiles respectively*/ int board_setting[BOARD_SETTING_ITEM]; void seed(); int ram_int_generate(); void user_play (int **board, int *board_setting, int **move_log); int move(int **board, int **arr, int *board_setting, int p); int is_cross(int **board, int a, int b, int c); int is_down(int **board, int a, int b, int c); int finish(int **board, int *board_setting); int no_move(int **board, int **move_log, int *board_setting); void final_display(int **move_log); //[NUM_LOG_ITEM][(MAX_board_settingEN-2)*MAX_board_settingEN/2+1]); /**** * Create Board: * Call random_int_generate to obtain random number. * Fill in the array passed in with random letter. * create random letter with equation: * "((ram_int_generate()*x-y+ram_int_generate())" **/ void create_board() { int r,c; for (r= 0; r < R; r++) for (c = 0; c < C; c++) { double rnd = ((double)rand()) / (RAND_MAX+1.0); board[r][c] = 65 + (int)(T*rnd); } } /**** * display: * Display the playing board. **/ void display() { int r,c; printf("\nBoard state\n\n"); for (r=0; r c){ b = c; c = temp; } for (i = b + 1; i < c; i++){ if (board[a][i] == 0) count++; } if (count == c - b - 1) return TRUE; return FALSE; } int is_down (int **board, int a, int b, int c){ int i, count = 0, temp = b; if(b > c){ b = c; c = temp; } for (i = b + 1; i < c; i++){ if (board[i][a] == 0) count++; } if (count == c - b - 1) return TRUE; return FALSE; } int finish(int **board, int *board_setting){ int col = board_setting[0] + 2, row = board_setting[1] + 2, i, j; int flag = FALSE; for (i = 0; i < row; i++){ for (j = 0; j < col; j++){ if (board[i][j] != 0) return flag; } } flag = TRUE; return flag; } /**** * final_display: * display result of the game. **/ void final_display(int **move_log){ int i, total_score = 0; /*Sums the score*/ for(i = 0 ; i < ((MAX_board_settingEN-2)*MAX_board_settingEN/2+1); i++){ total_score+= move_log[4][i]; } printf("\nGame Result:\n\n"); printf(" Move Score\n"); /*Display the table*/ for (i = 0; move_log[0][i]!= 0; i++){ printf(" ( %d,%d ) ( %d,%d ) %d \n",move_log[0][i], move_log[1][i] , move_log[2][i], move_log[3][i], move_log[4][i]); } printf("\n\nThe total score is %d\n",total_score); } // Stub added by Aly int no_move(int **board, int **move_log, int *board_setting) { return 0; } int main() { int mode_option; srand((unsigned) time(NULL)); /*Get mode, re-enter if input is not valid*/ do{ printf ("Please select method of generating playing board\n"); printf ("Enter 0 for random generated \nEnter 1 for file input\n"); scanf ("%d", &mode_option); } while (mode_option != 1 && mode_option != 0); /*Assertion: random mode*/ if ( mode_option == 0 ){ /*Get board_settingensions, re-enter if input is not valid*/ do{ printf("Please enter R and C sizes of the playing board respectively\n"); printf("Note: Please enter integer no larger than 18 and no less than 8\n"); scanf ("%d %d",&R,&C); } while (R < 8 || C < 8 || R > 18 || C > 18); /*Get number of tiles, re-enter if input is not valid*/ do{ printf("Please enter number of different tiles\n"); printf("Note: Please enter integer no larger than 12 and no less than 8\n"); scanf ("%d",&T); } while(T < 8 || T > 12); create_board(); } if ( mode_option == 1 ){ FILE *input; int r,c; char filename[13]; printf("\n\n Please enter a file name (xxxxxx.yy):"); scanf ("%s",&filename); if((input = fopen(filename, "r")) == NULL ){ printf("Filename Invalid"); exit (-1); } fscanf(input, "%d", &R); fscanf(input, "%d", &C); fscanf(input, "%d", &T); for (c = C; c > 0 ; c-- ){ for (r = 0 ; r < R; r++){ fscanf(input, "%c", board[r][c]); } } } display(); return 0; }