package com.aflfte.ballgame;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class BallGame extends JPanel {
public static void main(String[] args) {
BallGame ball=new BallGame();
ball.ck();
}
public void ck() {
JFrame jfm=new JFrame();
jfm.add(this);
jfm.setTitle("弹球游戏");
jfm.setSize(400,500);
jfm.setVisible(true);
jfm.setLocation(100, 100);
new Chonghua().start();
jfm.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
jfm.addKeyListener(new KeyJianting());
}
Ball ball=new Ball();
Block block=new Block();
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.black);
g.fillRect(0, 0, 400, 500);
g.setColor(Color.WHITE);
g.fillRect(10, 10, 390, 440);
ball.draw(g);
block.draw(g);
boolean peng=block.getRect().intersects(ball.getRect());
if(peng) {
ball.jd=Math.PI-ball.jd;
ball.s+=0.5;
if(block.h>50) {
block.h-=1;
}
}
if(ball.x>400) {
block.five=false;
Font f=new Font("宋体", Font.BOLD, 30);
g.setFont(f);
g.setColor(Color.RED);
g.drawString("游戏结束", 200, 250);
}
g.setColor(c);
}
class Chonghua extends Thread{
@Override
public void run() {
while(true) {
repaint();
try {
Thread.sleep(40);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class KeyJianting extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
block.keyan(e);
}
@Override
public void keyReleased(KeyEvent e) {
block.keysk(e);
}
}
private Image offScreenImage = null;
public void update(Graphics g) {
if(offScreenImage == null)
offScreenImage = this.createImage(400,500);//这是游戏窗口的宽度和高度
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
}
ball.java
package com.aflfte.ballgame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
public class Ball {
double x;
double y;
int w;
int h;
double jd;
double s;
public Ball() {
x=200;
y=200;
w=20;
h=20;
s=10;
jd=Math.random()*Math.PI*2;
}
public void draw(Graphics g) {
Color c=g.getColor();
g.setColor(Color.black);
g.fillOval((int)x, (int)y, w, h);
x+=Math.cos(jd)*s;
y+=Math.sin(jd)*s;
if(x<10) {
jd=Math.PI-jd;
}
if(y<10||y>440) {
jd=-jd;
}
g.setColor(c);
}
public Rectangle getRect() {
return new Rectangle((int)x,(int)y,w,h);
}
}
block.java
package com.aflfte.ballgame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
public class Block {
double x,y;
int w,h;
boolean up,down;
boolean five=true;
public Block() {
x=370;
y=250;
w=20;
h=100;
}
public void draw(Graphics g) {
if(five==true) {
Color c=g.getColor();
g.setColor(Color.BLACK);
g.fillRect((int)x, (int)y, w, h);
g.setColor(c);
if(up) {
y-=10;
}
if(down) {
y+=10;
}
}
}
public void keyan(KeyEvent k) {
switch(k.getKeyCode()) {
case KeyEvent.VK_UP:
up=true;
break;
case KeyEvent.VK_DOWN:
down=true;
break;
}
}
public void keysk(KeyEvent k) {
switch(k.getKeyCode()) {
case KeyEvent.VK_UP:
up=false;
break;
case KeyEvent.VK_DOWN:
down=false;
break;
}
}
public Rectangle getRect() {
return new Rectangle((int)x,(int)y,w,h);
}
}
« 转换流使用方法
|
IO缓冲流的使用(BufferedInputStream和bufferedOutputstream)»
|