

用的是Access数据库,安全性不够好,性能也不够强大;

躲在这里,坦克很少过来,做了一个随机数;
把得分的记录保存在数据库里面;
SQLServer2005中型数据库;



(x,y)坐标;


800x600;
表示计算机屏幕上的每一行由800个点组成,共有600行;
共有480000个像素;
java绘图技术:
绘图一般在JPane上画;

覆盖JPanel的paintat方法
Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔
super.paint(g);
drawOval画一个圆形;
JFrame不提供画图方法,是在JPanel上画的;
把JPanel放到JFrame里面;

MyPanel是自己定义的继承自JPanel的面板;


坦克为什么在动?
repaint( )不断的刷新;
paint()方法会被系统自动调用;

比如拖动窗口,最大化最小化会重新画了了一次;paint()会被调用;


fillRect实心矩形;

deaw3DRect 矩形3D的凹凸感,由boolean决定;

setColor设置颜色;

----------------------------------------------------------------------------------
坦克大战游戏演示
为什么选择这个项目
1、好玩
2、涉及到java各个方面的技术
1、java面向对象编程;2、界面编程;3、绘图技术;4、多线程;5、文件i/o操作;6、数据库
3、巩固旧知识,学习新知识
java绘图坐标体系
绘图坐标本系--介绍
坐标原点位于左上角,以像素为单位。像素是计算机屏幕上最小的显示单位。在java的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。

坐标体系--像素
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。
9
绘图原理(1)[Window013.java]
Component类提供了两个和绘图相关最重要的方法:
1、paint(Graphics g)绘制组件的外观
2、repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件
x
1
/**2
* 功能:java绘图原理3
*/4
import java.awt.*;5
import javax.swing.*;6
public class Window013 extends JFrame{7
//定义组件8
MyPanel mp=null;9
public static void main(String[] args) {10
Window013 th=new Window013();11
}12
public Window013 (){13
//创建组件14
mp=new MyPanel();15
//加入组件16
this.add(mp);17
//设置窗体18
this.setSize(400, 300);19
this.setLocationRelativeTo(null);20
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);21
this.setVisible(true);22
}23
}24
25
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)26
class MyPanel extends JPanel{27
//重写(覆盖)JPanel的paint方法28
public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔29
//1、调用父类函数,完成初始化任务30
super.paint(g);//super.paint(g);这句话不能少31
System.out.println("Paint被调用");//用于测试绘图原理2paint调用32
//先画一个圆33
g.drawOval(10, 10, 30, 30);//drawOval方法是画圆34
}35
}
------------------------------------------------------------------------------
绘图原理(2)
在以下情况paint()将会被调用:
1、窗口最小化,再最大化
2、窗口的大小发生变化
3、repaint函数被调用
java绘图技术--Graphics
Graphics类[Window014.java]
Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[多看jdk帮助文档]
1、画直线 drawLine(int x1,int y1,int x2,int y2);
2、画矩形边框 drawRect(int x,int y,int width,int height);
3、画椭圆边框 drawOval(int x,int y,int width,int height);
4、填充矩形 fillRect(int x,int y,int width,int height);
5、填充椭圆 fillOval(int x,int y,int width,int height);
6、画图片 drawImage(Image img.int x,int y,..);
7、画字符串 drawString(String str,int x,int y);
8、设置画笔的字体 setFont(Font font);
9、设置画笔的颜色 setColor(Color c);
//java画图Graphics绘图类的使用方法
xxxxxxxxxx41
1
import java.awt.*;2
import javax.swing.*;3
public class Window014 extends JFrame{4
//定义组件5
MyPanel1 mp=null;6
public static void main(String[] args) {7
Window014 th=new Window014();8
}9
//构造函数10
public Window014(){11
//构建组件12
mp=new MyPanel1();13
//加入组件14
this.add(mp);15
//设置窗体16
this.setSize(400, 300);17
this.setLocationRelativeTo(null);18
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);19
this.setVisible(true);20
}21
}22
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)23
class MyPanel1 extends JPanel{24
//重写(覆盖)JPanel的paint方法25
public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔26
//1、调用父类函数,完成初始化任务27
super.paint(g);28
//画一个直线29
g.drawLine(10, 10, 40, 10);30
//画矩形边框31
g.drawRect(50, 50, 40, 40);32
//画椭圆边框33
g.drawOval(100, 100, 60, 60);34
//画填充矩形35
g.setColor(Color.blue);36
g.fillRect(10, 150, 70, 70);37
//画填充椭圆38
g.setColor(Color.red);//设置画笔颜色39
g.fillOval(200, 50, 80, 80);40
}41
}
MyTank01:(画出一个坦克)
x
1
/**2
* 功能:坦克游戏的1.03
* 1、画出坦克4
*/5
import java.awt.*;6
import javax.swing.*;7
public class MyTank01 extends JFrame{8
//定义组件9
MyPanel mp=null;10
public static void main(String[] args) {11
MyTank01 mt=new MyTank01();12
}13
//构造函数14
public MyTank01(){15
//构建组件16
mp=new MyPanel();17
18
//加入组件19
this.add(mp);20
21
//设置JFrame窗体22
this.setTitle("坦克大战");//JFrame标题23
this.setSize(400, 300);//JFrame窗体大小24
this.setLocationRelativeTo(null);//在屏幕中心显示25
this.setVisible(true);//显示26
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame27
28
}29
}30
31
//我的面板Panel32
class MyPanel extends JPanel{33
//定义一个我的坦克34
Hero hero=null;35
36
//构造函数37
public MyPanel(){38
hero=new Hero(10,10);//我的坦克初始位置39
}40
41
//重写paint函数42
public void paint(Graphics g){43
super.paint(g);//调用父类paint方法44
//设置Panel底色45
g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域46
//调用坦克47
this.drawTank(hero.getX(), hero.getY(), g, 0, 1);48
49
}50
51
//画出坦克的函数52
public void drawTank(int x,int y,Graphics g,int direct,int type){53
//判断是什么类型的坦克54
switch(type){55
case 0:56
g.setColor(Color.cyan);//我的坦克颜色57
break;58
case 1:59
g.setColor(Color.yellow);//敌人坦克颜色60
break;61
}62
63
//判断坦克的方向64
switch(direct){65
//向上走66
case 0:67
//画出我的坦克(到时再封装成一个函数)68
//1、画出左边的矩形69
g.fill3DRect(x, y, 5, 30, false);70
//2、画出右边的矩形71
g.fill3DRect(x+15, y, 5, 30, false);72
//3、画出中间矩形73
g.fill3DRect(x+5, y+5, 10, 20, false);74
//4、画出中间圆形75
g.fillOval(x+5, y+10, 10, 10);76
//5、画出线(炮筒)77
g.drawLine(x+10, y+15, x+10, y);78
break;79
}80
}81
82
}83
84
//定义坦克类85
class Tank{86
//表示坦克的X横坐标Y纵坐标87
int x=0,y=0;88
89
public Tank(int x,int y){90
this.x=x;91
this.y=y;92
}93
94
public int getX() {95
return x;96
}97
public void setX(int x) {98
this.x = x;99
}100
public int getY() {101
return y;102
}103
public void setY(int y) {104
this.y = y;105
}106
}107
108
//我的坦克109
class Hero extends Tank{110
public Hero(int x,int y){111
super(x,y);112
}113
}