`
香煎马鲛鱼
  • 浏览: 109779 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

弹球游戏分步解析(三)——滑块动起来

    博客分类:
  • java
阅读更多

弹球游戏分步解析(三)——滑块动起来

看过弹球游戏分步解析(一)、弹球游戏分步解析(二)的朋友应该知道,弹球游戏做到这一步可以实现小球在界面上“飞”了,不过既然是游戏,就要让玩家跟程序互动,没有互动就不能称之为游戏。

接下来我们就给我们的一个游戏添加一个滑块,用鼠标控制滑块横向移动,让滑块碰撞小球使其弹回。

做到控制滑块横向移动就需要使用鼠标监听器——MouseMotionListener来记录鼠标坐标,根据鼠标坐标位置来绘出滑块,移动时,部分朋友使用repant()的方法来删除原位置的滑块,可是这样做的结果是,滑块一直在闪,接下来我会介绍另一种方法来绘制滑块,这样滑块在移动的过程中就不会闪了;

和小球一样,先要建一个滑块类:

文件名:BandThread

package jumpingBall;

 

import java.awt.Graphics;

 

import javax.swing.JPanel;

 

publicclass BandThread extends Thread {

    privateint  length;

    privateint  width;

    privateintx;

    privateinty;

    privateintxlast;

    privateintylast;

   

    private JPanel jp;

    private Graphics g;

    public BandThread(JPanel jp,int x,int y){

        this.jp = jp;

        g =jp.getGraphics();

        this.x = x;

        this.y = y;

    }

    publicvoid run(){

        this.drawBand();

        this.clearBand();

 

    }

    publicvoid drawBand(){

       

        g.fillRect(x, 500, 100, 10);

    }

    publicvoid clearBand(){//擦掉滑块运动路线上多余的滑块,用与背景色一致的滑块覆盖

        if(xlast!= x){

        g.setColor(jp.getBackground());//获取滑块背景色

        g.fillRect(0, 500, x, 10);//覆盖左边

        g.fillRect(x+100, 500,jp.getWidth()-x-100,10 );//覆盖右边

        }

    }

 

}

加监听器:

文件名:bandListener

package jumpingBall;

 

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

 

import javax.swing.JPanel;

 

public class banLlistener implements MouseMotionListener {

 

        

         private  int x;

         private  int y;

         private JPanel jp;

         private Graphics g;

         public banLlistener(JPanel jp){

                   this.jp = jp;

                   this.g = jp.getGraphics();

         }

         @Override

         public void mouseDragged(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

         }

 

         @Override

         public void mouseMoved(MouseEvent e) {

                   // TODO Auto-generated method stub

                   x = e.getX();

                   y = e.getY();

                   Date.xband = x;

                   Date.yband = y;

                   BandThread band = new BandThread(jp,x,y);

        band.start();

 

                  

                  

         }

}

监听器所加位置:

文件名:BallThread

 

package jumpingBall;

 

import java.awt.Color;

import java.awt.Graphics;

import java.util.List;

import java.util.Random;

 

import javax.swing.JPanel;

 

public class BallThread extends Thread {

private static final int North = 1;//用四个整形的数据代表四个方向

private static final int West = 2;

private static final int South = 3;

private static final int East = 4;

private int Xdirection = West;//记录小球在X轴上的方向

private int Ydirection = North;//记录小球在y轴上的方向

private int radios;//半径

private Color color;//颜色

private int Xspeed;//x方向速度

private int Yspeed;//y方向速度

private int X;//当前位置x

private int Y;//当前位置y

private int LastX;//最后位置x

private int LastY;//最后位置y

private int xband;

private int yband;

private JPanel jp;//面板

private Graphics g;//画布

private boolean pauseFlag = false;//暂停标志(默认值否)

private boolean stopFlag = false;//停止标志(false——表示存在)

private boolean beread = false;//是否被储存在文件里过(默认值否)

       public BallThread(JPanel jp){

           this.jp = jp;

           this.g = jp.getGraphics();

       }

 

       public void run(){

           banLlistener band =new banLlistener(jp);//定义滑块

           jp.addMouseMotionListener(band);//给滑块加入鼠标监听器

           if(beread==false){//如果没有被储存在文件里过

           this.setprivate();//方法作用:随机生成它的部分属性

           }

           while(true){//永真表示球会一直运动

               

              try{

                  sleep(30);

              }catch(InterruptedException e){

                  e.printStackTrace();

              }

              if(stopFlag==true){//如果停止标示为true,停止该线程

                  clearBall();

                  return;

              }

              if(pauseFlag==true){//如果暂停标示为真,跳过之后的步骤进入下次循环

                  continue;

              }

              

              this.clearBall();//清除原来位置的小球

              this.move();//小球运动

              this.drawBall();//在新的位置画出小球

 

              

           }

                  

}

       public void clearBall(){//清除小球

           Color color = jp.getBackground();//

           g.setColor(color);//

           g.fillOval(X, Y, radios*2, radios*2);//用背景色,填充之前小球的印记

       }

       public void drawBall(){

           g.setColor(color);//

           g.fillOval(X, Y, radios*2, radios*2);

       }

       public void setprivate(){//设置小球属性

           Random random = new Random();//随机

            radios = 10+random.nextInt(10);//半径

            color =new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));//颜色

            Xspeed = 2 + random.nextInt(10);//x方向速度

            Yspeed = 2+random.nextInt(10);//y方向速度

       }

       public void exit(boolean flag){//设置停止标示

           stopFlag = flag;

       }

       public void setpause(boolean flag){//设置暂停标示

           pauseFlag = flag;

       }

       public void move(){

 

           switch(Xdirection){//对于x方向

           case 2:X = X - Xspeed;break;//如果小球的运动方向向西,X值减小

           case 4:X = X + Xspeed;break;//如果小球的运动方向向东,X值增大

           }

           switch(Ydirection){//对于y方向

           case 1:Y = Y - Yspeed;break;//如果小球的运动方向向北,Y值减小

           case 3:Y = Y + Yspeed;break;//如果小球的运动方向向难,Y值增大

           }

           //如果碰到边界,方向改变

           if(X<0+radios*2){

              Xdirection = 4;

           }

           if(X>jp.getWidth()-radios*2){

              Xdirection = 2;

           }

           if(Y<0+radios*2){

              Ydirection = 3;

           }

           //如果掉到下面,该小球线程结束

           if(Y>jp.getHeight()-radios*2){

              //Ydirection = 1;

              BallThread ball = new BallThread(jp);

              this.exit(true);

              for(int i = 0;i<Date.allBall.size();i++){

                 ball=Date.allBall.get(i);

                 if(X == ball.X&&Y == ball.Y){

                    Date.allBall.remove(i);

                 }

              }

           }

           //如果碰到滑块,弹回

           if(Y<500+radios/2&&Y>490-radios*2&&X>=Date.xband&&X<=(Date.xband+100)){

              Ydirection = 1;

           }

       }

……………………………………

    (之后的代码见弹球游戏分步解析(二))

 

分享到:
评论

相关推荐

    弹球游戏分步解析(五)——阶段性总结

    在本篇【弹球游戏分步解析(五)——阶段性总结】中,我们将对一个基于Java实现的弹球游戏进行深入探讨。这个弹球游戏的源代码提供了丰富的学习材料,帮助开发者了解游戏开发的基本概念和技术。博文链接为,可以在...

    自己用C语言写的弹球游戏——核心代码——最简洁1

    在本项目中,我们探索的是一个使用C语言编写的弹球游戏的核心代码。这款小游戏是基于WIN32框架构建的,对于想要学习游戏编程初学者来说,这是一个很好的起点。通过这个简洁的代码实现,我们可以了解到游戏开发的一些...

    C#简单弹球游戏源码

    《C#实现简单弹球游戏源码解析》 在编程世界中,开发一款简单的游戏是初学者们常常选择的实践项目。本篇文章将详细解析一个使用C#语言编写的弹球游戏源码,旨在帮助读者了解游戏开发的基本原理,以及C#在图形用户...

    Scratch创意编程——弹球游戏 学历案.pdf

    Scratch创意编程——弹球游戏 学历案.pdf

    弹球游戏(flash编写)

    《弹球游戏(Flash编写):深入解析与技术探讨》 在数字娱乐领域,Flash曾是制作互动内容的主流工具,尤其是对于小游戏的开发。本文将深入探讨一款名为“弹球游戏”的Flash作品,该作品提供了源代码和最终的SWF文件...

    windows原版三维弹球

    《Windows原版三维弹球》是一款经典且深受用户喜爱的游戏,它伴随着许多人的电脑使用历程。这款游戏最初是作为微软Windows操作系统的一部分内置的,为用户提供了一种轻松娱乐的方式。它的全名是“Microsoft 3D ...

    opencv下的弹球游戏

    【OpenCV下的弹球游戏】是一个基于Visual Studio(VS)开发环境,利用OpenCV库创建的简单游戏项目。OpenCV,全称为Open Source Computer Vision Library,是一个开源的计算机视觉库,它包含了大量的图像处理和计算机...

    java弹球游戏.zip

    java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏...

    vb编写弹球游戏

    本文将深入探讨如何使用Visual Basic(VB)编写一个弹球游戏,结合提供的完整源码,我们将一步步解析其背后的逻辑与实现细节。 一、VB基础介绍 Visual Basic,简称VB,是由微软公司推出的一种面向对象的编程语言,...

    弹球游戏【VB源码】

    三、代码解析 1. 用户界面:使用VB6的Form控件创建游戏窗口,使用PictureBox控件绘制游戏背景,Label控件显示分数,以及Button控件作为开始/暂停按钮。弹球和挡板可以用自定义形状的PictureBox来实现。 2. 物理引擎...

    少儿scratch编程项目源代码文件案例素材-经典弹球游戏.zip

    《少儿Scratch编程项目:经典弹球游戏源代码解析》 Scratch,这款由麻省理工学院(MIT)媒体实验室的“终身幼儿园团队”开发的图形化编程工具,以其直观易懂的操作界面和丰富的功能模块,深受全球少儿编程教育者的...

    OpenGL——弹球游戏

    本资源是山东大学软件学院图形学课程设计实验二

    c# 弹球游戏源码

    在本项目中,我们关注的是一个使用C#编程语言开发的弹球游戏源代码。C#是一种面向对象的、类型安全的编程语言,由微软公司为.NET框架开发,广泛应用于Windows应用开发、游戏开发和Web服务。弹球游戏是计算机游戏中的...

    使用tkinter实现弹球游戏

    弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏

    VC++小游戏 弹球游戏

    【VC++小游戏:弹球游戏】是基于Microsoft Visual C++编程环境开发的一款经典休闲娱乐程序。这款游戏以"bricks"为主题,玩家通过控制一个挡板防止弹球落下,同时击碎屏幕上排列的砖块。在深入探讨游戏的实现细节之前...

    弹球游戏源代码 纯C语言写

    此标签突出了游戏的核心机制——弹球。弹球游戏通常涉及到物理规则,如重力、速度、反射等,因此这个源代码可能包含处理这些物理现象的算法。开发者可能会用到循环、条件判断、数学计算等C语言基本概念来模拟弹球的...

    弹球游戏_verilog_nexys4.rar

    《弹球游戏在FPGA上的Verilog实现》 在电子工程领域,FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它允许设计者根据需要自定义硬件电路。在这款“弹球游戏”中,我们看到的是Verilog语言被用来在...

    弹球游戏 JavaAWT制作

    在本项目"弹球游戏 JavaAWT制作"中,开发者运用了Java的图形用户界面(GUI)库JavaAWT来创建一个互动的弹球游戏。JavaAWT是Java早期提供的用于构建桌面应用的基础组件,它提供了丰富的控件、布局管理和事件处理机制...

    python100行代码写一个弹球游戏

    本篇文章将深入探讨如何使用Python的pgzero库创建一个经典的弹球游戏——PONG。PONG是一款简单的双人对战游戏,两个玩家各控制一个垂直移动的挡板,试图让一个小球在屏幕上反弹并使对方无法接到球。 首先,我们要...

Global site tag (gtag.js) - Google Analytics