java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)

刚刚开始学习java,对java不是很熟悉,但是自己的兴趣挺喜欢java。现在自己在自学java做一个小游戏,坦克大战。

自己现在完成了画出自己的坦克和坦克的移动方向。希望各位大神指导一下我这个刚刚学java的新手小白。

我会每完成一个阶段,就更新一下博客,跟进一下自己的学习进度。

在做这个坦克大战的时候,不知道从哪里开始做起,再来自己就觉得先画出自己的坦克吧。

下面是创建坦克类(方便以后能创建更加多的坦克),再创建自己的坦克继承坦克类。

package tankgames;

import java.awt.*;

//创建坦克类

public class tank {

int x,y,w,h;

int speed;

int direct;

color c1,c2,c3;

public tank(){

x=230;

y=300;

w=5;

h=60;

speed=10;

direct=0;

}

public tank(int x, int y, int w, int h, int speed, int direct) {

super();

this.x = x;

this.y = y;

this.w = w;

this.h = h;

this.speed = speed;

this.direct = direct;

}

}

//创建我的坦克子类

class mytank extends tank{

//创建颜色对象,并设置颜色

public mytank(){

this.c1 = new color(128,128,128);

this.c2 = new color(0,255,0);

this.c3 = new color(0,0,255);

}

public mytank(int x, int y, int w, int h, int speed, int direct) {

super(x, y, w, h, speed, direct);

this.c1 = new color(128,128,128);

this.c2 = new color(0,255,0);

this.c3 = new color(0,0,255);

}

}

创建完自己的坦克,要写个主函数来画出自己的坦克,以下是画出自己的坦克:

package tankgames;

import java.awt.*;

import java.awt.event.keyevent;

import java.awt.event.keylistener;

import javax.swing.*;

public class tankgame extends jframe{

private static final long serialversionuid = 1l;

mypanel mp;

public static void main(string[] args) {

new tankgame().setvisible(true);

}

public tankgame(){

this.settitle("坦克大战");

this.setdefaultcloseoperation(jframe.exit_on_close);

this.setresizable(false);

this.setbounds(100, 100, 600, 500);

//创建我的面板对象,并添加到我的窗体里面

mp = new mypanel();

this.getcontentpane().add(mp);

//注册键盘事件监听

this.addkeylistener(mp);

}

}

//创建我的面板子类

class mypanel extends jpanel implements keylistener{

mytank mytank;

private static final long serialversionuid = 1l;

public mypanel(){

this.setlayout(null);

mytank = new mytank();

}

//面板容器的设置和组件在面板容器里显示

public void paint(graphics g){

super.paint(g);

g.setcolor(new color(255,255,221));

g.fill3drect(0, 0, 500, 400, false);

drawtank(mytank,g);

}

//画坦克

public void drawtank(tank t,graphics g){

int x = t.x, y = t.y, w = t.w, h = t.h;

//画出向上的坦克

if(t.direct == 0){

graphics2d g2d = (graphics2d)g;

g.setcolor(t.c1);

g.fill3drect(x, y, w, h, false);

g.fill3drect(x+7*w, y, w, h, false);

g.setcolor(t.c2);

g.fill3drect(x+w, y+2*w, 6*w, 8*w, false);

g.filloval(x+2*w, y+4*w, 4*w, 4*w);

g2d.setcolor(t.c3);

g2d.setstroke(new basicstroke(5.0f));

g2d.drawline(x+4*w, y, x+4*w, y+6*w);

}

//画出向下的坦克

else if(t.direct == 2){

graphics2d g2d = (graphics2d)g;

g.setcolor(t.c1);

g.fill3drect(x, y, w, h, false);

g.fill3drect(x+7*w, y, w, h, false);

g.setcolor(t.c2);

g.fill3drect(x+w, y+2*w, 6*w, 8*w, false);

g.filloval(x+2*w, y+4*w, 4*w, 4*w);

g2d.setcolor(t.c3);

g2d.setstroke(new basicstroke(5.0f));

g2d.drawline(x+4*w, y+6*w, x+4*w, y+12*w);

}

//画出向左的坦克

else if(t.direct == 3){

graphics2d g2d = (graphics2d)g;

g.setcolor(t.c1);

g.fill3drect(x, y, h, w, false);

g.fill3drect(x, y+7*w, h, w, false);

g.setcolor(t.c2);

g.fill3drect(x+2*w, y+w, 8*w, 6*w, false);

g.filloval(x+4*w, y+2*w, 4*w, 4*w);

g2d.setcolor(t.c3);

g2d.setstroke(new basicstroke(5.0f));

g2d.drawline(x, y+4*w, x+6*w, y+4*w);

}

//画出向右的坦克

else if(t.direct ==1){

graphics2d g2d = (graphics2d)g;

g.setcolor(t.c1);

g.fill3drect(x, y, h, w, false);

g.fill3drect(x, y+7*w, h, w, false);

g.setcolor(t.c2);

g.fill3drect(x+2*w, y+w, 8*w, 6*w, false);

g.filloval(x+4*w, y+2*w, 4*w, 4*w);

g2d.setcolor(t.c3);

g2d.setstroke(new basicstroke(5.0f));

g2d.drawline(x+6*w, y+4*w, x+12*w, y+4*w);

}

}

@override

public void keytyped(keyevent e) {

}

//我的坦克移动

@override

public void keypressed(keyevent e) {

//向左移动

if(e.getkeycode() == keyevent.vk_left || e.getkeycode() == keyevent.vk_a){

mytank.x -= mytank.speed;

mytank.direct = 3;

}

//向右移动

else if(e.getkeycode() == keyevent.vk_right || e.getkeycode() == keyevent.vk_d){

mytank.x += mytank.speed;

mytank.direct = 1;

}

//向上移动

else if(e.getkeycode() == keyevent.vk_up || e.getkeycode() == keyevent.vk_w){

mytank.y -= mytank.speed;

mytank.direct =0;

}

//向下移动

else if(e.getkeycode() == keyevent.vk_down || e.getkeycode() == keyevent.vk_s){

mytank.y += mytank.speed;

mytank.direct = 2;

}

//关闭游戏

else if(e.getkeycode() == keyevent.vk_escape){

system.exit(0);

}

//刷新图形

this.repaint();

}

@override

public void keyreleased(keyevent e) {

}

}

89dfea3f85842550a27f77bd87465ace.png

我画自己的坦克只是计算好位置,画出图形。

再来自己到最后,有一个疑惑,自己不懂。

坦克每次改变方向移动时,能不能有更加方便的方法来封装上面画图形时自己手动改变位置?若画其他坦克,是不是还要自己手动改变坦克的位置?这里自己觉得处理不是很好,现在还在想怎么能更加完美,更加方便。

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...

TimerTimer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务的代码要放人TimerTask的子类中,因为TimerTask是一个抽象类。而且要重写其run方法 因为这是一个抽象方法.常见问题任务执行完了, 但进程并没有销毁,通过源码查看构造方…

scala java抽象理解_Scala之类、特质和抽象类

1. 类1.1. 类的定义类的定义://定义Point类,构造器带有两个参数class Point(var x: Int, var y: Int) {//无返回值的类方法def move(dx: Int, dy: Int): Unit {x x dxy y dy}//没有参数但是返回值为String类型的重写方法override def toString: Str…

centos eclipse java_CentOS7 安装 Eclipse

咳咳, 虽然大神的 Linux 都是命令行的, 但是谁让 LZ 是 LJ, 桌面开俩终端不觉得更好么。。。CentOS7 安装 Eclipse, 比在 Window 系统下安装 Eclipse 要复杂得多。。参考 : https://segmentfault.com/a/11900000026517…

iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式

1. 客户端直接verify苹果的receipt 如果verify成功 自行发放商品2. 客户端将receipt传给server,由server进行验证并发放商品按照安全性原则, 客户端的所有信息都是不可信的,而且支付是业务中的核心模块,所以应该选择第二种。下面简要介绍下,第二种方式的简单流程。1. 客户端支付…

java opencv orb_opencv python ORB算法

理论ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分&#…

php中define的参数_php中define的用法有哪些

php中define的用法:1、【define()】函数定义一个常量;2、定义常量名称及值,代码为【define(name,value,case_insensitive)】;3、定义一个大小写敏感的常量。php中define的用法:1、define()函数理解1define()函数定义一…

php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例

php手册中关于此函数的介绍。php is_file 判断是否为文件的代码is_file() 函数检查指定的文件名是否是正常的文件。is_file — Tells whether the filename is a regular file用法bool is_file ( string $filename ) $file 为必选参数如果文件存在且为正常的文件则返回 TRUE。例…

php 登陆微博,PHP调用微博接口实现微博登录的方法示例

在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。1、首…

php计算结果排序,php-按从数组计算出的值对数组进行排序

我从阵列中的数据库中获得了用户的经纬度我有我的经纬现在,我要计算距离并使用该距离对数据库中的用户进行排序$mylat $_SESSION[lat];$mylng $_SESSION[lng];$statement $pdo->prepare("SELECT * FROM users");$statement->execute();$users $statement-&…

php获取音频的时长,PHP编程获取音频文件时长的方法【基于getid3类】

本文实例讲述了PHP编程获取音频文件时长的方法。分享给大家供大家参考,具体如下:问题:昨天在新增论坛功能的时候,移动端显示音频文件需要知道是多长的音频;具体解决方案如下:首先就是数据库中增加保存音频文…

php strlen ctf,CTF中的PHP反序列化漏洞简单分析

[PHP] 纯文本查看 复制代码<?php class start_gg{public $mod1;public $mod2;public function __construct() #把$mod1赋值为Call类对象{$this->mod1 new Call();}public function __destruct(){$this->mod1->test1();}}class Call{public $mod1;…

2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析

2017年蔬菜行情整体特点一、菜价走势前期低迷&#xff0c;后期逐渐回升&#xff1a;1.2017年1&#xff5e;10月的蔬菜平均价处于近3年同期的最低点&#xff1b;2.1&#xff5e;5月菜价创近5年同期最低。南方产区的实心菜花、散菜花、西兰花、团生菜、白萝卜、大白菜&#xff0c…

php毕设,php毕设

于不要钱&#xff01;这里值得提一句&#xff0c;必须是通过牛客网链接新注册的华为云账号&#xff0c;并且要实名认证&#xff0c;24岁以下自动会认定学生身份&#xff0c;这样才可以参加本次活动正好毕设的项目要用到云服务器&#xff0c;这个活动出现的太及时了&#xff0c;…

java实现layui静态表格分页,layui——数据表格分页实例

layui实现数据表格table分页功能&#xff0c;异步加载&#xff0c;表格渲染。总体流程&#xff1a;layui的数据表格设置分页参数开启可以从请求中看到如下图&#xff0c;所以我们需要在后端控制器接收分页数据page和limit进行操作&#xff0c;下面直接上代码分页链接框架&#…

php去掉数字前的符号,php导出excel如何处理使得表格数字值前面的0不被去掉

“首先&#xff0c;我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时&#xff0c;我们想让客户端程序(浏览器)以excel的格式读取它&#xff0c;所以把mime类型设为&#xff1a;application/vnd.ms-excel&#xff0c;当excel读取文件时会以每个cell的格…

php繁体输出,PHP输出控制功能在简繁体转换中的应用

概要&#xff1a;本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例一 PHP 输出控制功能介绍PHP作为当今流行的脚本语言之一&#xff0c;具有编写简便&#xff0c;执行速度快&#xff0c;扩充性好等优点。PHP的输出信息控制函数可以让你控…

php专家预约系统设计,基于ThinkPHP框架的IT服务预约系统的设计与实现

2014 年 11 月 中国高等教育学会教育信息化分会第十二次学术年会论文集 1 文章编号&#xff1a;1000-5641(2014)00— 基于ThinkPHP 框架的IT 服务预约系统的设计 与实现 何秀全 (上海外国语大学信息技术中心&#xff0c;上海 200083) 摘要&#xff1a;一些高校 IT 部门需要提供…

mysql多列 groupby,MySQL多表查询之GroupBy

需求&#xff1a;根据主键id查询到该顾客最近的一次消费记录SQL代码如下&#xff1a;SELECTcbi.id,cbi.mob,cbi.identity_card,bcil.remark,bcil.orders_no,bcil.brand_no,bcil.with_date,bcil.scoreFROMcustomer_base_info cbiLEFT JOIN(SELECTA.customer_id,A.with_date,A.re…

java j2ssh替代jsch,jsch设置ssh协商算法优先级

最近接触jsch这个包&#xff0c;发现在默认情况下&#xff0c;jsch登录ssh的时候&#xff0c;协商的加密算法和mac算法都不是最高优先级的&#xff0c;这个时候需要手动配置一下算法列表&#xff0c;将强度高的调整在算法列表的前面&#xff0c;这样ssh链接的时候&#xff0c;如…

php验证码图片乱码,php ,验证码图片,乱码

找不出哪里出错了&#xff0c;但是预览时就是会出现一大堆乱码回复讨论(解决方案)乱码是浏览器显示了字符而不是图片么&#xff1f;关闭浏览器重新访问这个地址试试。如果还不行&#xff0c;应该是header的问题。图片输出&#xff0c;最好用UTF-8字符集&#xff0c;因为有可能会…