怎么用c++利用ppt制作小游戏一个小游戏

C++超简单入门案例,完成一个简单的打字游戏!有兴趣的可以看看咯,代码都贴出来
开始之前先来点题外话,哈哈,这是本人第一次发表原创,留个爪子纪念!!
首先呢,其实这个案例的灵感主要还是来自于咱学习的课本第五章要求完成一个QuickHit的案例,鉴于昨天睡的太久,晚上太兴奋,干脆就事先把课题完成了。Java版的整个耗时两个小时,另外花了半个小时的时间测试,但是完成了以后躺上床一直睡不着,干脆又爬了起来,把准备留到下午的移植工作完成。C++版的编写加测试总共用了一个半小时,慢的原因主要还是在于本人对于C++的一些函数和机制不太熟悉,所以改程序有一个比较郁闷的Bug----刚进入游戏时输入字符串会直接失败一次-
好咯,多余的话就不说了,先上代码了!毕竟看我的博文的应该都是和我一样的菜菜鸟,所以就详细的说说整个程序了。首先,那就是我们需要一个程序入口的源文件-
-|(地球人都知道)。为了让程序能够持续的运行,接着我们需要建立一个循环,为了驱动这个循环,得再声明一个布尔型变量我称之为keepRunning----将它的初始值设置为true,代码如下:
keepRunning =
随后开始在While循环里添加功能代码,开场白一定是少不了的,对吧,所以我们添加这么一段代码:
&& "Thanks For Use CK's
"\n========================================="
&& "\n1.Start Game"
&& "\n2.Quit"
怎么样?至少这样一来,我们开始有了一个可以和计算机交互的主菜单,输入1就可以开始游戏,如果你不想玩了,选择2就可以退出,当然,前提是你正在进行的游戏失败了----毕竟身为一个男人,这样简单的游戏是不允许中途退出的!!是不是?
既然完成了主菜单,那么接下来,我们就得开始为这个主菜单添加功能代码了,为了能够让计算机接受我们的输入,我们这时需要再声明一个整型变量,而我称之为choice,有了他,我们就可以开始进行选择了,当用户输入1,执行选项1的代码,如果用户选择2,则执行选项2的代码。。。。。于是,我们就有了如下这段:
switch(choice)
keepRunning =
&cout && "Game
cout && "My dear , You should select
the number in the menu ^_^" &&
不要问我choice从哪里来的哦。因为前面已经介绍的很清楚了,不记得就往回看看吧,建议大家把choice声明在main函数的代码块中,不要声明为一个局部变量了,毕竟我学了这么久的编程,有很多的选择结构,其实完全只需要声明一个变量就好了,前提是这些选择结构并非是嵌套在一起的。
在添加完了以上的代码以后,整个程序的主函数也就已经完成了90%了,下面,我们将要开始编写最重要的部分,也就是这个游戏的游戏类。按照我们课本上的写法,这个游戏将会分割为三个实体类和一个主函数类,但是我觉得这样做太累了,毕竟这只是一个很小的程序,分割成太多块,冗余的代码将会很多,我们的课本上之所以声明那么多类,其实只是为了让我们去熟悉面向对象编程的思想。。。。不过我觉得这反而会成为学习的负担,刚开始做这些,对于普通新手而言,实在是有点难以理解,所以我在此简化了那三个类,只用一个称之为Game的类完成这一切。
那么,这个称之为Game的类,将会有些什么呢?让我们好好想想。。。。。。
这个类肯定需要一个游戏的主循环,所以应该有一个类似游戏循环的方法,在这里我继续用我的方法名,而它,我称之为Game1()。哼~至少目前看起来,一个主循环似乎是够了,但是我们还需要很多的变量来接受一些我们需要的值,比如玩家的等级、玩家的积分,有了等级和积分,我们就应该想到游戏是有关卡的设计的,也就是说,只有达到了一定的积分,玩家的等级才能提升,既然等级提升需要积分,那么我们就应该为关卡设定一个分值,最好这个分值还能随着关卡的升级而变化(比如越来越高),当然,那还只是后话,所以现在,我们需要在这个类里设置两个属性,我称之为playerLevel以及playerScore。随着等级的提高,游戏的难度也应该越来越大,所以我们需要对每个关卡做一些技术上的设定,比如在限定的时间内输入完整的显示出来的字符串,这样我们又能得到两个属性----每个等级下字符串的长度strLength和用于输入字符串的时间perLevelStrCanUseTime,当然,我的第二个变量名纯粹是为了读懂才写这么长。既然有了输入字符串的最长时间perLevelStrCanUseTime,那么也就意味着我们需要计算用户输入这个字符串用了多少时间,因此我们需要在Game类的源文件中引入一个头文件time.h(因为本案例中,我们在头文件中用不到),这个头文件定义了一个我们可以用来获取时间的函数time(),该函数的参数为一个time_t(类型/结构-
-|只能说这里我还没弄清楚,应该是一个类)的指针。接着我们又需要定义两个属性,一个用于接受用户开始输入的时间startTime,一个用于接受用户结束输入的时间elapsedTime,定义完了,这个类的属性也就差不多完成了。是时候进入游戏主循环了!
一如既往,我们首先输出一句话(至少我们能知道游戏开始了- -|毕竟控制台可没那么多的提示):
&& "Game Start!"
然后开始我们伟大的循环吧。。。。一个while循环,定不定义一个布尔类型的变量随意,反正我是直接一个true代替了表达式,接着,我们要生成一个字符串了。所以回到头文件中,我们定义一个函数,我称之为generateString(),有了他,我就不需要再为那些蛋疼的随即字母烦恼啦,虽然这个还是我自己写的- -+,
那么接下来,既然要生成字符串,那么也就少不了随机数,庆幸C++的char类型是直接读取ANSCII字符集的吧,这样我们就可以直接将整形变量直接转换为字符型了,这段代码也许会有点难以理解(对于新手们来说),不过这最主要还是集中于各位对ANSCII的熟悉程度,首先,我们继续在类中定义一个属性resourceString(源字符串),该字符串将会用于后面与用户输入进行比较,然后回到generateString()函数中,在里面定义一个char型
temp,以及一个整型变量tempANSCII,用srand()函数初始化随机数种子,这里我选择一个比较流行的方式,就是用时间初始化它,由于之前已经引入过一个名为time.h的头文件了,这里只需要直接使用即可:
srand((unsigned)time(NULL));
记住,这里一定要加上(unsigned),否则编译器会报错。完成了以后就可以进入for循环了,因为我们要生成指定长度的字符串,所以循环的条件应为
i & strLength
,然后我们要随机生成一个在64和129之间的数字,并检测生成的数字是否可以转换为字母,所以应该加上如下代码片段:
tempANSCII = 64 + rand() %
129;&&&&//右值将会返回一个介于64与129之间的数字给左值?
if((tempANSCII&64 &&
tempANSCII&90) || (tempANSCII&96
tempANSCII&122))&&&
//判断随机数的值
如果随机生成的值能被转换为字母,我们就要将这个数字转换,并复制给resourceString,于是添加如下代码:
&&& temp =
tempANSCII;
resourceString +=
如果随机生成的值不能被转换为字母,则我们应该确保字符串的长度不会出现问题,比如减少,所以应该加上一段:
这样一来,随机字符串就生成啦,最后只需要将resourceString的值做为返回值返回给输出流,就可以让用户知道它将被要求输入什么,在完成了这些之后,用户已经做好输入的准备了,不过为了保证能够让计时器正确的运行(实际上,这里根本算不上是一个计时器,不过我们姑且这么称呼他),我们就需要在用户输入之前,记录下当前的系统时间,我的做法是将它转换成秒数,C++有一个专门的标准函数完成这些,仍然是得益于之前引入的time.h头文件,现在我们只需要将startTime赋值就好了,用以下代码实现:
&& &startTime =
time((time_t*)NULL);
然后从控制台获取用户的输入,为了正确的接受输入,我们还需要在Game1()函数内部声明一个局部变量playerInput,代码如下:
&string playerI
然后给变量赋值:
&getline(cin,playerInput,'\n');
getline函数的第一个参数为istream,即标准输入流,我使用cin,这样就能够从控制台接受输入。getling函数的第二个参数就是用户输入的数据的目的地,所以写入playerInput,第三个参数表示输入流在遇到换行符时结束读取,我写上只是最近学习养成的习惯,根据我的测试,不写也没什么区别。
获取完了输入以后,我们就要获取结束输入的时间了,和startTime的赋值方式一样只是变量换成elapsedTime而已,这里就不再赘述。
获取完了时间,我们就可以计算时间差了,所以在类中,我们将之前定义的变量perLevelStrCanUseTime定义为一个静态的常量,定值为10。接下来判断,如果时间差大于了它,那么就宣告游戏失败,返回主菜单----小虫子们,要想退出就趁现在咯,不然升级了,你的手就有的忙活咯!
既然判断时间没有超过,那么我们就要判断字符串是否输入正确,如果正确?那可就太棒了,因为输入正确,我们可以获得两分,以后每升一级获得一分加分,当然,字符串的长度也会变长哦,想知道怎么升级?每一关一共十个字符,正确率达到60%就可以咯,这里一段只是纯粹的游戏逻辑代码,相信大家自己动手也能做出来,所以就不多说咯,最后值得一提的是,当每一关的是个字符串都输入完了,计算机将会判断用户是否成功晋级,如果晋级失败,可是会Game
Over的哦,不像GO就努力练习打字吧!!
现在附上完整代码:
MainCore.cpp:
#include "Game.h"
#include &iostream&
int main()
&bool keepRunning =
&int choice = 0;
&while(keepRunning)
&& "Thanks For Use CK's
"\n========================================="
&& "\n1.Start Game"
&& "\n2.Quit"
&&switch(choice)
&&&game.Game1();
&&&keepRunning =
&& "Game Out!";
&&default:
&& "My dear , You should select the
number in the menu ^_^" &&
&return 0;
#pragma once
#include &string&
class Game
&int playerL
&int playerS
&long long startT
&long long elapsedT
&int perLevelRightC
&int perLevelNumberOfS
&int perLevelS
&static const int perStrCanUseTime = 10;
&string resourceS
&string generateString();
&bool levelUp();
&void Game1();
&Game(void);
&~Game(void);
#include "Game.h"
#include &string&
#include &iostream&
#include &time.h&
#define MAX 128
Game::Game(void)
&playerLevel = 1;
&playerScore = 0;
&strLength = 2;
&perLevelRightCount = 0;
&perLevelNumberOfStr = 10;
&perLevelScore = 2;
Game::~Game(void)
void Game::Game1()
&string playerI
&cout && "Game
Start!" &&
&while(true)
&&generateString();
&& resourceString
&&startTime =
time((time_t*)NULL);
&&getline(cin,playerInput,'\n');
&&elapsedTime =
time((time_t*)NULL);
&&if((elapsedTime -
startTime)&perStrCanUseTime)
&& "Time Out! You Failed!"
&&&perLevelNumberOfStr--;
&&&if(playerInput
== resourceString)
&&&&playerScore
+= perLevelS
&&&&perLevelRightCount++;
&& "Bingo! Now Your Score is : "
&& playerScore
&& " Your Level is : "
&& playerLevel
&& " ElpasedTime :"
&& startTime-elapsedTime
&&&&if(perLevelNumberOfStr==0)
&&&&&if(!levelUp())
&&&&&&cout
&& "Sorry! You Failed To Reach The
Accurate 60%! Game Over!" &&
&& "Ah~Oh~!Type Wrong! Now Your Score
is : " && playerScore
&& " Your Level is : "
&& playerLevel
&& " ElpasedTime :"
&& elapsedTime - startTime
string Game::generateString()
&resourceString = "";
&char temp = ' ';
&int tempANSCII = 0;
&srand((unsigned)time(NULL));
&for(int i = 0;i & strL
&&tempANSCII = 64 + rand() %
&&if((tempANSCII&64
&& tempANSCII&90) ||
(tempANSCII&96 &&
tempANSCII&122))
tempANSCII;
&&&resourceString
&return resourceS
bool Game::levelUp()
&double temp = (
static_cast&double&(perLevelRightCount)
&if(temp & 0.6)
&&playerLevel++;
&&perLevelRightCount = 0;
&&perLevelNumberOfStr = 10;
&&perLevelScore++;
&&strLength += 2;
&& "Congradulation! Level Up!"
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。一个简单的小游戏--打飞机。求一些方法。我会点C++,用Java也行。
***长度必须超过10个字,请勿发布无效或违法言论。
(共有1个回答)
这个貌似没什么难度。。。我自己写了一个打砖块的东西。。和这个差不多了。。 发你QQ里边,你看看。。呵呵。。。、期待交流!
C程序的话,是无法编译通过的(除非你的编译器支持C99以上标准)menu();inti=0,j=0;这个位置必须对调下,因为一般的C编译器(C89以前的标准)必
在游戏界面的左边有个图标点&就退出了。不过如果是要1000分换东西的话,就要玩到游戏自己时间结束,要不,不算分。
油管主播的生活怎么退出打飞机游戏?油管主播的生活退出打飞机游戏方法是什么?相信很多小伙伴都想知道吧,那么就和小编一起来看看吧。
点击下载:《油管主播的生活中
油管主播的生活娱乐场中有一些打飞机的小游戏,很多玩家在游戏中并不能退出小游戏界面,今天小编告诉大家油管主播的生活娱乐场打飞机小游戏怎么退出 退出方法一览。油管主
孕妇最好不乘飞机以免诱发早产。因为乘坐飞机的恐惧、紧张;晕机产生的呕吐;空中气流产生的颠簸或者航班不正常等造成的劳累等等,都可能导致宫缩,诱发早产。
由于现在有许多实习司机开飞机导致很多人产生了医疗姐姐好脆呀,都不能奶自己,血又和诺娃差不多的错觉。实际不然,只要用好飞机,就可以当无敌当群奶用。 飞机正确的使用
你好,适当的***对身体是没有害处的,但是过度***对身体的危害很大,如记忆力、注意力很下降,性功能下降,腰膝酸软,甚至还会引起前列腺炎、睾丸炎、不孕不育等建议戒掉
这个可以在优酷找到。。。
耳鸣是指人们在没有任何外界刺激条件下所产生的异常声音感觉。如感觉耳内有蝉鸣声、嗡嗡声、嘶嘶声等单调或混杂的响声,实际上周围环境中并无相应的声音,也就是说耳鸣只是
上网查查,小棒的话可以去文具店看看没有的话也已从淘宝上买http://www.zbjiaming.net
大家都关注
(C)2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&

参考资料

 

随机推荐