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)