刚刚开始学习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) {
}
}
我画自己的坦克只是计算好位置,画出图形。
再来自己到最后,有一个疑惑,自己不懂。
坦克每次改变方向移动时,能不能有更加方便的方法来封装上面画图形时自己手动改变位置?若画其他坦克,是不是还要自己手动改变坦克的位置?这里自己觉得处理不是很好,现在还在想怎么能更加完美,更加方便。
希望与广大网友互动??
点此进行留言吧!