夜W深沉 夜W深沉
关注数: 7 粉丝数: 16 发帖数: 1,215 关注贴吧数: 17
求助大神纠错。 import javax.swing.event.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.applet.Applet; import java.applet.AudioClip; public abstract class Whack_an extends JFrame implements ActionListener{ //定义可以存储25个按钮的数组 JButton[][]spots=new JButton[5][5]; //标签 JLabel score =new JLabel(); //下面的变量用于记录分数变化 int maxDelay=1000; double hits =0; double turns =0; double maxTurn=0; //按钮图标 ImageIcon alive=new ImageIcon("111.GIF"); //游戏线程 T runner=null; URL sci=null,dr=null; AudioClip scientific=null,door=null; //构造方法 public Whack_an(){ //创建JFrame super("Whack_an Evil Genuis"); setSize(350,325); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try{ sci=this.getClass().getResource("222.wav"); dr=this.getClass().getResource("door.wav"); scientific=JApplet.newAudioClip(sci); door=JApplet.newAudioClip(dr); } catch(Exception e){ //让玩家自己设置可揍扁捣蛋鬼的次数 maxTurn=Double.parseDouble(JOptionPane.showInputDialog("How many chance do you\n"+"wang to whack an eveil"+"genius")); //容器中添加按钮和标签 Container cont =getContentPane(); cont.setLayout(new FlowLayout()); //设置标题图片 JLabel title=new JLabel (new ImageIcon("Title.PNG")); cont.add(title); //生成按钮并绘制游戏窗口 for(int i=0;i<spots.length;i++) { for(int j=0;j<spots[0].length;j++) { //创建Button spots[i][j]=new JButton(alive); //将创建的JButton加入JFrame cont.add(spots[i][j]); //设置按钮为禁用状态 spots[i][j].setEnabled(false); //添加监听动作 spots[i][j].addActionListener(this); } } //在标签中显示游戏分数 score.setText("Turn+turns"+"/"+maxTurn+".Current Score:"+((int)((hits/maxTurn)*100))); cont.add(score); setContentPane(cont); //运行线程 runner=new T(); runner.start(); } //游戏线程 private class T extends Thread{ public void run(){ //永久循环 while(true){ //判断已经揍扁的次数是否达到最大可揍扁次数 if(turns>=maxTurn){ //游戏结束,弹出对话框显示游戏分数 JOptionPane.showMessageDialog(null,"evil geniuses in"+turns+"turns.\n"+"Your score is"+((int)(((hits*1000)/turns))),"Game Over",JOptionPane.INFORMATION_MESSAGE); break; } //走遍次数递增 turns++; //随机生成一个等待时间(取值范围0——1.5S) int timeDelay=(int)(Math.random()*1500); try{ //线程暂停 Thread.sleep(timeDelay); } catch (Exception e){} //从游戏屏幕中随机取一个按钮 int genius =(int)(Math.random()*5); int genius2=(int) (Math.random()*5); //设置该按钮为启用状态 spots[genius][genius2].setEnabled(true); try{ //线程暂停1S Thread.sleep(1000); } catch(Exception e){} //重新设置备选按钮为禁用状态 spots[genius][genius2].setEnabled(false); //显示游戏分数 score.setText("Turn"+turns+"/"+maxTurn+".Current Score:"+((int)(((hits*10000)/maxTurn)))); } } //检查已启用的按钮是否被单击 public void actionPerformed(ActionEvent e){ //如果捣蛋鬼被揍扁,那么揍扁间隔时间减少,增加游戏难度 maxDelay-=100; scientific.play(); //增加游戏分数 hits++; //游戏暂停0.5s try{ runner.sleep(500); Thread.sleep(500); } catch(Exception ex){} } public void main(String args[]){ //运行游戏程序 new Whack_an(); } }
新人求帮助,大神求罩!! /* *MyBall.java*/ public abstract class MyBall extends Panel implements Runnable,KeyListener{//主界面类,实现了Runnable接口 public class MyBall() { time=50; b = new BallClass[cont];//创建具有一个弹球的对象数组 for (int i=0;i<cont;i++) { b[i]=new BallClass(100,10); //初始化弹球对象 } bd=new BoardClass(100,300);//初始化弹球板对象 this.addKeyListener(this); newThread = new Thread(this);//创建线程 newThread.start();//启动线程,调用run方法 } public void paint (Graphics g) { this.requestFocus(); for(int i=0;i<count;i++)//画出所有的弹球 { g.setColor(b[i].color); g.fillOval(b[i].ballX,b[i].ballY,20,20); } g.fillREct(bd.boardX,bd.boardY,bd.wdith,bd.height);//画出弹球板 if(over==0){//游戏结束时 Front f =new Font("Courier",Font.BOLD,28); g.setFont(f); g.setColor(Color.orange); g.drawString("GAME OVER",50,150); Font f1 =new Font("Courier",Font.BOLD,16);//给出成绩 g.setFont(f1); g.drawString("你一共接住了"+total+"个球。",55,180); newThread =null; control = false; System.gc(); } } public static void main(String[] args) {//主方法,对系统初始化,显示界面 myFrame =new JFrame(); MyBall bl = new MyBall(); bl.setBackground(Color.black);//设置窗口背景颜色 bl.setSize(300,400);//设置窗口大小 myFrame.setLocation(300,100); myFrame.setTile("弹球游戏"); //添加关闭窗口的适配器 myFrame.addWindowsListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ if(newThread!=null){ newThread=null; } myFrame.disspose(); } }); myFrame.add(bl); myFrame.setVisible(blue);//显示主窗口 } public void run(){ while(control){ repaint(); for(int i=0;i<cont;i++){ if(b[i.ballX>280||b[i].ballX<0]){ b[i].vx=-b[i].vx; } if(b[i].ballY<0){ b[i].vy=-b[i].vy; } if(b[i].ballY>400){ b[i].state=false; } if((Math.abs(b[i].ballY-bd.boardY)<=20)&&((b[i].ballX+20>=bd.boardX)&&(b[i].ballX<=bd.boardX.width))){ b[i].vy=-b[i].vy; total++; switch(total){ case 3: time=100; break; case 5: time =50; break; case 20: time=20; mv=50; break; default:break; } if(total==2){ cont=4; x=b[0].ballX; y=b[0].ballY-20; b=new BallClass[cont]; for(int j=0;j<cont;j++){ b[j]=new BallClass(x,y); } } } b[i].ballX+=b[i].vx; b[i].ballY+=b[i].vy; } over=0; for(int i=0;i<cont;i++){ if(b[i].state){ over=1; break; } } try{ Thread.sleep(time); }catch(InterruptException e){} } } public void keyTyped(KeyEvent e){} public void keyPressed(KeyEvent e){ int key; key=e.getKeyCode(); if(key==keyEVent.VK_LEFT){ bd.leftmove(mv); } if(key==KeyEvent.VK_RIGHT){ bd.rightmove(mv); } } public void keyReleased(KeyEvent e){} }
1 下一页