二维数组实战项目--------《三子棋》(下)

简介: 今天给大家分享一个小游戏,就会我们通常玩的五子棋

3)开始游戏,玩家下棋和电脑下棋


玩家和电脑通过棋盘的坐标来实现对战,这里注意两个点:


  • 坐标的合法性
  • 坐标是否被占用


玩家下棋代码如下:

voidpalyer_move(charboard[ROW][COL], introw, intcol) {
intx=0;
inty=0;
printf("玩家下棋:\n");
printf("请输入要下棋的坐标:");
scanf("%d %d", &x, &y);
//坐标的合法性//坐标是否被占用while(1){
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");
            }
        }
    }

接下来就是电脑下棋,电脑下棋和玩家不一样,玩家可以控制棋子的位置,而电脑不行,所以这里我们需要一个引用一个函数来控制电脑落棋的随机性,这里我们要使用一个库函数,srand函数,用时间戳作为返回值来确保电脑下棋的随机性,关于srand函数大家可以去网上找找资料https://cplusplus.com/reference/cstdlib/srand/?kw=srand,有了这样一个函数,我们就能很好的控制电脑下棋的随机性了,当然,在使用过程中,不要忘记加头文件------>

2cbe175ecaf944738e280ccfbf8f5058.png


电脑下棋代码如下:

computer_move(charboard[ROW][COL], introw, intcol) {
printf("电脑下棋:\n");
while(1)
    {
intx=rand() %row;  //取模运算防止数组越界,生成0~row-1的数字inty=rand() %col;
if (board[x][y] ==' ') {
board[x][y] ='#';
break;
        }
    }
}

到这里,玩家和电脑下棋就搞定了!!!



4)判断输赢


判断输赢可以分成4种情况:

  • 玩家赢  ----------------------用*表示
  • 电脑赢  ----------------------用#表示
  • 平局     -----------------------用C表示
  • 游戏继续 --------------------用Q表示

game.c下代码块如下:

//判断棋盘是否已经占满staticintis_full(charboard[ROW][COL], introw, intcol)
{
inti=0;
for (i=0; i<row; i++)
    {
intj=0;
for (j=0; j<col; j++)
        {
if (' '==board[i][j])
            {
return0;
            }
        }
    }
return1;
}
charis_win(charboard[ROW][COL], introw, intcol)
{
inti=0;
for (i=0; i<row; i++)
    {
if (board[i][0] ==board[i][1] &&board[i][1] ==board[i][2] &&board[i][0] !=' ')
        {
returnboard[i][0];
        }
    }
for (i=0; i<col; i++)
    {
if (board[0][i] ==board[1][i] &&board[1][i] ==board[2][i] &&board[0][i] !=' ')
        {
returnboard[0][i];
        }
    }
if (board[0][0] ==board[1][1] &&board[1][1] ==board[2][2] &&board[1][1] !=' ')
    {
returnboard[1][1];
    }
if (board[0][2] ==board[1][1] &&board[1][1] ==board[2][0] &&board[1][1] !=' ')
    {
returnboard[1][1];
    }
//判断平局if (is_full(board, row, col) ==1)
    {
return'Q';
    }
//继续return'C';
}

到这里游戏就可以正常的运行起来了

4384e34129ff4d73a6f470b3542dda34.png




三.总结


此文章适合有一定C代码基础的童鞋们,小编在学习的时候也是研究了好久才弄明白了,所以第一次看希望大家耐性看完,这里有个视频供大家一起学习,方便理解,觉得有帮助还请老铁们三连!!蟹蟹!!!

目录
相关文章
|
JavaScript Shell 程序员
Electron如何调用.exe文件并传递参数
Electron如何调用.exe文件并传递参数
1401 0
Electron如何调用.exe文件并传递参数
|
存储 消息中间件 架构师
如何估算集群所需的存储、计算资源?
如何估算集群所需的存储、计算资源?
|
算法 Java 应用服务中间件
cas5.3:CAS Server搭建
cas5.3:CAS Server搭建
977 0
|
7月前
|
机器学习/深度学习 编解码 BI
RT-DETR改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
RT-DETR改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
197 0
RT-DETR改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
|
10月前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
11月前
|
安全 数据安全/隐私保护
如何使用贝锐花生壳DDNS,实现OA、ERP、CRM等办公系统远程访问?
在现代企业运营中,员工出差和分支机构的协同工作日益增多,确保不同地点员工安全便捷地访问公司内网的BS架构办公系统成为挑战。贝锐花生壳内网穿透服务提供了一种无需公网IP、无需复杂配置的解决方案,通过简单的三步设置,即可实现高效、安全的远程访问,支持多种主流办公系统。
318 10
|
11月前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
277 3
|
11月前
|
人工智能 缓存 网络协议
AI模拟面试记录
AI模拟面试记录
180 4
|
11月前
|
API 数据安全/隐私保护 开发者
淘宝 API:关键词搜商品列表接口,助力商家按价格销量排序分析数据
此接口用于通过关键词搜索淘宝商品列表。首先需在淘宝开放平台注册并创建应用获取API权限,之后利用应用密钥和访问令牌调用接口。请求参数包括关键词、页码、每页数量、排序方式及价格区间等。返回结果含总商品数量及具体商品详情。使用时需注意签名验证及官方文档更新。
|
存储 人工智能 搜索推荐
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 27页论文及实现代码
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛C题的解决方案,详细阐述了如何构建泰迪内推平台的招聘与求职双向推荐系统,包括数据收集、分析、画像构建、岗位匹配度和求职者满意度模型的建立,以及履约率最优化的推荐模型,提供了27页的论文和实现代码。
251 0
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 27页论文及实现代码