用的是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()方法来绘制组件
/**
* 功能:java绘图原理
*/
import java.awt.*;
import javax.swing.*;
public class Window013 extends JFrame{
//定义组件
MyPanel mp=null;
public static void main(String[] args) {
Window013 th=new Window013();
}
public Window013 (){
//创建组件
mp=new MyPanel();
//加入组件
this.add(mp);
//设置窗体
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
class MyPanel extends JPanel{
//重写(覆盖)JPanel的paint方法
public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔
//1、调用父类函数,完成初始化任务
super.paint(g);//super.paint(g);这句话不能少
System.out.println("Paint被调用");//用于测试绘图原理2paint调用
//先画一个圆
g.drawOval(10, 10, 30, 30);//drawOval方法是画圆
}
}
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绘图类的使用方法
import java.awt.*;
import javax.swing.*;
public class Window014 extends JFrame{
//定义组件
MyPanel1 mp=null;
public static void main(String[] args) {
Window014 th=new Window014();
}
//构造函数
public Window014(){
//构建组件
mp=new MyPanel1();
//加入组件
this.add(mp);
//设置窗体
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
class MyPanel1 extends JPanel{
//重写(覆盖)JPanel的paint方法
public void paint(Graphics g){//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);
}
}
xxxxxxxxxx
41
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:(画出一个坦克)
/**
* 功能:坦克游戏的1.0
* 1、画出坦克
*/
import java.awt.*;
import javax.swing.*;
public class MyTank01 extends JFrame{
//定义组件
MyPanel mp=null;
public static void main(String[] args) {
MyTank01 mt=new MyTank01();
}
//构造函数
public MyTank01(){
//构建组件
mp=new MyPanel();
//加入组件
this.add(mp);
//设置JFrame窗体
this.setTitle("坦克大战");//JFrame标题
this.setSize(400, 300);//JFrame窗体大小
this.setLocationRelativeTo(null);//在屏幕中心显示
this.setVisible(true);//显示
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame
}
}
//我的面板Panel
class MyPanel extends JPanel{
//定义一个我的坦克
Hero hero=null;
//构造函数
public MyPanel(){
hero=new Hero(10,10);//我的坦克初始位置
}
//重写paint函数
public void paint(Graphics g){
super.paint(g);//调用父类paint方法
//设置Panel底色
g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域
//调用坦克
this.drawTank(hero.getX(), hero.getY(), g, 0, 1);
}
//画出坦克的函数
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);
//2、画出右边的矩形
g.fill3DRect(x+15, y, 5, 30, false);
//3、画出中间矩形
g.fill3DRect(x+5, y+5, 10, 20, false);
//4、画出中间圆形
g.fillOval(x+5, y+10, 10, 10);
//5、画出线(炮筒)
g.drawLine(x+10, y+15, x+10, y);
break;
}
}
}
//定义坦克类
class Tank{
//表示坦克的X横坐标Y纵坐标
int x=0,y=0;
public Tank(int x,int y){
this.x=x;
this.y=y;
}
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;
}
}
//我的坦克
class Hero extends Tank{
public Hero(int x,int y){
super(x,y);
}
}
x
1
/**
2
* 功能:坦克游戏的1.0
3
* 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);//退出并关闭JFrame
27
28
}
29
}
30
31
//我的面板Panel
32
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
}
原文地址:https://www.cnblogs.com/xuxaut-558/p/10045702.html