当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
猜你喜欢

Method of creating flat panel simulator by Android studio

FGC online service troubleshooting, this is enough!

Android架构之Navigation组件(二)

Idea rest client, yes, I haven't opened postman yet

C语言—————三子棋游戏

天啦撸!打印日志竟然只晓得 Log4j?

Handwriting Koa.js Source code

TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融

Fedora 33 Workstation 的新功能

分库分表的 9种分布式主键ID 生成方案,挺全乎的
随机推荐
03.优先链接模型
Technology and beauty are so expensive, it's better to find consultants | aalab enterprise consulting business
Rainbow sorting | Dutch flag problem
Adobe experience design / XD 2020 software installation package (with installation tutorial)
零基础IM开发入门(四):什么是IM系统的消息时序一致性?
注意.NET Core进行请求转发问题
TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
The middle stage of vivo Monkey King activity
SQL Chapter 2 Chapter 3
leetcode算法(1)
Understanding runloop in OC
Handwriting Koa.js Source code
For and for... In, for each and map and for of
Oh, my God! Printing log only knows log4j?
After SQL group query, get the first n records of each group
PAT_甲级_1074 Reversing Linked List
Impact of libssl on CentOS login
Four steps of Android integrated payment
基于synchronized锁的深度解析
导师制Unity网课 双十一优惠报名进行中