700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用C语言实现三子棋(含思路+完整代码)

用C语言实现三子棋(含思路+完整代码)

时间:2022-04-17 06:43:12

相关推荐

用C语言实现三子棋(含思路+完整代码)

三子棋

目录

三子棋

三子棋含义:

基本思路:

1.创建用户交互菜单界面

2.初始化棋盘

3.显示棋盘面板

4.用户落子

5.电脑随机正确落子

6.判断胜负

7.创建Game界面

完整代码

代码结果显示

三子棋含义:

三子棋是黑白棋的一种。三子棋又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。图例如下:

基本思路:

1.创建用户交互菜单界面

2.初始化棋盘

3.显示棋盘面板(为了不重复显示棋盘,使用清屏操作)

4.用户落子

5.判断胜负

6.电脑随机正确落子

7.判断胜负

(在每次写程序之前,可以向如下图所示,写出思路或伪代码)

创建多文件项目:

写代码之前,首先建立三个文件,以方便后序代码更加完整清晰地呈现。

1.创建用户交互菜单界面

void Meau(){printf("+------ meau ----------+\n");printf("|---- 1.play --------|\n");printf("|---- 0.quit --------|\n");printf("+----------------------+\n");}

2.初始化棋盘

使用宏定义,将棋盘中的内容初始化为空。

static void InitBoard(char board[][COL], int row, int col){for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = INIT;}}}

3.显示棋盘面板

为了不重复显示棋盘,使用清屏操作,使得每次现实的棋盘只有一张。

通过不断调试,使得最终界面,与预期所需界面一致。

static void ShowBoard(char board[][COL],int row,int col){system("cls");//清屏操作printf(" ");for (int i = 0; i < col; i++){printf(" %3d", i + 1);}printf("\n----------------\n");for (int i = 0; i < row; i++){printf("%-2d", i + 1);for (int j = 0; j < col; j++){printf("| %c ", board[i][j]);}printf("\n----------------\n");}}

4.用户落子

落子只能落在为空的位置上,所以在落子前需要判空,若为空,则落子,否则提示重新落子。

static void PlayerMove(char board[][COL], int row, int col){int x = 0;int y = 0;while (1){printf("please enter your postion<x,y>: ");scanf("%d %d", &x, &y);if (x<1 || x>3 || y<1 || y>3){printf("Postion Error!");continue;}if (board[x - 1][y - 1] == INIT){board[x - 1][y - 1] = WHITE;break;}else{printf("Postion Is Not Empty!\n");}}}

5.电脑随机正确落子

使用随机数,在正确位置落子。

static void ComputerMove(char board[][COL], int row, int col){while (1){int x = rand() % row;int y = rand() % col;if (board[x][y] == INIT){board[x][y] = BLACK;break;}}}

6.判断胜负

static char IsEnd(char board[][COL], int row, int col){for (int i = 0; i < row; i++){if (board[i][0] == board[i][1] && \board[i][1] == board[i][2] && \board[i][0] != INIT){return board[i][0];}}for (int j = 0; j < col; j++){if (board[0][j] == board[1][j] && \board[1][j] == board[2][j] && \board[0][j] != INIT){return board[0][j];}}if (board[0][0] == board[1][1] && \board[1][1] == board[2][2] && \board[0][0] != INIT){return board[0][0];}if(board[0][2] == board[1][1] && \board[1][1] == board[2][0] && \board[1][1] != INIT){return board[1][1];}for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){if (board[i][j] == INIT);return NEXT;}}return DRAW;}

7.创建Game界面

void Game(){char board[ROW][COL];InitBoard(board, ROW, COL);srand((unsigned long)time(NULL));char result = 0;while (1){ShowBoard(board, ROW, COL);PlayerMove(board, ROW, COL);result = IsEnd(board, ROW, COL);if (result != NEXT){break;}ShowBoard(board, ROW, COL);ComputerMove(board, ROW, COL);result = IsEnd(board, ROW, COL);if (result != NEXT){break;}}ShowBoard(board, ROW, COL);switch (result){case WHITE:printf("You win!\n");break;case BLACK:printf("you lose!\n");break;case DRAW:printf("it ends in a draw\n"); break;defult:printf("bug\n");break;}}

完整代码

//main.c文件#include"game.h"void Meau(){printf("+------ meau ----------+\n");printf("|---- 1.play --------|\n");printf("|---- 0.quit --------|\n");printf("+----------------------+\n");}int main(){int select = 0;int quit = 0;while (!quit){Meau();printf("please enter your choose: ");scanf("%d", &select);switch (select){case 1:Game();break;case 0:quit = 1;break;defult:printf("Select error!Try again!\n");break;}}printf("byebye!\n");system("pause");return 0;}//game.c 文件#include"game.h"static void InitBoard(char board[][COL], int row, int col){for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = INIT;}}}static void ShowBoard(char board[][COL],int row,int col){system("cls");printf(" ");for (int i = 0; i < col; i++){printf(" %3d", i + 1);}printf("\n----------------\n");for (int i = 0; i < row; i++){printf("%-2d", i + 1);for (int j = 0; j < col; j++){printf("| %c ", board[i][j]);}printf("\n----------------\n");}}static char IsEnd(char board[][COL], int row, int col){for (int i = 0; i < row; i++){if (board[i][0] == board[i][1] && \board[i][1] == board[i][2] && \board[i][0] != INIT){return board[i][0];}}for (int j = 0; j < col; j++){if (board[0][j] == board[1][j] && \board[1][j] == board[2][j] && \board[0][j] != INIT){return board[0][j];}}if (board[0][0] == board[1][1] && \board[1][1] == board[2][2] && \board[0][0] != INIT){return board[0][0];}if(board[0][2] == board[1][1] && \board[1][1] == board[2][0] && \board[1][1] != INIT){return board[1][1];}for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){if (board[i][j] == INIT);return NEXT;}}return DRAW;}static void PlayerMove(char board[][COL], int row, int col){int x = 0;int y = 0;while (1){printf("please enter your postion<x,y>: ");scanf("%d %d", &x, &y);if (x<1 || x>3 || y<1 || y>3){printf("Postion Error!");continue;}if (board[x - 1][y - 1] == INIT){board[x - 1][y - 1] = WHITE;break;}else{printf("Postion Is Not Empty!\n");}}}static void ComputerMove(char board[][COL], int row, int col){while (1){int x = rand() % row;int y = rand() % col;if (board[x][y] == INIT){board[x][y] = BLACK;break;}}}void Game(){char board[ROW][COL];InitBoard(board, ROW, COL);srand((unsigned long)time(NULL));char result = 0;while (1){ShowBoard(board, ROW, COL);PlayerMove(board, ROW, COL);result = IsEnd(board, ROW, COL);if (result != NEXT){break;}ShowBoard(board, ROW, COL);ComputerMove(board, ROW, COL);result = IsEnd(board, ROW, COL);if (result != NEXT){break;}}ShowBoard(board, ROW, COL);switch (result){case WHITE:printf("You win!\n");break;case BLACK:printf("you lose!\n");break;case DRAW:printf("it ends in a draw\n"); break;defult:printf("bug\n");break;}}//game.h文件#ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include <time.h>#include <stdlib.h>#include<windows.h>#pragma warning(disable:4996)#define ROW 3#define COL 3#define INIT ' '#define WHITE 'X'//player#define BLACK 'O'//computer#define DRAW 'D'#define NEXT 'N'extern void Game();#endif

代码结果显示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。