先放代码 啦啦啦
比较白,我就按我理解的来啦!
一个小球!!!
publicclassOneBall { publicstaticvoidmain(String[] args) { BallJFramep=newBallJFrame(); }
ball 类 球类,定义了一个球的大小,颜色,坐标等等等等;
importjava.awt.*; publicclassBall { intx; //球的x坐标inty; //球的y坐标Colorballcolor; //球的颜色intd; //球的大小intdir; //有且仅有1, 2,3 ,4 四个固定的数值 1-左上,2-左下,3-右上,4-右下intspeed; //球的速度//定义球的四个运动方向(int d)publicstaticfinalintLEFT_UP=1; publicstaticfinalintLEFT_DOWN=2; publicstaticfinalintRIGHT_UP=3; publicstaticfinalintRIGHT_DOWN=4; //使用构造方法完成小球的初始化设置(出厂设置)publicBall(){ this.x=100; //球的初始x坐标this.y=100; //球的初始y坐标this.d=50; //球的初始直径this.dir=(int) (Math.random()*4)+1; //球的初始方向 } //行为//绘制球publicvoidpaintball(Graphicsg){ g.setColor(ballcolor);//球的颜色g.fillOval(x,y,d,d);//球的大小和位置 } publicvoidballmove(){ intr=(int)(Math.random()*256);//球的颜色 r g bintg=(int)(Math.random()*256); intb=(int)(Math.random()*256); this.ballcolor=newColor(r,g,b); //定义球在四个方向上的运动变化if (dir==RIGHT_UP){ x=x+speed; y=y-speed; } if(dir==RIGHT_DOWN){ x=x+speed; y=y+speed; } if (dir==LEFT_DOWN){ x=x-speed; y=y+speed; } if (dir==LEFT_UP){ x=x-speed; y=y-speed; } //以边为界限时,当遇见每条边的时候的运动方式//上if (y<=0){ //当球顺时针运动if (dir==RIGHT_UP) dir=RIGHT_DOWN; //当球逆时针运动if (dir==LEFT_UP) dir=LEFT_DOWN; } //下if (y>=500-d-30){ //顺时针if (dir==LEFT_DOWN) dir=LEFT_UP; //逆时针if (dir==RIGHT_DOWN) dir=RIGHT_UP; } //左if (x<=0) { //顺时针if (dir==LEFT_UP) dir=RIGHT_UP; //逆时针if (dir==LEFT_DOWN) dir=RIGHT_DOWN; } //右if (x>=700-d-25){ //顺时针if (dir==RIGHT_DOWN){ dir=LEFT_DOWN;} //逆时针if (dir==RIGHT_UP){ dir=LEFT_UP;} } } }
窗口:
这个就好简单啦
一个窗口,窗口的大小、是否居中、关闭窗口后是否结束程序、是否要显示窗口这些。
importjavax.imageio.ImageIO; importjavax.swing.*; importjava.awt.image.BufferedImage; importjava.io.File; importjava.io.IOException; publicclassBallJFrameextendsJFrame { BufferedImageJFrameicon; publicBallJFrame(){ try { JFrameicon=ImageIO.read(newFile("start.png")); } catch (IOExceptione) { e.printStackTrace(); } this.setIconImage(JFrameicon); //设置窗口图标this.setTitle("小球弹弹弹");//设置窗口名称this.setSize(700,500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭进程结束//设置窗口大小不可改变this.setResizable(false); //设置窗口初始位置居中this. setLocationRelativeTo(null); BallJPanelballJPanel=newBallJPanel(); ballJPanel.move(); this.add(ballJPanel); //设置窗口 - 显示/不显示this.setVisible(true); } }
画布:
就好像在窗口上装了一个窗户,可以显示外面的景色
importjavax.swing.*; importjava.awt.*; publicclassBallJPanelextendsJPanel { Ballball=newBall(); publicBallJPanel(){//构造方法,让画布的颜色是粉色pink色this.setBackground(Color.PINK); } //重构方法paint,一支笔。publicvoidpaint(Graphicsg) { super.paint(g); ball.paintball(g); } publicvoidmove(){ //多线程,额我还白,我也不太懂。newThread(){ //1.球动publicvoidrun(){ while (true) {//写个死循环让你一直跑,哼。ball.ballmove(); try { sleep(10);//休眠 } catch (InterruptedExceptione) { e.printStackTrace(); } repaint(); } } }.start(); } }
主要的就有这些:
我整理一下,,,,,,,