位置: IT常识 - 正文

day01-GUI坦克大战01

编辑:rootadmin
JavaGUI-坦克大战 1.Java绘图坐标体系 坐标体系介绍:下图说明了一个Java坐标体系。坐标原点位于左上角,以像素为单位。在Java坐标体系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素: 绘 ... JavaGUI-坦克大战1.Java绘图坐标体系坐标体系介绍:下图说明了一个Java坐标体系。坐标原点位于左上角,以像素为单位。在Java坐标体系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。

推荐整理分享day01-GUI坦克大战01,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

坐标体系-像素:绘图还必须要搞清一个非常重要的概念-像素 一个像素等于多少厘米?计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如:计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480 000个像素。像素是一个密度单位,而厘米是一个长度单位,两者无法比较。2.绘图入门和机制

绘图原理:

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

思考:如何证明上面的三种情况会调用paint()方法?

例子1:画出一个圆形

package li.gui;import javax.swing.*;import java.awt.*;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); //当点击窗口的小x时,程序完全退出 this.setDefaultCloseOperation(JFrame.DISPOSE_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(0, 0, 100, 100); }}

在以下情况paint()将会被调用:

窗口最小化,再最大化窗口的大小发生变化repaint方法被调用

思考:如何证明上面的三种情况会调用paint()方法?

运行上面的程序,可以看到命令行窗口打印出“paint方法被调用~“的字样。

这时,点击绘制圆形图案窗口的最小化按钮,可以看到命令行窗口又打印了一行paint方法被调用的字样:

拖动打印圆形图案的窗口,调整其大小,可以看到命令行窗口一直显示paint方法被调用:

repaint方法被调用在后面证明。

3.绘图方法

Graphics类:

Graphics类可以理解就是画笔,为我们提供了各种绘制图形的方法[参考JDK帮助文档]

画直线 drawLine(int x1, int y1, int x2, int y2);

在该图形上下文的坐标系中的点 (x1, y1)和 (x2, y2)之间绘制一条使用当前颜色的线

画矩形边框 drawRect(int x, int y, int width, int height)

绘制指定矩形的轮廓, 矩形的左右边缘为x和x + width 。 顶部和底部边缘为y和y + height

day01-GUI坦克大战01

画椭圆边框drawOval(int x, int y, int width, int height)

x,y为要绘制的椭圆的左上角的坐标,width为椭圆的宽度,height为椭圆的高度

填充矩形 fillRect(int x, int y, int width, int height)

填写指定的矩形。 矩形的左右边缘为x和x + width - 1 。 顶部和底部边缘在y和y + height - 1

填充椭圆fillOval(int x, int y, int width, int height)

用当前颜色填充由指定矩形界定的椭圆。x,y为要填充的椭圆的左上角的坐标,width为要填充椭圆的宽度,height为填充椭圆的高度

画图片drawImage(Image img,int x,int y, ...)

绘制当前可用的指定图像的大小。 该图像在其图形上下文的坐标空间中的左上角( x,y)处绘制。 图像中的透明像素不会影响已经存在的任何像素

画字符串drawString(String str,int x,int y)

使用该图形上下文的当前字体和颜色绘制由指定字符串给出的文本。 最左边角色的基线是在这个图形上下文的坐标系中的位置( x,y)

设置画笔的字体setFont(Font font)

将此图形上下文的字体设置为指定的字体。 使用此图形上下文的所有后续文本操作都使用此字体。 空参数被默认忽略

设置画笔的颜色setColor(Color c)

将此图形上下文的当前颜色设置为指定的颜色, 使用此图形上下文的所有后续图形操作都使用此指定颜色

例子:演示具体用法

package li.gui;import javax.swing.*;import java.awt.*;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); //当点击窗口的小x时,程序完全退出 this.setDefaultCloseOperation(JFrame.DISPOSE_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(0, 0, 100, 100); //演示绘制不同的图形 // 1. 画直线 drawLine(int x1, int y1, int x2, int y2); //g.drawLine(10,10,100,100); // 2. 画矩形边框 drawRect(int x, int y, int width, int height) //g.drawRect(10,10,100,100) ; // 3. 画椭圆边框 drawOval(int x, int y, int width, int height) //g.drawOval(10, 10, 100, 80); // 4. 填充矩形 fillRect(int x, int y, int width, int height) //先设置画笔的颜色 //g.setColor(Color.blue); //g.fillRect(10,10,100,100); // 5. 填充椭圆 fillOval(int x, int y, int width, int height) //g.setColor(Color.red); //g.fillOval(10,10,100,80); // 6. 画图片 drawImage(Image img,int x,int y, ...) //首先获取图片资源 //注意图片要放到out目录的项目的根目录下 //Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png")); //g.drawImage(image,10,10,186,282,this); // 7. 画字符串 drawString(String str,int x,int y) //先设置字体颜色 g.setColor(Color.green); g.setFont(new Font("隶书",Font.BOLD,50)); g.drawString("闪电五连鞭",100,100); // 8. 设置画笔的字体 setFont(Font font) // 9. 设置画笔的颜色 setColor(Color c) }}4.绘制坦克游戏区域4.1坦克坐标设计

Tank类

package li.TankGame.VersionFirst;/** * @author 李 * @version 1.0 */public class Tank { private int x;//坦克的横坐标 private int y;//坦克的纵坐标 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; }}

Hero类

package li.TankGame.VersionFirst;/** * @author 李 * @version 1.0 */public class Hero extends Tank{ public Hero(int x, int y) { super(x, y); }}

MyPanel类

package li.TankGame.VersionFirst;import javax.swing.*;import java.awt.*;/** * @author 李 * @version 1.0 * 坦克大战的绘图区域 */public class MyPanel extends JPanel { //定义我的坦克 Hero hero = null; public MyPanel() { hero = new Hero(100, 100);//初始化自己的坦克 } @Override public void paint(Graphics g) { super.paint(g); g.fillRect(0, 0, 700, 550);//填充矩形,默认为黑色 //画出坦克-封装方法 drawTank(hero.getX(),hero.getY(),g,0,0); } /** 编写方法,画出坦克 * @param x 坦克的左上角横坐标 * @param 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-5,x+20,y+30);//画出炮管 break; default: System.out.println("暂时没有处理"); } }}

TankGame01类(主方法)

package li.TankGame.VersionFirst;import javax.swing.*;/** * @author 李 * @version 1.0 */public class TankGame01 extends JFrame { //定义一个MyPanel MyPanel mp = null; public static void main(String[] args) { TankGame01 tankGame01 = new TankGame01(); } public TankGame01(){ mp = new MyPanel(); this.add(mp);//把面板(就是游戏的绘图区域)添加进来 this.setSize(700,550);//设置大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击窗口的叉时停止运行 this.setVisible(true);//设置显示 }}

绘图练习:画出如下图形

1.蛤蟆

2.王八

3.小老鼠

本文链接地址:https://www.jiuchutong.com/zhishi/304586.html 转载请保留说明!

上一篇:帝国cms友情链接系统教程(帝国cms对接小程序)

下一篇:vue大型电商项目尚品汇(后台终结篇)day06 重磅!!!(vue大型项目撑得住吗)

  • 腾讯视频怎么绑定手机号码(腾讯视频怎么绑定别人的vip)

    腾讯视频怎么绑定手机号码(腾讯视频怎么绑定别人的vip)

  • oppo手机怎么投屏投到电视(oppo手机怎么投屏到电脑)

    oppo手机怎么投屏投到电视(oppo手机怎么投屏到电脑)

  • 手机不记录步数怎么回事(手机不显示记步)

    手机不记录步数怎么回事(手机不显示记步)

  • 电脑出现蓝屏是什么原因(电脑出现蓝屏是什么情况,怎么修复才能好)

    电脑出现蓝屏是什么原因(电脑出现蓝屏是什么情况,怎么修复才能好)

  • 电脑重装系统不小心关机了(电脑重装系统不停重启)

    电脑重装系统不小心关机了(电脑重装系统不停重启)

  • 荣耀play4tpro上市时间(荣耀play4tpro发售价格)

    荣耀play4tpro上市时间(荣耀play4tpro发售价格)

  • jpeg是什么的编码标准(Jpeg是什么的编码标准)

    jpeg是什么的编码标准(Jpeg是什么的编码标准)

  • 荣耀20支持双击亮屏吗(荣耀20支持双击吗)

    荣耀20支持双击亮屏吗(荣耀20支持双击吗)

  • 电信卡停机保号多久手机号码会被注销(电信卡停机保号后怎么样才能再开机)

    电信卡停机保号多久手机号码会被注销(电信卡停机保号后怎么样才能再开机)

  • 微信退出登录微信运动还有步数吗(微信退出登录微信运动还有吗)

    微信退出登录微信运动还有步数吗(微信退出登录微信运动还有吗)

  • 照片贴纸怎么弄(能在图片上叠加图片的软件)

    照片贴纸怎么弄(能在图片上叠加图片的软件)

  • ios12和11哪个更流畅(苹果11和12系统对比)

    ios12和11哪个更流畅(苹果11和12系统对比)

  • 钉钉直播的人能看到观众吗(钉钉直播的人能看到学生回放吗)

    钉钉直播的人能看到观众吗(钉钉直播的人能看到学生回放吗)

  • word的页边距可以通过什么设置(word中的页边距)

    word的页边距可以通过什么设置(word中的页边距)

  • 电脑13.3寸是多少厘米(13.3寸电脑是多少cm)

    电脑13.3寸是多少厘米(13.3寸电脑是多少cm)

  • 移动和联通的卡能同时在一个手机上用吗(移动和联通的卡哪个信号好)

    移动和联通的卡能同时在一个手机上用吗(移动和联通的卡哪个信号好)

  • 手机如何禁止下载软件(手机如何禁止下载王者荣耀)

    手机如何禁止下载软件(手机如何禁止下载王者荣耀)

  • 6S摄像头下发热的原因(6s摄像头发热是怎么回事)

    6S摄像头下发热的原因(6s摄像头发热是怎么回事)

  • 苹果11双微信吗(苹果11用双微信)

    苹果11双微信吗(苹果11用双微信)

  • 抖音手机号不用了怎么登录(抖音手机号不用了怎么改密码)

    抖音手机号不用了怎么登录(抖音手机号不用了怎么改密码)

  • oppo手机接电话时黑屏如何设置(oppo手机接电话按键怎么设置)

    oppo手机接电话时黑屏如何设置(oppo手机接电话按键怎么设置)

  • 手机的组成部分(手机的组成部分ppt)

    手机的组成部分(手机的组成部分ppt)

  • 小米手环屏幕解锁(小米手环屏幕解锁有什么用)

    小米手环屏幕解锁(小米手环屏幕解锁有什么用)

  • 无法登录无线路由器设置页面(无法登陆wifi怎么登陆路由器)

    无法登录无线路由器设置页面(无法登陆wifi怎么登陆路由器)

  • python如何删除字符串的特殊字符(python如何删除字典中的键值对)

    python如何删除字符串的特殊字符(python如何删除字典中的键值对)

  • 递延所得税负债账务处理
  • 农产品减免税政策最新
  • 车船使用税会打折么
  • 递延所得税资产和递延所得税负债
  • 供应商属于应收账款吗
  • 其他现代服务业能开哪些税目
  • 部分红冲的发票,剩余未冲红部分可以再红冲么
  • 材料采购合同要盖章吗
  • 公司注销留抵税额税法规定
  • 交车辆购置税可以刷信用卡吗
  • 收到厂家返利如何做账
  • 发票认证费用
  • 去年多计提费用,汇算清缴时做纳税调增处理
  • 民办幼儿园所得税优惠政策
  • 股权转让怎么缴纳个人所得税
  • 企业转租房屋如何开票
  • 去年亏损今年第一季度盈利
  • 收款收据怎么写 样本
  • synchost.exe - synchost是什么进程 有什么作用
  • 电脑怎么搜索文档
  • 返利是冲减收入吗
  • 标准差怎么算 例题
  • 福利费如何做会计分录
  • php get post
  • 交易性金融资产的入账价值
  • 所有者权益类的期末余额公式
  • 集团关联企业间关联交易对账单
  • 详解php中的序列是什么
  • 高通芯片开发
  • 主动学习(Active Learning,AL)的理解以及代码流程讲解
  • vue环境搭建的几种方法
  • 招待费超出部分的分录
  • 其他权益工具投资公允价值变动怎么计算
  • 旅行社专票开票内容的规定
  • 增值税纳税申报表怎么填
  • 公司申报是每月一次吗
  • 主营业务冲减怎么做账
  • mongodb createindex
  • sql存储过程几个主要步骤
  • 施工企业的内部往来
  • 出口退税率为0要补增值税吗
  • 出口退税抵减应纳税额
  • 没有购销合同的原因有哪些
  • 现金流量表财务报表
  • 出口货物的报关时间为货物运抵海关
  • 无偿调入资产如何做账
  • 培训学校收入如何确认
  • 税法的个人所得税
  • 偶然所得代扣代缴个人所得税会计分录
  • 职工福利费相关文件有哪些
  • 销售折扣可以开红字专票吗
  • 职工教育经费超过扣除限额的时候调增还是调减
  • 上个月多计提的费用怎么调整
  • 以前年度少计提的工资怎么处理
  • 收购股权如何做分录
  • 暂估成本以后也没有票回来了
  • 出售无形资产取得的收入计入什么科目
  • k3凭证模板
  • 纳税人的住房租金专项
  • 合同资产相当于以前什么会计科目
  • 企业的培训费用
  • 税收返还如何做账
  • windows xp系
  • windows2003企业版sp2密钥
  • 卡巴斯基key
  • sybase ase数据库用户名密码
  • linux查看指定内容
  • w10怎么usb连接上网
  • js判断手机号
  • node session
  • android开发最全教程
  • 功能强大的英语
  • javascript 拖拽
  • 安卓微信自带聊天背景图片高清
  • 澳门国际金融税务局
  • 一般纳税人业务招待费可以抵扣吗
  • 超豪华小汽车需要在什么环节纳税
  • 国税局政审审考生什么
  • 马尼拉清关HS几位
  • 广西汽车下乡补贴申请攻略?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设