韩顺平老师java学习视频过程中关于坦克大战的问题求解!
rt,在自学java过程当中跟着是韩老师的视频,也是学习到了现在,不过小白基础略差,不会找出到底是哪里的问题,哪位大神能否帮忙指点一二,谢谢了!学习半途,真是好怕这种的搞不过去的,太心烦了!拜托了,谢谢大家!不是请求大神帮忙完善,只请求大神能指出,我哪里的错误导致了这个坦克动不了,谢谢了!,代码如下/*
* 功能:坦克游戏1.0
* 1.画出坦克
* 2.我的坦克可以上下左右移动
*
*/
package com.test01;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class MyTankGame2 extends JFrame {
Mypanel mp = null;
public static void main(String[] args) {
MyTankGame2 mTankGame = new MyTankGame2();
}
// 构造函数
public MyTankGame2() {
mp = new Mypanel();
this.add(mp);
//注册监听
this.addKeyListener(mp);
this.setSize(400, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
// 我的panel
class Mypanel extends Panel implements KeyListener {
// 重写paint函数
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 400, 300);
this.drawTank(hero.getX(), hero.getY(), g, 0, 1);
}
// 定义一个我的坦克
Hero hero = null;
// 构造函数
public Mypanel() {
hero = new Hero(100, 100);
}
// 画出坦克的函数
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:
// 画出我的坦克(到时在封装)
// 1.画出左边的矩形
g.fill3DRect(x, y, 5, 30, false);
// 2.画出右边的矩形
g.fill3DRect(x + 15, y, 5, 30, false);
// 3.画出中间的矩形
g.fill3DRect(x + 5, y + 5, 10, 20, false);
// 4.画出圆形
g.fillOval(x + 5, y + 10, 10, 10);
// 5.画出线
g.drawLine(x + 10, y + 15, x + 10, y);
break;
}
}
public void keyTyped(KeyEvent e) {
}
//键按下处理 a表示向左 s表示向下 d表示向右 w表示向上
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()== KeyEvent.VK_W){
//设置我的坦克的方向
//向上
this.hero.setDirect(0);
this.hero.moveUp();
}else if (e.getKeyCode() == KeyEvent.VK_D) {
//向右
this.hero.setDirect(1);
this.hero.moveRight();
}else if (e.getKeyCode() ==KeyEvent.VK_S) {
// 向下
this.hero.setDirect(2);
this.hero.moveDown();
}else if (e.getKeyCode()==KeyEvent.VK_A) {
//向左
this.hero.setDirect(3);
this.hero.moveLeft();
}
//必须重新绘制Panel
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
// 定义一个坦克类
class Tank {
// 表示坦克的横坐标
int x = 0;
// 坦克的纵坐标
int y = 0;
//坦克方向
// 0 表示上,1表示右,2表示下, 3表示左
int direct=0;
//设置坦克的速度
int speed =5;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
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;
}
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
}
// 我的坦克
class Hero extends Tank {
public Hero(int x, int y) {
super(x, y);
}
//坦克向上移动
public void moveUp(){
y-=speed;
}
//坦克向右移动
public void moveRight(){
x+=speed;
}
//坦克向下移动
public void moveDown(){
y+=speed;
}
//坦克向左移动
public void moveLeft(){
x-=speed;
}
}