当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- The history of C1 research in Shenzhen
- 写给我自己的一封信
- 苏宁基于知识图谱的大规模告警收敛和根因定位实践
- Visit Jingdong | members of Youth Innovation Alliance of China Academy of space technology visit Jingdong headquarters
- An attempt to read or write to protected memory occurred using the CopyMemory API. This usually indicates that other memory is corrupted.
- 用一种简单的方式实现终端文字粘贴板
- Efficient estimation of word representations in vector space
- Explain Python input() function: get user input string
- Android 集成支付的四部曲
- 天啦撸!打印日志竟然只晓得 Log4j?
猜你喜欢

Decrypting the future database design: implementation of mongodb's new storage engine wiredtiger (transaction)

Is SEO right or wrong?

On the calculation of non interaction polarizability

The history of C1 research in Shenzhen

Android 集成支付的四部曲

零基础IM开发入门(四):什么是IM系统的消息时序一致性?

Reduce of Flink

The third way to realize webrtc in embedded devices

Depth analysis based on synchronized lock

Android NDK development and actual combat WeChat official account 2-D code detection
随机推荐
Rainbow sorting | Dutch flag problem
基于synchronized锁的深度解析
Solve the problem of idea shortcut key Alt + insert invalid
From coding, network transmission, architecture design, Tencent cloud high quality, high availability real-time audio and video technology practice
服务应用 ClockService安卓实现闹钟
除了解析域名,DNS还能干吗?
7-10倍写入性能提升:剖析WiredTiger数据页无锁及压缩黑科技
解密未来数据库设计:MongoDB新存储引擎WiredTiger实现(事务篇)
通配符SSL证书应该去哪里注册申请
深圳C1考证历程
Decrypting the future database design: implementation of mongodb's new storage engine wiredtiger (transaction)
Technology and beauty are so expensive, it's better to find consultants | aalab enterprise consulting business
在嵌入式设备中实现webrtc的第三种方式③
Why I strongly recommend custom development of small programs, these benefits you need to understand
C语言—————三子棋游戏
Is multithreading really faster than single threading?
PAT_甲级_1074 Reversing Linked List
为什么我强烈建议要定制开发小程序,这些好处你需要了解
彩虹排序 | 荷兰旗问题
How to use function framework to develop large web application