[Java] java 一个考反应力的小游戏 →→→→→进入此内容的聊天室

来自 , 2020-09-06, 写在 Java, 查看 132 次.
URL http://www.code666.cn/view/995e1fda
  1. import java.awt.EventQueue;
  2. import java.awt.Graphics;
  3.  
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JMenuBar;
  8. import javax.swing.JMenuItem;
  9. import javax.swing.JMenu;
  10. import javax.swing.JLabel;
  11. import javax.swing.JOptionPane;
  12.  
  13. import java.awt.event.KeyEvent;
  14. import java.awt.event.KeyListener;
  15. import java.awt.event.ActionListener;
  16. import java.awt.event.ActionEvent;
  17.  
  18. public class Tetris extends JFrame {
  19.  
  20.     private JPanel contentPane;
  21.     static JLabel lblNewLabel_1;
  22.     /**
  23.      * Launch the application.
  24.      */
  25.     public static void main(String[] args) {
  26.         EventQueue.invokeLater(new Runnable() {
  27.             public void run() {
  28.                 try {
  29.                     Tetris frame = new Tetris();
  30.                     frame.setVisible(true);
  31.                 } catch (Exception e) {
  32.                     e.printStackTrace();
  33.                 }
  34.             }
  35.         });
  36.     }
  37.  
  38.     /**
  39.      * Create the frame.
  40.      */
  41.     public Tetris() {
  42.         setTitle("反应力大考验");
  43.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  44.         setBounds(100, 100, 450, 300);
  45.  
  46.         JMenuBar menuBar = new JMenuBar();
  47.         setJMenuBar(menuBar);
  48.  
  49.         JMenu mnNewMenu = new JMenu("游戏");
  50.         menuBar.add(mnNewMenu);
  51.  
  52.         JMenuItem mntmNewMenuItem_3 = new JMenuItem("退出");
  53.         mntmNewMenuItem_3.addActionListener(new ActionListener() {
  54.             public void actionPerformed(ActionEvent e) {
  55.                 System.exit(0);
  56.             }
  57.         });
  58.         mnNewMenu.add(mntmNewMenuItem_3);
  59.  
  60.         JMenu mnNewMenu_1 = new JMenu("帮助");
  61.         menuBar.add(mnNewMenu_1);
  62.  
  63.         JMenuItem mntmNewMenuItem = new JMenuItem("游戏玩法");
  64.         mntmNewMenuItem.addActionListener(new ActionListener() {
  65.             public void actionPerformed(ActionEvent e) {
  66.                 JOptionPane.showMessageDialog(null, "空格键控制横条的摆放,正确对齐位置才能更上一层,成功达到顶层可获得游戏胜利!", "游戏玩法",
  67.                         JOptionPane.INFORMATION_MESSAGE);
  68.             }
  69.         });
  70.         mnNewMenu_1.add(mntmNewMenuItem);
  71.  
  72.         JMenuItem mntmNewMenuItem_4 = new JMenuItem("关于作者");
  73.         mntmNewMenuItem_4.addActionListener(new ActionListener() {
  74.             public void actionPerformed(ActionEvent e) {
  75.                 JOptionPane.showMessageDialog(null, "网络1004班:陈雍,董振宇,高宝成,何其", "关于作者",
  76.                         JOptionPane.INFORMATION_MESSAGE);
  77.             }
  78.         });
  79.         mnNewMenu_1.add(mntmNewMenuItem_4);
  80.         contentPane = new JPanel();
  81.         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  82.         setContentPane(contentPane);
  83.         contentPane.setLayout(null);
  84.  
  85.         JLabel lblNewLabel = new JLabel("您现在分数:");
  86.         lblNewLabel.setBounds(282, 169, 70, 15);
  87.         contentPane.add(lblNewLabel);
  88.  
  89.         MyJPanel panel = new MyJPanel();
  90.         panel.setBounds(0, 0, 300, 300);
  91.         contentPane.add(panel);
  92.         addKeyListener(panel);
  93.         getContentPane().add(panel);
  94.  
  95.         lblNewLabel_1 = new JLabel("[0]");
  96.         lblNewLabel_1.setBounds(311, 199, 70, 15);
  97.         contentPane.add(lblNewLabel_1);
  98.  
  99.         JLabel lblNewLabel_2 = new JLabel("游戏说明");
  100.         lblNewLabel_2.setBounds(282, 12, 70, 15);
  101.         contentPane.add(lblNewLabel_2);
  102.  
  103.         JLabel lblNewLabel_3 = new JLabel("1.按F1可开始游戏");
  104.         lblNewLabel_3.setBounds(264, 39, 117, 15);
  105.         contentPane.add(lblNewLabel_3);
  106.  
  107.         JLabel lblf = new JLabel("2.按F2可暂停游戏");
  108.         lblf.setBounds(264, 66, 117, 15);
  109.         contentPane.add(lblf);
  110.  
  111.         JLabel lblf_1 = new JLabel("3.按F3可恢复游戏");
  112.         lblf_1.setBounds(264, 93, 117, 15);
  113.         contentPane.add(lblf_1);
  114.  
  115.         JLabel label_2 = new JLabel("4.按空格键控制横条");
  116.         label_2.setBounds(264, 120, 117, 15);
  117.         contentPane.add(label_2);
  118.  
  119.         JLabel lblNewLabel_4 = new JLabel("5.对齐横条可胜利");
  120.         lblNewLabel_4.setBounds(264, 142, 117, 15);
  121.         contentPane.add(lblNewLabel_4);
  122.     }
  123.  
  124.     public class MyJPanel extends JPanel implements KeyListener {
  125.         private int blockFlag = 5;
  126.         private int floor = 1;
  127.         private boolean startFlag;
  128.         private boolean outFlag;
  129.         private int ctrlBlock;
  130.         private int speed;
  131.         private int checkBlock;
  132.         private int blockSaver;
  133.         private boolean clearFlag=true;
  134.         private int grade;
  135.         private boolean ctrlFlag=false;
  136.         blockThread t;
  137.  
  138.         public void paintComponent(Graphics g) {
  139.             super.paintComponents(g);
  140.             if(clearFlag==false){
  141.                 g.clearRect(18,0,234, 234);
  142.                 clearFlag=true;
  143.             }
  144.             g.clearRect(18, 234 - floor * 18, 180, 18);
  145.             for (int i = 0; i < 14; i++) {
  146.                 g.drawRect(0, i * 18, 18, 18);
  147.                 g.drawRect(198, i * 18, 18, 18);
  148.                 if (i < 11) {
  149.                     g.drawRect((i + 1) * 18, 234, 18, 18);
  150.                 }
  151.             }
  152.             for (int i = 0; i < blockFlag; i++) {
  153.                 g.fillRect((++ctrlBlock) * 18, 234 - floor * 18, 18, 18);
  154.                 checkBlock = ctrlBlock;
  155.             }
  156.             ctrlBlock = 0;
  157.         }
  158.  
  159.         public void start() {
  160.             ctrlFlag=true;
  161.             t = new blockThread();
  162.             t.start();
  163.         }
  164.         public void init(){
  165.             blockFlag = 5;
  166.             floor = 1;
  167.             startFlag = true;
  168.             outFlag = true;
  169.             ctrlBlock = 0;
  170.             speed = 500;
  171.             checkBlock = 0;
  172.             blockSaver = 0;
  173.             grade=0;
  174.         }
  175.  
  176.         public void flushBlock() {
  177.             init();
  178.             int tmp = ctrlBlock;
  179.             while (startFlag) {
  180.                 if (outFlag) {
  181.                     for (int i = 0; i < (11 - blockFlag); i++) {
  182.                         ctrlBlock = tmp;
  183.                         try {
  184.                             Thread.sleep(speed);
  185.                         } catch (InterruptedException e) {
  186.                             // TODO Auto-generated catch block
  187.                             e.printStackTrace();
  188.                         }
  189.                         repaint();
  190.                         tmp++;
  191.                     }
  192.                     outFlag = false;
  193.                 } else {
  194.                     for (int i = 0; i < (11 - blockFlag); i++) {
  195.                         ctrlBlock = tmp - 1;
  196.                         try {
  197.                             Thread.sleep(speed);
  198.                         } catch (InterruptedException e) {
  199.                             // TODO Auto-generated catch block
  200.                             e.printStackTrace();
  201.                         }
  202.                         repaint();
  203.                         tmp--;
  204.                     }
  205.                     outFlag = true;
  206.                 }
  207.             }
  208.         }
  209.  
  210.         public void suspend() {
  211.             if(ctrlFlag){
  212.                 t.suspend();
  213.                 }else{
  214.                     JOptionPane.showMessageDialog(null, "请先按F1开始游戏!", "提示",
  215.                             JOptionPane.ERROR_MESSAGE);
  216.                 }
  217.         }
  218.  
  219.         public void resume() {
  220.             if(ctrlFlag){
  221.                 t.resume();
  222.                 }else{
  223.                     JOptionPane.showMessageDialog(null, "请先按F1开始游戏!", "提示",
  224.                             JOptionPane.ERROR_MESSAGE);
  225.                 }
  226.         }
  227.  
  228.         public void ctrl(){
  229.             if(ctrlFlag){
  230.             newline();
  231.             }else{
  232.                 JOptionPane.showMessageDialog(null, "请先按F1开始游戏后再按空格键控制", "提示",
  233.                         JOptionPane.ERROR_MESSAGE);
  234.             }
  235.         }
  236.  
  237.         public void newline() {
  238.             if(floor>1&&blockSaver!=checkBlock){
  239.                 JOptionPane.showMessageDialog(null, "Game Over!您的分数:"+grade, "提示",
  240.                 JOptionPane.ERROR_MESSAGE);
  241.                 t.stop();
  242.                 init();
  243.                 clearFlag=false;
  244.                 ctrlFlag=false;
  245.                 repaint();
  246.                 Tetris.lblNewLabel_1.setText("["+grade+"]");
  247.                 return;
  248.             }
  249.             if(floor>13){
  250.                 JOptionPane.showMessageDialog(null, "您已经成功过关!", "恭喜",
  251.                         JOptionPane.INFORMATION_MESSAGE);
  252.                 init();
  253.                 clearFlag=false;
  254.                 ctrlFlag=false;
  255.                 repaint();
  256.                 Tetris.lblNewLabel_1.setText("["+grade+"]");
  257.                 return;
  258.             }
  259.  
  260.             blockSaver=checkBlock;
  261.             grade=grade+(floor*100);
  262.             floor++;
  263.             speed = speed - 38;
  264.             Tetris.lblNewLabel_1.setText("["+grade+"]");
  265.         }
  266.  
  267.         class blockThread extends Thread {
  268.             public void run() {
  269.                 flushBlock();
  270.             }
  271.         }
  272.  
  273.         public void keyPressed(KeyEvent e) {
  274.             switch (e.getKeyCode()) {
  275.             case KeyEvent.VK_SPACE:
  276.                 ctrl();
  277.                 break;
  278.             case KeyEvent.VK_F1:
  279.                 start();
  280.                 break;
  281.             case KeyEvent.VK_F2:
  282.                 suspend();
  283.                 break;
  284.             case KeyEvent.VK_F3:
  285.                 resume();
  286.                 break;
  287.             }
  288.         }
  289.  
  290.         @Override
  291.         public void keyReleased(KeyEvent arg0) {
  292.             // TODO Auto-generated method stub
  293.  
  294.         }
  295.  
  296.         @Override
  297.         public void keyTyped(KeyEvent arg0) {
  298.             // TODO Auto-generated method stub
  299.  
  300.         }
  301.     }
  302. }
  303.  
  304. //源代码片段来自云代码http://yuncode.net
  305.                        

回复 "java 一个考反应力的小游戏"

这儿你可以回复上面这条便签

captcha