大鱼吃小鱼
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MTK平台大鱼吃小鱼的实现
4.2 游戏的实现
图4.8 游戏分层
DL层(data layer 数据层):主要是抽象游戏中的数据,并选择合适的存储方式进行存储。
LL层(logic layer 逻辑层):主要是将游戏中逻辑(游戏规则)分解为一系列的功能方法,通过对游戏逻辑的分解,可以结构化项目的代码,也可以实现对于项目进度的准确把握,方便项目进度的控制。
UL层(user layer用户层):主要完成游戏的程序界面布局,以及实现游戏操作按键的设定。
4.2.1 DL层设计
数据是一个程序的灵魂,数据的存放方式被称之为数据结构(Data Structure),不同的程序需要根据自身的需要,设计不同的数据存储方式,而数据结构有将对后续的程序算法产生直接的影响,所以数据结构设计的好坏,对于整个项目的影响是很严重的。
在程序开发中,设计数据结构的步骤一般如下:
(1)分析需要存储的信息
(2)将这些信息抽象为程序中的数据
(3)根据程序中的数据进行结构设计
(1) 分析需要存储的信息
在程序中需要存储的信息一般分为两部分:界面控制信息和逻辑控制信息。
界面控制信息用于控制界面上各个元素的显示等,逻辑控制信息用于进行程序内部的逻辑处理,一般界面控制信息是可见的,而逻辑控制信息在界面上不是直接可见的。
在“大鱼吃小鱼”游戏中,界面控制信息主要包含两个部分:玩家控制的鱼的位置信息,
自由移动的鱼的位置信息,屏幕上玩家的信息:包括得分、难度等级、生命数以及时间的倒计时。
而逻辑控制信息主要包含:玩家控制的鱼的移动方向、自由移动的鱼的移动方向。
(2)将这些信息抽象为程序中的数据
程序中需要存储的信息抽象出来了以后,就是以什么类型的数据来存储这些信息的问题了,这里是计算机编程中对于数据的抽象。
本课题使用的手机屏幕大小为320×240,这里的320和240指的是屏幕显示的像素(pixel)个数像素是由picture(图像)和element(元素)这两个单词的字母所组成的,是用来计算数码影像的基本单位,一个像素通常在屏幕上显示为单个染色点。
对于界面控制信息的存储,计算机编程中使用的知识和数学上是一样的,都是利用坐标系的知识来存储位置信息。
对于平面游戏(2D游戏)来说,存储位置时使用的也是直角坐标系(笛卡尔坐标系),只是坐标系的形式和数学上的坐标系不完全一致。
在计算机中,我们建立二维x,y坐标轴,水平方向为x轴,向右为x轴正方向,垂直方向为y轴,向下为y轴正方向,x、y交点为坐标原点。
将屏幕左上角放置在原点,则屏幕在坐标轴中的范围可表示为(0≤x≤319,0≤y≤239),屏幕右下角的坐标为(319,239)。
图4.9 游戏设计坐标图
有了坐标系的知识以后,就方便了界面中位置的存储了。
对于所有的鱼,包括玩家控制的鱼以及能够自由移动的鱼,我们只需要存储它们的坐标以及移动的方向,也就是说,需要存储每条鱼的坐标和移动方向。
另外,由于每一条鱼都是一个区域,程序中一般存储每条鱼左上角的坐标,而将鱼宽度和高度处理成常量。
这样每条鱼就需要两个整数分别存储x坐标、y坐标。
所有的鱼的整个结构则需要一组这样的结构体进行实际的存储就可以了。
对于玩家的得分、生命数、难度等级以及剩余时间直接通过四个整型变量存储即可。
对于逻辑控制信息的存储,鱼的移动方向在实际存储时,需要进行抽象,在该游戏中,鱼的移动方向不外乎四种:上、下、左、右。
在程序中只需要找出能够存储四种状态的类型即可,一般选择整数型,而为了便于程序的阅读,一般将四种方向声明为程序中的常量。
(3)根据程序中的数据进行结构设计
将数据抽象成程序中的数据以后,就需要设计使用什么样的结构来存储这些数据了。
在程序中,鱼移动的方向可以定义为一个枚举类型,设计结果如下:
typedef enum
{
FISH_CLT_MOVE_NONE,//不受控制时
FISH_CLT_MOVE_LEFT,//向左移动
FISH_CLT_MOVE_RIGHT,//向右移动
FISH_CLT_MOVE_UP,//向上移动
FISH_CLT_MOVE_DOWN //向下移动
}mmi_swallowfish_move;
鱼的位置以及移动方向,在程序中,均可认为属于鱼的属性,则可以定义成一个结构体,在程序中更为简洁,设计结果如下:
typedef struct
{
S16 x;//鱼的横坐标
S16 y;//鱼的纵坐标
mmi_swallowfish_move direction;//鱼移动的方向
}mmi_swallowfish_property;
对于每条鱼存储,可以采用的数据结构有很多,例如数组、链表等线性的结构都可以,在本程序中,选择结构体数组进行实现。
由于难度等级的变化,小鱼的数量不一,所以在使用数组时,首先声明一个长度比较大的数组,开始只使用其中的一部分,当鱼的条数增加,变化使用的数据即可。
每一个数组元素均可代表一条鱼,设计如下:
mmi_swallowfish_property g_free_fish[10];
游戏中,玩家的得分、生命数、难度等级以及时间的剩余都比较简单,通过四个全局变量来记录当前的值,设计如下:
static S8 g_score = 0;//记录当前游戏的得分
static S8 g_player_lives = 3;//当前游戏玩家所剩的生命数,游戏最初默认为3
static U8 g_level = 0;//玩家选择的游戏难易程度
static S32 g_time_left ;//当前的剩余时间
static S8 g_speed;//根据难度等级不同,自由移动的鱼的速度相应的有所不同
此外,游戏还包括了其他许多变量,设计结果如下:
变量S16 g_plot_level用来表示不同大小的鱼,当g_plot_level的值为1时,玩家控制的鱼则为小鱼;当g_plot_level的值为2时,玩家控制的鱼则为中鱼,以此类推;
定义一个布尔类型的变量is_game_over来表示游戏是否结束,当游戏结束时is_game_over的值为True,当游戏未结束时,is_game_over值为False;
游戏中,还需要将每个难度级别的最高分显示出来,而这部分的分别值存储在NVRAM 中,设计如下:
U16 nvram_id[3] = {NVRAM_SWALLOWFISH_GRADES_LEVEL1,
NVRAM_SWALLOWFISH_GRADES_LEVEL2,
NVRAM_SWALLOWFISH_GRADES_LEVEL3};
每一级对应的最高分写进对应的nvram_id的每个元素中。
4.2.2 LL层设计
游戏逻辑即游戏规则,是游戏编程中最核心的部分,也是最难实现的部分,在游戏程序的开发过程中,大部分时间都是用在游戏逻辑的实现上。
游戏逻辑基于游戏数据结构,从程序开发角度来看,游戏逻辑就是对于游戏数据的规则变换。
当然,这些数据的变换需要根据游戏规则进行实现。
然后把最终变化的结果以界面的形式显示给最终用户,对于游戏程序来说也就是游戏玩家。
进行游戏逻辑的设计,首先要把游戏规则分析出来,所谓游戏规则,就是在游戏中需要程序设计人员实现的规定和控制,这些可以根据游戏的功能进行实现。
“大鱼吃小鱼”游戏需要实现的游戏规则如下:
(l)游戏初始化
(2)玩家控制的鱼的移动及方向控制
(3)自由移动的鱼
(4)大鱼小鱼的碰撞和处理
(5)游戏结束和胜利的判别
(6)游戏的暂停
在程序实际实现时,一般使用方法来组织游戏逻辑相关的代码,也就是将对应的游戏逻辑转换为一个函数或许多函数。
由于以上逻辑都比较简单,所以在实际实现时都转换为一个方法。
下面依次来讲解以上游戏逻辑的实现,并介绍实现时需要注意的一些问题。
(1)游戏初始化
游戏初始化实现的功能是初始化游戏的相关数据,一般在游戏开始、游戏结束以及过关
游戏的关卡切换时调用。
实现该功能首先需要清晰的知道需要初始化那些数据,如何进行初始化。
在“大鱼吃小鱼”游戏中,需要初始化的主要数据是玩家控制的鱼和自由移动的鱼的位置、方向,另外还包含玩家的一些信息,以及一些游戏中控制的变量。
在本游戏中,采用如下的策略进行初始化:将玩家控制基本初始化在屏幕的中央、初始移动方向,其他自由移动的鱼的坐标按照一定规则设定。
游戏的初始化代码如下:
{
g_free_fish[0].x = 60;
g_free_fish[0].y = 50;
g_free_fish[0].direction = FISH_CLT_MOVE_RIGHT;
g_free_fish[1].x = 150;
g_free_fish[1].y = 80;
g_free_fish[1].direction = FISH_CLT_MOVE_LEFT;
g_free_fish[2].x = 40;
g_free_fish[2].y = 100;
g_free_fish[2].direction = FISH_CLT_MOVE_DOWN;
g_free_fish[3].x = 200;
g_free_fish[3].y = 160;
g_free_fish[3].direction = FISH_CLT_MOVE_UP;
g_free_fish[4].x = 90;
g_free_fish[4].y = 190;
g_free_fish[4].direction = FISH_CLT_MOVE_RIGHT;
g_free_fish[5].x = 240;
g_free_fish[5].y = 130;
g_free_fish[5].direction = FISH_CLT_MOVE_LEFT;
g_free_fish[6].x = 280;
g_free_fish[6].y = 210;
g_free_fish[6].direction = FISH_CLT_MOVE_DOWN;
g_free_fish[7].x = 100;
g_free_fish[7].y = 60;
g_free_fish[7].direction = FISH_CLT_MOVE_UP;
g_free_fish[8].x = 130;
g_free_fish[8].y = 150;
g_free_fish[8].direction = FISH_CLT_MOVE_RIGHT;
g_score = 0;
g_time_left = (g_time_attack + 1) * 600;
g_plot_level = 1;
g_player_lives = 3;
g_fish_ctl_x = 70;
g_fish_ctl_y = 40;
}
(2)玩家控制的鱼的移动及方向控制
玩家控制的鱼的移动及方向控制是大鱼吃小鱼游戏的核心规则,也是需要考虑时间比较长的规则。
玩家控制的鱼的移动的规则如下:
在本课题中,所有鱼的移动是通过一个定时器的设定,在每隔200ms的情况下,小鱼的位置(即坐标值)不停变化,然后刷屏,绘制小鱼,利用人们视觉的暂留性,使玩家感觉小鱼在不停地移动。
定时器的使用代码如下:
StartTimer(KEY_TIMER_ID2,200,mmi_swallowfish_draw_all_fish);
注意:使用定时器时,在退出函数中,一定要停止该定时器,即StopTimer(KEY_TIMER_ID1);
1、当手机未收到键盘响应,即玩家没有点击上、下、左、右(或
2、4、6、8)中任意按键时,玩家控制的鱼默认为是自由地左右移动的,即小鱼向左移动时,横坐标减10,小鱼向右移动时,横坐标加10。
同时当小鱼碰到手机屏幕的最右边,小鱼重新从屏幕的最左边出来,并重新开始移动,同理,当小鱼碰到手机屏幕的最左边时,小鱼从屏幕的最右边出来,开始移动。
同时,根据g_plot_level的值及方向选择不同大小、不同方向的鱼,移动的代码如下:
switch(g_fish_direction)
{
case FISH_CLT_MOVE_LEFT:
if (g_fish_ctl_x < 0)
{
g_fish_ctl_x = UI_device_width;
}
g_fish_ctl_x = g_fish_ctl_x - 10 ;
if (g_plot_level == 1)
{
img_id= IMG_ID_GX_SW ALLOWFISH_SMALL_PLAY_1;
}
else if (g_plot_level == 2)
{
img_id= IMG_ID_GX_SW ALLOWFISH_MIDDLE_PLAY_1;
}
else if (g_plot_level == 3)
{
img_id = IMG_ID_GX_SW ALLOWFISH_BIG_PLAY_1;
}
else if (g_plot_level == 4)
{
img_id = IMG_ID_GX_SWALLOWFISH_SOBIGBIG_PLAY_1;
}
break;
case FISH_CLT_MOVE_RIGHT:
if (g_fish_ctl_x > UI_device_width)
{
g_fish_ctl_x = 0;
}
g_fish_ctl_x = g_fish_ctl_x + 10 ;
if (g_plot_level == 1)
{
img_id= IMG_ID_GX_SW ALLOWFISH_SMALL_PLAY_2;
}
else if (g_plot_level == 2)
{
img_id= IMG_ID_GX_SW ALLOWFISH_MIDDLE_PLAY_2;
}
else if (g_plot_level == 3)
{
img_id = IMG_ID_GX_SW ALLOWFISH_BIG_PLAY_2;
}
else if (g_plot_level == 4)
{
img_id = IMG_ID_GX_SWALLOWFISH_SOBIGBIG_PLAY_2;
}
break;
}
2、当玩家点击上、下、左、右(或2、4、6、8)中任意按键时,手机收到键盘响应,玩家控制的鱼根据收到的按键响应,向上、向下、向左或向右移动,即对应的横坐标或纵坐标相加或相减,使小鱼移动。
当停止按键时,小鱼继续左右移动。
以向左按键为例(其他方向按键类似):
void mmi_swallowfish_fish_left (void)
{
g_fish_direction = FISH_CLT_MOVE_LEFT;
g_fish_ctl_x = g_fish_ctl_x - 5 ;
StartTimer(KEY_TIMER_ID1,100,mmi_swallowfish_fish_left);
}
void mmi_swallowfish_fish_stop(void)
{
StopTimer(KEY_TIMER_ID1);
}
在MTK平台中,需要对所有的按键响应进行注册,同样,以注册左按键为例(其他方向按键类似):
SetKeyHandler(mmi_swallowfish_fish_left,KEY_LEFT_ARROW,KEY_FULL_PRESS_DOWN);
SetKeyHandler(mmi_swallowfish_fish_stop, KEY_LEFT_ARROW,KEY_EVENT_UP); (3)自由移动的鱼
在大鱼吃小鱼的游戏中,有许多不同大小自由移动的鱼,它们不受玩家控制自由移动,有左右移动的,有上下移动的,规定地,当它们碰到手机屏幕最边时,弹回,按照反方向继续移动。
根据游戏的难度等级不同,它们移动的速度也有所变化。
鱼的图片根据方向的不同选择不同。
通过结构体指针[5]绘制不同的鱼不同的移动方向。
同样,通过定时器实现鱼的移动。
自由移动鱼的代码如下[8]:
{
if ((300 < fish->x) || (0 > fish->x))
{
if (FISH_CLT_MOVE_LEFT == fish->direction)
{
fish->direction= FISH_CLT_MOVE_RIGHT;
}
else if (FISH_CLT_MOVE_RIGHT== fish->direction)
{
fish->direction = FISH_CLT_MOVE_LEFT;
}
}
if ((225 < fish->y) || (15 > fish->y))
{
if (FISH_CLT_MOVE_UP== fish->direction)
{
fish->direction= FISH_CLT_MOVE_DOWN;
}
else if ((FISH_CLT_MOVE_DOWN== fish->direction))
{
fish->direction = FISH_CLT_MOVE_UP;
}
}
if (FISH_CLT_MOVE_RIGHT == fish->direction)
{
fish->x = fish->x + g_speed;
}
else if (FISH_CLT_MOVE_LEFT == fish->direction)
{
fish->x = fish->x - g_speed ;
}
else if (FISH_CLT_MOVE_UP == fish->direction)
{
fish->y = fish->y - g_speed;
}
else
{
fish->y = fish->y + g_speed;
}
if (FISH_CLT_MOVE_LEFT == fish->direction)
{
img_id = IMG_ID_GX_SWALLOWFISH_SOSMALL_FISH_1;
}
else
{
img_id = IMG_ID_GX_SWALLOWFISH_SOSMALL_FISH_2;
}
gdi_image_draw_id(fish->x, fish->y, img_id); }
(4)大鱼小鱼的碰撞和处理
大鱼小鱼的碰撞和处理也是大鱼吃小鱼游戏的核心规则,本来碰撞检测是游戏编程中的一个基础算法,本游戏在实际实现时简化了碰撞检测的实现。
1、大鱼小鱼的碰撞
本规则的实现如下:我们知道所有鱼的图像资源的大小,只要当图片有所重合,则认为鱼之间有相撞。
这样在两条约碰撞时,只要考虑两条鱼的左上角坐标,如图:
图4.10 小鱼碰撞时坐标位置
其中一条鱼的坐标只需要在上图所画的大正方形中即可,这样就简化了碰撞检测的判别。
以15×15的鱼和不同大小的鱼碰撞为例,用一个局部变量flag[9]标记是否碰撞,代码如下:
if (1 == g_plot_level)
{
if ((g_fish_ctl_x > fish->x-15 ) && (g_fish_ctl_x < fish->x + 15) && (g_fish_ctl_y > fish->y- 15) && (g_fish_ctl_y < fish->y+ 15)) {
flag = 1;
}
}
else if (2 == g_plot_level)
{
if ((g_fish_ctl_x > fish->x -25 ) && (g_fish_ctl_x < fish->x + 15) && (g_fish_ctl_y > fish->y - 25) && (g_fish_ctl_y < fish->y + 15)) {
flag = 1;
}
}
else if (3 == g_plot_level)
{
if ((g_fish_ctl_x > fish->x -35 ) && (g_fish_ctl_x < fish->x + 15) && (g_fish_ctl_y > fish->y - 35) && (g_fish_ctl_y < fish->y + 15)) {
flag = 1;
}
}
2、大鱼小鱼的碰撞后的处理
当检测到碰撞以后,需要进行的处理有两种情况:玩家控制的鱼吃到小鱼和玩家控制的鱼被大鱼吃掉。
玩家的鱼吃到小鱼后,重新随机生成小鱼,且玩家的得分增加,根据吃到的鱼的大小不同,得分也不同。
玩家的鱼被大鱼吃掉,玩家的鱼重新随机生成,生命数减一,得分减少,时间恢复最初值。
这里只需要将鱼的坐标值通过随机函数重新生成,得分和生命数的变化只需要改变几个全局变量g_score、g_player_lives和g_time_left的值即可。
a.玩家的鱼吃到小鱼,代码如下:
if (1 == flag)
{
gui_set_text_color(gui_color(255,0,0));
gui_move_text_cursor(fish->x + 5,fish->y + 5);
gui_print_text(L"+1");
srand((U32)time(NULL));
fish->x = rand() % 60 * 5 ;
fish->y = (rand() % 43 + 1)* 5 ;
flag = 0;
fish->direction= FISH_CLT_MOVE_LEFT;
g_score = g_score + 1;
}
b.玩家的鱼被大鱼吃,代码如下:
if (flag == 1)
{
if (g_score <= 10)
{
g_score = 0;
}
else if (g_score > 10 && g_score <= 30)
{
g_score = 10;
}
else
{
g_score = 30;
}
g_player_lives = g_player_lives - 1;
g_time_left = (g_time_attack + 1) * 120 * 5;
flag = 0;
srand((U32)time(NULL));
g_fish_ctl_x = rand() % 30 * 10 ;
g_fish_ctl_y = (rand() % 21+1) * 10 ;
g_fish_direction = FISH_CLT_MOVE_LEFT;
}
(5)游戏结束和胜利的判别
游戏结束也是益智类游戏开发过程经常需要判别的条件,不同的游戏结束条件需要根据游戏规则进行实现。
本课题中,通过定时器来控制鱼的移动,游戏的判别也可以通过定时器来实现。
在每次绘制鱼的同时,检测玩家信息,判别游戏是否满足结束或胜利的规则。
大鱼吃小鱼游戏结束的规则主要有两个:
a、玩家的生命数为0
通过定时器不停地检测全局变量g_player_lives的值,当g_player_lives = 0时,停止定时器,释放层、内存等,将全局变量is_game_over的值赋为True,绘制游戏结束的图片,设置左右软键的功能。
b、剩余时间为0
定时器在不停地检测全局变量g_player_lives的值的同时,也在检测g_time_left的值,当g_time_left = 0时,停止定时器,释放层、内存等,将全局变量is_game_over的值赋为True,绘制游戏结束的图片,设置左右软键的功能。
判别游戏结束的代码如下:
void mmi_swallowfish_is_game_over(void)
{
if (g_time_left == 0 )
{
is_game_over = TRUE;
string_id = STR_ID_GX_SW ALLOWFISH_TIME_UP;
}
if (g_player_lives == 0 )
{
is_game_over = TRUE;
string_id = STR_ID_GX_SW ALLOWFISH_LIFE;
}
if( is_game_over == TRUE)
{
StopTimer(KEY_TIMER_ID2);
gdi_layer_free(new_layer);
DeleteScreenIfPresent(SCR_ID_GX_SW ALLOWFISH_STARTGAME);
is_game_over=FALSE;
gdi_layer_create(0,0,320,240,&new_layer);
gdi_layer_set_active(new_layer);
gdi_layer_clear(blue_color);
gdi_layer_set_source_key(TRUE,blue_color);
gdi_image_draw_id(70,50,IMG_ID_GX_SWALLOWFISH_FAIL);
gui_set_text_color(gui_color(250,255,0));
gui_move_text_cursor(50,0);
gui_print_text(GetString(string_id));
gui_set_text_color(gui_color(0,0,0));
gui_move_text_cursor(45,220);
gui_print_text(GetString(STR_GLOBAL_OK));
gdi_layer_set_blt_layer(base_layer,new_layer,NULL,NULL);
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height);
SetLeftSoftkeyFunction(mmi_swallowfish_newgame_entry,KEY_EVENT_DOWN);
SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_DOWN);
}
}
大鱼吃小鱼游戏结束的规则是玩家的得分达到要求即可。
同理,通过定时器根据不同难易程度来不停检测全局变量g_score的值,当达到规定值时,则游戏胜利,绘制胜利图片,停止定时器,释放内存。
判别游戏胜利的代码如下:
void mmi_swallowfish_is_game_win(void)
{
if (g_level == 0)
{
tmp_score = 80;
}
else if (g_level == 1)
{
tmp_score = 100;
}
else
{
tmp_score = 120;
}
if( g_score >= tmp_score && g_player_lives > 0 && g_time_left > 0)
{
StopTimer(KEY_TIMER_ID2);
gdi_layer_free(new_layer);
DeleteScreenIfPresent(SCR_ID_GX_SW ALLOWFISH_STARTGAME);
gdi_layer_create(0,0,320,240,&new_layer);
gdi_layer_set_active(new_layer);
gdi_layer_clear(blue_color);
gdi_layer_set_source_key(TRUE,blue_color);
gdi_image_draw_id(70,50,IMG_ID_GX_SWALLOWFISH_WIN);
gui_set_text_color(gui_color(250,255,0));
gui_move_text_cursor(50,0);
gui_print_text(GetString(STR_ID_GX_SW ALLOWFISH_WIN));
gdi_layer_set_blt_layer(base_layer,new_layer,NULL,NULL);
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height);
mmi_swallowfish_highest_score_to_nvram();
mmi_swallowfish_init();
}
}
(6) 游戏暂停的控制
在手机游戏中,可中断性强是一个基本的要求,其中游戏暂停就是实现该要求的一种方式。
在游戏中,按下右软键,游戏暂停,返回到上一界面,选择“option”中的继续游戏则可以重新开始。
暂停代码如下:
void mmi_swallowfish_goback_menu(void)
{
mmi_swallowfish_exit_game();
GoBackHistory();
}
4.2.3 UL层设计
(1)界面设计
游戏界面是一个游戏展现给玩家的平台,所以界面设计是否美观是很多玩家选择一款游戏的重要标准,游戏中界面设计和软件界面设计的要求是一致的,主要有以下几条要求[7]:
1、界面美观
2、界面条理
3、符合玩家操作习惯(界面友好)
在本界面中,包含玩家控制的鱼、自由移动的鱼、玩家信息及一个按钮文字,在本界面设计中,根据手机上的操作习惯,将按钮的位置设置在手机的右下角,玩家的信息设置在屏
幕最上方和最右边,而将整个屏幕(包含按钮文字显示区域、玩家信息显示区域)作为游戏区域,以最大限度的利用手机上的屏幕空间,所以本游戏未从屏幕中划分出独立的游戏区域。
对于简单的益智游戏,一般不需要设计滚屏,所以该游戏在设计界面上设计为简单的单屏游戏。
(2)游戏操作设计
游戏操作指玩家以怎样的形式参与游戏,每个游戏的操作需要根据游戏的规则等进行设计,不过在设计游戏操作以前首先需要考虑的问题,这款游戏中有哪些是需要玩家进行参与的,然后才是以如何的形式进行参与,其次需要考虑不同平台以及不同设备上的操作特点,一定要满足硬件的要求。
游戏操作设计的规则如下:
1、操作简单
2、操作方便
3、符合用户操作习惯
4、符合设备硬件要求
针对手机设备来说,输入设备一般为:单手键盘、双手键盘(Nokia N-Gage QD)和触摸屏,而大部分的手机都是普通的单手键盘,也就是一般使用单手进行操作的键盘,本游戏就以最常见的单手键盘为基础进行游戏操作设计。
在本游戏中,需要玩家参与的操作有:控制贪吃鱼移动的方向和退出功能。
在该游戏中,贪吃鱼的速度、程序是否结束等则由游戏程序本身进行控制。
基于以上需要控制的内容,本游戏设计的操作方式如下:
1)使用手机键盘上的4个方向键控制方向,按照手机上的操作习惯,也可以使用数字键
2、4、6和8分别控制上、左、右和下。
注意:当用户按下向上、向下的方向键时,鱼头的方向默认为向左。
2)使用手机键盘上的右软键控制游戏的“返回”功能,使得游戏返回上一菜单。
当然,在手机上也可以通过挂机键退出程序。
当下一次再进入游戏菜单时,可选择“新游戏”或“继续游戏”。