我们想要完成一个真正的项目,我们需要先创建一个(test.c)文件存放主函数部分;再创建一个(game.c)文件去完成游戏的基本逻辑;最后,用(game.h)文件来包含我们使用的头文件。

一、三子棋游戏实现的思路

1.创建一个菜单让玩家选择,进入或退出
2.创建一个棋盘并初始化
3.打印棋盘
4.玩家落子
5.电脑落子
6.判断输赢的条件


1.菜单界面

菜单,我们直接使用printf函数来实现。

void menu()
{printf("**********************\n");printf("******  1.play  ******\n");printf("******  0.exit  ******\n");printf("**********************\n");
}

2.主函数的构建

当我们在游戏结束之后,依然是想玩,我们这里就要用到循环结构。

代码实现

int main()
{int input = 0;do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}

3.创建棋盘

因为我们是三子棋,所以只需要一个3行3列的棋盘

void game()
{  //使用一个二维数组来存放数据char board[ROW][COL]={0};
}

此处我们使用了宏定义来初始化棋盘的大小

在“game.h"头文件中声明这个初始化函数

#define ROW 3
#define COL 3//初始化棋盘
void init_borad(char board[ROW][COL], int row, int col);

在game.c中初始化棋盘

void init_borad(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ' ';}}
}

4.打印棋盘

void display_borad(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){//打印数据printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){for (j = 0; j < col; j++){//打印棋盘的分割行printf("---");if (j < col - 1){printf("|");}}}printf("\n");}
}

5.玩家落子

二维数组中,直接输入在坐标

这里需要判断,棋盘坐标之前已经是否落过位并且判断输入坐标是否违规

void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;while (1){printf("玩家下棋:>\n");printf("请输入要下到的坐标:>\n");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] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else{printf("坐标非法,重新输入\n");}}
}

6.电脑落子

我们使用用时间戳来生成一个随机数,并把数控制在0-2之间
因为随机数时间戳只需要产生一次,所以我们放在main函数中

srand((unsigned int)time(NULL));//产生随机数
void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:>\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}

电脑不需要判断,电脑只要在那个位置下不了,那么电脑就会重新产生新的坐标

7.判断输赢

1.玩家赢----->返回 ‘*’
2.电脑赢----->返回’#‘
3.平局-------->返回Q
4.继续--------->返回C

har is_win(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){//判断行if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][0];}}for (j = 0; j < col; j++){//判断列if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' '){return board[0][j];}}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];}//判断平局if (is_fun(board, row, col) == 1){return 'Q';}return 'C';
}

二、总代码

1.game.h

#pragma once#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COL 3//初始化棋盘
void init_borad(char board[ROW][COL], int row, int col);//打印棋盘
void display_borad(char board[ROW][COL], int row,int col);//玩家界面
void player_move(char board[ROW][COL], int row, int col);//电脑界面
void computer_move(char board[ROW][COL], int row, int col);//判断赢的条件
char is_win(char board[ROW][COL], int row, int col);

2.game.c

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void init_borad(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ' ';}}
}void display_borad(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){for (j = 0; j < col; j++){printf("---");if (j < col - 1){printf("|");}}}printf("\n");}
}void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;while (1){printf("玩家下棋:>\n");printf("请输入要下到的坐标:>\n");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] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else{printf("坐标非法,重新输入\n");}}
}void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:>\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}static int is_fun(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (' ' == board[i][j]){return 0;}}}return 1;
}char is_win(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][0];}}for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' '){return board[0][j];}}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];}//判断平局if (is_fun(board, row, col) == 1){return 'Q';}return 'C';
}

3.test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()
{printf("**********************\n");printf("******  1.play  ******\n");printf("******  0.exit  ******\n");printf("**********************\n");
}
void game()
{char ret = 0;char board[ROW][COL] = { 0 };init_borad(board, ROW, COL);display_borad(board, ROW, COL);while (1){player_move(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}display_borad(board, ROW, COL);computer_move(board, ROW, COL);if(ret != 'C'){break;}display_borad(board, ROW, COL);}if (ret == '*'){printf("玩家赢\n");}if (ret == '#'){printf("电脑赢\n");}if (ret == 'Q'){printf("平局\n");}display_borad(board, ROW, COL);
}
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}

总结

@_@看一遍一定不会吧!!!@ _@
快!快!快!
自己快敲一遍

三子棋游戏实现(c语言)相关推荐

  1. 三子棋游戏【C语言实现】保姆级教程,小白也能看懂,冲就对了❗❗❗

    前言 ❤️ 铁汁们大家好,欢迎大家来到出小月的博客里,

  2. 用C语言实现三子棋游戏(附上思路+项目展示+源代码)

    文章目录 前言 一.三子棋游戏整体实现思路 二.实现步骤 分模板实现 (以及具体应用实列) 1.test.c 源文件讲解: 2. game.c 源文件讲解: 3.game.h 源文件讲解 三 game ...

  3. c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏

    本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...

  4. c语言程序下三子棋,C语言实现三子棋游戏(初级版)

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h #include #include #include #define ROW 3 #define COL 3 ...

  5. 使用c语言实现三子棋游戏

    下面简介如何使用c语言的基础语法实现三子游戏的底层逻辑: 首先是菜单模块 使用switch语句进入游戏模块 前置交互完成,开始进入游戏函数. 第一部分棋盘创建,使用二维数组实现. a.初始化棋盘 为什 ...

  6. C语言实现三子棋游戏(规范化)

    `在复习了数组之后,对有些经典的数组题进行了,其中一道就是三子棋游戏这一功能的实现.下面附上我的个人理解和代码,希望各位大佬不吝指教. 首先有一个万能游戏模板,在c语言中有好多实现游戏的代码,我总结了 ...

  7. 如何用C语言来实现【三子棋游戏】

    目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...

  8. C语言三子棋游戏进阶版详解(包括多子棋)

    目录 一,总体思路介绍 二,具体思路的实现 1.初始化游戏界面 2.初始化棋盘 3.打印棋盘 4.玩家移动 5.电脑移动 6.判断输赢 三,源码展示 game.h game.c test.c 一,总体 ...

  9. C语言实现三子棋游戏 代码+思路+电脑下棋算法

    C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...

最新文章

  1. zigbee 串口不稳定_Zigbee
  2. 架构实例之Demo_JSP
  3. 关于Remoting信道的通信的问题
  4. python3安装requests_小小-Centos7安装Python3并安装Requests的方法
  5. 百度地图检索以及路径规划
  6. 基于8086CPU微处理器的汇编学习之内存空间的编辑
  7. 云计算介绍-1.1,IaaS\PaaS\SaaS辨析
  8. android双usb麦克风,USB麦克风24bit192K单麦芯片方案-SSS1630
  9. 前段之路心得——(1)
  10. 大型电商网站设计——商品详情页面静态化
  11. 微信小程序的学习资料销售平台
  12. 最优化方法:三、线性规划
  13. box2d弹球 cocos2d-x重力感应(cocos2d-x2.1)
  14. Vistual Studio Code中Markdown使用数学公式
  15. 考验直播平台搭建水平的十个性能指标
  16. 狼人杀要做社交,绕不开语音视频连麦 | 深度
  17. Android studio 关于页面跳转问题
  18. transform: scale() 图片文字模糊的原因
  19. Python 切割mp3片段为每30秒一个并降低文件码率
  20. 【华为机考】ACM输入输出(中等+)

热门文章

  1. 【BZOJ4424】Cf19E Fairy DFS树
  2. 重建大师6.0多源通吃!卫星建模、下视影像三维建模、点云融合建模...
  3. python怎样把两个图画到一起_如何使用python或matlab将多个图像堆叠在一起?
  4. ad_with_lanelet2 编译问题解决
  5. 对于tomcat升级导致游览器访问页面出现的中文乱码问题解决方案
  6. 口袋取球的取法问题(C++实现)
  7. iTerm2 + OhMyZsh + powerlevel9k实现酷炫终端
  8. 以太坊社区激励金计划:支持开发者利用去中心化技术改变世界
  9. python 使用 openpyxl 批量调整字体和样式
  10. 博图中SCL程序的创建方式