java GUI编程实现弹球小游戏

//第一步创建窗体,定义小球的大小以及在画布中的位置,平台的大小以及在画布中的位置,
//第二步创建画布,在画布中填充小球,平台的形状颜色,并创建实体画布drawArea
//第三步在public void initial(){}中定义平台的移动方法和小球的移动方法,设置键盘监听器来控制键盘的左右键移动平台,创建Timer类对象用timer.start()开始执行
//KeyListener listenr=new KeyAdapter(){
//public void KeyPressed(KeyEvent e){
//   int keycode;
//  keycode= e.getcode();

//if(keycode==keyevent.VK_LEFT)
//if(racketX>0){
//racketX=racket-10;}
//}
//if(keycode==keyevent.VK_RIGHT){
//if(racketX<TABLEX){
//racketX=racketX+10;
//}
//}
//设置小球移动的监听器
//ActionListener task=new ActionListener(){
//public void actionperformed(){
//if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
//speedX=-speedX;
//}
//if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<racketX+RACKET_WIDTH)
//{
//speedY=-speedY;
//}

//if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH){
//{
//isover=true;
//drawArea.repaints();}

//之后调用
//第四步调用initial()方法实现;

package com.student;
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
class test5 { 
    //创建窗口对象
    Frame frame=new Frame("弹弹弹");
    //桌面的宽度和高度
    int TABLE_WIDTH=300;
    int TABLE_HEIGHT=400;
    //定义平台的宽度和高度
    int RACKET_WIDTH=200;
    int RACKET_HEIGHT=10;
      
    //定义小球的大小
    int BALL_SIZE=16;
    
    //记录小球的坐标
    int ballX=120;
    int ballY=20;
      
    //小球的运动速度
    int speedY=10;
    int speedX=5;
    //定义平台的坐标
    int racketX=120;
    int racketY=340;
    //判断游戏是否结束
    boolean isover=false;
    //为了实现问题就重新调用组件的repaints()的方法,可以借助Swing提供的定时器他有如下一个构造
    //Timer(int delay,ActionListener listener)每隔delay毫秒系统自动触发ActionListener
    
    
    
    //声明一个定时器
    Timer timer;
    
    //自定义一个类充当画布,绘制游戏界面
    
            
     class  MyCanvas extends Canvas{
         @Override
         public void paint(Graphics g) {
             
             if(isover)
             {
                 g.setColor(Color.RED);
                    g.setFont(new Font("Times", Font.BOLD, 30));
                    g.drawString("游戏结束!", 50, 200);
                 
                 
             }
             else 
             {
                 //绘制小球
                 g.setColor(Color.RED);
                 g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);
                 //g表示画笔用画笔中的颜色来填充窗体中的相应坐标的组件
                 g.setColor(Color.black);
                 g.fillRect(racketX, racketY, RACKET_WIDTH, TABLE_HEIGHT);
                 
                 
                 
             }
         }
                 
                 
 }
             
        
         

    
     
    
    //创建绘画区域
        MyCanvas drawArea=new  MyCanvas()  ;
       
     
     
     
     
     //对平台移动
     public void init() {
         KeyListener listener=new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                int keycode=e.getKeyCode();
                if(keycode==KeyEvent.VK_LEFT) {
                    
                    if(racketX>0) {
                        racketX=racketX-10;
                        
                    }
                    
                }
                
               if(keycode==KeyEvent.VK_RIGHT) {
                     
                    if(racketX<TABLE_WIDTH-RACKET_WIDTH) {
                        racketX=racketX+10;
                        
                    }
                    
                }
                
                
            
                
            }
            
     };
     //frame.addKeyListener(listener);
     drawArea.addKeyListener(listener);
     
     
     
     //完成小球坐标的移动变化
    
    ActionListener task=new ActionListener() {
        @Override
    
        public void actionPerformed(ActionEvent e) {
            if(ballX<=0||ballX>=(TABLE_WIDTH-BALL_SIZE)) {
                speedX=-speedX;
                
            }
            if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<racketX+TABLE_WIDTH)){
                
                 speedY=-speedY;
             
    
        }
        
        
        if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH)) {
        
        //游戏结束
        
        //timer.stop();
        isover=true;
        
        drawArea.repaint();
        
        }
        
        
        //如果没有在边界情况,小球正常运行时的情况
        ballX+=speedX;
        ballY+=speedY;
        drawArea.repaint();
        
        }
    };
    
     Timer  timer=new Timer(100,task);
     timer.start();
     drawArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
     frame.add(drawArea);
     frame. pack();
     frame.setVisible(true);
     frame.addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
             System.exit(0);
         }
     });
     }
     
     public static void main(String args[]) {
         new test5().init();
     }
     
    
    

    
    
    
 
     }
 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值