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

📄 canvaslord.java

📁 用J2ME开发手机网络游戏——斗地主,调试环境:Win XP;J2ME
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
public class CanvasLord extends GameCanvas implements CommandListener,Runnable{

	int pai[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//最多20张牌
	int x=0;//每次画牌时,计算的起点。
	int leftpai[]=new int[20];
	int state[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//每张牌是否是被选中
	boolean isOver=false;//本局是否结束,若结束则绘制各玩家得分情况;确定后,将该变量重新置为false;
	boolean drawPlsReady=false;//画“请按确定按钮”语句。
	boolean isWin=false;//本局结束后,是否赢。
	//
	int sendpai0[]=new int[20];//存放上家每次出的牌
	int sendnum0=0;//每次出牌数
	int leftnum0=17;//还剩下的牌数
	int sendpai1[]=new int[20];//存放自己每次出的牌
	int sendnum1=0;
	int sendpai2[]=new int[20];//存放下家每次出的牌
	int sendnum2=0;
	int leftnum2=17;
	//
	int pai3[]={0,0,0};//地主的三张牌
	
	boolean isLord=false;//是否是地主?
	int dz=-1;//标示谁是地主?0表上家,1表自己,2表下家
	int num=17;//当初发牌的总数,如果是地主num=20,否则num=17;????
	
	Graphics g;
	int bgcolor[]={42,199,30};//背景颜色
	int width,height;
	Font f = Font.getDefaultFont();
	int fontHeight;
	int cardw,cardh;
	Image pic1,pic2,pic3,pic4,picq,pick,pica;
	int cardNum=17;//当前所剩牌数
	int arrowPos=0;//箭头位置
	boolean repetition=true;
	CanvasWaitingRoom cwr;
	//////////////////////
	int mincall=1;//最低叫牌倍数
	boolean iscall=false;//是否正在叫牌,注意是正在叫牌
	int wcall=40;//叫牌按钮图片宽 “一倍”
	int hcall=20;
	int selected=0;
	Image piccall;//fangxingtupian
	boolean overcall=false;//叫牌是否已结束?若叫牌结束,则可打出牌
	int callTime=0;//叫牌倍数
	///////////////////////////////
	Image pichat,picboy,picgirl,picback,pichatme,picboyme,picgirlme;
	Image pickingh,picqueenh;
	int dup=1;//上边页边距
	/////
	boolean right=false;
	int rightType=1;//0表出牌时需大过上家,1表可出任意牌,无需大过上家牌
	int rightId=-1;//0表上家有出牌权,1表自己有牌权,2表下家有牌权
	Command passCmd=new Command("不出",Command.ITEM,1);//“过”,不出牌
	Command readyCmd=new Command("准备",Command.ITEM,1);
	Command exitCmd=new Command("退出",Command.EXIT,1);
	Image picsad,pichap;
	public CanvasLord(CanvasWaitingRoom c)
	{
		super(true);
		cwr=c;
		g=this.getGraphics();
		width=getWidth();
		height=getHeight();
		cardw=28;
		cardh=40;
		this.addCommand(passCmd);
		this.setCommandListener(this);
		try
		{
			pic1=Image.createImage("/res/fangk.png");
			pic2=Image.createImage("/res/meih.png");
			pic3=Image.createImage("/res/hongt.png");
			pic4=Image.createImage("/res/heit.png");
			picq=Image.createImage("/res/queen.png");
			pick=Image.createImage("/res/king.png");
			pica=Image.createImage("/res/arrow.png");
			piccall=Image.createImage("/res/call.png");
			///
			pichat=Image.createImage("/res/hat.png");
			picboy=Image.createImage("/res/boy.png");
			picgirl=Image.createImage("/res/girl.png");
			picback=Image.createImage("/res/back.png");
			//
			pichatme=Image.createImage("/res/hatme.png");
			picboyme=Image.createImage("/res/boyme.png");
			picgirlme=Image.createImage("/res/girlme.png");
			//
			pickingh=Image.createImage("/res/kingh.png");
			picqueenh=Image.createImage("/res/queenh.png");
			//
			picsad=Image.createImage("/res/sad.png");
			pichap=Image.createImage("/res/laugh.png");
		}
		catch(Exception e)
		{
			//System.out.println("png:::"+e.toString());////////
		}
		try
		{
			fontHeight=f.getHeight();
			g.setColor(0, 0, 0);////
			//g.drawLine((getWidth()-17)/2, 0, (getWidth()-17)/2, getHeight());///
			isLord=true;
			//num=20;
			//cardNum=20;
			arrowPos=5;
			
			g.setColor(bgcolor[0],bgcolor[1],bgcolor[2]);//////
			g.fillRect(0, 0, width, height);
		}
		catch(Exception e)
		{
			System.out.println("Gou zao han shu :"+e.toString());/////////
		}
		//Thread t=new Thread(this);
		//t.start();
	}
	public void clear()
	{
		for(int i=0;i<20;i++)
		{
			pai[i]=0;
			state[i]=0;
		}
		isOver=false;
		isWin=false;
		sendnum0=0;
		leftnum0=17;
		sendnum1=0;
		sendnum2=0;
		leftnum2=17;
		dz=-1;
		num=0;
		//
		cardNum=0;
		arrowPos=5;
		repetition=true;
		//
		mincall=1;
		selected=0;
		overcall=false;
		callTime=0;
		//
		right=false;
		rightType=1;
		rightId=-1;
		
		//cwr中变量还没清空....
		cwr.readyState[0]=0;
		cwr.readyState[1]=0;
		cwr.readyState[2]=0;
		cwr.readyNum=0;
		cwr.isReady=true;
		
	}
	public void allot(int n)
	{
		int p=0;
		for(int i=0;i<n;i++)
		{
			if(pai[i]!=0)
				leftpai[p]=pai[i];
			p++;
		}
	}
	public void work()
	{	
		Thread t=new Thread(this);//每次都调用
		t.start();
	}
	public void keyPressed(){
		int keyState=getKeyStates();
		if((keyState&UP_PRESSED)!=0)
		{
			if(iscall)return;
			if(overcall==false)return;//若没结束叫牌,则返回
			if(cardNum==0) return;//
			state[arrowPos]=1;
		}
		else if((keyState&DOWN_PRESSED)!=0)
		{
			if(iscall)return;
			if(overcall==false)return;//若没结束叫牌,则返回
			if(cardNum==0) return;//
			state[arrowPos]=0;
		}
		else if((keyState&LEFT_PRESSED)!=0)
		{
			if(iscall==true)
			{
				if(((selected+3)%4)>=mincall-1||((selected+3)%4)==3)
					selected=(selected+3)%4;
				return;
			}
			if(overcall==false)return;//若没结束叫牌,则返回
			if(cardNum==0) return;//
			if(arrowPos==0)arrowPos=cardNum-1;
			else
				arrowPos--;
		}
		else if((keyState&RIGHT_PRESSED)!=0)
		{
			if(iscall==true)
			{
				if(((selected+1)%4)>=mincall-1)
					selected=(selected+1)%4;
				return;
			}
			if(overcall==false)return;//若没结束叫牌,则返回
			if(cardNum==0) return;//
			if(arrowPos==cardNum-1)arrowPos=0;
			else arrowPos++;
		}
		else if((keyState&FIRE_PRESSED)!=0)
		{//先检验其出的牌是否合法,其次需检查出的牌是否能压得住上家出的牌
			if(isOver)
			{
				System.out.println("对结束确定!");////////////
				g.setColor(bgcolor[0],bgcolor[1],bgcolor[2]);//////
				g.fillRect(0, 0, width, height);
				clear();
				drawPlsReady=true;
				//jia zhun bei an niu
				this.removeCommand(passCmd);
				this.addCommand(readyCmd);
				this.addCommand(exitCmd);
				return;
			}
			if(iscall==true)
			{
				executeCall(selected);
				iscall=false;
				return;	
			}
			if(overcall==false)return;//若没结束叫牌,则返回
			if(cardNum==0) return;//
			if(right==false)return ;
			String pos=String.valueOf(cwr.tableId)+"#"+String.valueOf(cwr.id)+"#";
			int cnt=0;//表此次打出的牌数
			
			int sendpai11[]=new int[20];
			int sendnum11=0;
			for(int i=0;i<cardNum;i++)
			{//找出欲打出的牌
				if(state[i]==1)
				{
					sendpai11[sendnum11]=leftpai[i];
					sendnum11++;
				}
			}
			/////////////////////////////////////////////////////////////
			//需进行牌型验证
			if(rightType==0)
			{
				Card card0=new Card();
				Card card1=new Card();
				if(sendnum0!=0)
					card0.setCards(sendpai0, sendnum0);
				else 
					card0.setCards(sendpai2, sendnum2);
				card1.setCards(sendpai11, sendnum11);
				int type0=card0.getCardType();
				int type1=card1.getCardType();
				if(type1==0)
				{
					return;
				}
				if(type0==type1)
				{
					if(type0==2)
					{
						int n0=card0.isBomb();
						int n1=card1.isBomb();
						if(n0>n1)
						{
							return;
						}
					}
					else if(type0==3)
					{
						int n0=card0.isOne();
						int n1=card1.isOne();
						if(n0>=n1)	
						{
							return;
						}
					}
					else if(type0==4)
					{
						int n0=card0.isTwo();
						int n1=card1.isTwo();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==5)
					{
						int n0=card0.isThree();
						int n1=card1.isThree();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==6)
					{
						if(card0.num!=card1.num)
						{
							return;
						}
						int n0=card0.is3and1();
						int n1=card1.is3and1();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==7)
					{
						if(card0.num!=card1.num)
						{
							return;
						}
						int n0=card0.isOneSeq();
						int n1=card1.isOneSeq();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==8)
					{
						if(card0.num!=card1.num)
						{
							return;
						}
						int n0=card0.isTwoSeq();
						int n1=card1.isTwoSeq();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==9)
					{
						if(card0.num!=card1.num)
						{
							return;
						}
						int n0=card0.isThreeSeq();
						int n1=card1.isThreeSeq();
						if(n0>=n1)
						{
							return;
						}
					}
					else if(type0==10)
					{
						if(card0.num!=card1.num)
						{
							return;
						}
						int n0=card0.isPlane();
						int n1=card1.isPlane();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -