本文共 3277 字,大约阅读时间需要 10 分钟。
对于三子棋,可以通过多文件编译来实现完成它,是代码看起来简洁明了。
1.进行chess.h文件的声明定义
`#define _CRT_SECURE_NO_WARNINGS 1#ifndef _CHESS_H_#define _CHESS_H_#include#include #include #pragma warning(disable:4996)#define ROW 3#define COL 3void ShowUI();void Game();void ComputerMove(char board[][COL], int row, int col);void ShowBoard(char board[][COL], int row, int col);char Judge(char board[][COL], int row, int col);void PlayerMove(char board[][COL], int row, int col);#endif在这里插入代码片
2.书写主函数
#define _CRT_SECURE_NO_WARNINGS 1#include "chess.h"int main(){ int select = 0; int quit = 0; while (!quit){ ShowUI(); scanf("%d", &select); switch (select){ case 1: Game(); break; case 2: quit = 1; printf("Bye,Bye!\n"); break; default: printf("Please Enter Again!\n"); break; } } system("pause"); return 0;}
3.写出核心代码,对个个模块进行封装,明确其需要实现的功能。
#define _CRT_SECURE_NO_WARNINGS 1#include "chess.h"void ShowUI(){ printf("##################################\n"); printf("## 1. Play 2. Exit ##\n"); printf("##################################\n"); printf("Please Select:> ");}void ComputerMove(char board[][COL], int row, int col){ while (1){ int x = rand() % row; int y = rand() % col; if (board[x][y] == ' '){ board[x][y] = 'O'; break; } }}void PlayerMove(char board[][COL], int row, int col){ int x, y; while (1){ printf("Please Enter Your Pos(x,y):> "); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col){ if (board[x - 1][y - 1] == ' '){ board[x - 1][y - 1] = 'X'; break; } else{ printf("Enter Pos Is Not OK, Try Again!\n"); } } else{ printf("Enter Error, Try Again!\n"); } }}char Judge(char board[][COL], int row, int col){ int i = 0; int j = 0; for (; i < row; i++){ if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && \ board[i][0] != ' '){ return board[i][0]; } } for (i = 0; i < col; i++){ if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && \ board[0][i] != ' '){ return board[0][i]; } } 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]; } for (i = 0; i < row; i++){ for (j = 0; j < col; j++){ if (board[i][j] == ' '){ return 'N'; } } } return 'E';}void ShowBoard(char board[][COL], int row, int col){ printf(" 1 2 3\n"); printf("-----------------\n"); int i = 0; int j = 0; for (; i < row; i++){ printf("%d |", i + 1); for (j = 0; j < col; j++){ printf(" %c |", board[i][j]); } printf("\n-----------------\n"); } printf("\n");}void Game(){ char board[ROW][COL]; memset(board, ' ', sizeof(board)); char result = 'N'; srand((unsigned long)time(NULL)); while (1){ system("cls"); ComputerMove(board, ROW, COL); ShowBoard(board, ROW, COL); result = Judge(board, ROW, COL); if (result != 'N'){//'X' 'O' 'E' 'N' break; } PlayerMove(board, ROW, COL); ShowBoard(board, ROW, COL); result = Judge(board, ROW, COL); if (result != 'N'){//'X' 'O' 'E' 'N' break; } } switch (result){ case 'X': printf("You Win! :)\n"); break; case 'O': printf("You Lose, Computer Win! :(\n"); break; case 'E': printf("平局,恭喜!\n"); break; default: break; }}
这样一个简单的三子棋程序就完成了!
转载地址:http://frjwi.baihongyu.com/