J2ME小游戏-fly

1、FlyMidlet.java

package fly;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class FlyMidlet extends MIDlet {
Navigate ng;
public FlyMidlet() {
ng=Navigate.getInstance(this);
}
protected void startApp() {
System.out.println("startApp");
ng.display.setCurrent(ng.mc);
printInfo();
}
protected void pauseApp() {
System.out.println("pauseApp");
}
protected void destroyApp(boolean parm1) {
System.out.println("destroyApp");
Navigate.mc.stop();
MyGameCanvas.cleanJob();
Navigate.cleanJob();
}

private void printInfo(){
System.out.println("FlyMidlet printInfo() start:");
System.out.println("FlyMidlet printInfo() end:");
}

}

2、Bullets.java

package fly;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.Random;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class Bullets extends GameObject {
private int[][] bullets;
private int bulletstotal;
private Random rnd;
public static final int BULLET_TYPE_LEFT=0;
public static final int BULLET_TYPE_RIGHT=1;
public static final int BULLET_TYPE_TOP=2;
public static final int BULLET_TYPE_BOTTOM=3;
private int width,height;

public Bullets(Image img,int picwidth,int picheight,int bulletstotal,int width,int height) {
super(img,picwidth,picheight);
this.bulletstotal=bulletstotal;
bullets=new int[bulletstotal][6];
rnd=new Random();
this.width=width;
this.height=height;
}

public void initBullets(){
for (int i = 0; i < bullets.length; i++) {
initBullet(i);
}
}

private void initBullet(int i) {
bullets[i][0] = (rnd.nextInt() & 0x7fffffff) % 4; //type
bullets[i][5] = 1; //alive
switch (bullets[i][0]) {
case BULLET_TYPE_LEFT:
bullets[i][1] = -5;
bullets[i][2] = (rnd.nextInt() & 0x7fffffff) % height;
bullets[i][3] = (rnd.nextInt() & 0x7fffffff) % 3 + 1; //vx
bullets[i][4] = (rnd.nextInt()) % 3; //vy
break;
case BULLET_TYPE_RIGHT:
bullets[i][1] = width + 5;
bullets[i][2] = (rnd.nextInt() & 0x7fffffff) % height;
bullets[i][3] = ( (rnd.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vx
bullets[i][4] = (rnd.nextInt()) % 3; //vy
break;
case BULLET_TYPE_TOP:
bullets[i][1] = (rnd.nextInt() & 0x7fffffff) % width;
bullets[i][2] = -5;
bullets[i][3] = (rnd.nextInt()) % 3; //vx
bullets[i][4] = (rnd.nextInt() & 0x7fffffff) % 3 + 1; //vy
break;
case BULLET_TYPE_BOTTOM:
bullets[i][1] = (rnd.nextInt() & 0x7fffffff) % width;
bullets[i][2] = height + 5;
bullets[i][3] = (rnd.nextInt()) % 3; //vx
bullets[i][4] = ( (rnd.nextInt() & 0x7fffffff) % 3 + 1) * -1; //vy
break;
}
}

public void updata(int i){
bullets[i][1]+=bullets[i][3];
bullets[i][2]+=bullets[i][4];
if(bullets[i][1]<-5 || bullets[i][1]>width+5){
bullets[i][3]*=-1;
}
if(bullets[i][2]<-5 || bullets[i][2]>height+5){
bullets[i][4]*=-1;
}
}

private void paint(Graphics g,int i){
updataspritepos(i);
sprite.paint(g);
}

public void paint(Graphics g) {
for (int i = 0; i < bullets.length; i++) {
if(bullets[i][5]==0){
continue;
}
sprite.setPosition(bullets[i][1],bullets[i][2]);
sprite.paint(g);
}
}

public void refreshBullets(Sprite planesprite, boolean needcollision){
for (int i = 0; i < bullets.length; i++) {
if(bullets[i][5]==0){
continue;
}
if(needcollision){
//System.out.println("needcollision ");
if (isCollision(planesprite, i, 10)) {
//System.out.println("collision ");
Navigate.mc.gameover = true;
Navigate.mc.explosion.sprite.setPosition(bullets[i][1] - 16,
bullets[i][2] - 16);
bullets[i][5] = 0;
continue;
}
}
updata(i);
}
}

private boolean isCollision(Sprite sprite,int i,int range){
//updataspritepos(i);
//return sprite.collidesWith(this.sprite,true);
boolean result=false;
int planeXCenter=sprite.getX()+12;
int planeYCenter=sprite.getY()+12;
int bulletXCenter=bullets[i][1]+3;
int bulletYCenter=bullets[i][2]+3;
if(Math.abs(planeXCenter-bulletXCenter) < range){
if (Math.abs(planeYCenter - bulletYCenter )< range) {
result = true;
}
}
return result;
}

private void updataspritepos(int i){
sprite.setPosition(bullets[i][1],bullets[i][2]);
}

/* no use now
public void resetDeadBullet(){
for (int i = 0; i < bullets.length; i++) {
if(bullets[i][5]==0){//dead bullet
initBullet(i);
}
}
}
*/

public void killbullets(Sprite planesprite,int range){
for (int i = 0; i < bullets.length; i++) {
if(bullets[i][5]!=0){//alive bullets
if(isCollision(planesprite, i, range)){
bullets[i][5]=0;
initBullet(i);
}
}
}
}
}
3、Font.java
package fly;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class Font {
Sprite sprite;
int width,height;
int[] charhash;
Graphics g;

public Font(Graphics g,Image img, int width, int height, char[] chars) {
this.g=g;
sprite=new Sprite(img,width,height);
this.width=width;
this.height=height;
charhash=new int[128];
for (int i = 0; i < charhash.length; i++) {
charhash[i]=-1;
}
Character c;
for (int i = 0; i < chars.length; i++) {
c=new Character(chars[i]);
charhash[c.hashCode()]=i;
}
}

public void drawChar(char ch, int x, int y){
Character c=new Character(ch);
int hashcode=c.hashCode();
sprite.setPosition(x,y);
if(hashcode>=0){
sprite.setFrame(charhash[hashcode]);
sprite.paint(g);
}
}

public void drawString(String str, int x, int y){
int length=str.length();
for (int i = 0; i < length; i++) {
drawChar(str.charAt(i),x+width*i,y);
}
}
}
4、GameObject.java
package fly;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class GameObject {
public Sprite sprite;
public boolean alive;
private int lifecount=0;
public int lifetime=0;
public int speed=0;
private int animcount=0;

public GameObject(Image img,int width,int height){
sprite=new Sprite(img,width,height);
reset();
}

public void move(int dx,int dy){
sprite.move(dx,dy);
}

public void moveto(int x,int y){
sprite.setPosition(x,y);
}

public void update(){
if(!alive)
return;
if(++animcount>speed){
animcount=0;
sprite.nextFrame();
if(lifetime!=0 && ++lifecount>lifetime)
alive=false;
}
}

public void paint(Graphics g){
if(!alive)
return;
sprite.paint(g);
}
public void reset(){
alive=true;
lifecount=0;
animcount=0;
sprite.setFrame(0);
}
}
5、ImageTools.java
package fly;
import javax.microedition.lcdui.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class ImageTools {
protected ImageTools() {
}

public static Image getImage(String str){
Image img=null;
try {
img = Image.createImage(str);
}
catch (Exception ex) {
System.out.println(ex);
}
finally{
return img;
}
}
}
6、MyGameCanvas.java
package fly;

import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class MyGameCanvas extends GameCanvas
implements Runnable, CommandListener{
private static MyGameCanvas instance;
Graphics g;
boolean running;
Thread t;
Command startcmd,exitcmd,restartcmd;
int keystate;
boolean keyevent;
boolean key_up,key_down,key_left,key_right,key_fire;
private boolean allowinput;
public int screenwidth;
public int screenheight;
boolean gameover;
//define your variable here
long gametimeoffset;
long gametime;
int bombnum;
int []bombaward;
int bombawardtop;
GameObject plane;
int planedirection;
TiledLayer background;
Bullets bullets;
GameObject explosion;
GameObject bomb;
Image bomb_ico;
Font fontbig,fontsmall;
//define your variable end

protected MyGameCanvas() {
super(true);
g=getGraphics();
running=false;
t=null;
addCommand(startcmd=new Command("start",Command.OK,1));
addCommand(exitcmd=new Command("exit",Command.EXIT,1));
setCommandListener(this);
screenwidth=getWidth();
screenheight=getHeight();

//put your init once code here
Image img=ImageTools.getImage("/pic/MyPlaneFrames.png");
plane=new GameObject(img,24,24);
planedirection=0;
img=ImageTools.getImage("/pic/back_water.png");
int backcolumns=screenwidth/img.getWidth()+1;
int backrows=screenheight/img.getHeight()+1;
background=new TiledLayer(backcolumns,backrows,img,img.getWidth(),img.getHeight());
int x,y;
for (int i = 0; i < backcolumns*backrows; i++) {
x=i%backcolumns;
y=i/backcolumns;
System.out.println("x="+x+" y="+y);
background.setCell(x,y,1);
}
img=ImageTools.getImage("/pic/bullet.png");
bullets=new Bullets(img,img.getWidth(),img.getHeight(),20,screenwidth,screenheight);
img=ImageTools.getImage("/pic/explosion.png");
explosion=new GameObject(img,32,32);
bomb_ico=ImageTools.getImage("/pic/bomb_icon.png");
img=ImageTools.getImage("/pic/b_number.png");
fontbig=new Font(g,img,10,15,new char[]{'0','1','2','3','4','5','6','7','8','9'});
img=ImageTools.getImage("/pic/s_number.png");
fontsmall=new Font(g,img,5,7,new char[]{'0','1','2','3','4','5','6','7','8','9'});
img=ImageTools.getImage("/pic/bomb.png");
bomb=new GameObject(img,65,65);
bombaward=new int[]{0,1,1,1,1,1};
bombawardtop=bombaward.length-1;
//put your init once code end
}
//private void InitInstance(){ }

synchronized public static MyGameCanvas getInstance() {
if (instance == null) {
instance = new MyGameCanvas();
System.out.println("new MyGameCanvas");
}
return instance;
}

public void run(){
System.out.println("MyGameCanvas run start");
long st=0,et=0,diff=0;
int rate=50;//16-17 frame per second
while(running){
st=System.currentTimeMillis();
//put your code here
//input();
//gameLogic();
//your code end
gameinput();
gameMain();
et=System.currentTimeMillis();
diff=et-st;
if(diff<rate){
//System.out.println("Sleep "+(rate-diff));
try {
Thread.sleep(rate - diff);
}
catch (InterruptedException ex) {}
}else{
//System.out.println("rush , and the frame using time: "+diff);
}
}
System.out.println("MyGameCanvas run end");
}

public void start(){
if(!running){
running=true;
t=new Thread(this);
t.start();
}
}

private void gameMain() {
g.setColor(0,0,0);//clear screen
g.fillRect(0,0,getWidth(),getHeight());

background.paint(g);//draw background
//g.setColor(255,255,255);
//g.drawString("hello",1,1,g.TOP|g.LEFT);
if(bomb.alive){
bomb.moveto(plane.sprite.getX()-20,plane.sprite.getY()-20);
bomb.paint(g);
bomb.update();
bullets.killbullets(plane.sprite,32);
}
bullets.paint(g);
plane.paint(g);
bullets.refreshBullets(plane.sprite,!gameover && !bomb.alive);
g.drawImage(bomb_ico,0,screenheight-1,g.BOTTOM|g.LEFT);
fontbig.drawString(String.valueOf(gametime),screenwidth/2-15,10);
fontsmall.drawString(String.valueOf(bombnum),bomb_ico.getWidth(),screenheight-fontsmall.height);
if (gameover) {
explosion.paint(g);
explosion.update();
if(!explosion.alive){
plane.alive=false;
g.setColor(255,255,255);
g.drawString(StringTools.timeOpinion(gametime),5,22,g.LEFT|g.TOP);
g.drawString("fly 0.1 ver by favo yang",2,100,g.LEFT|g.TOP);
g.drawString("E-mail : favoyang@yahoo.com",2,115,g.LEFT|g.TOP);
g.drawString("simulate from:",2,130,g.LEFT|g.TOP);
g.drawString("Mr.tony 's <hold on 20sec 1.20> ",2,145,g.LEFT|g.TOP);
g.drawString("hello tony, just funny.",2,160,g.LEFT|g.TOP);
}
}else{
gametime=(System.currentTimeMillis()-gametimeoffset)/1000;
int awardindex=(int)gametime/20;
if(awardindex>bombawardtop)
awardindex=bombawardtop;
if(bombaward[awardindex]!=0){
bombnum+=bombaward[awardindex];
bombaward[awardindex]=0;
}
if (keyevent) {
if(key_up){
plane.move(0, -3);
plane.sprite.setFrame(0);
}
if(key_down){
plane.move(0, 3);
plane.sprite.setFrame(0);
}
if(key_left){
plane.move( -3, 0);
plane.sprite.setFrame(1);
}
if(key_right){
plane.move(3, 0);
plane.sprite.setFrame(2);
}
if(key_fire){
if(!bomb.alive && bombnum>0){//bomb isn't actived and there's enough bomb .
bomb.reset();
bomb.alive=true;
bombnum--;
}
}
}
else {
plane.sprite.setFrame(0);
}

}

flushGraphics();
}

private void gameInit() {
gameover=false;
gametime=0;
gametimeoffset=System.currentTimeMillis();
allowinput=true;
key_up=key_down=key_left=key_right=key_fire=false;
plane.moveto((screenwidth-plane.sprite.getWidth())/2,
(screenheight-plane.sprite.getHeight())/2);
bullets.initBullets();
plane.reset();
explosion.reset();
explosion.lifetime=3;
bomb.reset();
bomb.lifetime=6;
bomb.alive=false;
bombnum=3;
for (int i = 0; i < bombaward.length; i++) {
bombaward[i]=1;
}
bombaward[0]=0;
printInfo();
}

public void stop(){
if(running){
running = false;
}
}

private void printInfo(){
System.out.println("MyGameCanvas printInfo() start:");
System.out.println("width : "+ getWidth()+ " Height: "+getHeight());
java.lang.Runtime rt=java.lang.Runtime.getRuntime() ;
System.out.println("total memory: "+rt.totalMemory());
System.out.println("free memory: "+rt.freeMemory());
System.out.println("MyGameCanvas printInfo() end:");
}

public void commandAction(Command c, Displayable d) {
String cmdstr=c.getLabel();
if(cmdstr.equals("start")){
gameInit();
start();
removeCommand(startcmd);
addCommand(restartcmd=new Command("restart",Command.OK,1));
}else if(cmdstr.equals("restart")){
stop();
while(t.isAlive());
gameInit();
start();
}else if(cmdstr.equals("exit")){
stop();
Navigate.midlet.destroyApp(false);
Navigate.midlet.notifyDestroyed();
}
}

private void gameinput() {
if(allowinput){
keystate=getKeyStates();
keyevent=false;
if((keystate & UP_PRESSED)!=0){//up
key_up=true;keyevent=true;
//deal your unstop job code here
planedirection=1;
//System.out.println("up press");
//deal your unstop job code end
}else if((keystate & UP_PRESSED)==0){//release key
if(key_up==true){
key_up=false;
//deal your one press-one job code here
//System.out.println("up release");
//deal your one press-one job code end
}
}

if((keystate & DOWN_PRESSED)!=0){//down
key_down=true;keyevent=true;
//deal your unstop job code here
planedirection=2;
//System.out.println("down press");
//deal your unstop job code end
}else if((keystate & DOWN_PRESSED)==0){//release key
if(key_down==true){
key_down=false;
//deal your one press-one job code here
//System.out.println("down release");
//deal your one press-one job code end
}
}

if((keystate & LEFT_PRESSED)!=0){//left
key_left=true;keyevent=true;
//deal your unstop job code here
planedirection=3;
//System.out.println("left press");
//deal your unstop job code end
}else if((keystate & LEFT_PRESSED)==0){//release key
if(key_left==true){
key_left=false;
//deal your one press-one job code here
//System.out.println("left release");
//deal your one press-one job code end
}
}

if((keystate & RIGHT_PRESSED)!=0){//right
key_right=true;keyevent=true;
//deal your unstop job code here
planedirection=4;
//System.out.println("right press");
//deal your unstop job code end
}else if((keystate & RIGHT_PRESSED)==0){//release key
if(key_right==true){
key_right=false;
//deal your one press-one job code here
//System.out.println("right release");
//deal your one press-one job code end
}
}

if((keystate & FIRE_PRESSED)!=0){//fire
key_fire=true;keyevent=true;
//deal your unstop job code here
planedirection=0;
//System.out.println("fire press");
//deal your unstop job code end
}else if((keystate & FIRE_PRESSED)==0){//release key
if(key_fire==true){
key_fire=false;
//deal your one press-one job code here
//System.out.println("fire release");
//deal your one press-one job code end
}
}
if(!keyevent){
//no keyevent here
//System.out.println("NO KEY press");
//no keyevent end
}
}
}

public static void cleanJob(){
instance=null;
}

}
7、Navigate.java
package fly;
import javax.microedition.lcdui.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Navigate {
private static Navigate instance;
public static MyGameCanvas mc;
public static FlyMidlet midlet;
public static Display display;

protected Navigate(FlyMidlet midlet) {
Navigate.midlet=midlet;
Navigate.mc=MyGameCanvas.getInstance();
Navigate.display=Display.getDisplay(midlet);
}

synchronized public static Navigate getInstance(FlyMidlet midlet){
if (instance == null) {
instance = new Navigate(midlet);
System.out.println("new Navigate");
}
return instance;
}

public static void cleanJob(){
instance=null;
}
}
8、StringTools.java
package fly;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class StringTools {
protected StringTools() {
}

public static String timeOpinion(long gametime){
if(gametime<10){
return "Do you play with your foot?";
//return "i can't belive,your are a game master";
}else if(gametime<16){
return "come boy, you can do it!";
}else if(gametime<20){
return "what a pity! try again.";
}else if(gametime<25){
return "very well, you are a real man.";
}else if(gametime<30){
return "i know you have talent of this game.";
}else if(gametime<40){
return "i can't belive, your are a game master.";
}else{
return "oh my god, are you a human?";
}
}
}
9.fly.jad
MIDlet-1: FlyMidlet, , fly.FlyMidlet
MIDlet-Jar-Size: 18499
MIDlet-Jar-URL: fly.jar
MIDlet-Name: My MIDlet Suite
MIDlet-Vendor: My Vendor
MIDlet-Version: 1.0

时间: 2024-11-17 08:54:56

J2ME小游戏-fly的相关文章

求j2me小游戏源代码

问题描述 本人急需一个j2me小游戏源代码,希望可以共享一下 解决方案 解决方案二:importjava.util.*;importjavax.microedition.lcdui.*;/***贪吃蛇游戏*/publicclassSnakeCanvasextendsCanvasimplementsRunnable{/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/int[][]snake=newint[200][2];/**已经使用的节点数量*/intsna

J2ME 2D小游戏入门之旅(七) 不足多多,你认为呢?

七.不足多多,你认为呢? 游戏已经成型了,冲杯咖啡犒劳一下自己吧.呵呵还是算了,咖啡因对下一代不好. 当你看完以上的所有,你有什么想法呢?不要说没有.你一定是像我一样揣着一份完成clone作品的兴奋和无数的疑问吧.关于游戏性.游戏引擎等种种的问题接踵而来,甚至你可能还会想到这么个游戏有没有市场?让我们在睡前一起苦恼一下吧. 系统构架方面 我们将来的游戏不会像现在这样直来直去,需要有欢迎界面,loading等待,帮助,画面切换等等,那时候我们的Navigate就不是现在这副空架子了. 顺便再谈一个

JavaScript实现Fly Bird小游戏_javascript技巧

本教程为大家分享了Fly Bird小游戏的制作流程,供大家参考,具体内容如下 1.分析页面结构,理清需求和功能 游戏有三个界面,分别是开始界面,游戏界面和游戏结束界面. 1.1 开始界面 start.gif 游戏的大背景 上下移动的游戏标题和翅膀摆动的小鸟 start 按钮,点击进入游戏界面 一直移动的地面 1.2 游戏界面 play.gif 显示越过障碍数量的计分器 移动的障碍物,分别是上管道和下管道 点击游戏界面,小鸟向上飞起,然后在重力作用下下坠, 当小鸟和管道碰撞后,结束界面弹出,同时小

java项目实战——Java打飞机小游戏(附完整源码)

写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习. 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy { pr

求j2me 棋牌游戏-斗地主 的算法?

问题描述 求j2me棋牌游戏-斗地主的算法? 解决方案 解决方案二:算法解决方案三:代码例子解决方案四:首先是,判断牌的大小然后,电脑AI,出牌,跟牌,再,出牌的AI,放下家?正常出牌,按照手上牌优先出的顺序出跟牌的AI,有的比他大的,判断是否要打,还是不打解决方案五:要源代码例子解决方案六:竹木一瓜;看过你的回复,首先谢谢.如果.你能贴出点,实现方法的代码更好.解决方案七:这玩意儿要收费的解决方案八:/***规则判断**@authorzg.shi*/publicinterfaceRule{pu

音频-我用java写了一个小游戏,想插入背景音乐但不太会,求指教

问题描述 我用java写了一个小游戏,想插入背景音乐但不太会,求指教 package text; import java.io.*; import javax.sound.sampled.*; public class text { public static void main(String[] args) { // TODO Auto-generated method stub //创建一个实例 AePlayWave apw = new AePlayWave("G:\照片\Sleep Awa

vb编程-用vb。net设计一个小游戏

问题描述 用vb.net设计一个小游戏 我想实现以下功能: 当单击某一个按钮时,如果其他按钮的颜色和这个按钮相同,则让这两个按钮消失,该怎么判断那个按钮是否和本按钮的颜色相同

WEBJX收集12个非常有创意的JavaScript小游戏

JavaScript 在Web开发过程中已经是必不可少的重要分子,他推动着Web的交互性往越来越高的层次发展,现在的很多Web游戏也基于这类语言开发. 这里是12个非常有创意的JavaScript小游戏,希望在给我们带来趣味的同时也能更进一步地了解更深层次的JavaScript语言,原来它可以这样的. Browser Pong Twitch Browser Ball Crystal Galazy Video & Picture Puzzle Apophis 2029 Bing-Bong Bomb

flash小游戏网站靠什么盈利?

目前国内flash小游戏网站,很多,而且很多已经做大,例如 4399.com 3839.com yx007.com xiaoyouxi.com 7733.com  gameyes.com .据统计,目前流量超过1000个ip的小游戏网站已经达到4000家,另外还有小游戏频道 例如play.zol.com.cn 这样的频道4000家. 这么多小游戏网站,靠什么生存,靠说明盈利呢?    小游戏网站主要受众是中小学生,他们本身没有消费能力,另外小游戏本身不具备掘金能力,所以不能从页面之外赚钱.