?? cardserver.java
字號(hào):
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package control;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.logging.Level;import java.util.logging.Logger;import serverInf.GameServer;import serverInf.Sender;import serverInf.Serializable;import serverInf.ServerInterface;/** * * @author XJX */import java.util.Collections;import java.util.Comparator;public class CardServer implements ServerInterface{ private CardMessage cardmsg; private GameServer gameserver; private Sender[] senders; private String[] userList; boolean isInit=false; private int[] turns={0,1,2}; private int mainturn=0; boolean checkPair=false; ArrayList<Integer>card0 =new ArrayList<Integer>(); ArrayList<Integer>card1 =new ArrayList<Integer>(); ArrayList<Integer>card2 =new ArrayList<Integer>(); public CardServer(int port,String[] userList){ this.userList=userList; cardmsg=new CardMessage(); gameserver=new GameServer(port, model.PlatformState.MaxPlayers[1], cardmsg,this ); } public void start(){ gameserver.start(); } public void gameStart(){// if(isInit){// cardmsg=new CardMessage();// cardmsg.command=-1;// sendToAll(cardmsg);// return;// } if(senders[0]!=null&&senders[1]!=null&&senders[2]!=null){ isInit=true; mainturn=0; initCard(); sendCard(); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(CardServer.class.getName()).log(Level.SEVERE, null, ex); } removeAllPair(); fixCard(); sendCard(); } } public void reveiveMessage(Serializable message) { cardmsg=(CardMessage)message; System.out.println(this.getClass().getName()); System.out.flush(); if(cardmsg.command==1&&checkPair==false){ removeAllPair(); sendCard(); }else if(cardmsg.command==0){ getCard(mainturn,cardmsg.leftNum); sendCard(); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(CardServer.class.getName()).log(Level.SEVERE, null, ex); } removeAllPair(); //checkPair=false; mainturn=(mainturn+1)%3; sendCard(); } } public void sendToAll(CardMessage msg){ for(int i=0;i<senders.length;i++){ if(senders[i]!=null){ senders[i].send(msg); } } } public void removeAllPair() { try { removePair(card0); removePair(card1); removePair(card2); } catch (Exception e) { System.err.println("removaAllPair: "+e); } } public void removePair(ArrayList<Integer> card){ int i=0; while (i<card.size()){ int originalSize=card.size(); int a=card.get(i); if (a==52) { i++; if (i<card.size()) a=card.get(i); else break; } int j=i+1; while (j<card.size()){ if (card.get(j)==52){ j++; } if (j<card.size() && card.get(j)%13==a%13){ card.remove(i); card.remove(j-1); break; } j++; } if (card.size()==originalSize) { i++; } else { i=0; } } } public void getCard(int turner,int cardIndex){ if(turner==0){ int card=card1.get(cardIndex); card0.add(card); card1.remove(cardIndex); }else if(turner==1){ int card=card2.get(cardIndex); card1.add(card); card2.remove(cardIndex); }else if(turner==2){ int card=card0.get(cardIndex); card2.add(card); card0.remove(cardIndex); } } public void sendCard(){ int []Card0=new int[card0.size()]; for(int i=0;i<Card0.length;i++)Card0[i]=card0.get(i); int []Card1=new int[card1.size()]; for(int i=0;i<Card1.length;i++)Card1[i]=card1.get(i); int []Card2=new int[card2.size()]; for(int i=0;i<Card2.length;i++)Card2[i]=card2.get(i); CardMessage msg; if(mainturn==0){ msg=new CardMessage("hi",0,1,Card1.length,Card2.length,Card0); senders[0].send(msg); msg=new CardMessage("hi",0,2,Card2.length,Card0.length,Card1); senders[1].send(msg); msg=new CardMessage("hi",0,0,Card0.length,Card1.length,Card2); senders[2].send(msg); }else if(mainturn==1){ msg=new CardMessage("",0,0,Card1.length,Card2.length,Card0); senders[0].send(msg); msg=new CardMessage("",0,1,Card2.length,Card0.length,Card1); senders[1].send(msg); msg=new CardMessage("",0,2,Card0.length,Card1.length,Card2); senders[2].send(msg); }else if(mainturn==2){ msg=new CardMessage("",0,2,Card1.length,Card2.length,Card0); senders[0].send(msg); msg=new CardMessage("",0,0,Card2.length,Card0.length,Card1); senders[1].send(msg); msg=new CardMessage("",0,1,Card0.length,Card1.length,Card2); senders[2].send(msg); } } public void initCard(){ int []cards=new int[53]; for(int i=0;i<cards.length;i++){ cards[i]=i; } Random rand=new Random(); for(int i=0;i<500;i++){ int a=rand.nextInt(53); int b=rand.nextInt(53); int tmp=cards[a]; cards[a]=cards[b]; cards[b]=tmp; } for(int i=0;i<cards.length;i++){ switch(i%3){ case 0: card0.add(cards[i]); break; case 1: card1.add(cards[i]); break; case 2: card2.add(cards[i]); break; } } /* Comparator comp = new Mycomparator(); Collections.sort(card0,comp); Collections.sort(card1,comp); Collections.sort(card2,comp); * */ } public void getSenders(Sender[] senders) { this.senders=senders; } private void fixCard() { int point = 0; if (card0.size() == 0) { point++; } if (card1.size() == 0) { point++; } if (card2.size() == 0) { point++; } while (point > 0) { initCard(); sendCard(); try { Thread.sleep(500); } catch (InterruptedException ex) { Logger.getLogger(CardServer.class.getName()).log(Level.SEVERE, null, ex); } removeAllPair(); point = 0; if (card0.size() == 0) { point++; } if (card1.size() == 0) { point++; } if (card2.size() == 0) { point++; } } } public void illegalExit(String userAccount) { throw new UnsupportedOperationException("Not supported yet."); }}class CardMessage implements Serializable { public String user = ""; public int command; public int turn = -1; public int leftNum; public int rightNum; public int[] handCard = null; public CardMessage() { } public CardMessage(String user, int command, int turn, int leftNum, int rightNum, int[] handCard) { this.user = user; this.command = command;//-1 someone leave;0 get card;1 remove card this.turn = turn; this.leftNum = leftNum; this.rightNum = rightNum; this.handCard = handCard; } public void deserialize(DataInputStream is) throws IOException { user = is.readUTF(); command = is.readInt(); turn = is.readInt(); this.leftNum = is.readInt(); this.rightNum = is.readInt(); int len = is.readInt(); handCard = new int[len]; if (len != 0) { for (int i = 0; i < len; i++) { handCard[i] = is.readInt(); } } } public void serialize(DataOutputStream os) throws IOException { os.writeUTF(user); os.writeInt(command); os.writeInt(turn); os.writeInt(leftNum); os.writeInt(rightNum); if (handCard != null) { os.writeInt(handCard.length); for (int i = 0; i < handCard.length; i++) { os.writeInt(handCard[i]); } } else { os.writeInt(0); } } public String toString(){ return user+" "+command+" "+turn+" "+leftNum+" "+rightNum; }}class Mycomparator implements Comparator { public int compare(Object o1, Object o2) { Integer p1 = (Integer) o1; Integer p2 = (Integer) o2; if (p1 < p2) { return 0; } else { return 1; } }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -