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);//初始化自己坦克}@Overridepublic 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 {//定义MyPanelMyPanel 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);//初始化自己坦克}@Overridepublic 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("其他暂时不做处理");}}
}
这样我们一个基础的坦克就完成了,后续章节进入进一步的完善