- 浏览: 195512 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
se34218:
我想问一下,为什么插入CLOB字段的时候要先插入空CLOB,e ...
利用JDBC操作Oracle CLOB和BLOB类型数据 -
tinger1:
狂赞楼主!
GWT通信机制初探 -
skygege20:
2015-7-24 16:09:14 org.apache.c ...
Java中禁止的包名(Prohibited package name) -
skygege20:
那怎么解决这种问题呢?
Java中禁止的包名(Prohibited package name) -
javashiting:
看看 看看 看看 看看
Struts+Hibernate/JDBC+ExtJS实现人力资源管理系统(一)
大二开始学习Java的时候做的一个弹球游戏,共享于此。
厉害,我大二那会在啃 win sdk,后来就没往那个方向发展了
我这只是做来练练手,要做桌面应用还得是C这一套哈。不过现在Sun又开始发力JavaFX了,也很强大啊!
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BallGame extends JApplet { private JMenu controlBar,speedBar;;// 3个主控菜单 private JMenuItem startItem,exitItem;// control下的开始结束菜单 private JRadioButtonMenuItem stepItem[];// 难易程度 private ButtonGroup Group,speedGroup;//组件组 private JPanel gameJP;// 添加游戏区容器 private int dx,dy,randomNum;// 球的移动量和球撞到滑板上的随机量 private JButton RecBox;//滑板作为Button来操作,好处在于可以直接对此组 件添加KeyListener private Rectangle Rect;//滑板矩形框的定义 private ImageIcon backGround;//背景图片声明 private int xRec,widRec,SPEED,heiRec, width,height,Height,delay,xcenter,ycenter,r,marks;// parament // of drawings public BallGame(){ xcenter=200;ycenter=25;r=10;// 球的参数 dx=0;dy=0;// 球的移动量 randomNum=(int)Math.random()*5;//调节小球碰到滑板时的随机反弹 SPEED=20;delay=SPEED;// 速度因数,delay变量,speed常量 width=400;height=300;Height=275;// JFrame框长宽,Height表示游 戏框的高(菜单栏占了25的高度) xRec=160;widRec=80;heiRec=15;// 滑板框参数 marks=0;// 初始得分 RecBox=new JButton(); backGround=new ImageIcon("Thank.gif"); Rect=new Rectangle(xRec,realY(heiRec),widRec,heiRec); RecBox.setBounds(Rect); RecBox.setBackground(Color.black); } public void init(){ setSize(width,height);//背景图片 gameJP=new JPanel(){// 只有把 JPanel当作一个组件来加入到Applet 才能和菜单栏共存, // 否则paint()所画图形会被菜单界面盖住~~~~ public void paint(Graphics g){ backGround.paintIcon(this, g, 0, 0); g.setColor(Color.red); g.drawArc(xcenter-r,realY(ycenter+r), 2*r,2*r,0,360);// 画圆球 g.fillArc(xcenter-r,realY(ycenter+r),2*r,2*r,0,360); String tag="******Your Marks******* "; g.drawString(tag, 280, 10); String mark=Integer.toString(marks); g.drawString(mark, 330, 20); } }; add(RecBox); add(gameJP); // 向menuJP板中添加controlBar controlBar=new JMenu("Console");// 创建主控 controlBar.setMnemonic('C'); Group=new ButtonGroup(); startItem=new JMenuItem("Start"); startItem.setMnemonic('S'); startItem.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ dx=0;dy=0; BallThread Ball=new BallThread(); Ball.start();// 球的线程启动 KeyThr board=new KeyThr(); board.start(); } } ); Group.add(startItem); controlBar.add(startItem); // 向controlBar中添加speed speedGroup=new ButtonGroup(); speedBar=new JMenu("Speed"); speedBar.setMnemonic('S'); String StepValues[]={"1 level","2 level","3 level"};// 添加速度的选择项 stepItem=new JRadioButtonMenuItem[StepValues.length]; for(int count=0;count<stepItem.length;count++){ stepItem[count]=new JRadioButtonMenuItem(StepValues[count]); speedBar.add(stepItem[count]); speedGroup.add(stepItem[count]); stepItem[count].addActionListener(new SpeedHandler()); } stepItem[0].setSelected(true); controlBar.add(speedBar); controlBar.addSeparator();// 添加分隔线 exitItem=new JMenuItem("Exit");// 添加退出选项 exitItem.setMnemonic('E'); exitItem.addActionListener(// 响应退出事件 new ActionListener(){ public void actionPerformed(ActionEvent evt){ System.exit(0); } } ); Group.add(exitItem); controlBar.add(exitItem); JMenuBar Bar=new JMenuBar(); setJMenuBar(Bar); Bar.add(controlBar); setVisible(true); showStatus("Goal: "+marks); } public int realY(int a){return height-25-a;} // 球的响应事件线程 class BallThread extends Thread{ @SuppressWarnings("deprecation") public synchronized void run(){ for(;;){ try{Thread.sleep(delay); }catch(InterruptedException e){return;} if(dx==0&&dy==0){// 起步时 double a=(-101+Math.random()*200); if(a==0) a=(-101+Math.random()*200); double b=(1+Math.random()*100); double ang=Math.abs(a)<=b?a/b:b/a; double Angle=Math.acos(ang); dx=(int)(Math.cos(Angle)*5); dy=(int)(Math.sin(Angle)*5); xcenter=xcenter+dx; ycenter=ycenter+dy; repaint(); } else{ if(xcenter-r>=0&&xcenter+r<=width &&ycenter+r<=Height&&ycenter-r>0){ xcenter=xcenter+dx; ycenter=ycenter+dy; repaint(); } else if(xcenter-r<=0||xcenter+r>=width){// 超出左右边界 ycenter=ycenter+dy; xcenter=xcenter-dx; dx=(-dx); repaint(); } else if(ycenter+r>=Height){// 超出上界 ycenter=ycenter-dy; xcenter=xcenter+dx; dy=(-dy); repaint(); } else if(xcenter+r>=xRec && xcenter-r<=xRec+widRec && ycenter-r<=r+heiRec){// 弹到滑板上 ycenter=ycenter-dy; if(dx>0){ xcenter=xcenter+dx+randomNum; dy=(-dy+randomNum); } else { xcenter=xcenter+dx-randomNum; dy=(-dy-randomNum); } marks+=10; repaint(); } else if(ycenter<=r){// 超出下界 JOptionPane.showMessageDialog(null, "Game over","Game result",JOptionPane.INFORMATION_MESSAGE); marks=0;xcenter=200;ycenter=25; BallGame.this.RecBox.setLocation(160,realY(15)); repaint(); interrupt(); } } } } } public class SpeedHandler implements ActionListener{ public void actionPerformed(ActionEvent evt){ for(int count=0;count<stepItem.length;count++){ if(stepItem[count].isSelected()){ if(marks>50&&marks<=600) delay=SPEED/(count+1)-marks/50;//随着分数的越来越高,球运动的也越来越快 else delay = SPEED/(count+1); } } } } public class KeyThr extends Thread {//滑板移动线程 public void run(){ RecBox.addKeyListener(new Keyhandler()); } } //滑板的移动响应事件 public class Keyhandler extends KeyAdapter { public void keyPressed(KeyEvent evt){ JButton button=(JButton)evt.getSource();//evt.getSource()表示返回最初发生event的对象,即RecBox滑板 xRec=button.getBounds().x;//xRec必须是全局变量,因为有另一个线程调用此变量 if (evt.getKeyCode() == KeyEvent.VK_RIGHT) { xRec=xRec+4; if(xRec>=width-widRec) xRec=width-widRec; button.setLocation(xRec,realY(heiRec)); repaint(); } else if (evt.getKeyCode() == KeyEvent.VK_LEFT) { xRec=xRec-4; if(xRec<=0) xRec=0; button.setLocation(xRec,realY(heiRec)); repaint(); } } } public void update(Graphics g){paint(g);}//消除抖动 }
评论
2 楼
idealab
2009-04-20
C_J 写道
厉害,我大二那会在啃 win sdk,后来就没往那个方向发展了
我这只是做来练练手,要做桌面应用还得是C这一套哈。不过现在Sun又开始发力JavaFX了,也很强大啊!
1 楼
C_J
2009-04-20
厉害,我大二那会在啃 win sdk,后来就没往那个方向发展了
发表评论
-
uniVocity-parsers:一款强大的CSV/TSV/定宽文本文件解析库(Java)
2015-04-27 00:21 5856uniVocity-parsers 是一个开源的Java项目。 ... -
Java压缩和解压缩
2010-06-17 18:40 2152压缩需求:压缩文件夹下所有具有统一文件名规范的普通文件,同时添 ... -
GWT通信机制初探
2010-01-29 10:30 8617GWT RPC:GWT提供类似Swing的界面开发模式(基于U ... -
Java中禁止的包名(Prohibited package name)
2009-08-19 00:18 36338由于定义了以java开始的包(java.mypackage), ... -
Log4j for Tomcat5.5
2009-05-31 13:41 2342在Tomcat5.5之前,可以通过server.xml下< ... -
利用JDBC操作Oracle CLOB和BLOB类型数据
2009-05-11 09:41 10218对LOB数据(包括CLOB BLOB NCLOB BFILE类 ... -
解决eclipse3.4下错误:Exception starting filter struts2
2009-05-04 12:26 1652项目中用到struts2,跟以前用到过的struts有很大区别 ... -
JDBC高级编程:操作结果集
2009-04-23 10:26 4810自JDBC2.0之后,可滚动(Scrollabl ... -
Java动态绑定探讨
2009-04-20 09:26 1389本文转 “子 孑” 博客:http://zhangjunhd. ... -
区别类方法、实例方法和字段的调用
2009-04-16 15:41 2205本例根据一个实例来说明类方法和实例方法调用的区别,以 ... -
Tomcat类加载器体系结构
2009-04-03 22:09 5641与Java语言相似,Tomcat提供了分级类加载机制,当 ... -
Java类加载器
2009-03-31 21:06 4214Java是介于编译型和解释型之间的编程语言,编译器将jav ... -
JSON
2008-12-29 22:28 1682JSON建构于两种结构: ...
相关推荐
JAVA写得小弹球,多线程。随机出现,随机选择颜色,遇到墙壁反弹。
Java做的弹球图形界面小游戏使用awt.*可以创建多个小球.
学习委托过程中写的小程序。利用了多线程和鼠标钩子。 模拟重力等。随机产生小球会不断的攻击你的鼠标。 每个小球会思考并决定下一步动作,有一定智能性。
java
此代码案例为弹琴代码案例,可以很直观的了解线程的运行实现,已帮助了解多线程原理
基于Java多线程的弹球游戏程序
用户能通过GUI组件指定生成小球的...鼠标在界面中显示为方块状,玩家需来回移动鼠标以避开运动的小球及屏幕四周,如果鼠标碰到任一小球或者窗口四周,则游戏结束。 程序需提供计时功能,并最终显示玩家能坚持多少秒。
本文给出了一个在Linux下,利用curses库实现弹球游戏的实现算法以及相关功能设计。可以用作linux实践教学的实例。
MFC格式的弹球游戏源码,初学者值得下载。
Java语言程序设计实验指导书中实验5多线程内容
python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球弹球python实现基本弹球效果与多个球...
HTML5弹球游戏 HTML5游戏代码实现
弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏
vs环境下简单的弹球游戏,利用opencv,对手为简单人工智能
基于FPGA设计的一个简单弹珠游戏,用vivado平台,verilog语言编写,有详细的设计过程和讲解,后面附有全部程序。
iPhone弹球游戏源代码
java 弹球游戏 多线程 注意这是eclipe 下用了swingdesigner
java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏...
弹球游戏 弹球游戏的源文件和头文件 射击游戏 小球打砖块