java实现坦克大战的第二天

昨天写了坦克大战的最初始的页面,预计今天能写好键盘控制一个坦克的基本移动。

方法是:

img1 = Toolkit.getDefaultToolkit().createImage("./img/Tank.jpg");//获得图片
---------------------------------------------------------------------------------------------------
this.addKeyListener(new KeyAdapter() {//t添加键盘监听
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_RIGHT) {//如果是按下了->按键,修改坐标,重绘,起到动态刷新的作用
				by = by + 5;
				;repaint();}
	----------------------------------------------------------------------------------------------
	public void paint(Graphics g) {
		g.drawImage(img1, by, zong,50,50, this);
}

最开始遇到的问题是坦克的掉头问题,因为写出来的坦克很傻,只会傻傻的上下左右动,头直挺挺的对着正前方。然后我搜了一下怎么掉头,大牛们给出的方法都好复杂,就是把我头的看疼的那种。。。然后我实在是搞不定,就自己想了一个笨办法。。。:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
###像这样资源库里放四个ps处理的除了方向不一样其他都一样的Tank。然后调用。。。就会神奇的发现想要的效果就ok了。我不会做GIF,在这里附上代码,可以试着跑一下。

package xyz.jz.tank2;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
public class Sample extends Frame {
 

	private Image img1 = null;
	private Image img2 = null;
	private Image img3 = null;
	private Image img4 = null;
	private Image button = null;
	private int flag = 1;
	int by = 150;
	int zong=30;

 
	public static void main(String[] args) {
		new Sample();
	}
 
	public Sample() {
		this.setSize(803, 603);
		this.setLocation(100,100);
		

		img1 = Toolkit.getDefaultToolkit().createImage("./img/Tank.jpg");
		img2 = Toolkit.getDefaultToolkit().createImage("./img/TankDown.jpg");
		img3 = Toolkit.getDefaultToolkit().createImage("./img/TankLeft.jpg");
		img4 = Toolkit.getDefaultToolkit().createImage("./img/TankRight.jpg");
		button = Toolkit.getDefaultToolkit().createImage("./img/button.jpg");
	
		
		this.addWindowListener(new WindowAdapter() {//时候允许退出
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		this.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
				by = by + 5;
				flag=4;repaint();}
				else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
				by = by -5;
				flag=3;repaint();}
				else if(e.getKeyCode() == KeyEvent.VK_UP) {
				zong = zong-5;
				flag=1;repaint();}
				else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
				zong = zong+5;
				flag=2;repaint();}		
			}
		});
		this.setVisible(true);
	}
 
	public void paint(Graphics g) {
		if(flag==1) {
		g.drawImage(img1, by, zong,50,50, this);
		flag=1;
		}else if(flag==2) {
		g.drawImage(img2, by, zong,50,50, this);flag=1;
		}else if(flag==3) {
		g.drawImage(img3, by, zong,50,50, this);flag=1;
		}else if(flag==4) {
		g.drawImage(img4, by, zong,50,50, this);flag=1;
		}
	}	
}

写到这里坦克大战的第二天就算结束了,下一次的任务是写一个子弹发射的东西,子弹估计肯定是要有自己的线程的,什么时候“初始化”,什么时候死亡?其实今天也有尝试,只是没写好。
而且对于这个库Graphics,还是不会用,第一天提到添加函数有两种方法,第一天的页面用的是标签内嵌。今天就是Graphics的使用了。
诶。。。好难好难

未完待续。。。

发布了29 篇原创文章 · 获赞 1 · 访问量 693

猜你喜欢

转载自blog.csdn.net/weixin_44414413/article/details/101146289