⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canvaswaitingroom.java

📁 用J2ME开发手机网络游戏——斗地主,调试环境:Win XP;J2ME
💻 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 + -