为什么选择这个项目?
1.好玩,有趣
2.涉及到java基础的各个方面的技术:
面向对象思想、多线程、IO、绘图技术、监听事件、数据库、界面编程
3.巩固旧的知识
一:准备工作
黑色框为JFrame 红色框为JPanel ,由于JFrame不提供画图方法,所以我们只能在JPanel里画图,最后把JPanel放到JFrame中。
paintComponent(g)在以下情况被调用:
1.窗口最小化,再最大化
2.窗口的大小发生变化
3.repaint函数被调用
public void paintComponent(Graphics g){
// 调用父类(套路)函数 完成初始化任务 这句话不能少
super.paintComponent(g);
g.drawOval(10, 10,30, 30);
坦克类:
- //坦克父类 可以设置坦克出现位置(x,y)
- class Tank {
- int x = 0;
- int 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);
- }
- }
面板:
/*
* drawTank (坦克坐标x,y,画笔g,方向,坦克类型)
* 方法介绍:
* 可以设置-->坦克的颜色(类型:敌方坦克,我方坦克),方向,出现的坐标
*
* 如果type是default 则默认颜色为画出黑色坦克
*
* 封装性:将坦克封装到方法中。
*
*/
- //画图
- @SuppressWarnings("serial")
- class MyPanel extends JPanel{
- Hero hero = null;
- public MyPanel(){
- hero = new Hero(10,10);//设置坦克出现的位置(10,10)
- }
- public void paintComponent(Graphics g){
- super.paintComponent(g);
- g.fillRect(0, 0, 400, 300);//背景填充
- drawTank(hero.getX(),hero.getY(),g,0,0);//一定要传入画笔g
- g.setColor(Color.yellow);
- }
- /*
- * drawTank (坦克坐标x,y,画笔g,方向,坦克类型)
- * 方法介绍:
- * 可以设置-->坦克的颜色(类型:敌方坦克,我方坦克),方向,出现的坐标
- *
- * 如果type是default 则默认颜色为画出黑色坦克
- *
- * 封装性:将坦克封装到方法中。
- *
- */
- 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);
- default:
- break;
- }
- switch (direct) {
- case 0:
- //向上
- g.fill3DRect(x , y , 5 , 30, false);
- g.fill3DRect(x+15, y , 5 , 30, false);
- g.fill3DRect(x+5 , y+5 , 10, 20, false);
- g.fillOval(x+4, y+10, 10 , 10);
- g.drawLine(x+9, y+15, x+9, y );
- break;
- default:
- break;
- }
- }
- }
主函数:
- /**
- * 功能:坦克游戏的1.0
- * 1.画出坦克
- */
- package com.test1;
- import java.awt.Color;
- import java.awt.Graphics;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- @SuppressWarnings("serial")
- public class MyTankGame1 extends JFrame{
- MyPanel p1 = new MyPanel();
- public MyTankGame1(){
- add(p1);
- setSize(400, 300);
- setVisible(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public static void main(String[] args) {
- new MyTankGame1();
- }
- }