|
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;
}
|