目录

前言:

一、n子棋的思路。

二、代码实现

1.棋盘初始化和打印

2.游戏主体

1.玩家下棋和电脑下棋

3.判断游戏胜利:

三.源码文件

前言:

为了便于读者理解,代码将分块实现,最后会合并在一起,待会也会给出。

一、n子棋的思路。

1.打印棋盘并且对棋盘进行初始化

2.游戏主体,大致分为玩家下棋和电脑下棋

3.判断胜利一方

二、代码实现

1.棋盘初始化和打印

1.棋盘初始化

#include <stdio.h>
#define ROW 100
#define COL 100
int main()
{int n = 0;​​​​​​​printf("你想要玩几子棋,请输入:");scanf("%d", &n);                    //输入想要游玩的n子棋char arr[ROW][COL] = { 0 };         //创建二维数组用于存储棋盘的元素int i = 0;int j = 0;for (i = 0; i < n; i++)             //行{for (j = 0; j < n; j++)         //列{arr[i][j] = ' ';            //初始化为空格}}                

2.棋盘的打印

for (i = 0; i < n; i++){for (j = 0; j < n; j++){printf("%c ", arr[i][j]);   //为了达到九宫格的效果,先打印棋盘元素然后打印|,可以将行元素相互隔离,下面会有代码结果对比if (j < n - 1)printf("|");        //这一步是为了让棋盘更美观,}if (i < n - 1)                   {printf("\n");for (j = 0; j < n; j++){printf("--");                 //打印__下划线,将棋盘分割开if (j < n - 1)printf("|");}}printf("\n");}

如果没有if判断j<n-1,机会出现下面这样的结果,会很不美观。

加上j<n- 1的代码如下

强迫症的同学会比较舒服

2.游戏主体

1.玩家下棋和电脑下棋

首先玩家和电脑下过棋之后该坐标就会被占用,不能把这个坐标覆盖住

下面是玩家下棋代码

{printf("请输入坐标:");int x = 1;int y = 1;while (1)              //循环是用来判断输入坐标是否被占用,被占用就需要重新输入{scanf("%d %d", &x, &y);    //玩家输入的坐标if (arr[x - 1][y - 1] == ' ')  //减一是因为数组下标是从零开始的,我们输入坐标肯定是从一开始的{arr[x - 1][y - 1] = '*';break;     //如果没被占用就直接跳出}else{printf("坐标被占用,请重新输入:");}}
}

电脑下棋代码

如何实现电脑自动下棋:我们可以让电脑随机生成坐标(可以使用时间戳和随机数函数生成坐标)

下面是随机数生成示例


#include <stdio.h>
#include <stdlib.h>        srand使用需要的头文件
#include <time.h>          time函数使用需要的头文件
int main()
{int n = 0;int a = 0;srand((unsigned int)time(NULL));  //rand函数使用之前需要调用srand函数while (a != 10){n = rand() % 100 + 1;     rand是一个随机数生成器printf("%d\n", n);a++;}return 0;
}

运行结果如下


电脑下棋代码:

{int x = 0;int y = 0;while (1){x = rand() % n;            //电脑随机生成坐标y = rand() % n;if (arr[x][y] == ' ')    //判断是否被占用{arr[x][y] = '#';break;}             //电脑生成的坐标不需要被提示,如果被占用就重新生成一个即可}
}

下面是玩家和电脑下棋效果图:

3.判断游戏胜利:

思路:判断游戏会出现三种结果:玩家胜利,电脑胜利,平局

胜利判断:行或列相等,或者对角线相等(坐标全为空也不行)

平局:当所有坐标全部被占用,并且没有出现一方胜利即为平局

char Judge(int n, char arr[ROW][COL])
{int i = 0;    int j = 0;int count = 0;for (i = 0; i < n; i++)     行相等的判断{j = 0;          //i是行,j是列for (j = 0; j < n-1; j++)         //j<n-1是n要减一因为下面数组i要加1{                                  //这样数组就不会越界了//注释:如果arr[i][j]!=arr[i][j+1]说明该行不符合胜利的条件//如果循环结束,也就是i=n,说明该行相等,符合胜利条件//再判断是玩家还是电脑胜利if (arr[i][j] != arr[i][j+1])  {break;}if (j == n-2)        //j==n-2时就已经判断所有行元素是否相等了{if (arr[i][j] != ' '){if (arr[i][j] == '*') //判断电脑还是玩家胜利return '*';       //玩家胜利elsereturn '#';       //电脑胜利}//胜利用return表示,回到主函数是方便跳出循环//你也可以直接打印出胜利,return返回值书写方便之后的书写}}}for (j = 0; j < n; j++)  //判断列相等{i = 0;for (i = 0; i < n-1; i++){if (arr[i][j] != arr[i + 1][j]){break;}if (i == n-2)            //j==n-2时就已经判断所有列元素是否相等了{if (arr[i][j] != ' '){if (arr[i][j] == '*')return '*';elsereturn '#';}}}}for (i = 0; i < n-1; i++)      //正对角线胜利的判断{                                j = i;if (arr[i][j] != arr[i + 1][j + 1]){break;}if (i == n-2)            {if (arr[i][j] != ' '){if (arr[i][j] == '*')return '*';elsereturn '#';}}}for (i = 0; i < n-1; i++)         //斜对角线胜利判断{j = n - i - 1;  //数组下标从零开始,斜对角线上,列的坐标等于n-i-1if (arr[i][j] != arr[i + 1][j - 1]){break;}if (i == n-2){if (arr[i][j] != ' '){if (arr[i][j] == '*')return '*';elsereturn '#';}}}for (i = 0; i < n; i++)     //平局的判断{j = 0;for (j = 0; j < n; j++){if (arr[i][j] != ' ')count++;}//我们可以定义一个计数器; 如果该坐标被占用count就加一//当count等于n的平方时说明棋盘所有坐标都被占用了}if (count == (n * n)){return '=';  //用字符=作为返回值代替平局}
}

三.源码文件

三子棋plus版本n子棋 · e8d3137 · Whitegraces/code_study_1 - Gitee.com

多子棋(三子棋plus版本)相关推荐

  1. C语言实现井字棋/三子棋

    Hello,大家好,我是李同学 今天我们来实现一个简单的游戏 就是大家小时候经常玩的游戏井字棋/三子棋 那什么是井字棋呢? 井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏, ...

  2. 用c语言实现小游戏三子棋

    小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 ​​​​​​​小结 三子棋的基本玩 ...

  3. 来把三子棋吗?创建属于你的三子棋。

    三子棋 三子棋 整体代码 模板 思路: 实现 1.创建游戏菜单,让玩家可以多次玩游戏 2.menu函数打印菜单 3.game()函数里用来实现棋盘初始化,打印边界线,电脑下棋,玩家下棋,和判断的整体逻 ...

  4. 用c语言实现三子棋,它来了!!

    三子棋 三子棋 三子棋介绍 描述 基本流程 代码实现 用户交互菜单 打印棋盘 棋盘初始化 玩家落子 电脑落子 判定胜负关系 判定和棋情况 game()函数 总代码 三子棋 三子棋介绍   三子棋又叫井 ...

  5. C语言人机大战之决战三子棋之巅

    文章目录 C语言人机大战之三子棋 一.游戏规则 二.游戏实现 (1)游戏界面 (2)游戏ing 初始化棋盘 打印棋盘 玩家落子 电脑落子 判断输赢 棋盘满否 三.代码总结 (1)game.h (2)t ...

  6. 程序员成长之旅——C语言三子棋

    程序员成长之旅--C语言三子棋 简易介绍三子棋 三子棋编程过程 三子棋代码总览 game.h game.c test.c 简易介绍三子棋 进行了这么多天的c语言学习,今天给大家讲一下三子棋是如何用c语 ...

  7. 可以双人玩的三子棋!

    目录 三子棋 三子棋实现 实现结果 三子棋 **:三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等. 三子棋实现 分段实现~将游戏代码分成3段 test.c 三子棋游戏的主体流程 ga ...

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

    三子棋 目录 三子棋 三子棋含义: 基本思路: 1.创建用户交互菜单界面 2.初始化棋盘 3.显示棋盘面板 4.用户落子 5.电脑随机正确落子 6.判断胜负 7.创建Game界面 完整代码 代码结果显 ...

  9. 三子棋游戏 2020-12-29

    简单的三子棋 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现 ...

最新文章

  1. springboot @RequestBody 接收字符串
  2. 移动并重命名2000个文件,Python,3秒
  3. DeepLearning.AI第一部分第四周:深层神经网络
  4. 猎豹浏览器怎么查看历史记录 猎豹浏览器历史记录查看教程
  5. 深入剖析ORACLE数据库备份与恢复的原理
  6. LeetCode刷题(28)
  7. 华为鸿蒙内测报名要报吗,华为鸿蒙HarmonyOS 2.0公测版/内测版申请和招募指南,快来报名尝鲜吧!...
  8. 线段树2 求区间最小值
  9. git grep 全字匹配_git log --grep 筛选(转)
  10. [问题记录]编译AArch64平台的sigar源码遇到的问题
  11. 关于onpropertychange与oninput的兼容问题
  12. 基于simulink的模糊PID控制器设计与仿真
  13. SpringBoot学习心得分享
  14. 医院子母钟时钟系统方案
  15. android像素密度转厘米,Android 屏幕适配-像素密度适配
  16. VMWare虚拟机Ubantu20.10添加中文智能拼音输入法
  17. 抢菜捡漏工具(PrintScreenCatchImg)
  18. P5208-[WC2019] I 君的商店【交互,二分】
  19. iPhone/iPad怎么进入恢复模式?苹果各机型启动恢复模式方法汇总
  20. Chamfer Distance--倒角距离

热门文章

  1. 树莓派4B——操作系统的安装
  2. 使用TASSEL学习GWAS笔记(3/6):基因型数据可视化:kingship,PCA,MDS
  3. 每日一篇(1):判断文件夹中是否有同名文件并处理重名问题
  4. 社群运营普遍存在的3个问题,微信群助手帮你通通解决!
  5. KNN和K-means的区别 为什么KNN算法里的K越小模型会越复杂? 过拟合和欠拟合的偏差和方差问题
  6. 合并多个文件夹中的文件
  7. 【机械】基于matlab实现直齿圆柱齿轮应力计算附matlab代码
  8. SAS学习6(freq过程、tabulate过程、univariate过程、plot过程、chart过程)
  9. oSIP协议栈(及eXoSIP、Ortp等)使用入门(转)
  10. [玩机技巧] [续航][省电][coloros11] 提升续航的终极方案