首页 > 编程语言 >写一个Word Jumble的小程序

写一个Word Jumble的小程序

时间:2024-08-07 20:27:15浏览次数:9  
标签:WORD string int 程序 单词 NUM Word 随机数 Jumble

一·程序所需要的头文件

#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;

注:本程序使用c++语言编写如有错误请各位大佬指出、

首先我将对这几个头文件做简短的介绍以便大家知道我用他们干了啥。

1.iostream库

C++语言并未定义定义任何的输入输出(IO)语句,取而代之的是一个全面的标准库(standrad library)来提供IO机制(以及其他很多设施)。其包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入的。而术语“流”(stream)是想表示随着时间的推移字符是顺序生成或消耗的,在本程序中我使用的是一些cin,cout等基础函数,另外有关于命名空间的知识在此不做过多阐述。

2.string库

标准库类型string表示可变长的字符序列,使用string类型则必须要包含string头文件,作为标准库的一部分,string的定义在命名空间std之中。在我的代码中我使用了string类型和size()函数其作用是返回字符数。

3.cstdlib库

此库提供了包括动态内存管理,随机数生成,与环境的通信,整数算数,搜索,排序和转换,我在本程序中所使用的主要功能为随机数的生成

4.ctime库

C语言中,time.h定义了用于日期和时间操作的结构和函数,但是c++标准库中没有提供所谓的日期类型,而是继承与c语言。在表示时间中有一个重要的概念:时间戳,时间戳指的是格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

二.游戏的主要思路

1.选择单词

实例代码:

int main()
{
enum fields{WORD,HINT,NUM_FIELDS};
const int NUM_WORD=5;
const string WORDS[NUM_WORD][NUM_FIELDS]=
{
   {"wall","Do you feel you are banging your head against something?"},
   {"glasses","These might help you see some answer."},
   {"labored","Going slowly,is it?"},
   {"persistent","Keep at it."},
   {"jumble","It's what the game is all about"},
};

首先程序用单词和相应提示声明并初始化了一个二维数组,在程序开头我使用到了枚举类型(此代码定义了一个新的enum类型fields,以及一组可能的值:WORD,HINT,NUM_FIELDS等(其实在此类型定义之后可以声明此类型的变量例如:

enum fields NEWWORD;
NEWORD=spiderman;

另外每个enum类型的成员都有一个整数值,如果不自己指定的话则从一开始递增,例如在我上述的fields类型例子中,WORD的值为0,HINT的值为1,NUM_FIELDS的值为2),在上述代码之中声明了一个以WORDS为名称的五行两列的二维数组,枚举类型定义了用于访问数组的枚举数,由上面枚举所定义的变量的数值可知WORDS[x][WORD]总是表示的是单词的string对象,而WORDS[x][HINT]表示的总是相应的提示。

接下来随机的选择一个单词:

srand(static_cast<unsigned int>(time(0)));
int choice=(rand()%NUM_WORDS);
string theWord=WORD[choice][WORD];
string theHint=WORD[choice][HINT];

以上代码基于数组中的单词的数目通过rand()生成了一个随机索引号,然后将该索引处的单词和相应的提示赋值给了theWord和theHint。这里的重点是随机数实现调用了cstdlib库的函数rand()(函数rand()生成从0到32767之间的随机数。其具体的上限由使用的c++实现。该上界存储在cstdlib定义的常量RAND_MAX中),然而由于计算机基于数学公式生成的随机数是伪随机数(这可以想象让计算机从一本包含许多预定数字的书中读取数字,通过从该书中读取数字,计算机可以表现得像是在产生随机数序列),但是这样存在一个问题就是计算机总是从书的起点读取数字,因此计算机总是产生相同的数字序列,这是在游戏中所不想见到的,这个问题的解决方法就是在游戏开始是告诉计算机从书的某个随机位置开始读取数字。该过程称之为“为随机数生成器确定种子”:

srand(static_cast<unsigned int>(time(0)));

通过以上代码实现,该代码通过ctime库调用time()函数基于当前日期与时间为随机生成器确定种子。实际上是函数srand()为随机数生成器确定种子(srand()函数专门用来生成随机数种子),只需将一个unsigned int型的值作为种子传递给它,这里传递的函数是time(0)的返回值。而代码static_cast<unsigned int>的作用则是将time(0)函数的返回值强制转换为unsigned int 型。static_cast为C++语言中新增的几个强制类型转换的关键字(还有dynamic_cast,const_cast和reinterpret_cast,其使用语法为xxxx_cast<new_type_name>(expression))这个关键字的作用主要体现在static上,说明是一种静态的转换,在编译期就能确定的转换。

int choice=(rand()%NUM_WORDS); 

该代码使得choice+1的值永远是小于等于NUM_WORDS的

2.单词乱序

有了给玩家猜测的单词之后现在就需要生成一个该单词的乱序版本,代码如下

string jumble=theWord;
int length=jumble.size();
for(int i=0;i<length;i++)
{
 int index1=(rand()%length);
 int index2=(rand()%length);
 char temp=jumble(index1);
 jumble(index2)=jumble(index1);
 jumble(index2)=temp;
}

用上面的代码将单词复制到jumble中用于乱序。程序生成了string对象中的两个随机位置,并交换这两个位置的字符。交换的次数等于单词的长度。

3.欢迎界面

cout<<"\t\tWelcome to the word jumble !!\n\n";
cout<<"Unscramble the letters to make a word.\n";
cout<<"Enter 'hint' for hint\n";
cout<<"Enter 'quit' to quit the game\n"; 
cout<<"The jumble is "<<jumble;
string guess;
cout<<"Your guess:";
cin>>guess;

这段程序告诉玩家游戏的操作指南,包括如何退出和如何请求提示。

4.进入游戏主循环

接下来进入游戏的主循环

while((guess!=theWord)&&(guess!="quit"))
{
 if(guess=="hint")
  cout<<theHint;
else
  cout<<"Sorry that's not it .";
cout<<"\n\nYour guess:";
cin>>guess;
}

循环要求玩家不断猜测单词直到猜对单词或者选择退出。

5.游戏结束

if(guess==theWord)
{
  cout<<"Congratulation,you're right\n"
}
cout<<"Hope to see you next time\n"
return 0;
}

当循环结束时,玩家结束或者退出,因此,应对玩家说再见。

以上即为我分享的程序,感谢您的驻足指导!

标签:WORD,string,int,程序,单词,NUM,Word,随机数,Jumble
From: https://blog.csdn.net/syfds/article/details/140909826

相关文章