第二讲Java画图应用开发篇_第1页
第二讲Java画图应用开发篇_第2页
第二讲Java画图应用开发篇_第3页
第二讲Java画图应用开发篇_第4页
第二讲Java画图应用开发篇_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1Java画图应用开发篇2Java画图应用开发篇 在本讲中,我们将进行一些有意思的画图编程,并将结合事件机制和线程机制编写一个简单的小游戏。 本讲概要绘制一辆可以移动的坦克功能介绍编程思路程序代码运行结果与总结 实现坦克的炮弹发射功能功能介绍编程思路程序代码运行结果与总结绘制一辆可以移动的坦克功能介绍这是一个带有图形界面的小游戏,在窗体上使用Java画图机制绘制一辆坦克,结合事件机制使用键盘控制坦克的移动,并能够改变坦克的朝向。坦克的朝向有左、上、右、下四个方向,键盘的“a”键控制坦克左移,“w”键控制坦克上移,“d”键控制坦克右移,“s”键控制坦克下移。具体游戏界面如图所示 绘制一辆可以移动

2、的坦克游戏运行界面坦克简化成一个圆和一条线段构成,红色的线段代表坦克的炮筒,其朝向决定坦克的朝向,坦克的半径是15 编程思路按照功能要求,本程序带有图形用户界面的小游戏,使用Java画图机制绘制坦克,使用事件机制控制坦克的移动。具体功能实现可分成两大部分:1、坦克的绘制2、坦克移动的控制绘制一辆可以移动的坦克1、坦克的绘制使用Java画图机制绘制坦克,坦克是由一个圆和一条线段构成,半径长度是15像素。定义两个整型变量x和y,表示坦克所在的圆心坐标,绘制坦克主体的时候可以用fillOval(x-15,y-15,30,30)这个语句进行。定义一个整型变量dir,该变量有四个值,分别是0(左)、1(

3、上)、2(右)、3(下),该变量代表坦克的朝向,使用drawLine()方法绘制坦克的炮筒。定义paint()方法进行坦克的绘制,绘制时根据dir不同的值绘制不同朝向的坦克炮筒。绘制一辆可以移动的坦克编写坦克的代码import java.awt.*;import java.awt.event.*;public class Tank_1 extends Frame /坦克的圆心坐标 int x=100,y=100; /坦克的朝向 /0:左; 1:上; 2:右; 3:下 int dir=0; public void paint(Graphics g) g.setColor(Color.blue);

4、 g.fillOval(x-15,y-15,30,30); g.setColor(Color.red); switch(dir) case 0:g.drawLine(x,y,x-15,y);break; case 1:g.drawLine(x,y,x,y-15);break; case 2:g.drawLine(x,y,x+15,y);break; case 3:g.drawLine(x,y,x,y+15);break; public static void main(String args) Tank_1 t=new Tank_1(); t.setSize(600,400); t.setVi

5、sible(true); 绘制一辆可以移动的坦克2坦克移动的控制,使用Java事件机制控制坦克的移动具体设计如下:定义一个键盘事件处理的类,类名是KL,实现KeyListener接口,实现其中的keyTyped()方法,在这个方法中进行移动控制。通过改变x和y的值,可以实现坦克位置的变化,每次x和y的值改变之后,都要调用Frame类的repaint()方法重绘整个窗体,repaint()方法会自定调用paint()方法。通过改变dir的值,可以实现坦克朝向的变化,每次改变都要调用repaint()方法重绘窗体。 控制坦克移动的事件处理类/定义键盘事件处理类class KL implements

6、 KeyListener public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) if(e.getKeyChar()=a) x=x-2; dir=0; /改变坦克朝向 repaint(); else if(e.getKeyChar()=w) y=y-2; dir=1; repaint(); else if(e.getKeyChar()=d) x=x+2; dir=2; repaint(); else if(e.getKeyChar()=s) y

7、=y+2; dir=3; repaint(); 小结本游戏的实质就是结合Java画图机制和Java事件机制开发小游戏,画图机制绘制坦克,事件机制控制坦克移动。实现坦克的炮弹发射功能功能介绍本节将完善上一节中的坦克游戏,上一节的坦克游戏仅仅绘制了坦克和实现了坦克的移动,作为坦克游戏中最重要的部分子弹发射却没有涉及。本节在上一节的基础之上,增加子弹发射功能,按下键盘的“j”键就能触发子弹的发射。编程思路联想上一节中坦克移动功能的实现,坦克的移动是由键盘控制的,也即是使用事件机制控制坦克的移动,而子弹的移动是自发进行的,子弹发射以后,一步步向前移动,不需要人工干涉。什么机制能够实现子弹的自发移动?答

8、案只有线程机制,子弹发射的时候,开启一个线程,然后由这个线程控制子弹移动,所以应该定义一个控制子弹移动的线程类 具体功能实现可分成三大部分实现坦克的炮弹发射功能1、子弹的绘制使用Java画图机制绘制子弹,坦克是一个圆,半径长度是2像素。定义两个整型变量bulletX和bulletY,表示子弹的圆心坐标,绘制子弹的时候可以用fillOval(bulletX-2,bulletY-2,4,4)这个语句进行。定义一个整型变量bulletDir,该变量有四个值,分别是0(左)、1(上)、2(右)、3(下),表示子弹的移动方向。定义paint()方法进行子弹的绘制。 实现坦克的炮弹发射功能子弹的参数bul

9、letX子弹圆心的横坐标bulletY子弹圆形的纵坐标bulletDir子弹的移动方向实现坦克的炮弹发射功能子弹绘制的代码public void paint(Graphics g) g.setColor(Color.blue); g.fillOval(x-15,y-15,30,30); g.setColor(Color.red); switch(dir) case 0:g.drawLine(x,y,x-15,y);break; case 1:g.drawLine(x,y,x,y-15);break; case 2:g.drawLine(x,y,x+15,y);break; case 3:g.d

10、rawLine(x,y,x,y+15);break; /绘制子弹 g.fillOval(bulletX-2,bulletY-2,4,4); 实现坦克的炮弹发射功能2、子弹移动的线程类,使用Java线程机制控制子弹的移动,具体设计如下:定义一个控制子弹移动的类,类名是BulletMovement,继承自Thread类,重写其中的run()方法。在run()方法中编写一个无限循环,在其中控制bulletX和bulletY的变化,每次变化都调用repaint()方法重绘窗口。子弹移动线程类class BulletMovement extends Thread public void run() tr

11、y while(true) switch(bulletDir) case 0: /如果子弹未出左边界,就继续移动 if(bulletX0) bulletX=bulletX-2; repaint(); break; case 1: /如果子弹未出上边界,就继续移动 if(bulletY0) bulletY=bulletY-2; repaint(); break; case 2: /如果子弹未出右边界,就继续移动 if(bulletX600) bulletX=bulletX+2; repaint(); break; case 3: /如果子弹未出下边界,就继续移动 if(bulletY400) b

12、ulletY=bulletY+2; repaint(); break; Thread.sleep(10); catch(Exception e) 实现坦克的炮弹发射功能3、子弹发射,使用Java事件机制触发子弹发射,具体设计如下:按下键盘“j”键的时候,触发子弹的发射。根据坦克的朝向,决定子弹的移动方向;根据坦克的位置,决定子弹的初始位置。 发射子弹的事件处理类class KL implements KeyListener public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) if(e.getKeyChar()=a) x=x-2; dir=0; repaint(); else if(e.getKeyChar()=w) y=y-2; dir=1; repaint(); else if(e.getKeyChar()=d) x=x+2; dir=2; repaint(); else if(e.getKeyChar()=s) y=y+2; dir=3; repaint(); 发射子弹的事件处理类 else if(e.getKeyChar()=j) /设置子弹方向和子弹初始位置 bulletDir=dir; switch(bulletDi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论