Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 8 of 8

Thread: Making a Card Game...Need help displaying pictures of Cards

  1. #1
    Junior Member
    Join Date
    May 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Making a Card Game...Need help displaying pictures of Cards

    Hello!

    I'm fairly new to java and my project requires me to create a card game using at least 3 Linked Lists.
    My game is working perfectly with the exception of trying to display card images rather than text on my applet window.
    I've been tinkering with it, but I always seem to get a NullPointerException.
    So could anyone please help me out in displaying card images?
    Here are the card pictures I'm trying to use:
    windows-playing-cards.jpg

    and here is my code:
    package project4homeversion;
     
     
     /* Ronald U. 
      * CMPSCI182 - Project 4: Card Game
      * April 25, 2013
      * In this applet, the user plays a game of Blackjack.  The
      * computer acts as the dealer.  The user plays by clicking
      * "Hit!" and "Stand!" buttons.    
     */
     
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import sun.java2d.pipe.DrawImage;
     
     
        public class BlackjackGUI extends JApplet {
           private static int winxpos=0, winypos=0;
           private static JApplet myFrame = null;
           public void init() {
     
                 // The init() method creates components and lays out the applet.
                 // A BlackjackCanvas occupies the CENTER position of the layout.
                 // On the bottom is a panel that holds three buttons.  The
                 // BlackjackCanvas object listens for events from the buttons
                 // and does all the real work of the program.
     
              setBackground( new Color(130,50,40) );
     
              BlackjackCanvas board = new BlackjackCanvas();
              getContentPane().add(board, BorderLayout.CENTER);
     
              JPanel buttonPanel = new JPanel();
              buttonPanel.setBackground( new Color(220,200,180) );
              getContentPane().add(buttonPanel, BorderLayout.SOUTH);
     
              JButton hit = new JButton( "Hit!" );
              hit.addActionListener(board);
              buttonPanel.add(hit);
     
              JButton stand = new JButton( "Stand!" );
              stand.addActionListener(board);
              buttonPanel.add(stand);
     
              JButton newGame = new JButton( "New Game" );
              newGame.addActionListener(board);
              buttonPanel.add(newGame);
     
              setSize(800,700);
              setLocation(winxpos,winypos);
     
              setVisible(true);
     
           }  // end init()
     
           public Image load_picture(String fname){
               Image image;
               MediaTracker tracker = new MediaTracker(myFrame);
               image = myFrame.getToolkit().getImage(fname);
               tracker.addImage(image, 0);
               try {
                   tracker.waitForID(0);
               }
               catch (InterruptedException e){
                   System.err.println(e);
               }
               if (tracker.isErrorID(0)){
                   image = null;
               }
               return image;
           }
     
           public Insets getInsets() {
                 // Specify how much space to leave between the edges of
                 // the applet and the components it contains.  The background
                 // color shows through in this border.
              return new Insets(3,3,3,3);
           }
     
     
           // --- The remainder of this class consists of a nested class ---
     
     
           class BlackjackCanvas extends JPanel implements ActionListener {
     
                 // A nested class that displays the card game and does all the work
                 // of keeping track of the state and responding to user events.
     
              Deck deck;         // A deck of cards to be used in the game.
     
              BlackjackHand dealerHand;   // Hand containing the dealer's cards.
              BlackjackHand playerHand;   // Hand containing the user's cards.
     
              String message;  // A message drawn on the canvas, which changes
                               //    to reflect the state of the game.
     
              boolean gameInProgress;  // Set to true when a game begins and to false
                                       //   when the game ends.
     
              Font bigFont;      // Font that will be used to display the message.
              Font smallFont;    // Font that will be used to draw the cards.
     
     
              BlackjackCanvas() {
                    // Constructor.  Creates fonts and starts the first game.
                 setBackground( new Color(0,120,0) );
                 smallFont = new Font("SansSerif", Font.PLAIN, 12);
                 bigFont = new Font("Serif", Font.BOLD, 14);
                 doNewGame();
              }
     
     
              public void actionPerformed(ActionEvent evt) {
                     // Respond when the user clicks on a button by calling
                     // the appropriate procedure. 
                 String command = evt.getActionCommand();
                 if (command.equals("Hit!"))
                    doHit();
                 else if (command.equals("Stand!"))
                    doStand();
                 else if (command.equals("New Game"))
                    doNewGame();
              }
     
     
     
     
              void doHit() {
                     // This method is called when the user clicks the "Hit!" button.
                     // First check that a game is actually in progress.  If not, give
                     // an error message and exit.  Otherwise, give the user a card.
                     // The game can end at this point if the user goes over 21 or
                     // if the user has taken 5 cards without going over 21.
                 if (gameInProgress == false) {
                    message = "Click \"New Game\" to start a new game.";
                    repaint();
                    return;
                 }
                 playerHand.addCard( deck.dealCard() );
                 if ( playerHand.getBlackjackValue() > 21 ) {
                    message = "You've busted!  Sorry, you lose.";
                    gameInProgress = false;
                 }
                 else if (playerHand.getCardCount() == 5) {
                    message = "You win by taking 5 cards without going over 21.";
                    gameInProgress = false;
                 }
                 else {
                    message = "You have " + playerHand.getBlackjackValue() + ".  Hit or Stand?";
                 }
                 repaint();
              }
     
     
              void doStand() {
                      // This method is called when the user clicks the "Stand!" button.
                      // Check whether a game is actually in progress.  If it is,
                      // the game ends.  The dealer takes cards until either the
                      // dealer has 5 cards or more than 16 points.  Then the 
                      // winner of the game is determined.
                 if (gameInProgress == false) {
                    message = "Click \"New Game\" to start a new game.";
                    repaint();
                    return;
                 }
                 gameInProgress = false;
                 while (dealerHand.getBlackjackValue() <= 16 && dealerHand.getCardCount() < 5)
                    dealerHand.addCard( deck.dealCard() );
                 if (dealerHand.getBlackjackValue() > 21)
                     message = "You win!  Dealer has busted with " + dealerHand.getBlackjackValue() + ".";
                 else if (dealerHand.getCardCount() == 5)
                     message = "Sorry, you lose.  Dealer took 5 cards without going over 21.";
                 else if (dealerHand.getBlackjackValue() > playerHand.getBlackjackValue())
                     message = "Sorry, you lose, " + dealerHand.getBlackjackValue()
                                                       + " to " + playerHand.getBlackjackValue() + ".";
                 else if (dealerHand.getBlackjackValue() == playerHand.getBlackjackValue())
                     message = "Sorry, you lose.  Dealer wins on a tie.";
                 else
                     message = "You win, " + playerHand.getBlackjackValue()
                                                       + " to " + dealerHand.getBlackjackValue() + "!";
                 repaint();
              }
     
     
              void doNewGame() {
                     // Called by the constructor, and called by actionPerformed() if
                     // the use clicks the "New Game" button.  Start a new game.
                     // Deal two cards to each player.  The game might end right then
                     // if one of the players had blackjack.  Otherwise, gameInProgress
                     // is set to true and the game begins.
                 if (gameInProgress) {
                         // If the current game is not over, it is an error to try
                         // to start a new game.
                    message = "You still have to finish this game!";
                    repaint();
                    return;
                 }
                 deck = new Deck();   // Create the deck and hands to use for this game.
                 dealerHand = new BlackjackHand();
                 playerHand = new BlackjackHand();
                 deck.shuffle();
                 dealerHand.addCard( deck.dealCard() );  // Deal two cards to each player.
                 dealerHand.addCard( deck.dealCard() );
                 playerHand.addCard( deck.dealCard() );
                 playerHand.addCard( deck.dealCard() );
                 if (dealerHand.getBlackjackValue() == 21) {
                     message = "Sorry, you lose.  Dealer has Blackjack.";
                     gameInProgress = false;
                 }
                 else if (playerHand.getBlackjackValue() == 21) {
                     message = "You win!  You have Blackjack.";
                     gameInProgress = false;
                 }
                 else {
                     message = "You have " + playerHand.getBlackjackValue() + ".  Hit or stand?";
                     gameInProgress = true;
                 }
                 repaint();
              }  // end newGame();
     
     
              public void paintComponent(Graphics g) {
                    // The paint method shows the message at the bottom of the
                    // canvas, and it draws all of the dealt cards spread out
                    // across the canvas.
     
                 super.paintComponent(g); // fill with background color.
     
                 g.setFont(bigFont);
                 g.setColor(Color.green);
                 g.drawString(message, 10, getSize().height - 10);
     
                 // Draw labels for the two sets of cards.
     
                 g.drawString("Dealer's Cards:", 10, 23);
                 g.drawString("Your Cards:", 10, 153);
     
                 // Draw dealer's cards.  Draw first card face down if
                 // the game is still in progress,  It will be revealed
                 // when the game ends.
     
                 g.setFont(smallFont);
                 if (gameInProgress)
                    drawCard(g, null, 10, 30);
                 else
                    drawCard(g, dealerHand.getCard(0), 10, 30);
                 for (int i = 1; i < dealerHand.getCardCount(); i++)
                    drawCard(g, dealerHand.getCard(i), 10 + i * 90, 30);
     
                 // Draw the user's cards.
     
                 for (int i = 0; i < playerHand.getCardCount(); i++)
                    drawCard(g, playerHand.getCard(i), 10 + i * 90, 160);
     
              }  // end paint();
     
     
              void drawCard(Graphics g, Card card, int x, int y) {
                      // Draws a card as a 80 by 100 rectangle with
                      // upper left corner at (x,y).  The card is drawn
                      // in the graphics context g.  If card is null, then
                      // a face-down card is drawn
                 if (card == null) {  
                        // Draw a face-down card
                    g.setColor(Color.blue);
                    g.fillRect(x,y,80,100);
                    g.setColor(Color.white);
                    g.drawRect(x+3,y+3,73,93);
                    g.drawRect(x+4,y+4,71,91);
                 }
                 else {
                    g.setColor(Color.white);
                    g.fillRect(x,y,80,100);
                    g.setColor(Color.gray);
                    g.drawRect(x,y,79,99);
                    g.drawRect(x+1,y+1,77,97);
     
                    g.drawString(card.getValueAsString(), x + 10, y + 30);
     
     
                 }
              }  // end drawCard()
     
     
           } // end nested class BlackjackCanvas
     
     
        } // end class BlackjackGUI

    If you need to see my other two classes, just let me know!


  2. #2
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    25,140
    Thanks
    65
    Thanked 2,720 Times in 2,670 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    seem to get a NullPointerException.
    Please copy the full text of the error messages and paste it here.

    Also posted at http://forums.devshed.com/java-help-...et-944249.html
    If you don't understand my answer, don't ignore it, ask a question.

  3. #3
    Junior Member
    Join Date
    May 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    Quote Originally Posted by Norm View Post
    Please copy the full text of the error messages and paste it here.
    java.lang.NullPointerException
    at project4homeversion.BlackjackGUI.load_picture(Blac kjackGUI.java:61)
    at project4homeversion.Card.<init>(Card.java:38)
    at project4homeversion.Deck.<init>(Deck.java:22)
    at project4homeversion.BlackjackGUI$BlackjackCanvas.d oNewGame(BlackjackGUI.java:200)
    at project4homeversion.BlackjackGUI$BlackjackCanvas.< init>(BlackjackGUI.java:111)
    at project4homeversion.BlackjackGUI.init(BlackjackGUI .java:32)
    at sun.applet.AppletPanel.run(AppletPanel.java:425)
    at java.lang.Thread.run(Thread.java:680)

  4. #4
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    25,140
    Thanks
    65
    Thanked 2,720 Times in 2,670 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    java.lang.NullPointerException
    at project4homeversion.BlackjackGUI.load_picture(Blac kjackGUI.java:61)
    There is a variable with a null value on line 61. Look at line 61 in the your source and see what variable is null. Then backtrack in the code to see why that variable does not have a valid value.
    If you can not tell which variable it is, add a println just before line 61 and print out the values of all the variables on that line.
    If you don't understand my answer, don't ignore it, ask a question.

  5. #5
    Junior Member
    Join Date
    May 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    Quote Originally Posted by Norm View Post
    There is a variable with a null value on line 61. Look at line 61 in the your source and see what variable is null. Then backtrack in the code to see why that variable does not have a valid value.
    If you can not tell which variable it is, add a println just before line 61 and print out the values of all the variables on that line.
    myFrame is equal to null and my MediaTracker is taking the value of null in my load_picture method.

  6. #6
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    25,140
    Thanks
    65
    Thanked 2,720 Times in 2,670 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    Try using the ImageIO class's read() method to read the images.
    If you don't understand my answer, don't ignore it, ask a question.

  7. #7
    Junior Member
    Join Date
    May 2013
    Posts
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    Quote Originally Posted by Norm View Post
    Try using the ImageIO class's read() method to read the images.
    How would I do that?

  8. #8
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    25,140
    Thanks
    65
    Thanked 2,720 Times in 2,670 Posts

    Default Re: Making a Card Game...Need help displaying pictures of Cards

    Read the API doc for the class and how to use its methods:
    Java Platform SE 7

    Do a search here for code samples.
    If you don't understand my answer, don't ignore it, ask a question.

Similar Threads

  1. Replies: 4
    Last Post: January 10th, 2014, 05:25 AM
  2. Really having trouble making jar files work with pictures
    By loui345 in forum Java Theory & Questions
    Replies: 21
    Last Post: March 6th, 2013, 08:46 PM
  3. help making war card game
    By thephipster in forum What's Wrong With My Code?
    Replies: 1
    Last Post: May 25th, 2012, 01:39 PM
  4. I'm making a program that recognizes cards say for poker
    By Lurie1 in forum What's Wrong With My Code?
    Replies: 8
    Last Post: February 13th, 2012, 04:44 PM
  5. Card Game help....
    By macFs89H in forum What's Wrong With My Code?
    Replies: 1
    Last Post: May 2nd, 2011, 07:55 AM