📄 dealer.java
字号:
import java.net.*;import java.io.*;import java.awt.*;/** * Class for controlling game play ie game dealer * * @author Sam Cavenagh * @version 6/11/02 * * Website: http://home.pacific.net.au/~cavenagh/SH/ * Email: cavenaghweb@hotmail.com */class Dealer{ //how long ai pause for before making move(int ms) int aipause = 1000; //used for testing makes deck empty at start of game if true boolean fastgame = false; //you must play less than a seven if true boolean seven = false; //if nine is invisible boolean nine = false; //if can swap cards at start of game boolean swap = false; int swapcount = 0; ServerSocket listenSocket; Socket gameSocket[] = new Socket[3]; PrintWriter out[] = new PrintWriter[3]; BufferedReader in[] = new BufferedReader[3]; SHinterface sh; Image cardspic; Image back; Image backSW; Image pointer[]; Image burntPic; Graphics g; String playersName; String otherNames[] = new String[3]; boolean waitformsg[]; boolean outofgame[] = new boolean[4]; boolean aiPlayer[] = new boolean[3]; boolean listen = true; boolean burnt = false; int socketCount = 0; int whosturn = 2; int position = 1;//ie first, second,third or shithead Card deck[] = new Card[52]; Hand hands[] = new Hand[4]; Card pile[] = new Card[52]; GameAI ai; Point tableposition[][] = new Point[3][3]; Point centre1; Point pointerpoints[] = new Point[4]; Score score; int gameID = 1;//Stops AI playing a move in wrong game Dealer(SHinterface sh, Image cardspic, Graphics g, Hand hand, Image back, Image backSW, boolean fastgame, boolean seven, boolean nine, boolean swap, Image[] pointer,Image burntPic, Score score) { this.sh = sh; this.cardspic = cardspic; this.g = g; this.back = back; this.backSW = backSW; this.fastgame = fastgame; this.seven = seven; this.nine = nine; this.pointer = pointer; this.swap = swap; this.burntPic = burntPic; this.score = score; score.imDealer(this); hands[0] = new Hand(sh, back, g); hands[1] = new Hand(sh, back, g); hands[2] = new Hand(sh, back, g); hands[3] = hand; ai = new GameAI(seven, nine); outofgame[0] = false; outofgame[1] = false; outofgame[2] = false; outofgame[3] = false; waitformsg = new boolean[3]; for(int n = 0; n < 3; n++){ waitformsg[n] = false; aiPlayer[n] = false; } tableposition[0][0] = new Point(0, 103); tableposition[0][1] = new Point(0, 188); tableposition[0][2] = new Point(0, 276); tableposition[1][0] = new Point(103, 0); tableposition[1][1] = new Point(188, 0); tableposition[1][2] = new Point(276, 0); tableposition[2][0] = new Point(354, 103); tableposition[2][1] = new Point(354, 188); tableposition[2][2] = new Point(354, 276); centre1 = new Point(188, 175); pointerpoints[0] = new Point(115, 220); pointerpoints[1] = new Point(220, 110); pointerpoints[2] = new Point(330, 220); pointerpoints[3] = new Point(220, 330); } public void onePlayer(String playersName) { this.playersName = playersName; score.addName(playersName); for(int n = 0; n < 3; n++){ otherNames[n] = "AI-" + (n + 1); score.addName(otherNames[n]); aiPlayer[n] = true; socketCount++; } deal(); } public void start() { if(listen && socketCount < 3){ for(int n = 0; n < 3; n++) if(gameSocket[n] == null){ otherNames[n] = "AI" + (n + 1); score.addName(otherNames[n]); aiPlayer[n] = true; socketCount++; } try{ listenSocket.close(); }catch(IOException e){ sh.addMsg("Error Closing Listen " + e); } } } public int getAIPause() { return aipause; } public void setAIPause(int aipause) { this.aipause = aipause; } private void shuffle() { for(int r = 0; r < 2; r++)//number of times pile shuffled for(int n = 0; n <52; n++) { int newlocation = (int) Math.round(Math.random() * 51); Card temp = deck[newlocation]; deck[newlocation] = deck[n]; deck[n] = temp; } } public void createConnection(String playersName) { this.playersName = playersName; score.addName(playersName); new ListenThread(); } private void sendCommand(String command, int socNumber) { //sh.addMsg("msg:" + command + " socket:" + socNumber); if(socNumber < 3) if(gameSocket[socNumber] != null) out[socNumber].println(command); } private void sendMsg(String msg) { for(int n = 0; n < 3; n++){ if(out[n] != null) out[n].println("msg:" + msg); }} private void deal() { //adding card to deck for(int n = 0; n < 52; n++){ Card card = new Card(n + 1, cardspic, sh, g); deck[n] = card; } shuffle();//shuffling card deck int player = whosturn; for(int n = 0; n < 36; n++){ //dealing first card in deck if(player != 3)//player 3 is dealer no need to send command sendCommand("deal:" + deck[0].getNumber() + ":", player); //placing cards in players hand, facedown then faceup. hands[player].deal(deck[0]); //moving cards in deck forwards for(int w = 0; w < 51; w++) deck[w] = deck[w + 1]; //removing card from deck deck[51] = null; //changing player being dealt to player++; if(player >= 4) player = 0; } sendDetails(); if(fastgame) for(int n = 0; n < 52; n++) deck[n] = null; if(swap){//if performing card swap displayTable(); Card inhand[] = new Card[3]; Card ontable[] = new Card[3]; for(int n = 0; n < 3; n++){ waitformsg[n] = true; inhand[n] = hands[3].getCard(n); ontable[n] = hands[3].getFaceUp(n); } SwapD swapD = new SwapD(sh, inhand, ontable); if(swapD.display()){ hands[3].swap(swapD.getInHand(), swapD.getOnTable()); displayTable(); } swapcount++; //if dealer is last to make the swap if(swapcount == 4){ sendDetails(); nextTurn(); displayTable(); } //swap for ai players for(int n = 0; n < 3; n++) if(aiPlayer[n]) processSwap(ai.swap(hands[n], nine), 4, n); }else{//else start game nextTurn(); displayTable(); } } /*--------------------------------------------- * sending detail of other players to other players * table layout * 1 * 0 2 3 <- dealer *--------------------------------------------*/ private void sendDetails() { String command = "otherdetails:" + otherNames[1] + ":" + hands[1].getFaceUp(0).getNumber() + ":" + hands[1].getFaceUp(1).getNumber() + ":" + hands[1].getFaceUp(2).getNumber() + ":" + otherNames[2] + ":" + + hands[2].getFaceUp(0).getNumber() + ":" + hands[2].getFaceUp(1).getNumber() + ":" + hands[2].getFaceUp(2).getNumber() + ":" + playersName + ":" + hands[3].getFaceUp(0).getNumber() + ":" + + hands[3].getFaceUp(1).getNumber() + ":" + hands[3].getFaceUp(2).getNumber() + ":"; sendCommand(command, 0); command = "otherdetails:" + otherNames[2] + ":" + hands[2].getFaceUp(0).getNumber() + ":" + hands[2].getFaceUp(1).getNumber() + ":" + hands[2].getFaceUp(2).getNumber() + ":" + playersName + ":" + + hands[3].getFaceUp(0).getNumber() + ":" + hands[3].getFaceUp(1).getNumber() + ":" + hands[3].getFaceUp(2).getNumber() + ":" + otherNames[0] + ":" + hands[0].getFaceUp(0).getNumber() + ":" + + hands[0].getFaceUp(1).getNumber() + ":" + hands[0].getFaceUp(2).getNumber() + ":"; sendCommand(command, 1); command = "otherdetails:" + playersName + ":" + hands[3].getFaceUp(0).getNumber() + ":" + hands[3].getFaceUp(1).getNumber() + ":" + hands[3].getFaceUp(2).getNumber() + ":" + otherNames[0] + ":" + + hands[0].getFaceUp(0).getNumber() + ":" + hands[0].getFaceUp(1).getNumber() + ":" + hands[0].getFaceUp(2).getNumber() + ":" + otherNames[1] + ":" + hands[1].getFaceUp(0).getNumber() + ":" + + hands[1].getFaceUp(1).getNumber() + ":" + hands[1].getFaceUp(2).getNumber() + ":"; sendCommand(command, 2); } public void endConnection() { listen = false; if(listenSocket != null) try{ listenSocket.close(); }catch(IOException e){ sh.addMsg("Error Closing Listen " + e); } for(int n = 0; n < 3; n++){ if(gameSocket[n] != null){ out[n].println("end"); try{ gameSocket[n].close(); }catch(IOException e2){ sh.addMsg("Error Closing Msg " + e2); } } } socketCount = 0; sh.addMsg("Game Connections Closed"); } public void destroy() { gameID++; endConnection(); } public void displayTable() { g.setColor(Color.black); g.fillRect(0, 0, 450, 550); g.setColor(Color.white); g.drawLine(0, 450, 450, 450); g.setColor(Color.red); g.drawRoundRect(355, 5, 90, 40, 15, 15); g.setColor(Color.white); g.drawString("Deck: " + decklength() , 365, 20); g.drawString("Pile: " + pilelength(), 365, 40); hands[3].showHand(); g.drawRoundRect(5, 360, 90, 40, 15, 15); g.drawString("Name: " + otherNames[0], 10, 375); g.drawString("Cards: " + (hands[0].length() -1), 10, 395); g.drawImage(pointer[1], 68, 380, sh); if(hands[0].getFaceUp(0) != null) hands[0].getFaceUp(0).drawSideWays(tableposition[0][0]); else if(hands[0].getFaceDown(0) != null) g.drawImage(backSW, (int)tableposition[0][0].getX(), (int)tableposition[0][0].getY(), sh); if(hands[0].getFaceUp(1) != null) hands[0].getFaceUp(1).drawSideWays(tableposition[0][1]); else if(hands[0].getFaceDown(1) != null) g.drawImage(backSW, (int)tableposition[0][1].getX(), (int)tableposition[0][1].getY(), sh); if(hands[0].getFaceUp(2) != null) hands[0].getFaceUp(2).drawSideWays(tableposition[0][2]); else if(hands[0].getFaceDown(2) != null) g.drawImage(backSW, (int)tableposition[0][2].getX(), (int)tableposition[0][2].getY(), sh); g.drawRoundRect(5, 5, 90, 40, 15, 15); g.drawString("Name: " + otherNames[1], 10, 20); g.drawString("Cards: " + (hands[1].length() -1), 10, 40); g.drawImage(pointer[2], 70, 25, sh); if(hands[1].getFaceUp(0) != null) hands[1].getFaceUp(0).drawCard(tableposition[1][0]); else if(hands[1].getFaceDown(0) != null) g.drawImage(back, (int)tableposition[1][0].getX(), (int)tableposition[1][0].getY(), sh); if(hands[1].getFaceUp(1) != null) hands[1].getFaceUp(1).drawCard(tableposition[1][1]); else if(hands[1].getFaceDown(1) != null) g.drawImage(back, (int)tableposition[1][1].getX(), (int)tableposition[1][1].getY(), sh); if(hands[1].getFaceUp(2) != null) hands[1].getFaceUp(2).drawCard(tableposition[1][2]); else if(hands[1].getFaceDown(2) != null) g.drawImage(back, (int)tableposition[1][2].getX(), (int)tableposition[1][2].getY(), sh); g.drawRoundRect(355, 360, 90, 40, 15, 15); g.drawString("Name: " + otherNames[2], 360, 375);//365 g.drawString("Cards: " + (hands[2].length() -1), 360, 395);//365 g.drawImage(pointer[1], 423, 380, sh); if(hands[2].getFaceUp(0) != null) hands[2].getFaceUp(0).drawSideWays(tableposition[2][0]); else if(hands[2].getFaceDown(0) != null) g.drawImage(backSW, (int)tableposition[2][0].getX(), (int)tableposition[2][0].getY(), sh); if(hands[2].getFaceUp(1) != null) hands[2].getFaceUp(1).drawSideWays(tableposition[2][1]); else if(hands[2].getFaceDown(1) != null) g.drawImage(backSW, (int)tableposition[2][1].getX(), (int)tableposition[2][1].getY(), sh); if(hands[2].getFaceUp(2) != null) hands[2].getFaceUp(2).drawSideWays(tableposition[2][2]); else if(hands[2].getFaceDown(2) != null) g.drawImage(backSW, (int)tableposition[2][2].getX(), (int)tableposition[2][2].getY(), sh); //drawing pile if(pile[0] != null){ //determining how many cards of the same value are ontop of each other int top = 0; if(nine == true && pile[0].getValue() == 9){ top = 1; if(pile[1] != null)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -