由于最近找工作忙,所以没时间再做下去了,希望有兴趣的朋友可以来改改。
游戏希望继续处:
1:游戏规则还很简单,希望加入更多的因素。
2:画面很粗糙,动作还不够流畅,在画面上有所完善。
3:现在这个游戏还只能在两台电脑的手机模拟器上玩。希望能建立个服务器,实现多人玩耍。
暂时只有这三点,下面是游戏代码,有6个类,如果要图片的可以给出邮箱.(精灵大小为16*16,地图格子大小为16*16,图片为杂凑,只能作为参考):
/* ******************************************************************
GameMIDlet类,主类:
*********************************************************************/
import javax.microedition.midlet.* ;
import javax.microedition.lcdui.* ;
public class GameMIDlet extends MIDlet
implements CommandListener
{
/*定义舞台*/
Display display ;
private Server server;
private Client client;
private static final String SERVER = "Server";
private static final String CLIENT = "Client";
/*定义选择画面*/
private static final String[] names = {SERVER, CLIENT};
private Form f;
private ChoiceGroup cg;
Command c1,exitCommand;
public GameMIDlet()
{ exitCommand = new Command("exit", Command.EXIT,2);
c1=new Command("结束", Command.EXIT, 1);
display = Display.getDisplay(this) ;
}
/*初始化选择画面*/
public void begin()
{ f = new Form("泡泡车");
cg = new ChoiceGroup("请选择类型",Choice.EXCLUSIVE, names, null);
f.append(cg);
f.addCommand(new Command("开始", Command.OK, 1));
f.addCommand(c1);
f.setCommandListener(this);
display.setCurrent(f);
}
public void startApp()
{
begin();
}
/*按键事件监听*/
public void commandAction(Command c,Displayable s)
{
String cmd = c.getLabel() ;
if(cmd.equals("开始"))
{
String name = cg.getString(cg.getSelectedIndex());
if (name.equals(SERVER)) {
server = new Server(this);
server.start();
}
else {
client = new Client(this);
client.start();
}
}else if(cmd.equals("结束"))
{
notifyDestroyed() ;
}
else if(cmd.equals("Exit"))
{if (server != null) {
server.stop();
}
if (client != null) {
client.stop();
}
begin();
}
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
}
146 个解决方案
#1
/********************************************************************
Server类,服务器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Server implements Runnable, CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*定义服务器端开发的监听端口*/
ServerSocketConnection scn;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收客户端传来的数据*/
InputStream is;
/*定义输出流,以向客户端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Server(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Socket Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*服务器常驻5000端口*/
scn = (ServerSocketConnection) Connector.open("socket://:50000");
/*控制与前来请求的客户端建立连接*/
sc = (SocketConnection) scn.acceptAndOpen();
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(1,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果客户端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {}
}
}
Server类,服务器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Server implements Runnable, CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*定义服务器端开发的监听端口*/
ServerSocketConnection scn;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收客户端传来的数据*/
InputStream is;
/*定义输出流,以向客户端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Server(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Socket Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*服务器常驻5000端口*/
scn = (ServerSocketConnection) Connector.open("socket://:50000");
/*控制与前来请求的客户端建立连接*/
sc = (SocketConnection) scn.acceptAndOpen();
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(1,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果客户端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {}
}
}
#2
/********************************************************************
Client类,客户器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Client implements Runnable,CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收服务器端传来的数据*/
InputStream is;
/*定义输出流,以向服务器端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Client(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Client Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*控制与服务器端建立连接*/
sc = (SocketConnection) Connector.open("socket://localhost:50000");
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(2,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
System.out.println("client 49");
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果服务器端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
} catch (IOException ioe) {}
}
}
/********************************************************************
Sender类,传输共用类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Sender extends Thread {
private OutputStream os;
private String message;
public Sender(OutputStream os) {
/*得到父类的输出流*/
this.os = os;
start();
}
public synchronized void send(String msg) {
/*得到父类的传输值*/
message = msg;
notify();
}
public synchronized void run() {
while(true) {
/*如果传输的数据没有被接收,则等待*/
if (message == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
if (message == null) {
break;
}
/*利用输出流传出数据,如果传到了目的端,则结束传输*/
try {
os.write(message.getBytes());
os.write("\n".getBytes());
stop();
} catch (IOException ioe) {
ioe.printStackTrace();
}
/* 标记,以用来重新传输*/
message = null;
}
}
/*结束传输*/
public synchronized void stop() {
message = null;
notify();
}
}
Client类,客户器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Client implements Runnable,CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收服务器端传来的数据*/
InputStream is;
/*定义输出流,以向服务器端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Client(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Client Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*控制与服务器端建立连接*/
sc = (SocketConnection) Connector.open("socket://localhost:50000");
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(2,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
System.out.println("client 49");
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果服务器端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
} catch (IOException ioe) {}
}
}
/********************************************************************
Sender类,传输共用类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Sender extends Thread {
private OutputStream os;
private String message;
public Sender(OutputStream os) {
/*得到父类的输出流*/
this.os = os;
start();
}
public synchronized void send(String msg) {
/*得到父类的传输值*/
message = msg;
notify();
}
public synchronized void run() {
while(true) {
/*如果传输的数据没有被接收,则等待*/
if (message == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
if (message == null) {
break;
}
/*利用输出流传出数据,如果传到了目的端,则结束传输*/
try {
os.write(message.getBytes());
os.write("\n".getBytes());
stop();
} catch (IOException ioe) {
ioe.printStackTrace();
}
/* 标记,以用来重新传输*/
message = null;
}
}
/*结束传输*/
public synchronized void stop() {
message = null;
notify();
}
}
#3
/********************************************************************
Bomb类,爆炸控制类:
*********************************************************************/
public class Bomb extends Thread {
/*初始化炸弹延迟爆炸时间*/
int islow=4000;
/*初始化炸弹爆炸显示时间*/
int isleep=1000;
MyGameWithTiledLayerCanvas t;
int x,x1,x2;
boolean stopmark=false;
public Bomb(int tank,MyGameWithTiledLayerCanvas k)
{
t=k;
/*泡泡将放在地图数组的具体位置处*/
x=tank;
/*转换为列数*/
x1=x%11;
/*转换为行数*/
x2=x/11;
}
public void run()
{
while(!stopmark)
{
try{
t.flag=0;
/*改变放泡泡处的背景图案*/
t.updatetile1(x1,x2,1);
sleep(islow);
/*显示泡泡爆炸时的效果*/
t.updatetile(x1-1,x2,1);
t.updatetile(x1+1,x2,1);
t.updatetile(x1,x2-1,1);
t.updatetile(x1,x2+1,1);
t.updatetile(x1,x2,1);
sleep(isleep);
/*泡泡爆炸后效果*/
t.updatetile1(x1,x2,11);
t.updatetile(x1-1,x2,11);
t.updatetile(x1+1,x2,11);
t.updatetile(x1,x2-1,11);
t.updatetile(x1,x2+1,11);
/*对方胜,调用相应函数*/
if(t.flag==1)
t.die1();
/*己方胜,调用相应函数*/
else if(t.flag==2)
t.die2();
/*双方平局,调用相应函数*/
else if(t.flag==3)
t.die3();
stopmark=true;
}
catch(InterruptedException e){System.out.println("Bomb 37");}
}
}
}
/*
*还有个类,太长了,等有人回了再传上来
*/
Bomb类,爆炸控制类:
*********************************************************************/
public class Bomb extends Thread {
/*初始化炸弹延迟爆炸时间*/
int islow=4000;
/*初始化炸弹爆炸显示时间*/
int isleep=1000;
MyGameWithTiledLayerCanvas t;
int x,x1,x2;
boolean stopmark=false;
public Bomb(int tank,MyGameWithTiledLayerCanvas k)
{
t=k;
/*泡泡将放在地图数组的具体位置处*/
x=tank;
/*转换为列数*/
x1=x%11;
/*转换为行数*/
x2=x/11;
}
public void run()
{
while(!stopmark)
{
try{
t.flag=0;
/*改变放泡泡处的背景图案*/
t.updatetile1(x1,x2,1);
sleep(islow);
/*显示泡泡爆炸时的效果*/
t.updatetile(x1-1,x2,1);
t.updatetile(x1+1,x2,1);
t.updatetile(x1,x2-1,1);
t.updatetile(x1,x2+1,1);
t.updatetile(x1,x2,1);
sleep(isleep);
/*泡泡爆炸后效果*/
t.updatetile1(x1,x2,11);
t.updatetile(x1-1,x2,11);
t.updatetile(x1+1,x2,11);
t.updatetile(x1,x2-1,11);
t.updatetile(x1,x2+1,11);
/*对方胜,调用相应函数*/
if(t.flag==1)
t.die1();
/*己方胜,调用相应函数*/
else if(t.flag==2)
t.die2();
/*双方平局,调用相应函数*/
else if(t.flag==3)
t.die3();
stopmark=true;
}
catch(InterruptedException e){System.out.println("Bomb 37");}
}
}
}
/*
*还有个类,太长了,等有人回了再传上来
*/
#4
nako_ruru@sina.com
谢谢
谢谢
#5
/********************************************************************
MyGameWithTiledLayerCanvas类,游戏控制类:
*********************************************************************/
import javax.microedition.lcdui.* ;
import javax.microedition.lcdui.game.* ;
import java.io.*;
public class MyGameWithTiledLayerCanvas extends GameCanvas
implements Runnable
{
/*定义画板*/
Graphics g;
/*定义布局管理器*/
LayerManager lm ;
/*定义背景图层*/
TiledLayer b1 ;
/*定义精灵*/
Sprite c1 ;
Sprite c2;
/*定义Bomb类,用单独的线程控制泡泡的爆炸*/
Bomb bomb;
/*己方坦克在地图中的位置*/
int tank;
/*对方坦克在地图中的位置*/
int tank1;
/*初始化校对值*/
int WALL=0;
/*己方坦克的x坐标*/
int x ;
/*己方坦克的y坐标*/
int y ;
/*己方坦克方向初始值*/
int state = 0 ;
/*对方坦克方向初始值*/
int state1=0;
/*对方坦克x坐标*/
int ex;
/*对方坦克y坐标 */
int ey;
/*胜负标记初始化*/
int flag=0;
/*坦克位置标记初始化*/
int flag1;
/*定义输出流以实现数据的输出*/
OutputStream os;
/*定义Sender类以操纵数据的输出*/
Sender sender;
/*地图数组初始化*/
int[] map={
11,11,3,11,11,3,11,11,11,11,11,
11,11,2,11,3,11,3,2,3,11,3,
11,11,3,2,11,11,2,11,11,3,11,
3,2,3,11,2,11,11,11,3,11,3,
11,11,2,11,3,11,2,11,11,3,11,
11,2,3,11,11,3,11,11,11,11,11,
3,11,3,11,3,11,11,2,11,11,11,
11,2,3,11,11,11,3,11,3,2,3,
3,11,11,11,11,11,11,3,11,11,11,
11,11,11,11,11,2,3,11,11,11,11
};
/*这个函数可以实现地图所有图象的初始化*/
public MyGameWithTiledLayerCanvas(int x1,OutputStream os1)
{
super(true) ;;
flag1=x1;
/*如果flag1=1就说明己方为服务器,只是对坦克的位置进行初始化*/
if(flag1==1)
{x=0;
y=0;
ex=160;
ey=153;
tank=0;
}
/*flag1!=1就说明己方为客户端了*/
else
{x=160;
y=153;
ex=0;
ey=0;
tank=109;
}
/*初始化输出流为主函数同一个输出流*/
os=os1;
sender=new Sender(os);
lm = new LayerManager() ;
/*调用构造函数实现地图背景的绘制*/
b1 = createBackGround() ;
/*实现坦克的绘制*/
c1 = createTank("/pic/tank2.png") ;
c2=createTank("/pic/tank2.png") ;
/*将所有景象在屏幕上显示出来*/
lm.append(c1);
lm.append(c2);
lm.append(b1);
}
/*在源图片上切一个16*16大小的小图片作为坦克的景象,返回值为sprite对象*/
private Sprite createTank(String pic)
{
Image img = null ;
try
{
img = Image.createImage(pic);
}catch(Exception exp)
{
System.out.println(exp);
}
return new Sprite(img,16,16) ;
}
/*按照地图数组将地图背景初始化*/
public TiledLayer createBackGround()
{
Image img = null;
try
{
img = Image.createImage("/pic/border.png");
}catch(Exception exp)
{
System.out.println(exp) ;
}
/*地图格子11*10,每格大小16*17*/
TiledLayer tiledLayer = new TiledLayer(11, 10, img, 16, 17);
/*将地图格子填充*/
for (int i = 0; i < map.length; i++)
{
int column = i % 11;
int row = (i-column)/ 11;
tiledLayer.setCell(column, row, map[i]);
//System.out.println(i+";"+column+";"+row);
}
return tiledLayer;
}
/*循环条件初始化*/
boolean conti = true ;
/*设定缓冲时间以实现在不同机器上速度同步*/
int rate = 150 ;
public void run()
{
long st = 0 ;
long et = 0 ;
g = getGraphics() ;
while(conti)
{
st = System.currentTimeMillis() ;
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
input() ;
/*改变坦克的方向*/
rotate();
tank1=ex/16+(ey/17)*11;
/*重绘地图*/
render(g) ;
/*实现快机时间延缓*/
et = System.currentTimeMillis() ;
if((et-st)<rate)
{
try
{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
MyGameWithTiledLayerCanvas类,游戏控制类:
*********************************************************************/
import javax.microedition.lcdui.* ;
import javax.microedition.lcdui.game.* ;
import java.io.*;
public class MyGameWithTiledLayerCanvas extends GameCanvas
implements Runnable
{
/*定义画板*/
Graphics g;
/*定义布局管理器*/
LayerManager lm ;
/*定义背景图层*/
TiledLayer b1 ;
/*定义精灵*/
Sprite c1 ;
Sprite c2;
/*定义Bomb类,用单独的线程控制泡泡的爆炸*/
Bomb bomb;
/*己方坦克在地图中的位置*/
int tank;
/*对方坦克在地图中的位置*/
int tank1;
/*初始化校对值*/
int WALL=0;
/*己方坦克的x坐标*/
int x ;
/*己方坦克的y坐标*/
int y ;
/*己方坦克方向初始值*/
int state = 0 ;
/*对方坦克方向初始值*/
int state1=0;
/*对方坦克x坐标*/
int ex;
/*对方坦克y坐标 */
int ey;
/*胜负标记初始化*/
int flag=0;
/*坦克位置标记初始化*/
int flag1;
/*定义输出流以实现数据的输出*/
OutputStream os;
/*定义Sender类以操纵数据的输出*/
Sender sender;
/*地图数组初始化*/
int[] map={
11,11,3,11,11,3,11,11,11,11,11,
11,11,2,11,3,11,3,2,3,11,3,
11,11,3,2,11,11,2,11,11,3,11,
3,2,3,11,2,11,11,11,3,11,3,
11,11,2,11,3,11,2,11,11,3,11,
11,2,3,11,11,3,11,11,11,11,11,
3,11,3,11,3,11,11,2,11,11,11,
11,2,3,11,11,11,3,11,3,2,3,
3,11,11,11,11,11,11,3,11,11,11,
11,11,11,11,11,2,3,11,11,11,11
};
/*这个函数可以实现地图所有图象的初始化*/
public MyGameWithTiledLayerCanvas(int x1,OutputStream os1)
{
super(true) ;;
flag1=x1;
/*如果flag1=1就说明己方为服务器,只是对坦克的位置进行初始化*/
if(flag1==1)
{x=0;
y=0;
ex=160;
ey=153;
tank=0;
}
/*flag1!=1就说明己方为客户端了*/
else
{x=160;
y=153;
ex=0;
ey=0;
tank=109;
}
/*初始化输出流为主函数同一个输出流*/
os=os1;
sender=new Sender(os);
lm = new LayerManager() ;
/*调用构造函数实现地图背景的绘制*/
b1 = createBackGround() ;
/*实现坦克的绘制*/
c1 = createTank("/pic/tank2.png") ;
c2=createTank("/pic/tank2.png") ;
/*将所有景象在屏幕上显示出来*/
lm.append(c1);
lm.append(c2);
lm.append(b1);
}
/*在源图片上切一个16*16大小的小图片作为坦克的景象,返回值为sprite对象*/
private Sprite createTank(String pic)
{
Image img = null ;
try
{
img = Image.createImage(pic);
}catch(Exception exp)
{
System.out.println(exp);
}
return new Sprite(img,16,16) ;
}
/*按照地图数组将地图背景初始化*/
public TiledLayer createBackGround()
{
Image img = null;
try
{
img = Image.createImage("/pic/border.png");
}catch(Exception exp)
{
System.out.println(exp) ;
}
/*地图格子11*10,每格大小16*17*/
TiledLayer tiledLayer = new TiledLayer(11, 10, img, 16, 17);
/*将地图格子填充*/
for (int i = 0; i < map.length; i++)
{
int column = i % 11;
int row = (i-column)/ 11;
tiledLayer.setCell(column, row, map[i]);
//System.out.println(i+";"+column+";"+row);
}
return tiledLayer;
}
/*循环条件初始化*/
boolean conti = true ;
/*设定缓冲时间以实现在不同机器上速度同步*/
int rate = 150 ;
public void run()
{
long st = 0 ;
long et = 0 ;
g = getGraphics() ;
while(conti)
{
st = System.currentTimeMillis() ;
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
input() ;
/*改变坦克的方向*/
rotate();
tank1=ex/16+(ey/17)*11;
/*重绘地图*/
render(g) ;
/*实现快机时间延缓*/
et = System.currentTimeMillis() ;
if((et-st)<rate)
{
try
{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
#6
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
public void input()
{
int keystate = getKeyStates() ;
/*向上键被按下*/
if((keystate & UP_PRESSED)!=0)
{
/*坦克格子位的改变*/
tank=tank-11;
/*判断是否能移动*/
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
/*坦克当前朝向*/
state=3;
/*坦克坐标的改变*/
y=y-17;
//判断上边界
if( y <= 0 )
y = 0 ;
/*发送改变的一些数据*/
sendto(x,y,-1,state);
}
else tank=tank+11;
}
/*向下键被按下,下面注解同上*/
if((keystate & DOWN_PRESSED)!=0)
{
tank=tank+11;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=1;
y=y+17;
//判断下边界
if( y >= 153 )
y = 153 ;
sendto(x,y,-1,state);
}
else tank=tank-11;
}
/*向左键被按下*/
if((keystate & LEFT_PRESSED)!=0)
{
tank=tank-1;
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=2;
x=x-16;
//判断左边界
if( x <0 )
{ x = 0 ;
tank=tank+1;}
sendto(x,y,-1,state);
}
else tank=tank+1;
}
/*向右键被按下*/
if((keystate & RIGHT_PRESSED)!=0)
{
tank=tank+1;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=0;
x=x+16;
//判断右边界
if( x >=176 )
{x = 160 ;
tank=tank-1;}
sendto(x,y,-1,state);
}
else tank=tank-1;
}
/*回车键被按下*/
if((keystate&FIRE_PRESSED)!=0)
{
/*在相应位置放下泡泡*/
bomb=new Bomb(tank,this);
/*泡泡爆炸线程启动*/
bomb.start();
sendto(x,y,tank,state);
}
}
/*更新地图,放泡泡时被调用*/
public void updatetile1(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
/*算出在地图数组中的位置*/
z2=x1+y1*11;
/*改变地图数组的相应值*/
map[z2]=18;
if(z1==11)
map[z2]=11;
b1.setCell(x1,y1,z1);
}
/* 更新地图,泡泡爆炸时被调用*/
public void updatetile(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
z2=x1+y1*11;
/*判断泡泡的爆炸范围*/
if(z2<=109&&z2>=0)
if(x1>=0&&x1<=10&&y1>=0&&y1<=9&&map[z2]!=2)
b1.setCell(x1,y1,z1);
/*判断是否炸到坦克,确定出相应的胜负*/
if(z2==tank)
if(flag==2)
flag=3;
else if(flag==0)
flag=1;
if(z2==tank1)
if(flag==1)
flag=3;
else if(flag==0)
flag=2;
if(z2<=109&&z2>=0)
if(map[z2]==3)
map[z2]=11;
}
/*坦克方向的改变*/
public void rotate()
{
setTankDirection(state) ;
setTankDirection1(state1) ;
}
/*具体实现己方坦克方向的改变*/
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
public void input()
{
int keystate = getKeyStates() ;
/*向上键被按下*/
if((keystate & UP_PRESSED)!=0)
{
/*坦克格子位的改变*/
tank=tank-11;
/*判断是否能移动*/
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
/*坦克当前朝向*/
state=3;
/*坦克坐标的改变*/
y=y-17;
//判断上边界
if( y <= 0 )
y = 0 ;
/*发送改变的一些数据*/
sendto(x,y,-1,state);
}
else tank=tank+11;
}
/*向下键被按下,下面注解同上*/
if((keystate & DOWN_PRESSED)!=0)
{
tank=tank+11;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=1;
y=y+17;
//判断下边界
if( y >= 153 )
y = 153 ;
sendto(x,y,-1,state);
}
else tank=tank-11;
}
/*向左键被按下*/
if((keystate & LEFT_PRESSED)!=0)
{
tank=tank-1;
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=2;
x=x-16;
//判断左边界
if( x <0 )
{ x = 0 ;
tank=tank+1;}
sendto(x,y,-1,state);
}
else tank=tank+1;
}
/*向右键被按下*/
if((keystate & RIGHT_PRESSED)!=0)
{
tank=tank+1;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=0;
x=x+16;
//判断右边界
if( x >=176 )
{x = 160 ;
tank=tank-1;}
sendto(x,y,-1,state);
}
else tank=tank-1;
}
/*回车键被按下*/
if((keystate&FIRE_PRESSED)!=0)
{
/*在相应位置放下泡泡*/
bomb=new Bomb(tank,this);
/*泡泡爆炸线程启动*/
bomb.start();
sendto(x,y,tank,state);
}
}
/*更新地图,放泡泡时被调用*/
public void updatetile1(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
/*算出在地图数组中的位置*/
z2=x1+y1*11;
/*改变地图数组的相应值*/
map[z2]=18;
if(z1==11)
map[z2]=11;
b1.setCell(x1,y1,z1);
}
/* 更新地图,泡泡爆炸时被调用*/
public void updatetile(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
z2=x1+y1*11;
/*判断泡泡的爆炸范围*/
if(z2<=109&&z2>=0)
if(x1>=0&&x1<=10&&y1>=0&&y1<=9&&map[z2]!=2)
b1.setCell(x1,y1,z1);
/*判断是否炸到坦克,确定出相应的胜负*/
if(z2==tank)
if(flag==2)
flag=3;
else if(flag==0)
flag=1;
if(z2==tank1)
if(flag==1)
flag=3;
else if(flag==0)
flag=2;
if(z2<=109&&z2>=0)
if(map[z2]==3)
map[z2]=11;
}
/*坦克方向的改变*/
public void rotate()
{
setTankDirection(state) ;
setTankDirection1(state1) ;
}
/*具体实现己方坦克方向的改变*/
#7
public void setTankDirection(int state)
{
switch(state)
{
/*坦克方向向右*/
case 0 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT90) ;
break ;
/*坦克方向向下*/
case 1 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT180) ;
break ;
/*坦克方向向左*/
case 2 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT270) ;
break ;
/*坦克方向向上*/
case 3 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_NONE) ;
break ;
}
}
/* 具体实现对方坦克方向的改变,具体实现同上 */
public void setTankDirection1(int state1)
{
switch(state1)
{
case 0 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT90) ;
break ;
case 1 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT180) ;
break ;
case 2 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT270) ;
break ;
case 3 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_NONE) ;
break ;
}
}
/*更新地图*/
public void render(Graphics g)
{
/*设置己方坦克的位置*/
c1.setPosition(x,y);
/*设置对方坦克的位置*/
c2.setPosition(ex,ey);
/*设置显示的大小*/
lm.setViewWindow(0,0,180,177);
/*从屏幕的左上角开始绘制*/
lm.paint(g,0,0);
flushGraphics() ;
}
/*封装数据并传送*/
public void sendto(int x1,int y1,int z1,int w1)
{
int x2=x1;
int y2=y1;
int z2=z1;
int w2=w1;
/*将所有的数据封装在一个字符串里面*/
String s3="";
s3=s3+x2;
s3=s3+":";
s3=s3+y2;
s3=s3+";";
s3=s3+z2;
s3=s3+",";
s3=s3+w2;
sender.send(s3);
}
/* 负的绘制*/
public void die1()
{
g.setColor(0xff0000) ;
g.drawString("YOU LOST",70,80,0) ;
//System.out.println("die1");
flushGraphics() ;
conti = false ;
}
/*胜的绘制*/
public void die2()
{
g.setColor(0xff0000) ;
g.drawString("YOU WIN",70,80,0) ;
//System.out.println("die2");
flushGraphics() ;
conti = false ;
}
/*和的绘制*/
public void die3()
{
g.setColor(0xff0000) ;
g.drawString(" DOGFALL ",70,80,0) ;
flushGraphics() ;
conti = false ;
}
/*外部以控制此线程的开始*/
public void start()
{
Thread t = new Thread(this) ;
t.start();
}
public void exit()
{
conti = false ;
}
}
{
switch(state)
{
/*坦克方向向右*/
case 0 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT90) ;
break ;
/*坦克方向向下*/
case 1 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT180) ;
break ;
/*坦克方向向左*/
case 2 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT270) ;
break ;
/*坦克方向向上*/
case 3 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_NONE) ;
break ;
}
}
/* 具体实现对方坦克方向的改变,具体实现同上 */
public void setTankDirection1(int state1)
{
switch(state1)
{
case 0 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT90) ;
break ;
case 1 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT180) ;
break ;
case 2 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT270) ;
break ;
case 3 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_NONE) ;
break ;
}
}
/*更新地图*/
public void render(Graphics g)
{
/*设置己方坦克的位置*/
c1.setPosition(x,y);
/*设置对方坦克的位置*/
c2.setPosition(ex,ey);
/*设置显示的大小*/
lm.setViewWindow(0,0,180,177);
/*从屏幕的左上角开始绘制*/
lm.paint(g,0,0);
flushGraphics() ;
}
/*封装数据并传送*/
public void sendto(int x1,int y1,int z1,int w1)
{
int x2=x1;
int y2=y1;
int z2=z1;
int w2=w1;
/*将所有的数据封装在一个字符串里面*/
String s3="";
s3=s3+x2;
s3=s3+":";
s3=s3+y2;
s3=s3+";";
s3=s3+z2;
s3=s3+",";
s3=s3+w2;
sender.send(s3);
}
/* 负的绘制*/
public void die1()
{
g.setColor(0xff0000) ;
g.drawString("YOU LOST",70,80,0) ;
//System.out.println("die1");
flushGraphics() ;
conti = false ;
}
/*胜的绘制*/
public void die2()
{
g.setColor(0xff0000) ;
g.drawString("YOU WIN",70,80,0) ;
//System.out.println("die2");
flushGraphics() ;
conti = false ;
}
/*和的绘制*/
public void die3()
{
g.setColor(0xff0000) ;
g.drawString(" DOGFALL ",70,80,0) ;
flushGraphics() ;
conti = false ;
}
/*外部以控制此线程的开始*/
public void start()
{
Thread t = new Thread(this) ;
t.start();
}
public void exit()
{
conti = false ;
}
}
#8
我现在也要搞这个.我的电子邮箱是dsdsdds@sohu.com
#9
打个包发给我吧,谢谢
iwantit_@hotmail.com
iwantit_@hotmail.com
#10
我很感兴趣,楼主能不能给我发一份:
hylbx2003@vip.sina.com
hylbx2003@vip.sina.com
#11
me too legsion@163.com谢谢
#12
up
#13
soho_suport@163.com
#14
zarm@21cn.com
谢谢楼主,我也是做j2me的:)
不过现在支持wtk2.1的手机不多啊
谢谢楼主,我也是做j2me的:)
不过现在支持wtk2.1的手机不多啊
#15
我也是做J2ME的
谢谢:)conan0267@yahoo.com.cn
谢谢:)conan0267@yahoo.com.cn
#16
向搂主致敬!万分感谢!!
zz2nn@yahoo.com.cn
zz2nn@yahoo.com.cn
#17
向搂主致敬!
happyejb@yahoo.com.cn
happyejb@yahoo.com.cn
#18
我把整个文件夹都发给你们。自己在wtk2.1下运行,如果有什么问题或有什么改良地方请上来说说.
收到后也上来up一下.
收到后也上来up一下.
#19
还没收到,热切期待中,谢谢楼主先!!
#20
楼主,
我好想要一份啊。
javadanny@163.com
谢谢楼主先
我好想要一份啊。
javadanny@163.com
谢谢楼主先
#21
现在我给你们都发了,去看一下,没收到的上来说一下。
#22
thanks to yg1982(游)
Would you like to give me a copy?
Maybe I could make some suggestions.
Email:zhangdong@shao.ac.cn
Would you like to give me a copy?
Maybe I could make some suggestions.
Email:zhangdong@shao.ac.cn
#23
cql0007@163.com
谢谢!
谢谢!
#24
楼主,算我一份,谢谢:
qqmyheart@163.com
qqmyheart@163.com
#25
Coooool,已经收到,多谢楼主~~正在研究中。。。Many Thanks!
#26
楼主:
看来我们是一个学校的哟;你厉害,
我现在做WAP方面的,
留个联系方式,因为我们都是:SWUST学校的
看来我们是一个学校的哟;你厉害,
我现在做WAP方面的,
留个联系方式,因为我们都是:SWUST学校的
#27
threejiaomao@163.com
thank you!
thank you!
#28
to all:
邮件我都发了,没收到的说一下。
to niyboy(JAVA爱好者):
我正在找工作中,准备在成都干。唉,现在本科生找工作难啊。我快要离校了,暂时就在这上面联系。
邮件我都发了,没收到的说一下。
to niyboy(JAVA爱好者):
我正在找工作中,准备在成都干。唉,现在本科生找工作难啊。我快要离校了,暂时就在这上面联系。
#29
楼主,源代码已收到,谢谢。有问题再和你联系,大家一起进步。
#30
楼主大功无私啊!为中国游戏业献身!
佩服佩服啊!!!!
想向你学习!!
支持楼主的想法!!
您的代码我在调试中,做进一步的修改!
楼主的图片可以发给我吗?
我的邮箱是:forpursue@hotmail.com
谢谢了!为中国的游戏业加油
佩服佩服啊!!!!
想向你学习!!
支持楼主的想法!!
您的代码我在调试中,做进一步的修改!
楼主的图片可以发给我吗?
我的邮箱是:forpursue@hotmail.com
谢谢了!为中国的游戏业加油
#31
一般吧
#32
holyelle@163.com
#33
vertarmy@163.com
thanks!
thanks!
#34
楼主,我也要啊
我的邮箱
yangfeimeng@yeah.net
谢谢了哦
我的邮箱
yangfeimeng@yeah.net
谢谢了哦
#35
收到了,呵呵,谢谢
#36
UP
谢谢楼主:)收到
谢谢楼主:)收到
#37
rufujian@163.net
#38
上面的都发了。
大家随便改啊,有什么小问题都可以说一下,谢谢大家了。
大家随便改啊,有什么小问题都可以说一下,谢谢大家了。
#39
能不能给我发一个,十分感谢!!
loverboyzb@163.com
loverboyzb@163.com
#40
kisspycn@msn.com
#41
楼主真牛啊,我是成都J2ME爱好者
也给个给我吧:Shadow_DLL@yahoo.com.cn
也给个给我吧:Shadow_DLL@yahoo.com.cn
#42
boyzxd@163.net
谢谢~
谢谢~
#43
能发一个给我吗?
louisbadbad@sohu.com
louisbadbad@sohu.com
#44
收到了,谢谢楼主
#45
收到了,谢谢楼主~~
#46
在手机模拟器上实现,现在游戏在wtk2.1下运行
对这个比较感兴趣,使开发手机游戏吧,谁能讲讲这方面的东西。
对这个比较感兴趣,使开发手机游戏吧,谁能讲讲这方面的东西。
#47
楼主,你好,可以给我发一份吗,
lanbaibai@hotmail.com
lanbaibai@hotmail.com
#48
楼主也给我发一份吧!谢谢了!鞠躬了!
jpuyang007@sina.com
jpuyang007@sina.com
#49
ME TOO.摟主你是好人 。wilcox1937@hotmail.com
#50
谢谢!你讲的很细,但是我以前的接触还不能吸收你的这些知识。
换个问法:如果我写了一个非常简单的手机应用程序,是直接就能插入一款手机里,还是要找一家比较小的公司(如:50万元以下)就可以,还是必须找那些大公司,得到他们的认可,才能在手机生产的某个阶段注入整个程序里。个人写的程序是现在就能,或者2~3年内就能得到手机操作系统的方便支持,就像windows支持应用程序?
换个问法:如果我写了一个非常简单的手机应用程序,是直接就能插入一款手机里,还是要找一家比较小的公司(如:50万元以下)就可以,还是必须找那些大公司,得到他们的认可,才能在手机生产的某个阶段注入整个程序里。个人写的程序是现在就能,或者2~3年内就能得到手机操作系统的方便支持,就像windows支持应用程序?
#1
/********************************************************************
Server类,服务器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Server implements Runnable, CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*定义服务器端开发的监听端口*/
ServerSocketConnection scn;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收客户端传来的数据*/
InputStream is;
/*定义输出流,以向客户端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Server(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Socket Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*服务器常驻5000端口*/
scn = (ServerSocketConnection) Connector.open("socket://:50000");
/*控制与前来请求的客户端建立连接*/
sc = (SocketConnection) scn.acceptAndOpen();
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(1,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果客户端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {}
}
}
Server类,服务器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Server implements Runnable, CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*定义服务器端开发的监听端口*/
ServerSocketConnection scn;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收客户端传来的数据*/
InputStream is;
/*定义输出流,以向客户端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Server(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Socket Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*服务器常驻5000端口*/
scn = (ServerSocketConnection) Connector.open("socket://:50000");
/*控制与前来请求的客户端建立连接*/
sc = (SocketConnection) scn.acceptAndOpen();
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(1,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果客户端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
if (scn != null) {
scn.close();
}
} catch (IOException ioe) {}
}
}
#2
/********************************************************************
Client类,客户器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Client implements Runnable,CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收服务器端传来的数据*/
InputStream is;
/*定义输出流,以向服务器端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Client(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Client Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*控制与服务器端建立连接*/
sc = (SocketConnection) Connector.open("socket://localhost:50000");
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(2,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
System.out.println("client 49");
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果服务器端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
} catch (IOException ioe) {}
}
}
/********************************************************************
Sender类,传输共用类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Sender extends Thread {
private OutputStream os;
private String message;
public Sender(OutputStream os) {
/*得到父类的输出流*/
this.os = os;
start();
}
public synchronized void send(String msg) {
/*得到父类的传输值*/
message = msg;
notify();
}
public synchronized void run() {
while(true) {
/*如果传输的数据没有被接收,则等待*/
if (message == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
if (message == null) {
break;
}
/*利用输出流传出数据,如果传到了目的端,则结束传输*/
try {
os.write(message.getBytes());
os.write("\n".getBytes());
stop();
} catch (IOException ioe) {
ioe.printStackTrace();
}
/* 标记,以用来重新传输*/
message = null;
}
}
/*结束传输*/
public synchronized void stop() {
message = null;
notify();
}
}
Client类,客户器端类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Client implements Runnable,CommandListener{
/*定义舞台*/
Display display;
/*定义父类,以供传递控制*/
GameMIDlet parent;
/*端口连接控制*/
SocketConnection sc;
/*定义输入流,以接收服务器端传来的数据*/
InputStream is;
/*定义输出流,以向服务器端发送数据*/
OutputStream os;
/*定义游戏控制类,以便实现游戏的初始化和控制*/
MyGameWithTiledLayerCanvas t;
/*标记传输是否结束*/
boolean stop;
/*定义画板*/
Graphics h;
/*定义个Alert以显示版本等信息*/
Alert al;
Command exitCommand=new Command("Exit", Command.EXIT, 1);
Command exitCommand1=new Command("结束", Command.EXIT, 1);
public Client(GameMIDlet m)
{
parent=m;
/*得到父类舞台*/
display = Display.getDisplay(parent);
/*对Alert进行设置*/
al = new Alert("Client Server");
al.setType(AlertType.INFO);
al.setTimeout(Alert.FOREVER);
al.setString("-------------------------------------"
+"版权所有(C)2004 ... "
+"作者:王勇 "
+"学校:SWUST "
+"编写日期:2004/05/29 "
+"整理日期:2004/06/19 "
+"-------------------------------------"
);
al.addCommand(exitCommand);
al.setCommandListener(this);
display.setCurrent(al);
}
public void start() {
/*线程*/
Thread t = new Thread(this);
t.start();
}
public void run()
{
try{
/*控制与服务器端建立连接*/
sc = (SocketConnection) Connector.open("socket://localhost:50000");
/*打开输入流*/
is = sc.openInputStream();
/*打开输出流*/
os = sc.openOutputStream();
/*以传递值开始游戏*/
t=new MyGameWithTiledLayerCanvas(2,os);
t.addCommand(exitCommand1);
t.setCommandListener(this);
display.setCurrent(t);
t.start();
/*不停地对数据进行接收并解析之,直到游戏结束*/
while(true)
{
/*将字节流转化为数据流*/
DataInputStream dis = new DataInputStream(is) ;
String sb="";
int c=0;
/*对数据的一次读入*/
while (((c = is.read()) != '\n') && (c != -1)) {
sb=sb+(char)c;
}
if (c == -1) {
System.out.println("client 49");
break;
}
/*数据解析还原*/
String sb1="",sb2="",sb3="",sb4="";
int size=sb.indexOf(":");
int size1=sb.indexOf(";");
int size2=sb.indexOf(",");
for(int i=0;i<size;i++)
sb1=sb1+sb.charAt(i);
for(int i=size+1;i<size1;i++)
sb2=sb2+sb.charAt(i);
for(int i=size1+1;i<size2;i++)
sb3=sb3+sb.charAt(i);
for(int i=size2+1;i<sb.length();i++)
sb4=sb4+sb.charAt(i);
Integer x1 = Integer.valueOf(sb1);
int x2 = x1.intValue();
x1=Integer.valueOf(sb2);
int y2=x1.intValue();
x1 = Integer.valueOf(sb3);
int z2 = x1.intValue();
x1 = Integer.valueOf(sb4);
int w2 = x1.intValue();
/*设置游戏控制部分的某些值以实现画面的互动*/
t.ex=x2;
t.ey=y2;
t.state1=w2;
/*如果服务器端的某个位置安了泡泡,服务器端也要安*/
if(z2!=-1)
{Bomb bomb=new Bomb(z2,t);
bomb.start();
}
}
/*当游戏结束,对相应资源的回收*/
t.exit();
stop();
parent.notifyDestroyed();
}
catch (IOException ioe) {
if (!stop) {
ioe.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
/*对一些按纽事件的处理*/
public void commandAction(Command c, Displayable s) {
String cmd =c.getLabel();
if(cmd.equals("Exit")){
parent.notifyDestroyed();
parent.destroyApp(true);
}
else if(cmd.equals("结束")){
t.exit();
stop();
parent.notifyDestroyed();
}
}
/*资源的回收*/
public void stop() {
try {
stop = true;
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (sc != null) {
sc.close();
}
} catch (IOException ioe) {}
}
}
/********************************************************************
Sender类,传输共用类:
*********************************************************************/
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class Sender extends Thread {
private OutputStream os;
private String message;
public Sender(OutputStream os) {
/*得到父类的输出流*/
this.os = os;
start();
}
public synchronized void send(String msg) {
/*得到父类的传输值*/
message = msg;
notify();
}
public synchronized void run() {
while(true) {
/*如果传输的数据没有被接收,则等待*/
if (message == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
if (message == null) {
break;
}
/*利用输出流传出数据,如果传到了目的端,则结束传输*/
try {
os.write(message.getBytes());
os.write("\n".getBytes());
stop();
} catch (IOException ioe) {
ioe.printStackTrace();
}
/* 标记,以用来重新传输*/
message = null;
}
}
/*结束传输*/
public synchronized void stop() {
message = null;
notify();
}
}
#3
/********************************************************************
Bomb类,爆炸控制类:
*********************************************************************/
public class Bomb extends Thread {
/*初始化炸弹延迟爆炸时间*/
int islow=4000;
/*初始化炸弹爆炸显示时间*/
int isleep=1000;
MyGameWithTiledLayerCanvas t;
int x,x1,x2;
boolean stopmark=false;
public Bomb(int tank,MyGameWithTiledLayerCanvas k)
{
t=k;
/*泡泡将放在地图数组的具体位置处*/
x=tank;
/*转换为列数*/
x1=x%11;
/*转换为行数*/
x2=x/11;
}
public void run()
{
while(!stopmark)
{
try{
t.flag=0;
/*改变放泡泡处的背景图案*/
t.updatetile1(x1,x2,1);
sleep(islow);
/*显示泡泡爆炸时的效果*/
t.updatetile(x1-1,x2,1);
t.updatetile(x1+1,x2,1);
t.updatetile(x1,x2-1,1);
t.updatetile(x1,x2+1,1);
t.updatetile(x1,x2,1);
sleep(isleep);
/*泡泡爆炸后效果*/
t.updatetile1(x1,x2,11);
t.updatetile(x1-1,x2,11);
t.updatetile(x1+1,x2,11);
t.updatetile(x1,x2-1,11);
t.updatetile(x1,x2+1,11);
/*对方胜,调用相应函数*/
if(t.flag==1)
t.die1();
/*己方胜,调用相应函数*/
else if(t.flag==2)
t.die2();
/*双方平局,调用相应函数*/
else if(t.flag==3)
t.die3();
stopmark=true;
}
catch(InterruptedException e){System.out.println("Bomb 37");}
}
}
}
/*
*还有个类,太长了,等有人回了再传上来
*/
Bomb类,爆炸控制类:
*********************************************************************/
public class Bomb extends Thread {
/*初始化炸弹延迟爆炸时间*/
int islow=4000;
/*初始化炸弹爆炸显示时间*/
int isleep=1000;
MyGameWithTiledLayerCanvas t;
int x,x1,x2;
boolean stopmark=false;
public Bomb(int tank,MyGameWithTiledLayerCanvas k)
{
t=k;
/*泡泡将放在地图数组的具体位置处*/
x=tank;
/*转换为列数*/
x1=x%11;
/*转换为行数*/
x2=x/11;
}
public void run()
{
while(!stopmark)
{
try{
t.flag=0;
/*改变放泡泡处的背景图案*/
t.updatetile1(x1,x2,1);
sleep(islow);
/*显示泡泡爆炸时的效果*/
t.updatetile(x1-1,x2,1);
t.updatetile(x1+1,x2,1);
t.updatetile(x1,x2-1,1);
t.updatetile(x1,x2+1,1);
t.updatetile(x1,x2,1);
sleep(isleep);
/*泡泡爆炸后效果*/
t.updatetile1(x1,x2,11);
t.updatetile(x1-1,x2,11);
t.updatetile(x1+1,x2,11);
t.updatetile(x1,x2-1,11);
t.updatetile(x1,x2+1,11);
/*对方胜,调用相应函数*/
if(t.flag==1)
t.die1();
/*己方胜,调用相应函数*/
else if(t.flag==2)
t.die2();
/*双方平局,调用相应函数*/
else if(t.flag==3)
t.die3();
stopmark=true;
}
catch(InterruptedException e){System.out.println("Bomb 37");}
}
}
}
/*
*还有个类,太长了,等有人回了再传上来
*/
#4
nako_ruru@sina.com
谢谢
谢谢
#5
/********************************************************************
MyGameWithTiledLayerCanvas类,游戏控制类:
*********************************************************************/
import javax.microedition.lcdui.* ;
import javax.microedition.lcdui.game.* ;
import java.io.*;
public class MyGameWithTiledLayerCanvas extends GameCanvas
implements Runnable
{
/*定义画板*/
Graphics g;
/*定义布局管理器*/
LayerManager lm ;
/*定义背景图层*/
TiledLayer b1 ;
/*定义精灵*/
Sprite c1 ;
Sprite c2;
/*定义Bomb类,用单独的线程控制泡泡的爆炸*/
Bomb bomb;
/*己方坦克在地图中的位置*/
int tank;
/*对方坦克在地图中的位置*/
int tank1;
/*初始化校对值*/
int WALL=0;
/*己方坦克的x坐标*/
int x ;
/*己方坦克的y坐标*/
int y ;
/*己方坦克方向初始值*/
int state = 0 ;
/*对方坦克方向初始值*/
int state1=0;
/*对方坦克x坐标*/
int ex;
/*对方坦克y坐标 */
int ey;
/*胜负标记初始化*/
int flag=0;
/*坦克位置标记初始化*/
int flag1;
/*定义输出流以实现数据的输出*/
OutputStream os;
/*定义Sender类以操纵数据的输出*/
Sender sender;
/*地图数组初始化*/
int[] map={
11,11,3,11,11,3,11,11,11,11,11,
11,11,2,11,3,11,3,2,3,11,3,
11,11,3,2,11,11,2,11,11,3,11,
3,2,3,11,2,11,11,11,3,11,3,
11,11,2,11,3,11,2,11,11,3,11,
11,2,3,11,11,3,11,11,11,11,11,
3,11,3,11,3,11,11,2,11,11,11,
11,2,3,11,11,11,3,11,3,2,3,
3,11,11,11,11,11,11,3,11,11,11,
11,11,11,11,11,2,3,11,11,11,11
};
/*这个函数可以实现地图所有图象的初始化*/
public MyGameWithTiledLayerCanvas(int x1,OutputStream os1)
{
super(true) ;;
flag1=x1;
/*如果flag1=1就说明己方为服务器,只是对坦克的位置进行初始化*/
if(flag1==1)
{x=0;
y=0;
ex=160;
ey=153;
tank=0;
}
/*flag1!=1就说明己方为客户端了*/
else
{x=160;
y=153;
ex=0;
ey=0;
tank=109;
}
/*初始化输出流为主函数同一个输出流*/
os=os1;
sender=new Sender(os);
lm = new LayerManager() ;
/*调用构造函数实现地图背景的绘制*/
b1 = createBackGround() ;
/*实现坦克的绘制*/
c1 = createTank("/pic/tank2.png") ;
c2=createTank("/pic/tank2.png") ;
/*将所有景象在屏幕上显示出来*/
lm.append(c1);
lm.append(c2);
lm.append(b1);
}
/*在源图片上切一个16*16大小的小图片作为坦克的景象,返回值为sprite对象*/
private Sprite createTank(String pic)
{
Image img = null ;
try
{
img = Image.createImage(pic);
}catch(Exception exp)
{
System.out.println(exp);
}
return new Sprite(img,16,16) ;
}
/*按照地图数组将地图背景初始化*/
public TiledLayer createBackGround()
{
Image img = null;
try
{
img = Image.createImage("/pic/border.png");
}catch(Exception exp)
{
System.out.println(exp) ;
}
/*地图格子11*10,每格大小16*17*/
TiledLayer tiledLayer = new TiledLayer(11, 10, img, 16, 17);
/*将地图格子填充*/
for (int i = 0; i < map.length; i++)
{
int column = i % 11;
int row = (i-column)/ 11;
tiledLayer.setCell(column, row, map[i]);
//System.out.println(i+";"+column+";"+row);
}
return tiledLayer;
}
/*循环条件初始化*/
boolean conti = true ;
/*设定缓冲时间以实现在不同机器上速度同步*/
int rate = 150 ;
public void run()
{
long st = 0 ;
long et = 0 ;
g = getGraphics() ;
while(conti)
{
st = System.currentTimeMillis() ;
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
input() ;
/*改变坦克的方向*/
rotate();
tank1=ex/16+(ey/17)*11;
/*重绘地图*/
render(g) ;
/*实现快机时间延缓*/
et = System.currentTimeMillis() ;
if((et-st)<rate)
{
try
{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
MyGameWithTiledLayerCanvas类,游戏控制类:
*********************************************************************/
import javax.microedition.lcdui.* ;
import javax.microedition.lcdui.game.* ;
import java.io.*;
public class MyGameWithTiledLayerCanvas extends GameCanvas
implements Runnable
{
/*定义画板*/
Graphics g;
/*定义布局管理器*/
LayerManager lm ;
/*定义背景图层*/
TiledLayer b1 ;
/*定义精灵*/
Sprite c1 ;
Sprite c2;
/*定义Bomb类,用单独的线程控制泡泡的爆炸*/
Bomb bomb;
/*己方坦克在地图中的位置*/
int tank;
/*对方坦克在地图中的位置*/
int tank1;
/*初始化校对值*/
int WALL=0;
/*己方坦克的x坐标*/
int x ;
/*己方坦克的y坐标*/
int y ;
/*己方坦克方向初始值*/
int state = 0 ;
/*对方坦克方向初始值*/
int state1=0;
/*对方坦克x坐标*/
int ex;
/*对方坦克y坐标 */
int ey;
/*胜负标记初始化*/
int flag=0;
/*坦克位置标记初始化*/
int flag1;
/*定义输出流以实现数据的输出*/
OutputStream os;
/*定义Sender类以操纵数据的输出*/
Sender sender;
/*地图数组初始化*/
int[] map={
11,11,3,11,11,3,11,11,11,11,11,
11,11,2,11,3,11,3,2,3,11,3,
11,11,3,2,11,11,2,11,11,3,11,
3,2,3,11,2,11,11,11,3,11,3,
11,11,2,11,3,11,2,11,11,3,11,
11,2,3,11,11,3,11,11,11,11,11,
3,11,3,11,3,11,11,2,11,11,11,
11,2,3,11,11,11,3,11,3,2,3,
3,11,11,11,11,11,11,3,11,11,11,
11,11,11,11,11,2,3,11,11,11,11
};
/*这个函数可以实现地图所有图象的初始化*/
public MyGameWithTiledLayerCanvas(int x1,OutputStream os1)
{
super(true) ;;
flag1=x1;
/*如果flag1=1就说明己方为服务器,只是对坦克的位置进行初始化*/
if(flag1==1)
{x=0;
y=0;
ex=160;
ey=153;
tank=0;
}
/*flag1!=1就说明己方为客户端了*/
else
{x=160;
y=153;
ex=0;
ey=0;
tank=109;
}
/*初始化输出流为主函数同一个输出流*/
os=os1;
sender=new Sender(os);
lm = new LayerManager() ;
/*调用构造函数实现地图背景的绘制*/
b1 = createBackGround() ;
/*实现坦克的绘制*/
c1 = createTank("/pic/tank2.png") ;
c2=createTank("/pic/tank2.png") ;
/*将所有景象在屏幕上显示出来*/
lm.append(c1);
lm.append(c2);
lm.append(b1);
}
/*在源图片上切一个16*16大小的小图片作为坦克的景象,返回值为sprite对象*/
private Sprite createTank(String pic)
{
Image img = null ;
try
{
img = Image.createImage(pic);
}catch(Exception exp)
{
System.out.println(exp);
}
return new Sprite(img,16,16) ;
}
/*按照地图数组将地图背景初始化*/
public TiledLayer createBackGround()
{
Image img = null;
try
{
img = Image.createImage("/pic/border.png");
}catch(Exception exp)
{
System.out.println(exp) ;
}
/*地图格子11*10,每格大小16*17*/
TiledLayer tiledLayer = new TiledLayer(11, 10, img, 16, 17);
/*将地图格子填充*/
for (int i = 0; i < map.length; i++)
{
int column = i % 11;
int row = (i-column)/ 11;
tiledLayer.setCell(column, row, map[i]);
//System.out.println(i+";"+column+";"+row);
}
return tiledLayer;
}
/*循环条件初始化*/
boolean conti = true ;
/*设定缓冲时间以实现在不同机器上速度同步*/
int rate = 150 ;
public void run()
{
long st = 0 ;
long et = 0 ;
g = getGraphics() ;
while(conti)
{
st = System.currentTimeMillis() ;
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
input() ;
/*改变坦克的方向*/
rotate();
tank1=ex/16+(ey/17)*11;
/*重绘地图*/
render(g) ;
/*实现快机时间延缓*/
et = System.currentTimeMillis() ;
if((et-st)<rate)
{
try
{
Thread.sleep(rate-(et-st));
}catch(Exception exp){}
}
}
}
#6
/*
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
public void input()
{
int keystate = getKeyStates() ;
/*向上键被按下*/
if((keystate & UP_PRESSED)!=0)
{
/*坦克格子位的改变*/
tank=tank-11;
/*判断是否能移动*/
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
/*坦克当前朝向*/
state=3;
/*坦克坐标的改变*/
y=y-17;
//判断上边界
if( y <= 0 )
y = 0 ;
/*发送改变的一些数据*/
sendto(x,y,-1,state);
}
else tank=tank+11;
}
/*向下键被按下,下面注解同上*/
if((keystate & DOWN_PRESSED)!=0)
{
tank=tank+11;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=1;
y=y+17;
//判断下边界
if( y >= 153 )
y = 153 ;
sendto(x,y,-1,state);
}
else tank=tank-11;
}
/*向左键被按下*/
if((keystate & LEFT_PRESSED)!=0)
{
tank=tank-1;
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=2;
x=x-16;
//判断左边界
if( x <0 )
{ x = 0 ;
tank=tank+1;}
sendto(x,y,-1,state);
}
else tank=tank+1;
}
/*向右键被按下*/
if((keystate & RIGHT_PRESSED)!=0)
{
tank=tank+1;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=0;
x=x+16;
//判断右边界
if( x >=176 )
{x = 160 ;
tank=tank-1;}
sendto(x,y,-1,state);
}
else tank=tank-1;
}
/*回车键被按下*/
if((keystate&FIRE_PRESSED)!=0)
{
/*在相应位置放下泡泡*/
bomb=new Bomb(tank,this);
/*泡泡爆炸线程启动*/
bomb.start();
sendto(x,y,tank,state);
}
}
/*更新地图,放泡泡时被调用*/
public void updatetile1(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
/*算出在地图数组中的位置*/
z2=x1+y1*11;
/*改变地图数组的相应值*/
map[z2]=18;
if(z1==11)
map[z2]=11;
b1.setCell(x1,y1,z1);
}
/* 更新地图,泡泡爆炸时被调用*/
public void updatetile(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
z2=x1+y1*11;
/*判断泡泡的爆炸范围*/
if(z2<=109&&z2>=0)
if(x1>=0&&x1<=10&&y1>=0&&y1<=9&&map[z2]!=2)
b1.setCell(x1,y1,z1);
/*判断是否炸到坦克,确定出相应的胜负*/
if(z2==tank)
if(flag==2)
flag=3;
else if(flag==0)
flag=1;
if(z2==tank1)
if(flag==1)
flag=3;
else if(flag==0)
flag=2;
if(z2<=109&&z2>=0)
if(map[z2]==3)
map[z2]=11;
}
/*坦克方向的改变*/
public void rotate()
{
setTankDirection(state) ;
setTankDirection1(state1) ;
}
/*具体实现己方坦克方向的改变*/
*侦测输入,根据不同的输入处理坐标的改变,
*状态的改变以及数据的传送
*/
public void input()
{
int keystate = getKeyStates() ;
/*向上键被按下*/
if((keystate & UP_PRESSED)!=0)
{
/*坦克格子位的改变*/
tank=tank-11;
/*判断是否能移动*/
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
/*坦克当前朝向*/
state=3;
/*坦克坐标的改变*/
y=y-17;
//判断上边界
if( y <= 0 )
y = 0 ;
/*发送改变的一些数据*/
sendto(x,y,-1,state);
}
else tank=tank+11;
}
/*向下键被按下,下面注解同上*/
if((keystate & DOWN_PRESSED)!=0)
{
tank=tank+11;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=1;
y=y+17;
//判断下边界
if( y >= 153 )
y = 153 ;
sendto(x,y,-1,state);
}
else tank=tank-11;
}
/*向左键被按下*/
if((keystate & LEFT_PRESSED)!=0)
{
tank=tank-1;
if((tank>=0)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=2;
x=x-16;
//判断左边界
if( x <0 )
{ x = 0 ;
tank=tank+1;}
sendto(x,y,-1,state);
}
else tank=tank+1;
}
/*向右键被按下*/
if((keystate & RIGHT_PRESSED)!=0)
{
tank=tank+1;
if((tank<=109)&&((map[tank]|WALL)!=2)&&((map[tank]|WALL)!=18)
&&((map[tank]|WALL)!=3))
{
state=0;
x=x+16;
//判断右边界
if( x >=176 )
{x = 160 ;
tank=tank-1;}
sendto(x,y,-1,state);
}
else tank=tank-1;
}
/*回车键被按下*/
if((keystate&FIRE_PRESSED)!=0)
{
/*在相应位置放下泡泡*/
bomb=new Bomb(tank,this);
/*泡泡爆炸线程启动*/
bomb.start();
sendto(x,y,tank,state);
}
}
/*更新地图,放泡泡时被调用*/
public void updatetile1(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
/*算出在地图数组中的位置*/
z2=x1+y1*11;
/*改变地图数组的相应值*/
map[z2]=18;
if(z1==11)
map[z2]=11;
b1.setCell(x1,y1,z1);
}
/* 更新地图,泡泡爆炸时被调用*/
public void updatetile(int x,int y,int z)
{int x1,y1,z1,z2;
x1=x;
y1=y;
z1=z;
z2=x1+y1*11;
/*判断泡泡的爆炸范围*/
if(z2<=109&&z2>=0)
if(x1>=0&&x1<=10&&y1>=0&&y1<=9&&map[z2]!=2)
b1.setCell(x1,y1,z1);
/*判断是否炸到坦克,确定出相应的胜负*/
if(z2==tank)
if(flag==2)
flag=3;
else if(flag==0)
flag=1;
if(z2==tank1)
if(flag==1)
flag=3;
else if(flag==0)
flag=2;
if(z2<=109&&z2>=0)
if(map[z2]==3)
map[z2]=11;
}
/*坦克方向的改变*/
public void rotate()
{
setTankDirection(state) ;
setTankDirection1(state1) ;
}
/*具体实现己方坦克方向的改变*/
#7
public void setTankDirection(int state)
{
switch(state)
{
/*坦克方向向右*/
case 0 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT90) ;
break ;
/*坦克方向向下*/
case 1 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT180) ;
break ;
/*坦克方向向左*/
case 2 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT270) ;
break ;
/*坦克方向向上*/
case 3 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_NONE) ;
break ;
}
}
/* 具体实现对方坦克方向的改变,具体实现同上 */
public void setTankDirection1(int state1)
{
switch(state1)
{
case 0 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT90) ;
break ;
case 1 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT180) ;
break ;
case 2 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT270) ;
break ;
case 3 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_NONE) ;
break ;
}
}
/*更新地图*/
public void render(Graphics g)
{
/*设置己方坦克的位置*/
c1.setPosition(x,y);
/*设置对方坦克的位置*/
c2.setPosition(ex,ey);
/*设置显示的大小*/
lm.setViewWindow(0,0,180,177);
/*从屏幕的左上角开始绘制*/
lm.paint(g,0,0);
flushGraphics() ;
}
/*封装数据并传送*/
public void sendto(int x1,int y1,int z1,int w1)
{
int x2=x1;
int y2=y1;
int z2=z1;
int w2=w1;
/*将所有的数据封装在一个字符串里面*/
String s3="";
s3=s3+x2;
s3=s3+":";
s3=s3+y2;
s3=s3+";";
s3=s3+z2;
s3=s3+",";
s3=s3+w2;
sender.send(s3);
}
/* 负的绘制*/
public void die1()
{
g.setColor(0xff0000) ;
g.drawString("YOU LOST",70,80,0) ;
//System.out.println("die1");
flushGraphics() ;
conti = false ;
}
/*胜的绘制*/
public void die2()
{
g.setColor(0xff0000) ;
g.drawString("YOU WIN",70,80,0) ;
//System.out.println("die2");
flushGraphics() ;
conti = false ;
}
/*和的绘制*/
public void die3()
{
g.setColor(0xff0000) ;
g.drawString(" DOGFALL ",70,80,0) ;
flushGraphics() ;
conti = false ;
}
/*外部以控制此线程的开始*/
public void start()
{
Thread t = new Thread(this) ;
t.start();
}
public void exit()
{
conti = false ;
}
}
{
switch(state)
{
/*坦克方向向右*/
case 0 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT90) ;
break ;
/*坦克方向向下*/
case 1 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT180) ;
break ;
/*坦克方向向左*/
case 2 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_ROT270) ;
break ;
/*坦克方向向上*/
case 3 :
c1.setFrame(0) ;
c1.setTransform(c1.TRANS_NONE) ;
break ;
}
}
/* 具体实现对方坦克方向的改变,具体实现同上 */
public void setTankDirection1(int state1)
{
switch(state1)
{
case 0 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT90) ;
break ;
case 1 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT180) ;
break ;
case 2 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_ROT270) ;
break ;
case 3 :
c2.setFrame(0) ;
c2.setTransform(c2.TRANS_NONE) ;
break ;
}
}
/*更新地图*/
public void render(Graphics g)
{
/*设置己方坦克的位置*/
c1.setPosition(x,y);
/*设置对方坦克的位置*/
c2.setPosition(ex,ey);
/*设置显示的大小*/
lm.setViewWindow(0,0,180,177);
/*从屏幕的左上角开始绘制*/
lm.paint(g,0,0);
flushGraphics() ;
}
/*封装数据并传送*/
public void sendto(int x1,int y1,int z1,int w1)
{
int x2=x1;
int y2=y1;
int z2=z1;
int w2=w1;
/*将所有的数据封装在一个字符串里面*/
String s3="";
s3=s3+x2;
s3=s3+":";
s3=s3+y2;
s3=s3+";";
s3=s3+z2;
s3=s3+",";
s3=s3+w2;
sender.send(s3);
}
/* 负的绘制*/
public void die1()
{
g.setColor(0xff0000) ;
g.drawString("YOU LOST",70,80,0) ;
//System.out.println("die1");
flushGraphics() ;
conti = false ;
}
/*胜的绘制*/
public void die2()
{
g.setColor(0xff0000) ;
g.drawString("YOU WIN",70,80,0) ;
//System.out.println("die2");
flushGraphics() ;
conti = false ;
}
/*和的绘制*/
public void die3()
{
g.setColor(0xff0000) ;
g.drawString(" DOGFALL ",70,80,0) ;
flushGraphics() ;
conti = false ;
}
/*外部以控制此线程的开始*/
public void start()
{
Thread t = new Thread(this) ;
t.start();
}
public void exit()
{
conti = false ;
}
}
#8
我现在也要搞这个.我的电子邮箱是dsdsdds@sohu.com
#9
打个包发给我吧,谢谢
iwantit_@hotmail.com
iwantit_@hotmail.com
#10
我很感兴趣,楼主能不能给我发一份:
hylbx2003@vip.sina.com
hylbx2003@vip.sina.com
#11
me too legsion@163.com谢谢
#12
up
#13
soho_suport@163.com
#14
zarm@21cn.com
谢谢楼主,我也是做j2me的:)
不过现在支持wtk2.1的手机不多啊
谢谢楼主,我也是做j2me的:)
不过现在支持wtk2.1的手机不多啊
#15
我也是做J2ME的
谢谢:)conan0267@yahoo.com.cn
谢谢:)conan0267@yahoo.com.cn
#16
向搂主致敬!万分感谢!!
zz2nn@yahoo.com.cn
zz2nn@yahoo.com.cn
#17
向搂主致敬!
happyejb@yahoo.com.cn
happyejb@yahoo.com.cn
#18
我把整个文件夹都发给你们。自己在wtk2.1下运行,如果有什么问题或有什么改良地方请上来说说.
收到后也上来up一下.
收到后也上来up一下.
#19
还没收到,热切期待中,谢谢楼主先!!
#20
楼主,
我好想要一份啊。
javadanny@163.com
谢谢楼主先
我好想要一份啊。
javadanny@163.com
谢谢楼主先
#21
现在我给你们都发了,去看一下,没收到的上来说一下。
#22
thanks to yg1982(游)
Would you like to give me a copy?
Maybe I could make some suggestions.
Email:zhangdong@shao.ac.cn
Would you like to give me a copy?
Maybe I could make some suggestions.
Email:zhangdong@shao.ac.cn
#23
cql0007@163.com
谢谢!
谢谢!
#24
楼主,算我一份,谢谢:
qqmyheart@163.com
qqmyheart@163.com
#25
Coooool,已经收到,多谢楼主~~正在研究中。。。Many Thanks!
#26
楼主:
看来我们是一个学校的哟;你厉害,
我现在做WAP方面的,
留个联系方式,因为我们都是:SWUST学校的
看来我们是一个学校的哟;你厉害,
我现在做WAP方面的,
留个联系方式,因为我们都是:SWUST学校的
#27
threejiaomao@163.com
thank you!
thank you!
#28
to all:
邮件我都发了,没收到的说一下。
to niyboy(JAVA爱好者):
我正在找工作中,准备在成都干。唉,现在本科生找工作难啊。我快要离校了,暂时就在这上面联系。
邮件我都发了,没收到的说一下。
to niyboy(JAVA爱好者):
我正在找工作中,准备在成都干。唉,现在本科生找工作难啊。我快要离校了,暂时就在这上面联系。
#29
楼主,源代码已收到,谢谢。有问题再和你联系,大家一起进步。
#30
楼主大功无私啊!为中国游戏业献身!
佩服佩服啊!!!!
想向你学习!!
支持楼主的想法!!
您的代码我在调试中,做进一步的修改!
楼主的图片可以发给我吗?
我的邮箱是:forpursue@hotmail.com
谢谢了!为中国的游戏业加油
佩服佩服啊!!!!
想向你学习!!
支持楼主的想法!!
您的代码我在调试中,做进一步的修改!
楼主的图片可以发给我吗?
我的邮箱是:forpursue@hotmail.com
谢谢了!为中国的游戏业加油
#31
一般吧
#32
holyelle@163.com
#33
vertarmy@163.com
thanks!
thanks!
#34
楼主,我也要啊
我的邮箱
yangfeimeng@yeah.net
谢谢了哦
我的邮箱
yangfeimeng@yeah.net
谢谢了哦
#35
收到了,呵呵,谢谢
#36
UP
谢谢楼主:)收到
谢谢楼主:)收到
#37
rufujian@163.net
#38
上面的都发了。
大家随便改啊,有什么小问题都可以说一下,谢谢大家了。
大家随便改啊,有什么小问题都可以说一下,谢谢大家了。
#39
能不能给我发一个,十分感谢!!
loverboyzb@163.com
loverboyzb@163.com
#40
kisspycn@msn.com
#41
楼主真牛啊,我是成都J2ME爱好者
也给个给我吧:Shadow_DLL@yahoo.com.cn
也给个给我吧:Shadow_DLL@yahoo.com.cn
#42
boyzxd@163.net
谢谢~
谢谢~
#43
能发一个给我吗?
louisbadbad@sohu.com
louisbadbad@sohu.com
#44
收到了,谢谢楼主
#45
收到了,谢谢楼主~~
#46
在手机模拟器上实现,现在游戏在wtk2.1下运行
对这个比较感兴趣,使开发手机游戏吧,谁能讲讲这方面的东西。
对这个比较感兴趣,使开发手机游戏吧,谁能讲讲这方面的东西。
#47
楼主,你好,可以给我发一份吗,
lanbaibai@hotmail.com
lanbaibai@hotmail.com
#48
楼主也给我发一份吧!谢谢了!鞠躬了!
jpuyang007@sina.com
jpuyang007@sina.com
#49
ME TOO.摟主你是好人 。wilcox1937@hotmail.com
#50
谢谢!你讲的很细,但是我以前的接触还不能吸收你的这些知识。
换个问法:如果我写了一个非常简单的手机应用程序,是直接就能插入一款手机里,还是要找一家比较小的公司(如:50万元以下)就可以,还是必须找那些大公司,得到他们的认可,才能在手机生产的某个阶段注入整个程序里。个人写的程序是现在就能,或者2~3年内就能得到手机操作系统的方便支持,就像windows支持应用程序?
换个问法:如果我写了一个非常简单的手机应用程序,是直接就能插入一款手机里,还是要找一家比较小的公司(如:50万元以下)就可以,还是必须找那些大公司,得到他们的认可,才能在手机生产的某个阶段注入整个程序里。个人写的程序是现在就能,或者2~3年内就能得到手机操作系统的方便支持,就像windows支持应用程序?