在 C语言实现一个简单的猜数字游戏 中,我们用C语言实现了一个简单的猜数字游戏,但是整个逻辑都在main()函数中,这种一个main函数从头到尾的方式很不好,今天我们用C++来将这个程序改写一下。 整个程序的大部分工作,实际上是由主持人这个角色完成的,包括确定最初的目标数字,判断猜测的数字大小,因此,我们可以将主持人抽象成Judge这个类,让这个类来负责这些工作,而主函数则负责与之交互,完成游戏过程。
#include <iostream> #include <random> using namespace std; class Judge { public: Judge() { max = 100; min = 0; default_random_engine eng; random_device rnd_device; eng.seed(rnd_device()); uniform_int_distribution<int> nums(min,max); target = nums(eng); } bool judge(int guess) { ++count; if(target == guess) { return true; } else if(target > guess) { cout<<"the target is greater than "<<guess<<endl; min = guess; return false; } else { cout<<"the target is less than "<<guess<<endl; max = guess; return false; } } int getmin() { return min; } int getmax() { return max; } int getcount() { return count; } private: int target; int max; int min; int count; }; int main() { cout<<"WELCOME"<<endl; while(true) { Judge j; while(true) { cout<<"please guess a number between " <<j.getmin()<<" - "<<j.getmax()<<endl; int guess = 0; cin.sync(); cin>>guess; if(cin.fail()) { cin.clear(); continue; } if(j.judge(guess)) { cout<<"You WIN!"<<endl; break; } } cout<<"Do you want to play again?(Y-yes,N-no)"; char c = 'Y'; cin>>c; if('Y'!=toupper(c)) break; } return 0; }
这里,主要用到了C++中类的封装机制以及C++11中随机数的生成方式 其实,在这个程序中还有不完善的地方,比如对输入的处理,对用户提示等,有兴趣的朋友,可以自己完善,锻炼自己的动手能力。