/****************************************************************************** * * * 4 On a line - a old school game with lot of fun * * * * Author: Casper Thede Olsen & Anne Christine Tang * * Date: 20-03-2007 * * Version 0.2 * * * * Purpose: A project in school where we had free hands to write a program. * * * * * * Usage: * * * * License: Open Source - please give some credits if you use some of it. * * * *****************************************************************************/ #include #include char matrix[6][7]; /* board size is [6][7] */ void init_matrix(void); void disp_matrix(void); void get_x_move(void); void get_o_move(void); char check(void); int main(){ char done; /*sets Done to ' ' and interlize the matrix so everything in matrix to ' '*/ init_matrix(); done = ' '; do { disp_matrix(); get_x_move(); done = check(); if(done != ' ') break; disp_matrix(); get_o_move(); done = check(); } while(done == ' '); printf("done is %c\n", done); disp_matrix(); system("PAUSE"); } /* Sub rutines section under here */ /* Initialize the matrix. */ void init_matrix(void) { int i; int j; for(i=0; i<6;i++) for(j=0; j<7; j++) matrix[i][j] = ' '; } /* Display the matrix on the screen. */ void disp_matrix(void) { int t; printf(" 1 2 3 4 5 6 7\n|---|---|---|---|---|---|---|\n"); for(t=0; t<6; t++) { printf("| %c | %c | %c | %c | %c | %c | %c |",matrix[t][0], matrix[t][1], matrix [t][2], matrix [t][3], matrix[t][4], matrix [t][5], matrix [t][6]); if(t!=6)printf("\n|---|---|---|---|---|---|---|\n"); } printf("\n"); } /* get X move*/ void get_x_move(void) { /*makes 2 temporarily variables*/ int y; int x; printf("X turn\n"); printf("Enter your move:\n "); scanf("%d", &x); x--; y = 0; printf("debug ID X = %d Y = %d\n", x, y ); /*!DEBUG!*/ if (matrix[y][x] != ' '){ printf("Invalid move, try again.\n"); get_x_move(); } for(y=5; y>=0; y--) { if(matrix[y][x] == ' '){ matrix[y][x] = 'x'; break; } } } /* get O move*/ void get_o_move(void) { /*makes 2 temporarily variables*/ int y; int x; printf("O turn\n"); printf("Enter your move:\n "); scanf("%d", &x); x--; y = 0; printf("debug ID X = %d Y = %d\n", x, y ); /*!DEBUG!*/ if (matrix[y][x] != ' '){ printf("Invalid move, try again.\n"); get_o_move(); } for(y=5; y>=0; y--) { if(matrix[y][x] == ' '){ matrix[y][x] = 'O'; break; } } } /* Check for winners */ char check(void) { int i; int j; for(i=0; i<6; i++) { for(j=0; j<4; j++) { if(matrix[i][j] != ' ' && matrix[i][j] == matrix[i][j+1] && matrix[i][j] == matrix[i][j+2] && matrix[i][j] == matrix[i][j+3]) return matrix[i][j]; } } for(i=0; i<7; i++) { for(j=0; j<3; j++) { if(matrix[j][i] != ' ' && matrix[j][i] == matrix[j+1][i] && matrix[j][i] == matrix[j+2][i] && matrix[j][i] == matrix[j+3][i]) return matrix[j][i]; } } for(i=0; i<4; i++) { for(j=0; j<3; j++) { if(matrix[j][i] != ' ' && matrix[j][i] == matrix[j+1][i+1] && matrix[j][i] == matrix[j+2][i+2] && matrix[j][i] == matrix[j+3][i+3]) return matrix[j][i]; } } /*PROBLEM START*/ for(i=3; i<7; i++) { for(j=0; j<3; j++) { if(matrix[j][i] != ' ' && matrix[j][i] == matrix[j-1][i-1] && matrix[j][i] == matrix[j-2][i-2] && matrix[j][i] == matrix[j-3][i-3]) return matrix[j][i]; } } /*PROBLEM END*/ return ' '; }