当前位置:文档之家› J2ME手机游戏设计案例源代码-GameEngine_TiledLayer

J2ME手机游戏设计案例源代码-GameEngine_TiledLayer

J2ME手机游戏设计案例源代码-GameEngine_TiledLayer
J2ME手机游戏设计案例源代码-GameEngine_TiledLayer

********GameMID。Java

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

import javax.microedition.lcdui.Display;

import javax.microedition.midlet.*;

/**

* @author Administrator

*/

public class GameMID extends MIDlet {

private Display display;

private GameWorld gw=null;

public GameMID(){

display = Display.getDisplay(this); //获取Display

gw=new GameWorld(this); //创建游戏画布

display.setCurrent(gw); //设置游戏画布为当前显示画面}

public void startApp() {

if(gw!=null){

gw.start(); //游戏开始执行

}

}

public void pauseApp() {

if(gw!=null){

gw.setPaused(true); //游戏暂停执行

}

}

public void destroyApp(boolean unconditional) {

}

/* 退出程序*/

public void exit(){

try{

destroyApp(false);

}catch(Exception e){}

notifyDestroyed();

}

}

**********GameWorld。Java

import java.io.IOException;

import javax.microedition.lcdui.Font;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.game.Sprite;

import javax.microedition.lcdui.game.TiledLayer;

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/**

*

* @author Administrator

*/

public class GameWorld extends GameCanvas implements Runnable{

GameMID mid; //游戏MIDlet

Thread MainThread; //游戏主线程

private final int MS_PER_FRAME=30; //设置一次游戏循环所需时间,单位为毫秒(ms),每秒游戏帧数约为1000/MS_PER_FRAME

private int cps; //游戏帧速

private boolean isPaused; //游戏暂停状态

private boolean running; //游戏运行状态

Graphics g; //游戏绘图对象

public static int ScreenWidth; //游戏屏幕宽度,设置为静态成员,方便外部访问

public static int ScreenHeight; //游戏屏幕高度

public static int GameState; //游戏状态,1为暂停,2为游戏进行中,3为游戏失败

public static int KeyState; //按键状态

private Image imgEnemy,imgBoy; //精灵图像

private Sprite sprEnemy; //定义敌人精灵

private MySprite sprBoy; //用扩展的精灵类来定义玩家精灵

//定义三个不同方向的玩家精灵帧序列,右方向可由左方向镜像变换得到

int LSequ[]={3,4,3,5}; //定义左方向精灵帧序列

int USequ[]={6,7,6,8}; //定义上方向精灵帧序列

int DSequ[]={0,1,0,2}; //定义下方向精灵帧序列

int enemyX,enemyY; //敌人精灵坐标

int enemySpeedX; //敌人精灵速度,这里设置为只能水平移动

boolean isColl; //碰撞标志

long CollTextTime; //碰撞文本显示时间

TiledBg tbg; //创建贴图层应用类

TiledLayer tl; //创建贴图层类

//定义字体

private Font largeFont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_LARGE);

private Font mediumFont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_MEDIUM);

public GameWorld(GameMID midlet)

{

super(true);

this.mid=midlet; //获取MIDlet

this.setFullScreenMode(true); //设置为全屏模式

ScreenWidth=getWidth(); //获取屏幕大小

ScreenHeight=getHeight();

g=this.getGraphics(); //获取绘图对象

running=false; //设置游戏运行状态

isPaused=false;

GameInit(); //游戏初始化

}

/* 游戏初始化*/

private void GameInit() {

try {

imgBoy = Image.createImage("/Boy.png");

imgEnemy=Image.createImage("/enemy.png");

} catch (IOException ex) {

ex.printStackTrace();

}

// 使用Image对象,帧宽度、帧高度,速度,限制范围矩形左上角的X坐标、Y 坐标、高度和宽度来构造自定义精灵

sprBoy=new MySprite(imgBoy,32,48,3,0,0,ScreenWidth,ScreenHeight);

sprBoy.setFrameSequence(LSequ); //设置初始化时的精灵帧序列和方向

sprBoy.setDir( MySprite.LEFT); //设置初始化时精灵方向

sprBoy.defineReferencePixel(sprBoy.getWidth()/2, sprBoy.getHeight()/2); //设置参考点

sprBoy.setRefPixelPosition(ScreenWidth/2, ScreenHeight/2); //通过参考点定位精灵

int sw=sprBoy.getWidth();

int sh=sprBoy.getHeight();

sprBoy.defineCollisionRectangle(sw/10, sh/10, sw*8/10,sh*8/10); //重设精灵的碰撞矩形范围为原来的80%

//创建敌人精灵

sprEnemy=new Sprite(imgEnemy,imgEnemy.getWidth()/3,imgEnemy.getHeight()/3);

sprEnemy.setFrameSequence(LSequ); //设置精灵循环序列

enemyX=50; //设置敌人精灵的坐标

enemyY=200;

enemySpeedX=-2; //设置敌人精灵速度

tbg=new TiledBg(); //创建TiledBg对象

tl=tbg.getTiledbg(); //获取贴图层

}

/* 游戏运行*/

public void run(){

int cyclesThisSecond=0; //当前1秒内的循环次数

long cycleStartTime; //循环开始时间

long lastCPSTime=0; //上次计算帧速的时间

long cycleEndTime=0; //循环结束时间

long cycleTimes=0; //一次游戏循环热所花的时间

boolean bSkip = false; //游戏是否跳帧

cps=0;

System.out.println("游戏开始");//在控制台输出开始信息,可屏蔽

/* 游戏主循环*/

while(running){ //检查是否运行

cycleStartTime = System.currentTimeMillis();//记录游戏循环开始时间

// 下面语句用于处理游戏内容,如果游戏设置为跳帧,

// 则本次循环不处理游戏内容

if(!bSkip)

{

GameInput(); //处理输入消息

GameCycle(); //处理游戏逻辑

render(g); //渲染游戏画面

flushGraphics(); //更新画面

}

/* 下面语句用于计算游戏循环时间,并进行相应处理*/

cycleEndTime=System.currentTimeMillis(); //记录游戏循环结束时间cycleTimes=cycleEndTime-cycleStartTime; //计算循环时间

//如果循环时间间隔小于MS_PER_FRAME,则通过休眠,使其不小于rate, //并能让系统有空闲转去处理其他事务

if(cycleTimes

bSkip = false;

try {

Thread.sleep(MS_PER_FRAME - cycleTimes); //休眠

}

catch (InterruptedException ex) {

ex.printStackTrace();

}

}

else{

//如果循环时间大于MS_PER_FRAME,则设置bSkip为true,

//让程序跳过一次循环,以主动丢帧的方式换取游戏速度

bSkip = true;

}

//下面语句用于计算每秒的循环次数,即帧速,在游戏中如果不需要,

//可将这部分语句及相关变量注释屏蔽

if (System.currentTimeMillis() - lastCPSTime > 1000){ //检查距上次计算帧数的

//时间是否经过1000ms

lastCPSTime=System.currentTimeMillis(); //设定lastCPS为当前时间

cps = cyclesThisSecond;

// System.out.println("cps:"+cps); //输出每秒的帧数

cyclesThisSecond = 0; //重置帧数

}

else {

cyclesThisSecond++; //帧数递增

}

}

System.out.println("游戏结束!");

release(); //释放资源

exit(); //退出游戏

}

/* 启动游戏进程*/

public void start(){

//检查游戏循环是否处于运行状态,如果未运行,则创建线程并启动

//如果游戏处于运行状态,则表示是暂停后的继续执行,仅设置暂停状态即可

if(!running){

running=true;

MainThread=new Thread(this);

MainThread.start();

GameState=2;

}

else{

GameState=2;

setPaused(false);

}

}

//退出游戏

private void exit() {

mid.exit(); //退出游戏

}

/* 停止游戏*/

private void stop(){

running=false; //终止游戏循环

}

/* 释放游戏资源*/

private void release(){

//此处为释放游戏资源的代码

imgEnemy=null;

imgBoy=null;

sprBoy=null;

sprEnemy=null;

tbg=null;

tl=null;

System.gc();

}

/*获取暂停状态*/

public boolean getPaused() {

return isPaused;

}

/* 设置暂停状态*/

public void setPaused(boolean isPaused) {

this.isPaused = isPaused;

}

/* 处理游戏输入信息*/

private void GameInput() {

int keyStates = this.getKeyStates(); //获取按键状态

/* 下面是对按键事件的具体处理,应根据游戏需要进行修改*/ KeyState=0;

//Fire

if((keyStates & FIRE_PRESSED )!=0){

KeyState=FIRE_PRESSED;

}

// Left

if ((keyStates & LEFT_PRESSED) != 0){

KeyState=LEFT_PRESSED;

}

// Right

if ((keyStates & RIGHT_PRESSED) !=0 ){

KeyState=RIGHT_PRESSED;

}

// Up

if ((keyStates & UP_PRESSED) != 0) {

KeyState=UP_PRESSED;

}

// Down

if ((keyStates & DOWN_PRESSED) !=0) {

KeyState=DOWN_PRESSED;

}

//Game_A

if((keyStates & GAME_A_PRESSED)!=0) {

KeyState=GAME_A_PRESSED;

}

//Game_B

if((keyStates & GAME_B_PRESSED)!=0){

KeyState=GAME_B_PRESSED;

}

//Game_C

if((keyStates & GAME_C_PRESSED)!=0) {

KeyState=GAME_C_PRESSED;

}

//Game_D

if((keyStates & GAME_D_PRESSED)!=0){

KeyState=GAME_D_PRESSED;

}

}

/* 渲染游戏画面*/

private void render(Graphics g) {

/* 填充背景*/

g.setColor(0xffffff);

g.fillRect(0, 0, ScreenWidth,ScreenHeight);

/* 下面是对游戏渲染的具体处理,应根据游戏需要进行修改*/

tl.paint(g); //绘制贴图层

// g.drawImage(imgBuild,100, 50, Graphics.LEFT|Graphics.TOP);

sprEnemy.paint(g); //绘制敌人精灵

sprBoy.paint(g); //绘制精灵

//当敌人精灵和玩家角色相碰撞时,绘制下面的内容

if(isColl){

g.setColor(0xccbbcc);

g.fillRect(50, 0, 120, 20);

g.setColor(0xffffff);

g.setFont(largeFont);

g.drawString("被敌人撞上啦!",60,0, Graphics.LEFT| Graphics.TOP);

}

}

/* 游戏逻辑处理*/

private void GameCycle() {

switch(GameState){

case 1: //游戏暂停状态时的处理

//根据按键状态执行相应功能

switch(KeyState){

case GAME_A_PRESSED: //按下GAME_A键时的处理

GameState=4; //设置游戏状态会结束程序

break;

case FIRE_PRESSED: //按下FIRE键时的处理

if(getPaused()){

GameState=2;

setPaused(false);

}

break;

}

break;

case 2: //游戏处于运行状态时的处理

{

//根据按键状态执行相应功能

//根据按键状态进行计算

switch(KeyState){

case FIRE_PRESSED: //按下Fire键时

GameState=1; //设置游戏状态为暂停

setPaused(true); //设置暂停

break;

case GAME_A_PRESSED: //按下Game_A键时

GameState=4; //设置游戏状态为退出

break;

case GAME_B_PRESSED: //按下Game_B键时

sprBoy.setFrame(2);

break;

default:

update(); //更新数据

break;

}

}

break;

case 3: //游戏失败的处理

break;

case 4: //游戏退出时的处理

stop(); //停止运行

break;

}

}

/* 更新数据*/

private void update(){

//敌人的运动

enemyX+=enemySpeedX; //计算坐标

if(enemyX>=ScreenWidth+sprEnemy.getWidth() && enemySpeedX>0) { enemySpeedX=-enemySpeedX; //改变速度方向

sprEnemy.setTransform(Sprite.TRANS_NONE);

}

if(enemyX+sprEnemy.getWidth()<=0 && enemySpeedX<0 ) {

enemySpeedX=-enemySpeedX; //改变速度方向

sprEnemy.setTransform(Sprite.TRANS_MIRROR);

}

sprEnemy.setRefPixelPosition(enemyX, enemyY); //设置敌人位置

sprEnemy.nextFrame(); //精灵动画移到后一帧

//检测玩家角色是否与敌人相碰撞,如果是,则后退

if( sprBoy.collidesWith(sprEnemy,false)){

//通过敌人的速度方向来检查是从哪个方向撞上的,并作相应动作

if(sprEnemy.getX()>sprBoy.getX()) {

sprBoy.move(-sprBoy.getSpeed(), 0); //移动玩家角色精灵

sprEnemy.setTransform(Sprite.TRANS_MIRROR); //设置敌人精灵方向

enemyX+=sprEnemy.getWidth(); //重设敌人精灵坐标

enemySpeedX=2; //设置敌人精灵速度方向

}

else{

sprBoy.move(sprBoy.getSpeed(), 0); //移动玩家角色精灵

sprEnemy.setTransform(Sprite.TRANS_NONE); //设置敌人精灵方向

enemyX-=sprEnemy.getWidth(); //重设敌人精灵坐标

enemySpeedX=-2; //设置敌人精灵速度方向

}

sprEnemy.setRefPixelPosition(enemyX, enemyY); //重设敌人位置

isColl=true; //设置碰撞标志

CollTextTime=120; //设置碰撞文本显示时间

}

else if(CollTextTime<=0){

isColl=false;

}

CollTextTime--; //设置碰撞文本显示时间递减

//根据按键状态计算玩家角色精灵与贴图层数据

switch(KeyState){

case LEFT_PRESSED: //按下Left键时

//检查原来是否为左方向的精灵帧序列,如果不是则设置为左方向精灵帧序列

if(sprBoy.getDir()!=MySprite.LEFT){

sprBoy.setFrameSequence(LSequ); //设置左方向精灵序列

sprBoy.setTransform(MySprite.TRANS_NONE); //设置为不变换

}

if(sprBoy.move(MySprite.LEFT)){ //向左移动,如果到屏幕边缘则移动贴图层

tbg.move(sprBoy.getSpeed(), 0);

}

break;

case RIGHT_PRESSED: //按下Right键时

//检查原来是否为右方向的精灵帧序列,如果不是则设置为右方向精灵帧序列

if(sprBoy.getDir()!=MySprite.RIGHT){

sprBoy.setFrameSequence(LSequ); //设置左方向精灵帧序列

sprBoy.setTransform(MySprite.TRANS_MIRROR); //设置为镜像变换}

//向右移动,如果到屏幕边缘则移动贴图层

if(sprBoy.move(MySprite.RIGHT)){

tbg.move(-sprBoy.getSpeed(), 0);

}

break;

case UP_PRESSED: //按下Up键时

//检查原来是否为上方向的精灵帧序列,如果不是则设置为上方向精灵帧序列

if(sprBoy.getDir()!=MySprite.UP){

sprBoy.setFrameSequence(USequ);

}

//向上移动,如果到屏幕边缘则移动贴图层

if(sprBoy.move(MySprite. UP)){

tbg.move(0,sprBoy.getSpeed() );

}

break;

case DOWN_PRESSED: //按下Right键时

//检查原来是否为下方向的精灵帧序列,如果不是则设置为下方向精灵帧序列

if(sprBoy.getDir()!=MySprite.DOWN){

sprBoy.setFrameSequence(DSequ);

}

//向下移动,如果到屏幕边缘则移动贴图层

if( sprBoy.move(MySprite.DOWN)){

tbg.move(0,-sprBoy.getSpeed() );

}

break;

}

tbg.update(); //更新动态贴图

}

}

************MySprite.java

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.Sprite;

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/**

*

* @author Administrator

*/

public class MySprite extends Sprite{

private int speed; //速度

private int dir; //方向

private int RoundX; //限制矩形范围的左上角坐标

private int RoundY;

private int RoundWidth; //限制矩形范围宽度

private int RoundHeight; //限制矩形范围高度

//定义各方向静态常量

public final static int LEFT=1; //左

public final static int RIGHT=2; //右

public final static int UP=3; //上

public final static int DOWN=4; //下

/* 使用Image对象,帧宽度w和帧高度h构造精灵*/

public MySprite(Image img,int w,int h){

super(img,w,h); //使用基类(即Sprite)构造方法创建精灵

this.speed=1; //设置默认速度

setDir(DOWN); //设置默认方向

setRoundRect(0,0,240,309); //设置缺省时的限制矩形}

/* 使用Image对象,帧宽度w、帧高度h和速度speed构造精灵*/ public MySprite(Image img,int w,int h,int speed){

super(img,w,h);

this.speed=speed;

setDir(DOWN); //设置默认方向

}

/* 使用Image对象,帧宽度、帧高度,速度,限制范围矩形左上角的X坐标、Y坐标、高度和宽度来构造精灵*/

public MySprite(Image img,int w,int h,int speed,int rx,int ry,int rw,int rh){

super(img,w,h);

this.speed=speed; //设置速度

setDir(DOWN); //设置默认方向

setRoundRect(rx,ry,rw,rh); //设置限制范围矩形

}

/* 设置限制范围矩形*/

public void setRoundRect(int rx,int ry,int rw,int rh){

setRoundX(rx);

setRoundY(ry);

setRoundWidth(rw);

setRoundHeight(rh);

}

/* 向dir方向移动精灵,并返回是否已到达范围矩形边框*/

public boolean move(int dir){

boolean isRound;

isRound=false;

int moveX=0;

int moveY=0;

this.setDir(dir); //设置方向

switch(dir){ //通过方向,按设置的速度距离移动精灵

case LEFT:

moveX=-getSpeed();

break;

case RIGHT:

moveX=getSpeed();

break;

case UP:

moveY=-getSpeed();

break;

case DOWN:

moveY=getSpeed();

break;

}

//下面语句用于将移动点在范围矩形内

if( getX()+moveX

moveX=getRoundX()-getX();

isRound=true;

}

else if( getX()+moveX+getWidth()>getRoundX()+getRoundWidth()){ moveX=getRoundX()+getRoundWidth()-getX()-getWidth();

isRound=true;

}

if( getY()+moveY

moveY=getRoundY()-getY();

isRound=true;

}

else if( getY()+moveY+getHeight()>getRoundY()+getRoundHeight()){ moveY=getRoundY()+getRoundHeight()-getY()-getHeight();

isRound=true;

}

super.nextFrame();

super.move(moveX, moveY); //调用基类方法移动精灵

return isRound;

}

/* 获取速度*/

public int getSpeed() {

return speed;

}

/* 设置速度*/

public void setSpeed(int speed) {

this.speed = speed;

}

/* 获取方向*/

public int getDir() {

return dir;

}

/* 设置方向*/

public void setDir(int dir) {

this.dir = dir;

}

/* 获取限制框X坐标*/

public int getRoundX() {

return RoundX;

}

/* 设置限制框X坐标*/

public void setRoundX(int RoundX) {

this.RoundX = RoundX;

}

/* 获取限制框Y坐标*/

public int getRoundY() {

return RoundY;

}

/* 设置限制框Y坐标*/

public void setRoundY(int RoundY) {

this.RoundY = RoundY;

}

/* 获取限制框宽度*/

public int getRoundWidth() {

return RoundWidth;

}

/* 设置限制框宽度*/

public void setRoundWidth(int RoundWidth) { this.RoundWidth = RoundWidth;

}

/* 获取限制框高度*/

public int getRoundHeight() {

return RoundHeight;

}

/* 设置限制框高度*/

public void setRoundHeight(int RoundHeight) { this.RoundHeight = RoundHeight;

}

}

***************TiledBg.java

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;

import java.io.IOException;

/**

* @author Administrator

*/

public class TiledBg {

private Image tiled; //贴图源图

private TiledLayer tiledbg; //定义贴图层

int AnimSeq[]={14,21,28}; //动态贴图序列

int AnimTiled; //动态贴图号

int AnimIndex; //记录当前动态贴图序号

int AnimTimes; //用于计算动态贴图时间间隔

public TiledBg(){

try {

// write pre-init user code here

tiled = Image.createImage("/tiled.png"); //获取源图

} catch (IOException ex) {

ex.printStackTrace();

}

AnimIndex=0; //初始化

AnimTimes=0;

}

/* 获取贴图源图像*/

public Image getTiled() {

return this.tiled;

}

/* 更新动态贴图*/

public void update(){

//检测动态贴图时间间隔,每5次循环更新一次动态贴图

if(AnimTimes%5==0){

AnimIndex++; //动态贴图序号递增

if(AnimIndex>=AnimSeq.length){ //检查动态贴图序号是否超出下标范围AnimIndex=0; //重置动态贴图序号

}

//设置动态贴图

tiledbg.setAnimatedTile(AnimTiled, AnimSeq[AnimIndex]);

}

AnimTimes++; //动态贴图时间间隔递增

}

/* 创建并返回动态贴图*/

public TiledLayer getTiledbg() {

//检查贴图层是否已创建,如未创建则先创建

if (tiledbg == null) {

tiledbg = new TiledLayer(20, 10, tiled, 32, 32); //创建贴图层

AnimTiled= tiledbg.createAnimatedTile(AnimSeq [0]);

//定义贴图序号数组

int[][] tiles = {

{ 3, 3, 2, 2, 2, 2, 2, 15, 7, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2 },

{ 2, 2, 2, 2, 2, 4, 2, 15, 2, 2, 2, 2, 2, 6, 2, 2, AnimTiled, 2, 3, 2 },

{ 7, 2, 2, 26, 2, 2, 2, 17, 10, 9, 10, 9, 11, 2, 2, 2, 13, 2, 3, 7 },

{ 9, 9, 9, 9, 11, 19, 2, 2, 2, 2, 2, 2, 15, 2, 12, 2, 8, 9, 9, 9 },

{ 2, 2, 2, AnimTiled, 15, 2, 2, 2, 2, 7, 2, 20, 22, 2, 2, 2, 15, 2, 3, 2 },

{ 4, 2, 2, 2, 17, 10, 9, 10, 9, 24, 10, 9, 18, 2, 2, 2, 15, 2, 3, 4 },

{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 26, 19, 19, 2, 15, 2, 3, 2 },

{ 2, 2, 13, 2, 2, 2, 2, 20, 2, 15, AnimTiled, 2, 2, 19, 19, 3, 15, 3, 3, 2 },

{ 2, 2, 2, 2, 2, 8, 10, 9, 10, 16, 10, 9, 10, 9, 10, 9, 18, 3, 3, 2 },

{ 4, 2, 2, 27, 7, 15, 2, 2, 2, 7, 2, AnimTiled, 2, 2, 4, 2, 2, 6, 3, 2 } };

//通过双重循环设置贴图

for (int row = 0; row < 10; row++) {

for (int col = 0; col < 20; col++) {

tiledbg.setCell(col, row, tiles[row][col]); //设置贴图

}

}

}

return tiledbg; //返回贴图

}

/* 移动贴图层*/

public void move(int x,int y){

//检查是否到达贴图层左边缘,如果是,则设置为紧贴左边缘

if(tiledbg.getX()>=0 && x>0){

tiledbg.setPosition(0, tiledbg.getY());

return;

}

//检查是否到达贴图层右边缘,如果是,则设置为紧贴右边缘

if(tiledbg.getX()<=GameWorld.ScreenWidth-tiledbg.getWidth() && x<0){

tiledbg.setPosition(GameWorld.ScreenWidth-tiledbg.getWidth(), tiledbg.getY());

return;

}

//检查是否到达贴图层上边缘,如果是,则设置为紧贴上边缘

if(tiledbg.getY()>=0 && y>0){

tiledbg.setPosition(tiledbg.getX(), 0);

return;

}

//检查是否到达贴图层下边缘,如果是,则设置为紧贴下边缘

if( tiledbg.getY()<=GameWorld.ScreenHeight-tiledbg.getHeight() && y<0){

tiledbg.setPosition(tiledbg.getX(), GameWorld.ScreenHeight-tiledbg.getHeight());

return;

}

tiledbg.move(x,y); //移动贴图层

}

}

比较适合开发手机游戏的编程语言介绍

在手机游戏流行的当下,各类手游层出不穷,占据中国流量的半壁江山,各个游戏公司在手游方面的竞争也越发激烈,急缺游戏开发人员,对开发人员的需求也越来越高。如果你也想自己制作手游,做起游戏开发的工作,那么学习Java将会是你不二的选择! Java是目前中国手机软件开发行业的主流语言之一,也是学习的人数最多的,介于目前中国流行的基本都是android系统,所以手机游戏的开发也需要在android的平台下开发。你可以朝这方面学习,不论你是自学还是找培训班,学成后是有很大一片前景的。 学习手游制作的大致方向 Android学习方向的技能: 1、需要javaLogic 也就是java的基本逻辑,牢固的Java基础 2、扎实的Linux基础知识 3、数据库基础知识 4、网络协议

游戏方面: 1、精美的图片、华丽的效果自然离不开flash 图片处理之类的技术 2、搞懂游戏算法,比如你制作一款贪吃蛇的手游,要知道怎么让蛇前进,怎么才算吃了食物变大。 3、进修java与游戏设计,必要的话学点3D设计或美术设计。 设计模式: 1、在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。设计模式种类之多,全部掌握是不 现实的,必须首先掌握面向对象的基础设计原则。

2、掌握面向对象的基础设计原则的书籍有: ①《Effective Java》 ②《敏捷软件开发:原则、模式与实践》 服务器端开发知识: 1、Java EE 2、PHP,这是另外一门语言,但在我们学习Java的同时学习,有点得不偿失,是否学习看你自己) 3、.NET与JavaEE差不多,只不过需要额外掌握C#,比较麻烦。 4、ruby on rails,简洁、优雅,几行代码就可实现复杂的功能,不过要有Ruby 语言知识基础。 这些都是Android应用程序需的服务器端支持,掌握这类只是还是有必要的,只不过关于服务器端技术的种类实在太多,这边就列出四个,不过既然你是学的Java,还是建议学习JavaEE的知识。

游戏测试用例编写方法浅谈87

游戏软件功能测试——测试用例的编写方法浅谈 一、游戏软件与通用软件的区别 a)通用软件的需求明确,游戏软件需求理想化 i.通用软件中用户每步操作的预期结果都是明确且有规范可参考的,而网游中并 不是所有的需求都有一个明确的预期结果,拿技能平衡性来说,我们所谓的平 衡也只是相对的平衡,而非绝对的平衡。没有什么明确的参考参数。只能根据 以往游戏的经验获得一个感知的结果。 ii.网络游戏中的某些功能是有预期结果可参考的。例如组队、交易,而另外一些带有策划创意的功能,却是根据策划个人的理解,来确定其预期结果的。人的 思考力都是有限的,所以不能保证在他的创意中会考虑到各种各样复杂的细 节。也不能够保证这个创意就可以完全被用户所接受。 当你作为游戏测试人员时,很多时候你需要做的不仅仅是验证功能。也需要帮助开发者和用户找到一个互相容忍的平衡点。游戏软件的测试员带有对策划需求的怀疑,力求通过自己的努力在玩家和开发者之间将可能产生的矛盾减小。 b)通用软件开发过程中需求变更少,游戏软件开发过程中需求便更快 i.通用软件的使用人群和软件的功能针对性,决定软件从开始制作就很少再有新 的需求变更。而游戏软件,为了满足玩家对游戏的认可度,策划需要不断的揣 摩玩家的喜好,进行游戏功能的改进。加之网游制作本身就是一个庞大复杂的 工程,开发者不可能做到在开发的前期,就对游戏架构及扩展性做出最好的评 估。所以导致为了满足用户的需求而不断的进行一些基础架构的修改,基础架 构的修改必然导致某些功能的颠覆。所以就出现了,游戏开发过程中的一个恶 性循环,当基础架构修改到满意了,玩家的需求又有了新的变化,随之而来的 又要进行新的调整,再进行新的修改。最终导致了游戏软件的开发周期不断加 长。任何一个有经验的团队,对于每一个影响基础的改动都应该做出正确的评 估。 二、网游有哪些测试内容 a)性能 i.客户端性能 ii.服务器端性能 1.服务器 2.数据库 iii.网络 b)功能 i.从运行完game.exe打开游戏界面后可进行的各种操作、玩法 ii.界面 iii.音乐 c)自动化 i.测试工作组织实施中需要的工具、软件、平台的开发 ii.自动化的回归测试作用:游戏中基础的、变动不大的、出错率高的、可进行checklist重复测试的功能、性能等自动化是一个好方法 iii.任何时候自动化都取代不了人脑,它只是将一些重复性的劳动从我们测试人员身上去掉,让我们有更多的时间做更有意义的事情,如果你觉得你做一件事情 是重复的,且有规律可行的,不防考虑自动化 三、游戏中针对功能性测试测试用例编写浅谈

Android游戏开发(快速入门必备)

Android游戏开发之旅一长按Button原理 今天Android123开始新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有一些游戏实现惯用方法,比如地图编辑器,在Android OpenGL如何使用MD2文件,个部分讲述下Android游戏开发的过程最终实现一个比较完整的游戏引擎。相信大家都清楚Android Market下载量比较好的都是游戏,未来手机网游的发展相信Android使用的Java在这方面有比iPhone有更低的入门门槛。 对于很多游戏使用屏幕控制一般需要考虑长按事件,比如在动作类的游戏中需要长按发射武器,结合Android Button模型,我们实现一个带图片的Button的长按,为了更清晰的显示原理,Android开发网这里使用ImageButton作为基类 public class RepeatingImageButton extends ImageButton { private long mStartTime; //记录长按开始 private int mRepeatCount; //重复次数计数 private RepeatListener mListener; private long mInterval = 500; //Timer触发间隔,即每0.5秒算一次按下 public RepeatingImageButton(Context context) { this(context, null); } public RepeatingImageButton(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.imageButtonStyle); } public RepeatingImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setFocusable(true); //允许获得焦点 setLongClickable(true); //启用长按事件 } public void setRepeatListener(RepeatListener l, long interval) { //实现重复按下事件listener mListener = l; mInterval = interval; } @Override public boolean performLongClick() { mStartTime = SystemClock.elapsedRealtime(); mRepeatCount = 0;

手机游戏开发流程

J2ME游戏开发流程 一款J2ME游戏的开发流程大致如下: 以下为文字描述: 1、立项 在制作游戏之前,策划首先要确定一点:到底想要制作一个什么样的游戏?而要制作一个游戏并不是闭门造车,一个策划说了就算数的简单事情。制作一款游戏受到多方面的限制:市场:即将做的游戏是不是具备市场潜力?在市场上推出以后会不会被大家所接受?是

否能够取得良好的市场回报? 技术:即将做的游戏从程序和美术上是不是完全能够实现?如果不能实现,是不是能够有折中的办法? 规模:以现有的资源是否能很好的协调并完成即将要做的游戏?是否需要另外增加人员或设备? 周期:游戏的开发周期是否长短合适?能否在开发结束时正好赶上游戏的销售旺季? 产品:即将做的游戏在其同类产品中是否有新颖的设计?是否能有吸引玩家的地方?如果在游戏设计上达不到革新,是否能够在美术及程序方面加以补足?如果同类型的游戏市场上已经有了很多,那么即将做的游戏的卖点在哪里? 以上各个问题都是要经过开发组全体成员反复进行讨论才能够确定下来的,大家一起集思广益,共同探讨一个可行的方案。如果对上述全部问题都能够有肯定的答案的话,那么这个项目基本是可行的。但是即便项目获得了通过,在进行过程中也可能会有种种不可预知的因素导致意外情况的发生,所以项目能够成立,只是游戏制作的刚开始。 在项目确立了以后,下一步要进行的就是进行游戏的大纲策划工作。 2、大纲策划的进行 游戏大纲关系到游戏的整体面貌,当大纲策划案定稿以后,没有特别特殊的情况,是不允许进行更改的。程序和美术工作人员将按照策划所构思的游戏形式来架构整个游戏,因此,在制定策划案时一定要做到慎重和尽量考虑成熟。 3、游戏的正式制作 当游戏大纲策划案完成并讨论通过后,游戏就由三方面同时开始进行制作了。在这一阶段,策划的主要任务是在大纲的基础上对游戏的所有细节进行完善,将游戏大纲逐步填充为完整的游戏策划案。根据不同的游戏种类,所要进行细化的部分也不尽相同。 在正式制作的过程中,策划、程序、美工人员进行及时和经常性的交流,了解工作进展以及是否有难以克服的困难,并且根据现实情况有目的的变更工作计划或设计思想。三方面的配合在游戏正式制作过程中是最重要的。 4、配音、配乐 在程序和美工进行的差不多要结束的时候,就要进行配音和配乐的工作了。虽然音乐和音效是游戏的重要组成部分,能够起到很好的烘托游戏气氛的作用,但是限于J2ME游戏的开发成本和设置的处理能力,这部份已经被弱化到可有可无的地步了。但仍应选择跟游戏风格能很好配合的音乐当作游戏背景音乐,这个工作交给策划比较合适。 5、检测、调试 游戏刚制作完成,肯定在程序上会有很多的错误,严重情况下会导致游戏完全没有办法进行下去。同样,策划的设计也会有不完善的地方,主要在游戏的参数部分。参数部分的不合理,会导致影响游戏的可玩性。此时测试人员需检测程序上的漏洞和通过试玩,调整游戏的各个部分参数使之基本平衡。

Java游戏开发项目及游戏源码

J a v a程序设计项目 1.项目背景 为了提高学生动手能力,增加学生实践的机会,某软件公司实习单位要求学生5-6人组成开发团队进行Java程序项目开发,参考自己团队的实力与客户的要求,使用Java语言开发某一项目,此项目可以是应用程序,也可以是游戏开发等,项目名称自拟。 2.硬件资源和软件资源 (1)每组配备联网PC台,智能手机一部(带有手机数据 线)HP打印机一台。 (2)eclipse-SDK-3.6.1-win32软件开发程序(含有eclipseme插件)、SUNWTK 无线开发包或Symbian_3_SDK_v0_9等手机开发包。 3.实验室功能需求 (1)实现学生机和教师机器(服务器)进行通信,相互共享资源。 (2)教师机器(服务器)上安装一台打印机,实现学生机可以共享打印。 (3)实现教师机器(服务器)连接和访问Internet。 (4)实现每一台学生机器访问Internet。 (5)要求为每一项目组学生机和教师机器分配一个标识,即学生机器的机器名为ST1~ST10,教师机器名为Server。 4.项目实施要求 (1)要求各项目小组拿出详细的某某Java程序设计项目报告书(具体项目规划书格式参考附表一),关键步骤要有相应的截图。 (2)要求项目组长向各小组讲解与演示自己小组的项目成果,组长小组成员要熟练的解释与分析自己负责编写的Java代码或项目分工成果。 (3)最后提交用小组命名的文件夹,其中包括开发所用的所有资料与项目成果。 附表一: 雷霆战机项目报告书 一、项目概述 本项目为一个Java游戏,是一个基于J2ME平台的飞机射击类游戏。 二、项目开发团队 三、所用Java相关知识点

手机游戏测试用例

统一测试标准 1 安装和运行 (4)

1.2 启动时间过长 (5) 2 内存使用 (6) 2.1 运行时的内存状况 (6) 3 链接 (7) 3.1 无效的网络访问设置 (7) 3.2 发送/接受资料 (8) 3.3 网络延迟或无法链接 (9) 3.4 网络链接—飞行模式 (10) 4 处理事件 (11) 4.1 自动启动信息传送 (11) 4.2 消息队列 (12) 4.3 定时事件到时 (13) 4.4 睡眠模式下定时事件到时 (14) 4.5 关机模式下定时事件到时 (15) 5 发送消息和打电话 (16) 5.1发送 (16) 5.2接收 (17) 5.3 来电 (18) 6 外部影响 (19) 6.1插入存储卡 (19) 6.2 插入和移出存储卡 (20) 6.3 存储卡屏幕状态 (21) 7 用户界面 (22) 7.1 可读性 (22) 7.2 读出时间 (23) 7.3 屏幕重绘 (24) 7.4 一致性 (25) 7.5 按键布置的方便使用 (26) 7.6 应用程序的速度 (27) 7.7 出错信息 (28) 7.8 工作进展 (29) 7.9 运行中的操作 (30) 7.10 多种显示格式的处理 (31) 7.11 不同的屏幕尺寸 (32) 7.12 不同输入格式的处理 (33) 7.13 加速器/运动传感器响应 (34) 7.14 拼写错误 (35) 7.15 专业文本错误 (36) 8 语言 (37) 8.1 正确操作 (37) 8.2 手动选择 (38) 8.3 支持的格式 (39) 8.4 国际文字 (40)

9.1 从主菜单暂停/恢复 (41) 9.2 运行时的暂停 (42) 9.3 恢复 (43) 9.4 对终端系统特征的影响 (44) 9.5 资源共享—资料库 (46) 10 媒体 (47) 10.1 应用程序之静音功能 (47) 10.2 设置状态的通俗性 (48) 10.3 设置不损坏应用程序 (49) 10.4 设置组合 (50) 10.5 保存设置 (51) 10.6 特定功能 (52) 11 菜单 (53) 11.1 “帮助”和“关于” (53) 11.2 有效操作 (54) 12 功能 (55) 12.1 功能健全检查 (55) 12.2 应用程序的隐藏特性 (56) 13 按键 (57) 13.1 展开菜单 (57) 13.2 选择键 (58) 13.3 文本编辑框的滚动 (59) 13.4 暂停 (60) 13.5 同时按键 (61) 13.6 多个按键 (62) 14 设备特殊检查 (63) 14.1 设备关闭 (63) 14.2 设备开启 (64) 15 稳定性 (65) 15.1 应用程序稳定性 (65) 15.2 强制关机后应用程序的运作。 (66) 16 资料处理 (67) 16.1 保存游戏状态 (67) 16.2 删除资料 (68) 16.3 修改记录 (69) 17 安全性 (70) 17.1 加密 (70) 17.2 密码 (71)

手机游戏设计案例分析

设计心理学:好玩的iPhone游戏怎么设计? 心理导读:游戏设计心理学中,涉及到肌肉记忆、长期记忆、短期记忆、识别与回忆等概念。快来看看一款有趣好玩的iphone游戏是怎么设计出来的! 几乎所有iPhone用户都曾使用过游戏应用,这是一个“全民游戏”的时代。iPhone应用程序中,游戏不但在下载量方面首屈一指,在设计质量上也不乏可圈可点之处。本人从大量的游戏应用中大浪淘沙,试图从中汲取营养,探索好的设计策略为我所用。 基本思路是: 步骤一,提出小问题或小测试,请跟随我思考一下; 步骤二,引出其中的深层原理; 步骤三,此原理在iPhone游戏中的体现; 步骤四,给我们哪些启示? 通过以上步骤,简单地介绍肌肉记忆、长期记忆、短期记忆、识别与回忆、事物预设的特点,以及对用户界面设计的影响。文章篇幅和个人能力有限,对每一个原理不能作过多的挖掘,只愿可以抛砖引玉启发大家一些思考。 一、肌肉记忆 步骤一,请思考: 一天早上,你起床起晚了,十万火急地驱车去公司。来到叉路口,一个路人告诉你:这有条近道。这时候你面临着两个选择:一条道路是自己每天都走的路,非常熟悉;另一条道路你从来没有走过,有很多的不确定因素。此刻,你会选择哪一条道路?

大部分人会选择自己熟悉的那条路。 这条路自己太熟悉了,“闭上眼都能走回家”,脑子几乎不用思考,路即使远一点也不会觉得慢。相比之下,路人为你指的近路,可能还会有你不知所措的岔路口,一旦走错,近路就成了耽误时间的远路。 步骤二,其中的原理:肌肉记忆 人体执行某操作时的效率及准确性,很大程度上取决于是否接近该人熟悉的操作路径。如果操作被重复多次,肌肉就会形成条件反射,生成记忆效应。大脑皮层还没有做出决定,脑干和脊髓神经已经领先一步进行指挥了。如果操作处于新接触阶段,不确定性较多,此时做出决策的是大脑皮层。大脑皮层做出决策所花费的时间要比脑干和脊髓神经做出反应的时间长。 举一个例子:新手学车的时候,多用大脑皮层,执行挂档、倒桩等操作慢而且不连贯,容易出错。驾车老手执行刹车、变换档位更多的是潜意识操作,速度更快、准确性更高,是由脑干和脊椎神经指挥的。 从速度、准确性方面讲,用户熟悉的操作路径可以使操作行为更从容。操作路径如果过于新颖或者很难摸索,即使操作步骤缩短,也不见得会比用户熟知的路径更快更好。 步骤三,在手机游戏中的体现:

手机游戏测试要点

一、有可能造成手机游戏出现bug的一些中断: 1.手机来电显示 2.短信,彩信,手机增值业务 3.手机充电中,手机在充电时拔出充电器 4.手机低电量,手机没电时的提示 5.手机闹钟 6.手机的背景音乐与手机铃声 7.手机的背光与手机游戏 8.插上耳机与拔出耳机 9.蓝牙下载 注意事项: 注意不同机型的不同型号间的差别:如手机内存(堆内存,共享存储内存,支持的最大jar的size),手机操作系统,手机刷新频率,手机画面,手机支持的编码格式,支持的屏幕尺寸,按键类型,色彩的支持。 二、游戏系统测试流程 游戏测试流程包括:游戏程序详细设计文档、编写测试计划、测试用例执行、测试评审、评审测试工具、提交Bug报告、测试总结审核、返回开发修改。 1、详细步骤 (1)根据游戏程序详细设计文档,测试组长制定测试计划。 (2)审核制定的测试计划。 (3)根据测试计划设计,设计测试用例,编写测试用例。 (4)相关开发人员和测试人员审核测试用例。 (5)开发人员提供测试版本,以及相应版本所作修改的文档描述。 (6)测试人员根据测试用例和测试工具执行测试。 (7)记录测试结果,提交BUG报告。 (8)测试组长审核后,将BUG反馈给开发人员进行修改。 (9)开发人员修改后,提供新的测试版本,测试人员重新测试。 三、游戏测试工作及数据统计 在产品开发过程中,测试人员应该做到如下几个方面: 1.根据新项目的计划及该研发游戏产品的功能写出大概的Test Case(一般为简单的功能测试用例)出来以便后期的测试。 2.在开始设计的初期,测试人员应该从客户的角度提出一些好的建议(该建议由PM来决定是否作为新功能添加到新产品中)(A-Test)。 3.当产品初具模型时,测试人员应该根据RD软件工程师的要求做必要的功能性和稳定性的测试(当然此时也可以提出自己新的见解,此见解由PM根据产品的性价比来决定是否作相应的更改或添加)(B-Test)。 4.当产品已经基本上实现其预期的功能时,测试人员应该做一次Full Test(其中包括:基本功能测试,大量测试,压力测试,边界测试等等)来找出Bug (C-Test)。 5.对于找出的Bug,测试人员应该每天向Project leader汇报当天找到的Bug,

手机游戏开发的5个阶段

目前,开发手机游戏的厂商如同雨后春笋般的冒了出来,有大有小,甚至几个朋友在一起就能攒出一个小公司,进行开发。每个公司,也都有“具备自己特色”的开发过程,好一些的,直接套用传统的软件工程的理论,差一些的,也只能闷头苦干了。我在这里想谈的是对于小团队开发游戏的一种高效的开发方法和阶段划分。 游戏开发的阶段划分,我认为可以划分为5个阶段,叙述如下: 第一阶段:提案 这一阶段要做的主要工作是明确要做什么样的游戏,游戏的名称是什么,采用何种表现方式(2D,2.5D,3D等),游戏的卖点(特色)何在,实现在什么样的平台上,人员如何搭配。 无论是公司还是小团队做游戏的最终目的都是为了盈利,所以做为游戏设计者就应该针对市场来设计游戏,而不能针对个人的喜好而设计游戏。能被大多数人接受的游戏才是一款好游戏,才能更好的盈利。所以在决定做什么游戏之前要先确定主要针对什么样的玩家来做这个游戏,是男孩还是女孩,是老少皆宜还是20多岁的年轻人,这个目标确立了之后才能更好的挖掘这类玩家的心理,使游戏的设计更充分的满足这类玩家心理和精神上的需求,这样游戏才能被更多的玩家接受,团队才能更好的盈利。 根据已选择针对的玩家群体,就该选择适合这个玩家群体的游戏题材,一个游戏题材的选取也非常重要,一个好的题材有助于设计者表现游戏的特色,使玩家很快的了解游戏背景,游戏能够很容易上手,更好的被玩家接受。有三大类游戏题材比较容易被玩家接受:1发布地区人人皆知的历史或宗教;2与常识相关的;3与某有名的故事或电影相关的。总之,在所选玩家群体大部分玩家都熟悉的题材上做游戏会更容易被玩加接受。 然后就是有关游戏概念的设计,需要确定的是游戏的类型(例如:RPG、策略、格斗等),游戏的表现方式(例如:2D、2.5D或3D),在什么平台上实现以及游戏的特色。这些问题都要根据团队的技术实力、市场需求的紧迫程度、开发成本等各方面因素来决定。在确定了游戏的类型、表现方式和实现平台之后,就要在这三个条件的限制之下尽可能的发挥策划的创造力,在游戏特色上尽可能的下功夫,并写出两份文档:一份游戏策划案的提纲和一份立项建议书。在策划案提纲中要让技术人员能够看明白游戏需要具有什么样的功能。在立项建议书中要写清游戏针对的人群,游戏类型,游戏表现方式,游戏实现平台,游戏卖点,实现所需的大致时间,以及人员安排。 完后,招集市场、技术、美工等人员进行集体评审,根据这份立项建议书,客观的评价技术实力,开发周期,市场效应等问题,最终决定是否要做这个游戏。 这个阶段的工作目标就是确定将要做的是一个能被市场广泛接受的游戏并确保游戏的可行性。一个不能被市场接受的游戏或者根本无法实现的游戏设计在这个阶段都会被否定,或做设计上的修改或放弃做这个游戏。尽可能的减少项目实施以后所要承担的风险。 第二阶段:设计 游戏的设计过程中需要策划、程序、美术、市场共同协作完成,一个游戏做得好坏,这个阶段起到了决定性作用,下面将对这四种职责的工作内容分别进

手机游戏简单开发

手机游戏开发和应用分析 根据最新出炉的《2014年中国游戏产业报告》显示,2014年移动游戏收入达274.9亿元,首次超过网页游戏,并且比2013年增长了两倍多。业界预测,今年国内手游规模可达380亿-400亿元 一款手机游戏的诞生 如今的手机,你可以把它看着是一台功能全面的网络计算机。虽然它在屏幕大小、硬件配置、使用方式上与传统计算机有着很大差距,但还是有许多共通之处的。以手机游戏而言,它确实有自己的特殊之处,但是游戏的整个开发流程,与传统游戏开发则有异曲同工之妙。 1.设计文档,勾画游戏蓝图 典型的手机游戏开发过程可分为策划和开发两大阶段。策划阶段包括开始的游戏创意、立项到最终形成一个完整可行的设计文档。 每个游戏项目的产生,最先都是源自某个创意。大多数手机游戏的创意,来自于传统的游戏机,如贪吃蛇、俄罗斯方块、泡泥鳅龙、马里奥、波斯王子、极品飞车等。所有创意,最终要形成一个确定的,有可行性的设计文档,它就是游戏后续开发的一张蓝图,一个向导。 手机游戏的许多创意来自传统游戏机 一个典型的手机游戏策划案需要包括:游戏名称,游戏类型,运行环境(包括对应机种和基本配置),发行区域(以哪些国家或地区为主),用户分析(针对人群的年龄、性别以及经济能力),游戏概述(游戏的时间背景、空间背景、视角、世界观、题材、情节、人物简述),游戏特征(描述此游戏不同于其他同类游戏的重要特征,也就是这个游戏的创意点),开发周期(包括前期策划、实际开发、测试等环节所需要的时间资源以及人员资源),市场前景分析等等。 实战:超级俄罗斯方块策划案(一) 超级俄罗斯方块是使用Java Me开发的基于Nokia S40、S60,索尼爱立信,摩托罗拉,三星,LG等主流手机平台的一款彩屏手机游戏。这是一个益智类单机版游戏,逻辑较简洁,容易上手,老少咸宜。 游戏名称:超级俄罗斯方块 游戏类型:益智类(PUZ) 游戏人数:1人 游戏内容: 在传统的俄罗斯方块规则之上增加了的方块之中随机出现的道具,同时引入数个可爱的动画人物根据玩家的控制情况进行一系列跑步、跳舞等动作。排行榜和随着游戏关卡而递增的难度丰富了游戏过程。 ……

怎样进行游戏测试

一款游戏出来,经常难免会出现一些硬性BUG,此BUG不光是指一些游戏中出现的死机或者脚本错误之类的直接导致游戏无法运行下去的BUG,还包括那些字体出格,错字,来电没声音之类的,虽然不能导致游戏无法运行,但是也会严重影响用户体验,进而导致游戏玩家流失。 还有一些影响用户体验的错误包括比如MIDI没有循环播放,音乐不合适(比如战斗中播放着悠扬的音乐)。一些对话的叙述方式有让很多玩家无法理解的地方(如果是明确的逻辑或者语法问题就算是BUG了。)还有一些比如字体没有完全居中,某些图片的边缘多了一些像素块(哪怕是一像素。=,=)还有就是一些整体风格的不和谐,比如一个中世纪时期的游戏在墙的旁边发现了中国龙的图案(某游戏……)等等很多。 下面回归正题,详解游戏测试: 有的人拿到手机游戏之后不知道怎么做测试,测试什么,什么地方需要测试。但其实你需要测试的都在你面前,就是这款游戏,里面所有的一切,你看到的听到的,一些的东西都需要你去测试。而具体下去呢?当然就是游戏的功能,比如,游戏可以移动,可以攻击,可以保存游戏,这些都是游戏里面的功能,当然就是必须要测试的。那么现在就从头开始讲述一下这个游戏的测试过程。 1. 选择之前的ICON,这个ICON是否是对应机型的,大小是否正确。(如果要是ICON很难看或者失真的话……那……) 2. 进入游戏之后所需要出现的LOGO以及LOGO出现的先后顺序。有时候甚至会遇到LOGO 大小不符合的情况。 3. 进入游戏封面。这时就要对出现的所有功能做测试了。所有的选单是否可以选择,选择之后是否有变化,位置是否正确,选择进入之后的内容是否和外面的标题相符。所设置的功能,比如声音开关之类的是否可以使用。 4. 开始游戏退出游戏是否能正常使用。 5. 继续游戏和保存游戏是否有问题,所保存的数据是否完全(保存之后是否有属性或者经验金钱变化,或者是位置是否改变)。 6. 关于和帮助里面所写的信息是否正确,是否有错字,是否有无法识别的字。 7. 声音设置是否可以正常使用,来电和切换以后声音是否能正常运行。 8. 进入游戏之后,开始实验所有游戏所有的功能,角色信息,数值是否正确,配备装备以后数值是否正确增加,所有的字体是否出格或者错字还有显示不完全,UI设计是否存在不合理的地方。道具栏里面物品是否可以使用它所具备的功能,比如使用物品和丢弃物品或者合成物品。物品说明是否正确,是否有错别字,是否居中,是否与实际属性符合。消耗物品是否在被使用后消耗数量。消耗物品使用光了以后是否会消失,或者显示数量为0。装备物品以后道具栏里面是否正常显示。任务菜单里面所显示的任务是否和已经进行的人物同步,是否存在早开始或者晚开启的情况。任务提示里面是否会出现错误,(比如方向性的错误。)所执行的任务是否和任务说明里面所说的相符合。如果接到任务有提示的话,是否每个任务都可以正常接到提示。游戏内部的声音设置和其他设置是否能正确执行。

手机网络游戏 服务器端配置 客户端发布与运行 配置源程序

手机网络游戏使用说明书 配置源程序 发布与运行 1.服务器端配置 (1)将光盘\TM\10\XiangQiServer文件夹拷贝到Eclipse的工作空间中。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间中”子节点,如图1.1所示。 图1.1 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间中”复选框,如图1.2所示。

图1.2 “导入”窗口 (5)单击【完成】按钮。 (7)参照第7章文档中的7.3.5节中的第5小节,为MyEclipse配置Tomcat服务器。 (8)单击工具栏的“”按钮,将弹出如图1.3所示的对话框。这个对话框是项目发布对话框,在对话框的“Project”下拉选择框中选择本系统的项目名称“XiangQiServer”,单击Add按钮进行项目发布的设置。 图1.3 MyEclipse项目发布对话框 (9)在弹出如图1.4所示的对话框中,选择“Server”下拉选择框中的“Tomcat 5”服务器,单击“完成”按钮程序将自动发布到服务器中。如果需要重新发布项目,可以单击Redeploy按钮。

图1.4 New Deployment (10)单击工具栏中按钮右侧的小箭头,在弹出的菜单中选择“Tomcat 5”/“Start”菜单项,如图1.5所示。这样可以在MyEclipse中启动Web服务器。 图1.5 服务器运行菜单 2.客户端发布与运行 (1)将光盘\TM\10\xiangqi文件夹拷贝到Eclipse的工作空间中。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间中”子节点,如图1.6所示。 图1.6 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间中”复选框,如图1.7所示。

手机游戏测试

手机游戏测试 手机游戏测试是软件测试的一部分,定义为在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。即是为了发现游戏错误而执行的过程。 国内游戏突围方向 网络游戏仅在中国游戏市场出现不过几年,到2009年1月,正式投入商业运营的游戏数目已超过100款,但众所周知,国外的游戏(主要是韩国的游戏)统治着国内大部分的市场。国内游戏软件想要突围而出,需要从两个方面入手,一方面是可玩性,由于中国有五千年的文明,传统文化是我们得天独厚的宝库;另一方面是游戏的质量,游戏测试作为游戏开发中保证质量的环节,在游戏设计与开发的过程中发挥着越来越重要的作用。 手机游戏测试内容 开始游戏 LOGO SCREEN必须要有,作为一个公司的品牌,这个是必须的。开始游戏之后,游戏主页面应该包含开始游戏(start)、继续游戏(continue)、设置(option)/音乐(music)、帮助(help)、关于(about)、退出游戏(exit),这些缺一不可。 功能性 1:功能性测试重点检测软件的安装与卸载、功能表现等 (1).在安装的时候造成死机,或者安装成功后不能游戏。 (2).还有一类问题,就是当测试机已经有一个此游戏的老版本,再覆盖安装新版本的时候,可能会出现一些奇怪的问题. 2:手机使用条件对游戏的影响,能否返回到中断的游戏画面继续游戏 (1)手机来电显示 (2)短信,彩信,手机增值业务 (3)手机充电中,手机在充电时拔出充电器 (4)手机低电量,手机没电时的提示 (5)手机闹钟 (6)手机的背景音乐与手机铃声 (7)手机的背光与手机游戏 (8)插上耳机与拔出耳机 (9)蓝牙下载 4:游戏设置中是否可以关闭声音、振动功能 5:游戏菜单中有无详细的操作帮助说明 (1).主要内容就是游戏世界观介绍,游戏按键说明。其中游戏按键说明必须与游戏中的按键完全相同。 6:棋牌益智类游戏能否积分上传 娱乐性 1游戏画面 ⑴游戏背景—游戏背景层次是否丰富鲜明,制作精细,发色数高,与前景用色对比明显 ⑵游戏前景—游戏场景中前景数量是否较多,造型丰富各有特点,细节刻画丰富,颜色丰富,与游戏内容相符 ⑶人物和物品造型—角色的肢体细节及物品造型是否丰富,比例正常,色彩艳丽 ⑷人物动作或物体运动状态—人物动作攻击、移动动作是否姿势丰富,流畅连贯制作精细,

手机游戏作品开发- 课程教学大纲

《手机游戏作品开发》课程教学大纲 一、课程基本信息 课程名称:手机游戏作品开发 课程编码: 课程性质:职业岗位限选 总学时:24+12 总学分:2 考核方式:考查 开课学期:7 适用专业:数字媒体技术专业 先修课程:计算机应用基础,Java 教研室: 执笔人: 审核人: 编写(修订)日期: 二、教学目标 本课程以案例教学为主线,循序渐进地介绍Android游戏开发的基本知识与技巧。 通过本课程的学习,熟悉Android的操作环境,掌握Android项目结构、项目结构、资源管理、生命周期、布局与基础组件、事件处理、多线程与消息处理、游戏视图、图形特效、游戏动画等基本知识,并能运用所学知识及所掌握技能实现简单游戏的构建及发布,为培养游戏制作专业人才打下坚实的基础。 三、教学内容及要求 第1部分 Andorid基础知识(理论2学时) 主要内容及要求: 了解Android的体系结构、特性及版本,掌握Android开发环境搭建,掌握Android的生命周期,掌握Android应用的国际化方法,了解Android的计量单位,学会Android项目的运行和调试,掌握Android项目资源的创建与使用,掌握消息提示以对话框的使用。 重点、难点: Android project项目结构,Android资源使用,消息提示以对话框 其它教学环节: 1.下载JDK,Eclipse,SDK,ADT,安装并配置Android开发环境 第2部分 Android游戏开发之视图界面(理论12学时) 主要内容及要求:

掌握5种布局管理器的使用,掌握游戏开发的常用组件,熟悉使用xml和Java代码混合控制ui界面,掌握Android的生命周期,掌握activity页面切换及传递数据的方法,掌握Android的事件处理机制 重点、难点: 基本程序单元――活动,Android事件处理 其它教学环节: 实验视图界面程序设计 1、实验类型:基础性、验证性 2、实验学时分配:6学时 3、每组人数:1 4、实验内容及要求:认真完成相关实验,掌握视图界面相关知识与技巧 第3部分 Android游戏开发之图形界面(理论10学时) 主要内容及要求: 掌握消息类Message的应用,掌握消息处理类Handler的应用,掌握子线程中更新ui 的方法,掌握View和SurfaceView视图框架,掌握Canvas画布和paint画笔的应用,掌握位图操作方法,掌握图像特效设置,掌握动画 重点、难点: 线程与消息处理,Android二维游戏开发视图 其它教学环节: 实验二维图形界面程序设计 1、实验类型:基础性、验证性 2、实验学时分配:6学时 3、每组人数:1 4、实验内容及要求:认真完成相关实验,掌握图形界面相关知识与技巧 四、教学策略与方法 教学策略:拟采用案例驱动策略组织教学活动 教学方法:拟采用教授法、演示法、训练和实践法等教学方法实施教学活动 五、教材与学习资料 教材:Android游戏开发案例教程,张辉主编,清华大学出版社,2015.6。 六、实施本教学大纲应注意的问题 该课程是一门实践性很强的应用学科,为达到教学目标,建议 1.授课地点为多媒体实验室,采用多媒体广播教学,理论联系实际,充分运用案例驱动教学,让学生有边看边学边实践的机会。 2.在教学时根据课程特点、学生情况、专业特点,实践课与教学进度同步进行。

游戏软件测试内容

游戏测试作为软件测试的一部分,它具备了软件测试所有的一切共同的特性:测试的目的是发现软件中存在的缺陷。测试都是需要测试人员按照产品行为描述来实施。产品行为描述可以是书面的规格说明书,需求文档,产品文件,或是用户手册,源代码,或是工作的可执行程序。 总而言之,测试就是发现问题并进行改进,从而提升软件产品的质量。游戏测试也具备了以上的所有特性,不过由于游戏的特殊性,所以游戏测试则主要分为两部分组成,一是传统的软件测试,二游戏本身的测试,由于游戏特别是网络游戏,它相当于网上的虚拟世界,是人类社会的另一种方式的体现,所以也包含了人类社会的一部分特性,同时它又是游戏所以还涉及到娱乐性,可玩性等独有特性,所以测试的面相当的广。称之为游戏世界测试,主要有以下几个特性: 游戏情节的测试:主要指游戏世界中的任务系统的组成。 游戏世界的平衡测试:主要表现在经济平衡,能力平衡(包含技能,属性等等),保证游戏世界竞争公平。 游戏文化的测试:比如整个游戏世界的风格,是中国文化主导,还是日韩风格等等,大到游戏整体,小到NPC(游戏世界人物)对话,比如一个书生,他的对话就必需斯文,不可以用江湖语言。 要了解如何测试游戏必需了解如何做游戏,了解它的开发过程,才能真正的测好游戏。游戏要成功,其基本的必要条件有三。分别为Vision(设计)、technology(技术)和Process(过程)。 游戏策划与测试计划:测试过程不可能在真空中进行。如果测试人员不了解游戏是由那几个部分组成的,那么执行测试就非常的困难,同时测试计划可以明确测试的目标,需要什么资源,进度的安排,通过测试计划,既可以让测试人员了解此次游戏测试中那些是测试重点,又可以与产品开发小组进行交流。在企业开发中,测试计划书来源于需求说明文档,同样在游戏开发过程中,测试计划的来源则是策划书。策划书包含了游戏定位,风格,故事情节,要求的配制等等。从里面了解到游戏的组成,可玩性,平衡(经济与能力),与形式(单机版还是网络游戏),而我们测试在这一阶段主要的事情就是通过策划书来制定详细的测试计划,主要分两个方面一是游戏程序本身的测试计划,比如任务系统,聊天,组队,地图等等由程序来实现的功能测试计划,二是游戏可玩性有测试计划,比如经济平衡标准是否达到要求,各个门派技能平衡测试参数与方法,游戏风格的测试,三是关于性能测试的计划,比如客户端的要求,网络版的对服务器的性能要求。同时测试计划书中还写明了基本的测试方法,要设计的自动化工具的需求,为后期的测试打下良好的基础。同时由于测试人员参与到策划评审,对游戏也有很深入的了解,会对策划提出自己的看法,包含可玩性,用户群,性能要求等等并形成对产品的风险评估分析报告,但这份报告不同于策划部门自己的风险分析报告,主要从旁观者的角度对游戏本身的品质作充分的论证,从而更有效的对策划起到控制

手游测试内容、测试流程、测试用例设计

手游测试内容、测试流程、测试用例设计游戏测试的主要内容 功能测试 主要验证功能是否符合需求设计 主要考虑功能正确性,不考虑游戏底层结构及代码错误 通常从界面着手测试,尽量模拟用户可能出现的操作 性能测试 测试点 客户端CPU使用率 客户端内存占用率 客户端网络流量使用情况 客户端耗电量 客户端帧率(FPS) 测试方法 分析代码 工具监测 iOS:xcode自带的instrument 安卓:emmage和GT(需要root权限) 压力测试 服务器CPU使用率 服务器内存占用率 系统吞吐量(TPS)

事务响应时间 事务成功率 兼容测试 机型适配测试 操作系统兼容测试 屏幕分辨率兼容测试 游戏版本兼容测试 安全测试 内存修改测试 客户端加密测试 客户端反编译测试 网络安全测试(用抓包工具测试避免重复抓包)接口测试 服务器各个接口数据测试,主要用工具来实现 接口安全测试,重复发送请求,查看接口处理情况日志测试 客服端日志 服务端日志 弱网测试 测试点 不同网络情况下游戏的运行情况 不同丢包率情况下游戏的运行情况

通过工具设置网络代理来实现 常用的工具win:fiddle、mac:network link conditioner gm工具测试(运营、客服人员使用) 测试gm工具的功能实现,需要关注工具的设置是否在游戏中起作用 测试gm工具的数据读取、存储 SDK测试 用户数据测试 充值、消费测试 与各个渠道对接测试 游戏测试基本流程 流程 功能会议->测试用例书写->冒烟测试->详细测试->回归测试->checklist检查冒烟测试 详细测试之前的环节 快速发现比较明显的bug 快速确保主逻辑流程跑通 快速明确功能开展状态 详细测试 细致的测试每个逻辑分支、资源、配置 尽量模拟玩家的每一种操作可能 测试异常情况,如断网、断电、事件中断、进程中断等 测试数据读取、存储、网络等内容

游戏测试2

个人简历 一、基本情况 姓名:林伟加性别:男 年龄:24 出生日期:1991年1月 工作经验:1年现居地:深圳市龙岗区 教育背景:2012/09—2015/07 广东轻工职业技术学院|软件技术|专科 专业技能: 1、掌握软件测试的基本知识、技能,测试用例的设计与编写; 2、熟悉测试流程并且能够严格执行; 3、有丰富的游戏经验,能够理性找出部分游戏缺点,并提出一些个人的建议。 二、自我评价 1、小时候喜欢玩恐龙快打,初中时喜欢玩泡泡堂,跑跑卡丁车,大学的时候就喜欢玩英雄哥联盟,CF; 2、曾在大学里担任红十字协会部长,帮助教会新会员处理及协同个个部门的事物安排; 3、小学时喜欢打乒乓球,初中以后喜欢打篮球,打篮球让我更好地学会怎么跟队友合作配合,篮球运动也让我的身体结实,强壮; 4、在大学里培养我很好的自学能力,编程语言的学习很好的加强了我的逻辑思维。 本人特别喜爱的游戏:恐龙快打,泡泡堂,跑跑卡丁车,拳皇97,欢乐斗地主,天天酷跑,节奏大师,LOL,CF等; 三、工作经验 2013/08—2013/11:上海江游信息科技有限公司 所属行业:网页游戏 工作描述:1.了解测试的操作流程; 2. 负责游戏测试和任务结束后的其它工作; 2013/12—2014/05:成都光漫科技有限公司 所属行业:手机游戏 工作描述:1.负责游戏测试和任务结束后的其它工作; 2.编写并执行测试用例,认真逐条执行测试用例; 4.对所确认的错误编写bug报告单; 3.对所提交的BUG进行跟踪验证;

四、项目经验 项目一:卡牌三国 项目概述:卡牌三国是一款以我国三国时代为题材的策略类手机游戏,游戏采用C++技术,使用IOS\Andorid系统的智能手机下载游戏客户端,是基于网络的在线多人互动 游戏。在游戏中,玩家将担任一名城主的身份,培养武将,招募士兵,与其它玩 家一起组建军团,驰骋在这风云变幻、群雄逐鹿的三国时期。 责任描述:1、明确任务及目标,负责测试游戏中的人物模块; 2、根据需求文档以及测试计划书写出所负责模块的测试用例; 3、参加用例评审会,听取意见尽量完善自己的测试用例,并严格执行完善后的 测试用例; 4、发现bug后再次确认,记录bug并提交; 5、bug反馈后及时跟踪检查,确认bug是否被修复; 6、进行回归测试,确认bug被修复之后是否因为这个bug导致其他模块或功能 失效或出现异常; 项目二:四川麻将 项目概述:四川麻将只有条、筒、万三种牌共108张,没有花、风牌和箭牌。不可以吃(动作面板上“过”表示放弃)必须缺门可胡,即胡牌的时候不能有三种花色的牌。 特色玩法如定缺、刮风下雨、血战到底等。支持Andorid 2.0以上系统。 责任描述:1、明确任务及目标,负责测试游戏中的好友模块; 2、根据需求文档以及测试计划书写出所负责模块的测试用例; 3、发现bug后再次确认,记录bug并提交; 4、bug反馈后及时跟踪检查,确认bug是否被修复; 5、进行回归测试,确认bug被修复之后是否因为这个bug导致其他模块或功能 失效或出现异常; 项目心得:作为一名游戏测试员必须要有足够的责任心和耐心,仔细的完成游戏的操作,勤于思考并且具有良好的逻辑思维能力。必须要站在玩家的角度来思考,完成游戏 的测试。测试不仅仅是为了找出游戏的bug,更多的如何使玩家更好的操作以及 体验游戏。

相关主题
相关文档 最新文档