当前位置:网站首页>C language -- game of Sanzi
C language -- game of Sanzi
2020-11-09 12:58:00 【osc_rmqoxylv】
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 :
- 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] = ' ';
}
}
}
- 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][0], chessbox[row][1],
chessbox[row][2]);
printf("+---+---+---+\n");
}
}
- 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;
}
}
}
- The player is down
// The player is down ( use x Express )
void playerMove(char chessbox[ROW][COL]){
int row, col;
while (1){
printf(" Please enter your location :");
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 :");
}
}
- 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][0] != ' '
&&chessbox[row][0] == chessbox[row][1]
&& chessbox[row][0] == chessbox[row][2]){
return chessbox[row][0];
}
}
// Column
for (int col = 0; col < COL; col++){
if (chessbox[0][col] != ' '
&&chessbox[0][col] == chessbox[1][col]
&& chessbox[0][col] == chessbox[2][col]){
return chessbox[0][col];
}
}
- Diagonal line to achieve three pieces of a line
if (chessbox[0][0] != ' '
&&chessbox[0][0] == chessbox[1][1]
&& chessbox[0][0] == chessbox[2][2]){
return chessbox[0][0];
}
if (chessbox[2][0] != ' '
&&chessbox[2][0] == chessbox[1][1]
&& chessbox[2][0] == chessbox[0][2]){
return chessbox[2][0];
}
- 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';
}
- 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;
}
- 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){
printf(" Please enter your location :");
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][0], chessbox[row][1],
chessbox[row][2]);
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][0] != ' '
&&chessbox[row][0] == chessbox[row][1]
&& chessbox[row][0] == chessbox[row][2]){
return chessbox[row][0];
}
}
// Column
for (int col = 0; col < COL; col++){
if (chessbox[0][col] != ' '
&&chessbox[0][col] == chessbox[1][col]
&& chessbox[0][col] == chessbox[2][col]){
return chessbox[0][col];
}
}
// Diagonals
if (chessbox[0][0] != ' '
&&chessbox[0][0] == chessbox[1][1]
&& chessbox[0][0] == chessbox[2][2]){
return chessbox[0][0];
}
if (chessbox[2][0] != ' '
&&chessbox[2][0] == chessbox[1][1]
&& chessbox[2][0] == chessbox[0][2]){
return chessbox[2][0];
}
// 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;
}
}
}
int menu(){
printf("===============\n");
printf("1. Start the game \n");
printf("0. End the game \n");
printf("===============\n");
int choice;
printf(" Please enter your choice :");
scanf("%d", &choice);
return choice;
}
int main()
{
ile (1){
int choice=menu();
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 :
版权声明
本文为[osc_rmqoxylv]所创,转载请带上原文链接,感谢
边栏推荐
- AI fresh student's annual salary has increased to 400000, you can still make a career change now!
- What are the implementations of distributed locks?
- 导师制Processing网课 双十一优惠进行中
- A simple ability determines whether you will learn!
- Navigation component of Android architecture (2)
- inet_pton()和inet_ntop()函数详解
- 块级元素和行内元素
- 医疗项目管理的三种实用技巧
- 真正拖垮你的,是沉没成本
- Tidb x micro banking reduces time consumption by 58%, and distributed architecture helps to realize inclusive finance
猜你喜欢
Efficient Estimation of Word Representations in Vector Space 论文笔记
CSP-J/S 2020考前注意事项
inet_pton()和inet_ntop()函数详解
Rainbow sorting | Dutch flag problem
In the future, China Telecom will make cloud computing service the main business of China Telecom
Android架构之Navigation组件(二)
Android 集成支付的四部曲
Detailed explanation of [golang] GC
JVM学习(六)-内存模型和线程
关于无相互作用极化率的计算
随机推荐
【分布式】分布式锁都有哪些实现方案?
Large scale project Objective-C - nsurlsession access SMS verification code application example sharing
Rainbow sorting | Dutch flag problem
天啦撸!打印日志竟然只晓得 Log4j?
Vscode plug-in configuration pointing North
pytorch加载语音类自定义数据集
iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法 20200105
For and for... In, for each and map and for of
TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
Using rem, the font size changes when the screen zooms
Solve the problem of idea shortcut key Alt + insert invalid
手写Koa.js源码
Handwriting Koa.js Source code
Method of creating flat panel simulator by Android studio
20201107第16课,使用Apache服务部署静态网站;使用Vsftpd服务传输文件
Adobe experience design / XD 2020 software installation package (with installation tutorial)
块级元素和行内元素
FGC online service troubleshooting, this is enough!
Suning's practice of large scale alarm convergence and root cause location based on Knowledge Map
Introduction to zero based im development (4): what is message timing consistency in IM systems?