
正文
java物理弹球游戏代码,编程弹球游戏
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
求解答以下的java源代码,详细点,说明这个程序的设计思路,还有比如运用了多线程的话运用了多线程的什么
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.Timer;
public class PinBall
{
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;//球的大小
private Frame f = new Frame("弹球游戏");//实例化一个窗口
Random rand = new Random();//实例化一个随机数生成器
private int ySpeed = 10;//小球的纵向运动数度、
private double xyRate = rand.nextDouble() - 0.5;//返回一个-0.5到0.5之间的比率用控制小球运动方向
private int xSpeed = (int)(ySpeed*xyRate*2);//这个横向速度在-10到10之间,产生左右摆动运动效果
private int ballX = rand.nextInt(200)+20;//小球开始的横坐标位置,200表示产生0到100之间的随机数
private int ballY = rand.nextInt(10)+20;//小球开始的纵坐标位置
private int racketX = rand.nextInt(200);//球拍开始时的横坐标位置
private MyCanvas tableArea = new MyCanvas();//实力化一个画布工具,集成Canvas类
private String shape = "";//保存需要绘制图形的字符串属性
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;//按一左键次向左移动10个像素
}
if(ke.getKeyCode()==KeyEvent.VK_RIGHT)//按下键盘右键时
{
if(racketX TABLE_WIDTH - RACKET_WIDTH)//球拍右边框不能出画布的右边框
racketX +=10;//按一次右键移动向右移动10个像素
}
}
};
f.addKeyListener(keyProcessor);//给窗口添加键盘监听器
tableArea.addKeyListener(keyProcessor);//给画布添加键盘监听器
ActionListener taskPerformer = new ActionListener()//这里是实例化了一个监听接口,这个接口里面只有一个方法
{
public void actionPerformed(ActionEvent evt)//重写这个接口里面的方法,判断小球的位置
{
if(ballX=0 || ballX=TABLE_WIDTH-BALL_SIZE)//保证小球横向上在画布之内运动
{
xSpeed = -xSpeed;//触发反方向运动
}
if(ballY=RACKET_Y-BALL_SIZE(ballXracketX||ballXracketX+RACKET_WIDTH))//出了球拍的可击打范围
{
timer.stop();//停止对监听器的触发
isLose=true;//将标志isLose变量置为true
tableArea.repaint();//调用画布的重绘方法
}
else if(ballY=0||(ballY=RACKET_Y-BALL_SIZEballYracketXballX=racketX+RACKET_WIDTH))//小球在球拍之内,而其到达球拍的高度
{
ySpeed=-ySpeed;//上下方向改变,小球反弹
}
ballY+=ySpeed;//小球的坐标在纵向上增加
ballX+=xSpeed;//小球的坐标在横向上的增加
tableArea.repaint();//调用画布的重绘方法3
}
};
timer = new Timer(100,taskPerformer);//每隔0.1秒运行一次监听器
timer.start();//计时器开始运行
f.addWindowListener(new MyListener());//关闭窗口事件
f.pack();//设置窗口最佳大小
f.setVisible(true);//显示窗口
}
class MyListener extends WindowAdapter//关闭窗口的类
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)//程序入口
{
new PinBall().init();//调用PinBall类里面的init()方法
}
class MyCanvas extends Canvas//建一个集成Canvas类的类
{
public void paint(Graphics g)//重写父类的绘图方法
{
if(isLose)//如果isLose为真,则在画布里打印“游戏已结束”
{
g.setColor(new Color(255,0,0));//当前颜色
g.setFont(new Font("黑体",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);//填充颜色,根据坐标和长宽填充矩形
}
}
}
}
相关问答
Q1: 用Java编制一个桌面弹球的屏幕保护程序。
很麻烦,屏幕保护程序,是一定格式的.exe文件来的。JAVA程序要转成纯.exe还有些困难。
自己写一个.exe根据不同的参数启动JAVA程序,还可以。
Q2: [求助]急求弹球游戏代码
已使用TC2.0 IDE测试,正常运行:
引用:
#include "graphics.h"
#include "math.h"
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x011b
int x,y,x1,y1,key,t1,t2,keyx,keylong,keymove,over=0,i,tt=0,fast;
int ballx[9]={53,103,263,120,236,390,410,450,600};
int bally[9]={158,239,120,113,30,313,120,263,231},ballz[9]={0};
float ls;
win()
{float lx,ly,ll;
for(i=0;i9;i++)
{
if(ballz==1)/*如果球体已经消失就不判断*/
continue;
lx=(float)(ballx-x);
ly=(float)bally-y;
ll=lx*lx+ly*ly;
ls=sqrt(ll);
if((int)ls17)/*判断两球是否碰到*/
{tt++;/*记录消失几个球*/
fast-=50;/*速度加快*/
if(i%2==0)/*移动加快*/
keymove+=5;
else
{
setcolor(0);
rectangle(keyx,460,keyx+keylong,470);
keylong-=10;/*长条变短*/
setcolor(YELLOW);
rectangle(keyx,460,keyx+keylong,470);
}
ballz=1;
setcolor(0);
circle(ballx,bally,10);
if(ybally)
if(xballx)
{t1=-1;t2=-1;}
else
{t1=1;t2=-1;}
else
if(xballx)
{t1=-1;t2=1;}
else
{t1=1;t2=1;}
}
}
}
fungo()
{ x=100,y=50,keyx=200,keylong=100,keymove=15,fast=600;
for(i=0;i9;i++)
{
setcolor(i+1);
circle(ballx,bally,10);
}
sleep(1);
t1=t2=1;
while(1)
{
while(!kbhit())
{
setcolor(YELLOW);
rectangle(keyx,460,keyx+keylong,470);
x1=x;
y1=y;
x+=t1;
y+=t2;
setcolor(4);
circle(x,y,6);
delay(fast);
setcolor(0);
circle(x,y,6);
win();
if(tt==9)/*胜利*/
{
cleardevice();
over=1;
setcolor(RED);
settextstyle(0,0,4);
setusercharsize(3,1,3,1);
outtextxy(200,200," YOU WIN! ");
break;
}
if(y480)/*失败*/
{
cleardevice();
over=1;
setcolor(RED);
settextstyle(0,0,4);
setusercharsize(3,1,3,1);
outtextxy(200,200,"GAME OVER");
break;
}
else if(x==11y==11)/*判断碰到东西*/
{t1=1;t2=1;}
else if(x==629y==11)
{t1=-1;t2=1;}
else if(x==11)
{
if(yy1)
{t1=1;t2=-1;}
else
{t1=1;t2=1;}
}
else if(y==11)
{
if(xx1)
{t1=-1;t2=1;}
else
{t1=1;t2=1;}
}
else if(x==629)
{
if(y1y)
{t1=-1;t2=-1;}
else
{t1=-1;t2=1;}
}
else if(y==449)
{
if(x=keyxx=keyx+keylong)
{
if(x(keyx+keylong/4))
{t1=-1;t2=-1;}
else if(x=(keyx+keylong/4)x(keyx+keylong/2))
{t1=-1;t2=-2;}
else if(x=(keyx+keylong/2)x(keyx+keylong/4*3))
{t1=1;t2=-2;}
else
{t1=1;t2=-1;}
}
}
}
if(over)
break;
key=bioskey(0);
setcolor(0);
rectangle(keyx,460,keyx+keylong,470);
if(key==ESC)
{cleardevice();break;}
else if(key==LEFT)
keyx-=keymove;
else if(key==RIGHT)
keyx+=keymove;
}
}
main()
{int gd=DETECT,gr;
initgraph(gd,gr,"c:\\tc");
fungo();
getch();
sleep(1);
closegraph();
}
Q3: 物理弹球游戏攻略
一起看看物理弹球的游戏攻略吧。
01
游戏的下载:
我们输入物理弹球,就可以搜索到这个游戏,准备好网络和存储空间,下载安装好游戏之后,我们打开来进行体验吧。
02
选择合适角度:
物理弹球和打砖块有一些类似,我们需要选择合理的角度,然后让球去触碰这些砖块,然后把这些砖块消灭,触碰一次,数字就会减少1.
03
获得更多的球体:
在游戏一开始我们可以主要去获得更多的球体,球体多了,到时候我们开始弹球的时候,这些砖块也会消灭的快一些。
04
游戏可以暂停:
因为是单机游戏,所以游戏是随时可以暂停的,我们可以点击游戏界面的左上角暂停,然后有时间了我们再点击继续游戏即可了。
05
点击闪电加快速度:
我们的小球如果表现很好,一直在几个砖块里来回跳跃的话,我们可以点击屏幕右上角的闪电加快速度。
06
不要让砖块触碰到我们:
我们要优先去攻击马上要碰到我们的砖块,这样来增加我们继续玩游戏的时间,找好合适的角度,尽可能的多打到几个砖块。
07
观看视频可以复活:
如果不小心砖块触碰到了我们,我们结束了游戏的话,第一次被打败我们可以观看视频免费复活一次,我们的比赛可以再次继续进行下去。
Q4: windows三维弹球有秘籍?
windows三维弹球有秘(注意:只有在Windows 2000/XP上有效):
1、加分球
在游戏中输入1max。
2、无限球
在游戏刚启动后输入bmax,额外的球会在"黄色漩涡式星体"处出现。
3、启动引力井
在游戏开始时输入gmax
4、立即晋级
游戏中输入rmax,注意:这样将得不到分。
扩展资料:
windows三维弹球小技巧:
1、赚更多分
通过"重新上场航道"点亮顶部所有的三盏灯,攻击缓冲器会改变颜色(蓝绿黄红)从而获得更多的分。轻轻地发射球,让它点亮右边发射轨道的三盏调度灯,你可以得到7万5千分。
让球通过超空间斜道来旋转旗帜。当它旋转的时候,开始新游戏。旗帜会继续旋转,而且你在新游戏开始时会获得一些分。
你可以启用 bmax 来获得无限球从而得到非常高的纪录。当你这样获得足够高的纪录的时候,按住"撞针"直到提示"TILT",这样你就丢了一个球。注释:在丢了一个球后你仍然可以使用 1max 来继续,如果这样当你要退出时就不需要倾斜桌子了。
2、移动重新上场灯
摇动挡板可以移动顶上的重新上场灯。
3、高技能发射
调度斜道有隐藏的高技能发射。把球发射到部分斜道而且让它落到斜道的第一盏黄色拱形灯,这样就会赚到丰厚的分数。开启高技能发射,点亮每盏灯的分值为:
第一盏:15,000
第二盏:30,000
第三盏:75,000
第四盏:30,000
第五盏:15,000
第六盏:7,500
Q5: 找一个弹球游戏,就是你操控球的方向,然后打方块,方块上面有数字,
你说的这个游戏是开心消消乐游戏吧,开心消消乐是一款休闲益智类的游戏,里面的游戏情节就是您说的这个,并且和这个游戏相似的在中也是有很多的,不但可以这个游戏你还可以玩一下糖果萌萌消呢。都是一些大同小异的游戏,我也是比较喜欢玩一些小的游戏,这样的游戏玩了起来用的时间比较短一些。




