Difference between revisions of "Tic Tac Toe"
From GbdevWiki
Line 1: | Line 1: | ||
− | + | <pre> | |
+ | /* | ||
+ | Tic tac Toe is know | ||
+ | as noughts and crosses in the uk | ||
+ | |||
+ | feel free to edit the code to | ||
+ | fix bugs or add gamemodes | ||
+ | */ | ||
+ | #include <stdio.h> | ||
+ | #include <gb/gb.h> | ||
+ | |||
+ | #define MAXX 3 | ||
+ | #define MAXY 4 | ||
+ | |||
+ | unsigned char player; | ||
+ | unsigned char running = 1; | ||
+ | unsigned char name1[10];//player 1's name | ||
+ | unsigned char name2[10]; //player 2's name | ||
+ | unsigned char Map[MAXX][MAXY] = {{46, 46, 46, 10}, | ||
+ | {46, 46, 46, 10}, | ||
+ | {46, 46, 46, 10}};// 46 = "." 10 = '\n | ||
+ | void title(); | ||
+ | void You_Won(); | ||
+ | void clear_screen(); | ||
+ | void check_win();//check if a player has won | ||
+ | void print_Map(); | ||
+ | void Enter_Name(); | ||
+ | void Set_Map(unsigned char x, unsigned char y, unsigned char k); | ||
+ | |||
+ | void title(){ | ||
+ | printf("Noughts and crosses!\n"); | ||
+ | printf(" xoo \n"); | ||
+ | printf(" oxx \n"); | ||
+ | printf(" ..x \n"); | ||
+ | printf(" Press Start \n"); | ||
+ | waitpad(J_START); | ||
+ | clear_screen(); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void You_Won(){ | ||
+ | clear_screen(); | ||
+ | if (player == 1){ | ||
+ | printf("==================\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("= %s WINS!!! \n", name1); | ||
+ | printf("= %s LOSES :( \n", name2); | ||
+ | printf("= =\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("==================\n"); | ||
+ | printf("Press Start to reset!\n"); | ||
+ | waitpad(J_START); | ||
+ | reset(); | ||
+ | } | ||
+ | else{ | ||
+ | printf("==================\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("= %s WINS!!! \n", name2); | ||
+ | printf("= %s LOSES :( \n", name1); | ||
+ | printf("= =\n"); | ||
+ | printf("= =\n"); | ||
+ | printf("==================\n"); | ||
+ | printf("Press Start to reset\n"); | ||
+ | waitpad(J_START); | ||
+ | reset(); | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void check_win(){ | ||
+ | /* | ||
+ | x.. | ||
+ | x.. | ||
+ | x.. | ||
+ | */ | ||
+ | if (Map[0][0] == 88 && Map[1][0] == 88 && Map[2][0] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][0] == 48 && Map[1][0] == 48 && Map[2][0] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | .x. | ||
+ | .x. | ||
+ | .x. | ||
+ | */ | ||
+ | else if (Map[0][1] == 88 && Map[1][1] == 88 && Map[2][1] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][0] == 48 && Map[1][0] == 48 && Map[2][0] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | ..x | ||
+ | ..x | ||
+ | ..x | ||
+ | */ | ||
+ | else if (Map[0][2] == 88 && Map[1][2] == 88 && Map[2][2] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][2] == 48 && Map[1][2] == 48 && Map[2][2] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | xxx | ||
+ | ... | ||
+ | ... | ||
+ | */ | ||
+ | else if (Map[0][0] == 88 && Map[0][1] == 88 && Map[0][2] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][0] == 48 && Map[0][1] == 48 && Map[0][2] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | ... | ||
+ | xxx | ||
+ | ... | ||
+ | */ | ||
+ | else if (Map[1][0] == 88 && Map[1][1] == 88 && Map[1][2] == 88){player = 1;You_Won();} | ||
+ | else if (Map[1][0] == 48 && Map[1][1] == 48 && Map[1][2] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | ... | ||
+ | ... | ||
+ | xxx | ||
+ | */ | ||
+ | else if (Map[2][0] == 88 && Map[2][1] == 88 && Map[2][2] == 88){player = 1;You_Won();} | ||
+ | else if (Map[2][0] == 48 && Map[2][1] == 48 && Map[2][2] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | x.. | ||
+ | .x. | ||
+ | ..x | ||
+ | */ | ||
+ | else if (Map[0][0] == 88 && Map[1][1] == 88 && Map[2][2] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][0] == 48 && Map[1][1] == 48 && Map[2][2] == 48){player = 2;You_Won();} | ||
+ | /* | ||
+ | ..x | ||
+ | .x. | ||
+ | x.. | ||
+ | */ | ||
+ | else if (Map[0][2] == 88 && Map[1][1] == 88 && Map[2][0] == 88){player = 1;You_Won();} | ||
+ | else if (Map[0][2] == 48 && Map[1][2] == 48 && Map[3][2] == 48){player = 2;You_Won();} | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void Set_Map(unsigned char x, unsigned char y, unsigned char k){Map[x][y] = k;return;} | ||
+ | |||
+ | void Enter_Name(){ | ||
+ | unsigned char i = 0; | ||
+ | unsigned char k = 0; | ||
+ | clear_screen(); | ||
+ | printf("Player 1 Enter Your Name\n\"*\" To end\nPress A To Select\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); | ||
+ | while(i <= 10){ | ||
+ | i--; | ||
+ | if(name1[i] == 42){name1[i] = 0;break;} | ||
+ | i++; | ||
+ | name1[i] = getchar(); | ||
+ | printf("Last Character: %c\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", name1[i]); | ||
+ | i++; | ||
+ | } | ||
+ | printf("\nNow Player 2\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); | ||
+ | i = 0; | ||
+ | while(i <= 10){ | ||
+ | i--; | ||
+ | if(name2[i] == 42){name2[i] = 0;break;} | ||
+ | i++; | ||
+ | name2[i] = getchar(); | ||
+ | printf("Last Character: %c\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", name2[i]); | ||
+ | i++; | ||
+ | } | ||
+ | clear_screen(); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void print_Map(){ | ||
+ | unsigned char i; | ||
+ | unsigned char k; | ||
+ | unsigned char c; | ||
+ | for (i = 0;i<MAXX;i++){ | ||
+ | for (k = 0;k<MAXY;k++){ | ||
+ | c = Map[i][k]; | ||
+ | printf("%c", c); | ||
+ | } | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | void clear_screen(){unsigned char i = 0;while (i < 18){printf("\n");i++;}return;} | ||
+ | |||
+ | int main(){ | ||
+ | unsigned char tile_x; | ||
+ | unsigned char tile_y; | ||
+ | player = 1; | ||
+ | title(); | ||
+ | Enter_Name(); | ||
+ | while(running == 1){ | ||
+ | if (player == 1){ | ||
+ | start1: | ||
+ | printf("\n%s\nPlease Enter The\nX Cord\n\n\n\n\n\n\n\n\n\n", name1); | ||
+ | while(1){tile_x = getchar();if (tile_x <= 48 || tile_x > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} | ||
+ | tile_x = tile_x - 48; | ||
+ | printf("Please Enter The\nY Cord\n\n\n\n\n\n\n\n\n\n\n"); | ||
+ | while(1){tile_y = getchar();if (tile_y <= 48 || tile_y > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} | ||
+ | tile_y = tile_y - 48; | ||
+ | tile_x--;tile_y--; | ||
+ | if (Map[tile_x][tile_y] == 48 || Map[tile_x][tile_y] == 88){goto start1;} | ||
+ | Map[tile_x][tile_y] = 88;//X in ASCII | ||
+ | player = 2; | ||
+ | } | ||
+ | else if (player == 2){ | ||
+ | start2: | ||
+ | printf("\n%s\nPlease Enter The\nX Cord\n\n\n\n\n\n\n\n\n\n", name2); | ||
+ | while(1){tile_x = getchar();if (tile_x < 48 || tile_x > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} | ||
+ | tile_x = tile_x - 48; | ||
+ | printf("Please Enter The\nY Cord\n\n\n\n\n\n\n\n\n\n\n"); | ||
+ | while(1){tile_y = getchar();if (tile_y < 48 || tile_y > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} | ||
+ | tile_y = tile_y - 48; | ||
+ | tile_x--;tile_y--; | ||
+ | if (Map[tile_x][tile_y] == 48 || Map[tile_x][tile_y] == 88){printf("\nTile Already Taken!\n\n\n\n\n\n\n\n\n\n\n\n");delay(1300);goto start2;} | ||
+ | Map[tile_x][tile_y] = 48;//0 in ASCII | ||
+ | player = 1; | ||
+ | } | ||
+ | clear_screen(); | ||
+ | print_Map(); | ||
+ | check_win();//check for 3 in a row | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </pre> | ||
+ | --[[User:A cat|A cat]] 18:53, 1 August 2014 (UTC) |
Revision as of 13:53, 1 August 2014
/* Tic tac Toe is know as noughts and crosses in the uk feel free to edit the code to fix bugs or add gamemodes */ #include <stdio.h> #include <gb/gb.h> #define MAXX 3 #define MAXY 4 unsigned char player; unsigned char running = 1; unsigned char name1[10];//player 1's name unsigned char name2[10]; //player 2's name unsigned char Map[MAXX][MAXY] = {{46, 46, 46, 10}, {46, 46, 46, 10}, {46, 46, 46, 10}};// 46 = "." 10 = '\n void title(); void You_Won(); void clear_screen(); void check_win();//check if a player has won void print_Map(); void Enter_Name(); void Set_Map(unsigned char x, unsigned char y, unsigned char k); void title(){ printf("Noughts and crosses!\n"); printf(" xoo \n"); printf(" oxx \n"); printf(" ..x \n"); printf(" Press Start \n"); waitpad(J_START); clear_screen(); return; } void You_Won(){ clear_screen(); if (player == 1){ printf("==================\n"); printf("= =\n"); printf("= =\n"); printf("= %s WINS!!! \n", name1); printf("= %s LOSES :( \n", name2); printf("= =\n"); printf("= =\n"); printf("==================\n"); printf("Press Start to reset!\n"); waitpad(J_START); reset(); } else{ printf("==================\n"); printf("= =\n"); printf("= =\n"); printf("= %s WINS!!! \n", name2); printf("= %s LOSES :( \n", name1); printf("= =\n"); printf("= =\n"); printf("==================\n"); printf("Press Start to reset\n"); waitpad(J_START); reset(); } return; } void check_win(){ /* x.. x.. x.. */ if (Map[0][0] == 88 && Map[1][0] == 88 && Map[2][0] == 88){player = 1;You_Won();} else if (Map[0][0] == 48 && Map[1][0] == 48 && Map[2][0] == 48){player = 2;You_Won();} /* .x. .x. .x. */ else if (Map[0][1] == 88 && Map[1][1] == 88 && Map[2][1] == 88){player = 1;You_Won();} else if (Map[0][0] == 48 && Map[1][0] == 48 && Map[2][0] == 48){player = 2;You_Won();} /* ..x ..x ..x */ else if (Map[0][2] == 88 && Map[1][2] == 88 && Map[2][2] == 88){player = 1;You_Won();} else if (Map[0][2] == 48 && Map[1][2] == 48 && Map[2][2] == 48){player = 2;You_Won();} /* xxx ... ... */ else if (Map[0][0] == 88 && Map[0][1] == 88 && Map[0][2] == 88){player = 1;You_Won();} else if (Map[0][0] == 48 && Map[0][1] == 48 && Map[0][2] == 48){player = 2;You_Won();} /* ... xxx ... */ else if (Map[1][0] == 88 && Map[1][1] == 88 && Map[1][2] == 88){player = 1;You_Won();} else if (Map[1][0] == 48 && Map[1][1] == 48 && Map[1][2] == 48){player = 2;You_Won();} /* ... ... xxx */ else if (Map[2][0] == 88 && Map[2][1] == 88 && Map[2][2] == 88){player = 1;You_Won();} else if (Map[2][0] == 48 && Map[2][1] == 48 && Map[2][2] == 48){player = 2;You_Won();} /* x.. .x. ..x */ else if (Map[0][0] == 88 && Map[1][1] == 88 && Map[2][2] == 88){player = 1;You_Won();} else if (Map[0][0] == 48 && Map[1][1] == 48 && Map[2][2] == 48){player = 2;You_Won();} /* ..x .x. x.. */ else if (Map[0][2] == 88 && Map[1][1] == 88 && Map[2][0] == 88){player = 1;You_Won();} else if (Map[0][2] == 48 && Map[1][2] == 48 && Map[3][2] == 48){player = 2;You_Won();} return; } void Set_Map(unsigned char x, unsigned char y, unsigned char k){Map[x][y] = k;return;} void Enter_Name(){ unsigned char i = 0; unsigned char k = 0; clear_screen(); printf("Player 1 Enter Your Name\n\"*\" To end\nPress A To Select\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); while(i <= 10){ i--; if(name1[i] == 42){name1[i] = 0;break;} i++; name1[i] = getchar(); printf("Last Character: %c\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", name1[i]); i++; } printf("\nNow Player 2\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); i = 0; while(i <= 10){ i--; if(name2[i] == 42){name2[i] = 0;break;} i++; name2[i] = getchar(); printf("Last Character: %c\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", name2[i]); i++; } clear_screen(); return; } void print_Map(){ unsigned char i; unsigned char k; unsigned char c; for (i = 0;i<MAXX;i++){ for (k = 0;k<MAXY;k++){ c = Map[i][k]; printf("%c", c); } } return; } void clear_screen(){unsigned char i = 0;while (i < 18){printf("\n");i++;}return;} int main(){ unsigned char tile_x; unsigned char tile_y; player = 1; title(); Enter_Name(); while(running == 1){ if (player == 1){ start1: printf("\n%s\nPlease Enter The\nX Cord\n\n\n\n\n\n\n\n\n\n", name1); while(1){tile_x = getchar();if (tile_x <= 48 || tile_x > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} tile_x = tile_x - 48; printf("Please Enter The\nY Cord\n\n\n\n\n\n\n\n\n\n\n"); while(1){tile_y = getchar();if (tile_y <= 48 || tile_y > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} tile_y = tile_y - 48; tile_x--;tile_y--; if (Map[tile_x][tile_y] == 48 || Map[tile_x][tile_y] == 88){goto start1;} Map[tile_x][tile_y] = 88;//X in ASCII player = 2; } else if (player == 2){ start2: printf("\n%s\nPlease Enter The\nX Cord\n\n\n\n\n\n\n\n\n\n", name2); while(1){tile_x = getchar();if (tile_x < 48 || tile_x > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} tile_x = tile_x - 48; printf("Please Enter The\nY Cord\n\n\n\n\n\n\n\n\n\n\n"); while(1){tile_y = getchar();if (tile_y < 48 || tile_y > 51){printf("\nEnter a number\nbetween 1 and 9\n\n\n\n\n\n\n\n\n\n\n\n");}else{break;}} tile_y = tile_y - 48; tile_x--;tile_y--; if (Map[tile_x][tile_y] == 48 || Map[tile_x][tile_y] == 88){printf("\nTile Already Taken!\n\n\n\n\n\n\n\n\n\n\n\n");delay(1300);goto start2;} Map[tile_x][tile_y] = 48;//0 in ASCII player = 1; } clear_screen(); print_Map(); check_win();//check for 3 in a row } return 0; }
--A cat 18:53, 1 August 2014 (UTC)