80后,90后的你,是否玩过小时候经典的那个小手游?当魂斗罗的music响起,你是否依然热血沸腾。快来跟我一起用java来写一个自己的魂斗罗游戏吧!

魂斗罗java代码及素材链接:

以下是Java Swing程序的核心代码:

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.image.BufferedImage;

import java.io.IOException;

/**

* @author 徒有琴

* 所有组件通用的方法:

* setBounds(x,y,width,height)

* add方法添加子控件

* remove移除子控件

*/

public class MainFrame {

//JLabel 标签 setIcon(图)可以用来画图

public static JLabel role = new JLabel();

public static JLabel bagMan = null;

//创建背景面板对象

public static BackPanel bg = new BackPanel();

//JLayeredPane 分层的面板,控制元素的深度

public static JLayeredPane pane = new JLayeredPane();

public static void main(String[] args) {

//创建一个JFrame窗体

JFrame frame = new JFrame();

//对窗体进行设置

frame.setSize(800, 723);

frame.setTitle("专治八阿哥的孟老师-QQ 574549426");

bg.init();

role.setIcon(new ImageIcon(MainFrame.class.getResource("/media/R0.png")));

role.setBounds(90, 400, 108, 113);

bg.setBounds(0, 0, frame.getWidth(), frame.getHeight());

pane.add(role, 300);

pane.add(bg, 100);

//开启单独线程

new Thread(new Runnable() {//背包男

@Override

public void run() {

while (true) {

bagMan = new JLabel();

bagMan.setIcon(new ImageIcon(MainFrame.class.getResource("/media/v.gif")));

bagMan.setBounds(1390, 400, 71, 113);

pane.add(bagMan, 200);

pane.moveToFront(bagMan);

try {

int i = 0;

while (i < 1390) {

if (bagMan == null)

break;

bagMan.setBounds(1390 - i, 400, 71, 113);

i += 10;

Thread.sleep(200);

}

if (bagMan != null) {

MainFrame.pane.remove(bagMan);

MainFrame.pane.repaint();

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}).start();

frame.setContentPane(pane);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

//JPanel面板类,用来放置组件的容器

class BackPanel extends JPanel {

String direction = "R";

int pic = 0;

int margin = 0;

int count = 0;

//绘制背景图

@Override

public void paint(Graphics g) {

super.paint(g);

try {

BufferedImage bg = ImageIO.read(this.getClass().getResource("/media/bg.bmp"));

g.drawImage(bg, 0, 0, this.getWidth(), this.getHeight(), margin, 0, margin + 200, 241, this); //将图片的一部分显示在frame上

g.dispose();

} catch (IOException e) {

e.printStackTrace();

}

}

//进行初始化设置

public void init() {

KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();

manager.addKeyEventPostProcessor(new KeyEventPostProcessor() {

public boolean postProcessKeyEvent(KeyEvent e) {

if (e.getID() == KeyEvent.KEY_LAST) {

pic = 0;

if ("u".equals(direction)) {

direction = "R";

MainFrame.role.setBounds(90, 400, 108, 113);

}

MainFrame.role.setIcon(new ImageIcon(this.getClass().getResource("/media/" + direction + "0.png")));

}

if (e.getID() != KeyEvent.KEY_PRESSED || count++ % 2 != 0) {

return true;

}

if (count > 9999) {

count = 0;

}

pic++;

//处理不同的按键事件

switch (e.getKeyCode()) {

case 39://右

direction = "R";

margin++;

break;

case 37://右

direction = "L";

margin--;

if (margin < 0) {

margin = 0;

}

break;

case 32://空格

direction = "u";

if (pic > 3) {

pic = 0;

direction = "R";

MainFrame.role.setIcon(new ImageIcon(this.getClass().getResource("/media/R0.png")));

MainFrame.role.setBounds(90, 400, 108, 113);

return true;

}

MainFrame.role.setIcon(new ImageIcon(this.getClass().getResource("/media/u" + pic + ".png")));

MainFrame.role.setBounds(90, 300, 108, 113);

return true;

case 10://回车

new Thread(new Runnable() {

@Override

public void run() {

JLabel b = new JLabel();

Image image = new ImageIcon(this.getClass().getResource("/media/bullet.png"))

.getImage().getScaledInstance(20, 20,

Image.SCALE_DEFAULT);

b.setIcon(new ImageIcon(image));

b.setBounds(MainFrame.role.getX() + 70, 400, 20, 20);

MainFrame.pane.add(b, 120);//添加子弹

MainFrame.pane.moveToFront(b);//图层靠前

int i = 0;

while (i < 830) {

b.setBounds(b.getX() + 10, 400, 71, 113);

i += 20;

if (MainFrame.bagMan != null) {

if (b.getX() >= MainFrame.bagMan.getX()) {

MainFrame.pane.remove(MainFrame.bagMan);

MainFrame.pane.remove(b);

MainFrame.pane.repaint();

MainFrame.bagMan = null;

break;

}

}

try {

Thread.sleep(80);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

MainFrame.pane.remove(b);

MainFrame.pane.repaint();

}

}).start();

}

if (pic > 7) {

pic = 0;

}

MainFrame.bg.repaint();

MainFrame.role.setIcon(new ImageIcon(this.getClass().getResource("/media/" + direction + pic + ".png")));

return true;

}

});

}

}

java魂斗罗_向经典致敬--跟我用Java写魂斗罗相关推荐

  1. 我的世界基岩版好还是java版好_【Minecraft/我的世界】Java版和基岩版的区别(1)...

    [Minecraft/我的世界]基岩版和Java版的区别 如题,这两版本应该熟悉吧--好吧我还是重新讲一遍 Java版:最老,也是最经典的版本之一,底层代码为notch编写,适用于Windows系统/ ...

  2. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  3. java框架核心技术_你必须掌握的 21 个 Java 核心技术!(干货)

    点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘 ...

  4. java oom分析_作为测试你应该知道的JAVA OOM及定位分析

    上周现网一个内存溢出问题导致应用服务器每隔一小时死一次,遂整理下常见的OMM.发现方法和处理方式,加入Bug预防. 常见的OutOfMemoryError有三种:OutOfMemoryError:Pe ...

  5. java gradle构建_在Gradle中为JPMS构建Java 6-8库

    java gradle构建 通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS ...

  6. java转换为c#_将25k行C#转换为Java的经验教训

    java转换为c# 由于各种原因,我最近完成了一个将复杂的财务应用程序从C#转换为Java的项目. 港口的原因大部分是非技术性的,而是对相关企业的一项战略举措. 这是一次有趣的经历,我在此过程中吸取了 ...

  7. java方法重载_在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  8. java future用法_你必须掌握的 21 个 Java 核心技术

    作者:工程师-搁浅来源:https://www.jb51.net/article/122070.htm 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知 ...

  9. java初学者书籍_面向初学者的5本最佳Java核心书籍

    java初学者书籍 Today I am sharing the best java books to learn java programming. Java is one of the most ...

  10. java hashmap用法_备战金九银十:Java核心技术面试题100+,助你搞定面试官

    一线互联网公司工作了几年,我作为求职者参加了不少面试,也作为面试官面试了很多同学,整理这份面试指南,一方面是帮助大家更好的准备面试,有的放矢,另一方面也是对自己知识框架做一个体系化的梳理. 这篇文章梳 ...

最新文章

  1. [转] MongoDB 入门
  2. JNDI数据源的使用
  3. linux printk 源码,Printk原理简介
  4. 《Go语言圣经》学习笔记 第十一章 测试
  5. java做报表_一步一步使用POI做java报表
  6. django2.1支持的mysql版本_一文解决django 2.2与mysql兼容性问题
  7. Drools集成SpringBoot
  8. matlab 高斯迭代代码_主动降噪与双麦降噪原理与实现前篇——LMS算法的matlab实现...
  9. scrapy_redis项目配置
  10. show interface counter
  11. 服务端开发所需技能归纳
  12. 安装face_recognition(ModuleNotFoundError: No module named 'face_recognition')
  13. c++ 调用com组件步骤
  14. ps学习——基本工具
  15. CocosCreator 子弹运动轨迹的绘制
  16. 关于心理的二十五种倾向(查理·芒格)-1
  17. ssm毕设项目小型超市货物仓储管理系统w8wry(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. java log写入txt文件_使用java.util.logging.Logger时如何在文本文件中写日志
  19. 苹果M1芯片MacBook/iMac/Mac mini降级或者重装系统教程
  20. vim gvim技巧大全

热门文章

  1. 计算机学院表白情书,大学各专业的表白情书!啊,我的少女心要炸了…
  2. c++ vector 用法总结
  3. ODL安装、ODL与mininet连接可视化显示拓扑
  4. 公司小程序,公众号申请支付流程
  5. Win10下Windows徽标键快捷键大全
  6. wireshark使用说明
  7. 行列式的组合定义及其应用--反对称阵的Pfaffian
  8. C语言求23阶行列式,AX=0通解,施密特正交化
  9. 密码破解---John the Ripper使用
  10. 制作简单时钟logo