三子棋游戏规则:

是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。

算法思路:

  1. 打印游戏选择界面:玩家输入1开始游戏,输入0结束游戏。

  2. 定义3*3的数组,用来存放每个格子的元素。

  3. 编写函数initboard(),用来初始化每个格子中元素。

  4. 编写打印棋盘showboard(),利用循环和判断来使棋盘打印出来,如图

  5. 编写玩家移动函数playermove(),输入x,y坐标来表示想在哪个格子里下棋,‘X’表示玩家下的棋子,把‘X’赋值给对应的棋盘数组中。

  6. 编写电脑移动函数computermove(),利用rand()随机生成数字然后%3,这样就只能出现0,1,2数字,电脑下的棋为‘O’,把’O’赋值给对应的棋盘数组中。

  7. 编写判断胜利的函数iswin(),此时需要判断一方赢棋和双方和其两种情况。(1)只要每行、每列以及写对角线都为相同的元素,且不为空,则判断为一方赢棋(2)遍历数组,若棋盘放满了,则为平局。

  8. 在头文件中声明每个函数。

  9. 最后在主函数中调用对应的函数,完美运行。

最后附上代码:

头文件game.h

#ifndef __GAME_H__
#define __GAME_H__#define ROW 3
#define COL 3void InItBoard(char board[][COL], int row, int col);void ShowBorad(char board[][COL], int row, int col);char PlayerMove(char board[][COL], int row, int col);char ComputerMove(char board[][COL], int row, int col);char IsWin(char board[][COL], int row, int col);#endif

函数模块game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "game.h"//棋盘初始化
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] = ' ';}}
}//显示棋盘
void ShowBorad(char board[][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){for (int j = 0; j < col; j++){printf("---");if (j < col -1){printf("|");}}printf("\n");}}
}//玩家移动
char PlayerMove(char board[][COL], int row, int col)
{int x = 0;int y = 0;while (1){printf("玩家下棋\n");printf("请输入你要下的棋盘位置(1-3 1-3):");scanf("%d%d", &x, &y);if (x > 0 && x<= row && y>0 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y -1] = 'X';break;}else{printf("该坐标已经下过棋子了!\n");}}else{printf("输入的坐标不合法!\n");}}return 'X';
}//电脑移动
char ComputerMove(char board[][COL], int row, int col)
{printf("电脑下棋\n");while (1){int x = rand() % row;int y = rand() % col;if (board[x][y] == ' '){board[x][y] = 'O';break;}}return 'O';
}//判断胜利
char IsWin(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] != ' '){return board[i][0];}//列判断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];}//判断平局if (IsFull(board, row, col) == 1){return 'Q'; //返回Q证明是平局}return 'C';    //返回C证明没有人赢
}static int IsFull(char board[][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){if (board[i][j] == ' '){return 0;  //棋盘没有放满}}}return 1;    //棋盘放满了
}

最后主函数main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "game.h"void menu()
{printf("*****************************\n");printf("*********三子棋游戏**********\n");printf("***********1.play************\n");printf("***********0.exit************\n");printf("*****************************\n");
}void game()
{printf("进去了游戏\n");char board[ROW][COL] = { 98,98,98,98,98,98,98,98,98 };InItBoard(board, ROW, COL); //将棋盘清为空格ShowBorad(board, ROW, COL);    //显示棋盘char ret = ' ';while (1){PlayerMove(board, ROW, COL);  //玩家下棋ShowBorad(board, ROW, COL);       //显示棋盘ret = IsWin(board, ROW, COL);    //判断胜利if (ret != 'C')    //‘C’没人赢{break; //返回X}ComputerMove(board, ROW, COL);    //电脑下棋ShowBorad(board, ROW, COL);       //显示棋盘ret = IsWin(board, ROW, COL);    //判断胜利if (ret != 'C'){break; //返回O}}if (ret == 'Q'){printf("游戏平局\n");}if (ret == 'X'){printf("玩家赢\n");}if (ret == 'O'){printf("电脑赢\n");}menu();
}int main()
{srand((unsigned)time(NULL));   //电脑随机int input=0;menu();printf("请输入你的操作");//scanf("%d\n", &input);do{printf("\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:break;}} while (input);return 0;
}

小伙伴们觉得还可以的话可以给我点个赞吗(/good)

逢看必会的三子棋小游戏:原来可以这么简单相关推荐

  1. vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)

    前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...

  2. 三子棋小游戏带你走进编程世界(c语言版)

    目录 一.游戏实现的整体思路 二.实现游戏大体框架 二.游戏函数的实现 1.初始化键盘 2.打印棋盘 3.下棋及胜负判断 (1)玩家下棋 (2)电脑下棋 (3)判断输赢 三.结语及源码 三子棋想必大家 ...

  3. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  4. C语言小项目--三子棋小游戏

    学了这么长时间的C语言,你是否觉得没有一个没写过稍微长点的代码显得很没有成就感!不怕,今天带你做一个小游戏,领略一下写C和小游戏的快乐.写完记得给自己一个鼓励哦! 一.三子棋小游戏 想必大家都玩过三子 ...

  5. 呆头呆脑的电脑----三子棋小游戏(C语言版)

    目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...

  6. 三子棋小游戏思路及代码实现的详解

    标题:猜数字小游戏 作者:@Ggggggtm 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 文章目录: 一.三子棋小游戏的简单介绍 二.三子棋的思路及代码实现 1.打印游戏菜单 2. ...

  7. 【三子棋小游戏的设计思路以及代码实现】

    目录 一,设计思路 二, 代码实现 首先,欢迎各位点进我的文章.话不多说,正如标题一样,接下来,我来给大家讲解三子棋小游戏的设计思路以及代码实现.            一,设计思路 一. 大家应该都 ...

  8. 三子棋小游戏(超详细)

    目录 一.实现三子棋游戏的基本逻辑 二.具体的函数实现 1. 菜单函数 2. 棋盘的实现 2.1 棋盘的初始化 2.2 棋盘的打印 3. 玩家下棋 4. 电脑下棋 5.判断棋盘状态 三. 三个文件 3 ...

  9. 使用C语言编写三子棋小游戏

    使用C语言编写三子棋小游戏: 首先进行分析: 1.需要将游戏实现分为三个部分:头文件,函数功能实现,游戏组合测试. 2.游戏可以循环进行,不必多次打开,可采用 do...while循环结构. 3.游戏 ...

  10. C语言实现三子棋小游戏(编程思路以及代码详解)

    目录 前言 一.三子棋游戏的实现逻辑 二.创建菜单并控制游戏开始或游戏结束 三.创建棋盘并且初始化棋盘 四.打印棋盘并验证打印棋盘和初始化棋盘模块的实现 五.玩家下棋 六.电脑下棋 六.输赢判断 七. ...

最新文章

  1. 【机器视觉】 dev_get_system算子
  2. 结构体中初始化vector resize_Java-深入HashMap原理及内部存储结构
  3. android The public type classname must be defined in its own file 报错
  4. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)
  5. When Startup Disk is Full
  6. 【Jupyter notebook更改默认浏览器】
  7. [转载]谈谈我对攻读计算机研究生的看法
  8. WEB打印-网页打印功能(带分页、可多页打印)
  9. python3下载m3u8转mp4_Python3.6:根据m3u8下载mp4视频
  10. 苹果笔记本显卡性能测试软件,测试结果来了!新款Macbook Pro显卡性能怎样?
  11. LCD1602液晶显示屏学习笔记
  12. 完全二叉树和满二叉树
  13. 关于numpy数组shape的理解 比如:(3,) (2,3) (2,3,2) 以及对维度的小认识
  14. 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines
  15. 小程序如何关联微信小程序二维码,实现二码聚合
  16. 微信小程序一键拨打电话
  17. P60:类变量 static
  18. python雷达图详解_Python成绩单雷达图
  19. 解决qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““
  20. 报错信息:An Error Was Encountered

热门文章

  1. c语言入门教程--1编译器
  2. matlab 动态面板数据分析,MATLAB空间面板数据模型操作简介 空间面板数据模型
  3. 佳缘男的计算机软件出差,交友我在世纪佳缘认识了一个男人,今年32岁,通信接近一个月,觉得 爱问知识人...
  4. renderTo和applyTo的区别
  5. Ubuntu16安装Nvidia驱动(GTX1060显卡)
  6. 小行星项目第2部分测试驱动开发
  7. 鼠标右键菜单及图标添加
  8. listview分页加载的实现
  9. foxit pdf editor linux,Foxit PDF Editor
  10. Redmi显示器调节亮度 27英寸/2k/ IPS技术/低蓝光