package itheima006; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class GraphicsDemo2_2 { public static void main(String[] args) { new GraphicsDemo2_2().init(); } ///创建弹球游戏,,创建窗口宽度和高度,,球的大小和坐标x和y,,,,设置球下落的速度x和y,球拍的大小和坐标x和y,创建游戏进行的状态,,创建Timer定时调用监听器 Frame frame=new Frame("弹球游戏"); //创建窗口宽度和高度 private int Table_WIDTH=400; private int Table_HEIGH=500; //球的大小和坐标x和y private int Ball_SIZE=12; private int bax=120; private int bay=20; //设置球下落的速度x和y private int speedx=10; private int speedy=5; //球拍的大小和坐标x和y private int RACKET_WIDTH=60; private int RACKET_HEIGH=20; private int rax=120; private final int ray=340; //创建游戏进行的状态 private boolean isOver=false; //创建Swing中Timer定时调用监听器 private Timer timer; //创建mycanvas类继承Canvas类,重写paint方法,画出小球,和球拍 private class MyCanvas extends Canvas { @Override public void paint(Graphics g) { if (isOver){ //游戏结束。画一个游戏结束就行 g.setColor(Color.blue); g.setFont(new Font("Times",Font.BOLD,30)); g.drawString("游戏结束",120,80); }else{ //游戏中,画小球和球拍 g.setColor(Color.red); g.fillOval(bax,bay,Ball_SIZE,Ball_SIZE); g.setColor(Color.pink); g.fillRect(rax,ray,RACKET_WIDTH,RACKET_HEIGH); } } } MyCanvas myCanvas=new MyCanvas(); private void init() { //组装视图 //设置球拍的运动,按左键时,向左移动,到边界停止,按右键时向右移动,到边界停止 KeyListener listener=new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); //通过keycode判断是键盘左键还是右键 if(keyCode==KeyEvent.VK_LEFT){ if(rax>0){ rax -=10; } } if(keyCode ==KeyEvent.VK_RIGHT){ if(rax<Table_WIDTH-RACKET_WIDTH){ rax +=10; } } } }; frame.addKeyListener(listener); myCanvas.addKeyListener(listener); //设置球的运动,分为x和y, //x小于0和x大于右边界时,speedx,x方向的速度反向, //y小于0和y触碰的球拍时候,speedy,y方向速度反向 //创建Timer定时器定时刷新 ActionListener listener2=new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(bax<=0 || bax>=(Table_WIDTH-Ball_SIZE)){ speedx = -speedx; } if(bay<=0 || (bay>ray-Ball_SIZE && bax>rax && bax<rax+RACKET_WIDTH)){ speedy = -speedy; } //当球在球拍左边或者右边时候,游戏结束 if(bay >ray-Ball_SIZE && (bax <rax ||bax>rax+RACKET_WIDTH)){ isOver=true; myCanvas.repaint(); timer.stop(); } bax +=speedx; bay +=speedy; myCanvas.repaint(); } }; timer=new Timer(150,listener2); timer.start(); myCanvas.setPreferredSize(new Dimension(400,500)); frame.add(myCanvas); frame.pack(); frame.setVisible(true); } }