1.基本环境的搭建

Main.class

import java.awt.*;

// 主运行类
public class Main
{
    public static void main(String[] args) throws Exception
    {
        TankFrame tankFrame = new TankFrame();
        tankFrame.setVisible(true);
        while (true)
        {
            Thread.sleep(25);
            tankFrame.repaint();
        }
    }

}

TankFrame.class

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

// 图形框架类
public class TankFrame extends Frame
{
    private Tank tank;

    public TankFrame()
    {
        this.setTitle("tank war");
        this.setLocation(300,300);
        this.setSize(800,600);
        this.addKeyListener(new TankKeyListener());
        tank = new Tank(100,100,Direction.R);
    }

    // 画图方法
    @Override
    public void paint(Graphics g)
    {
        tank.paint(g);
    }

    // 键盘事件
    private class TankKeyListener extends KeyAdapter
    {
        @Override
        public void keyPressed(KeyEvent e)
        {
            tank.keyPressed(e);
            System.out.println(e);
        }

        @Override
        public void keyReleased(KeyEvent e)
        {
            tank.keyReleased(e);
            System.out.println(e);
        }
    }
}

Tank.class

import java.awt.*;
import java.awt.event.KeyEvent;

public class Tank
{
    private int x = 10; // 初始横坐标
    private int y = 10; // 初始纵坐标
    private boolean bGoing; // 是否在跑动中
    private Direction dir; // 初始炮口方向
    private boolean bL,bR,bU,bD; // 控制上下左右方向
    public static final int SPEED = 5; // 移动速度

    public Tank(int x, int y, Direction dir)
    {
        this.x = x;
        this.y = y;
        this.dir = dir;
    }

    public void paint(Graphics g)
    {
        g.fillRect(x,y,50,50);
        if (bGoing)
        {
            System.out.println("gongingasdfasfasdf");
            move();
        }
    }

    public void keyPressed(KeyEvent e)
    {
        int key = e.getKeyCode();
        switch (key)
        {
            case KeyEvent.VK_LEFT:
                bL = true;
                break;
            case KeyEvent.VK_RIGHT:
                bR = true;
                break;
            case KeyEvent.VK_UP:
                bU = true;
                break;
            case KeyEvent.VK_DOWN:
                bD = true;
                break;
        }
        setMainDir();
    }

    private void setMainDir()
    {
        if(!bL && !bR && !bU && !bD)
        {
            bGoing = false;
        }
        else
        {
            bGoing = true;
        }
        if(bL && !bR && !bU && !bD)
        {
            dir = Direction.L;
        }
        if(!bL && bR && !bU && !bD)
        {
            dir = Direction.R;
        }
        if(!bL && !bR && bU && !bD)
        {
            dir = Direction.U;
        }
        if(!bL && !bR && !bU && bD)
        {
            dir = Direction.D;
        }
    }

    // 坦克移动方法
    private void move()
    {
        switch (dir)
        {
            case L:
                x -= SPEED;
                break;
            case R:
                x += SPEED;
                break;
            case U:
                y -= SPEED;
                break;
            case D:
                y += SPEED;
                break;
        }
    }

    public void keyReleased(KeyEvent e)
    {
        int key = e.getKeyCode();
        switch (key)
        {
            case KeyEvent.VK_LEFT:
                bL = false;
                break;
            case KeyEvent.VK_RIGHT:
                bR = false;
                break;
            case KeyEvent.VK_UP:
                bU = false;
                break;
            case KeyEvent.VK_DOWN:
                bD = false;
                break;
        }
        setMainDir();
    }
}

Direction.class

// 方向枚举类
public enum Direction
{
    // 上下左右
    U,D,L,R
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值