相信看过哈利波特的同学们一定对那顶格兰芬多传下来的分院帽非常的好奇,分院帽是怎么得出正确的结论——去霍格沃茨学校的同学们该进哪所学院的呢?今天我们就用代码来揭示一下~~
好了,废话不多说,我们开始呈现代码!
# include <iostream>
# include <string>
# include <ctime>
# include <Windows.h>
//函数的声明
void Gryffindor();
void Ravenclaw();
void Hufflepuff();
void Slytherin();
//我们需要制作一个秘钥
int judge = 0;
using namespace std;
//分数累计模板
void Score(int score)
{
static int sum = 0;
sum = sum + score;
if (judge == 1)
{
if (sum >= 0 && sum <= 100)
Ravenclaw();
if (sum > 100 && sum <= 300)
Gryffindor();
if (sum > 300 && sum <= 900)
Hufflepuff();
if (sum > 900)
Slytherin();
}
}
//万能的问题模板
void EveryProblem(string problem[5])
{
problem[0] = "我想要知道你最喜欢的颜色是……";
problem[1] = "我想知道你来霍格沃茨学校的目的是……";
problem[2] = "我想知道你对魔法了解多少……";
problem[3] = "我想知道你认为下面哪种动物对你来说最亲切……";
problem[4] = "如果让你出生在中土世界……我是说如果……你会选择做些什么……";
}
//问题函数
void Problem_gram()
{
string problem[5];//定义接收问题的函数
char select;//定义选择的变量
EveryProblem(problem);
for (int count = 1; count <= 5; count++)
{
int i = rand() % 7;//我们想引入一个随机数来打乱问题的顺序
switch (i)
{
case 0:
cout << count << "、" << problem[0] << endl;
Sleep(2000);
cout << "A、蓝色\tB、红色\nC、黄色\tD、银色\n";
cout << "请输入您的选择" << "\t";
cin >> select;
Sleep(1000);
switch (select)
{
case 'A':
Score(0);
cout << "(大声地)拉文……不行,我得保守……我还得继续冷静思考" << endl;;
break;
case 'B':
Score(50);
cout << "(大声地)格兰芬……不行,我得保守……我还得继续冷静思考" << endl;
break;
case 'C':
Score(100);
cout << "(大声地)赫奇……不行,我得保守……我还得继续冷静思考" << endl;
break;
case 'D':
Score(200);
cout << "(大声地)斯莱特……不行,我得保守……我还得继续冷静思考" << endl;
break;
}
Sleep(2000);
system("cls");
break;
case 1:
cout << count << "、" << problem[1] << endl;
Sleep(2000);
cout << "A、快乐的去冒险\tB、学习巫术\nC、结交很多的魔法朋友\tD、很难选,我觉得以上都是我来这里的原因" << endl;;
cout << "请输入您的选择" << "\t";
cin >> select;
switch (select)
{
case 'A':
Score(50);
cout << "哈哈,在这里你会得到快乐的……" << endl;
break;
case 'B':
Score(200);
cout << "额,我好像是明知故问……" << endl;
break;
case 'C':
Score(100);
cout << "这里的教授和同学们都很好相处哟……" << endl;
break;
case 'D':
int n = rand() % 100 + 1;
Score(n);
cout << "你看样子很随便呀……再这么随便我就把你随机分了(大声地)" << endl;
break;
}
Sleep(2000);
system("cls");
break;
case 2:
cout << count << "、" << problem[2] << endl;
Sleep(2000);
cout << "A、一概不知\tB、我父母之前都在这里上过学,他们教会了我一些\nC、我了解很多,比如“除你武器”之类的\tD、我几乎快把低年级的课本翻烂了" << endl;;
cout << "请输入您的选择" << "\t";
cin >> select;
switch (select)
{
case 'A':
cout << "额,我好像是明知故问……" << endl;
Score(200);
break;
case 'B':
cout << "是嘛?那看来你有机会能把你的父母变成师哥师姐咯……哈哈哈……" << endl;
Score(100);
break;
case 'C':
cout << "哦,聪明的孩子,我大概知道你该分去哪里了……" << endl;
Score(0);
break;
case 'D':
cout << "哦,勤奋的孩子,我大概知道你该分去哪里了……" << endl;
Score(50);
break;
}
Sleep(2000);
system("cls");
break;
case 3:
cout << count << "、" << problem[3] << endl;
Sleep(2000);
cout << "A、狮子\tB、鹰\nC、蛇\tD、地鼠" << endl;;
cout << "请输入您的选择" << "\t";
cin >> select;
switch (select)
{
case 'A':
cout << "看来答案已经浮出了水面……" << endl;
Score(50);
break;
case 'B':
cout << "看来答案已经浮出了水面……" << endl;
Score(0);
break;
case 'C':
cout << "看来答案已经浮出了水面……" << endl;
Score(200);
break;
case 'D':
cout << "看来答案已经浮出了水面……" << endl;
Score(100);
break;
}
Sleep(2000);
system("cls");
break;
case 4:
cout << count << "、" << problem[4] << endl;
Sleep(2000);
cout << "A、我想成为富裕的国王\tB、我想成为一位征服世界的勇士\nC、我想成为一位游行四方的谋士,四方皆为自己的朋友\tD、我更喜欢现在的生活,我不想回归过去" << endl;
cout << "请输入您的选择" << "\t";
cin >> select;
switch (select)
{
case 'A':
cout << "你只要足够努力,魔法的皇冕终将属于你……" << endl;
Score(0);
break;
case 'B':
cout << "给你一把宝剑的话,我想再也没有什么能够打消你的勇气……" << endl;
Score(50);
break;
case 'C':
cout << "愿忠诚与希望永远伴随着你……" << endl;
Score(100);
break;
case 'D':
cout << "我是说如果……好吧……看来你的现实主义色彩很强烈嘛!" << endl;
Score(200);
break;
}
Sleep(2000);
system("cls");
break;
default:
break;
}
}
judge = 1;
Score(0);
}
//格兰芬多学院
void Gryffindor()
{
cout << "分院帽:(大声地)格兰芬多!!!" << endl;
Sleep(5000);
system("cls");
cout << "恭喜你!你的血液里铭刻的是戈德里克·格兰芬多的名字,他的不朽伟业将后继有人!" << endl;
cout << "创始人:\t戈德里克·格兰芬多\n" << "特质:\t勇气\n" << "象征元素:\t火\n"
<< "学院的代表色:\t红色,金色\n" << "知名校友:\t哈利•波特\\邓布利多\n" << "代表动物:\t狮子\n";
}
//拉文克劳学院
void Ravenclaw()
{
cout << "分院帽:(大声地)拉文克劳!!!" << endl;
Sleep(5000);
system("cls");
cout << "我们真是庆幸!罗伊纳·拉文克劳也会同样的骄傲我们的学院来临了一位天才魔法师!!!" << endl;
cout << "创始人:\t罗伊纳·拉文克劳\n" << "特质:\t聪颖\n" << "象征元素:\t风\n"
<< "学院的代表色:\t蓝色,青铜色\n" << "知名校友:\t秋·张//卢娜·洛夫古德\n" << "代表动物:\t鹰\n";
}
//赫奇帕奇学院
void Hufflepuff()
{
cout << "分院帽:(大声地)赫奇帕奇!!!" << endl;
Sleep(5000);
system("cls");
cout << "感谢赫尔加·赫奇帕奇创建学院,我们才能与你相识!!!" << endl;
cout << "创始人:\t赫尔加·赫奇帕奇\n" << "特质:\t忠诚\n" << "象征元素:\t土\n"
<< "学院的代表色:\t黄色和黑色\n" << "知名校友:\t厄尼·麦克米兰//纽特·斯卡曼德\n" << "代表动物:\t地鼠\n";
}
//斯莱特林学院
void Slytherin()
{
cout << "分院帽:(大声地)斯莱特林!!!" << endl;
Sleep(5000);
system("cls");
cout << "斯莱特林会帮你达到巅峰" << endl;
cout << "创始人:\t萨拉查·斯莱特林\n" << "特质:\t野心\n" << "象征元素:\t水\n"
<< "学院的代表色:\t绿色、银色\n" << "知名校友:\t(模糊不清,好像是在隐藏什么)\n" <<"代表动物:\t蛇\n";
}
int main(void)
{
//我们需要一个随机数的种子
srand((unsigned int)time(NULL));
//我们先定义好Sortinghat(分院帽)
cout << "分院帽:欢迎来到这里,让我来看看你现在手里拿的是什么样的魔杖" << endl;
Sleep(3000);
cout << "A、槭木 凤凰羽毛 七英寸长\t" <<" B、山毛榉木 蛇的神经 九英寸长\n"
<< "C、榆木 龙的神经 八英寸长\t" << "D、山楂木 独角兽毛 十英寸长" << endl;
Sleep(3000);
cout << "(现在分院帽会有你手中的魔杖来决定你是一个什么类型的人)";
char select;
cout << "请输入您的选择" << "\t";
cin >> select;
switch (select)
{
case 'A':
Score(10);
cout << "嗯,不错的选择……我现在已经有了十足的把握,但为了对你了解的更加深入,\n你还是要继续回答我下面的问题,你可要如实的回答哟……" << endl;
Sleep(5000);
system("cls");
Problem_gram();
break;
case 'B':
Score(100);
cout << "嗯……这根魔杖很适合你嘛……利用好的话他会帮你走上巅峰\n请你还是要继续回答我下面的问题……" << endl;
Sleep(5000);
system("cls");
Problem_gram();
break;
case 'C':
Score(500);
cout << "你可知道他之前的主人……额……我会让你如愿以偿" << endl;
Sleep(5000);
system("cls");
Problem_gram();
break;
case 'D':
Score(100);
cout << "没有什么能比独角兽的毛做枕芯再合适不过的了……你很神秘……就让我用5道题来解开你的真面目吧……" << endl;
Sleep(5000);
system("cls");
Problem_gram();
break;
}
system("pause");
return 0;
}
嘿嘿,其实漫长的代码大部分都是些问答,大家可以运行一下代码,看一下你与哪所学院有缘,其实小靴子非常懒,我一开始编程的时候想利用goto函数在
void Gryffindor();
void Ravenclaw();
void Hufflepuff();
void Slytherin();
这四个函数里面进行跳转,但是编着编着就转糊涂了,改出来了一个
void EveryProblem(string problem[5]),一个万能的问题模板,里面的是5个问题,我在这个函数里加上了一个随机函数的种子,给问题编上了序号,因此不同的人运行起来抽到的问题不一定会一样,但是小靴子编写的题库太小了,有兴趣的同学可以再加些问题,这样每个人抽到的题目重复率就会降低,小靴子在判断分学院的时候不是用的switch 的选择机制,而是用的分数累加,这样编码者操控起来比较简单,易操作,无论是你抽到的是鹰院还是狮院,(突然一脸认真地)小靴子都祝大家万事如意,学有所成~