- 浏览: 188891 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
wangxd1208:
太感谢了,编译出问题,照着你这方法做了,解决问题了,感谢!
Eclipse 总是在编译的时候卡住 -
1336224635:
問題は解決しました。
有難うございます!hyfkasim 写道 ...
关于windows无法正确加载日语键盘布局的解决办法 -
hyfkasim:
問題は解決しました。有難うございます!
关于windows无法正确加载日语键盘布局的解决办法 -
1336224635:
yjlleilei 写道我操,不行。。。
怎么不行?
eclipse下安装js插件-spket(支持Ext) 能格式化Js(JQuery自动提示) -
yjlleilei:
我操,不行。。。
eclipse下安装js插件-spket(支持Ext) 能格式化Js(JQuery自动提示)
内容介绍:
1.坦克大战游戏图片
2.java绘图坐标体系
3.java绘图技术
4java时间处理机制
5.我的坦克大战游戏(1.0版)
目标:
1)理解java绘图坐标体系
2)掌握java绘图基本技术
3)充分理解java时间处理机制
4)完成坦克大战游戏(1.0版)
用到的知识:
1.java绘图坐标体系
下图说明了java坐标体系,坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位,在java的坐标体系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直放行,距离坐标原点y个像素。
案例:我们画一个圆圈
案例代码:
/**
* 功能:java绘图技术
*
* @author Administrator
*
*/
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
Test test = new Test();
}
public Test() {
mp = new MyPanel();
this.add(mp);
this.setSize(400, 300);
this.setLocation(100, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
// 定义一个MyPanel(我自己的面板,是用于绘图和显示的区域)
class MyPanel extends JPanel {
// 覆盖JPanel 的paint放啊
// Graphics是绘图的重要类,你可以把它理解成一只画笔
public void paint(Graphics g) {
// 1.调用父类函数完成初始化任务
// 这句话,不能少
super.paint(g);
// 先画一个圆圈
// g.drawOval(10, 10, 30, 30);
// 画出直线
// g.drawLine(10, 10, 100, 10);//(x1,y1)起点坐标,(x2,y2)终点坐标
// 矩形边框
// g.drawRect(10, 10, 100, 100);// (x1,y1)左上角的坐标,(x2,y2)右下角坐标
// 填充矩形
// 设置矩形颜色
// g.setColor(Color.YELLOW);
// g.fillRect(10, 10, 100, 100);
// 填充椭圆
// g.drawOval(10, 10, 50, 100);
// 在面板上画出图片
// Image im = Toolkit.getDefaultToolkit().getImage(
// Panel.class.getResource("/labixiaoxin.png"));// 图片放在src目录下面
// g.drawImage(im, 80, 80, 200, 150, this);
// // 如何画出字
// g.setColor(Color.blue);
// g.setFont(new Font("隶书",Font.BOLD,30));
// g.drawString("祖国万岁", 100, 100);
// g.draw3DRect(100, 100, 50, 30, true);
// g.drawRect(10, 10, 10, 10);
}
}
绘图原理(1)
Component类提供了两个和绘图相关的最重要的方法:
1)paint(Graphics g)绘制组件的外观
2)repaint()刷新组件的外观
当组件第一次在屏幕上显示的时候,程序会自动的调用paint()方法来绘制组件
绘图原理(2)
在以下情况paint()将会被调用:
1)窗口最小化,再最大化。
2)窗口的大小发生变化。
3)repaint函数被调用
绘图小练习
坦克大战游戏中,我们用到坦克,现在我们就利用java绘图技术来画出一个小坦克,完成我们坦克大战的1.0版本,因为用图片很浪费资源,所以我们还是自己用java画坦克。
开始画坦克:
案例代码:
/**
* 功能:坦克游戏的1.0
* 1.画出坦克
*/
package tankev1;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyTankGame1 extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
MyTankGame1 myTankGame1 = new MyTankGame1();
}
public MyTankGame1() {
mp = new MyPanel();
this.add(mp);
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
// 我的面板
class MyPanel extends JPanel {
// 定义一个我的坦克
Hero hero = null;
// 构造函数
public MyPanel() {
hero = new Hero(10, 10);
}
// 重写paint方法
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 400, 300);
this.drawTank(hero.getX(), hero.getY(), g, 0, 0);
}
// 画出坦克的函数
public void drawTank(int x, int y, Graphics g, int direct, int type) {
// 判断坦克类型
switch (type) {
case 0:
g.setColor(Color.CYAN);
break;
case 1:
g.setColor(Color.YELLOW);
break;
}
// 判断方向
switch (direct) {
case 0:
// 画出我的坦克(到时候在封装成一个函数)
// 1.画出左面的矩形
g.fill3DRect(x, y, 5, 30, false);
// 画出右面矩形
g.fill3DRect(x + 15, y, 5, 30, false);
// 3画出中间矩形
g.fill3DRect(x + 5, x + 5, 10, 20, false);
// 4画出圆形
g.fillOval(x + 5, x + 10, 10, 10);
// 画线
g.drawLine(x + 10, x + 15, x + 10, y);
break;
}
}
}
// 坦克类
class Tank {
// 表示坦克横坐标
int x = 0;
// 坦克纵坐标
int y = 0;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
}
// 我的坦克
class Hero extends Tank {
public Hero(int x, int y) {
super(x, y);
}
}
//-----------------------------------------------------------------------------------------------------------------
java事件处理机制
请大家看一个小程序,怎么样让小球受到键盘的空值,上下左右移动呢?
初步介绍
java事件处理是采用“委派事件模型” ,所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者” 处理的一种方式,而这里所说的“信息”,实际上市java.awt.event 事件类库里面的某个类所创建的对象,我们暂时把它称为“事件的对象”。
请大家看一个示意图:
案例:
案例代码:
/**
* 功能:讲解事件处理机制
*/
package demo9;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JFrame implements ActionListener {
// 定义一个Panel
JPanel jp = null;
JButton jb1 = null;
JButton jb2 = null;
public static void main(String[] args) {
Test test = new Test();
}
public Test() {
jp = new JPanel();
jb1 = new JButton("黑色");
jb2 = new JButton("红色");
this.add(jb1, BorderLayout.NORTH);
jp.setBackground(Color.yellow);
this.add(jp);
this.add(jb2, BorderLayout.SOUTH);
Cat cat = new Cat();
// 注册监听
jb1.addActionListener(this);// this代表当前JFrame监听,也可以写成类的对象来继承
//事件源对象时jb1,事件监听对象时cat
jb1.addActionListener(cat);
// 指定action命令
jb1.setActionCommand("黑色");// 用来区分事件源
jb2.addActionListener(this);
jb2.setActionCommand("红色");
this.setSize(200, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//对事件处理的方法
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
// 判断是哪个按钮被点击
if (arg0.getActionCommand().equals("黑色")) {
jp.setBackground(Color.BLACK);
} else if (arg0.getActionCommand().equals("红色")) {
jp.setBackground(Color.RED);
}
}
}
class Cat implements ActionListener {
//对事件处理的方法
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getActionCommand().equals("黑色")) {
System.out.println("猫也在监听");
}
}
}
运动的小球案例:
案例代码:
/**
* 功能:加深对事件处理机制的理解
* 1.通过上下左右的光标来控制一个小球的位置
*/
package demo9;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test2 extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
Test2 test2 = new Test2();
}
public Test2() {
mp = new MyPanel();
this.add(mp);
// 事件监听
this.addKeyListener(mp);
this.setTitle("运动的小球");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
// 定义自己的面板
class MyPanel extends JPanel implements KeyListener {
int x = 10;
int y = 10;
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, y, 10, 10);
}
// 键被按下
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("键被按下" + (char) e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y++;
System.out.println("下");
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
y--;
System.out.println("上");
}else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x--;
System.out.println("左");
}else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x++;
System.out.println("右");
}
// 重绘
// 调用repaint()函数
this.repaint();
}
// 键被释放
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
// 键的一个值被输出
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
注:一个类要实现监听的步骤
1)实现相应的接口(KeyListener,MouseListener,ActionLister,WindowListener)
2)把接口的处理方法根据需要重新编写(Override)
3) 在事件源注册监听
4)事件传递时靠事件对象传递
//-------------------------------------------------------------------------------------------------------
java事件处理机制深入理解
前面我们提到的几个重要概念
1)事件源2)事件3)事件监听器
我们下面来看全面的介绍他们,因为这几个概念是非常重要的。
1)事件源
事件源是一个产生(或触发)事件的对象,比如前面的JButton的一个对象btn1.当这个事件源对象的某些状态可能会生成多个不同类时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册,比如前面的案例。
2)事件
事件就是承载事件源状态改变的信息对象。或者说,事件是事件源向事件监听器传输事件源状态的载体。在用户和GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动的事件对象,而这个对象保存着当前鼠标在面板中位置信息。java.awt.event包和javax.swing.event包中定义了各种事件类型,常见的有:
正在续写中!!!
- 坦克游戏说明文档.zip (51.2 KB)
- 下载次数: 0
发表评论
-
java实现简单的单点登录
2014-09-04 15:29 845转自:http://www.blogjava.net/ ... -
GUI 复习
2012-07-20 11:19 1138GUI程序开发的步骤: 1.继承JFrame 2.定 ... -
java 泛型
2012-07-20 09:31 1008泛型的基本概念: 泛型是java SE1.5的新 ... -
LinkedList Vector
2012-07-19 14:48 1244LinkedList LinkedList 包含addFi ... -
ArrayList
2012-07-19 13:03 930java集合讲解: import java.io.Bu ... -
java 集合1
2012-07-19 12:12 1423为什么需要集合?(数组定义好了就不能修改了 ) ... -
Hibernate HQL查询
2012-07-09 16:44 829Hibernate HQL查询:Criteri ... -
java序列化的作用
2012-07-09 15:24 809最近在阅读Core J2EE Patterns 的时候发 ... -
Java 输入输出流
2012-07-09 10:19 6911 -
java编程中从键盘输入两个数并求其和,差,积,商
2012-06-07 22:49 12497import java.util.*; publi ... -
线程 Thread
2012-06-07 18:47 882//简单线程的编写 package com.sts.b ... -
深入探讨Iterator模式
2012-06-02 13:52 816java.util包中包含了一系 ... -
java 调用oracle 存储过程
2012-05-15 13:06 1442用java调用:class.forName(\&qu ... -
java 操作json之二 操作google-gson包
2012-05-06 13:58 1375Test2 package com.sun; ... -
java 操作json之一 操作org.json包
2012-05-06 13:29 20307例一。(org.json包) 首先导入org.json下面的 ... -
java socket 传输文件(2)
2012-05-03 16:06 1344发送端: import java.io.Buffere ... -
java socket 传输文件
2012-04-26 17:05 1428客户端: package com.s ... -
java 读写txt文件
2012-04-20 10:20 1469读取: public class ReadFromFile ... -
java 导出excel
2012-03-14 15:17 892public class creatFile { ...
相关推荐
《网络版坦克大战V1.0》的出现,就是这一演变过程中的一个典范,它将经典的坦克大战游戏重新包装,注入现代网络技术,为玩家带来了全新的游戏体验。 《网络版坦克大战V1.0》的核心理念是多人协作与竞技。在这个游戏...
易语言坦克大战V1.0 单机版源码,坦克大战V1.0 单机版,画战场,画雕堡,初始化敌人坦克1,画敌人坦克1,敌人坦克定位撤销1,敌人炮弹定位撤销1,敌人行走判断1,敌人炮弹打砖墙1,敌人炮弹打钢板1,敌人爆炸1,初始化敌人坦克2,...
【Python坦克大战v1.0.zip】是一款使用Python编程语言开发的小型游戏,它通过简单的代码实现了一款经典坦克战斗的模拟,旨在提供娱乐的同时,让学习者了解Python编程的基本概念和游戏开发的基础知识。 首先,我们要...
是标准坦克大战的Windows升级版。高超的人工智能,超强的游戏引擎,华丽的图形处理,使你找回令人怀念的电视游戏机上的坦克射击游戏。而且简单易用的地图关卡编辑器更加丰富此款游戏
C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码。C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业...
只是APK程序,非源码。 这个是本人自行开发的游戏,参考经典的FC90...该游戏目前只是V2.0版本,会不断更新中,不断更新关卡,修改错误,以让游戏更好玩。 下载请看附件,欢迎大家提供建议,联系可q:285203528, 谢谢。
FC经典坦克大战源码采用VB.NET开发的经典坦克大战FC游戏源码,模拟任天堂的坦克大战。全开源代码,测试请注意开启键盘大写。控制方式:大写的J K L I 控制坦克方向,F发弹。 FC经典坦克大战源码截图 相关阅读 ...
Unity插件源码,资源完整,真实可用Unity插件源码,资源完整,真实可用Unity插件源码,资源完整,真实可用Unity插件源码,资源完整,真实可用Unity插件源码,资源完整,真实可用Unity插件源码,资源完整,真实可用...
Java 第二阶段提升编程能力【坦克大战1.0】---- 代码 Java 第二阶段提升编程能力【坦克大战1.0】---- 代码 Java 第二阶段提升编程能力【坦克大战1.0】---- 代码 Java 第二阶段提升编程能力【坦克大战1.0】---- 代码 ...
坦克大战小游戏源码程序实现了小霸王游戏机上坦克大战的功能,主要功能是开火、移动、3种不同的敌方坦克、用户自制地图等,缺点是有些小细节还处理的不好,感觉画面不够好,还没实现自动的下一关功能(主要是嫌做...
软件简介人人坦克大战可以实现人机大战或双人大战,由人人棋牌游戏网开发,是一款受众非常广的单机游戏。使用步骤下载软件——解压——双击主程序,打开软件人人坦克大战玩法简单,极易操作,是一款非常好玩的单机...
Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战...
《坦克大战》是一款深受玩家喜爱的经典游戏,其背后蕴含了丰富的IT知识点。在这个"经典坦克大战全套资源.zip"压缩包...对于想要学习游戏开发的人来说,这是一个极好的研究对象,可以帮助他们深入理解游戏制作的全过程。
【Python坦克大战源代码坦克大战.zip】是一个包含Python语言实现的坦克大战小游戏的源代码集合。这个项目旨在提供一个互动的、基于文本的娱乐体验,让玩家能够享受经典的坦克战斗游戏,同时学习和理解Python编程的...
Unity3d 多人在线坦克大战源码 Unity精品小游戏源码 , Unity完整项目源码 是完整项目的压缩包,可直接运行,无需其他操作。 适合二次开发和学习使用,都是经典游戏,需要其他游戏源码包可以看我主页。 直接可以运行 , ...
期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业...
只是APK程序,非源码,本人开发的FC游戏90坦克攻城游戏,与原游戏有所不同,结合了一代二代的特点,即怪物也可以吃宝贝,同时引入了一种新地形--冰面地形,设计了一个智力关,总共有6个关卡。 具体可看 ...
资源名:vb.net 坦克大战 小游戏程序源码 资源类型:程序源代码 源码说明: FC经典坦克大战(VB.NET)源码 源码描述: 一、源码特点 1、采用VB.NET开发的经典坦克大战(FC),仿任天堂的坦克大战。全开源代码,测试请...
《C++实现坦克大战游戏详解》 坦克大战是一款经典的双人对战小游戏,深受程序员和游戏爱好者的喜爱。本文将围绕使用C++编程语言实现的坦克大战游戏进行深入解析,帮助读者理解游戏背后的编程思想和技术。 首先,...