当前位置:网站首页>Sanzi chess (C language)
Sanzi chess (C language)
2022-07-06 07:50:00 【Dull in autumn 11111】
The rules of the game
Players and computers ( No technology , Random down )
The default player will go first , One child at a time , The two sides alternate , Until either computer or player wins , Or the chessboard is full ( It ends in a draw ), Game over .
Application framework
Three files :
text.c__ Test the logic of the game ( Source file )
game.c__ function ( Source file )
game.h__ The definition of symbols Declaration of functions ( The header file )
The basic idea
1. Print menu
1.play( Play ) 0.exit( Quit the game ) Enter other numbers ( Input error , Re input )
Implementation code
//text.c
#include "game.h"
void menu()
{
printf("************************");
printf("******* 1.play ********");
printf("******* 0.exit ********");
printf("************************");
}
void text()
{
int input = 0;
do
{
menu();
printf(" Please enter :->\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();// Implement the functions of the three piece chess game
break;
case 0:
printf(" End the game :->\n");
break;
default:
printf(" Input error , Please re-enter :->\n");
break;
}
}while(input)
}
int main()
{
text();
return 0;
}
2. Complete the Sanzi game function code
In the file text.c Of game() in
Complete the idea of sanziqi :
1. Initialize the chessboard to full space ( Need to have a dividing line )
2. Print chessboard + data ()
3. Players play chess
4. The computer plays chess ( Random )
5. Judgement of winning or losing
See the following code :
//text.c
void game()
{
// An array of chess players
char boar[ROW][COL]={0};
// Initialize the chessboard to be full of spaces
InitBoard(board,ROW,COL);
// Print chessboard
DisplayBoard(board,ROW,COL);
// Players play chess , Judgement of winning or losing
// The computer plays chess at random , Judgement of winning or losing
}
above 5 Each step requires 5 Functions in game.h In a statement , stay game.c The concrete implementation of
The statement is shown below :
//game.h Statement
#include<stdio.h>
#define ROW 3// Create a chessboard , That's ok 3
#define COL 3// Create a chessboard , Column 3
// Use a macro to define , Define rows and columns , Easy to modify
// Initialize chessboard
void InitBoard(char board[ROW][COL], int row, int col);
// Print chessboard
void DisplayBoard(char board[ROW][COL], int row, int col);
// Players play chess
void player_move(char board[ROW][COL], int row, int col);
// The computer plays chess
void computer_move(char board[ROW][COL], int row, int col);
// Judgement of winning or losing
char is_win(char board[ROW][COL], int row, int col);
1. Initialize the array data to spaces
//game.c Function implementation
#include "game.h"
// Initialization data
void InitBoard(char board[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
2. There are spaces in the chessboard array , Need to print chessboard
Can be realized as :
void DisplayBoard(char board[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
// Print data
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
// Print split lines
if(i<row-1)
printf("---|---|---\n");
}
}
But the above code only applies to 3*3 The board , To improve universality , Can be realized as :
//game.c
// Print chessboard + data
void DisplayBoard(char board[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
// Print data
for (int j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
// Print split lines
if (i < row - 1)
{
for (int j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
}
Chessboard printing effect :
3. Players play chess
The default player plays chess first , And the pieces are :*
Players need to enter coordinates , Players think the coordinates are from 1 beginning , Computer coordinates from 0 beginning , That is, players need to reduce the input coordinates 1
//game.c
// Players play chess
void player_move(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf(" Players play chess \n");
while (1)
{
printf(" Please enter the coordinates :->");
scanf("%d %d", &x, &y);
if (x > 0 && x <= row && y > 0 && y <= col)
// You need to enter coordinates within a reasonable range
{
// Playing chess
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf(" The coordinates are occupied , Please re-enter \n");
}
}
else
{
printf(" It's illegal to enter coordinates , Please re-enter \n");
}
}
}
4. The computer plays chess ( Random )
Computer chess pieces default to :#
//game.c
// The computer plays chess ( Random )
void computer_move(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf(" The computer plays chess :>\n");
while (1)
{
x = rand() % row;
y = rand() % col;// Random generation
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
notes : Use here rand() function , It needs to be used in the main function srand((unsigned int)time(NULL))
stay game.h The header file should be marked in , as follows :
//game.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
5. Judgement of winning or losing ( Three situations )
The main logic text.c To realize the function part of the three piece chess game game() The final version :
/* Game situation : Game player wins , Computers win , It ends in a draw , Continue to cycle */
// Game player wins _'*'
// Computers win _'#'
// It ends in a draw _'Q'
// continue _'C'
//text.c
void game()
{
char ret = 0;
// An array of chess players
char board[ROW][COL] = { 0 };
// Initialize the chessboard to full space
InitBoard(board, ROW, COL);
// Print chessboard
DisplayBoard(board, ROW, COL);
while (1)
{
// Players play chess
player_move(board, ROW, COL);
DisplayBoard(board, ROW, COL);
// Judgement of winning or losing
ret = is_win(board, ROW, COL);
if (ret != 'C')
break;
// As long as it's not “ continue ”, Just break the cycle , Jump out
// The computer plays chess ( Random )
computer_move(board, ROW, COL);
DisplayBoard(board, ROW, COL);
// Judgement of winning or losing
ret = is_win(board, ROW, COL);
if (ret != 'C')
break;
// As long as it's not “ continue ”, Just break the cycle , Jump out
}
if (ret == '*')
{
printf(" The player won \n");
}
else if (ret == '#')
{
printf(" The computer won \n");
}
else
{
printf(" It ends in a draw \n");
}
}
victory : Either party only needs to 、 Column 、 Diagonals , First three in a row , That is, the party wins
It ends in a draw : The chessboard is full , The conditions for one side to win have not been met , It ends in a draw
continue : The chessboard is not full The game goes on
//game.c
// Judgement of winning or losing
char is_win(char board[ROW][COL], int row, int col)
{
int i = 0;
// Judgment line
for (i = 0; i < row; i++)
{
if (board[i][0]== board[i][1]&& board[i][1] == board[i][2] && board[i][0] != ' ')
{
return board[i][0];
}
}
// Judgment column
int j = 0;
for (j = 0; j < col; j++)
{
if (board[0][j]== board[1][j] && board[0][j] == board[2][j]&& board[0][j] != ' ')
{
return board[0][j];
}
}
// Diagonals
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{
return board[1][1];
}
// Judge a draw
if (if_full(board, row, col) == 1)
{
return 'Q';
}
// continue
return 'C';
}
notes : You also need a function to judge whether the chessboard is full ( It ends in a draw )
//game.c
static int if_full(char board[ROW][COL], int row, int col)
// Use static Modify function , Limit the scope to this file , In the service of is_win() function
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 0;// Not full
}
return 1;
}
}
To sum up, that is, the sharing content of Sanzi chess games
边栏推荐
- When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
- 21. Delete data
- Brief explanation of instagram operation tips in 2022
- . Net 6 learning notes: what is NET Core
- leecode-C語言實現-15. 三數之和------思路待改進版
- Database basic commands
- [count] [combined number] value series
- Google may return to the Chinese market after the Spring Festival.
- opencv学习笔记八--答题卡识别
- Ble of Jerry [chapter]
猜你喜欢
MEX有关的学习
Inspiration from the recruitment of bioinformatics analysts in the Department of laboratory medicine, Zhujiang Hospital, Southern Medical University
If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
Interview Reply of Zhuhai Jinshan
Ble of Jerry [chapter]
Compliance and efficiency, accelerate the digital transformation of pharmaceutical enterprises, and create a new document resource center for pharmaceutical enterprises
智能终端设备加密防护的意义和措施
Ali's redis interview question is too difficult, isn't it? I was pressed on the ground and rubbed
Relevant introduction of clip image
Risk planning and identification of Oracle project management system
随机推荐
HTTP cache, forced cache, negotiated cache
leecode-C语言实现-15. 三数之和------思路待改进版
What are the ways to download network pictures with PHP
Parameter self-tuning of relay feedback PID controller
Significance and measures of encryption protection for intelligent terminal equipment
23. Update data
Rust language - receive command line parameter instances
22. Empty the table
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
esRally国内安装使用避坑指南-全网最新
数据治理:主数据的3特征、4超越和3二八原则
How to delete all the words before or after a symbol in word
07- [istio] istio destinationrule (purpose rule)
实现精细化生产, MES、APS、ERP必不可少
Opencv learning notes 9 -- background modeling + optical flow estimation
JMeter performance test steps practical tutorial
opencv学习笔记九--背景建模+光流估计
On why we should program for all
MES, APS and ERP are essential to realize fine production
P3047 [usaco12feb]nearby cows g (tree DP)