All pastes #1030200 Raw Edit

:(!

public text v1 · immutable
#1030200 ·published 2008-05-26 18:03 UTC
rendered paste body

import java.lang.*;
import java.awt.*;
import java.applet.*;



public class Pong extends Applet implements Runnable 
{
  boolean initializing = true;    
  boolean done = false;           
  boolean start = false;          
  boolean hit = false;            
  int easiness;                   
  int enemyscore,playerscore;     

  Thread game;                    
  Point mouse;                    
  Point ball;                     
  double ball_dx, ball_dy;        
  int ballRadius;                 
  Rectangle player, enemy, walls; .
  AudioClip wavPong;              
  Image doublebuffer;             
  Image bgImage;                  
  Font scoreFont;                 

 
  public void init(){

    int x,y,w,h;

    mouse = new Point( 0, 0 );  
    
  
    doublebuffer = createImage( getWidth(), getHeight() );   



    
 
    scoreFont = new Font( "Impact", Font.PLAIN, (int)( getHeight()*0.15) ); 


    x = (int)( 0.01 * getWidth() );  
    y = (int)( 0.01 * getHeight() );
                   
    
    walls = new Rectangle( x, y, getWidth() - x*2, getHeight() - y*2 );

    w = (int)( 0.02 * getWidth() ); 
    h = (int)( 0.35 * getHeight() ); 


    x = (int)( walls.x + w );    
    player = new Rectangle( x, getHeight()/2, w, h );

    x = (int)( ( walls.width + walls.x ) - w );
    enemy = new Rectangle( x, getHeight()/2, w, h );
    easiness = 20;  


    ballRadius = 16;
    ball = new Point( getWidth() / 2, getHeight() / 2 ); 


    enemyscore = 0;
    playerscore = 0;   
  }



  public void start()
  {
    wavPong = getAudioClip( getCodeBase(), "pong.wav" );    

    bgImage = getImage( getCodeBase(), "kalle.Gif" );    

    initializing = false; 

    game = new Thread( this ); 
    game.start();              
  }



  public void stop() 
  {
    done = true;
  }



  public boolean mouseDown( Event e, int x, int y )
  {
    if ( start == false )
      startGame();

    return true;
  }



  public boolean mouseMove( Event e, int x, int y )
  {
    mouse.x = x; 
    mouse.y = y;
    return true;
  }


  public void run()
  {
  
    while( !done )
    {
      testPlayer();
      testEnemy();
      testWalls();
      updatePlayer();
      updateEnemy();
      updateBall();
      playSounds();
      repaint();
      try {
        Thread.sleep( 1000/60 ); 
      }
      catch( Exception e ){}
    }
  }


  void startGame()
  {


		double speedX = 0.006; 
		double speedY = 0.004;

    start = true;

  
    ball.x = getWidth() / 2;
    ball.y = getHeight() / 2;


  
    boolean isEven; 
		double speedScale; 

    isEven = ( (int)( Math.random() * 10) % 2 == 0 );
    ball_dx = speedX*getWidth() * ( isEven ? -1 : 1 );

    isEven = ( (int)( Math.random() * 10) % 2 == 0 );
    ball_dy = speedY*getHeight() * ( isEven ? -1 : 1 );
  }


  void testWalls()
  {
    int left   = walls.x;
    int top    = walls.y;

    int right  = walls.x + walls.width;
    int bottom = walls.y + walls.height;

    if ( ( ball.x + ball_dx - ballRadius ) <= left ) 
      score();
    
    if ( ( ball.x + ball_dx + ballRadius) >= right ) 
      score();

    if ( ( ball.y + ball_dy - ballRadius) <= top ) 
      ball_dy *= -1;

    if ( ( ball.y + ball_dy + ballRadius) >= bottom ) 
      ball_dy *= -1;
  }


  void testPlayer()
  {

    if ( ball_dx < 0 )
    {
 
      int right = player.x + player.width / 2;

      int top = player.y - player.height / 2;
      int bottom = player.y + player.height / 2;

      if ( (ball.x - ballRadius) <= right )
      {
        if ( ball.y + ballRadius > top && ball.y - ballRadius < bottom )
        {
          ball_dx *= -1.05;
          ball_dy *= 1.05;
          hit = true; 
        } 
      }
    }
  }

  
  void testEnemy()
  {
 
    if ( ball_dx > 0 )
    { 
 

      int left = enemy.x - player.width / 2;

      int top = enemy.y - player.height / 2;
      int bottom = enemy.y + player.height / 2;

      if ( (ball.x + ballRadius) >= left )
      {
        if ( ball.y + ballRadius > top && ball.y - ballRadius < bottom )
        {
          ball_dx *= -1.05;
          ball_dy *= 1.05;
          hit = true; 
        } 
      }
    }
  }


  void playSounds()
  {
 
    if ( hit )
    { 
      wavPong.play(); 
      hit = false;
    }
  }



  void score()
  {

    if ( ball_dx > 0 )
    { 
      playerscore++;
      easiness *= 0.80;    
    }

    else 
    {                
      enemyscore++;
    }

    ball.x = getWidth() / 2;  
    ball.y = getHeight() / 2;


    ball_dx = 0; 
    ball_dy = 0;

    start = false;   
  }



  void updatePlayer()
  {
    player.y = mouse.y;
  }



  void updateEnemy()
  {
    int yDistanceToBall;

    if (ball_dx > 0)
    {
      yDistanceToBall = Math.abs( ball.y - enemy.y );

    
      if ( ball.y + ball_dy < enemy.y ) 
        enemy.y += ( -1 * yDistanceToBall / easiness );

      else if ( ball.y + ball_dy > enemy.y )
        enemy.y += ( yDistanceToBall / easiness );
    }
    
   
    else 
    {
     
      if ( enemy.y < getHeight() / 2 - 1 ) 
        enemy.y += 2; 

      else if ( enemy.y > getHeight() / 2 + 1 )
        enemy.y += -2; 
    }
  }


  void updateBall()
  {
    ball.x += ball_dx;
    ball.y += ball_dy;
  }



  public void update( Graphics g ) 
  {
    paint(g);
  }



  public void paint( Graphics g )
  {
    int x,y;

    if ( initializing )
    { 
 
      g.drawString( "Initializing...", getWidth() - 15, getHeight() / 2 );
      return;
    }


    Graphics dbG = doublebuffer.getGraphics();  


 
    dbG.setColor( Color.RED );
    dbG.fillRect(0, 0, getWidth(), getHeight() );


    // Draw background image, centered.
		/*
    dbG.drawImage( bgImage, getWidth() / 2 - bgImage.getWidth( this ) / 2,
      getHeight() / 2 - bgImage.getHeight( this ) / 2, this );   
    */
	  dbG.drawImage( bgImage, 0, 0, getWidth(), getHeight(), 
				                    0, 0, bgImage.getWidth(this), 
														      bgImage.getHeight(this), this );

    // Draw Score board, center and above playfield.
    dbG.setColor( Color.YELLOW );
    dbG.setFont( scoreFont );

    int len;

    len = dbG.getFontMetrics().stringWidth( "00" );

    y = (int)( 0.025*getWidth() + dbG.getFontMetrics().getHeight() );

    x = (int)( getWidth() / 4 - len/2 );
    dbG.drawString( formatScore( playerscore ), x, y );


    x = (int)( getWidth() / 4*3 - len/2 );
    dbG.drawString( formatScore( enemyscore ), x, y );

   

 
    dbG.setColor( Color.BLACK );

    dbG.drawRect( walls.x-1, walls.y-1, walls.width+2, walls.height+2 );
    dbG.drawRect( walls.x+1, walls.y+1, walls.width-2, walls.height-2 );


    dbG.setColor( Color.WHITE );

    dbG.drawRect( walls.x, walls.y, walls.width, walls.height );


 
    dbG.setColor( Color.BLACK ); 

    dbG.fillOval( ball.x-ballRadius, ball.y-ballRadius, 
        ballRadius*2, ballRadius*2 ); 


 
    dbG.setColor( Color.WHITE ); 

    dbG.fillOval( ball.x-ballRadius+2, ball.y-ballRadius+2, 
        ballRadius*2 - 4, ballRadius*2 - 4 );


   
    dbG.setColor( Color.BLACK );

    dbG.fillRect( player.x - player.width/2, player.y - player.height/2,
        player.width, player.height );


    dbG.setColor( Color.WHITE );

    dbG.fillRect( player.x - player.width/2 + 2, player.y - player.height/2 + 2,
        player.width - 4 , player.height - 4 );

 
    
    dbG.setColor( Color.BLACK );

    dbG.fillRect( enemy.x - enemy.width/2, enemy.y - enemy.height/2,
        enemy.width, enemy.height );


    dbG.setColor( Color.WHITE );

    dbG.fillRect( enemy.x - enemy.width/2 + 2, enemy.y - enemy.height/2 + 2,
        enemy.width - 4, enemy.height - 4 );


    g.drawImage(doublebuffer, 0, 0, this );


 
    dbG.dispose(); 
  }


 String formatScore( int score )
  {
    String str;

    if (score >= 99 )
      str = "99";

    else if (score < 10)
      str = "0" + score;

    else
      str = "" + score;

    return str;
  }
}