package com.zb_study.tankgame4;
import com.zb_study.tankgame3.Shot;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
public class MyPanel extends JPanel implements KeyListener, Runnable {
Hero hero = null;
Vector<EnemyTank> enemyTanks = new Vector<>();
Vector<Bomb> bombs = new Vector<>();
int enemyTankSize = 3;
Image image1 = null;
Image image2 = null;
Image image3 = null;
public MyPanel() {
hero = new Hero(100, 100);
hero.setSpeed(1);
for (int i = 0; i < enemyTankSize; i++) {
EnemyTank enemyTank = new EnemyTank((100 * (i + 1)), 0);
enemyTank.setDirect(2);
new Thread(enemyTank).start();
Shot shot = new Shot(enemyTank.getX() + 20, enemyTank.getY() + 60, enemyTank.getDirect());
enemyTank.shots.add(shot);
new Thread(shot).start();
enemyTanks.add(enemyTank);
}
image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_1.gif"));
image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_2.gif"));
image3 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_3.gif"));
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 1000, 750);
//画出坦克
drawTank(hero.getX(), hero.getY(), g, hero.getDirect(), 1);
if (hero.shot != null && hero.shot.isLive == true) {
g.draw3DRect(hero.shot.x, hero.shot.y, 1, 1, false);
}
for (int i = 0; i < bombs.size(); i++) {
Bomb bomb = bombs.get(i);
if(bomb.life > 6) {
g.drawImage(image1, bomb.x, bomb.y, 60, 60, this);
} else if (bomb.life >3 ) {
g.drawImage(image2, bomb.x, bomb.y, 60, 60, this);
} else {
g.drawImage(image3, bomb.x, bomb.y, 60, 60, this);
}
bomb.lifeDown();
if(bomb.life == 0) {
bombs.remove(bomb);
}
}
for (int i = 0; i < enemyTankSize; i++) {
EnemyTank enemyTank = enemyTanks.get(i);
if(enemyTank.isLive) {
drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirect(), 0);
for (int j = 0; j < enemyTank.shots.size(); j++) {
Shot shot = enemyTank.shots.get(j);
if (shot.isLive) {
g.draw3DRect(shot.x, shot.y, 1, 1, false);
} else {
enemyTank.shots.remove(shot);
}
}
}
}
}
//编写方法,画出坦克
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:
g.fill3DRect(x, y, 10, 60, false);
g.fill3DRect(x + 30, y, 10, 60, false);
g.fill3DRect(x + 10, y + 10, 20, 40, false);
g.fillOval(x + 10, y + 20, 20, 20);
g.drawLine(x + 20, y + 30, x + 20, y);
break;
case 1:
g.fill3DRect(x, y, 60, 10, false);
g.fill3DRect(x, y + 30, 60, 10, false);
g.fill3DRect(x + 10, y + 10, 40, 20, false);
g.fillOval(x + 20, y + 10, 20, 20);
g.drawLine(x + 30, y + 20, x + 60, y + 20);
break;
case 2:
g.fill3DRect(x, y, 10, 60, false);
g.fill3DRect(x + 30, y, 10, 60, false);
g.fill3DRect(x + 10, y + 10, 20, 40, false);
g.fillOval(x + 10, y + 20, 20, 20);
g.drawLine(x + 20, y + 30, x + 20, y + 60);
break;
case 3:
g.fill3DRect(x, y, 60, 10, false);
g.fill3DRect(x, y + 30, 60, 10, false);
g.fill3DRect(x + 10, y + 10, 40, 20, false);
g.fillOval(x + 20, y + 10, 20, 20);
g.drawLine(x + 30, y + 20, x, y + 20);
break;
default:
System.out.println("暂时没有处理...");
}
}
public void hitTank(com.zb_study.tankgame4.Shot s, EnemyTank enemyTank) {
switch (enemyTank.getDirect()) {
case 0:
case 2:
if (s.x > enemyTank.getX() && s.x < enemyTank.getX() + 40
&& s.y > enemyTank.getY() && s.y < enemyTank.getY() + 60) {
s.isLive = false;
enemyTank.isLive = false;
//enemyTanks.remove(enemyTank);
Bomb bomb = new Bomb(enemyTank.getX(), enemyTank.getY());
bombs.add(bomb);
}
break;
case 1:
case 3:
if (s.x > enemyTank.getX() && s.x < enemyTank.getX() + 60
&& s.y > enemyTank.getY() && s.y < enemyTank.getY() + 40) {
s.isLive = false;
enemyTank.isLive = false;
Bomb bomb = new Bomb(enemyTank.getX(), enemyTank.getY());
bombs.add(bomb);
}
break;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
hero.setDirect(0);
if(hero.getY()>0) {
hero.moveUp();
}
} else if (e.getKeyCode() == KeyEvent.VK_D) {
hero.setDirect(1);
if(hero.getX()+60<1000) {
hero.moveRight();
}
} else if (e.getKeyCode() == KeyEvent.VK_S) {
hero.setDirect(2);
if(hero.getY()+60<750) {
hero.moveDown();
}
} else if (e.getKeyCode() == KeyEvent.VK_A) {
hero.setDirect(3);
if(hero.getX()>0) {
hero.moveLeft();
}
}
if (e.getKeyCode() == KeyEvent.VK_J) {
System.out.println("用户按下了J");
hero.shotEnemyTank();
}
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(hero.shot !=null && hero.shot.isLive) {
for (int i = 0; i < enemyTanks.size(); i++) {
EnemyTank enemyTank = enemyTanks.get(i);
hitTank(hero.shot, enemyTank);
}
}
this.repaint();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java java java.zip
共406个文件
class:186个
java:154个
xml:30个
需积分: 5 0 下载量 156 浏览量
2023-06-16
16:23:19
上传
评论
收藏 27.74MB ZIP 举报
温馨提示
java java java.zip
资源推荐
资源详情
资源评论
收起资源包目录
java java java.zip (406个子文件)
MyPanel.class 6KB
HouseView.class 6KB
MyPanel.class 4KB
SmallChangeSysOOP.class 3KB
MyPanel.class 3KB
Utility.class 3KB
SmallChangeSys.class 3KB
GenericExercise.class 2KB
Homework03Server.class 2KB
homework03.class 2KB
DAO.class 2KB
homework03.class 2KB
Homework03Client.class 2KB
Homework01Server.class 2KB
SocketTCP02Server.class 2KB
FileInputStream_.class 2KB
SocketTCP02Client.class 2KB
FileReader_.class 2KB
teacher.class 2KB
House.class 2KB
Account.class 2KB
Homework01Client.class 2KB
homework07.class 2KB
SocketTCP01Server.class 2KB
Color.class 2KB
TCPFileUploadServer.class 2KB
Exercise.class 2KB
SocketTCP01Client.class 2KB
BufferedCopy.class 2KB
MyDate.class 2KB
HouseService.class 2KB
homework.class 2KB
homework02.class 2KB
Doctor.class 2KB
ListExercise.class 2KB
Car.class 2KB
homework01.class 2KB
ObjectInputStream_.class 2KB
FileCreate.class 2KB
TCPFileUploadClient.class 2KB
homework01.class 2KB
Week.class 2KB
EnemyTank.class 2KB
Person.class 2KB
FileCopy.class 2KB
homework01.class 2KB
Employee.class 2KB
StreamUtils.class 2KB
StreamUtils.class 2KB
Homework02ReceiverA.class 2KB
PolyParameter.class 2KB
Exercise.class 2KB
UDPReceiverA.class 1KB
Teacher.class 1KB
MyPanel.class 1KB
Homework02SenderB.class 1KB
FileOutputStream01.class 1KB
API_.class 1KB
Exercise$1.class 1KB
Student.class 1KB
UDPSenderB.class 1KB
Emp.class 1KB
Teacher.class 1KB
Tank.class 1KB
Tank.class 1KB
Tank.class 1KB
Shot.class 1KB
Exercise.class 1KB
TryCatchExercise.class 1KB
Shot.class 1KB
Person.class 1KB
Book.class 1KB
User.class 1KB
Computer.class 1KB
Person.class 1KB
Properties01.class 1KB
ThreadMethod01.class 1KB
ObjectOutStream_.class 1KB
A.class 1KB
LinkedHashSetExercise.class 1KB
Homework01.class 1KB
ThreadMethodExercise.class 1KB
homework02.class 1KB
Properties02.class 1KB
ThreadMethod02.class 1KB
Person.class 1KB
Dog.class 1KB
Scientist.class 1KB
homework03.class 1KB
Manager.class 1KB
FileWriter_.class 1KB
PC.class 1KB
homework02.class 1KB
Dog.class 1KB
Student.class 1KB
MyPanel.class 1KB
homework.class 1KB
Book.class 1KB
T.class 1KB
T.class 1KB
共 406 条
- 1
- 2
- 3
- 4
- 5
资源评论
YOLO数据集工作室
- 粉丝: 475
- 资源: 1568
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功