02. 坦克大战项目-准备工作和绘制坦克
01. 准备工作
1. 首先我们要创建四个类
1. Tank类
介绍:Tank 类主要用来表示坦克的基本属性和行为
public class Tank {
private int x;//坦克的横坐标
private int 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;
}
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
}
2. Hero类
介绍:Hero 类:
继承自 Tank
类,表示游戏中的主角坦克。
通过 super(x, y)
调用父类构造方法,初始化主角坦克的位置。
public class Hero extends Tank{
public Hero(int x, int y) {
super(x, y);
}
}
3. MyPanel类
介绍:MyPanel类:
继承自 JPanel
,用于绘制游戏的绘图区域。
包含一个名为 hero
的 Hero
对象,表示游戏中的主角坦克。
在构造方法中初始化主角坦克的位置。
重写了 paint
方法,用于绘制游戏区域。当前代码中只是填充了一个黑色矩形,表示游戏区域。
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel {
//定义我的坦克
Hero hero = null;
public MyPanel() {
hero = new Hero(100, 100);//初始化自己坦克
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 1000, 750);//填充矩形,默认黑色
}
}
4. YzjTankGame01类
介绍:YzjTankGame01 类:
继承自 JFrame
,表示游戏的主窗口。
包含一个名为 mp
的 MyPanel
对象,用于绘制游戏的绘图区域。
在构造方法中初始化 MyPanel
对象,并将其添加到主窗口中。设置了主窗口的大小、关闭操作,并显示主窗口。
import javax.swing.*;
public class YzjTankGame01 extends JFrame {
//定义MyPanel
MyPanel mp = null;
public static void main(String[] args) {
YzjTankGame01 yzjTankGame01 = new YzjTankGame01();
}
public YzjTankGame01() {
mp = new MyPanel();
this.add(mp);//把面板(就是游戏的绘图区域)
this.setSize(1000, 750);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
02. 绘制坦克
1. 思路
- 对于坦克的绘制首先我们要有一个思路
- 采用两个相同的矩形作为坦克侧面,一个矩形和一个圆和一条线作为坦克的主体
2.开始绘制
package com.yzjedu.tankgame;
import javax.swing.*;
import java.awt.*;
/**
* 4.0 坦克大战的绘图区域
**/
public class MyPanel extends JPanel {
//定义我的坦克
Hero hero = null;
public MyPanel() {
hero = new Hero(100, 100);//初始化自己坦克
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 1000, 750);//填充矩形,默认黑色
//画出坦克-封装方法
drawTank(hero.getX(), hero.getY(), g, 0, 0);
}
//编写方法,画出坦克
/**
*
* @param x 坦克的左上角x坐标
* @param y 坦克的左上角y坐标
* @param g 画笔
* @param direct 坦克方向,上下左右
* @param type 坦克类型
*/
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: //表示向上
g.fill3DRect(x, y, 10, 60, false);//画出坦克左边的轮子
g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边的轮子
g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克主体
g.fillOval(x + 10, y + 20, 20,20);//画出坦克盖子
g.drawLine(x + 20, y + 30, x + 20, y);
break;
default:
System.out.println("其他暂时不做处理");
}
}
}
这样我们一个基础的坦克就完成了,后续章节进入进一步的完善