多子棋(三子棋plus版本)
目录
前言:
一、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版本)相关推荐
- C语言实现井字棋/三子棋
Hello,大家好,我是李同学 今天我们来实现一个简单的游戏 就是大家小时候经常玩的游戏井字棋/三子棋 那什么是井字棋呢? 井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏, ...
- 用c语言实现小游戏三子棋
小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 小结 三子棋的基本玩 ...
- 来把三子棋吗?创建属于你的三子棋。
三子棋 三子棋 整体代码 模板 思路: 实现 1.创建游戏菜单,让玩家可以多次玩游戏 2.menu函数打印菜单 3.game()函数里用来实现棋盘初始化,打印边界线,电脑下棋,玩家下棋,和判断的整体逻 ...
- 用c语言实现三子棋,它来了!!
三子棋 三子棋 三子棋介绍 描述 基本流程 代码实现 用户交互菜单 打印棋盘 棋盘初始化 玩家落子 电脑落子 判定胜负关系 判定和棋情况 game()函数 总代码 三子棋 三子棋介绍 三子棋又叫井 ...
- C语言人机大战之决战三子棋之巅
文章目录 C语言人机大战之三子棋 一.游戏规则 二.游戏实现 (1)游戏界面 (2)游戏ing 初始化棋盘 打印棋盘 玩家落子 电脑落子 判断输赢 棋盘满否 三.代码总结 (1)game.h (2)t ...
- 程序员成长之旅——C语言三子棋
程序员成长之旅--C语言三子棋 简易介绍三子棋 三子棋编程过程 三子棋代码总览 game.h game.c test.c 简易介绍三子棋 进行了这么多天的c语言学习,今天给大家讲一下三子棋是如何用c语 ...
- 可以双人玩的三子棋!
目录 三子棋 三子棋实现 实现结果 三子棋 **:三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等. 三子棋实现 分段实现~将游戏代码分成3段 test.c 三子棋游戏的主体流程 ga ...
- 用C语言实现三子棋(含思路+完整代码)
三子棋 目录 三子棋 三子棋含义: 基本思路: 1.创建用户交互菜单界面 2.初始化棋盘 3.显示棋盘面板 4.用户落子 5.电脑随机正确落子 6.判断胜负 7.创建Game界面 完整代码 代码结果显 ...
- 三子棋游戏 2020-12-29
简单的三子棋 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现 ...
最新文章
- springboot @RequestBody 接收字符串
- 移动并重命名2000个文件,Python,3秒
- DeepLearning.AI第一部分第四周:深层神经网络
- 猎豹浏览器怎么查看历史记录 猎豹浏览器历史记录查看教程
- 深入剖析ORACLE数据库备份与恢复的原理
- LeetCode刷题(28)
- 华为鸿蒙内测报名要报吗,华为鸿蒙HarmonyOS 2.0公测版/内测版申请和招募指南,快来报名尝鲜吧!...
- 线段树2 求区间最小值
- git grep 全字匹配_git log --grep 筛选(转)
- [问题记录]编译AArch64平台的sigar源码遇到的问题
- 关于onpropertychange与oninput的兼容问题
- 基于simulink的模糊PID控制器设计与仿真
- SpringBoot学习心得分享
- 医院子母钟时钟系统方案
- android像素密度转厘米,Android 屏幕适配-像素密度适配
- VMWare虚拟机Ubantu20.10添加中文智能拼音输入法
- 抢菜捡漏工具(PrintScreenCatchImg)
- P5208-[WC2019] I 君的商店【交互,二分】
- iPhone/iPad怎么进入恢复模式?苹果各机型启动恢复模式方法汇总
- Chamfer Distance--倒角距离
热门文章
- 树莓派4B——操作系统的安装
- 使用TASSEL学习GWAS笔记(3/6):基因型数据可视化:kingship,PCA,MDS
- 每日一篇(1):判断文件夹中是否有同名文件并处理重名问题
- 社群运营普遍存在的3个问题,微信群助手帮你通通解决!
- KNN和K-means的区别 为什么KNN算法里的K越小模型会越复杂? 过拟合和欠拟合的偏差和方差问题
- 合并多个文件夹中的文件
- 【机械】基于matlab实现直齿圆柱齿轮应力计算附matlab代码
- SAS学习6(freq过程、tabulate过程、univariate过程、plot过程、chart过程)
- oSIP协议栈(及eXoSIP、Ortp等)使用入门(转)
- [玩机技巧] [续航][省电][coloros11] 提升续航的终极方案