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方法 因为这是一个抽象方法.常见问题任务执行完了, 但进程并没有销毁,通过源码查看构造方…

centos eclipse java_CentOS7 安装 Eclipse

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

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调用微博接口实现微博登录的方法示例

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

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

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

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

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

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

需求:根据主键id查询到该顾客最近的一次消费记录SQL代码如下: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这个包,发现在默认情况下,jsch登录ssh的时候,协商的加密算法和mac算法都不是最高优先级的,这个时候需要手动配置一下算法列表,将强度高的调整在算法列表的前面,这样ssh链接的时候,如…

java 截取汉字首字母,java 取汉字首字母

有时候,可能会有一些类似这样的需求:对于这样的效果,我们可以有类似这样的解决方案:package bys.utils;import java.io.UnsupportedEncodingException;/*** Created by toutou on 2014/2/21*/public class ChineseCharacterHelper…

linux操作系统网络,网络安装linux操作系统

网络安装安装的准备首先配仓库然后需要安装的服务Yun y install tftp-serverYum y install dhcp开始实验配仓库安装tfpt包并进行配置Tftp-server dhcp tftp后,会在/var/lib/tftpboot这个文件,这个文件是作为linux安装的引导文件,将/mnt/isoli…

Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器。往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件。像我这样一个Linux菜逼,这种要求不是赶鸭子上架嘛…

linux创建文件内容三行,shell之创建文件及内容的方法示例

shell之创建文件夹:[rootvbox-nginx shell_command]# vi ./mkdir.sh#!/bin/shparentDir"/media/sf_Project/self/smarty-frame/application/$1"fileName$2dirAndName$parentDir/$fileNameif [ ! -d "$dirAndName" ];thenmkdir $dirAndNameecho …

linux设备模型的主要功能,Linux设备模型(3)

Linux设备模型(3)_Uevent作者:蜗蜗 发布于:2014-3-10 20:39分类:统一设备模型1. Uevent的功能Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到…

lua_path环境变量设置linux,ubuntu16.04安装lua环境

1.官网下载源码 https://www.lua.org/download.htmlcurl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gztar zxf lua-5.3.5.tar.gzcd lua-5.3.5make linux test2.安装中报错lua.c:82:31: fatal error: readline/readline.h: 没有那个文件或目录compilation terminated.: recip…

皮尔洛和c罗讲什么语言,皮尔洛:如果我跟C罗是队友 我可能能成历史助攻王

皮尔洛:欧冠夺冠热门不包含皇马腾讯体育11月2日讯 近日皮尔洛在接受媒体采访时表示,本赛季欧冠的争夺将会十分激烈,除了尤文外,有四支球队也是欧冠桂冠有利的争夺者,但并不包括卫冕冠军皇马。另外皮尔洛还表示&#xf…

android 调用系统短信接口开发,聚合数据Android SDK 短信api接口验证演示示例

1.到libs聚合SDK是聚合数据平台,为移动开发者提供的免费数据接口.使用前请先到聚合平台(http://www.juhe.cn/)注册,申请相关数据.2.下载聚合数据SDK,将开发包里的smscaptcha_sdk_v_1_1.jar拷贝到libs根目录下,将libJuheSDK_v_1_0.so拷贝到libs\armeabi目录下,如图:3…

代码混淆android.mk,利用ollvm进行代码混淆

OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。OLLVM是基于LLVM实现的,LLVM是一个编译器框架,它也采用经典的三段…

鸿蒙系统的适配国产手机,真正的好消息!其它国产机,也在适配华为鸿蒙系统...

众所周知,据华为消费者业务软件部总裁王成录的说法,今年6月初,华为手机就能全面升级鸿蒙2.0,迟到近两年的、真正的“一夜之间就可以替换掉安卓”。而近日,又传出了真正的好消息,那就是其它国产手机厂商&…

三星s4 android 6.0吗,快了 三星手机适配Android 6.0时间公布

快了 三星手机适配Android 6.0时间公布2016年01月26日 00:04作者:董岩编辑:董岩文章出处:泡泡网原创分享作为全球范围内无可争议的安卓手机巨头之一,三星在为其旗下手机适配安卓新系统方面历来算是相当上心的一个厂家。日前就已经…