当前位置: 首页 > article >正文

坦克大战第一阶段代码

package tanke.game;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

//为了监听键盘事件,实现keylistener
public class mypanel extends JPanel implements KeyListener {
    mytanke mytanke = null;
//定义敌人坦克放入到vector集合中
    Vector<enemytank>  enemytanks=new Vector<>();
    int enemytanksize=3;
    public mypanel() {
        mytanke = new mytanke(100, 100);
        //c初始化敌人坦克
        for(int i=0;i<enemytanksize;i++){
               enemytank enemytank1= new enemytank(100*(i+1),0);
               enemytank1.setDirect(2);
            enemytanks.add(enemytank1);

        }
        mytanke.setSpeed(2);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0, 0, 1000, 750);//填充矩形默认是黑色
        //画出坦克-方封装方法

        drawtank(mytanke.getX(), mytanke.getY(), g, mytanke.getDirect(), 1);
        //画出敌人坦克,遍历vector
        for(int i=0;i<enemytanksize;i++){//取出坦克
            enemytank enemytank=enemytanks.get(i);
            drawtank(enemytank.getX(),enemytank.getY(),g,enemytank.getDirect(),0);
        }
    }


    //x坦克坐标左上角,g是画笔,direct坦克方向,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;
        }//接下来根据坦克方向绘制坦克
        //direct表示方向(0;向上,1;向右 2;向下 3;向左
        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;
            case 1://向右
                g.fill3DRect(x, y, 60, 10, false);//画出坦克左边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆
                g.drawLine(x + 30, y + 20, x + 60, y + 20);//画出炮筒直线
                break;
            case 2://向下
                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 + 60);//画出炮筒直线
                break;
            case 3://向左
                g.fill3DRect(x, y, 60, 10, false);//画出坦克左边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克右边轮子
                g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
                g.fillOval(x + 20, y + 10, 20, 20);//画出圆
                g.drawLine(x + 30, y + 20, x, y + 20);//画出炮筒直线
                break;


            default:
                System.out.println("暂时没有处理");
        }


    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W) {
            mytanke.setDirect(0);
            mytanke.moveup();
        } else if (e.getKeyCode() == KeyEvent.VK_D){
            mytanke.setDirect(1);
            mytanke.moveright();
        }else if (e.getKeyCode()==KeyEvent.VK_A){
            mytanke.setDirect(3);
            mytanke.moveleft();
        }else if (e.getKeyCode()==KeyEvent.VK_S){
mytanke.setDirect(2);
mytanke.movedown();
        }
        this.repaint();

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }
}


http://www.kler.cn/a/9512.html

相关文章:

  • WordPress 6.7 “Rollins”发布
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 鸿蒙next版开发:ArkTS组件点击事件详解
  • MoneyPrinterTurbo – 开源的AI短视频生成工具
  • 学术论文写作丨机器学习与深度学习
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • 电子学会2023年3月青少年软件编程python等级考试试卷(一级)真题,含答案解析
  • 6、springboot快速使用
  • USB在虚拟机中不显示以及没有访问权限
  • C程序设计-小学生计算机教学辅助系统(四则运算)
  • 磁盘移臂调度算法
  • 【Bug解决】AttributeError: ‘DataParallel‘ object has no attribute ‘XXX‘
  • 【store商城项目08】删除用户的收获地址
  • 建龙转债上市价格预测 - 配了38张道氏,希望不要乱跌
  • unity--半圆包围posiotion
  • springboot+jwt令牌简单登录案例
  • 【校招VIP】南邮的计算机研究生面试,竟然说开发岗只是增删改查,而且项目QPS并发量数量过于吓人
  • Spring Security 6 的权限授权验证失败
  • node开通阿里云短信验证服务,代码演示 超级详细
  • 浅谈全局视角下的设计模式
  • VIM 编辑器使用教程
  • CMake入门教程【基础篇】4.target_include_directories包含指定文件夹头文件
  • 基于5G技术的智能导航机器人及AR巡逻应用开发项目实施方案(上)
  • linux 集群时间同步
  • 前端动态路由(前端控制全部路由,用户角色由后端返回)
  • 使用Docker快速创建一个Jenkins服务