📄 canvaslord.java
字号:
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 + -