当前位置:文档之家› 手机游戏简单开发

手机游戏简单开发

手机游戏简单开发
手机游戏简单开发

手机游戏开发和应用分析

根据最新出炉的《2014年中国游戏产业报告》显示,2014年移动游戏收入达274.9亿元,首次超过网页游戏,并且比2013年增长了两倍多。业界预测,今年国内手游规模可达380亿-400亿元

一款手机游戏的诞生

如今的手机,你可以把它看着是一台功能全面的网络计算机。虽然它在屏幕大小、硬件配置、使用方式上与传统计算机有着很大差距,但还是有许多共通之处的。以手机游戏而言,它确实有自己的特殊之处,但是游戏的整个开发流程,与传统游戏开发则有异曲同工之妙。

1.设计文档,勾画游戏蓝图

典型的手机游戏开发过程可分为策划和开发两大阶段。策划阶段包括开始的游戏创意、立项到最终形成一个完整可行的设计文档。

每个游戏项目的产生,最先都是源自某个创意。大多数手机游戏的创意,来自于传统的游戏机,如贪吃蛇、俄罗斯方块、泡泥鳅龙、马里奥、波斯王子、极品飞车等。所有创意,最终要形成一个确定的,有可行性的设计文档,它就是游戏后续开发的一张蓝图,一个向导。

手机游戏的许多创意来自传统游戏机

一个典型的手机游戏策划案需要包括:游戏名称,游戏类型,运行环境(包括对应机种和基本配置),发行区域(以哪些国家或地区为主),用户分析(针对人群的年龄、性别以及经济能力),游戏概述(游戏的时间背景、空间背景、视角、世界观、题材、情节、人物简述),游戏特征(描述此游戏不同于其他同类游戏的重要特征,也就是这个游戏的创意点),开发周期(包括前期策划、实际开发、测试等环节所需要的时间资源以及人员资源),市场前景分析等等。

实战:超级俄罗斯方块策划案(一)

超级俄罗斯方块是使用Java Me开发的基于Nokia S40、S60,索尼爱立信,摩托罗拉,三星,LG等主流手机平台的一款彩屏手机游戏。这是一个益智类单机版游戏,逻辑较简洁,容易上手,老少咸宜。

游戏名称:超级俄罗斯方块

游戏类型:益智类(PUZ)

游戏人数:1人

游戏内容:

在传统的俄罗斯方块规则之上增加了的方块之中随机出现的道具,同时引入数个可爱的动画人物根据玩家的控制情况进行一系列跑步、跳舞等动作。排行榜和随着游戏关卡而递增的难度丰富了游戏过程。

……

2.确定游戏的流程逻辑

设计文档不但要对游戏项目有个整体的规划说明,并且还要将游戏细分成一些单独的部分,比如游戏的内容是什么?有多少关卡?游戏外观是什么样的风格?适合采用哪种开发?等等。由此可以看出游戏策划文档,实际需要整个团队方方面面的人员的参与:策划、程序、美术甚至音效等等。

比如设计文档中一个比较重要的部分:游戏流程逻辑。需要解决玩家如何玩游戏(操作)的问题,策划人员需要有一个明确的流程图表,提交给程序员来确认功能和流程的合理性,以及这些功能实现所需要的时间等等。同样,这个流程表也要提交给美术人员,以便他们设计相应的游戏界面。

实战:超级俄罗斯方块策划案(二)

本例游戏的流程,如图3所示。

图3:超级俄罗斯方块流程图

所谓游戏逻辑,也可以移之为游戏规则。在本游戏中,出现的方块共有七种,其形状与颜色4所示。游戏主画面被分割成10×10大小的方格。每个方块也是由如此大小的小方块组成的。方块会从区域上方开始缓慢落下。

玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块在区域上方开始落下。当区域中的某一行横向格子全部由方块填满,则该行会消失并成为玩家的得分。同时删除的行数越多,得分越多。一次消除单行得分100,两行得分300,三行得分600,四行得分1000。当固定的方块堆至区域最上方而无法消除时,游戏结束。

游戏逻辑还需要配合具体的硬件配置来实现,比如手机的按键和计算机的键盘,显然不能同日而语。手机的按键一般分为导航键、数字键和软键。导航键指的是十字型键盘的上、下、左、右、确定键。数字包括0~9和星号、井号按键。软键指的是屏幕左下方和右下方各两个按键,分别称为左软键和右软键。手机游戏的操作和其他家用机、掌机平台相比相对笨拙。大部分游戏最好设置成单手操作以方便玩家掌握。合理的设置键位也是十分重要的。过多过于凌乱的按键设置会让玩家上手十分困难。

图4:方块示意图

3.游戏关卡设计

一款游戏的可玩性,很大程度上取决于游戏关卡的设计。一个游戏一般会由多个关卡组成,每个关卡应尽量有所变化。比如一些RPG类的游戏中,一个关卡中玩家获得藏宝的消息,下一个关卡中则是如何去搜索宝物;对于益智类的游戏,如搬箱子,每个关卡要提升难度,增加地图的复杂性。这样才会激励玩家一直玩下去。

实战:超级俄罗斯方块策划案(三)

本例游戏中一共有9个关卡,每关难度递增。每消除满30行时,当前关卡结束,通过全部9关则游戏彻底通关。方块的初始下落速度暂定为16像素每秒,每通过一关,方块每秒的下落速度增加3像素。

关卡之间切换时会进行卡通形象的过场表演。

游戏中共有三种道具会隐藏在方块之中,当该藏有某道具方块小格被消除时,玩家即可获得该道具。玩家可在游戏的任何时间使用数字键1、2和3来使用手中已有的道具。每种道具最多积攒3个,每使用一次扣除1个。

三种道具的功能分别是:魔术棒,随机消除某种颜色的所有方块;神奇之手,消除屏幕最底端的两行方块;魔幻水晶,将下一个降落的方块无条件变换为长条。

游戏之中会有随机出现在方块中的小金块,每次被消除时,可为玩家带来100至200的随机分数。

4.给游戏披上华丽外衣

玩游戏是为了享受,所以游戏的视觉效果相当重要。美术人员会根据设计文档所要求的风格,设置各级界面、游戏形象、道具等。

游戏中除了某些背景外,其他的图片都是用“切片”方法拼出来的,这样可以减少游戏所占用的手机存储空间和内存。手机游戏在进入下一个画面之前要预先进行图片的加载,把需要的图片从手机的存储空间加载到内存,然后进行处理。某个阶段不需要的图片还要注意及时释放。一般加载和释放切片都是在游戏开始或者过关场景时进行的,要尽量避免一次加载过多的图片而导致玩家等待过久。

5.开发,从概念到实体

设计文档只是一个概念,要变成实实在在摆在货架上的商品,还需要经历一个艰苦的开发阶段。手机游戏程序员首先考虑的问题是选择什么样的开发平台,当前主流的手机游戏开发平台有:Google Android、iPhone OS、Symbian OS、Windows Mobile、Flash Lite、

Doja、BREW、MTK、Java Me等。而就目前市场状况来看,Google Android和iPhone OS无疑前景光明。

表1:主流开发平台对比

平台名称特性简介

iPhone 提供完善的开发工具和接口函数,功能强大,界面美观。采用Object C语言,熟悉C语言的开发者很容易掌握。

Android 类库丰富,可以完成许多大量计算任务。开发采用Java或C++,熟悉Java Me 的开发人员很容易转到该平台。

Symbian 历史悠久的开发平台,可以采用多种语言进行开发。虽然市场份额有所缩减,但仍然具有重要影响力。

Windows Mobile 开发工具友好,熟悉Windows开发的人很容易转到该平台。

Java ME 功能完善,类库丰富。在手机游戏开发中占有较大的市场份额。

机遇

市场尚未饱和,成长空间大

数据显示,2011年第1季度中国手机网络游戏用户数量突破2300万,达到了2332万,环比增长15.05%;手机网络游戏市场规模在2011年第1季度继续保持稳步增长,2011年第1季度手机网络游戏市场规模2.55亿,环比增长18.41%。

巨大的仍在不断成长的手机网游市场无疑是一个极佳的网络创业途径,这个市场虽然竞争激烈,但是仍未出现绝对性领军角色,虽然大量游戏涌入玩家视野,可真正精品实在少之又少,市场远未饱和。

推广渠道多样,降低成本

游戏的推广渠道也越来越广泛,这无疑给了许多小厂商更多希望。在2008年之前,单一的梦网模式几乎垄断了手机游戏行业,而且那个时候手机网游也远未兴起,如今新生媒体风起云涌,诸如微博、视频网站、微信平台、人人等等新媒体都是游戏极佳的宣传平台,以往的游戏宣传成本过高使得许多原本十分优秀的游戏也难以得到好的发展,而现在,各个厂商都充分利用了成本较低效果也更佳的病毒式营销模式,并且取得了好的效果。由浪人计算机系统有限公司出品的手机版对战牛牛就是新生代的手机棋牌游戏,人性化的操作功能,绚丽流畅的游戏界面,与电脑PC端完美互联,实现掌下手机与线下PC端的畅享互动。

困境

手游类型分布不均,盈利模式单一

虽然已有越来越多的人开始尝试手游,但事实是大部分玩家更加青睐策略类游戏和角色扮演类游戏,玩家的需求也就直接影响了手游厂商们的布局。另外,当前手游的盈利模式主要有三种:付费下载,道具收费和内置广告,而国内的手游厂商基本都选择了道具收费模式。

手机流量费用高,游戏成本大

联网是手机网游存在的必要前提,因此这也是手机网游的硬伤之一,对于许多普通玩家来说,流量费用是阻碍其脚步的一个巨大障碍。即便当前wifi及3G 网络的快速建设,但也只是局限于部分城市,部分人群,大范围的普及解决手机流量问题至少还要两到三年时间。虽然当前蓬勃兴起的手游行业机遇和困难并存,但问题终究是暂时的,社会的进步,用户的需求已经决定了未来的手机游戏

终有一天会拨云见日明,而只有真正用心的产品才会受到玩家的欢迎,并最终在网游行业里站稳脚跟

以前学java做的作业,贪吃蛇的代码

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

public class SnakeGame extends JFrame implements KeyListener{

private int stat=1,direction=0,bodylen=6,headx=7,heady=8,

tailx=1,taily=8,tail,foodx,foody,food;//初始化定义变量

public final int EAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常量

int [][] fillblock=new int [20][20];//定义蛇身所占位置

public SnakeGame() {//构造函数

super("贪吃蛇");

setSize(510,510);

setVisible(true);//设定窗口属性

addKeyListener(this);//添加监听

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

for(int i=1;i<=7;i++) fillblock[i][8]=EAST;//初始化蛇身属性

direction=EAST;//方向初始化的设置

FoodLocate(); //定位食物

while (stat==1){

fillblock[headx][heady]=direction;

switch(direction){

case 1:headx++;break;

case 2:headx--;break;

case 3:heady++;break;

case 4:heady--;break;

}//蛇头的前进

if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[hea dx][heady]!=0){

stat=0;

break;

} //判断游戏是否结束

try{

Thread.sleep(150); }

catch(InterruptedException e){}//延迟

fillblock[headx][heady]=direction;

if(headx==foodx&&heady==foody){//吃到食物

FoodLocate();

food=2;

try{

Thread.sleep(100); }

catch(InterruptedException e){}//延迟

}

if(food!=0)food--;

else{tail=fillblock[tailx][taily];

fillblock[tailx][taily]=0;//蛇尾的消除

switch(tail){

case 1:tailx++;break;

case 2:tailx--;break;

case 3:taily++;break;

case 4:taily--;break;

}//蛇尾的前进

}

repaint();

}

if(stat==0)

JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",https://www.doczj.com/doc/6110509068.html,RMATION_MESSAGE);

}

public void keyPressed(KeyEvent e) {//按键响应

int keyCode=e.getKeyCode();

if(stat==1) switch(keyCode){

case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;

case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break;

case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break;

case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EAST;break;

}

}

public void keyReleased(KeyEvent e){}//空函数

public void keyTyped(KeyEvent e){} //空函数

public void FoodLocate(){//定位食物坐标

do{

Random r=new Random();

foodx=r.nextInt(20);

foody=r.nextInt(20);

}while (fillblock[foodx][foody]!=0);

}

public void paint(Graphics g){//画图

super.paint(g);

g.setColor(Color.BLUE);

for(int i=0;i<20;i++)

for(int j=0;j<20;j++)

if (fillblock[i][j]!=0)

g.fillRect(25*i+5,25*j+5,24,24);

g.setColor(Color.RED);

g.fillRect(foodx*25+5,foody*25+5,24,24);

}

public static void main(String[] args) {//主程序

SnakeGame application=new SnakeGame();

}

When you are old and grey and full of sleep, And nodding by the fire, take down this book,

And slowly read, and dream of the soft look

Your eyes had once, and of their shadows deep;

How many loved your moments of glad grace,

And loved your beauty with love false or true,

But one man loved the pilgrim soul in you,

And loved the sorrows of your changing face;

And bending down beside the glowing bars,

Murmur, a little sadly, how love fled

And paced upon the mountains overhead

And hid his face amid a crowd of stars.

The furthest distance in the world

Is not between life and death

But when I stand in front of you

Yet you don't know that

I love you.

The furthest distance in the world

Is not when I stand in front of you

Yet you can't see my love

But when undoubtedly knowing the love from both Yet cannot be together.

The furthest distance in the world

Is not being apart while being in love

But when I plainly cannot resist the yearning

Yet pretending you have never been in my heart. The furthest distance in the world

Is not struggling against the tides

But using one's indifferent heart

To dig an uncrossable river

For the one who loves you.

相关主题
文本预览
相关文档 最新文档