📄 canvaswaitingroom.java
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
public class CanvasWaitingRoom extends GameCanvas implements Runnable{
DatagramConnection dc;
ListTable lt;
int id;
int tableId=0;
int pw=50;
int ph=60;//玩家信息绘制长度区域
Image male,female,desk;
String nickname[]=new String[3];
String score[]=new String[3];
String sex[]=new String[3];
int state[]={0,0,0};
int num=1;//玩家人数
int readyState[]={0,0,0};
int readyNum=0;
boolean isReady=false;//是否正在等待其他玩家准备。
Graphics g;
Font f = Font.getDefaultFont();
int fh;
boolean repetition=true;
CanvasLord canvasLord;
//
boolean isFirstWork=true;
//这个变量需小心设置,控制申请的线程个数,假如不用此变量将会出现多个线程同时运行
public CanvasWaitingRoom(ListTable l,int t)
{
super(true);
tableId=t;
lt=l;
g=this.getGraphics();
for(int i=0;i<3;i++)
{
nickname[i]="";
score[i]="";
sex[i]="";
}
id=lt.id;
nickname[1]=lt.nickname;
sex[1]=lt.sex;
score[1]=lt.score;
state[1]=1;
try
{
desk=Image.createImage("/res/desk.png");
male=Image.createImage("/res/boyh.png");
female=Image.createImage("/res/girlh.png");
}
catch(Exception e)
{
System.out.println("yichang:"+e.toString());///
}
fh=f.getHeight();
ph=40+fh+2+fh;
draw(g);
//
canvasLord=new CanvasLord(this);
}
public void work()
{
Thread t=new Thread(this);
t.start();
}
public void draw(Graphics g)
{
g.setColor(174,61,17);//褐色
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(42,199,30);//绿色
g.fillRect(7, 7, getWidth()-14, 10+ph+20+ph+10-14);
g.setColor(126,194,254);//浅蓝色
g.fillRect(7, 10+ph+20+ph+8, getWidth()-14, getHeight()-10-ph-20-ph-14);
if(state[0]==1)
{
g.setColor(0, 0, 0);
g.drawString(nickname[0], 10+pw/2, 10, Graphics.TOP|Graphics.HCENTER);
g.drawString(score[0],10+pw/2,10+fh+2,Graphics.TOP|Graphics.HCENTER );
if(sex[0].equals("male"))
g.drawImage(male, 10+pw/2, 10+fh+2+fh, Graphics.TOP|Graphics.HCENTER );
else
g.drawImage(female, 10+pw/2, 10+fh+2+fh, Graphics.TOP|Graphics.HCENTER );
}
else
{
g.setColor(255, 255, 255);
g.drawRect(20, 40, pw, pw);
}
if(state[2]==1)
{
g.setColor(0, 0, 0);
g.drawString(nickname[2], getWidth()-10-pw/2, 10, Graphics.TOP|Graphics.HCENTER);
g.drawString(score[2],getWidth()-10-pw/2,10+fh+2,Graphics.TOP|Graphics.HCENTER );
if(sex[2].equals("male"))
g.drawImage(male,getWidth()-10-pw/2, 10+fh+2+fh, Graphics.TOP|Graphics.HCENTER );
else
g.drawImage(female, getWidth()-10-pw/2, 10+fh+2+fh, Graphics.TOP|Graphics.HCENTER );
}
else
{
g.setColor(255, 255, 255);
g.drawRect(getWidth()-20-pw, 40, pw, pw);
}
if(sex[1].equals("male"))
g.drawImage(male, getWidth()/2, 10+ph+20, Graphics.TOP|Graphics.HCENTER);
else
g.drawImage(female, getWidth()/2, 10+ph+20, Graphics.TOP|Graphics.HCENTER);
g.setColor(0, 0, 0);
g.drawString(nickname[1], getWidth()/2, 10+ph+20+40, Graphics.TOP|Graphics.HCENTER);
g.drawString(score[1], getWidth()/2, 10+ph+20+40+fh+2, Graphics.TOP|Graphics.HCENTER);
g.drawImage(desk, getWidth()/2, 10+ph+18, Graphics.BOTTOM|Graphics.HCENTER);
g.drawString("正在等待其他玩家加入...",10, 10+ph+20+ph+10, Graphics.TOP|Graphics.LEFT);
int ccnt=1;
if(state[0]==1)
{
g.drawString("玩家"+nickname[0]+"已加入游戏...",10, 10+ph+20+ph+10+ccnt*fh, Graphics.TOP|Graphics.LEFT);
ccnt++;
}
if(state[1]==1)
{
g.drawString("玩家"+nickname[1]+"已加入游戏...",10, 10+ph+20+ph+10+ccnt*fh, Graphics.TOP|Graphics.LEFT);
ccnt++;
}
if(state[2]==1)
{
g.drawString("玩家"+nickname[2]+"已加入游戏...",10, 10+ph+20+ph+10+ccnt*fh, Graphics.TOP|Graphics.LEFT);
ccnt++;
}
flushGraphics();
}
public void run()
{
try
{
dc=(DatagramConnection)Connector.open("datagram://127.0.0.1:"+lt.port);
String str1="NEW#"+String.valueOf(tableId)+"#"+String.valueOf(lt.id)
+"#"+nickname[1]+"#"+sex[1]+"#"+score[1]+"#";
send(str1);//send own infomation to server
while(repetition)
{
Datagram dg=dc.newDatagram(100);
dc.receive(dg);
String data;
if(dg.getLength()>0)
{
data=new String(dg.getData(),0,dg.getLength());
System.out.println("Data receive:"+data);///////////
StringParse rcvData = new StringParse(data,'#');
rcvData.getNextToken();
if(data.startsWith("PLAYERUPINFO"))
{//数据格式 PLAYERUPINFO#jordan#male#257#
state[0]=1;
nickname[0]=rcvData.getNextToken();
sex[0]=rcvData.getNextToken();
score[0]=rcvData.getNextToken();
draw(g);
}
else if(data.startsWith("PLAYERDOWNINFO"))
{
state[2]=1;
nickname[2]=rcvData.getNextToken();
sex[2]=rcvData.getNextToken();
score[2]=rcvData.getNextToken();
draw(g);
}
else if(data.startsWith("TWOPLAYERSINFO"))
{// TWOPLAYERSINFO#jordan#male#257#lily#female#2045#
nickname[0]=rcvData.getNextToken();
sex[0]=rcvData.getNextToken();
score[0]=rcvData.getNextToken();
state[0]=1;
nickname[2]=rcvData.getNextToken();
sex[2]=rcvData.getNextToken();
score[2]=rcvData.getNextToken();
state[2]=1;
draw(g);
//break;
}
else if(data.startsWith("PEASANTCARDS"))
{
try
{
for(int i=0;i<17;i++)
{
String tmp=rcvData.getNextToken();
canvasLord.pai[i]=Integer.parseInt(tmp);
System.out.print(canvasLord.pai[i]+",");//////////
}
canvasLord.cardNum=17;
canvasLord.num=17;
lt.display.setCurrent(canvasLord);
canvasLord.allot(17);
if(isFirstWork)
{
canvasLord.work();//每次都申请一个新的线程,需改变
isFirstWork=false;
}
}
catch(Exception e)
{
System.out.println(e.toString());/////////
}
}
else if(data.startsWith("PLSCALL"))
{//PLSCALL#1#
int tmp=Integer.parseInt(rcvData.getNextToken());
canvasLord.mincall=tmp;
canvasLord.selected=tmp-1;//
canvasLord.iscall=true;
}
else if(data.startsWith("LORDCARDS"))
{
canvasLord.dz=1;
canvasLord.overcall=true;
try
{
for(int i=0;i<20;i++)
{
String tmp=rcvData.getNextToken();
canvasLord.pai[i]=Integer.parseInt(tmp);
System.out.print(canvasLord.pai[i]+",");//////////
}
canvasLord.cardNum=20;
canvasLord.num=20;
canvasLord.isLord=true;
lt.display.setCurrent(canvasLord);
canvasLord.allot(20);
for(int i=0;i<3;i++)
{
String tmp=rcvData.getNextToken();
canvasLord.pai3[i]=Integer.parseInt(tmp);
}
canvasLord.right=true;/////////
canvasLord.rightId=1;
canvasLord.rightType=1;/////
//isReady=false;
}
catch(Exception e)
{
System.out.println(e.toString());/////////
}
}
else if(data.startsWith("LORDUP"))
{
canvasLord.dz=0;
canvasLord.overcall=true;
for(int i=0;i<3;i++)
{
String tmp=rcvData.getNextToken();
canvasLord.pai3[i]=Integer.parseInt(tmp);
}
canvasLord.rightId=0;////
canvasLord.leftnum0=20;
//isReady=false;
}
else if(data.startsWith("LORDDOWN"))
{
canvasLord.dz=2;
canvasLord.overcall=true;
for(int i=0;i<3;i++)
{
String tmp=rcvData.getNextToken();
canvasLord.pai3[i]=Integer.parseInt(tmp);
}
canvasLord.rightId=2;////
canvasLord.leftnum2=20;
//isReady=false;
}
else if(data.startsWith("CARDSDOWN"))
{//cardsdown#牌的总数#3#5#..
int nums=Integer.parseInt(rcvData.getNextToken());
canvasLord.sendnum2=nums;
for(int i=0;i<nums;i++)
{
canvasLord.sendpai2[i]=Integer.parseInt(rcvData.getNextToken());
}
canvasLord.leftnum2-=nums;
}
else if(data.startsWith("CARDSUP"))
{//cardsup#牌的总数#3#5#..
int nums=Integer.parseInt(rcvData.getNextToken());
canvasLord.sendnum0=nums;
for(int i=0;i<nums;i++)
{
canvasLord.sendpai0[i]=Integer.parseInt(rcvData.getNextToken());
}
canvasLord.leftnum0-=nums;
}
else if(data.startsWith("RIGHTSEND"))
{
canvasLord.right=true;/////////////////
canvasLord.rightId=1;
canvasLord.rightType=0;
}
else if(data.startsWith("RIGHTUP"))
{
canvasLord.rightId=0;
}
else if(data.startsWith("RIGHTTYPE"))
{
canvasLord.rightType=0;
}
else if(data.startsWith("NOSENDDOWN"))
{
canvasLord.sendnum2=0;
canvasLord.rightId=0;
}
else if(data.startsWith("NOSENDUP"))
{
canvasLord.sendnum0=0;
canvasLord.right=true;
canvasLord.rightId=1;
}
else if(data.startsWith("CALLTIME"))
{
int times=Integer.parseInt(rcvData.getNextToken());
canvasLord.callTime=times;
}
else if(data.startsWith("OVERWIN"))
{//绘制画面显示结果
canvasLord.isOver=true;
canvasLord.isWin=true;
}
else if(data.startsWith("OVERLOSE"))
{
canvasLord.isOver=true;
canvasLord.isWin=false;
}
else if(data.startsWith("READYUP"))
{
readyState[0]=1;
readyNum++;
}
else if(data.startsWith("READYDOWN"))
{
readyState[2]=1;
readyNum++;
}
else if(data.startsWith("TWOREADY"))
{
readyState[0]=1;
readyState[2]=1;
isReady=false;
canvasLord.addCommand(canvasLord.passCmd);
}
}//end of if(lenght>0)
}//end of while
}//end of try
catch(Exception e)
{
System.out.println(e.toString());////////
}
}
public void send(String str)
{//send to the server
try {
byte[] bytes =str.getBytes();
Datagram dg = null;
dg = dc.newDatagram(bytes, bytes.length);
dc.send(dg);
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -