java开发坦克大战.docx
- 文档编号:5590927
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:32
- 大小:27.33KB
java开发坦克大战.docx
《java开发坦克大战.docx》由会员分享,可在线阅读,更多相关《java开发坦克大战.docx(32页珍藏版)》请在冰豆网上搜索。
java开发坦克大战
坦克大战游戏演示
为什么选择这个项目
1、好玩
2、涉及到java各个方面的技术
1、java面向对象编程;2、界面编程;3、绘图技术;4、多线程;5、文件i/o操作;6、数据库
3、巩固旧知识,学习新知识
java绘图坐标体系
绘图坐标本系--介绍
坐标原点位于左上角,以像素为单位。
像素是计算机屏幕上最小的显示单位。
在java的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。
坐标体系--像素
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。
例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。
现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。
因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。
绘图原理
(1)[Window013.java]
Component类提供了两个和绘图相关最重要的方法:
1、paint(Graphicsg)绘制组件的外观
2、repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件
importjava.awt.*;
importjavax.swing.*;
publicclassWindow013extendsJFrame{
//定义组件
MyPanelmp=null;
publicstaticvoidmain(String[]args){
Window013th=newWindow013();
}
publicThread01(){
//创建组件
mp=newMyPanel();
//加入组件
this.add(mp);
//设置窗体
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
classMyPanelextendsJPanel{
//重写(覆盖)JPanel的paint方法
publicvoidpaint(Graphicsg){//Graphics是绘图的重要类,可以把它理解成一只画笔
//1、调用父类函数,完成初始化任务
super.paint(g);//super.paint(g);这句话不能少
被调用");//用于测试绘图原理2paint调用
//先画一个圆
g.drawOval(10,10,30,30);//drawOval方法是画圆
}
}
------------------------------------------------------------------------------
绘图原理
(2)
在以下情况paint()将会被调用:
1、窗口最小化,再最大化
2、窗口的大小发生变化
3、repaint函数被调用
java绘图技术--Graphics
Graphics类[Window014.java]
Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:
[多看jdk帮助文档]
1、画直线drawLine(intx1,inty1,intx2,inty2);
2、画矩形边框drawRect(intx,inty,intwidth,intheight);
3、画椭圆边框drawOval(intx,inty,intwidth,intheight);
4、填充矩形fillRect(intx,inty,intwidth,intheight);
5、填充椭圆fillOval(intx,inty,intwidth,intheight);
6、画图片drawImage(Imageimg.intx,inty,..);
7、画字符串drawString(Stringstr,intx,inty);
8、设置画笔的字体setFont(Fontfont);
9、设置画笔的颜色setColor(Colorc);
//java画图Graphics绘图类的使用方法
importjava.awt.*;
importjavax.swing.*;
publicclassWindow014extendsJFrame{
//定义组件
MyPanel1mp=null;
publicstaticvoidmain(String[]args){
Window014th=newWindow014();
}
publicWindow014(){
//构建组件
mp=newMyPanel1();
//加入组件
this.add(mp);
//设置窗体
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
classMyPanel1extendsJPanel{
//重写(覆盖)JPanel的paint方法
publicvoidpaint(Graphicsg){//Graphics是绘图的重要类,可以把它理解成一只画笔
//1、调用父类函数,完成初始化任务
super.paint(g);
//画一个直线
g.drawLine(10,10,40,10);
//画矩形边框
g.drawRect(50,50,40,40);
//画椭圆边框
g.drawOval(100,100,60,60);
//画填充矩形
g.setColor(Color.blue);
g.fillRect(10,150,70,70);
//画填充椭圆
g.setColor(Color.red);//设置画笔颜色
g.fillOval(200,50,80,80);
}
}
------------------------------------------------------------------------------
//画图Graphics画图类--画图片--画字[Window015.java]
importjava.awt.*;
importjavax.swing.*;
publicclassWindow015extendsJFrame{
//定义组件
MyPanel1mp=null;
publicstaticvoidmain(String[]args){
Window015th=newWindow015();
}
publicWindow015(){
//构建组件
mp=newMyPanel1();
//加入组件
this.add(mp);
//设置窗体
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
classMyPanel1extendsJPanel{
//重写(覆盖)JPanel的paint方法
publicvoidpaint(Graphicsg){//Graphics是绘图的重要类,可以把它理解成一只画笔
//1、调用父类函数,完成初始化任务
super.paint(g);
//在面板上画出图片
//实现
g.drawImage(im,0,0,300,200,this);
//如何画出字
g.setColor(Color.red);
g.setFont(newFont("黑体",Font.BOLD,40));
g.drawString("祖国万岁",100,100);
//画弧形
g.drawArc(100,100,120,200,-50,-100);
}
}
java事件处理机制
如何通过键盘或鼠标的控制使Java程序中的功能有响应
java事件处理机制--初步介绍
java事件处理是采取“委派事件模型”。
所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者”处理的一种方式,而这里所说的“信息”实际上就是事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。
比如:
当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。
为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。
实例[Window016.java]
/**
*功能:
事件处理机制
*/
importjava.awt.*;
importjavax.swing.*;
publicclassWindow016extendsJFrameimplementsActionListener{
//定义组件
JPanelmp=null;
JButtonjb1,jb2;
publicstaticvoidmain(String[]args){
Window016win=newWindow016();
}
//构造函数
publicWindow016(){
//创建组件
mp=newJPanel();
jb1=newJButton("黑色");
jb2=newJButton("红色");
//设定布局管理器
//加入组件
mp.setBackground(Color.black);
this.add(mp);
this.add(jb1,BorderLayout.NORTH);
this.add(jb2,BorderLayout.SOUTH);
//猫类在监听
Catmycat1=newCat();
jb1.addActionListener(mycat1);
jb2.addActionListener(mycat1);
//注册监听
jb1.addActionListener(this);
jb2.addActionListener(this);
//指定action命令
jb1.setActionCommand("黑色");
jb2.setActionCommand("红色");
//JFrame窗体设置
this.setTitle("事件处理机制");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//对事件处理的方法
publicvoidactionPerformed(ActionEvente){
//判断是哪个按钮被点击
if(e.getActionCommand().equals("黑色")){
点击了黑色按钮");
mp.setBackground(Color.BLACK);
}elseif(e.getActionCommand().equals("红色")){
点击了红色按钮");
mp.setBackground(Color.RED);
}else{
不知道");
}
}
}
classCatimplementsActionListener{
publicvoidactionPerformed(ActionEventarg0){
if(arg0.getActionCommand().equals("黑色")){
也知道你按下了黑色按钮");
}elseif(arg0.getActionCommand().equals("红色")){
也知道你按下了红色按钮");
}else{
也不知道");
}
}
}
------------------------------------------------------------------------------
实例[Window017.java]
/**
*功能:
加深对事件处理机制的理解
*1、通过上下左右键,来控制一个小球的移动。
*/
importjava.awt.*;
importjavax.swing.*;
publicclassWindow017extendsJFrame{
//设定组件
MyPanelsmp=null;
publicstaticvoidmain(String[]args){
Window017win=newWindow017();
}
//构造函数
publicWindow017(){
//构建组件
mp=newMyPanels();
//监听
this.addKeyListener(mp);
//加入组件
this.add(mp);
//设置窗体
this.setTitle("键盘事件监听");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//定义自己的面板
classMyPanelsextendsJPanelimplementsKeyListener{
intx=10,y=10;
publicvoidpaint(Graphicsg){
super.paint(g);
g.fillOval(x,y,10,10);
}
publicvoidkeyPressed(KeyEvente){//keyPressed代表键被按下
被按下"+((char)e.getKeyCode()));
if(e.getKeyCode()==KeyEvent.VK_DOWN){
向下");
y++;
}elseif(e.getKeyCode()==KeyEvent.VK_UP){
向上");
y--;
}elseif(e.getKeyCode()==KeyEvent.VK_LEFT){
向左");
x--;
}elseif(e.getKeyCode()==KeyEvent.VK_RIGHT){
向右");
x++;
}
//调用repaint()函数,来重绘界面
this.repaint();
}
publicvoidkeyReleased(KeyEvente){//keyReleased代表键被弹起
}
publicvoidkeyTyped(KeyEvente){//keyTyped代表具体的值被输出
}
}
java事件处理机制--深入理解
前面提到了几个重要的概念
1、事件源;2、事件;3、事件监听器
这几个概念非常重要,必需要搞清楚。
1、事件源
事件源是一个产生(或触发)事件的对象,比如前面的JButton的一个对象jb1。
当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。
如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。
2、事件
事件就是承载事件源状态改变时的信息对象。
或者说,事件是事件源事件监听器传输事件源状态信息的载体。
在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息。
包和包中定义了各种事件类型,常见的事件类有:
事件类
说明
ActionEvent
通常在按下按钮,或双击一个列表项或选中某个菜单时发生
AdjustmentEvnet
当操作一个滚动条时发生
ComponentEvent
当一个组件隐藏、移动、改变大小时发送
ContainerEvent
当一个组件从容器中加入或者删除时发生
FocusEvent
当一个组件获得或是失去焦点时发生
ItemEvent
当一个复选框或是列表项被选中时,当一个选择框或选择菜单被选中
KeyEvent
当从键盘的按键被按下,松开时发生
MouseEvent
当鼠标被拖动、移动、点击、按下..
TextEvent
当文本区和文本域的文本发生改变时发生
WindowEvent
当一个窗口激活、关闭、失效、恢复、最小化...
3、事件监听器接口
事件源产生一个事件,可以传送给事件监听者处理,那么怎样才能编写一个事件监听者呢?
事件监听者实际上就是一个类,该类实现了某个事件监听器接口、比如前面我们案例中的MyPanel就是一个类,它实现了ActionListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理。
事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口,这些接口在和包中定义。
java事件处理机制--总结
总结--事件编程步骤:
1、编写事件处理类(事件监听者)
2、根据需求给事件处理类实现监听器接口
3、在事件处理中重写(实现)其事件处理的函数
4、在事件源类中指定该事件的监听器(响应者)是谁
注意事项:
1、java采用委托机制处理事件
2、java中的事件是分类的,比如对窗体事件、鼠标事件、按键事件、操作事件[按按钮]
3、java中一个类要监听某个事件,则必需实现相应的事件监听接口
4、事件监听接口有多种,程序员应当针对不同的情况,实现不同的监听接口,比如监听鼠标事件就应当实现MouseListener;要监听键盘事件,就应当实现KeyListener..
5、在实现监听接口的类(事件监听类/者)中,需要重写处理函数,比如实现了ActionListener接口,就应当重写actionPerformed(ActionEvente),可以参考前面的事件监听器接口表格
6、在事件源中需要注册事件监听类。
否则事件监听类接收不到事件源发生的事件。
一个类要实现监听的步骤:
a、实现相应的接口[KeyListener/MouseListener/ActionListener/WindowListener]
b、把接口的处理方法根据需要重新编写(Override)
c、在事件源上注册监听
d、事件传递是靠事件(类)对象
实例[Window018.java]
/**
*单事件源、多事件监听,多事件处理
*/
importjava.awt.*;
importjavax.swing.*;
publicclassWindow018extendsJFrame{
//设定组件
MyPanelmp=null;
publicstaticvoidmain(String[]args){
Window018win=newWindow018();
}
publicWindow018(){
//创建组件
mp=newMyPanel();
//注册监听
this.addMouseListener(mp);
this.addMouseMotionListener(mp);
this.addKeyListener(mp);
this.addWindowListener(mp);
//加入组件
this.add(mp);
//设置窗体
this.setTitle("事件多监听多处理");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//1、让MyPanel知道鼠标按下的消息,并且知道点击的位置(x,y)
//2、让MyPanel知道哪个键按下了
classMyPanelextendsJPanelimplementsMouseListener,MouseMotionListener,KeyListener,WindowListener{
publicvoidpaint(Graphicsg){
super.paint(g);
}
//鼠标点击(mouseClicked)
publicvoidmouseClicked(MouseEvente){
鼠标点击了x="+e.getX()+"y="+e.getY());
}
//鼠标移动到MyPanel(mouseEntered)
publicvoidmouseEntered(MouseEvente){
鼠标移动到MyPanel上了");
}
//鼠标离开MyPanel(mouseExited)
publicvoidmouseExited(MouseEvente){
鼠标离开MyPanel上了");
}
//鼠标按下去(mousePressed)
publicvoidmousePressed(MouseEvente){
鼠标被按下了");
}
//鼠标松开(mouseReleased)
publicvoidmouseReleased(MouseEvente){
鼠标被松开了");
}
//鼠标拖拽(mouseDragged)
publicvoidmouseDragged(MouseEvente){
鼠标拖拽x="+e.getX()+"y="+e.getY());
}
//鼠标移动(mouseMoved)
publicvoidmouseMoved(MouseEvente){
鼠标移动时X="+e.getX()+"Y="+e.getY());
}
//键输入值(keyTyp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 开发 坦克 大战