📄 trivialapplet.java
字号:
/*
Trivial applet that displays a string
*/
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.util.*;
import java.applet.AudioClip;
public class Pong extends Applet implements MouseListener, KeyListener, MouseMotionListener
{
Image OSC ;
Graphics OSG;
AudioClip hit;
AudioClip buzz;
AudioClip gameover;
AudioClip tetris;
int lives = 5;
int h = getHeight();
int w = getWidth();
final int paddW = 5;
int paddH;
int paddleX;
int paddleY;
int paddle2X;
int paddle3X;
int paddle3Y;
int paddle4Y;
int padd3H = paddW;
int padd3W;
boolean start = false;
Image background;
Image mini;
//make more paddle variables
Vector balls;
public void init() {
addMouseMotionListener(this);
addMouseListener(this);
addKeyListener(this);
buzz = getAudioClip(getCodeBase(), "buzz.wav");
hit = getAudioClip(getCodeBase(), "tennis2.wav");
gameover = getAudioClip(getCodeBase(), "gameover.mid");
background = getImage(getCodeBase(),"pong.jpg");
mini = getImage(getCodeBase(),"mini.jpg");
tetris = getAudioClip(getCodeBase(), "tetris.mid");
h = getHeight();
w = getWidth();
OSC = createImage(w,h);
OSG = OSC.getGraphics();
paddH = w/5;
paddle2X = 3;
paddleX = w-paddW-3;
paddleY = h/2-paddH/2;
paddle3X = w/2;
paddle3Y = 3;
paddle4Y = h-3-padd3H;
padd3W = w/5;
balls = new Vector();
repaint();
}
public void update(Graphics g)
{
//OSG.setColor(Color.black);
//OSG.fillRect(0,0,w,h);
OSG.drawImage(background,0,0,null);
OSG.setColor(Color.white);
paint(OSG);
g.drawImage(OSC,0,0,null);
}
public void paint(Graphics g) {
if(!start){
g.setColor(Color.black);
g.fillRect(0,0,w,h);
g.setColor(Color.red);
g.setFont(new Font("Westminster" , 1, 18));
g.drawString("THANKS FOR PLAYING ZIMARDI PONG!" ,w/2-140, h/2+5);
g.setFont(new Font("Westminster" , 1, 18));
g.drawString(" CLICK WHEN READY" , w/2-140, h/2+60);
} else
if(lives>0){
Ball tempBall;
for(int i = 0; i < balls.size(); i++){
tempBall = (Ball)(balls.elementAt(i));
tempBall.updatePosition(h);
//this if fires when the ball goes where the paddle should be
if(tempBall.posX > w-3-paddW-tempBall.ballSize || tempBall.posX < paddW+3){
if(!hitPaddleX(tempBall.posY,tempBall.ballSize)){
if(balls.size() == 1)
lives--;
if(lives == 0){
tetris.stop();
gameover.play();
}else
buzz.play();
balls.removeElementAt(i);
} else {
tempBall.dirX = tempBall.dirX*-1;
//g.fillOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
//g.setColor(Color.white);
//g.drawOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
}
} else if(tempBall.posY > h-3-padd3H-tempBall.ballSize || tempBall.posY < padd3H+3){
if(!hitPaddleY(tempBall.posX,tempBall.ballSize)){
if(balls.size() == 1)
lives--;
if(lives == 0){
tetris.stop();
gameover.play();
}else
buzz.play();
balls.removeElementAt(i);
} else {
tempBall.dirY = tempBall.dirY*-1;
//g.fillOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
//g.setColor(Color.white);
//g.drawOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
}
}else
g.setColor(tempBall.ballColor);
g.fillOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
g.setColor(Color.white);
g.drawOval((int)tempBall.posX,(int)tempBall.posY,(int)tempBall.ballSize,(int)tempBall.ballSize);
}
try{
Thread.sleep(15);
}
catch(Exception e){}
g.setColor(Color.red);
g.fillRect(paddleX,paddleY, paddW, paddH);
g.setColor(Color.blue);
g.drawRect(paddleX,paddleY, paddW, paddH);
g.fillRect(paddle2X, paddleY, paddW, paddH);
g.setColor(Color.red);
g.drawRect(paddle2X, paddleY, paddW, paddH);
g.setColor(Color.green);
g.fillRect(paddle3X, paddle3Y, padd3W, padd3H);
g.setColor(Color.red);
g.drawRect(paddle3X, paddle3Y, padd3W, padd3H);
g.setColor(Color.green);
g.fillRect(paddle3X, paddle4Y, padd3W, padd3H);
g.setColor(Color.red);
g.drawRect(paddle3X, paddle4Y, padd3W, padd3H);
g.setFont(new Font("Matisse ITC",1,32));
g.setColor(Color.red);
g.drawString("LIVES:"+lives,1,30);
repaint();
}
else{
balls = null;
balls = new Vector();
g.drawImage(mini,0,0,null);
g.setColor(new Color((int)(Math.random()*255+1),(int)(Math.random()*255+1),(int)(Math.random()*255+1)));
g.setFont(new Font("Westminster",1,48));
g.drawString("GAME OVER", w/2-110, h/2+20);
g.setFont(new Font("Westminster",1,24));
g.drawString("PRESS ENTER TO CONTINUE",w/2-140, h/2+40);
try{Thread.sleep(25);}catch(Exception e){};
repaint();
}
}
public void keyPressed(KeyEvent evt){
int code = evt.getKeyCode();
/*
if(code == 38 && paddleY>0)
paddleY = paddleY -10;
else if(code == 40 && paddleY<h-paddH)
paddleY = paddleY + 10;
*/
if(code == 10 && lives == 0)
{
lives = 5;
tetris.loop();
}
repaint();
}
public void keyReleased(KeyEvent evt){}
public void keyTyped(KeyEvent evt){}
public void mousePressed(MouseEvent evt){
if(!start){
start = true;
tetris.loop();
}
balls.addElement(new Ball(evt.getX(), evt.getY()));
repaint();
}
public void mouseReleased(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseExited(MouseEvent evt){
}
public void mouseMoved(MouseEvent evt){
//change paddle 2 postion also
int y = evt.getY();
int x = evt.getX();
if(y < h-paddH/2 && y > paddH/2)
paddleY = y-paddH/2;
if(x < w-padd3W/2 && x > padd3W/2)
paddle3X = x - padd3W/2;
if(y > h-paddH/2)
paddleY = h-paddH;
if( y < paddH/2)
paddleY = 0;
if(x > w-padd3W/2)
x = w-padd3W;
if(x < padd3W/2)
x = 0;
}
public void mouseDragged(MouseEvent evt){}
private boolean hitPaddleX(double y,double ballH){
if(y>paddleY-ballH/2 && y <paddleY+paddH-ballH/2){
hit.play();
return true;
}
return false;
}
private boolean hitPaddleY(double x, double ballW){
if(x+ballW/2>paddle3X && x + ballW/2 < paddle3X+padd3W){
hit.play();
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -