Java 坦克大战 小游戏

  • twilight__
    了解作者
  • Java
    开发工具
  • 134.3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 0
    下载次数
  • 2022-06-26 12:36
    上传日期
Java实训小项目,适合实训时间短写不出来的宝子们
BattleCity.zip
内容介绍
package cn.com.scitc.tank; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Random; /** * 主界面类*/ public class GamePanel extends JFrame { //防止屏幕闪烁的过渡界面 Image offScreemImage = null; //设置窗口长宽 int width = 800; int height = 800; //分数 public int score = 0; //选择界面的小坦克 Image select = Toolkit.getDefaultToolkit().getImage("Image/1pright.png"); //选择界面小坦克的初始位置 int y = 150; //游戏模式的选择 1单人模式,2双人模式,3游戏暂停,4游戏胜利,5游戏失败 int state = 0; int tempstate = 0; //游戏暂停; boolean star = false; //玩家1,2 PlayerOne playerOne = new PlayerOne("Image/1pup.png",240,730,this,"Image/1pup.png","Image/1pleft.png","Image/1pright.png","Image/1pdown.png"); PlayerTwo playerTwo = new PlayerTwo("Image/2pup.gif",480,730,this,"Image/2pup.gif","Image/2pleft.gif","Image/2pright.gif","Image/2pdown.gif"); //子弹列表 ArrayList<Bullet> bulletArrayList = new ArrayList<>(); //敌人列表 ArrayList<Foe> foeArrayList = new ArrayList<>(); //要删除的元素 ArrayList<Bullet> delArrayList = new ArrayList<>(); //玩家列表 ArrayList<Tank> tankArrayList = new ArrayList<>(); //墙的列表 ArrayList<Brick> brickArrayList = new ArrayList<>(); //基地列表 ArrayList<Base> baseArrayList = new ArrayList<>(); //爆炸列表 ArrayList<Blast> blastArrayList = new ArrayList<>(); //铁块列表 ArrayList<Iron> ironArrayList = new ArrayList<>(); //草丛列表 ArrayList<Grass> grassArrayList = new ArrayList<>(); //敌人数量 int foeCount = 0; // boolean foeCD = true; int count = 0; //窗口的启动方法 public void launch(){ //标题 setTitle("坦克大战"); //设置宽高 setSize(width, height); //设置屏幕居中 setLocationRelativeTo(null); //添加关闭事件 setDefaultCloseOperation(3); //设置用户不能调整大小 setResizable(false); //使得窗口可见 setVisible(true); //添加键盘监听事件 this.addKeyListener(new GamePanel.KeyMonitor()); //添加地图 Plat plat = new Plat(this); brickArrayList = plat.bricks; grassArrayList = plat.grasses; ironArrayList = plat.irons; // brickArrayList.add(new Brick("Image/brick.gif",300,730,this)); // brickArrayList.add(new Brick("Image/brick.gif",300,670,this)); // brickArrayList.add(new Brick("Image/brick.gif",360,670,this)); // brickArrayList.add(new Brick("Image/brick.gif",420,670,this)); // brickArrayList.add(new Brick("Image/brick.gif",420,730,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,60,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,120,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,360,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,480,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,540,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,600,this)); // brickArrayList.add(new Brick("Image/brick.gif",60,660,this)); // brickArrayList.add(new Brick("Image/brick.gif",120,360,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,180,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,240,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,360,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,540,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,600,this)); // brickArrayList.add(new Brick("Image/brick.gif",180,720,this)); //添加基地 baseArrayList.add(new Base("Image/Base.gif", 360, 730, this)); // grassArrayList.add(new Grass("Image/grass.gif",0,240,this)); // grassArrayList.add(new Grass("Image/grass.gif",0,300,this)); // grassArrayList.add(new Grass("Image/grass.gif",60,300,this)); // ironArrayList.add(new Iron("Image/iron.gif",0,480,this)); //重绘 while(true){ repaint(); //如果我方坦克为零,游戏处于单人模式或双人模式,游戏失败,或我方基地背摧毁,游戏失败 if ((tankArrayList.size() == 0 && (state == 1 || state == 2)) || baseArrayList.size() == 0){ state = 5; } //消灭二十个敌人,游戏胜利 if(score > 20){ state = 4; } //仅当游戏处于单人模式或双人模式时才添加敌方坦克,暂停则不继续生成敌方坦克 if(state == 1 || state == 2){ //这里规定每重绘100次,生成一辆敌方坦克并且敌方坦克大于三十时不再继续生成敌方坦克 if(count % 100 == 1 && foeCount < 30){ //这个随机数是坦克生成位置的横坐标 Random random = new Random(); int foeX = random.nextInt(740); if(foeX > 150 && foeX < 240) foeX = 350; foeArrayList.add(new Foe("Image/FoeD.png",foeX,30,this,"Image/FoeU.png","Image/FoeL.png","Image/FoeR.png","Image/FoeD.png")); //记录敌方坦克的数量 foeCount++; // new FoeCD().start(); } } try { //线程休眠二十五毫秒 Thread.sleep(25); } catch (Exception e) { e.printStackTrace(); } } } // class FoeCD extends Thread{ // public void run(){ // foeCD = false; // try { // Thread.sleep(10000); // } catch (Exception e) { // e.printStackTrace(); // } // foeCD = true; // this.stop(); // } // } @Override public void paint(Graphics graphics){ // System.out.println(bulletArrayList.size()); if(offScreemImage == null){ offScreemImage = this.createImage(width, height); } Graphics gImage = offScreemImage.getGraphics(); //设置背景色为黑色 gImage.setColor(Color.black); //填充区域为整个画布 gImage.fillRect(0,0,width,height); gImage.setColor(Color.blue); //改变文字的大小和样式 gImage.setFont(new Font("黑体",Font.BOLD, 50)); if(state == 0){ //绘制文字 gImage.drawString("游戏模式",300,100); gImage.drawString("单人模式",300,200); gImage.drawString("双人模式",300,300); gImage.drawString("q,e选择游戏模式,enter确定",100,500); //绘制选择器 gImage.drawImage(select,240,y,null); }else if(state == 1 || state == 2){ // gImage.setColor(Color.pink); // gImage.setFont(new Font("仿宋",Font.BOLD,30)); // gImage.drawString("分数:",30,80); // gImage.drawString(String.valueOf(score),110,80); if (state == 1){ gImage.setColor(Color.red); gImage.setFont(new Font("仿宋",Font.BOLD,20)); gImage.drawString("wasd控制方向,按下J射击",30,720); }else{ gImage.setColor(Color.red); gImage.setFont(new Font("仿宋",Font.BOLD,20)); gImage.dr
评论
    相关推荐
    • Java
      Java 对于Java练习
    • java
      Java Java基础
    • Java
      Java 我创建的Java项目
    • JAVA教程
      一本非常不错的清华大学java教程,讲解非常详细,看了就知道。
    • Java Cipher
      Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码
    • javabank
      Java银行 Java com的模拟操作将在bancárias上发布! 要求:Java 8。
    • java 李兴华
      java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java 李兴华 java ...
    • Java204
      支持中文,支持动态注释的超强Java语言反编译器。 注意:Java204的工作目录中不能包含中文字符!! 支持现有所有Java环境产生的Class代码,而最重要的是它生成的源代码可读性极好,又充分考虑了国人的Java编码习惯,...
    • java程序
      java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点java程序-吃点点
    • Java
      Java 2021/02/19 .java Main.java 学生.java Bmi.java 。班级 Bmi类 主类 MyBmi.class 学生班 学生样本类 2021/02/20 .java DeleteFile.java WriteFile.java MyDataPrint.java 。班级 DeleteFile.class ...