背景

C语言学习过程中会有很多有趣的实践小程序需要大家编写,这里带给大家一个常见的三子棋小游戏的代码。如果有不足之处,还望指出,感谢浏览。

框架

这里给刚开始学习或接触C语言的小伙伴分享一点我个人的经验,C语言语法的学习在于更好更高效的实现自己所想实现的程序。而不管是制作一个大的程序还是一个小程序,都要先列出一个相应的框架,这一点在各个领域都很实用,如果把写程序比作盖房子,那么搭起程序的基本框架就相当于在给这个房子制作简单的图纸。只有有了一定的这些图纸,我们才能更具有条理性的将自己的思维表达在电脑上,而且不容易出现逻辑性的错误。

三字棋所需的功能模块

这里的模块便是一个一个实现相应功能的函数,我们之所以将这些功能都分别写成函数,是因为将整个程序分为各个模块方便我们进行调试(在我们写程序时,难免出现一些不易察觉的错误,这时我们就需要对我们所写的代码进行调试,以使其正确实现我们想要的功能,而这时将整个代码分成各个模块后,我们就可以只调试出现错误的模块,这也间接提高了我们开发程序的效率)。

我在写程序时,会首先将自己能想到的模块一一列出来:

菜单 + 棋盘 + 电脑 + 玩家 + 判断输赢 + 判断棋盘是否下满

随后将这些模块的功能一一用代码实现。

运行程序

            

源代码

下面是我写的代码,如果有不足之处,非常欢迎小伙伴们积极指出。

头文件

#ifndef _sanziqi_H
#define _sanziqi_H
#include <time.h>
#include <stdio.h>
#include <stdlib.h>void init_chess(char arr[3][3]);  //初始化棋盘void print_chess(char arr[3][3]);  //打印棋盘void menu();  //菜单int whom_act();  //选择谁先行动int chess_full(char arr[3][3]);  //判断棋子是否下满char jud_win(char arr[3][3]);  //判断输赢void player_act(char arr[3][3]);  //玩家行动void computer_act(char arr[3][3]);  //电脑行动#endif //_sanziqi_H

功能函数模块

#include "sanziqi.h"void init_chess(char arr[3][3])  //初始化棋盘
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){arr[i][j] = ' ';}}
}void print_chess(char arr[3][3])  //打印棋盘
{printf("\n");for (int i = 0; i < 3; i++){printf("%c | %c| %c\n", arr[i][0], arr[i][1], arr[i][2]);if (i < 2){printf("—+—+—\n");}}printf("\n");
}void menu()  //菜单
{printf("****************************\n");printf("**       1.开始游戏       **\n");printf("**                        **\n");printf("**       0.退出游戏       **\n");printf("****************************\n");
}int whom_act()  //选择谁先行动
{int input = 0;printf("****************************\n");printf("**       1.电脑先手       **\n");printf("**                        **\n");printf("**       0.玩家先手       **\n");printf("****************************\n");while (1){printf("请选择谁先落子:>");scanf_s("%d", &input);if (input == 1)return 1;else if (input == 0)return 0;elseprintf("选择错误,请重新选择。\n");}
}int chess_full(char arr[3][3])  //判断棋子是否下满
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (arr[i][j] == ' ')return 0;}}return 1;
}char jud_win(char arr[3][3])  //判断输赢
{for (int i = 0; i < 3; i++){if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][0] != ' '))return arr[i][0];else if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[0][i] != ' '))return arr[0][i];else if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))return arr[1][1];else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))return arr[1][1];}return ' ';
}void player_act(char arr[3][3])  //玩家行动
{int x = 0;int y = 0;while (1){printf("请落子(即输入对应x,y坐标):>");scanf_s("%d,%d", &x, &y);if (arr[--x][--y] == ' '){arr[x][y] = 'X';break;}else{printf("您选择的位置已有棋子,请重新选择。\n");}}
}void computer_act(char arr[3][3])  //电脑行动
{srand((unsigned)time(NULL));while (1){int x = rand() % 3;int y = rand() % 3;if (arr[x][y] == ' '){arr[x][y] = 'O';break;}}
}

主体函数

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "sanziqi.h"int main()   //主函数
{int input = 0;char arr[3][3] = { 0 };do{menu();printf("请选择你想进行的动作:>");scanf_s("%d", &input);switch (input){case 1:init_chess(arr);if (whom_act()){while (1){computer_act(arr);print_chess(arr);if ((jud_win(arr)) == 'X'){printf("玩家赢\n");break;}else if ((jud_win(arr)) == 'O'){printf("电脑赢\n");break;}player_act(arr);print_chess(arr);if ((jud_win(arr)) == 'X'){printf("玩家赢\n");break;}else if ((jud_win(arr)) == 'O'){printf("电脑赢\n");break;}else if (chess_full(arr)){printf("平局\n");break;}}}else{while (1){print_chess(arr);player_act(arr);print_chess(arr);if ((jud_win(arr)) == 'X'){printf("玩家赢\n");break;}else if ((jud_win(arr)) == 'O'){printf("电脑赢\n");break;}computer_act(arr);print_chess(arr);if ((jud_win(arr)) == 'X'){printf("玩家赢\n");break;}else if ((jud_win(arr)) == 'O'){printf("电脑赢\n");break;}else if (chess_full(arr)){printf("平局\n");break;}}}break;case 0:printf("正在退出游戏\n");break;}} while (input);return 0;
}

项目代码

三子棋项目代码

【C语言】简单实现三子棋(井字棋)小游戏相关推荐

  1. C语言 VS2019编译器实现简易井字棋小游戏~

    文章目录 井字棋小游戏 游戏实现 一.创建新项目及游戏文件 二.引头文件,定义符号 三.主函数 打印菜单 四.开始游戏 1.创建二维数组 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6. ...

  2. qt制作棋牌游戏之XO棋(井字棋)

    原理很简单,就是点击鼠标进行下子,电脑与你进行博弈 没事做做还是挺有意思的. 源码在下面: mylabel.h #ifndef MYLABEL_H #define MYLABEL_H#include ...

  3. C语言实现小游戏之井字棋

    目录 前言 一.井字棋游戏的主流程 二.游戏部分 1.游戏函数 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋(两个难度等级) 6.判断游戏是否结束 三. 源码展示 总结 前言 这是我在学习 ...

  4. python井字棋ai,python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  5. 用IE网页学游戏-井字棋

    IE网页学游戏-井字棋 井字棋实现交互的简单小游戏,学习使用表格,理解javascript函数. 1.构造棋盘 用table元素的行列构造三行三列的表格.设置好120像素的井字棋背景,三个小图表示方格 ...

  6. 井字棋,一个不错的选择

    学习的时候总会感到无聊,困乏,需要再适当的时间放松一下,但是玩自己做的游戏会更有成就感!这次就自己做一个井字棋来看一看吧. 目录 大致流程 搭建棋盘 二维数组的初始 主函数的运行 玩家下棋 电脑下棋 ...

  7. 井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    实例2:井字棋 井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏.井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向.纵向.或斜线方向 ...

  8. Java 面向对象之井字棋

    文章目录 基本介绍 面向对象 井字棋 项目结构 接口 IGame IChessman IMap IUser 下棋玩家User(Human/Computer) User implements IUser ...

  9. C语言自制小游戏:三子棋(井字棋)智能下棋补充

    目录 一.前期准备 二.逻辑与程序实现 1.连珠 ①横向连珠 ②纵向连珠 ③斜向连珠 ④函数完善 2.堵棋 ①横向堵棋 ②纵向堵棋 ③斜向堵棋 3.整理函数 ①整理AI_Computer函数 ②修改C ...

  10. 【C语言小游戏】三子棋(井字棋)

    hello,csdn的伙伴们,大家好,我们已经学习到了分支与循环,函数,数组这三大块知识,那么我们现在就可以尝试综合运用前面所学的知识,来完成一个简单的小游戏-----三子棋(井字棋) 目录 一.采用 ...

最新文章

  1. 滴滴 Elasticsearch 集群跨版本升级与平台重构之路
  2. JQuery事件绑定,bind与on区别
  3. C语言,C#,Java,JavaScript之强类型与弱类型
  4. java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000
  5. PHP返回数据json数据样式要求是对象{},而不是[]
  6. 特征工程用java或python,机器学习-特征工程-Feature generation 和 Feature selection(示例代码)...
  7. centos6 yum安装mysql5.6_centos 6.5 yum安装mysql 5.6
  8. 胡学纲数据结构c语言PDF,数据结构精品课程参考书目
  9. 通过创建一条链来学习区块链 (1)
  10. 培养逻辑思维的app_数学逻辑思维app哪个好
  11. support转androidx关系映射
  12. 怎么把视频变成GIF
  13. c语言cout函数,c++中cin与cout 详解
  14. xp没有本地计算机策略,WinXP没有网络适配器怎么添加?本地连接消失了如何恢复?...
  15. python画钟表代码_Python技能操作5:用代码做个能挂墙上的大钟表
  16. 这可能是中国最好的13个开源项目
  17. 最常见的卸载Mac应用软件方法,彻底清除,果断收藏!
  18. 基于Echarts构建大数据招聘岗位数据可视化大屏
  19. 18.5.30集训阶段性小结
  20. win7系统计算机分级怎么弄,win7系统分级点不进去,win7系统分级无法评估磁盘

热门文章

  1. java中的反射原理,为什么要使用反射以及反射使用场景(面试常问)
  2. php 如何判断0和false,PHP-判断条件为false的几种情况
  3. 种子轮、天使轮、A、B、C轮、IPO投资是什么意思及特点
  4. 人工智能实战2019第六次作业——尹正超
  5. Avi格式怎么转换?教你无损的把avi格式转换成mp4
  6. 超有趣的linux命令
  7. 笔记一|Selective Search for Object Recognition
  8. 机器学习之神经网络:表述
  9. U.2接口和M.2接口有什么区别
  10. Android加密算法之非对称加密RSA