希望指点一下

liang9504 2015-12-11 02:05:12
java疯狂讲义中的一段代码,不知道哪里出错,希望给予指教
package time;
/*
*2015年12月11日12:48:38
*简单的弹球游戏
*/

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.management.timer.Timer;

public class Hello{

private Frame f = new Frame("弹球游戏");
//桌面的宽度
private final int TABLE_WIDTH = 300;
//桌面的高度
private final int TABLE_HEIGHT = 400;
//球拍的垂直位置
private final int RACKET_Y = 340;
//球拍的高度和宽度
private final int RACKET_HEIGHT = 20;
private final int RACKET_WIDTH = 60;
//小球的大小
private final int BALL_SIZE = 16;
Random rand = new Random();
//小球的纵向运行速度
private int ySpeed = 10;
//返回一个-0.5~0.5的比率,用于控制小球的运行方向
private double xyRate = rand.nextDouble() - 0.5;
//小球横向运行速度
private int xSpeed = (int)(ySpeed * xyRate * 2);
//ballX和ballY代表小球的坐标
private int ballX = rand.nextInt(200) + 20;
private int ballY = rand.nextInt(10) + 20;
//racketX代表球拍的水平位置
private int racketX = rand.nextInt(200);
private MyCanvas tableArea = new MyCanvas();
Timer timer;
//游戏是否结束的标志
private boolean isLose = false;
public void init(){
//设置时候结束标志
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH , TABLE_HEIGHT));
f.add(tableArea);
//定义键盘监听器
KeyAdapter keyProcessor = new KeyAdapter(){
public void keyPressed(KeyEvent ke){
//按下向左向右键时,球拍水平坐标分别减小
if(ke.getKeyCode() == KeyEvent.VK_LEFT){
if(racketX > 0)
racketX -= 10;
}
if(ke.getKeyCode() == KeyEvent.VK_RIGHT){
if(racketX < TABLE_WIDTH - RACKET_WIDTH){
racketX += 10;
}
}
}
};
//为窗口和tableArea对象分别添加键盘监听器
f.addKeyListener(keyProcessor);
tableArea.addKeyListener(keyProcessor);
//定义每0.1秒执行一次事件监听器
ActionListener taskPerformer = evt ->{//有警告
//如果小球碰到左边边框
if(ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE){
xSpeed -= xSpeed;
}
//如果小球位置超出球拍位置,且横向不在球拍范围内,游戏结束
if(ballY >= RACKET_Y - BALL_SIZE && (ballX > racketX || ballX > racketX + RACKET_WIDTH)){
timer.stop();
//设置游戏是否结束的标志为true
isLose = true;
tableArea.repaint();
}
//如果小球微乳球拍之内,且到达球拍的位置,小球反弹
else if(ballY <= 0 || (ballY >= RACKET_Y - BALL_SIZE && ballX > racketX && ballX <= racketX + RACKET_WIDTH) ){
ySpeed = -ySpeed;
}
//小球坐标增加
ballY += ySpeed;
ballX += xSpeed;
tableArea.repaint();
}; timer = new Timer(100 , taskPerformer);//这里显示出错错误
timer.start();
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
new Hello().init();
}
class MyCanvas extends Canvas{
/**
*
*/
private static final long serialVersionUID = 7722503883650048572L;

//重写Canvas的paint()方法,实现绘画
public void paint(Graphics g){
//如果游戏结束
if(isLose){
g.setColor(new Color(255 , 0 , 0));
g.setFont(new Font("Times" , Font.BOLD, 30));
g.drawString("游戏以结束" , 50, 200);
}
//如果游戏还未结束
else{
//设置颜色,并绘制小球
g.setColor(new Color(240 , 240 , 80));
g.fillOval(ballX , ballY , BALL_SIZE , BALL_SIZE);
//设置颜色并绘制球拍
g.setColor(new Color(80 , 80, 200));
g.fillRect(racketX , RACKET_Y , RACKET_WIDTH , RACKET_HEIGHT);
}
}
}
}
...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang9504 2015-12-11
  • 打赏
  • 举报
回复
简单的弹珠游戏代码。 import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Random; import javax.swing.Timer; /* *2015年12月11日12:48:38 *简单的球拍游戏 */ public class Hello{ private Frame f = new Frame("弹球游戏"); //桌面的宽度 private final int TABLE_WIDTH = 300; //桌面的高度 private final int TABLE_HEIGHT = 400; //球拍的垂直位置 private final int RACKET_Y = 340; //球拍的高度和宽度 private final int RACKET_HEIGHT = 20; private final int RACKET_WIDTH = 60; //小球的大小 private final int BALL_SIZE = 16; Random rand = new Random(); //小球的纵向运行速度 private int ySpeed = 10; //返回一个-0.5~0.5的比率,用于控制小球的运行方向 private double xyRate = rand.nextDouble() - 0.5; //小球横向运行速度 private int xSpeed = (int)(ySpeed * xyRate * 2); //ballX和ballY代表小球的坐标 private int ballX = rand.nextInt(200) + 20; private int ballY = rand.nextInt(10) + 20; //racketX代表球拍的水平位置 private int racketX = rand.nextInt(200); private MyCanvas tableArea = new MyCanvas(); Timer timer; //游戏是否结束的标志 private boolean isLose = false; public void init(){ //设置时候结束标志 tableArea.setPreferredSize(new Dimension(TABLE_WIDTH , TABLE_HEIGHT)); f.add(tableArea); //定义键盘监听器 KeyAdapter keyProcessor = new KeyAdapter(){ public void keyPressed(KeyEvent ke){ //按下向左向右键时,球拍水平坐标分别减小 if(ke.getKeyCode() == KeyEvent.VK_LEFT){ if(racketX > 0) racketX -= 10; } if(ke.getKeyCode() == KeyEvent.VK_RIGHT){ if(racketX < TABLE_WIDTH - RACKET_WIDTH){ racketX += 10; } } } }; //为窗口和tableArea对象分别添加键盘监听器 f.addKeyListener(keyProcessor); tableArea.addKeyListener(keyProcessor); //定义每0.1秒执行一次事件监听器 ActionListener taskPerformer = evt ->{ //如果小球碰到左边边框 if(ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE){ xSpeed = -xSpeed; } //如果小球位置超出球拍位置,且横向不在球拍范围内,游戏结束 if(ballY >= RACKET_Y - BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH)){ timer.stop(); //设置游戏是否结束的标志为true isLose = true; tableArea.repaint(); } //如果小球微乳球拍之内,且到达球拍的位置,小球反弹 else if(ballY <= 0 || (ballY >= RACKET_Y - BALL_SIZE && ballX > racketX && ballX <= racketX + RACKET_WIDTH) ){ ySpeed = -ySpeed; } //小球坐标增加 ballY += ySpeed; ballX += xSpeed; tableArea.repaint(); }; timer = new Timer(100 , taskPerformer); timer.start(); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("用户正在关闭窗口"); System.exit(0); } }); f.pack(); f.setVisible(true); } public static void main(String[] args){ new Hello().init(); } class MyCanvas extends Canvas{ //重写Canvas的paint()方法,实现绘画 public void paint(Graphics g){ //如果游戏结束 if(isLose){ g.setColor(new Color(255 , 0 , 0)); g.setFont(new Font("Times" , Font.BOLD, 30)); g.drawString("游戏以结束" , 50, 200); } //如果游戏还未结束 else{ //设置颜色,并绘制小球 g.setColor(new Color(240 , 240 , 80)); g.fillOval(ballX , ballY , BALL_SIZE , BALL_SIZE); //设置颜色并绘制球拍 g.setColor(new Color(80 , 80, 200)); g.fillRect(racketX , RACKET_Y , RACKET_WIDTH , RACKET_HEIGHT); } } } }
liang9504 2015-12-11
  • 打赏
  • 举报
回复
谢谢大家的解答
oh_Maxy 2015-12-11
  • 打赏
  • 举报
回复
import javax.swing.Timer; 改成这个就没报错了
君莫傲 2015-12-11
  • 打赏
  • 举报
回复
不知道你报的什么错呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧