📄 player.java
字号:
import java.net.*;import java.io.*;import java.awt.*;/** * Player Class * * @author Sam Cavenagh * @version 13/11/02 * * Website: http://home.pacific.net.au/~cavenagh/SH/ * Email: cavenaghweb@hotmail.com */class Player{ //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; boolean swapdone = false; boolean burnt = false; Socket msgSocket; PrintWriter out; BufferedReader in; SHinterface sh; Image cardspic; Image back; Image backSW; Image burntPic; Image pointer[]; Hand hand; Graphics g; String playersName; //Details of other players String othernames[] = new String[3]; Card faceup[][] = new Card[3][3]; int carddowncount[] = new int[3]; int cardcount[] = new int[3]; Point tableposition[][] = new Point[3][3]; Point centre1;//point where pile cards are displayed int deck; // count of card remaining in deck; Card pile[] = new Card[52]; // cards in play pile; boolean listen = true;//is thread listening for msg //for whos turn indicator String servername; int whosturn = 0; boolean outofgame[] = new boolean[4]; Point pointerpoints[] = new Point[4]; Score score; // scoreboard int position = 1; Player(SHinterface sh, Image cardspic, Graphics g, Hand hand, Image back, Image backSW, Image burntPic, Image[] pointer, Score score) { this.sh = sh; this.cardspic = cardspic; this.g = g; this.hand = hand; this.back = back; this.backSW = backSW; this.burntPic = burntPic; this.pointer = pointer; this.score = score; 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); outofgame[0] = false; outofgame[1] = false; outofgame[2] = false; outofgame[3] = false; 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 createConnection(String servername, String playersName) { this.playersName = playersName; score.addName(playersName); sh.addMsg("Looking for " + servername + " Dealer"); try{ msgSocket = new Socket(servername, 4445); out = new PrintWriter(msgSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(msgSocket.getInputStream())); }catch(UnknownHostException e) { sh.addMsg("Server: " + servername + " Could not be Found"); sh.closeConnection(); }catch(IOException e2){ sh.addMsg("Server not Listening for Connections"); } if (msgSocket != null){ out.println(playersName); String name = "unknown#$#"; String fastgameS = "false"; String sevenS = "false"; String nineS = "false"; String swapS = "false"; try{ name = in.readLine(); fastgameS = in.readLine(); sevenS = in.readLine(); nineS = in.readLine(); swapS = in.readLine(); }catch (IOException e3) { sh.addMsg("Getting Otherplayers Name Error " + e3); } if(!name.equals("unknown#$#")){ sh.addMsg("Game Connection Established with " + name); this.servername = name; //score.addName(servername);//added later ?? if(fastgameS.equals("true")){ fastgame = true; sh.addMsg("Fast Game Selected"); } if(sevenS.equals("true")){ seven = true; sh.addMsg("Must Play Under Seven Selected"); } if(nineS.equals("true")){ nine = true; sh.addMsg("Nine is Invisible Selected"); } if(swapS.equals("true")){ swap = true; sh.addMsg("Card Swap at start of game Selected"); } listen = true; new WaitforMsg(); } } } public void sendCommand(String command) { out.println(command); } private boolean fourOfAKind(Card card) { if(pile[0] == null || pile[1] == null || pile[2] == null || card == null) return false; int top = pile[0].getValue(); if(pile[1].getValue() == top && pile[2].getValue() == top && card.getValue() == top) return true; return false; } public void endConnection() { listen = false; if(msgSocket != null){ out.println("end:"); try{ msgSocket.close(); }catch(IOException e){} } sh.addMsg("Game Connection Closed"); } private void nextTurn() { whosturn++; if(whosturn >= 4) whosturn = 0; while(outofgame[whosturn]){ whosturn++; if(whosturn >= 4) whosturn = 0; } } 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: " + deck, 365, 20); g.drawString("Pile: " + pilelength(), 365, 40); hand.showHand(); g.drawRoundRect(5, 360, 90, 40, 15, 15); g.drawString("Name: " + othernames[0], 10, 375); g.drawString("Cards: " + cardcount[0], 10, 395); g.drawImage(pointer[1], 68, 380, sh); if(faceup[0][0] != null) faceup[0][0].drawSideWays(tableposition[0][0]); else if(carddowncount[0] >= 3) g.drawImage(backSW, (int)tableposition[0][0].getX(), (int)tableposition[0][0].getY(), sh); if(faceup[0][1] != null) faceup[0][1].drawSideWays(tableposition[0][1]); else if(carddowncount[0] >= 2) g.drawImage(backSW, (int)tableposition[0][1].getX(), (int)tableposition[0][1].getY(), sh); if(faceup[0][2] != null) faceup[0][2].drawSideWays(tableposition[0][2]); else if(carddowncount[0] >= 1) 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: " + cardcount[1], 10, 40); g.drawImage(pointer[2], 70, 25, sh); if(faceup[1][0] != null) faceup[1][0].drawCard(tableposition[1][0]); else if(carddowncount[1] >= 3) g.drawImage(back, (int)tableposition[1][0].getX(), (int)tableposition[1][0].getY(), sh); if(faceup[1][1] != null) faceup[1][1].drawCard(tableposition[1][1]); else if(carddowncount[1] >= 2) g.drawImage(back, (int)tableposition[1][1].getX(), (int)tableposition[1][1].getY(), sh); if(faceup[1][2] != null) faceup[1][2].drawCard(tableposition[1][2]); else if(carddowncount[1] >= 1) 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); g.drawString("Cards: " + cardcount[2], 360, 395); g.drawImage(pointer[1], 423, 380, sh); if(faceup[2][0] != null) faceup[2][0].drawSideWays(tableposition[2][0]); else if(carddowncount[2] >= 3) g.drawImage(backSW, (int)tableposition[2][0].getX(), (int)tableposition[2][0].getY(), sh); if(faceup[2][1] != null) faceup[2][1].drawSideWays(tableposition[2][1]); else if(carddowncount[2] >= 2) g.drawImage(backSW, (int)tableposition[2][1].getX(), (int)tableposition[2][1].getY(), sh); if(faceup[2][2] != null) faceup[2][2].drawSideWays(tableposition[2][2]); else if(carddowncount[2] >= 1) 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) if(pile[1].getValue() == 9){ top = 2; if(pile[2] != null) if(pile[2].getValue() == 9) top = 3; } } int samecount = 1; for(int n = top + 1; n < top + 4; n++){ if(pile[n] == null) break; if(pile[n].getValue() == pile[top].getValue()) samecount++; else break; } if(samecount == 1){//one of a kind if(pile[top] != null) pile[top].drawCard(centre1); }else if(samecount == 2){//2 of a kind pile[top + 1].drawCard2((int)centre1.getX(), (int)centre1.getY() - 10); pile[top].drawCard2((int)centre1.getX(), (int)centre1.getY() + 10); }else if(samecount >= 3){//3 of a kind pile[top + 2].drawCard2((int)centre1.getX(), (int)centre1.getY() - 20); pile[top + 1].drawCard2((int)centre1.getX(), (int)centre1.getY()); pile[top].drawCard2((int)centre1.getX(), (int)centre1.getY() + 20); } if(nine == true && pile[0].getValue() == 9) if(top == 1)//one nine pile[0].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 40); if(top == 2){//2 nines pile[1].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 40); pile[0].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 50); } if(top == 3){//3 nines pile[2].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 40); pile[1].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 50); pile[0].drawSideWays2((int)centre1.getX() - 15, (int)centre1.getY() + 60); } }else if(burnt){ g.drawImage(burntPic, 130, 190, sh); burnt = false; } g.drawImage(pointer[whosturn], (int)pointerpoints[whosturn].getX(), (int)pointerpoints[whosturn].getY(), sh); sh.repaint(); } public void cardSelection(int cardno) { Card card; String command; if(hand.getCard(0) == null){//if player only has cards on table if(hand.isFaceUp()){ // if cards still faceup on table card = hand.getFaceUp(cardno); command = "turn:faceup:"; if(isValidCard(card, command))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -