萌新的九宫棋

文章目录

  • 萌新的九宫棋
    • 一、概述
      • 1、实现功能
      • 2、介绍
      • 3、编译器
      • 4、致谢
    • 二、设计思路
    • 三、程序实现
      • (一)、函数设计
      • (二)、部分具体实现
        • 1、main()函数的实现
        • 2、pcMove()实现--计算机的落子
        • 3、isWin()函数的实现--判断是否有玩家赢棋
        • 4、playAMethod()函数实现
    • 四、部分运行效果
    • 五、相关支持
      • 作者简介
      • 联系方式

一、概述

1、实现功能

该程序提供了九宫棋玩法的实现。并且可以接受两种模式,人机对战和双人对战,并且支持通过命令行参数选择两种模式。

2、介绍

学习C语言到数组函数这块了,打算写个小的项目来练一下手,验证一下自己的学习成果(P.S.当然博客也是第一次写)。想来想去应该是九宫棋比较简单,所以用学到的知识简单实现了一下九宫棋。如果有不妥帖之处,恳请大佬多多指正。

3、编译器

MinGW gcc version 9.2.0

4、致谢

P.S. 本程序借鉴了Hidden.Blueee的三子棋的部分思路,十分感谢Hidden.Blueee提供的一些思路。

二、设计思路

大体分为1界面以及错误信息输出2玩家和计算机落子3判断输赢4单次九宫棋玩法的实现5主函数的统筹调用 五部分。

三、程序实现

(一)、函数设计

函数名 注解 返回值 参数 描述
output 1 void int 输出欢迎,结束界面
isFull 3 int char (*) [03] 判断棋盘是否已满
isWin 3 char char (*) [03] 判断是否有玩家赢得比赛
endputWin 1 void char 游戏单次结束输出获胜者
inputErr 1 void int 输出输入错误的提示
playAMethod 4 void void 人机对战的实现
playBMethod 4 void void 双人对战的实现
pcMove 2 void char (*) [03] 电脑无脑落子
playerMove 2 void char (*) [03] 玩家落子
putchess 1 void char (*) [03] 输出实时棋盘
putMenu 1 void void 打印选择菜单

(二)、部分具体实现

1、main()函数的实现

说句实话,发现这个主函数多少有点臃肿。
一个小tip:记得处理scanf函数读取后残留的换行符。

int main (int argc, char **argv)
{// 需要引用这个头文件来实现命令行参数处理 #include <unistd.h>int opt;char modeChoice = 'A';char quitmark = 'q';opterr = 0; // 不输出命令行参数错误// 命令行参数的获取及处理opt = getopt (argc, argv, "ABab");output(1);    // 输出欢迎页面if (argc == 1)  // 无命令行参数{putMenu(); // 输出菜单while (true){scanf("%c", &modeChoice);//getchar();system("cls");if (modeChoice == 'a' || modeChoice == 'A'){playAMethod();break;}else if(modeChoice == 'b' || modeChoice == 'B'){playBMethod();break;}else{inputErr(1);}}}else if (argc == 2){if (opt == 'a' || opt == 'A')playAMethod();else if(opt == 'b' || opt == 'B')playBMethod();else{inputErr(1);return 0;}}else    // 命令行参数输入过多错误{inputErr(1);return 0;}while (true){printf("Continue or Quit?\n");printf("Press C to continue and q to quit!\n");scanf("%c", &quitmark);getchar();system("cls");if(quitmark == 'C' || quitmark == 'c'){putMenu();while (true){scanf("%c", &modeChoice);getchar();if (modeChoice == 'a' || modeChoice == 'A'){playAMethod();break;}else if(modeChoice == 'b' || modeChoice == 'B'){playBMethod();break;}else{inputErr(1);}}}elsebreak;}output(2);return 0;
}

2、pcMove()实现–计算机的落子

话说有了计算机的落子玩家的的落子玩家落子应该容易实现了。

void pcMove(char chess[MAX_ROW][MAX_COL], char player)
{srand((unsigned int)time(0));while (true){int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (chess[row][col] != ' ')   // 判断要落子的地方是否已经有棋子了continue;chess[row][col] = player;break;}
}

3、isWin()函数的实现–判断是否有玩家赢棋

char isWin(char chess[MAX_ROW][MAX_COL])
{// 判断各行是否有玩家赢for (int row = 0; row < MAX_ROW; row++){if (chess[row][0] != ' '&& chess[row][0] == chess[row][1]&& chess[row][0] == chess[row][2]) return chess[row][0];}for (int col = 0; col < MAX_COL; col++){if (chess[0][col] != ' '&& chess[0][col] == chess[1][col]&& chess[0][col] == chess[2][col]) return chess[0][col];}// 判断对角线是否有玩家赢if (chess[0][0] != ' '&& chess[0][0] == chess[1][1]&& chess[0][0] == chess[2][2]) return chess[0][0];if (chess[2][0] != ' '&& chess[2][0] == chess[1][1]&& chess[2][0] == chess[0][2]) {return chess[2][0];}// 判断棋盘是否已满if (isFull(chess))return 'q';return ' ';
}

4、playAMethod()函数实现

void playAMethod(void)
{// 初始化棋盘char chess[MAX_ROW][MAX_COL] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};// 游戏开始,玩家都未落子,输出棋盘putchess(chess);while (true){playerMove(chess, 'x');system("cls");putchess(chess);switch(isWin(chess)){case 'x' :endputWin('x');return;case 'o' :printf("You can't even beat the Artificial mental retardation!\n");endputWin('o');return;case 'q' :printf("You're tied with the Artificial mental retardation!\n");return;case ' ' :break;}pcMove(chess, 'o');system("cls");putchess(chess);switch(isWin(chess)){case 'x' :endputWin('x');return;case 'o' :printf("You can't even beat the Artificial mental retardation!\n");endputWin('o');return;case 'q' :printf("You're tied with the Artificial mental retardation!\n");return;case ' ' :break;}}
}

四、部分运行效果


五、相关支持

  • 作者简介

    • 作者:馗顺先生
    • 简介:一个热爱程序设计与电子技术的预备猿。
  • 联系方式

    • 代码下载:https://pan.baidu.com/s/1dM9tvnhCd4m3d_7pyrLqNA
      提取码:uydk
    • 邮箱:2727144006@qq.com
    • 博客地址: https://blog.csdn.net/qq_33519837?spm=1001.2100.3001.5113

萌新的九宫棋(C语言)相关推荐

  1. 【炒鸡萌新向】关于C语言头文件的解释

    [炒鸡萌新向]关于C语言头文件的解释 总所周知,c语言是一个令人秃头的语言.而刚入门的萌新们一定对编译器上方的头文件摸不着头脑.别说什么理解了,看都看不懂是什么玩意那别说怎么理解这段语言所代表的含义了 ...

  2. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...

  3. 转行?小白?来看看这门和Java分庭抗礼的萌新语言!会的同学笑出了声!

    黑马程序员视频库 播妞微信号:mm7718mm 传智播客旗下互联网资讯.学习资源免费分享平台 编程语言的选择一直是各类开发商们(也就是咱们的老板)最爱讨论的话题之一,在程序员行业,相同水平的技术,会因 ...

  4. (萌新笔记)C语言的复习笔记

    初始时间:大一(上) 10月 更新时间:大一(上) 10月 想了想还是写一下简介吧,我在暑假自学了一点C语言,现在是个大一入门C语言(的弱鸡,所以本文可能会有很多基本知识,还请大家斟酌观看 PS:本文 ...

  5. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  6. python3入门与进阶笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

  7. 【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文

    前言 本片博文主要面向于还没接触过web开发的萌新,以及想知道整体流程并且完成建站的萌新:如果你是个大佬,就没必要看下去了. 本篇博文没有难啃的骨头,请各位萌新放心食用. 本篇博文采用通俗易懂的方式讲 ...

  8. 编程萌新注意:别再这样问问题了!学会这样快速定位错误内容

    相信大家混迹在各种技术交流群会经常看到各种奇奇怪怪的提问. 例子 场景一 萌新一进群,甩出一堆代码片段截图. 问:请问有大佬能帮我解决一下问题吗? 我:...... 场景二 萌新写完一段代码,编译报错 ...

  9. python3萌新入门笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

最新文章

  1. Flex4将对象转换成json串
  2. Android下的Linux
  3. 设计模式-创建型-生成器
  4. oracle自动还原,什么是oracle自动恢复操作
  5. JavaScript实现jumpSearch跳转搜索算法(附完整源码)
  6. 为什么说减速带是脑残的设计?
  7. Kali渗透测试——WOL-E
  8. Python 密集知识点汇总
  9. 离散数学课程对应目录
  10. W3Cschool_JS学习
  11. laya ts fgui的list滚动列表设置
  12. C#万年历dll插件
  13. 数据可视化-制作交易收盘价
  14. android x86 remix,Phoenix OS X86 与 Remix OS X86 对比体验
  15. linux mkdir命令用法,常用Linux运维命令 - mkdir命令用法详解
  16. 漏洞利用(CVE-2017-5638)
  17. Google文件系统
  18. 科技公司逐鹿手机配件赛道,“降维打击”会出现吗?
  19. 第四天:关看门狗、设置栈、控制icache、重定位、链接脚本
  20. 1. 机器学习概述与特征工程

热门文章

  1. python 进度条程序_Python:显示程序运行进度条
  2. mysql监控nginx_mysql和nginx服务是否正常监控脚本
  3. iphone怎么投屏到电脑_怎么把笔记本无线投屏到电视?好用的电脑投屏电视办法...
  4. php加密 dll扩展,PHP的openssl加密扩展使用小结(推荐)
  5. php文件上传空间,PHP上传文件-PHP多文件上传
  6. jquery的contains如何实现精准匹配
  7. 【一篇文章搞懂】25K大牛甩出的超详细面试总结
  8. 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式
  9. python【蓝桥杯vip练习题库】BASIC-26报时助手
  10. Tensorflow【实战Google深度学习框架】—TensorBoard