首页 > 其他分享 >坦克大战1

坦克大战1

时间:2023-02-14 22:46:13浏览次数:39  
标签:10 KeyEvent int 大战 paint 100 坦克 public

1、 坐标体系 - 介绍

  • 坐标原点位于坐上角,以像素为单位,在Java坐标系中,第一个是x 坐标,表示当前位置为水平方向,距离坐标原点x 个像素;

    第二个是y 坐标,表示当前位置为垂直方向,距离坐标原点y 个像素

2、坐标体系 - 像素

  • 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的,例如,计算机显示器的分辨率是800 x 600,表示

    计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480 000个像素。像素是一个密度单位,

    而厘米是一个长度单位,两者无法比较。

3、绘图原理

  • Component类提供了两个和绘图相关最重要的方法:
    1. paint(Graphics g) 绘制组件的外观
    2. repaint()刷新组件的外观
  • 当组件第一次在屏幕显示的时候,程序会自动的调用paint() 方法来绘制组件
  • 在一下情况paint() 将会被调用:
    1. 窗口最小化,在最大化
    2. 窗口的大小发生变化
    3. repaint 方法 被调用
package com.hspedu.draw;

import javax.swing.*;
import java.awt.*;

/**
 * 显示如何在面板上画圆
 */
@SuppressWarnings({"all"})
public class DrawCircle extends JFrame { //JFrame 对应窗口,可以理解成是一个画框
    //定义一个面板
    private MyPanel mp = null;
    public static void main(String[] args) {
        new DrawCircle();
    }

    public DrawCircle() { //构造器
        //初始化面板
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置一下窗口的大小
        this.setSize(400,300);
        //当点击窗口的小叉,程序完全退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true); //可以显示
    }
}

//1. 先定义一个MyPanel, 继承JPanel 类,画图形,就在面板上画
class MyPanel extends JPanel {

    //1. MyPanel 对象就是一个画板
    //2. Graphics g 把 g 理解成一支画笔
    //3. Graphics 提供了很多绘图的方法
    @Override
    public void paint(Graphics g) { //绘图方法
        super.paint(g); //调用父类的方法完成初始化
        System.out.println("paint 方法被调用");
        //画出一个圆形
        g.drawOval(10,10,100,100);

    }
}

4、Graphics类

  • Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法

    1. 画直线 drawLine(int x1, int y1, int x2, int y2)
    2. 画矩形边框 drawRect(int x, int y, int width, int height)
    3. 画椭圆边框 drawOval(int x, int y, int width, int height)
    4. 填充矩形 fillRect(int x, int y, int width, int height)
    5. 填充椭圆 fillOval(int x, int y, int width, int height)
    6. 画圆片 drawImage(Image img, int x, int y, ..)
      • 需要把图片复制到out 文件夹下的该项目
    7. 画字符串 drawString(String str, int x, int y)
    8. 设置画笔的字体 setFont(Font font)
    9. 设置画笔的颜色 set Color(Color c)
    //演示绘制不同的图形...
    g.drawLine(10,10,100,100);
    g.drawRect(10,10,100,100);
    
    //设置画笔的颜色
    g.setColor(Color.blue);
    g.fillRect(10,10,100,100);
    
    g.setColor(Color.red);
    g.fillOval(10,10,100,100);
    
    //1.获取图片资源 /bg.jpg  表示在该项目的根目录去获取 bg.jpg 图片资源
    Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.jpg"));
    g.drawImage(image,10,10,108,109,this);
    //画字符串
    //给画笔设置颜色和字体
    g.setColor(Color.red);
    g.setFont(new Font("隶书",Font.BOLD,50));
    g.drawString("北京你好",100,100);
    //这里设置的100 , 100  ,是"北京你好"左下角
    

5、演示键盘控制圆球上下左右移动

package com.hspedu.event_;

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

/**
 * 演示键盘控制圆球上下左右移动
 */
public class BallMove extends JFrame{
    MyPanel mp = null;
    public static void main(String[] args) {
        new BallMove();
    }

    public BallMove() {
        mp = new MyPanel();
        this.add(mp);
        this.setSize(400,300);
        //窗口JFrame 对象可以监听键盘事件,即可以监听到面板发生的键盘事件
        this.addKeyListener(mp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

//KeyListener  是监听器,可以监听键盘事件
class MyPanel extends JPanel implements KeyListener {

    //为了让小球可以移动,把他的左上角的坐标设置成变量
    int x = 10;
    int y = 10;

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,20,20);
    }

    //有字符输出时,改方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {

    }

    //当某个键按下,该方法会触发
    @Override
    public void keyPressed(KeyEvent e) {

        //System.out.println((char)e.getKeyCode() + "被按下...");

        //根据用户按下的不同键,来处理小球的移动(上下左右的键)
        //在Java中,会给每一个键,分配一个值(int)
        if(e.getKeyCode() == KeyEvent.VK_DOWN) { //KeyEvent.VK_DOWN 就是向下的箭头对应的code
            y += 10;
        } else if (e.getKeyCode() == KeyEvent.VK_UP) {
            y-= 10;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x-=10;
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x+=10;
        }

        //让面板重绘
        this.repaint();
    }

    //当某个键释放了,该方法会触发
    @Override
    public void keyReleased(KeyEvent e) {

    }
}

6、Java事件处理机制

  • Java事件处理是采取 “委派事件模型” 。当事件发生时,产生事件的对象,会把此 “信息" 传递给 ”事件的监听者“ 处理,这里所说的 ”信息“ 实际上就是 java.awt.event 事件类库里某个类所创建的对象,把它称为 ”事件的对象“。

以上图片来自 韩顺平Java课程

标签:10,KeyEvent,int,大战,paint,100,坦克,public
From: https://www.cnblogs.com/muzhe777/p/17121115.html

相关文章

  • Python飞机大战游戏
    #导入模块顺序:官方标准模块、第三方模块、应用程序模块importrandomimportpygameSCREEN_RECT=pygame.Rect(0,0,480,700)FRAME_PER_SEC=60CREATE_ENEMY_EV......
  • 《植物大战僵尸》 辅助编写5—— 编写wpf游戏辅助
    这里一开始用了Pinvoke.net,后来发现它的WriteProcessMemory接口和win32APi里的WriteProcessMemory不太一样。就抄了一个其他的。internalpartialclassCheatCore......
  • 《植物大战僵尸》 辅助编写4—— 僵尸别动
    想要实现僵尸位置不动,那么需要先找到僵尸对象的地址。上文我们知道了植物血量的偏移以及植物扣血的指令位置。在0052FCF0地址的指令执行时,植物被僵尸咬会扣血,断点断住的......
  • 《植物大战僵尸》 辅助编写3—— 修改植物血量
    从上文我们可以知道,69F2C0地址是植物卡片信息数组的起始地址。这里我尝试修改了土豆的属性,将其变为1。但土豆没有立刻被僵尸吃掉,时间还是和之前的差不多。那么信息应该......
  • 《植物大战僵尸》 辅助编写1——阳光不减
    失败的一次尝试先用CheatEngine扫阳光的地址,然后找到修改该值的代码。一个是捡阳光时增加,一个是种植物减少。这里我们看种植物减少的部分。0041BA76将计算过的阳光......
  • 用Three.js写h5小游戏-3d飞机大战
    用Three.js写h5小游戏-飞机大战​​博主的话​​​​运行图片​​​​目录路径!​​index.html​​博主的话Three.js是js的一个3D引擎,比较复杂。比如光是Three.js就附带了10......
  • Python飞机大战,Pygame入门,源码
    1、pep8语法规范遵循语法规范,可以让我们的代码可读性更好,更容易融入新的开发环境。大多数语法规范可以使用alt+ctrl+L进行格式化但是很多规范还是要靠自己调整2、飞机......
  • Html飞机大战(十八): 模块化+项目开源
    好家伙,好久好久没有更新这个系列了        为了使文档更方便阅读,使代码更容易维护,来把这个飞机大战模块化项目已开源:https://gitee.com/tang-an......
  • 源于魔兽!《植物大战僵尸》成功奥秘
    Popcap公司的《植物大战僵尸》一小游戏大创意令全世界游戏玩家都沉迷于装点自家的绿色花圃,150万的销量用事实告诉我们游戏并不仅仅要依靠华丽的画面,创意与乐趣才是游戏真正......
  • 猫狗大战 数据集 下载
    猫狗大战数据集下载,主要用于学习CNN等网络结构,有问题也可以与我交流,一起学习。 关注公众号:后厂村搬砖工。发送:猫狗大战即可    ......