# C language -- game of Sanzi

2020-11-09 12:58:30

## Three chess game

Problem description
3*3 On the chessboard of , As long as three identical pieces appear on a line, you will win （ Players or computers ）; If the chessboard is full and there are no three pieces, a line is drawn .
Specific details

1. Initialize chessboard ( Initialize with spaces )
``````// Initialize chessboard
void initChess(char chessbox[ROW][COL]){

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

chessbox[row][col] = ' ';
}
}
}
``````
1. Print chessboard
``````// Print chessboard
void printChess(char chessbox[ROW][COL]){

system("cls");
printf("+---+---+---+\n");
for (int row = 0; row < ROW; row++){

printf("| %c | %c | %c |\n",
chessbox[row], chessbox[row],
chessbox[row]);
printf("+---+---+---+\n");
}
}
``````
1. Computer move later ( use o It means that the computer is down )
``````// Computer move later ( use o Express )
void computerMove(char chessbox[ROW][COL]){

srand(time(0));
while (1){

int row = rand() % 3;
int col = rand() % 3;
if (chessbox[row][col] == ' '){

chessbox[row][col] = 'o';
break;
}

}
}
``````
1. The player is down
``````// The player is down ( use x Express )
void playerMove(char chessbox[ROW][COL]){

int row, col;
while (1){

scanf("%d %d", &row, &col);
if (row >= 3 || col >= 3){

printf(" The position you entered is wrong , Please re-enter :");
continue;
}
if (chessbox[row][col] == ' '){

chessbox[row][col] = 'x';
break;
}
printf(" There are already pieces in this position , Please re-enter :");
}
}
``````
1. Three pieces, one line
• In a row or column to achieve three pieces of a line
``````// That's ok
for (int row = 0; row < ROW; row++){

if (chessbox[row] != ' '
&&chessbox[row] == chessbox[row]
&& chessbox[row] == chessbox[row]){

return chessbox[row];
}
}
// Column
for (int col = 0; col < COL; col++){

if (chessbox[col] != ' '
&&chessbox[col] == chessbox[col]
&& chessbox[col] == chessbox[col]){

return chessbox[col];
}
}
``````
• Diagonal line to achieve three pieces of a line
``````if (chessbox != ' '
&&chessbox == chessbox
&& chessbox == chessbox){

return chessbox;
}
if (chessbox != ' '
&&chessbox == chessbox
&& chessbox == chessbox){

return chessbox;
}
``````
1. draw
• The chessboard is full and has not won , It's a draw , It's a draw .
`````` Insert a code chip here
// draw
if(isFull(checkbox)){

return 'a';
}

``````
1. Win lose agreement ：
• return x Win on behalf of the player
``````if (isWinner(chessbox) == 'x'){

printf(" Congratulations on winning !\n");
break;
}
``````
• return o For computers to win
``````if (isWinner(chessbox) == 'o'){

printf(" unfortunately , You lost !\n");
break;
}
``````
• return a For a draw （ A draw ）
``````if (isWinner(chessbox) == 'a'){

printf(" You are on the same level as the computer !\n");
break;
}
``````
1. Judge whether the chessboard is full ：
• return 1 The chessboard is full
• return 0 The chessboard is not full
``````// Judge whether the chessboard is full
//1 It means full ;0 Express dissatisfaction .
int isFullChess(char chessbox[ROW][COL]){

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

// Find the space , It's not full
if (chessbox[row][col] == ' '){

return 0;
}
}
}
return 1;
}
``````

Source code :

``````#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define ROW 3
#define COL 3
// The player is down ( use x Express )
void playerMove(char chessbox[ROW][COL]){

int row, col;
while (1){

scanf("%d %d", &row, &col);
if (row >= 3 || col >= 3){

printf(" The position you entered is wrong , Please re-enter :");
continue;
}
if (chessbox[row][col] == ' '){

chessbox[row][col] = 'x';
break;
}
printf(" There are already pieces in this position , Please re-enter :");
}
}
// Computer move later ( use o Express )
void computerMove(char chessbox[ROW][COL]){

srand(time(0));
while (1){

int row = rand() % 3;
int col = rand() % 3;
if (chessbox[row][col] == ' '){

chessbox[row][col] = 'o';
break;
}

}
}
// Initialize chessboard
void initChess(char chessbox[ROW][COL]){

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

chessbox[row][col] = ' ';
}
}
}
// Print chessboard
void printChess(char chessbox[ROW][COL]){

system("cls");
printf("+---+---+---+\n");
for (int row = 0; row < ROW; row++){

printf("| %c | %c | %c |\n",
chessbox[row], chessbox[row],
chessbox[row]);
printf("+---+---+---+\n");
}
}
// Judge whether the chessboard is full , Full back 1; Return before full 0
int isFullChess(char chessbox[ROW][COL]){

for (int row = 0; row < ROW; row++){

for (int col = 0; col < COL; col++){

// Find the space , It's not full
if (chessbox[row][col] == ' '){

return 0;
}
}
}
return 1;
}
// Appointment : return x On behalf of the player wins ; return o On behalf of the computer wins ; return a For a draw
char isWinner(char chessbox[ROW][COL]){

// That's ok
for (int row = 0; row < ROW; row++){

if (chessbox[row] != ' '
&&chessbox[row] == chessbox[row]
&& chessbox[row] == chessbox[row]){

return chessbox[row];
}
}
// Column
for (int col = 0; col < COL; col++){

if (chessbox[col] != ' '
&&chessbox[col] == chessbox[col]
&& chessbox[col] == chessbox[col]){

return chessbox[col];
}
}
// Diagonals
if (chessbox != ' '
&&chessbox == chessbox
&& chessbox == chessbox){

return chessbox;
}
if (chessbox != ' '
&&chessbox == chessbox
&& chessbox == chessbox){

return chessbox;
}
// draw
if (isFullChess(chessbox)){

return 'a';
}
return 0;
}
// Start a game
void game(){

char chessbox[ROW][COL] = {

0 };
initChess(chessbox);
printf(" The game begins !\n");
printChess(chessbox);
while (1){

// The player is down
playerMove(chessbox);
// Print chess and cards
printChess(chessbox);
// Judge the outcome
if (isWinner(chessbox) == 'x'){

printf(" Congratulations on winning !\n");
break;
}
if (isWinner(chessbox) == 'a'){

printf(" You are on the same level as the computer !\n");
break;
}
// Computer move later
computerMove(chessbox);
// Print chess and cards
printChess(chessbox);
// Judge the outcome
if (isWinner(chessbox) == 'o'){

printf(" unfortunately , You lost !\n");
break;
}
if (isWinner(chessbox) == 'a'){

printf(" You are on the same level as the computer !\n");
break;
}
}
}

printf("===============\n");
printf("1. Start the game \n");
printf("0. End the game \n");
printf("===============\n");
int choice;
scanf("%d", &choice);
return choice;
}

int main()
{

ile (1){

if (choice == 1){

game();
continue;
}
else if (choice == 0){

break;
}else{

printf(" Incorrect input , Please re-enter !\n");
continue;
}
}
system("pause");
return 0;
}

``````

Running results :    