鹏哥C语言59-60---三子棋游戏

//------------------------------------------------------5.  数组实现(游戏)-----------------------------------------
//----------------------------------------------------5.1 利用数组实现 三子棋----------------------------------------
// 分块 

test.c     //测试游戏的逻辑
game.c //游戏代码的实现(函数定义)
game.h //游戏代码的声明(函数声明)

//---------------------------------------------------------test.c------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
//--------------------------------------------三子棋游戏

包含头文件

#include "game.h"

菜单页面

void menu()
{printf("****************************************\n");printf("**************** 1.paly ****************\n");printf("**************** 0.exit  ***************\n");printf("****************************************\n");
}

进入游戏

void game()
{char      ret = 0;char board[ROW][COL] = { 0 };//初始化 空 棋盘InitBoard(board, ROW, COL);//打印 空 棋盘DisplayBoard(board, ROW, COL);//---------------------开始下棋while (1){//玩家下棋PlayerMove(board, ROW, COL);//判断输赢 (玩家赢*/电脑赢#/满格平局Q/游戏继续C 四种状态)ret = Iswin(board, ROW, COL);if (ret != 'C'){break;}DisplayBoard(board, ROW, COL);// 电脑下棋  (找没有下棋的位置随机下)ComputerMove(board, ROW, COL);//判断输赢if (ret != 'C'){break;}DisplayBoard(board, ROW, COL);}switch (ret){case '*':printf("玩家赢,游戏结束\n");break;case '#':printf("电脑赢,游戏结束\n");break;case 'Q':printf("平局,游戏结束\n");break;}DisplayBoard(board, ROW, COL);}

主程序

int main()
{srand((unsigned int)time(NULL)); //设置随机数的生成起点int input = 0;while(1){menu();// 打印 游戏菜单  (函数)printf("请选择:>");scanf("%d", &input);printf("\n");if (input == 1){printf("三子棋\n");{game(); // 开始游戏 游戏逻辑(函数) ( 定义在game.c   声明在game.h  )break;}}else if (input == 0){printf("退出游戏");break;}else{printf("输入错误,请重新选择\n\n");}}return 0;
}

//---------------------------------------------------------game.h------------------------------------------------------

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 3 // 定义棋盘的行数
#define COL 3   // 定义棋盘的列数//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col);//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col);//判断输赢
char Iswin(char board[ROW][COL], int row, int col);

//---------------------------------------------------------game.c------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS

包含头文件

#include "game.h"

//-------------------------------------------------------------初始化 空 棋盘

void InitBoard(char board[ROW][COL], int row, int col) 
{int i = 0; int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ' ';}}
}

//---------------------------------------------------------------------打印 空 棋盘:低配版

void DisplayBoard(char board[ROW][COL], int row, int col) 
{int i = 0;for (i = 0; i < row; i++){//打印数据printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);//打印分割信息if(i<row-1){printf("---|---|---\n");}}}


//------------------------------------------------------------------打印 空 棋盘:高配版

void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){//打印数据int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if(j<col-1)printf("|");}printf("\n");//打印分割信息if (i < row - 1){int j = 0;for (j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}}

//-------------------------------------------------------------------玩家下棋

void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下棋\n");while(1){printf("请输入坐标:>");scanf("%d %d", &x, &y);//判断输入的坐标是否有效if ((x >= 1 && x <= row) && (y >= 1 && y <= col)){//判断 要输入的坐标是否已经 输入过if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*'; break;}else{printf("坐标被占用,请选择其他位置");}}else{printf("坐标无效,请重新输入\n");}}}

//-----------------------------------------------------------------------电脑下棋

void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋\n");int x = 0;int y = 0;while(1){x = rand() % row; // x 坐标范围 0-2y = rand() % col;// y 坐标范围 0-2if (board[x][y] == ' '){board[x][y] = '#';break;}}}

//---------------------------------------------------------------------判断输赢
//判断输赢 (玩家赢*/电脑赢#/满格平局Q/游戏继续C 四种状态)//如果棋盘满了,返回1,不满返回0

int Isfull(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' '){return 0;}}}return 1;
}
char Iswin(char board[ROW][COL], int row, int col) 
{//先判断行int i = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')//-----------可改造{return board[i][1];}}//再判断列int j = 0;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')//------------可改造{return board[1][j];}}//再判断对角线if(board[0][0]== board[1][1]&& board[1][1] == board[2][2] && board[1][j] != ' ')//-----------可改造{return board[1][1];}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][j] != ' '){return board[1][1];}//前边没有返回,没有人赢,判断是否平局if (Isfull(board,row,col)){return 'Q';}//游戏继续return 'C';}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551803.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

击破壁垒,融合共生,Matter技术点爆智能家居万亿市场!

“爆改”家居生态&#xff0c;点亮万亿蓝海&#xff0c;Matter够格吗&#xff1f; 在万物互联的时代浪潮中&#xff0c;智能家居已加速从单品智能发展至全屋智能&#xff0c;然而之前Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home、Aqara Home、TuYa与HomeA…

开放式耳机什么品牌好?精选无差评开放式耳机推荐!

市场上开放式耳机的日益增多为用户带来了丰富的选择&#xff0c;但也使得一些人在众多产品中难以做出决定&#xff0c;不知道开放式耳机哪个牌子的好&#xff1f;为了帮助解决这个问题&#xff0c;我挑选了五款既实用又获得好评的开放式耳机&#xff0c;目的是为大家提供方便&a…

详细指南:如何有效解决Windows系统中msvcp140.dll丢失的解决方法

如果你在使用Windows系统时遇到“msvcp140.dll丢失”的错误提示&#xff0c;通常是因为你的计算机上缺少或损坏了msvcp140.dll文件。msvcp140.dll是Microsoft Visual C Redistributable包的一部分&#xff0c;许多应用程序和游戏需要它来正常运行。以下是几种解决msvcp140.dll丢…

Jetbrains 推出 CodeCanvas:云开发时代的未来已来

人们不大愿意相信事实 只愿意相信故事 你信仰什么 就会怎样生活 近期 jetbrains 悄悄的推出了新的产品 CodeCanvas&#xff0c;这个产品的推出具有划时代的意义。 CodeCanvas 的定位是一个云 IDE 。想一想 jetbrains 从 2000 年开始就专注于 IDE 的开发&#xff0c;准确来说是…

当前用户添加到 [uucp ]组

archlinux使用tabby 查看当前用户&#xff1a;将当前用户添加到 uucp 组验证组成员身份重新登录 /dev/ttyUSB0 设备的所有者是 root&#xff0c;而所属组是 uucp,如果您想以当前用户身份访问此设备&#xff0c;您可以将当前用户添加到 uucp 组中。 以下是将当前用户添加到 uucp…

基于Springboot+Vue的c语言学习辅导网站的设计与实现 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能

关键词&#xff1a;audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景&#xff0c;那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…

待办事项应用SideQuests

赶在国庆长假前&#xff0c;自驾&#x1f697;出去玩了几天。 国庆前的错峰出游简直是太香了&#xff01;一路上&#x1f6e3;️畅通无阻&#xff0c;停车&#x1f17f;️不用抢&#xff0c;吃饭&#x1f354;不用等&#xff0c;景点&#x1f3de;️不用排队&#xff0c;拍照&…

热门录屏工具详细介绍及上手攻略

如果你的公司业务范围比较广&#xff0c;那应该会频繁进行远程会议吧。对于远程会议最方便的记录方式就是录屏啦。但对于很多人来说&#xff0c;如何选择合适的录屏方法以及使用相关软件可能还存在一些困惑。接下来&#xff0c;就让我们一起深入探讨如何录屏以及了解一些优秀的…

[Notepad++] 文本编辑器的下载及详细安装使用过程(附有下载文件)

程序员常用的文本编辑器Notepad&#xff0c;用于修改配置文件等 下载链接在文末 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 解压文件&#xff0c;得到 双击exe文件 选择简体中文&#xff0c;点击OK 点击下一步 点击“我接受” 更改安装目录&#xff0c;不…

Arthas sm(查看已加载类的方法信息 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.6 sm&#xff08;查看已加载类的方法信息 &#xff09;举例1&#xff1a;显示类加载的方法举例2&#xff1a;显示类加载的executeTask方法详细信息 本人其他相关文章链接 二、命令列表 2.2 class/classloader相关命令 …

如何使用SCCMSecrets识别SCCM策略中潜在的安全问题

关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具&#xff0c;该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行&#xff0c;并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外&#xff0c;它还将…

如何让每一次销售都成为顾客心中的温馨记忆

舒适&#xff0c;乃交往之至高艺术&#xff0c;亦渗透于买卖交易的每一环节。 在这个体验为王的时代&#xff0c;消费者追求的早已超越了物质本身&#xff0c;转而寻觅那份独特的“心灵触动”。他们购买的&#xff0c;实则是一种情感的共鸣&#xff0c;一种被重视与信赖的“感觉…

分糖果C++

题目&#xff1a; 样例解释&#xff1a; 样例1解释 拿 k20 块糖放入篮子里。 篮子里现在糖果数 20≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 13≥n7&#xff0c;因此所有小朋友获得一块糖&#xff1b; 篮子里现在糖果数变成 6<n7&#xf…

git 报错git: ‘remote-https‘ is not a git command. See ‘git --help‘.

报错内容 原因与解决方案 第一种情况&#xff1a;git路径错误 第一种很好解决&#xff0c;在环境变量中配置正确的git路径即可&#xff1b; 第二种情况 git缺少依赖 这个情况&#xff0c;网上提供了多种解决方案。但如果比较懒&#xff0c;可以直接把仓库地址的https改成ht…

Python从0到100(六十):机器学习-模型选择与交叉验证

1、为什么需要交叉验证 交叉验证目的&#xff1a;为了让被评估的模型更加准确可信 在机器学习中&#xff0c;模型的性能评估至关重要。如果仅使用训练数据进行模型训练&#xff0c;然后直接在测试集上进行评估&#xff0c;可能会出现模型对训练数据过拟合的问题。过拟合的模型…

python7_标识符

标识符 关键字 说明 1和java一样&#xff0c;python也有关键字&#xff0c;不允许以以下字段作为方法名和类名 2标识符是区分大小写的&#xff0c;例如A和a是不一样的 3标识符第一个数字必须是字母或者下划线&#xff0c;之后可以是字母、数字、下划线 4以双下划线开头或者结…

828华为云征文|华为云 Flexus X 实例初体验

一直想有自己的一款的服务器&#xff0c;为了更好的进行家庭娱乐&#xff0c;甚至偶尔可以满足个人搭建开发环境的需求&#xff0c;直到接触到了华为云 Flexus X 云服务器。Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理能…

第二届两岸新经济产业发展研讨会闭幕,爱迪斯通董事长发表演讲

9月29日&#xff0c;第二届两岸新经济产业发展研讨会在福州高新区圆满落幕。此次研讨会由清华大学两岸发展研究院主办&#xff0c;福州市招商行动领导小组办公室、福州高新区承办&#xff0c;汇聚了两岸的专家学者及企业家代表近200人&#xff0c;共同探讨新质生产力的发展与两…

3.4K Star,你的下一个商店

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在当今电商高速发展的时代&#xff0c;商家和开发者都在寻找更加灵活…