/**
* 功能:坦克游戏6.0(代码优化)
* 1.画出坦克.
* 2.我的坦克可以上下左右移动
* 3.可以发射子弹,子弹可以连发(最多7颗)
* 4.当我的子弹击中敌人坦克时,敌人坦克消失(爆炸效果)
* 5.我被击中时,显示爆炸效果
* 6.防止敌人坦克重叠运动
* 6.1 决定把判断是否重叠运动的方法写到EnemyTank类
* 7.可以分关
* 7.1 做一个开始的Panel,它是一个空
* 7.2 闪烁效果
* 8.可以记录玩家的成绩
* 8.1 用文件流
* 8.2 单写一个记录类,完成对玩家的记录
* 8.3 先完成保存共击毁了多少辆敌人坦克的功能
* 8.4 存盘退出游戏,可以记录当时敌人的坦克坐标,并可以恢复
* 9.再次优化
* 9.1 EnemyTank之isTouchOther方法
* 9.2 hero边界问题
*/
package com.qiu10;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.io.*;
public class MyTankGame10 extends JFrame implements ActionListener,Runnable{
MyPanel mp=null;
//定义一个开始面板
MyStarPanel msp=null;
//作出我需要的菜单
JMenuBar jmb=null;
//开始游戏
JMenu jm1=null;
JMenuItem jmi1=null;
//退出系统
JMenuItem jmi2=null;
//存盘退出
JMenuItem jmi3=null;
//续上局
JMenuItem jmi4=null;
//下一关
JMenuItem jmi5=null;
int bz1=0,bz2=0;
int getAllHit=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
MyTankGame10 mtg=new MyTankGame10();
Thread t=new Thread(mtg);
t.start();
}
//构造方法
public MyTankGame10()
{
//创建菜单及菜单远项
jmb=new JMenuBar();
jm1=new JMenu("游戏(G)");
//设置快捷方式
jm1.setMnemonic('G');
jmi1=new JMenuItem("新游戏");
jmi2=new JMenuItem("退出游戏");
jmi3=new JMenuItem("存盘退出");
jmi4=new JMenuItem("继续上局");
jmi5=new JMenuItem("下一关");
jmi1.addActionListener(this);
jmi1.setActionCommand("new");
jmi2.addActionListener(this);
jmi2.setActionCommand("exit");
jmi3.addActionListener(this);
jmi3.setActionCommand("saveExit");
jmi4.addActionListener(this);
jmi4.setActionCommand("continue");
jmi5.addActionListener(this);
jmi5.setActionCommand("next");
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
jm1.add(jmi4);
jm1.add(jmi5);
jmb.add(jm1);
msp=new MyStarPanel();
Thread t=new Thread(msp);
t.start();
this.setJMenuBar(jmb);
this.add(msp);
this.setSize(600,450);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//创建过关面板
public void addPast()
{
this.getAllHit=Recorder.getAllEnNum();
this.remove(mp);
MyStarPanel.guan++;
MyStarPanel.bz=0;
msp=new MyStarPanel();
Thread t=new Thread(msp);
t.start();
this.add(msp);
this.setVisible(true);
}
//创建死亡面板
public void addDie()
{
this.remove(mp);
// MyStarPanel.guan++;
MyStarPanel.bz=1;
msp=new MyStarPanel();
Thread t=new Thread(msp);
t.start();
this.add(msp);
this.setVisible(true);
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//对用户不同的点击做相应的处理
if(arg0.getActionCommand().equals("new"))
{
//创建战场面板
mp=new MyPanel("newGame");
MyStarPanel.guan=1;
Recorder.setMyLife(3);
Recorder.setEnNum(20);
this.bz1=0;
this.bz2=0;
MyStarPanel.bz=0;
Shot.speed=2;
EnemyTank.speed=1;
//启动mp线程
Thread t=new Thread(mp);
t.start();
//先删除旧的开始面板
this.remove(msp);
this.add(mp);
//注册监听
this.addKeyListener(mp);
//显示 刷新JFrame
this.setVisible(true);
}else if(arg0.getActionCommand().equals("exit"))
{
//用户点击退出系统菜单
//保存击毁敌人数量
Recorder.keepRecord();
System.exit(0);
}else if(arg0.getActionCommand().equals("saveExit"))
{
//保存敌人坦克坐标和击毁敌人的数量
Recorder.setEts(mp.ets);
Recorder.keepRecAndEnemy();
System.exit(0);
}else if(arg0.getActionCommand().equals("continue"))
{
//创建战场面板
mp=new MyPanel("continue");
this.bz1=0;
this.bz2=0;
Shot.speed=2;
EnemyTank.speed=1;
//启动mp线程
Thread t=new Thread(mp);
t.start();
//先删除旧的开始面板
this.remove(msp);
this.add(mp);
//注册监听
this.addKeyListener(mp);
//显示 刷新JFrame
this.setVisible(true);
}else if(arg0.getActionCommand().equals("next"))
{
//创建战场面板
mp=new MyPanel("newGame");
//Recorder.setMyLife(3);
Recorder.setAllEnNum(this.getAllHit);
Recorder.setEnNum(20);//20+10*(MyStarPanel.guan-1)
this.bz1=0;
this.bz2=0;
MyStarPanel.bz=0;
Shot.speed++;
EnemyTank.speed++;
//启动mp线程
Thread t=new Thread(mp);
t.start();
//先删除旧的开始面板
this.remove(msp);
this.add(mp);
//注册监听
this.addKeyListener(mp);
//显示 刷新JFrame
this.setVisible(true);
}
}
public void run() {
// TODO Auto-generated method stub
while(true)
{
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
if(this.bz1==0){
if(Recorder.getEnNum()==0)
{
this.bz1++;
this.addPast();
}
}
if(this.bz2==0){
if(Recorder.getMyLife()==0)
{
this.bz2++;
this.addDie();
}
}
}
}
}
//就是一个提示作用
class MyStarPanel extends JPanel implements Runnable
{
int times=0;
static int guan=1;
static int bz=0;
public void paint(Graphics g)
{
super.paint(g);
g.fillRect(0,0,400,300);
if(times%2==0)
{
//提示信息
g.setColor(Color.yellow);
Font myfont=new Font("华文行楷",Font.BOLD,30);
g.setFont(myfont);
if(bz==0)
{
g.drawString("stage: "+guan,150,150);
}else{
g.drawString("英雄败北",150,150);
}
}
}
public void run() {
// TODO Auto-generated method stub
while(true)
{
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
times++;
//重绘
this.repaint();
}
}
}
//我的面板
class MyPanel extends JPanel implements KeyListener,Runnable
{
//定义一个我的坦克
Hero hero=null;
//定义敌人的坦克组
Vector<EnemyTank> ets=new Vector<EnemyTank>();
Vector<Node> nodes=new Vector<Node>();
//定义炸弹类集合
Vector<Bomb> bombs=new Vector<Bomb>();
int ensize=4;
//定义三张图片,三张图片才能组成一颗炸弹(爆炸效果)
Image image1=null;
Image image2=null;
Image image3=null;
//构造方法
public MyPanel(String flag)
{
//恢复记录
Recorder.getRecord();
hero=new Hero(200,250);
//初始化敌人的坦克
if(flag.equals("newGame"))
{
for(int i=0;i<ensize;i++)
{
//创建敌人坦克
EnemyTank et=new EnemyTank((i+1)*50,30);
et.setColor(0);
et.setDirect(2);
//将MyPanel的敌人坦克向量交给该敌人坦克
et.setEts(ets);
//启动敌人坦克
Thread t=new Thread(et);
t.start();
//给敌人坦克添加一颗子弹
Shot s=new Shot(et.x,et.y+15,2);
//加入给敌人坦克
et.ss.add(s);
Thread t2=new Thread(s);
t2.start();
//加入
ets.add(et);
}
}else if(flag.equals("continue"))
{
this.nodes=Recorder.getNode();
for(int i=0;i<nodes.size();i++)
{
Node node=nodes.get(i);
//创建敌人坦克
EnemyTank et=new EnemyTank(node.x,node.y);
et.setColor(0);
et.setDirect(node.direct);
//将MyPanel的敌人坦克向量交给该敌人坦克
et.setEts(ets);
//启动敌人坦克
Thread t=new Thread(et);
t.start();
//给敌人坦克添加一颗子弹
Shot s=new Shot(et.x,et.y+15,2);
//加入给敌人坦克
et.ss.add(s);
Thread t2=new Thread(s);
t2.start();
//加入
ets.add(et);
}
}
//初始化三张图片
try {
image1=ImageIO.read(new File("bomb1.gif"));
image2=ImageIO.read(new File("bomb2.gif"));
image3=Ima
java_tankgame.rar_java tankgame
版权申诉
157 浏览量
2022-09-23
00:03:22
上传
评论
收藏 29KB RAR 举报
四散
- 粉丝: 51
- 资源: 1万+
最新资源
- python开心麻花影视作品分析程序+源码.zip
- pythonExcel数据分析师程序+源码.zip
- PlatformUI.jar 支持RCP控件环境插件
- VB+ACCESS大型机房学生上机管理系统(源代码+系统).zip
- 基于BP神经网络的回归分析,基于优化动量因子的BP神经网络,基于优化学习率的BP神经网络,基于优化隐藏层神经元的bp神经网络
- python读取excel数据Python-file-reading-master.zip
- STC15单片机串口2使用程序例子
- 读取日志的excel生成周报 用python3开发weekplan-master.zip
- python 读取excel数据导入dbimport-data-master.zip
- K折交叉验证BP神经网络,多输入多输出BP神经网络(代码完整,数据齐全)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0