该游戏玩法如下:

描述:自己脑海里想一只动物,然后根据计算机的提示输入yes/no,让计算机它猜你脑海中的动物,如果它猜不对就将自己的动物输入到计算机,让它记住能保证下次它能猜出来。

源文件main.cpp

#include<iostream>
#include<cstdlib>
#include<string>
#include"bintree.h"
#include"useful.h"
using namespace std;void ask_and_move(binary_tree_node<string>*& current_ptr);
binary_tree_node<string>* beginning_tree();
void instruct();
void learn(binary_tree_node<string>*& leaf_ptr);
void play(binary_tree_node<string>* current_ptr);int main() {binary_tree_node<string>* animal_root_ptr;instruct();animal_root_ptr = beginning_tree();doplay(animal_root_ptr);while (inquire("还要不要再玩一次?"));cout << "欢迎下次来玩~" << endl;return EXIT_SUCCESS;while (1);
}
void instruct() {cout << "现在开始游戏吧" << endl;cout << "你脑海中想象一只动物,让我来猜一猜" << endl;
}
void ask_and_move(binary_tree_node<string>*& current_ptr) {cout << current_ptr->data();//输出问题if (inquire("请回答:")) {current_ptr = current_ptr->left();}elsecurrent_ptr = current_ptr->right();
}
//创建二叉树
binary_tree_node<string>* beginning_tree(){binary_tree_node<string>* root_ptr;//头节点指针binary_tree_node<string>* child_ptr;//孩子节点指针const string root_question("你是哺乳动物么?");const string left_question("你的体型比猫大,对么?");const string right_question("这个动物是生活在水里么?");const string animal_1("袋鼠");const string animal_2("老鼠");const string animal_3("罗非鱼");const string animal_4("喜鹊");//根节点root_ptr = new binary_tree_node<string>(root_question);//头节点指针指向新创建的节点问题//左子树child_ptr = new binary_tree_node<string>(left_question);//左孩子问题child_ptr->set_left(new binary_tree_node<string>(animal_1));child_ptr->set_right(new binary_tree_node<string>(animal_2));root_ptr->set_left(child_ptr);//将根节点的左节点设置为子节点的左节点//右子树child_ptr = new binary_tree_node<string>(right_question);child_ptr->set_left(new binary_tree_node<string>(animal_3));child_ptr->set_right(new binary_tree_node<string>(animal_4));root_ptr->set_right(child_ptr);//将根节点的右节点设置为子节点的右节点return root_ptr;
}
void learn(binary_tree_node<string>*& leaf_ptr) {string guess_animal;string correct_animal;string new_question;guess_animal = leaf_ptr->data();cout << "好吧,我不知道是什么,还是你告诉我吧?" << endl;getline(cin, correct_animal);cout << "现在请输入一个新的问题来区分 ";cout <<'['<<correct_animal<<']'<< " 和 " << '['<<guess_animal<<']' << endl;getline(cin, new_question);leaf_ptr->set_data(new_question);cout<<correct_animal << "," << new_question << endl;if (inquire("请回答")) {//如果回答的是正确的则做节点leaf_ptr->set_left(new binary_tree_node<string>(correct_animal));leaf_ptr->set_right(new binary_tree_node<string>(guess_animal));}else {leaf_ptr->set_left(new binary_tree_node<string>(guess_animal));leaf_ptr->set_right(new binary_tree_node<string>(correct_animal));}
}
void play(binary_tree_node<string>* current_ptr) {cout << "你现在脑海里想象一只动物,想好了然后按下回车.";eat_line();//等待,直到按下回车while (!current_ptr->is_leaf())//如果不是叶子节点就执行ask_and_remove()函数,因为是叶子节点就直接输出最后猜测的结果ask_and_move(current_ptr);cout << ("是" + current_ptr->data()+"吧");if (!inquire(",我猜对了吗?"))//询问是否猜对,否,将该动物添加到二叉树中learn(current_ptr);elsecout << "我猜对了,哈哈哈哈" << endl;}

bintree.h头文件

template<class Item>
class binary_tree_node {
public:typedef Item value_type;binary_tree_node(const Item& init_data = Item(), binary_tree_node* init_left = NULL, binary_tree_node* init_right = NULL) {data_field = init_data;left_field = init_left;right_field = init_right;}Item data() { return data_field; }binary_tree_node* left() { return left_field; }binary_tree_node* right() { return right_field; }void set_data(Item new_data) { data_field = new_data; }void set_left(binary_tree_node* new_left) { left_field = new_left; }void set_right(binary_tree_node* new_right) { right_field = new_right; }bool is_leaf() {return (left_field == NULL) && (right_field == NULL);}private:Item data_field;binary_tree_node* left_field;binary_tree_node* right_field;
};

useful.h

#ifndef __USEFUL__
#define __USEFUL__
double random_fraction();
double random_real(double low, double high);
void display(double x);
void eat_line();
bool inquire(const char query[]);
#endif

useful.cpp

#include<assert.h>
#include<ctype.h>
#include<iostream>
#include<stdlib.h>
#include"useful.h"
using namespace std;void display(double x) {const char STAR = '*';const char BLANK = ' ';const char VERTICAL_BAR = '|';const int LIMIT = 39;int i;if (x < -LIMIT)x = -LIMIT;else if (x > LIMIT)x = LIMIT;for (int i = -LIMIT; i < 0; i++) {if (i > x)cout << STAR;elsecout << BLANK;}cout << VERTICAL_BAR;for (int i = 1; i <= LIMIT; i++) {if (i <= x)cout << STAR;elsecout << BLANK;}
}
//返回浮点0-1的随机数
double random_fraction() {//cstdlibreturn rand() / double(RAND_MAX);
}
double random_real(double low, double high) {assert(low <= high);return low + random_fraction()*(high - low);
}
void eat_line() {char next;docin.get(next);//一直等待,直到按下回车while (next != '\n');
}
//传入一个数组
bool inquire(const char query[]) {char answer;do {cout << query << "[Yes or No]" << endl;cin >> answer;answer = toupper(answer);//这个表示变成大写eat_line();}while ((answer != 'Y') && (answer != 'N'));//如果输入的不是yes/no就继续询问return (answer == 'Y');//返回输入的是否为yes,是返回true否则返回false
}

完整代码获取:https://gitee.com/lihiyu/guess_animal

二叉树实现猜动物小游戏相关推荐

  1. python超简单小游戏代码-Python实现简单的猜单词小游戏

    本文实例为大家分享了Python实现猜单词小游戏的具体代码,供大家参考,具体内容如下 思路 1.一个words列表里存放若干的单词,例如:["extends", "pri ...

  2. Py之tkinter:python最简单的猜字小游戏带你进入python的GUI世界

    Py之tkinter:python最简单的猜字小游戏带你进入python的GUI世界 目录 输出结果 设计思路 输出结果 设计思路 from tkinter import * import tkint ...

  3. 1.12 实例:猜数字小游戏

    猜数字是一个经典的小游戏,程序先产生一个随机数,然后用户输入数字,程序将输入的数字与随机数进行对比,给出用户相应的提示信息. 本节实现了一个基于 IO 流的猜数字游戏,游戏中限制玩家游戏次数,游戏试玩 ...

  4. 第三次学JAVA再学不好就吃翔(part28)--猜数字小游戏

    学习笔记,仅供参考 面向对象 猜数字小游戏 随机生成一个1 ~ 100之间的数,我来猜是几: import java.util.Scanner;class GuessNumTest {public s ...

  5. 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  6. 编程猜单词游戏python_Python实现简单的猜单词小游戏

    本文实例为大家分享了Python实现猜单词小游戏的具体代码,供大家参考,具体内容如下 思路 1.一个words列表里存放若干的单词,例如:["extends", "pri ...

  7. java演练 猜奇偶小游戏开发 DB游戏必输的设计

    java演练 猜奇偶小游戏开发 DB游戏必输的设计 阶段一,视频 https://www.ixigua.com/6870390946270446088?logTag=J_BVJOm_LIpQ-hWYY ...

  8. Java Web应用小案例:猜数小游戏

    Java Web应用小案例:猜数小游戏 文章目录 一.演示Python版猜数游戏 二.JSP版猜数游戏程序运行效果

  9. java 做猜数字小游戏_Java Properties类:利用Properties类制作猜数字小游戏

    在学习Random类时我们制作过猜数字小游戏,学习了Properties类后,可以为此游戏添加保存得分记录功能 游戏规则: 玩家可以选择玩游戏还是查看得分 玩游戏: 首先玩家需要选择难度: 难度级别 ...

最新文章

  1. DOS下读取4GB内存
  2. JSInfiniteScrollView
  3. 利用 .NET Framework 命令行工具
  4. guava之Stopwatch
  5. crt python_SecureCRT Python
  6. python控制鼠标_如何用python实现真实的鼠标移动?
  7. spring项目获取ServletContext
  8. Windows下打印服务器的管理(二)
  9. 八个方便C#开发的省时的国外工具
  10. 量子计算机时空穿越,时光穿梭是否可行?未来人类真能穿越时空吗?科学家:不是不可能...
  11. C语言科学计数法中的一个小问题
  12. LQ-1600K打印机色带传动故障分析
  13. Android zip文件压缩与解压
  14. ZEMAX | 如何使用 ISO 元件制图工具
  15. 微信小程序设置字体无效_UI设计微信小程序用了苹方字体,前端却说做不了怎么办?...
  16. 探究网络信息安全问题及防范措施
  17. 【C#工具】后宫佳丽三千
  18. 电脑插上耳机没有声音
  19. 自学整理之HTML5常用标签和知识——小白篇
  20. 陀螺仪与磁力计的姿态融合——互补滤波(续)

热门文章

  1. OpenWrt之上wifi探针简单实现
  2. SpringBoot+SpringDataJpa配置双数据源SqlServer和Mysql
  3. Android厂商推送接入
  4. DCNv2 RuntimeError: Error compiling objects for extension
  5. 【Python成长之路】 文字转图片(白底黑字,无中文乱码)
  6. c语言复习:界面设计
  7. 基于php电影点播平台/电影网站
  8. android4.2.2原生锁屏,酷派大神Note(原生4.2.2Android)L风格+Xposed框架+自定义
  9. 非线性最小二乘问题与Levenberg–Marquardt算法详解
  10. Levenberg–Marquardt算法学习