zoukankan      html  css  js  c++  java
  • JAVA-小青蛙跳石头游戏

     游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙。游戏原址就不分享了,只能在手机上打开。

    下面是源码:

      1 /*
      2  * Main.java
      3  * */
      4 
      5 import java.awt.Color;
      6 import java.awt.Graphics;
      7 import java.awt.event.KeyAdapter;
      8 import java.awt.event.KeyEvent;
      9 import java.awt.event.MouseAdapter;
     10 import java.awt.event.MouseEvent;
     11 import java.awt.event.WindowAdapter;
     12 import java.awt.event.WindowEvent;
     13 import java.text.DateFormat;
     14 import java.text.ParseException;
     15 import java.text.SimpleDateFormat;
     16 import java.util.Date;
     17 
     18 import javax.swing.JFrame;
     19 
     20 public class Main extends JFrame {
     21     /**
     22      * 过关移动顺序 3、4、5、3、2、1 4、5、6、3、2、1 5、6、1
     23      */
     24     public static final int GAME_WIDTH = 420; // 界面宽
     25     public static final int GAME_HEIGTH = 150; // 界面高
     26     public static final int GAME_X = 400; // 界面位置
     27     public static final int GAME_Y = 250;
     28     public DateFormat format = new SimpleDateFormat("mm:ss"); // 时间格式
     29     public String StartDate = new String(); // 起始时间
     30     public String EndtDate = new String(); // 当前时间
     31     public long times;
     32     Frog f = new Frog(this); // 青蛙类
     33 
     34     public static void main(String[] args) {
     35         Main m = new Main();
     36         m.lauchFrame(); // 初始化界面
     37     }
     38 
     39     private void lauchFrame() {
     40         // TODO Auto-generated method stub
     41         Date date = new Date();
     42         StartDate = format.format(date);
     43         EndtDate = format.format(date);
     44         this.setLocation(GAME_X, GAME_Y); // 窗口初始坐标点
     45         this.setSize(GAME_WIDTH, GAME_HEIGTH); // 窗口初始大小
     46         this.setTitle("Frog"); // 窗口名称
     47         /* 窗口监听 */
     48         this.addWindowListener(new WindowAdapter() {
     49             @Override
     50             /* 点退出叉之后运行 */
     51             public void windowClosing(WindowEvent e) {
     52                 // TODO Auto-generated method stub
     53                 System.exit(0); // 退出
     54             }
     55         });
     56         this.addMouseListener(new Mouse()); // 添加鼠标监听事件
     57         this.addKeyListener(new Key()); // 添加键盘监听事件
     58         this.setVisible(true); // 设置窗口显现
     59         this.setResizable(false); // 设置窗口不可改变大小
     60         this.getContentPane().setBackground(Color.white); // 界面背景白色
     61         new Thread(new PaintThread()).start(); // 开始运行PaintThread类run->repaint->paint
     62     }
     63 
     64     public void paint(Graphics g) {
     65         super.paint(g);
     66         for (int i = 1; i < 8; i++) {
     67             g.drawRect(i * 50 - 5, 45, 30, 30);// 画出方框
     68         }
     69         f.Draw(g); // 画方块
     70         /* 显示时间以及提示说明 */
     71         try {
     72             times = format.parse(EndtDate).getTime() - format.parse(StartDate).getTime();
     73             g.drawString("时间:" + format.format(new Date(times)).toString(), 250, 40);
     74         } catch (ParseException e) {
     75             // TODO Auto-generated catch block
     76             e.printStackTrace();
     77         }
     78         g.drawString("F2键重新开始", 100, 40);
     79         g.drawString("规则:1、点击方块跳动", 85, 100);
     80         g.drawString("2、方块不能向后跳,最多只能跳过1个方块", 120, 115);
     81         g.drawString("3、使左右两边方块交换位置即可胜利", 120, 130);
     82     }
     83 
     84     /* 线程主要做时间和界面刷新 */
     85     private class PaintThread implements Runnable {
     86 
     87         @Override
     88         public void run() {
     89             // TODO Auto-generated method stub
     90             while (true) {
     91                 repaint(); // 刷新界面
     92                 Date date = new Date();
     93                 EndtDate = format.format(date); // 重新获取当前时间
     94                 try {
     95                     Thread.sleep(1000); // 时隔1s
     96                 } catch (Exception e) {
     97                     e.printStackTrace();
     98                 }
     99             }
    100         }
    101     }
    102 
    103     /* 键盘监听;调用方块类的键盘释放监听 */
    104     public class Key extends KeyAdapter {
    105 
    106         @Override
    107         public void keyReleased(KeyEvent e) {
    108             // TODO Auto-generated method stub
    109             super.keyReleased(e);
    110             f.keyReleased(e);
    111         }
    112 
    113     }
    114 
    115     /* 鼠标监听;调用方块类的鼠标单击监听 */
    116     public class Mouse extends MouseAdapter {
    117 
    118         @Override
    119         public void mouseClicked(MouseEvent e) {
    120             // TODO Auto-generated method stub
    121             super.mouseClicked(e);
    122             f.mouseClicked(e);
    123         }
    124     }
    125 }
      1 /*
      2  * Frog.java
      3  * */
      4 import java.awt.Color;
      5 import java.awt.Graphics;
      6 import java.awt.event.KeyEvent;
      7 import java.awt.event.MouseEvent;
      8 import java.util.ArrayList;
      9 import java.util.Date;
     10 import java.util.List;
     11 
     12 import javax.swing.JOptionPane;
     13 
     14 public class Frog {
     15     /* 方块类 */
     16     private class F {
     17         public int x, y; // 方块的坐标
     18         public boolean good; // 判断两方阵营
     19         public boolean have; // 判断是否显现这个方块(7个位置只显示6个)
     20 
     21         public F(int x, int y, boolean good, boolean have) {
     22             super();
     23             // TODO Auto-generated constructor stub
     24             this.x = x;
     25             this.y = y;
     26             this.good = good;
     27             this.have = have;
     28         }
     29     }
     30 
     31     private static final int FROG_WIGTH = 20; // 方块大小
     32     private static final int FROG_HEIGTH = 20;
     33     private static final int GAME_FROG_NUMBER = 7; // 游戏方块数量
     34     private static final int FROG_X = 50; // 位置基址
     35     private static final int FROG_Y = 50;
     36     List<F> frog = new ArrayList<F>(); // 方块集合
     37     private Main m;
     38 
     39     public Frog(Main m) {
     40         InitFrog();// 初始化集合
     41         this.m = m;
     42     }
     43 
     44     private void InitFrog() {
     45         for (int i = 1; i <= GAME_FROG_NUMBER; i++) {
     46             if (i <= GAME_FROG_NUMBER / 2)
     47                 frog.add(new F(FROG_X * i, FROG_Y, true, true));
     48             else if (i == GAME_FROG_NUMBER / 2 + 1)
     49                 frog.add(new F(FROG_X * i, FROG_Y, true, false));
     50             else
     51                 frog.add(new F(FROG_X * i, FROG_Y, false, true));
     52         }
     53     }
     54 
     55     public void Draw(Graphics g) {
     56         Color c = g.getColor(); // 获取当前画笔颜色
     57         for (int i = 0; i < GAME_FROG_NUMBER; i++) {
     58             if (frog.get(i).have) {
     59                 if (frog.get(i).good) // 两边分出颜色
     60                     g.setColor(Color.BLUE);
     61                 else
     62                     g.setColor(Color.RED);
     63                 g.fillRect(frog.get(i).x, frog.get(i).y, FROG_WIGTH, FROG_HEIGTH);// 相应位置画出方块
     64             }
     65         }
     66         g.setColor(c);
     67     }
     68 
     69     public boolean Over() {
     70         for (int i = 0; i < GAME_FROG_NUMBER; i++) {
     71             if (i < GAME_FROG_NUMBER / 2) {
     72                 if (frog.get(i).good)
     73                     return false;
     74             } else if (i == GAME_FROG_NUMBER / 2) {
     75                 if (frog.get(i).have)
     76                     return false;
     77             } else {
     78                 if (!frog.get(i).good)
     79                     return false;
     80             }
     81         }
     82         return true;
     83     }
     84 
     85     public void reset() {
     86         frog.removeAll(frog);
     87         InitFrog();
     88         m.repaint();
     89         Date date = new Date();
     90         m.StartDate = m.format.format(date);
     91         m.EndtDate = m.format.format(date);
     92     }
     93 
     94     /* 鼠标单击监听;方块移动算法 */
     95     public void mouseClicked(MouseEvent e) {
     96         int x = e.getX();
     97         int y = e.getY();
     98         if (y > 50 && y < 70 && x % 50 <= 20) {
     99             x /= 50;
    100             x -= 1;
    101             if (frog.get(x).have) {
    102                 if (frog.get(x).good) {
    103                     if (x < GAME_FROG_NUMBER - 1)
    104                         if (frog.get(x + 1).have) {
    105                             if (x < GAME_FROG_NUMBER - 2) {
    106                                 if (!frog.get(x + 2).have) {
    107                                     frog.set(x, new F(FROG_X * (x + 1), FROG_Y, true, false));
    108                                     frog.set(x + 2, new F(FROG_X * (x + 3), FROG_Y, true, true));
    109                                 }
    110                             }
    111                         } else {
    112                             frog.set(x, new F(FROG_X * (x + 1), FROG_Y, true, false));
    113                             frog.set(x + 1, new F(FROG_X * (x + 2), FROG_Y, true, true));
    114                         }
    115                 } else {
    116                     if (x > 0)
    117                         if (frog.get(x - 1).have) {
    118                             if (x > 1) {
    119                                 if (!frog.get(x - 2).have) {
    120                                     frog.set(x, new F(FROG_X * (x + 1), FROG_Y, false, false));
    121                                     frog.set(x - 2, new F(FROG_X * (x - 1), FROG_Y, false, true));
    122                                 }
    123                             }
    124                         } else {
    125                             frog.set(x, new F(FROG_X * (x + 1), FROG_Y, false, false));
    126                             frog.set(x - 1, new F(FROG_X * x, FROG_Y, false, true));
    127                         }
    128                 }
    129             }
    130         }
    131         m.repaint();
    132         if (Over()) {
    133             Object[] o = { "OK", "CANCEL" };
    134             if (JOptionPane.showOptionDialog(null, "完成游戏
    你所用时间:" + "" + m.format.format(new Date(m.times)).toString(),
    135                     "游戏结束", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, o,
    136                     o[0]) == JOptionPane.YES_OPTION) {
    137                 System.exit(0);
    138             } else {
    139                 reset();
    140             }
    141         }
    142 
    143     }
    144 
    145     /* 键盘释放监听;重置用 */
    146     public void keyReleased(KeyEvent e) {
    147         int key = e.getKeyCode();
    148         switch (key) {
    149         case KeyEvent.VK_F2:
    150             reset();
    151             break;
    152         }
    153     }
    154 }
  • 相关阅读:
    Excel 之查找与替换
    重拾Excel之为什么
    taobao
    祝我生日快乐
    啊哈哈哈哈!自由啦
    我是不是得了抑郁症?
    Be quiet
    tcpdump tutorial
    Java Thread 多线程同步、锁、通信
    java 堆、栈、常量池等
  • 原文地址:https://www.cnblogs.com/ABook/p/5744573.html
Copyright © 2011-2022 走看看