|
import java.awt.*; import java.net.*; import java.awt.event.*; import java.applet.*; public class Interface extends Applet implements ActionListener, // Button ItemListener, // Choice MouseListener, // Mouse BelotConstants { public void init () { MediaTracker tracker = new MediaTracker(this); int trackerID = 1; URL url = getCodeBase(); String imageName; Image image; String suits [] = {"c", "d", "h", "s"}; String ranks [] = {"8", "9", "t", "j", "q", "k", "a"}; Font f = new Font("SansSerif", Font.BOLD, 14); belotGame = new Game(); setMessages("Welcome", "to Belot!"); setLayout(null); setBackground(new Color(0, 220, 220)); // light blue setForeground(Color.black); fm = getGraphics().getFontMetrics(f); height = getSize().height; width = getSize().width; for (int s = 0; s < suits.length; s++) { for (int r = 0; r < ranks.length; r++) { imageName = ranks[r] + suits[s] + ".gif"; image = getImage (url, imageName); tracker.addImage (image, trackerID); trackerID++; belotGame.getBelotCards().getCard(s*ranks.length+r).setImage(image); } } imageName = "cardback.gif"; cardBackImage = getImage(url, imageName); tracker.addImage(cardBackImage, trackerID); try { tracker.waitForAll(); } catch (InterruptedException e) {} cards = new CardImage[CARDS_IN_HAND]; for (int i = 0; i < CARDS_IN_HAND; i++) { cards[i] = new CardImage(1, i + 1, cardBackImage, height, width); } cardOne = new CardImage(0, 1, cardBackImage, height, width); cardTwo = new CardImage(0, 2, cardBackImage, height, width); cardThree = new CardImage (0, 6, cardBackImage, height, width); addMouseListener(this); joinButton = makeButton("Join", 2, 1); joinButton.setVisible(true); wait1Button = makeButton("Wait1", 2, 1); wait2Button = makeButton("Wait2", 2, 1); wait3Button = makeButton("Wait3", 2, 1); wait4Button = makeButton("Wait4", 2, 1); wait5Button = makeButton("Wait5", 2, 1); wait6Button = makeButton("Wait6", 2, 1); wait7Button = makeButton("Wait7", 2, 1); wait8Button = makeButton("Wait8", 2, 1); rulesButton = makeButton("Rules", 2, 4); rulesButton.setVisible(true); acceptTrumpChoice = new Choice(); acceptTrumpChoice.add ("Accept Trump"); acceptTrumpChoice.add ("Dont Accept"); add (acceptTrumpChoice); placeComponent(acceptTrumpChoice, 2, 1); acceptTrumpChoice.setVisible(false); acceptTrumpChoice.addItemListener(this); callTrumpChoice = new Choice(); callTrumpChoice.add("Clubs"); callTrumpChoice.add("Diamonds"); callTrumpChoice.add("Hearts"); callTrumpChoice.add("Spades"); callTrumpChoice.add("Nothing"); callTrumpChoice.add("Everything"); callTrumpChoice.add("Pass"); add (callTrumpChoice); placeComponent(callTrumpChoice, 2, 1); callTrumpChoice.setVisible(false); callTrumpChoice.addItemListener(this); } private Button makeButton(String name, int row, int col) { Button tempButton = new Button(name); add (tempButton); placeComponent (tempButton, row, col); tempButton.setVisible(false); tempButton.addActionListener(this); return tempButton; } public void paint (Graphics g) { for (int i = 1; i <= 2; i++) g.drawLine(0, i * height / NUMBER_ROWS, width, i * height / NUMBER_ROWS); for (int i = 1; i <= 9; i++) g.drawLine(i * width / NUMBER_COLUMNS, 0, i * width / NUMBER_COLUMNS, height); displayStrings(0, 0, "Your", "Play"); displayStrings(0, 3, "Opponent's", "Play"); displayStrings(0, 5, "Flipped", "Card"); displayStrings(0, 8, "Trump:", "Caller:", "Dealer:"); displayStrings(0, 9, belotGame.getTrump(), belotGame.getCaller(), belotGame.getDealer()); displayStrings(1, 0, "Your", "Hand"); displayStrings(2, 6, "You:", "Opponent:"); displayStringsTop(2, 7, "Raw", "Score"); displayStringsTop(2, 8, "Game", "Points"); displayStringsTop(2, 9, "Total", "Points"); displayStrings(2, 2, message1, message2); displayStrings(2,7,Integer.toString(belotGame.getPlayer(PLAYER_1).getRawPoints()), Integer.toString(belotGame.getPlayer(PLAYER_2).getRawPoints())); displayStrings(2,8,Integer.toString(belotGame.getPlayer(PLAYER_1).getGamePoints()), Integer.toString(belotGame.getPlayer(PLAYER_2).getGamePoints())); displayStrings(2,9,Integer.toString(belotGame.getPlayer(PLAYER_1).getTotalPoints()), Integer.toString(belotGame.getPlayer(PLAYER_2).getTotalPoints())); for (int i = 0; i < belotGame.getNumberCards(); i++) { cards[i].setImage(belotGame.getPlayer(PLAYER_1).getCard(i).getImage()); displayCard(cards[i]); } displayCard(cardOne); displayCard(cardTwo); if (belotGame.getNumberCards() > 0) cardThree.setImage(belotGame.getFlippedCard().getImage()); else cardThree.setImage(cardBackImage); displayCard(cardThree); } public void trumpIsKnown() { belotGame.finishDealing(); belotGame.scoreBonuses(); belotGame.startPlay(); trickLeader = belotGame.getWhoseTurn(); playSequence(); } public void playSequence() { for (int i = 0; i < CARDS_IN_HAND; i++) { cards[i].setDisplay(true); } cardOne.setImage(cardBackImage); cardTwo.setImage(cardBackImage); if (belotGame.getNumberCards() == 0) { belotGame.finishPlay(); wait8Button.setVisible(true); setMessages("Wait for", "Final Scoring"); } else if (trickLeader == PLAYER_2) { wait6Button.setVisible(true); setMessages("Wait for", "Other Play"); } else { clickableImages = true; setMessages("Select", "Card!"); } } public void mousePressed (MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); for (int i = 0; i < belotGame.getNumberCards(); i++) { if ((cards[i].inImage(x,y) == true) && clickableImages) { Card playerCard = belotGame.getPlayer(PLAYER_1).getCard(i); if ((trickLeader == PLAYER_1) || (belotGame.checkLegalPlay(playerCard, opponentCard, PLAYER_1))) { cardOne.setImage(cards[i].getImage()); clickableImages = false; belotGame.assignPlayerCard(belotGame.getPlayer(PLAYER_1).getCard(i)); wait7Button.setVisible(true); setMessages("Wait for", "Scoring"); if (trickLeader == PLAYER_1) { opponentCard = belotGame.getComputerFollow(); cardTwo.setImage(opponentCard.getImage()); } cards[i].setDisplay(false); repaint(); } } } } public void mouseClicked (MouseEvent evt) {} public void mouseReleased (MouseEvent evt) {} public void mouseEntered (MouseEvent evt) {} public void mouseExited (MouseEvent evt) {} public void itemStateChanged (ItemEvent evt) { if (evt.getStateChange() == ItemEvent.SELECTED) { String arg = (String) evt.getItem(); if (arg.equals ("Accept Trump")) { belotGame.callTrump(belotGame.getFlippedCard().getSuit(), PLAYER_1); acceptTrumpChoice.setVisible(false); wait5Button.setVisible(true); setMessages("Wait for", "Final Deal"); } else if (arg.equals ("Dont Accept")) { acceptTrumpChoice.setVisible(false); if (dealer == PLAYER_2) { wait3Button.setVisible(true); setMessages("Wait for", "Other Bid"); } else { wait4Button.setVisible(true); setMessages("Wait for", "Other Bid"); } } else if ((arg.equals("Clubs")) || (arg.equals("Diamonds")) || (arg.equals("Hearts")) || (arg.equals("Spades")) || (arg.equals("Nothing")) || (arg.equals("Everything"))) { int suit = UNKNOWN; if (arg.equals("Clubs")) suit = CLUBS; else if (arg.equals("Diamonds")) suit = DIAMONDS; else if (arg.equals("Hearts")) suit = HEARTS; else if (arg.equals("Spades")) suit = SPADES; else if (arg.equals("Nothing")) suit = NOTHING; else if (arg.equals("Everything")) suit = EVERYTHING; belotGame.callTrump(suit, PLAYER_1); callTrumpChoice.setVisible(false); wait5Button.setVisible(true); setMessages("Wait for", "Final Deal"); } else if (arg.equals("Pass")) { callTrumpChoice.setVisible(false); if (dealer == PLAYER_2) { wait4Button.setVisible(true); setMessages("Wait for", "Other Bid"); } else { belotGame.selectDealer(); belotGame.setNumberCards(0); wait2Button.setVisible(true); setMessages("Passed Out", "Redeal"); } } } repaint(); } public void actionPerformed(ActionEvent evt) { String arg = evt.getActionCommand(); if (arg.equals("Join")) // change name { belotGame.getPlayer(PLAYER_1).setTotalPoints(0); belotGame.getPlayer(PLAYER_2).setTotalPoints(0); belotGame.getPlayer(PLAYER_1).resetHand(); belotGame.getPlayer(PLAYER_2).resetHand(); joinButton.setVisible(false); rulesButton.setVisible(false); wait1Button.setVisible(true); setMessages("Wait for", "Opponent"); } else if (arg.equals("Rules")) { URL url = null; try { url = new URL("http://cs.montana.edu/~paxton/tutorial/belot.htm"); } catch (MalformedURLException e) {} getAppletContext().showDocument(url); } else if (arg.equals("Wait1")) { belotGame.selectDealer(); wait1Button.setVisible(false); wait2Button.setVisible(true); setMessages("Wait for", "Deal"); } else if (arg.equals("Wait2")) { belotGame.dealFiveCards(); dealer = belotGame.getDealerNumber(); wait2Button.setVisible(false); if (dealer == PLAYER_2) { acceptTrumpChoice.setVisible(true); setMessages("Make a", "Bid"); } else { wait3Button.setVisible(true); setMessages("Wait for", "Other Bid"); } } else if (arg.equals("Wait3")) { wait3Button.setVisible(false); if (dealer == PLAYER_2) { callTrumpChoice.setVisible(true); setMessages("Make a", "Bid"); } else { acceptTrumpChoice.setVisible(true); setMessages("Make a", "Bid"); } } else if (arg.equals("Wait4")) { wait4Button.setVisible(false); if (dealer == PLAYER_2) { belotGame.callTrump(SPADES, PLAYER_2); wait5Button.setVisible(true); setMessages("Wait for", "Final Deal"); } else { callTrumpChoice.setVisible(true); setMessages("Make a", "Bid"); } } else if (arg.equals("Wait5")) { wait5Button.setVisible(false); trumpIsKnown(); } else if (arg.equals("Wait6")) { wait6Button.setVisible(false); if (trickLeader == PLAYER_2) { opponentCard = belotGame.getComputerLead(); clickableImages=true; setMessages("Select", "Card!"); cardTwo.setImage(opponentCard.getImage()); } } else if (arg.equals("Wait7")) { wait7Button.setVisible(false); belotGame.determineWinner(); trickLeader = belotGame.getWhoseTurn(); playSequence(); } else if (arg.equals("Wait8")) { wait8Button.setVisible(false); belotGame.calculateScores(); int scorePlayer = belotGame.getPlayer(PLAYER_1).getTotalPoints(); int scoreOpponent = belotGame.getPlayer(PLAYER_2).getTotalPoints(); if ((scorePlayer >= POINTS_TO_WIN) || (scoreOpponent >= POINTS_TO_WIN)) { joinButton.setVisible(true); if (scorePlayer > scoreOpponent) { setMessages("You", "Win!"); } else if (scoreOpponent > scorePlayer) { setMessages("You", "Lose!"); } else { setMessages("You", "Tied!"); } } else { belotGame.selectDealer(); wait2Button.setVisible(true); setMessages("Wait for", "Deal"); } } repaint(); } public void setMessages(String m1, String m2) { message1 = m1; message2 = m2; } public void placeComponent (Component component, int row, int column) { int x = column * width / NUMBER_COLUMNS; int y = row * height / NUMBER_ROWS; component.setBounds(x + 10, y + 10, width/NUMBER_COLUMNS - 20, height/NUMBER_ROWS - 20); } void displayString(int row, int column, int whichOne, int howMany, String text) { Graphics g = getGraphics(); int x = column * width / NUMBER_COLUMNS; int y = row * height / NUMBER_ROWS; int yGap = ((height / NUMBER_ROWS) - (fm.getHeight() * howMany) - (howMany - 1)*(height/NUMBER_ROWS/20)) / 2; x += (width/NUMBER_COLUMNS - fm.stringWidth(text)) / 2; // center horizontally y += yGap + fm.getHeight()*whichOne + (height/NUMBER_ROWS/20*(whichOne - 1)); g.drawString(text, x, y); } void displayStringTop(int row, int column, int whichOne, String text) { Graphics g = getGraphics(); int x = column * width / NUMBER_COLUMNS; x += (width/NUMBER_COLUMNS - fm.stringWidth(text)) / 2; int y = row * height / NUMBER_ROWS + whichOne * fm.getHeight(); g.drawString(text, x, y); } void displayStrings (int row, int column, String text1, String text2) { displayString(row, column, 1, 2, text1); displayString(row, column, 2, 2, text2); } void displayStrings (int row, int column, String text1, String text2, String text3) { displayString(row, column, 1, 3, text1); displayString(row, column, 2, 3, text2); displayString(row, column, 3, 3, text3); } void displayStringsTop (int row, int column, String text1, String text2) { displayStringTop(row, column, 1, text1); displayStringTop(row, column, 2, text2); } // how to move this to CardImage???? void displayCard (CardImage card) { if (card.getDisplay() == true) { // vs. getGraphics().drawImage... getGraphics().drawImage(card.getImage(), card.getTopLeftX(), card.getTopLeftY(), card.getXExpanse(), card.getYExpanse(), this); } } private Button joinButton; private Button wait1Button; private Button wait2Button; private Button wait3Button; private Button wait4Button; private Button wait5Button; private Button wait6Button; private Button wait7Button; private Button wait8Button; // deal private Button rulesButton; private Choice acceptTrumpChoice; private Choice callTrumpChoice; private CardImage cards []; private CardImage cardOne; private CardImage cardTwo; private CardImage cardThree; private Card opponentCard; private Image cardBackImage; private Game belotGame; private boolean clickableImages; private int dealer; private int trickLeader; private int height; // height of applet private int width; // width of applet private String message1; private String message2; private FontMetrics fm; } |