浅谈对游戏道具的理解与认知
——植物大战僵尸
在上篇的游戏报告中,对道具的定义已经概括,并且主要针对电影道具提出了一些我的认识与看法,因此,在这边报告中我将根据近期尝试的一款游戏植物大战僵尸对游戏中的道具阐述一些我的观点,因为本人玩的游戏不多,单就植物大战僵尸这一款游戏来谈游戏道具,可能会有一些片面,还请老师指正。
(摘自网络)游戏的定义:游戏又翻译为: play,pastime,playgame,sport,spore,squail,games,hopscotch,jeu,toy体育运动的一类。有智力游戏和活动性游戏之分。前者如下棋、积木、打牌等。后者如追逐、接力及利用球、棒、绳等器材进行的活动,多为集体活动,并有情节和规则,具有竞赛性。游戏又分为单机和网络游戏。游戏道具:游戏中的物品大致可分为三类:消耗品、装备品和任务品。消耗品:包括食物、药品、打造原料、合成原料、暗器、摄妖香、飞行符、宠物口粮等。其中摄妖香、飞行符、宠物口粮和部分食物、药品可以在物品栏里叠加,其他物品不能叠加。飞行符和摄妖香是江湖人士的常用之物,有了它们在江湖上行走会方便很多喔。装备品:包括武器、头盔、铠甲、腰带、靴子、饰物。初级的装备品可以在商店中购买,高级装备品需要通过打造得到。一些装备品有角色、性别、等级和角色特有的限制,使用过的装备可以进行修复。任务品:包括剧情道具、帮派商品、书信、镖银、情报簿、通缉榜等,其中剧情道具用于完成剧情任务,不可以丢弃或交易。物品丢弃后出现在当前视野内的场景中,可以被拾取。丢弃的物品会定时被系统刷新,刷新后地面上丢弃的物品会消失。作为一款游戏,各个方面的创新使游戏独具特色,丰富的道具使这款游戏充满魅力。 特点丰富的游戏道具是这款游戏的一大亮点,游戏中,每个大的关卡道具都不相同。 关于游戏植物大战僵尸
《植物大战僵尸》(Plants vs. Zombies,简称PVZ)是由PopCap Games为Windows、Mac OS X及iPhone OS系统开发,并于20xx年5月5日发售的一款益智策略类塔防御战游戏。玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法构成五种不同的游戏模式,加之夕阳、浓雾以及泳池之类的障碍增加了游戏挑战性。(百度百科)
《植物大战僵尸》这款风靡全球的游戏,自上市以来,受到了全球玩家的热烈追捧,不少国内的玩家也已是通关N遍,无尽版独孤求败的个中高手。《植物大战僵尸》看似简单,其实极富策略性的TD类游戏。此游戏集合了即时战略、塔防御战和卡片收集等要素,正确的战术是获胜的关键,战术范围包括植物的搭配、战斗时的阵型、植物与僵尸相互克制等等,在战斗中看清游戏形式,正确配置当前资源也至关重要。而游戏中那些可爱的植物、贪婪憨厚的僵尸一定给大家留下了非常深刻的印象。
这个游戏实质上就是传统的塔防游戏,即玩家通过修筑固定的防御攻势,消灭一波波入侵的敌人。这一类游戏已经有几十年的历史,各种作品早已汗牛充栋,但是PopCap将它做得面目一新,加入了大量个性化元素,细节上有大量的创新,从中可以看到它开发休闲游戏的不懈努力和良苦用心。
1。武器变成了可爱灵动的植物,有向日葵、豌豆、南瓜、冬瓜,等等。它们会做出各
种动作,比如在阳光中起舞、向敌人发射果实等
2。敌人变成了僵尸。一般来说,僵尸是休闲游戏的禁忌,因为形象恐怖,与游戏的总体氛围不相适应。但是出乎意料,《植物大战僵尸》中的“僵尸”,似乎没有引起任何人的反感,甚至还有人愿意购买这种玩偶。原因可能在于,设计师故意把“僵尸”形象做得相当卡通化,看上去造型蠢蠢的、傻傻的,完全没有恶心恐怖的感觉。当然,最聪明的做法则是“僵尸”与“植物”的“跨界”,两个毫不搭边的角色进行碰撞,成功地制造了用户的“疯狂”(疯狂的好玩,疯狂的上瘾)。
3。以简单制造惊艳。《连线》曾经对此做过评价:“这款游戏证明,在游戏行业的激烈市场竞争中,有时少就是多。”这款游戏的确把“减法”这一设计思想发挥到了极致,上手极其简单,而且会有各种提示指导你怎么玩,比如游戏里,会有一个叫做戴夫的热心邻居,时不时跑来告诉你,各种植物的用途,以及防守各种僵尸的注意点。但是,越往下走就越考验玩家的智慧与策略,这又显示出这款游戏“高端”的一面。
另外,传统的塔防游戏往往带有迷宫设计,这会让游戏看上去很复杂,而休闲游戏不适宜做得很复杂。所以,《植物大战僵尸》就将僵尸进攻的路线简化成5个直线通道,玩家只要守住这五条直线就可以了
4。情感体验丰富多彩。《植物大战僵尸》提供的50个等级的冒险模式、循环的生存模式、20种各异的小游戏、禅境花园和解谜模式,照顾到不同人群的体验。这个游戏总计有40种植物对阵25类僵尸,丰富而搞笑的植物和僵尸种类让游戏充满乐趣。比如,有个舞王僵尸非常可爱,可以召唤出来4个小僵尸。有个矿工僵尸很擅长钻地,有个骑海豚的僵尸则成为不少玩家的梦魇。情感体验如此强大,以至于不少玩家在游戏中流连忘返。 游戏植物大战僵尸中的道具
《植物大战僵尸》是一款极富策略性的小游戏,可怕的僵尸即将入侵,唯一的防御方式就是栽种植物。此游戏集成了即时战略、塔防御战和卡片收集等要素、游戏的内容就是:玩家控制植物,抵御僵尸的进攻,保护这片植物园。游戏中可以选用的植物有40多种,其中独特的五种游戏模式:冒险,迷你,益智,生存,花园。多达50个的冒险模式关卡设定,从白天到夜晚,从房顶到游泳池,场景变化多样。游戏共有26种不同的僵尸敌人,包括开着车子的僵尸驾驶员等,使游戏更具挑战性。49种功能强大,互不相同的植物,并可收集硬币购买宠物蜗牛等多种可选道具。打开图鉴,可以看到植物与僵尸的详细介绍,通过“疯狂戴夫店”购买特殊植物和工具,以你能想象得到的方式干掉僵尸。
因此,有如此多的场景和模式,也必定少不了纷繁的各种道具。因为在游戏中武器变成了可爱灵动的植物,有向日葵、豌豆、南瓜、冬瓜,等等,僵尸也变成了蠢蠢的,傻傻的,完全没有恶心恐怖的感觉。所以游戏中的道具也是非常卡通,非常卡爱的。无论是各种植物还是花盆什么的都被赋予了各种表情,使游戏中的形象更加生动吸引玩家。游戏中的道具有大道具如各种场景阳光花园、黑夜花园、水族馆、智慧树及众多的关卡,也有小道具像路障,铁桶,报纸,铁门,橄榄球帽,雪橇车,矿工帽,铁梯,僵尸坚果,僵尸大坚果等这些可为本体提供额外防护的物品。
对于我们的课题就是为游戏设计道具,根据对游戏历时几天的尝试与挑战(额,玩得很是下功夫)以及在网上搜索的各种有关游戏道具的资料,因此针对这款游戏我也设计出了几种道具,从攻击道具到防御道具到辅助道具以及一些饰品道具。以石榴果实作为攻击道具,即石榴射手。以石榴的籽作为子弹发射,每次攻击射出一颗石榴籽。以及延伸出的双石榴射手,顾名思义,两个石榴同时攻击。防御道具:菠萝墙,拥有足以让你用来保护其他植物的坚硬外壳。辅助道具:南瓜灯:以两个一大一小的南瓜设计成南瓜灯,作用是能照亮一片区
域,让玩家看清战场迷雾。捕捉网:设计为潜水僵尸的工具,用来帮助潜水僵尸捕捉水中的海蘑菇。饰品道具:舞王僵尸的帽子和礼服等。
2010/12/16
第二篇:猜数游戏设计报告(含代码)
浙江传媒学院
课程设计(实训)报告
学 院 _专 业_ 班 级 _学 号 姓 名 _ _ 课 题 _猜数游戏_ 指导教师 _____ 报告成绩______________
日 期:2009 年 12月 2 日
目 录
一、需求分析……………………………………………………………2
二、总体设计……………………………………………………………2
2.1主函数……………………………………………………………2
2.2主界面显示………………………………………………………2
2.3结果输出界面显示………………………………………………2
2.4简单等级随机数获取……………………………………………2
2.5中等等级随机数获取……………………………………………2
2.6困难等级随机数获取……………………………………………2
三、详细设计……………………………………………………………2
3.1主界面显示函数…………………………………………………2
3.2 main函数………………………………………………………3
3.3结果输出界面显示函数…………………………………………5
3.4简单(中等,困难)等级随机数获取函数………………………5
四、测试…………………………………………………………………5
五、设计心得与总结……………………………………………………6
六、用户使用手册………………………………………………………6
6.1系统简介与功能介绍……………………………………………6
6.2用户操作说明、注意事项………………………………………6
七、附录(完整源程序清单)……………………………………………6
八、评阅意见……………………………………………………………10 参考书目………………………………………………………………10 1
《高级语言程序设计》课程设计
――猜数游戏
一、需求分析
1.获取随机数(根据玩家要可获得不同范围的随机数)。
2.对玩家输入的数字进行判断大小,给出提醒以便玩家进一步选择。 3.玩家猜中时给出所用时间和游戏水平的判断,给出是否继续的提示及判断。 4.游戏在于娱乐,因此需要一个人性化的界面。
二、总体设计
2.1主函数:选择游戏等级(获取不同范围的随机数范围越大难度越大);对玩家输入的
数字进行判断和提示;算出所用时间在玩家猜中时给出其所用时间,对其水平的判断和是否继续的提示;对玩家要求判断执行。
2.2主界面显示:游戏界面显示和必要提醒文字的输出。
2.3结果输出界面显示:结果界面显示;输出玩家所用时间和水平评价;输出是否继续
的文字提醒。
2.4简单等级随机数获取:获取1到1000内的随机数。 2.5中等等级随机数获取:获取1到2000内的随机数。 2.6困难等级随机数获取:获取1到10000内的随机数。
系统模块图
三、详细设计
3.1主界面显示函数
功能描述:游戏界面显示和必要提醒文字的输出
2
主界面显示流程图 3.2 main函数
功能描述:选择游戏等级(获取不同范围的随机数范围越大难度越大);对玩家输入的数字进行判断和提示;算出所用时间在玩家猜中时给出其所用时间,对其水平的判断和是否继续的提示;对玩家要求判断执行。
函数参数说明:clock_t c_start, c_end;分别用定义开始时间和终止时间。
f1 接收获得的随机数。
f2 接收玩家输入的数字。
ch 接收玩家输入的选择字符。
time 表示玩家所用时间。
s[] 必要的提醒和输出字符串。
函数调用关系描述:wd1();调用主界面显示函数。
getf1();getf2();getf3 (); 调用获取不同范围的随机数函数。 wd2(); 调用结果输出界面显示函数。
3
main函数流程图
4
3.3结果输出界面显示函数
功能描述:结果界面显示;输出玩家所用时间和水平评价;输出是否继续的文字提醒。
结果输出界面显示流程图 3.4简单(中等,困难)等级随机数获取函数
功能描述:获取1到1000内的随机数。
函数参数说明:time_t t;定义时间变量。
函数调用关系描述:srand( (unsigned)time(&t));以系统时间为种子,初始化rand()。 rand()%1000; 获取0到999的随机数。
简单(中等,困难)等级随机数获取流程图
四、测试
1.在游戏开始输入等级选择字符时,如果输入a,b,c以外的字符游戏就会出现错误,此时随机数为0。为了改正从而达到输入其他字符时从新提示要输入a,b,c。我用了不常用的goto函数。判断为其他字符时,函数从新回到最初。
2.开始时,用do,while函数做到了在一轮游戏过后输入y可以继续游戏,但没有做到输入n结束游戏,此时输入除y的字符都会终止。我将要达到的目标分成了两步。
第一步,当输入除y,n外的字符时,再次输出游戏继续输y退出输n的提醒。我用一 5
个for(;ch!='n'&&ch!='y';)的循环,只有当遇y或n时才能跳出循环,否则要继续输入选择。
第二步,为了实现输入n时终止程序,我将do,while函数放在循环for(;;)内,并在while后加入了语句if(ch=='n')break;这样便做到了输入n时跳出循环继而终止了程序。
五、设计心得与总结
1.猜数游戏是计算机给出数字有玩家进行猜测,首先是要计算机给出数字而且是随机的。怎样获得随机数以前的学习中并没有遇到过。在网上找到了随机数获取函数rand(),当然开始并不会用这函数每次随机数产相同,然后去找资料了解到计算机产生的随机数是伪随机数。原来每次产生随机数都要一个随机种子。进一步查找资料我了解到可以将系统时间转化为种子这需要srand函数将系统时间转化,写成语句就是
srand( (unsigned)time(&t));。最后成功获得了随机数。
2.游戏需要一个界面,这在以前的学习也未有遇到。和随机数获取一样先去网上找但没有获得进展,无奈求助同学。我选择了用矩形图形做界面。在原界面上覆盖上矩形图形做界面。
3.作为一个游戏,界面上的文字要简单,每次的提醒要显眼。为了做到这一点我先将原来的清掉然后再输出,这用到了clrscr();语句。
4.最初程序完成很不完善,有许多漏洞需要改正。比如,选择时输入规定字符之外的字符怎么办。怎样做到只输入y,n来断定游戏是否继续。这些在不断地调试中发现的。(这些在标题四中有解释这里不多做解释)。看到这个题目时意识到这里有没学过的东西,通过自己找资料问同学做成一个程序我有了一种小小的成就感。做程序也好,其他的什么也好总会遇到自己不懂得,没接触过的。这是一个挑战,通过自己一步步的努力完成时,是一种很大的进步不只是技术上的进步。
六、用户使用手册
6.1系统简介与功能介绍:
该程序基于win-tc编写,选用win-tc是界面设计所需。随机产生一个数字,可根据玩家选择给出不同范围的数字。玩家输入所猜数字时给出与真实数字的大小比较。在玩家猜中时,可给出其所用时间,并给出评价。最后,游戏的结束与继续可由玩家控制。
6.2用户操作说明、注意事项:
1. 游戏开始选择游戏等级。
2. 输入所猜数字,根据提示输入,直到输入与所给随机数相同。
3. 猜中时系统会给出您所用时间和对您的评价和是否继续的提示,选择是否继续。 注意:在游戏过程中猜数阶段只能输入数字,输入其他字符不予判断(这一点在游戏开始时会有提示文字)。玩家在玩游戏时要注意看提示文字。
七、附录(完整源程序清单)
#include<stdio.h>/*准输入输出头文件*/
6
#include<time.h>/*时间函数*/
int f1,f2;
char ch,*s[]={" GUESS THE DIGITAL GAME"," GOOD LUCK! ",
" PLAY AGAIN(y/n)"," YOUR RESULTS:",
"PLEASE SELECT THE CLASS:A,B,C (Simple=A, Medium=B ,Difficulty=C)\n",
" PLAY AGAIN(y/n)","(Only allowed to enter numbers)\n"};
wd1()
{
textbackground(6);
clrscr();
window(25,3,55,4);
textbackground(1);
textcolor(12);
clrscr();
cputs(s[0]); /*主界面背景设置*/
window(25,5,55,6);
textbackground(2);
textcolor(15);
clrscr();
cputs(s[1]);
window(25,6,55,16);
textbackground(4);
textcolor(15);
clrscr();
}
wd2()
{
window(15,17,65,19);/*结果输出界面*/
textbackground(2);
textcolor(12);
clrscr();
}
getf1()
{
time_t t;/*系统时间定义*/
srand((unsigned)time(&t)); /*将系统时间强行转化作为随机种子*/
f1=1+rand()%1000; /*获取1-1000内的随机数*/
}
getf2()
{
time_t t;
srand( (unsigned)time(&t));
7
f1=1+rand()%2000; /*获取1-2000内的随机数*/
}
getf3()
{
time_t t;
srand( (unsigned)time(&t));
f1=1+rand()%10000; /*获取1-10000内的随机数*/
}
main()
{
clock_t c_start, c_end; /*时间函数*/
double time;
for(;;)
{
do
{
clrscr();/*清屏*/
wd1();
cputs(s[4]);
cputs(s[6]);
lp1:
{
ch=getch();
if(ch=='a')/*选择困难等级*/
{
getf1();
clrscr();
cprintf("Simple: Please enter the number\n");printf("%d",f1); }
else if(ch=='b')
{
getf2();
clrscr();
cprintf("Medium: Please enter the number\n");printf("%d",f1); }
else if(ch=='c')
{
getf3();
clrscr();
cprintf("Difficulty: Please enter the number\n");printf("%d",f1); }
else
8
{
clrscr();
cputs(s[4]);
goto lp1; /*在输入错误时重回输入*/
}
}
c_start=clock();/*开始计时*/
while(1) /*对玩家输入的数字进行地判断*/
{
scanf("%d",&f2); /*输入所猜数字*/
if(f1==f2) /*所猜数字与随机数比较*/
{
clrscr();
cprintf("congratulations!\n");
c_end=clock(); /*结束计时*/
break;
}
else if(f2<f1)
{
clrscr();
cprintf("little\n");
continue; /*输入不匹配时重输*/
}
else
{
clrscr();
cprintf("big\n");
continue; /*输入不匹配时重输*/
}
}
time =(double) (c_end - c_start)/18.55; /*计算时间*/
wd2(); /*结果输出界面显示*/
cputs(s[3]); /*输出提示*/
if(time>60.000000)printf(" Not good!\n"); /*判断评估*/
else if(time<30.000000)printf(" Good!\n");
else if(time>30.000000||time<50.000000)printf(" General\n");
printf( " TIME:%.2f seconds", time );
cputs(s[2]);/*输出提示*/
ch=getch(); /*接收控制*/
for(;ch!='n'&&ch!='y';) /*继续玩游戏与否的判断*/
{
clrscr();
cputs(s[5]); /*输出提示*/
9
ch=getch();
}
}while(ch=='y'); /*遇y结束*/
if(ch=='n')break;/*遇n结束*/
}
}
八、评阅意见
参考书目
[1] 谭浩强,《C程序设计》,清华大学出版社,北京,20xx年7月第3版
10