欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

一个考发应力的小游戏,考发应力小游戏,一个考发应力的小游戏,空

来源: javaer 分享于  点击 27577 次 点评:94

一个考发应力的小游戏,考发应力小游戏,一个考发应力的小游戏,空


一个考发应力的小游戏,空格键控制横条的位置可获得胜利

Tetris.java

import java.awt.EventQueue;import java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JMenu;import javax.swing.JLabel;import javax.swing.JOptionPane;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;public class Tetris extends JFrame {    private JPanel contentPane;    static JLabel lblNewLabel_1;    /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    Tetris frame = new Tetris();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public Tetris() {        setTitle("反应力大考验");        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 450, 300);        JMenuBar menuBar = new JMenuBar();        setJMenuBar(menuBar);        JMenu mnNewMenu = new JMenu("游戏");        menuBar.add(mnNewMenu);        JMenuItem mntmNewMenuItem_3 = new JMenuItem("退出");        mntmNewMenuItem_3.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                System.exit(0);            }        });        mnNewMenu.add(mntmNewMenuItem_3);        JMenu mnNewMenu_1 = new JMenu("帮助");        menuBar.add(mnNewMenu_1);        JMenuItem mntmNewMenuItem = new JMenuItem("游戏玩法");        mntmNewMenuItem.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                JOptionPane.showMessageDialog(null, "空格键控制横条的摆放,正确对齐位置才能更上一层,成功达到顶层可获得游戏胜利!", "游戏玩法",                        JOptionPane.INFORMATION_MESSAGE);            }        });        mnNewMenu_1.add(mntmNewMenuItem);        JMenuItem mntmNewMenuItem_4 = new JMenuItem("关于作者");        mntmNewMenuItem_4.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                JOptionPane.showMessageDialog(null, "网络1004班:陈雍,董振宇,高宝成,何其", "关于作者",                        JOptionPane.INFORMATION_MESSAGE);            }        });        mnNewMenu_1.add(mntmNewMenuItem_4);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        contentPane.setLayout(null);        JLabel lblNewLabel = new JLabel("您现在分数:");        lblNewLabel.setBounds(282, 169, 70, 15);        contentPane.add(lblNewLabel);        MyJPanel panel = new MyJPanel();        panel.setBounds(0, 0, 300, 300);        contentPane.add(panel);        addKeyListener(panel);        getContentPane().add(panel);        lblNewLabel_1 = new JLabel("[0]");        lblNewLabel_1.setBounds(311, 199, 70, 15);        contentPane.add(lblNewLabel_1);        JLabel lblNewLabel_2 = new JLabel("游戏说明");        lblNewLabel_2.setBounds(282, 12, 70, 15);        contentPane.add(lblNewLabel_2);        JLabel lblNewLabel_3 = new JLabel("1.按F1可开始游戏");        lblNewLabel_3.setBounds(264, 39, 117, 15);        contentPane.add(lblNewLabel_3);        JLabel lblf = new JLabel("2.按F2可暂停游戏");        lblf.setBounds(264, 66, 117, 15);        contentPane.add(lblf);        JLabel lblf_1 = new JLabel("3.按F3可恢复游戏");        lblf_1.setBounds(264, 93, 117, 15);        contentPane.add(lblf_1);        JLabel label_2 = new JLabel("4.按空格键控制横条");        label_2.setBounds(264, 120, 117, 15);        contentPane.add(label_2);        JLabel lblNewLabel_4 = new JLabel("5.对齐横条可胜利");        lblNewLabel_4.setBounds(264, 142, 117, 15);        contentPane.add(lblNewLabel_4);    }    public class MyJPanel extends JPanel implements KeyListener {        private int blockFlag = 5;        private int floor = 1;        private boolean startFlag;        private boolean outFlag;        private int ctrlBlock;        private int speed;        private int checkBlock;        private int blockSaver;        private boolean clearFlag=true;        private int grade;        private boolean ctrlFlag=false;        blockThread t;        public void paintComponent(Graphics g) {            super.paintComponents(g);            if(clearFlag==false){                g.clearRect(18,0,234, 234);                clearFlag=true;            }            g.clearRect(18, 234 - floor * 18, 180, 18);            for (int i = 0; i < 14; i++) {                g.drawRect(0, i * 18, 18, 18);                g.drawRect(198, i * 18, 18, 18);                if (i < 11) {                    g.drawRect((i + 1) * 18, 234, 18, 18);                }            }            for (int i = 0; i < blockFlag; i++) {                g.fillRect((++ctrlBlock) * 18, 234 - floor * 18, 18, 18);                checkBlock = ctrlBlock;            }            ctrlBlock = 0;        }        public void start() {            ctrlFlag=true;            t = new blockThread();            t.start();        }        public void init(){            blockFlag = 5;            floor = 1;            startFlag = true;            outFlag = true;            ctrlBlock = 0;            speed = 500;            checkBlock = 0;            blockSaver = 0;            grade=0;        }        public void flushBlock() {            init();            int tmp = ctrlBlock;            while (startFlag) {                if (outFlag) {                    for (int i = 0; i < (11 - blockFlag); i++) {                        ctrlBlock = tmp;                        try {                            Thread.sleep(speed);                        } catch (InterruptedException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                        repaint();                        tmp++;                    }                    outFlag = false;                } else {                    for (int i = 0; i < (11 - blockFlag); i++) {                        ctrlBlock = tmp - 1;                        try {                            Thread.sleep(speed);                        } catch (InterruptedException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                        repaint();                        tmp--;                    }                    outFlag = true;                }            }        }        public void suspend() {            if(ctrlFlag){                t.suspend();                }else{                    JOptionPane.showMessageDialog(null, "请先按F1开始游戏!", "提示",                            JOptionPane.ERROR_MESSAGE);                 }        }        public void resume() {            if(ctrlFlag){                t.resume();                }else{                    JOptionPane.showMessageDialog(null, "请先按F1开始游戏!", "提示",                            JOptionPane.ERROR_MESSAGE);                 }        }        public void ctrl(){            if(ctrlFlag){            newline();            }else{                JOptionPane.showMessageDialog(null, "请先按F1开始游戏后再按空格键控制", "提示",                        JOptionPane.ERROR_MESSAGE);             }        }        public void newline() {            if(floor>1&&blockSaver!=checkBlock){                JOptionPane.showMessageDialog(null, "Game Over!您的分数:"+grade, "提示",                JOptionPane.ERROR_MESSAGE);                t.stop();                init();                clearFlag=false;                ctrlFlag=false;                repaint();                Tetris.lblNewLabel_1.setText("["+grade+"]");                return;            }            if(floor>13){                JOptionPane.showMessageDialog(null, "您已经成功过关!", "恭喜",                        JOptionPane.INFORMATION_MESSAGE);                init();                clearFlag=false;                ctrlFlag=false;                repaint();                Tetris.lblNewLabel_1.setText("["+grade+"]");                return;            }            blockSaver=checkBlock;            grade=grade+(floor*100);            floor++;            speed = speed - 38;            Tetris.lblNewLabel_1.setText("["+grade+"]");        }        class blockThread extends Thread {            public void run() {                flushBlock();            }        }        public void keyPressed(KeyEvent e) {            switch (e.getKeyCode()) {            case KeyEvent.VK_SPACE:                ctrl();                break;            case KeyEvent.VK_F1:                start();                break;            case KeyEvent.VK_F2:                suspend();                break;            case KeyEvent.VK_F3:                resume();                break;            }        }        @Override        public void keyReleased(KeyEvent arg0) {            // TODO Auto-generated method stub        }        @Override        public void keyTyped(KeyEvent arg0) {            // TODO Auto-generated method stub        }    }}

myBolck.png

imgs/asCode/12182322_ONM2.png
相关栏目:

用户点评