C++ Tic Tac Toe Game Project is developed in C++ for class XI CBSE board students. Read the source code carefully to understand the working of this program.

函数checkwin();负责:判断游戏的进度 一方获胜、平局、对局仍在进行中。

函数board(); 负责绘制棋盘,和在每次玩家下定棋子之后,清一次屏幕 【system("cls"); 来实现】,然后重新显示更新过的。

知识点盲区:

1.c++ 中EOF的含义:

  1. EOF是end of file的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin);

  2. EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。#define EOF (-1);

  3. 除了表示文件结尾,EOF还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。

2.cin.ignore() 无参数时:

  1. cin.ignore()函数是C++标准输入流(cin)中的一个方法。cin.ignore()函数中有两个参数,分别为数值型的a字符型的 ch ,即cin.ignore( a, ch )。 它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。

  2. 它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, '\n'),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 '\n' 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。

  3. 如果默认不给参数的话,默认参数为cin.ignore(1, EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。

3.cin.get():

[参考]  http://c.biancheng.net/view/1346.html

1、与字符串输入一样,有时候使用 cin>> 读取字符也不会按我们想要的结果行事。 例如,因为它会忽略掉所有前导白色空格,所以使用 cin>> 就不可能仅输入一个空格或回车符。除非用户输入了空格键、制表符之外的其他字符,否则程序将不可能通过 cin 语句继续执行(一旦输入了这样的字符,在程序可以继续下一个语句之前,仍然需要按回车键)。因此,要求用户“按回车键继续”的程序,不能使用 >> 运算符只读取按回车键的行为。

在这些情况下,cin 对象有一个名为 get 的内置函数很有帮助。因为 get 函数是内置在 cin 对象中的,所以可称之为 cin 的一个成员函数。get 成员函数读取单个字符,包括任何白色空格字符。如果程序需要存储正在读取的字符,则可以通过以下任意一种方式调用 get 成员函数。

2、 在这两个例子中,假设 cin 是正被读入字符的 char 变量的名称:

 cin.get (ch);
ch = cin.get(); 

如果程序正在使用 get 函数简单地暂停屏幕直到按回车键,并且不需要存储字符,则该函数也可以这样调用:

 cin.get(); 
/*TIC TAC TOE 井字游戏*///知识盲区:
//1.  cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,
//    弥补cin.get(字符数组名,接收字符数目)的不足(因为cin.get()把换行符保留在输入缓冲区,可以用cin.get()来舍弃换行符)
//2.  如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉.#include<iostream>
using namespace std;
//定义一个全局char类型的变量
char square[10] = { '0','1', '2', '3', '4', '5', '6', '7', '8', '9' };int checkwin();
void board();int main()
{int player = 1, i, choice;char mark;do {board();player = (player % 2) ? 1 : 2;//判断该玩家1走;还是玩家2走。cout << "player" << player << ",enter a number:" ; //棋子放下的位置cin >> choice;mark = (player == 1) ? 'x' : 'o'; //玩家1的棋子用x表示;玩家二棋子用o表示//接下来,玩家1,2开始下棋。棋子落下时,该位置就变成响应玩家棋子的代表符号if (choice == 1 && square[1] == '1')square[1] = mark;else if (choice == 2 && square[2] == '2')square[2] = mark;else if (choice == 3 && square[3] == '3')square[3] = mark;else if (choice == 4 && square[4] == '4')square[4] = mark;else if (choice == 5 && square[5] == '5')square[5] = mark;else if (choice == 6 && square[6] == '6')square[6] = mark;else if (choice == 7 && square[7] == '7')square[7] = mark;else if (choice == 8 && square[8] == '8')square[8] = mark;else if (choice == 9 && square[9] == '9')square[9] = mark;else //如果某个位置有其他玩家下落过棋子,则当前玩家不能下在这里 {cout << "Invalid move,please choice the right postion!" << endl;player--; //因为要让该玩家重新输入,所以这里先减1,下面还要执行 player++;在加1.这样就相当于没加没减,还是原来的玩家。cin.ignore(); //忽略掉此次输入的数choice。cin.get();  //当键入enter键时,才会运行下面的代码}player++;i = checkwin();} while (i==-1); //不要写成i=-1,这里是一个条件,而不是赋值。board();if (i == 1)cout << "==>\aPlayer " << --player << " win ";elsecout << "==>\aGame draw";cin.ignore();cin.get();return 0;}int checkwin()  //返回1,表示游戏结束,有一方赢了;返回0,表示两人平局;返汇-1,表示游戏正在进行
{if (square[1] == square[2] && square[2] == square[3])return 1;else if (square[4] == square[5] && square[5] == square[6])return 1;else if (square[7] == square[8] && square[8] == square[9])return 1;else if (square[1] == square[4] && square[4] == square[7])return 1;else if (square[2] == square[5] && square[5] == square[8])return 1;else if (square[3] == square[6] && square[6] == square[9])return 1;else if (square[1] == square[5] && square[5] == square[9])return 1;else if (square[3] == square[5] && square[5] == square[7])return 1;else if (square[1] != '1' && square[2] != '2' && square[3] != '3'&& square[4] != '4' && square[5] != '5' && square[6] != '6'&& square[7] != '7' && square[8] != '8' && square[9] != '9')return 0;elsereturn -1;}/*绘制棋盘功能*/
void board()
{//执行控制台命令cls,就是CMD下面的cls,功能是清屏,清除所有显示的信息。system("cls"); cout << "\n\n\tTic Tac Toe\n\n" << endl;cout << "player 1(x) - player 2 (o)" << endl << endl;cout << endl;//制作井字格cout << "     |     |     " << endl;cout << "  " << square[1] << "  |  " << square[2] << "  |  " << square[3] << "  " << endl;cout << "_____|_____|_____" << endl;cout << "     |     |     " << endl;cout << "  " << square[4] << "  |  " << square[5] << "  |  " << square[6] << "  " << endl;cout << "_____|_____|_____" << endl;cout << "     |     |     " << endl;cout << "  " << square[7] << "  |  " << square[8] << "  |  " << square[9] << "  " << endl;cout << "     |     |     " << endl;}

TIC TAC TOE 井字游戏相关推荐

  1. C++ 很有趣:编写一个井字游戏 (Tic Tac Toe)

    英文原文:C++ is fun: Writing a Tic Tac Toe Game 这个有趣的C++系列打算展示一下使用C++写代码可以和其他主流语言一样高效而有趣.在第二部分,我将向你展示使用C ...

  2. python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例

    本文实例讲述了Python实现的井字棋(Tic Tac Toe)游戏.分享给大家供大家参考,具体如下: 说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码 ...

  3. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行

    转不到"玩家1"的原因是你的支票中缺少一个空格.你也没有正确地检查一个玩家何时获胜,这就是为什么你会有这种奇怪的行为.你需要检查每个位置,而不仅仅是最后一个.我还添加了对用户输入的 ...

  4. react中使用构建缓存_通过在React中构建Tic Tac Toe来学习ReasonML

    react中使用构建缓存 3. 7. 2018: UPDATED to ReasonReact v0.4.2 3. 7. 2018:更新为ReasonReact v0.4.2 You may have ...

  5. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  6. amazon.设计1. tic tac toe

    //不觉中 已经全力找工作好久好久了.大概有1年半了.身心疲惫,不要放弃.曙光快来了. 1.tic tac toe //http://www.ntu.edu.sg/home/ehchua/progra ...

  7. python井字棋ai,python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. python井字棋游戏代码_Python实现的井字棋(Tic Tac Toe)游戏示例

    Python实现的井字棋(Tic Tac Toe)游戏示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python实现的井字棋(Tic Tac Toe)游戏示 ...

  9. 圈叉游戏 java_【炫光圈叉棋】炫光圈叉棋 Tic Tac Toe Glow 1.8.1下载_安卓(android)软件下载-魅族溜...

    一款炫光风格的圈叉棋游戏,支持单/双人模式.圈叉棋,英文:tic-tac-toe,别名:圈叉游戏.是一种游戏,3*3的9个方格子,先下者画圈,后下者画叉,每人可以在任意没有对方棋子的封闭方格里下一次, ...

  10. tic tac toe php,Python tic-tac-toe检测作弊

    所以现在我写了一个简单的井字游戏.我甚至没有使用我所做的所有功能,但我的问题是: 我如何判断玩家是否在已经有1或2的地方放置1或2,我想我知道怎么做,但是如果他们输入非法字符或试图覆盖已经放置的1或2 ...

最新文章

  1. pipeline和java的区别_总结:四个Pipeline脚本式与声明式语法差异
  2. 双11大返厂,用Python打造最强告白代码,单身节脱单靠自己
  3. 【自然框架】稳定版的Demo——看点二:权限,权限过滤与验证。
  4. 手指贴个“创可贴”,你睡觉都能发电
  5. fastJson,gosn使用小结
  6. 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
  7. sap wad_使用网真和WAD热部署Kubernetes
  8. 数据结构课程设计(学生选课管理系统)链表实现
  9. 语义分割数据集——VOC2012
  10. matlab使用xlsread读取excel时报错/错误使用xlsread/matlab读取数据莫名其妙的错误
  11. 搞懂WebRtc,语音社交源码的开发就入门了!
  12. beautiful report 的简单使用
  13. 建立时间保持时间及违例如何处理,求最大时钟频率
  14. unity太空飞机射击游戏
  15. NAACL2022信息抽取论文分类
  16. nginx详细配置负载均衡全过程以及宕机情况处理
  17. chrome frame节点 取_爬虫3-下(利用Selenium + Chrome Driver模拟用户操作浏览器)
  18. Xutils3 数据库模块的使用方法
  19. 华大芯片时钟调试配置记录
  20. Numerical analysis 数值分析编程问题 Matlab 实现--二分法计算希尔伯特矩阵问题

热门文章

  1. 置信度置信水平置信区间
  2. hiveSQL执行计划(explain使用全网最详细!!)
  3. commons-lang3官方教程
  4. Mixed supervision for surface-defect detection: from weakly to fully supervised learning:表面缺陷检测的混合监督
  5. c++小游戏 走迷宫
  6. 数据库查询语句优化,mysql优化,join语句优化附带YYC松鼠短视频系统详细demo效果
  7. 小白学JAVA之十——枚举
  8. 测试管理工具的基本功能有哪些?
  9. 对偶(duality)的含义
  10. springcloudfeign Required request body is missing