📄 server.java
字号:
else if(redata.startsWith("READY"))
{//READY#tableId#ID
rcvData.getNextToken();
tableId=Integer.parseInt(rcvData.getNextToken())-1;
reid=Integer.parseInt(rcvData.getNextToken());
int k;
for(k=0;k<3;k++)
{
if(table[tableId].id[k]==reid)
break;
}
table[tableId].readyState[k]=1;
table[tableId].readyNum++;
int up=(k+2)%3;
int down=(k+1)%3;
String str="";
if(table[tableId].readyNum==2)
{
if(table[tableId].readyState[up]==1)
{
str="READYDOWN#";
data=str.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[up], table[tableId].p[up]);
s.send(dgp);
str="READYUP#";
data=str.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[k], table[tableId].p[k]);
s.send(dgp);
}
else if(table[tableId].readyState[down]==1)
{
str="READYUP#";
data=str.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[down], table[tableId].p[down]);
s.send(dgp);
str="READYDOWN#";
data=str.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[k], table[tableId].p[k]);
s.send(dgp);
}
}
else if(table[tableId].readyNum==3)//
{
str="TWOREADY#";
for(int i=0;i<3;i++)
{
data=str.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[i], table[tableId].p[i]);
s.send(dgp);
}
//
table[tableId].clear();
table[tableId].allotCards();//洗牌
String strpai="";
for(int i=0;i<17;i++)
{
strpai=strpai+String.valueOf(table[tableId].play_a[i])+"#";
}
strpai="PEASANTCARDS#"+strpai;
data=strpai.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[0], table[tableId].p[0]);
s.send(dgp);//发给玩家1
strpai="";
for(int i=0;i<17;i++)
{
strpai=strpai+String.valueOf(table[tableId].play_b[i])+"#";
}
strpai="PEASANTCARDS#"+strpai;
data=strpai.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[1], table[tableId].p[1]);
s.send(dgp);//发给玩家2
strpai="";
for(int i=0;i<17;i++)
{
strpai=strpai+String.valueOf(table[tableId].play_c[i])+"#";
}
strpai="PEASANTCARDS#"+strpai;
data=strpai.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[2], table[tableId].p[2]);
s.send(dgp);//发给玩家3
Random random=new Random();//随机数决定谁先叫牌
int kk=(random.nextInt())%3;
table[tableId].call=Math.abs(kk);
String strcall="PLSCALL#1#";
data=strcall.getBytes();
dgp = new DatagramPacket(data, data.length, table[tableId].add[table[tableId].call], table[tableId].p[table[tableId].call]);
s.send(dgp);
}
}
}//end of while
}//end of main
}//end of class
class Table
{
InetAddress add[]=new InetAddress[3];
int p[]=new int[3];//port
String nickname[]=new String[3];
String score[]=new String[3];
String sex[]=new String[3];
int state[]={0,0,0};
int id[]={0,0,0};
int num=0;//number of players joined in.
int readyNum=0;//再来一次开牌的话
int readyState[]={0,0,0};
//
int callState[]={-1,-1,-1};
int callNum=0;
int mincall=1;
int call=0;//下次叫牌的玩家
boolean iscall=false;//只要有玩家叫牌,置为true;
int dz=-1;
//
int pai[] = new int[54]; //用于保存取出来的54个随机数
int play_a[] = new int[17];
int play_b[] = new int[17];
int play_c[] = new int[17]; //存放a,b,c三个玩家的牌
int dizhu[]=new int[20];//存放地主的牌
Random rnd=new Random(System.currentTimeMillis()); //随机数xuan
public void allotCards()
{//分配牌
int paishu=0;
int qu=0;
int n=0;
while(paishu<54) //while语句的作用,机选出54个数据,按选出来的顺序依次放在pai[]中
{
qu = Math.abs(rnd.nextInt())%54+1;
for(int m = 0; m<=paishu; m++) //判断机选出来的数值qu是否已经在pai[]中
{
if(pai[m]==qu)
{
n=0;
break;
}
else n= 1;
}
if(n==1) //如果机选出来的数值不在pai[]中,则把qu的值加入到pai[]里面相应的位置
{
pai[paishu]=qu;
paishu++;
}
}
int k,m;
for(k=0,m=0;m<17;k++,m++)
{
play_a[k] = pai[m];
}
for(k=0,m=17;m<34;k++,m++)
{
play_b[k] = pai[m];
}
for(k=0,m=34;m<51;k++,m++)
{
play_c[k] = pai[m];
}
Arrays.sort(play_a);
Arrays.sort(play_b);
Arrays.sort(play_c);
}
public void allotLord()
{
if(dz==0)
{
for(int i=0;i<17;i++)
dizhu[i]=play_a[i];
dizhu[17]=pai[51];
dizhu[18]=pai[52];
dizhu[19]=pai[53];
}
else if(dz==1)
{
for(int i=0;i<17;i++)
dizhu[i]=play_b[i];
dizhu[17]=pai[51];
dizhu[18]=pai[52];
dizhu[19]=pai[53];
}
else if(dz==2)
{
for(int i=0;i<17;i++)
dizhu[i]=play_c[i];
dizhu[17]=pai[51];
dizhu[18]=pai[52];
dizhu[19]=pai[53];
}
Arrays.sort(dizhu);
}
public void clear()
{
callState[0]=-1;
callState[1]=-1;
callState[2]=-1;
callNum=0;
mincall=1;
call=(call+1)%3;
}
}//end of class table
class StringParse {
private int currentPosition;
private int maxPosition;
private String str;
private StringBuffer unstr = null;
private char delimiter;
//用于解析的构造函数
public StringParse(String source, char del) {
currentPosition = 0;
str = source;
maxPosition = source.length();
delimiter = del;
}
//用于组装的构造函数
public StringParse(char del) {
unstr = new StringBuffer();
unstr.append('#');
delimiter = del;
}
public String getNextToken() {
if(currentPosition >= maxPosition)
return " ";
char c;
boolean begin = false;
StringBuffer nextString = new StringBuffer();
while(currentPosition < maxPosition)
{
c = str.charAt(currentPosition);
if(c != delimiter)
{
nextString.append(c);
begin = true;
}
else//处理特殊情况
{
if(currentPosition + 1 == maxPosition) break;
else
{
c = str.charAt(currentPosition + 1);
if(c == delimiter)
{
nextString.append(delimiter);
begin = true;
currentPosition++;
}
else if(begin)
{
break;
}
}
}
currentPosition++;
}
if(!begin) return " ";
return nextString.toString();
}
//服务器端使用
public void setNextToken(String sub) {
if(sub == null)
{
unstr.append("NULL#");
return;
}
int len = sub.length();
char c;
for(int i = 0;i < len; i++ )
{
c = sub.charAt(i);
unstr.append(c);
if(c == '#') unstr.append('#');
}
if(len == 0) unstr.append("NULL");
unstr.append('#');
}
public String getString()
{
return unstr.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -