以前打游戏打的时间久,后肩轴左肩膀酸痛是怎么回事,现在不打游戏了。但是,写个字,十分钟都痛!看个书,十分钟都痛!

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!"
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。& 完了!打游戏打的码不了字了,肿么办? ...
查看: 380|回复: 37
性别女&UID864360&帖子27&主题7&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
楼主女写手,混晋江耽美,新书成绩也还不错。就是最近写的章节,经常有读者在书评区安利剑三什么的,秉着学习的态度,楼主前天下载了个。楼主日更党,结果前天没更新,昨天没更新,当然,理由都是累了休息什么的。楼主昨晚玩到了凌晨四点,也找代练升满了,商城的衣服也买了500软妹币左右…刚才睡醒,楼主的第一件事居然是玩游戏!这两天是一字没动啊…而且之前顶多玩个斗地主,英雄杀。从来没充过钱…这么一想,500够买好多东西,太伤钱了。所以现在的状态是心里想着游戏+理智不允许+码字码不进去还是想游戏。求问~这状态该怎么调整…--
性别男&UID886998&帖子337&主题0&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
总评分:&龙币 + 5&
性别男&UID927100&帖子888&主题45&精华0&龙晶0 &龙威0 &积分1&阅读权限50&好友0&注册时间&最后登录&
精华0&龙威0 &积分1&好友0&注册时间&
千字30左右…舍不得啊…
总评分:&龙币 + 5&
性别男&UID584564&帖子8098&主题79&精华0&龙晶3 &龙威0 &积分15&阅读权限100&好友0&注册时间&最后登录&
精华0&龙威0 &积分15&好友0&注册时间&
哎呀,剑三呀
一起来打竞技场啊
纯小白,刚会w+空格…
总评分:&龙币 + 5&
性别男&UID658952&帖子779&主题15&精华0&龙晶-1 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
很简单,出去玩一天,回来就不想了。。
我试试看~
总评分:&龙币 + 5&
性别男&UID932403&帖子19&主题0&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
顶起来,我只是读者发表不了合理建议
555~就不该以身试毒…
总评分:&龙币 + 5&
性别男&UID706991&帖子616&主题8&精华0&龙晶0 &龙威0 &积分1&阅读权限50&好友0&注册时间&最后登录&
精华0&龙威0 &积分1&好友0&注册时间&
游戏人物见的不得不说的故事,脑洞一开就好了
写剑三怕侵权…
总评分:&龙币 + 5&
性别男&UID636896&帖子219&主题2&精华0&龙晶0 &龙威0 &积分2&阅读权限70&好友0&注册时间&最后登录&
精华0&龙威0 &积分2&好友0&注册时间&
玩到吐,自然就会想回来码字了
戒不了的话,我试试看
总评分:&龙币 + 5&
性别男&UID915704&帖子2365&主题32&精华0&龙晶0 &龙威0 &积分2&阅读权限70&好友0&注册时间&最后登录&
精华0&龙威0 &积分2&好友0&注册时间&
u need a finger!
渣英语~要剁手还是练指法…
总评分:&龙币 + 5&
性别男&UID576123&帖子42&主题5&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
基3 ............
单机也玩的不亦乐乎…
总评分:&龙币 + 5&
性别男&UID818539&帖子4645&主题190&精华0&龙晶1 &龙威0 &积分7&阅读权限90&好友0&注册时间&最后登录&
精华0&龙威0 &积分7&好友0&注册时间&
这种状态的话,删游戏或者切书,二选一吧。
调整下…看能不能删…
总评分:&龙币 + 5&
性别男&UID908711&帖子280&主题1&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
说好的抱着学习的态度去呢
555…从来没接触过这类游戏,捏脸看衣服太.
总评分:&龙币 + 5&
性别男&UID695549&帖子14&主题0&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
还是舍不得切书…我切游戏试试….
总评分:&龙币 + 5&
性别女&UID876539&帖子293&主题10&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
我以前也玩英雄杀,斗地主什么的,现在电脑里面就没安装!
其实合理安排时间不沉迷是是可以的,我每天都看几个小时的电视!
英雄杀玩了五年了…不过这游戏也没这么沉迷.
总评分:&龙币 + 5&
性别男&UID886058&帖子1872&主题173&精华0&龙晶0 &龙威0 &积分2&阅读权限70&好友0&注册时间&最后登录&
精华0&龙威0 &积分2&好友0&注册时间&
我再玩两把…然后让朋友改密,删游戏!.
总评分:&龙币 + 5&
性别男&UID461161&帖子7254&主题2&精华0&龙晶0 &龙威0 &积分9&阅读权限90&好友0&注册时间&最后登录&
精华0&龙威0 &积分9&好友0&注册时间&
推荐书友一起玩,她们就同样没时间看你的书了
总评分:&龙币 + 5&
性别男&UID915704&帖子2365&主题32&精华0&龙晶0 &龙威0 &积分2&阅读权限70&好友0&注册时间&最后登录&
精华0&龙威0 &积分2&好友0&注册时间&
楼主女写手,混晋江耽美,新书成绩也还不错。就是最近写的章节,经常有读者在书评区安利剑三什么的,秉着学习的态度,楼主前天下载了个。楼 ...u need a finger !字面意思是你需要一根手指!实际意思是。。。最好中指!
我加藤鹰不服
总评分:&龙币 + 6&
性别男&UID431378&帖子81&主题8&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
凡事游戏都是沉迷的、、、
不该以身试毒…
总评分:&龙币 + 5&
性别男&UID552073&帖子2247&主题24&精华0&龙晶0 &龙威0 &积分4&阅读权限70&好友0&注册时间&最后登录&
精华0&龙威0 &积分4&好友0&注册时间&
把游戏账号卖了,卖不了就删号删除游戏角色卸载游戏
前天注册的…就点卡,时装,满级,通宝。不.
总评分:&龙币 + 5&
擅长各种瞎bb
性别男&UID930221&帖子71&主题0&精华0&龙晶0 &龙威0 &积分0&阅读权限20&好友0&注册时间&最后登录&
精华0&龙威0 &积分0&好友0&注册时间&
想办法把号卖了,然后一起玩撸啊撸吧。--
我这自制力…不敢了…
总评分:&龙币 + 5&
Powered by

我要回帖

更多关于 右肩膀酸痛是怎么回事 的文章

 

随机推荐