[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

Question
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

8.2

I want to set my Jave game images to opaque

Asked by pjcrooks2000 in Java Programming Language

Tags: jave

Hi all, I have my Java game the code below.  I want to have my Java game images to appear opaque onscreen and need some advice on how to do this.   The images are in the snake classthese ones:

food = ImageIO.read(new File("snakeimages/food.jpg"));
body = ImageIO.read(new File("snakeimages/snakebits.jpg"));

I have created the images in Photoshop with a transparent background!!!

Thank you all in anticipation

pjcrooks2000


JaySnake:::

import java.awt.*;
import java.awt.event.*;
import java.awt.* ;
import java.awt.event.* ;
import java.awt.image.* ;
import javax.imageio.* ;
import java.io.* ;
import javax.swing.* ;
import java.util.*;
import java.applet.AudioClip;
import java.applet.Applet;
import java.net.URL;

public class JaySnake extends JFrame implements ActionListener
{
 class Game extends JPanel implements Runnable
 {
     private BufferedImage backBuffer ;
   private Graphics myBackBuffer ;
 
/*The HashMap  class is roughly equivalent to Hashtable,
*except that it is unsynchronized and permits nulls*/
   HashMap imageMap = new HashMap(4);
    public int waitTime = 65;

/*Method used to get text from background menu items and set background image from that*/
    public void setImage(String fileName) throws Exception
    {
         if (fileName.equals("backgrounds/default")) //Sets background to default image
         {
                   backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
        }
        else if (fileName.equals("Long grass")) //Sets background to longGrass image
        {
                  backgroundImage = ImageIO.read( new File( "backgrounds/longGrass.jpg" ) );
        }
        else if (fileName.equals("Yellow Sand"))//Sets background to sand image
        {
                 backgroundImage = ImageIO.read( new File( "backgrounds/sand.jpg" ) );
        }
               else if (fileName.equals("Blue Glass")) //Sets background to blueGrass image
        {
                 backgroundImage = ImageIO.read( new File( "backgrounds/blueGlass.jpg" ) );
        }
        else //Sets to default if none mathced
        {
                  backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
        }
    }
      public Game()
   {

 /******Try read in default backgroundImage file and catch any exception*/
     try //first read in default image
     {
           backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
           clip = Applet.newAudioClip(new URL("file:" + System.getProperty("user.dir") + "/sounds/music.au"));
           appleEaten = Applet.newAudioClip(new URL("file:" + System.getProperty("user.dir") + "/sounds/apple.au"));
     }
     catch( IOException e )
     {
       System.out.println(e) ;
     }
        backBuffer = new BufferedImage( DISPLAY_W, DISPLAY_H, BufferedImage.TYPE_INT_RGB ) ;
     myBackBuffer = backBuffer.getGraphics() ;

//set up the menubar
     menubar = new JMenuBar();
     setJMenuBar(menubar);

   }

   public void paintComponent( Graphics g )
   {
     g.drawImage( backBuffer, DISPLAY_X, DISPLAY_Y, null ) ;
   }

    public void paint( Graphics g )
   {                    super.paint(g);
       g.drawImage(backgroundImage,0,0,null);

         //Draw green scoreboard and black rects
       g.setColor(Color.black);
       g.fillRect(1,540,598,20);
       g.fillRect(1,34,598,6);
       g.setColor(Color.white);
       g.drawRoundRect(1,0,598,32,10,10);

         //Calls Snake paint method
         if (snake != null)
            snake.draw(g);
                 }
 
   public void run()
   {
     //     1000/25 Frames Per Second = 40millisecond delay
     int delayTime = 1000 / 25 ;

     Thread thisThread = Thread.currentThread() ;
     while( running )
     {
       //startTime = System.currentTimeMillis() ;
       // render to back buffer now
       render( myBackBuffer ) ;

       repaint() ;
       //  handle frame rate
       //elapsedTime = System.currentTimeMillis() - startTime ;
       //waitTime = Math.max( delayTime - elapsedTime, 5 ) ;

       try
       {
              Thread.sleep( waitTime ) ;
       }
       catch( InterruptedException e )
       {}
     }
     System.out.println( "Program Exited" ) ;
   }

 
 }

 private Thread gamePlay ;
 private boolean running = true ;
 private Game game ;

 private final int DISPLAY_X ; // value assigned in constructor
 private final int DISPLAY_Y ; // value assigned in constructor

 private static final int DISPLAY_W = 610 ;
 private static final int DISPLAY_H = 610 ;

 int size, hsize = 0, score1 = 0, score2 = 0, highscore = 0 ;

 /****Creates JMenuBar */
 private JMenuBar menubar ;
 /****Creates JMenu to house items */
 private JMenu gameMenu = new JMenu( "Game" ) ;
 private JMenuItem gameStart = new JMenuItem( "Start" ) ;
 private JMenuItem gameQuit = new JMenuItem( "Quit" ) ;

 private JMenu bgMenu = new JMenu( "Backgrounds" ) ;
 private ButtonGroup bgGroup = new ButtonGroup() ;
 private JRadioButtonMenuItem bg1 = new JRadioButtonMenuItem( "Default" ) ;
 private JRadioButtonMenuItem bg2 = new JRadioButtonMenuItem( "Long grass" ) ;
 private JRadioButtonMenuItem bg3 = new JRadioButtonMenuItem( "Yellow Sand" ) ;
 private JRadioButtonMenuItem bg4 = new JRadioButtonMenuItem( "Blue Glass" ) ;

 private JMenu soundMenu = new JMenu( "Enable sounds" ) ;
 private JCheckBoxMenuItem soundMusic = new JCheckBoxMenuItem( "Music" ) ;
 private JCheckBoxMenuItem soundSound = new JCheckBoxMenuItem( "Sounds" ) ;

 private JMenu helpMenu = new JMenu( "Help" ) ;
 private JMenuItem userInstruct = new JMenuItem( "User Instructions" ) ;
 private JMenuItem helpAbout = new JMenuItem( "About" ) ;

 /******JaySnake constructor*/
 public JaySnake()
 {
   setResizable( false ) ;
   game = new Game();
   getContentPane().add( game, BorderLayout.CENTER ) ;
   this.setJMenuBar( menubar );
         menubar.add( gameMenu ) ;
   gameMenu.add( gameStart ) ;
    // ActionListener to quit the game when quit is clicked
   gameStart.addActionListener( new ActionListener(){  
         public void actionPerformed( ActionEvent e )
         {
            String name = new String();
            name = JOptionPane.showInputDialog( "Please enter your name" );
            snake = new Snake(JaySnake.this, name, (soundForApple ? appleEaten : null));
         }
    });
      gameMenu.add( gameQuit ) ;

   // ActionListener to quit the game when quit is clicked
   gameQuit.addActionListener( new ActionListener(){          public void actionPerformed( ActionEvent e )
        {
            System.exit( 0 );
         }
    });                                                 /*Background selection menubar setup adding actionlisteners*/                          menubar.add( bgMenu ) ;
   bgMenu.add( bg1 ); bg1.addActionListener(this);
   bgMenu.add( bg2 ); bg2.addActionListener(this);
   bgMenu.add( bg3 ); bg3.addActionListener(this);
   bgMenu.add( bg4 ); bg4.addActionListener(this);
/* "bgGroup"  groups menu items for background together*/
        bgGroup.add( bg1 );      bgGroup.add( bg2 );
        bgGroup.add( bg3 );        bgGroup.add( bg4 );

    /*Sounds menubar selection with actionListeners*/      menubar.add( soundMenu );
   soundMusic.setState(true);
   soundMenu.add( soundMusic );
   soundMenu.add( soundSound ) ;
   soundSound.setState(true);

    /* Listeners */
    soundMusic.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent e)
                {
                   try
                   {
                        JCheckBoxMenuItem source = (JCheckBoxMenuItem)(e.getSource());
                        System.out.println(source.getText());
                        if (source.getState())
                        {
                             clip.loop();
                        }
                        else
                        {
                             clip.stop();
                        }
                                          }
                   catch (Exception ex)
                   {
                        System.out.println(ex);
                   }
                }
         });
            soundSound.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent e)
                {
                   try
                   {
                        JCheckBoxMenuItem source = (JCheckBoxMenuItem)(e.getSource());
                        if (source.getState())
                        {
                                  soundForApple = true;
                                  snake.setAppleSound(appleEaten);
                        }
                        else
                        {
                                  soundForApple = false;
                                  snake.setAppleSound(null);
                        }
                   }
                   catch (Exception ex)
                   {
                        System.out.println(ex);
                   }
                }
         });
    /* /Listeners */
      menubar.add( helpMenu ) ;
   helpMenu.add( userInstruct );
   userInstruct.addActionListener(new ActionListener() {

           public void actionPerformed(ActionEvent e) {
               System.out.println("Instructions button pressed");
               //Create new Jframe to view User instructions
               JFrame f = new JFrame();
               JEditorPane p = new JEditorPane("text/html", "");
               f.getContentPane().add(p); // was missing in the previous code snippet
               p.setEditable(false);
               URL instructions = getClass().getResource(
                       "instructions/index.html");
                             try {
                   p.setPage(instructions);

               } catch (Exception ep) {
                   System.out.println("Not Got index.html");
               }

               f.setSize(265, 540);
                             f.setVisible(true);

           }
       });

   helpMenu.add( helpAbout );
   helpAbout.addActionListener( new ActionListener(){             public void actionPerformed( ActionEvent e )
    {
//Create an instance of About class window
                  About dlg = new About( JaySnake.this );
                  Dimension dlgSize = dlg.getPreferredSize();
                  Dimension frmSize = getSize();
                  Point loc = getLocation();
                  dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
                  dlg.setModal(true);
                  dlg.pack();
                  dlg.show();
   }
    } ) ;

   addWindowListener( new WindowAdapter()
   {
     public void windowClosing( WindowEvent e )
     {
       dispose();
       System.exit( 0 ) ;
     }
   } ) ;

   Insets insets = getInsets() ;
   DISPLAY_X = insets.left ;
   DISPLAY_Y = insets.top ;
   resizeToInternalSize( DISPLAY_W, DISPLAY_H ) ;
 }

 public void actionPerformed(ActionEvent e)
 {
    try
    {
         JMenuItem source = (JMenuItem)(e.getSource());
         System.out.println(source.getText());
         game.setImage(source.getText());
    }
    catch (Exception ex)
    {
         System.out.println(ex);
    }
 }

 public void resizeToInternalSize( int internalWidth, int internalHeight )
 {
   Insets insets = getInsets() ;
   final int newWidth = internalWidth + insets.left + insets.right ;
   final int newHeight = internalHeight + insets.top + insets.bottom ;

   Runnable resize = new Runnable()
   {
     public void run()
     {
       setSize( newWidth, newHeight ) ;
     }
   } ;

   if( !SwingUtilities.isEventDispatchThread() )
   {
     try
     {
       SwingUtilities.invokeAndWait( resize ) ;
     }
     catch( Exception e )
     {}
   }
   else
     resize.run() ;

   validate() ;
 }

    public void playMusic()
    {
         clip.loop();
            }
    public void start()
 {
   Thread gamePlay = new Thread( game ) ;
   gamePlay.start() ;
 }

//**************************Main method *************************************
      public static void main(String [] arguments)
    {
        System.out.println( "Starting JaySnake........" ) ;
        final JaySnake app = new JaySnake() ;
          app.addKeyListener(new KeyAdapter() {
           public void keyPressed(KeyEvent keyevent) {
               //System.out.println("Test key press >>>>>>>>>>>>>>>>>>>>>>>>>>");
               app.snake.keyPressed(keyevent);
           }
       });
        app.setSize( DISPLAY_W, DISPLAY_H ) ;
        app.setTitle( "JaySnake Game" ) ;
        app.setVisible( true ) ;
        Splash splash = new Splash(app);

        new Thread(new Runnable()
             {
                  public void run()
                  {
                          try
                          {
                            app.playMusic();
                            Thread.sleep(200);
                       }
                       catch (InterruptedException e)
                       {
                            System.out.println(e);
                       }
                  }                 }).start();
   }

/*Render method for graphics content*/
   public void render( Graphics g )
   {
    if( backgroundImage != null )
       g.drawImage( backgroundImage, 0, 0, this ) ;

/*Draw scoreboard and player details, sets color for score and player
*fills rectangle and text white and draws another rectangle that is used
*to highlight the playing area*/
     g.setColor( Color.black ) ;      /*sets color to black*/
     g.fillRect( 0, 0, 598, 32 ) ; /*fillsRectangle for scoreboard*/
     g.setColor( Color.white ) ;   /*sets color to white for text*/
/*Draws text and uses score variables*/
     g.drawString( "Player 1 score: " + score1, 10, 13 ) ;
     //g.drawString( "Player 2 score: " + score2, 10, 27 ) ;
     g.drawString( "High score: " + highscore, 510, 15 ) ;

      }

 /******declared class variables/containers*/
 private Image backgroundImage ;
 private Snake snake = null;
/* The musicclip to be played.*/
 private AudioClip clip = null;
/* The sound of the applet when eaten.*/
 private AudioClip appleEaten = null;
// Indicate if we want sound for eating the apple
    private boolean soundForApple = true;
}

Snake:::

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import javax.swing.*;
import java.applet.AudioClip;


/*public class Snake implements ActionListener in
*particular [CODE]KeyPressed[/CODE]*/

public class Snake implements ActionListener
{

    // The sound of eating an apple
    AudioClip appleEaten = null;
   /*Image declarations treat and snake body parts
*/
 private Image food, body;

/*class variable sp*/
   private JaySnake sp;
    /*Used for users name input from dialogue*/
   private String player;


/*int variable declarations*/
 private int size =3,
         dir,
         score1 =0,
         score2 = 0;
     
/*boolean state declarations*/
 boolean game = false,
         ate=false,
         gameplay=false,
         collide = false;
       /*Array of points for location on the screen of snake and apples*/
         Point[] location = new Point[600];

         Point treat = new Point(12,7);

/*Constructor - passing snake class to app defined in class as sp*/
    public Snake(JaySnake app, String player, AudioClip appleEaten)
    {
         this.appleEaten = appleEaten;
         this.player = player;
         sp = app;

//initialise all points with 0
           for(int i=0; i<600; i++)
       location[i] = new Point(0,0);

         // Setting all starting points
         location[2].move(15,25);
         location[1].move(15,24);
         location[0].move(15,23);
         treat.move(1,6);

//try read in treat and food images
         try
         {
              food = ImageIO.read(new File("snakeimages/food.jpg"));
              body = ImageIO.read(new File("snakeimages/snakebits.jpg"));
         }     catch(IOException e)
         {System.out.println(e);
         }

              try{ Thread.sleep(70); }
         catch(InterruptedException e) { }
    }

    public void setAppleSound(AudioClip clip)
    {
         this.appleEaten = clip;
    }
   /* [code]public void actionPerformed[/code] on KeyPress repaint sp snake panel.*/
    public void actionPerformed(ActionEvent event)
    {
       sp.repaint();
    }

/*Snake class graphics method*/
   public void draw( Graphics g )
   {
         //Draw score board texts
       g.setColor(Color.green);
        g.drawString(player + "'s score: "+score1,10,13);
        g.drawString( "Top score: "+score2,500,15);
              //Draws the first treat onscreen
       g.drawImage(food,treat.x*20-20,treat.y*20-20,19,19,null);
     
         //Collison detection for treat
       if(gameplay)
       {
            if(location[0].x==treat.x && location[0].y==treat.y)
            {
                   if (appleEaten != null)
                 {
                      appleEaten.play();
                 }
                                ate=true;
                 size++;
                 score1++;
            }
                       // Drawing new head position, erasing last tale position
            if(location[size-1].x == treat.x && location[size-1].y == treat.y)
                 g.drawImage(food,treat.x*20-20,treat.y*20-20,19,19,null);
                 //Move snake body parts based on cases of dir (direction)
            if(gameplay)
            {
                 for(int i=size; i>0; i--)
                      location[i].move(location[i-1].x, location[i-1].y);
                    switch(dir)
                 {
                      case 0: location[0].x = location[0].x+1; break;
                      case 1: location[0].x = location[0].x-1; break;
                      case 2: location[0].y = location[0].y-1; break;
                      case 3: location[0].y = location[0].y+1; break;
                 }
            }
                 // Checking if had just eaten an treat, if yes - draw new treat location
            if( ate )
            {
                ate = false;
                   //Math.randon generate new apple positions using the co-ordiantes
                treat.x=(int)(Math.random()*30+1);
                treat.y=(int)(Math.random()*25+3);
                   //print co-ordinateds if required
                   //System.out.println("treat.x = "+treat.x+" treat.y = " +treat.y);
                 g.drawImage(food,treat.x*20-20,treat.y*20-20,19,19,null);
                            }
        }

         // Check for collison with walls and snake bits
       for(int i=3; i<size; i++)
            if(location[0].x == location[i].x && location[0].y == location[i].y)
                {
                     gameplay = false;
                 restart();
               }
            //Walls collison
       if(((collide ||
               (dir==0 && location[0].x==31) || //Right co-ordinates
                 (dir==1 && location[0].x==0) ||   //Left co-ordinates
                 (dir==2 && location[0].y==2) ||  //Top  co-ordinates
               (dir==3 && location[0].y==28))))  //Bottom co-ordinates
           {
            gameplay = false;
               restart();
       }

         //Sets images for body
       for(int i=0; i<size; i++)
            g.drawImage(body,location[i].x*20-20,location[i].y*20-20,20,20,null);
    }//end snake draw method

    /*resets game settings including location of snake and apple.  Also updates
     *the Top score and resets player score*/
    public void restart()
    {
         System.out.println("restart");
              // Setting all starting points again
       if(score1>score2){
       score2 = score1;}
       score1 = 0;
       game = false;
       dir =0;
       size=3;
         //Move snake back to original position
       location[2].move(15,25);
       location[1].move(15,24);
       location[0].move(15,23);
         //Re generate new apple locations
       treat.x=(int)(Math.random()*30+1);
       treat.y=(int)(Math.random()*25+3);
      }

    /*If keys are presees up Arrow, Down Arrow, Left Arrow and Right Arrow
     *move snake to new location on grid */
    public void keyPressed(KeyEvent evt)
    {
       int key = evt.getKeyCode();
       if(key == KeyEvent.VK_RIGHT && location[1].x!=location[0].x+1) { dir=0; gameplay=true; }
       else if(key == KeyEvent.VK_LEFT && location[1].x!=location[0].x-1) { dir=1; gameplay=true;}
       else if(key == KeyEvent.VK_UP && location[1].y!=location[0].y-1) { dir=2; gameplay=true;}
       else if(key == KeyEvent.VK_DOWN && location[1].y!=location[0].y+1) { dir=3; gameplay=true;}
       else if(key == 112 || key == 1508)
       {
        gameplay=false;
         }
    }
}//end class

[+][-]08/29/04 01:40 PM, ID: 11927079Accepted Solution

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

About this solution

Zone: Java Programming Language
Tags: jave
Sign Up Now!
Solution Provided By: girionis
Participating Experts: 1
Solution Grade: A
 
[+][-]08/29/04 12:23 PM, ID: 11926807Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 12:24 PM, ID: 11926813Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/04 12:26 PM, ID: 11926818Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 12:27 PM, ID: 11926821Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 12:29 PM, ID: 11926829Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 12:36 PM, ID: 11926852Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/04 12:37 PM, ID: 11926854Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 12:42 PM, ID: 11926871Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/04 01:19 PM, ID: 11927007Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 01:21 PM, ID: 11927015Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/04 01:47 PM, ID: 11927104Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08/29/04 01:53 PM, ID: 11927127Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]08/29/04 02:00 PM, ID: 11927160Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
 
Loading Advertisement...
20091111-EE-VQP-92