没有去地底世界冒险,也没有接受别的任务,整整两个星期,我就宅在大地勇者冒险团的驻地自学c语言,只是偶尔感觉自己快要大脑衰竭的时候,会和铃音她们一起去玩一会儿。
记得曾经我说过我觉得这会是一件有趣的事情,现在我要收回这一句话。自学c语言这件事情一点也不有趣,这说相当无聊的一件事情,而且它还给了我前所未有的强烈挫败感。
整整两个星期,我的收获就是将一个叫做“贪吃蛇”的游戏代码理解透彻,所谓的贪吃蛇是一个很无聊,规则很简单的平面游戏,但是他的c语言程序代码居然有这么长(来自于百度,原作者不详。):
#include<stdio.h>
#include<windows.h>//基本型态定义。支援型态定义函数。使用者界面函数图形装置界面函数。
#include<conio.h>//用户通过按键盘产生的对应操作(控制台)
#include<stdlib.h>
#include<time.h>//日期和时间头文件
#defineLEN30
#defineWID25
intSnake[LEN][WID]={0};//数组的元素代表蛇的各个部位
charSna_Hea_Dir='a';//记录蛇头的移动方向
intSna_Hea_XSna_Hea_Y;//记录蛇头的位置
intSnake_Len=3;//记录蛇的长度
clock_tNow_Time;//记录当前时间,以便自动移动
intWait_Time;//记录自动移动的时间间隔
intEat_Apple=1;//吃到苹果表示为1
intLevel;
intAll_Score=-1;
intApple_Num=-1;
HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出的句柄<windows.h>
//句柄:标志应用程序中的不同对象和同类对象中的不同的实例方便操控,
voidgotoxy(intxinty)//设置光标位置
{
COORDpos={xy};//定义一个字符在控制台屏幕上的坐标POS
SetConsoleCursorPosition(hConsolepos);//定位光标位置的函数<windows.h>
}
voidHide_Cursor()//隐藏光标固定函数
{
CONSOLE_CURSOR_INFOcursor_info={10};
SetConsoleCursorInfo(hConsole&cursor_info);
}
voidSetColor(intcolor)//设置颜色
{
SetConsoleTextAttribute(hConsolecolor);
//是API设置字体颜色和背景色的函数格式:SetConsoleTextAttribute(句柄颜色);
}
voidPrint_Snake()//打印蛇头和蛇的脖子和蛇尾
{
intiyixcolor;
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
if(Snake[ix][iy]==1)//蛇头
{
SetColor(0xf);//oxf代表分配的内存地址setcolor:34行自定义设置颜色的函数
gotoxy(ix*2iy);
printf("※");
}
if(Snake[ix][iy]==2)//蛇的脖子
{
color=rand()%15+1;//rand()函数是产生随机数的一个随机函数。C语言里还有srand()函数等。
//头文件:stdlib.h
if(color==14)
color-=rand()%13+1;//变色
SetColor(color);
gotoxy(ix*2iy);
printf("■");
}
if(Snake[ix][iy]==Snake_Len)
{
gotoxy(ix*2iy);
SetColor(0xe);
printf("≈");
}
}
}
voidClear_Snake()//擦除贪吃蛇
{
intiyix;
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
gotoxy(ix*2iy);
if(Snake[ix][iy]==Snake_Len)
printf("");
}
}
voidRand_Apple()//随机产生苹果
{
intixiy;
do
{
ix=rand()%LEN;
iy=rand()%WID;
}while(Snake[ix][iy]);
Snake[ix][iy]=-1;
gotoxy(ix*2iy);
printf("⊙");
Eat_Apple=0;
}
voidGame_Over()//蛇死掉了
{
gotoxy(3010);
printf("GameOver");
Sleep(3000);
system("pause>nul");
exit(0);
}
voidMove_Snake()//让蛇动起来
{
intixiy;
for(ix=0;ix<LEN;++ix)//先标记蛇头
for(iy=0;iy<WID;++iy)
if(Snake[ix][iy]==1)
{
switch(Sna_Hea_Dir)//根据新的蛇头方向标志蛇头
{
case'w':
if(iy==0)
Game_Over();
else
Sna_Hea_Y=iy-1;
Sna_Hea_X=ix;
break;
case's':
if(iy==(WID-1))
Game_Over();
else
Sna_Hea_Y=iy+1;
Sna_Hea_X=ix;
break;
case'a':
if(ix==0)
Game_Over();
else
Sna_Hea_X=ix-1;
Sna_Hea_Y=iy;
break;
case'd':
if(ix==(LEN-1))
Game_Over();
else
Sna_Hea_X=ix+1;
Sna_Hea_Y=iy;
break;
default:
break;
}
}
if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)
Game_Over();
if(Snake[Sna_Hea_X][Sna_Hea_Y]<0)//吃到苹果
{
++Snake_Len;
Eat_Apple=1;
}
for(ix=0;ix<LEN;++ix)//处理蛇尾
for(iy=0;iy<WID;++iy)
{
if(Snake[ix][iy]>0)
{
if(Snake[ix][iy]!=Snake_Len)
Snake[ix][iy]+=1;
else
Snake[ix][iy]=0;
}
}
Snake[Sna_Hea_X][Sna_Hea_Y]=1;//处理蛇头
}
voidGet_Input()//控制蛇的移动方向
{
if(kbhit())
{
switch(getch())
{
case87:
Sna_Hea_Dir='w';
break;
case83:
Sna_Hea_Dir='s';
break;
case65:
Sna_Hea_Dir='a';
break;
case68:
Sna_Hea_Dir='d';
break;
default:
break;
}
}
if(clock()-Now_Time>=Wait_Time)//蛇到时间自动行走
{
Clear_Snake();
Move_Snake();
Print_Snake();
Now_Time=clock();
}
}
voidInit()//初始化
{
system("title贪吃毛毛蛇");
system("modecon:cols=80lines=25");
Hide_Cursor();
gotoxy(614);
printf("YouScore:");
gotoxy(616);
printf("YouLevel:");
gotoxy(618);
printf("TheLenght:");
gotoxy(6110);
printf("TheSpeed:");
gotoxy(6112);
printf("AppleNum:");
inti;
for(i=0;i<Snake_Len;++i)//生成蛇
Snake[10+i][15]=i+1;
intiyix;//打印蛇
for(iy=0;iy<WID;++iy)
for(ix=0;ix<LEN;++ix)
{
if(Snake[ix][iy])
{
SetColor(Snake[ix][iy]);
gotoxy(ix*2iy);
printf("■");
}
}
}
voidPri_News()//打印信息
{
SetColor(0xe);
gotoxy(734);
All_Score+=Level;
printf("%3d"All_Score);
gotoxy(736);
printf("%3d"Level);
gotoxy(738);
printf("%3d"Snake_Len);
gotoxy(7310);
printf("0.%3ds"Wait_Time/10);
gotoxy(7312);
printf("%d"Apple_Num);
}
voidLev_Sys()//等级系统
{
if(((Apple_Num-1)/10)==Level)
{
++Level;
if(Wait_Time>50)
Wait_Time-=50;
else
if(Wait_Time>10)
Wait_Time-=10;
else
Wait_Time-=1;
}
}
intmain(void)
{
Init();
srand((unsigned)time(NULL));//设置随机数的种子
Now_Time=clock();
intspeed1=1000speed2a;
printf("\n");
printf("请输入你想要的速度\n");
scanf("%d"&speed2);
Level=1;
Wait_Time=speed1-speed2;
printf("请输入你想要的苹果数\n");
scanf("%d"&a);
while(a--)
Rand_Apple();
while(1)
{
if(Eat_Apple)
{
++Apple_Num;
Rand_Apple();
Lev_Sys();
Pri_News();
}
Get_Input();
Sleep(10);
}
return0;
}
我现在终于能够理解其中每一句话的意思,但是这并不代表着我能够做出另一个这样的游戏,甚至让我不看这一段然后重新写出这个游戏的程序我都做不到。而另外一个叫做坦克大战的游戏,代码长度是它的三倍,我还不能完全看懂。然而据幽灵娘所说,构成我们这个世界的程序代码长度超过10的17次方个字符,听上去简直就和开玩笑一样。
之前我一直是个天才,我天生神力,五岁就能与大地之灵对话,十岁的时候就在拯救别人,一个月以前我和我的同伴战胜了整个魔族先锋部队。但是我不可能用这种c语言去创造一个世界,这是我做不到的事情,而且我也极度怀疑有人能够做到这件事情。
“幽灵娘,难道就没有别的什么简单一点的事情适合我去做的吗?我已经放弃了,我不可能学会这玩意的。”
“有,一开始我就说过另一个方法,学会简单的编程后,解除强制休眠,回到地球去寻找帮助。如果创造主脑的z博士还活着,他应该能够升级程序的防御系统。”
“等一下,我有好多问题!回到地球是什么意思?是让我去上次死机时感受到的那个世界?”
“不知道,但是很有可能是的。”
“我要怎么过去?传送门还是空间间隙。”
“在F盘里找到解除休眠协议,根据协议中的教程,自行编写一串同意按钮的代码进去,点击同意就行了。”
“为什么还要我自己来写同意按钮的代码?你们之前怎么不直接弄出按钮来?”
“这是z博士的设计,为了防止主脑擅自将你们的休眠解除。”
“好,随便吧,反正这代码看上去挺容易写的。”基本上就是把教程讲述的内容组合一下,但是对编程毫无了解的话,是无法完成这些组合的,果然是用来防备无法编写代码的程序们。
“你写入的代码生效了,按下同意键你的休眠就会结束。”
“等一下,你慌什么。呃,你的语气一点也没慌就是了。我还有很多问题,我能带其他人一起去吗?”
“如果你指的是塞西莉亚它们那些程序,那么不可能。如果你指的是那个叫做岚樱的女性,那么可以。”
带着岚樱去冒险,我疯了?换个话题:“去了之后我怎么回来?”
“不知道,我们没有让你回来的方法,但是你可能可以在那边找到这种方法。”
“那么我去了之后,我现在这个身体会怎么样?像上次我死机时那样发呆,还是被我带去地球?”
“这具身体会失去灵魂,就像你上次死机时那样发呆。”
“好,我明白了。下一个问题,什么叫做‘如果创造主脑的z博士还活着’,他不是创世神吗?创世神也会死?”
“会,而且20年前z博士创造了主脑,当时他是58岁,即便没有发生任何意外,他也有可能因为寿命原因活不到78岁。”
“寿命不到78岁?幽灵娘,你确定你说的是创世神不是平民,一个强大的剑士可以轻松活到一百岁,伊冬的爷爷都活了243岁了,创世神只能活78岁?”
“不是只能活78岁,是可能活不到78岁,z博士是一个人类,同时他也是我们现在所处世界的创造者。”
“听不懂,不过不管了。我总结一下,我现在可以做的事情只有两件,第一件是学会这种c语言。第二种是去那个完全未知的世界——地球,去寻找一个可能还活着的创世神帮忙,而且我还很有可能回不来?”
“你也可以什么都不做,继续你的日常生活,往好的方面想,也许有别的人会拯救世界,然后你就可以顺便活下去。”
“低劣的激将法,但是很有效。我怎么可能把自己和我所保护者的命运交给别人去操作,而且拯救世界这种事情,从来都是勇者去做的。既然我不能安心学会c语言,那么我就去地球冒险好了。塞西莉亚,你现在一定在偷听我说话,去把伊冬、铃音和响子都喊过来,让我和你们道个别。”
“了解,赛曼大人。”屋顶上传来了塞西莉亚迟疑的声音,但她还是离开,去喊人过来。
……
“为了拯救我们的世界,让这些天发生的那些可笑bug不再发生,也为了让我们的世界不会突然消失,我决定去那个叫做地球的世界冒险。而且没有办法带你们一起去,对于我的这个决定,有人反对吗?”
刷的一下举起了四只小手,她们都不同意让我去冒险。
“反对无效,哇,铃音不要咬我的脑袋,我的主意已决决定了,你们只要相信我能够拯救世界,相信我能够找到回来的方法就行了。”
场面陷入了沉默和尴尬之中,铃音倒是没有沉默,她在张牙舞爪的恐吓幽灵娘,但是幽灵娘没有理她就是了。
“在我去地球之后,我的身体会像上次捞金鱼店里那样发呆,你们不用怕,帮我保护好身体就行了。还有铃音,你不要对我的身体做什么奇怪的事情,上次你做的事情我都已经听说了。”
“哞~,才不是什么奇怪的事情,我只是尝一下赛曼的味道,又不会把你吃掉。”
“塞西莉亚,你是大姐姐,我不在的时候,就麻烦你照顾她们了。”
“我了解,冒险团的一切都交给我,赛曼大人您直管安心就好。”不知道抱着怎样的决心,塞西莉亚说出了这样的话。
“响子,我去地球之后,就不能再接受你的挑战了,如果你想要离开,继续你的修炼的话,就只管去吧,我是绝对支持你的。”
“在下是不会离开的。”
“是吗,那也好,那就麻烦你保护大家了。伊冬,趁我不在的时候,你要努力的变得大胆一些才好,如果能够把你讲述魔法知识时的自信用在平常的对话中,那样的伊冬一定会很帅气,虽然现在这样很可爱就是了。”
“我会努力的!大哥哥,你真的要走吗?”
“是真的要走,你们不要这么伤感了,搞的像是我要死一样。其实按照我的预期,顺利的话半个月我就可以回来了。”
“才不是我们弄的像是您要死了,是赛曼大人您自己像是交代遗言一样的说话。”
“哞~,就是就是,赛曼你个大笨蛋,害的我都快哭了。”
“好吧,都是我的错,在我出发之前,我们再一起吃喝玩乐一次,go!go!go!”
“大哥哥,狗狗是什么意思?”
“呃,是英语,就是我最近学的那些东西,不过已经没有什么用了的样子,真是浪费我时间啊。”
……
最后一次的聚会之后,
“幽灵娘,我们出发吧!去地球。”
“你误会了,没有我,只有你一个人去。怎么了,反悔不去了吗?”
“没有,一个人去就一个人去。”
我按下了同意按钮,整个人再次陷入到失去一切的状态之中,就如同我之前死机时那样,但是这一次我已经不再惊慌,等待着苏醒的时刻,等待着去地球冒险找到拯救世界方法的那一刻。
……
大地勇者冒险团驻地,北条响子的房间,
“尊敬的主人,您的敌人赛曼自称去一个叫做地球的世界,他的身体已经进入假死状态。需不需要在下出手杀死他?”
“去地球?有趣,我对于那个叫做地球的世界也是抱着很大的兴趣,响子,如果得到了任何关于地球的消息,第一时间通知我。至于赛曼嘛,就先让他假死着好了。我的幽灵小姐,你说那个赛曼可以顺利回来吗?”
另一个幽灵娘:“……”
勇者大人的日常不复存在提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、