Java小游戏——是男人就坚持20秒

给大家分享一个小游戏,这是一个Swing项目,先用代码画界面板,然后依次添加飞机、子弹、计时器等:




代码如下:
/** 程序的主窗体*/
public class FrmMain extends JFrame {/** 初始的一些全局变量 1是否存活 2方向 3子弹数量 4飞机*/// 1是否存活public static boolean isRun = true;// 2方向public static boolean right, left, up, down;// 3子弹数量public static int num = 30;// 4飞机private JLabel plane;public FrmMain() {isRun=true;// 设置大小setSize(400, 600);// 设置居中setLocationRelativeTo(null);// 设置点关闭时,程序退出setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 得到内容面板final Container c = getContentPane();c.setBackground(Color.BLACK);// 设置标题setTitle("是男人就坚持20秒");// 设置绝对定位c.setLayout(null);// 添加标签final JLabel lblDesc = new JLabel("是男人就坚持20秒");lblDesc.setBounds(133, 175, 113, 31);lblDesc.setForeground(Color.WHITE);c.add(lblDesc);// 添加按钮final JButton btnStart = new JButton("开始");btnStart.setBounds(133, 210, 113, 31);c.add(btnStart);// 设置可见setVisible(true);//设置内容面板获取焦点c.setFocusable(true);/** 增加键盘事件*/c.addKeyListener(new KeyAdapter() {// 按下,具体实现,即为按钮把对应的方向设置为true@Overridepublic void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:left=true;break;case KeyEvent.VK_RIGHT:right=true;    break;case KeyEvent.VK_UP:up=true;break;case KeyEvent.VK_DOWN:down=true;break;}}// 释放,把当前方向再设置成false@Overridepublic void keyReleased(KeyEvent e) {switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:left=false;break;case KeyEvent.VK_RIGHT:right=false;   break;case KeyEvent.VK_UP:up=false;break;case KeyEvent.VK_DOWN:down=false;break;}}});/** 增加鼠标的点击事件*/btnStart.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {//把当前标签和按钮隐藏btnStart.setVisible(false);lblDesc.setVisible(false);//飞机plane = new JLabel(new ImageIcon("img/plane.png"));plane.setBounds(150, 400, 33, 33);c.add(plane);//刷新页面plane.updateUI();//飞机实现 移动new MoveThread(plane,c).start();//计时器new TimerThread(c).start();//子弹for(int i=0;i<num;i++){new BulletThread(c,plane,FrmMain.this).start();}}});}/** 程序的入口*/public static void main(String[] args) {// new 就是一个对象new FrmMain();}
}
/** 飞机移动的线程类*/
public class MoveThread extends Thread {//飞行速度private int speed=5;//飞机private JLabel plane;//内容面板private Container c;public MoveThread(JLabel plane, Container c) {this.plane=plane;this.c=c;}/** 飞机运算的线程实现* @see java.lang.Thread#run()*/@Overridepublic void run() {while(FrmMain.isRun){if(FrmMain.left){//设置左飞机plane.setIcon(new ImageIcon("img/planeLeft.png"));//如果是超过左边边缘,x轴则设置为零if(plane.getX()-speed<0){plane.setLocation(0, plane.getY());}else{plane.setLocation(plane.getX()-speed, plane.getY());}}else if(FrmMain.right){//设置成右飞机    plane.setIcon(new ImageIcon("img/planeRight.png"));//如果x轴+飞宽+移动大小超过内容面板,则设置最靠右(内容面板-飞机宽的x轴大小)if(plane.getX()+plane.getWidth()+speed>c.getWidth()){plane.setLocation(c.getWidth()-plane.getWidth(), plane.getY());}else{plane.setLocation(plane.getX()+speed, plane.getY());}}else if(FrmMain.up){//正飞机plane.setIcon(new ImageIcon("img/plane.png"));//如果飞最上面,超过边界后,作的处理if(plane.getY()-speed<0){plane.setLocation(plane.getX(), 0);}else{plane.setLocation(plane.getX(), plane.getY()-speed);}}else if(FrmMain.down){//正飞机plane.setIcon(new ImageIcon("img/plane.png"));//如果飞最下面,超过边界后,作的处理if(plane.getY()+speed+plane.getHeight()>c.getHeight()){plane.setLocation(plane.getX(), c.getHeight()-plane.getHeight());}else{plane.setLocation(plane.getX(), plane.getY()+speed);}}//在线程时,间隔50毫秒执行一回try {sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}}
}
/** 子弹线程*/
public class BulletThread extends Thread {// 内容面板private Container c;// 飞机private JLabel plane;// 子弹private JLabel lblBullet;// x轴速度private int xSpeed;// y轴速度private int ySpeed;private FrmMain frmMain;public BulletThread(Container c, JLabel plane, FrmMain frmMain) {this.c = c;this.plane = plane;this.frmMain=frmMain;// 随机类Random random = new Random();// 创建 子弹lblBullet = new JLabel(new ImageIcon("img/bullet.png"));lblBullet.setLocation(random.nextInt(c.getWidth()), random.nextInt(c.getHeight()/2));// 随机x轴速度xSpeed = random.nextInt(5) + 1;// 随机y轴速度ySpeed = random.nextInt(5) + 1;c.add(lblBullet);}// 张程实现@Overridepublic void run() {while (FrmMain.isRun) {//子弹超过上下左右边缘的处理if (lblBullet.getX() < 0 || lblBullet.getX() > c.getWidth()) {xSpeed = -xSpeed;}if (lblBullet.getY() < 0 || lblBullet.getY() > c.getHeight()) {ySpeed=-ySpeed;}lblBullet.setBounds(lblBullet.getX()+xSpeed, lblBullet.getY()+ySpeed, 12, 12);//判断子弹与飞机的交集if(lblBullet.getBounds().intersects(plane.getBounds())){//结束 FrmMain.isRun=false;//爆炸int x = plane.getX()-plane.getWidth();int y=  plane.getY()-plane.getHeight();//启动爆炸线程new ExplosionThread(x,y,c,plane,frmMain).start();}try {sleep(40);} catch (InterruptedException e) {e.printStackTrace();}}}
}
/** 计时线程*/
public class TimerThread extends Thread {//内容面板 private Container  c;public TimerThread(Container c) {this.c=c;}//线程实现 @Overridepublic void run() {//1添加JLabel 00:JLabel lblTime = new JLabel("00:00");lblTime.setBounds(350, 0, 50, 20);lblTime.setForeground(Color.YELLOW);c.add(lblTime);lblTime.updateUI();//2获取当前时间long start = System.currentTimeMillis();//3刷新DecimalFormat df = new DecimalFormat("00");while(FrmMain.isRun){long x = System.currentTimeMillis()-start;int second= (int)(x/1000);int mSecond=(int)(x%1000/10); lblTime.setText(df.format(second)+":"+df.format(mSecond));//休眠50毫秒try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}}
}
/** 爆炸线程*/
public class ExplosionThread extends Thread {private int x;private int y;private Container c;private JLabel plane;//最先的窗体private FrmMain frmMain;public ExplosionThread(int x, int y, Container c, JLabel plane, FrmMain frmMain) {this.x=x;this.y=y;this.c=c;this.plane=plane;this.frmMain=frmMain;}//线程实现@Overridepublic void run() {//爆炸的起始图片JLabel lblExplosion =new JLabel(new ImageIcon("img/explosion2-1.png"));lblExplosion.setBounds(x, y, 128, 128);c.add(lblExplosion);plane.setVisible(false);//爆炸的动画图片for(int i=1;i<72;i++){lblExplosion.setIcon(new ImageIcon("img/explosion2-"+i+".png"));try {sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}//提示消息JLabel lblEnd = new JLabel("Game Over");lblEnd.setForeground(Color.RED);lblEnd.setBounds(160, 200, 100, 50);c.add(lblEnd);//再来一局JButton btnAgain = new JButton("再来一局");btnAgain.setBounds(150, 250, 100, 50);c.add(btnAgain);lblEnd.updateUI();btnAgain.updateUI();//再来一局的事件btnAgain.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new FrmMain();frmMain.setVisible(false);}});}}

以上就是这个小游戏的所有代码实现部分,总共不到400行代码,快写一个试试吧。


Java小游戏——是男人就坚持20秒相关推荐

  1. 飞机躲避小游戏---是男人就撑100秒的制作

    飞机躲避小游戏---是男人就撑100秒的制作 EmilMatthew(EmilMatthew@126.com) 摘要:  可以将这个游戏的整体运作看成一个粒子系统,再加上子弹和飞机的碰撞判定即可.简单 ...

  2. C语言小游戏-是男人就坚持100秒

    首先就为开发小游戏说一个总结,个人觉得基础部分可以分为简单的四个步骤. 1.数据初始化,初始界面的数据.2.游戏界面的展示. 3.用户输入的控制. 4.游戏的规则和限制. #include <s ...

  3. 各种经典java小游戏_Java是这个世界上最好的语言!

    为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...

  4. Java小游戏:模仿微信群发红包

    Java小游戏:模仿微信群发红包 微信群主发普通红包,普通红包规则: 群主的一笔金额,从群主余额中扣除,平均分成n等分,让群员领取. 成员领取红包后,保存到余额中. 请根据规则,完成案例中所有类的定义 ...

  5. java小游戏-超级玛丽

    java小游戏-java小游戏-超级玛丽 1 创建窗口 2 创建并完成常量类 3 创建背景类 4 绘制背景类 5 创建障碍物 6 第一关的设计 7 第二关的设计 8 第三关的设计 9 创建马里奥类 1 ...

  6. java小游戏-java小游戏-大鱼吃小鱼

    java小游戏-java小游戏-大鱼吃小鱼 1 创建窗口 2 添加背景图 3 启动封面 4 启动页面的点击事件 5 游戏开始时的背景添加 6 双缓存解决闪屏问题 7 地方第一条小鱼的添加 8 敌方左方 ...

  7. java小游戏——飞翔的小鸟(java初学作品)

    注:学习了java基础后,做出来的一个小作品,可以用来巩固学习 概述: 飞翔的小鸟能够作为Java基础的收官之作,包涵了Java很多的基础知识,在学习完Java基础后,尝试编写一些东西,能够起到很好的 ...

  8. java小游戏------Flappy Bird(飞翔的小鸟含源码)

    前言:本小游戏可作为java入门阶段收尾创作. 需:掌握面向对象的使用,了解多线程和异常处理等知识. 如上图所示:我们需要绘制背景,小鸟,障碍物,当然也包括游戏开始界面以及死亡界面. 一:思路解析: ...

  9. java小游戏-飞翔的小鸟

    java小游戏-ava小游戏-飞翔的小鸟 1 游戏窗口的显示 2 游戏背景添加 3 背景颜色的添加 4 屏幕中绘制小鸟 5 实现小鸟上下移动 6 解决屏幕闪烁问题 7 云彩的添加与移动 8 云彩的自动 ...

最新文章

  1. failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
  2. excel数据库_中琅条码打印软件数据库连接详解
  3. 游戏在ios和android,陈情令手游ios和安卓互通吗 ios和安卓能一起玩吗
  4. 警惕开源代码库中的安全隐患
  5. LeetCode 2012. 数组美丽值求和
  6. @所有人,云计算喊你一起来学习!
  7. android动画文档,Android 动画系统汇总
  8. 首师大2计算机考研分数线,2021考研分数线:首都师范大学2021年考研复试分数线...
  9. raspberry pi_如何为Raspberry Pi编写SD卡
  10. js和jQuery判断数组是否包含指定元素
  11. c语言求一个数的阶乘值代码,求10000的阶乘(c语言代码实现)
  12. html5三角函数怎么用,HTML5(五)html5<canvas路径和三角函数的故事>(下)
  13. javascript 使用drop元素实现拖动(ondragstart、ondrag、 ondragend、ondragenter,ondragover、ondragleave、ondrop )
  14. Gridview DetailView
  15. HTML .CSS实现商品详情(detail)
  16. 百度贴吧个人主页_回望人人网/新浪博客/百度贴吧时
  17. linux 保存bmp 图片
  18. 第八章-数据处理的两个基本问题
  19. 数据链路层协议(1)
  20. HDUOJ 6441 Find Integer

热门文章

  1. 教你如何自学UI设计
  2. VMware 16 安装window server 2003【附带可能出现的问题和解决方法】
  3. Ubuntu18.04 安装 gcc
  4. Linux篇.配置IP地址与主机名的映射关系
  5. 求生之路2 游戏资料详细与细节
  6. java ssh框架面试题_五道关于SSH框架的面试题
  7. 07UI交互a_TextMeshPro
  8. 用 Python 画动态时钟
  9. TKinterDesigner从入门到精通视频教程
  10. php yaf环境启动,yaf框架教程(3)- yaf框架环境配置