回顾篇2-java模拟扫雷

最开始想学编程完全是因为游戏,第一次接触的游戏是扫雷。那还是初中在学校机房的时候。作为一个无限接近80后的小角色,那时看见电脑还是一个稀奇货(原谅我没见过世面,在我出生的时候世面就已经挂了....)虽然在那一通乱点,不知道怎么玩但还是被吸引住了。最后终于成了一个网瘾少年... 带着好奇心几经波折最后还是来学了编程。(主要是因为没找到工作(ノへ ̄、)捂脸)

来学的第一个星期还记得是java的awt组件,老师教我们做简易计算器。感到好神奇还认认真真的听了一个星期。以至于到后面工作才发现,尼玛!根本没有用的地方...

最近在看以前的资料发现了,刚学的时候写的一个扫雷小游戏。发现自己还是蛮用心的,还给它配上了动画,背景音乐效果😁


WX20181124-003627@2x.png

WX20181124-003730@2x.png

代码我就只贴一部分了。如果有兴趣的同学可以去下面的github地址下。

package lc.com;

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Random;

import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**简易扫雷*/
public class SweepBySwing {
    private static final String SRC_URL = "/Users/mac/IdeaProjects/mineClearance/src/main/resources/";
    private static int[][] arr  = new int[15][15];
    private static int[][] book = new int[15][15];
    private static  int wipeCount = 0;//消灭的格子数量
    private static JButton[][] buttons = new JButton[15][15];
    private static JButton button;
    private static URL mus;
    /**生成扫雷的二维数组*/
    /*
     *  后续在更新鼠标的右键标记雷和鼠标双击事件
     *
     * */
    public static void paintMoRen(){

        for(int i=0;i<30;i++){
            Random ran = new Random();
            int lx = ran.nextInt(15);
            int ly = ran.nextInt(15);
            if(arr[lx][ly] == 0){//表示这个地方还没有布置雷
                arr[lx][ly] = -1;
            }else{
                i--;
            }
        }
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                arr[i][j] = generationNumber(i,j);
            }
        }
    }
    public static  int generationNumber(int x ,int y){
        //定义一个雷数从零开始
        int res = 0;
        //首先应该判断这个点是不是属于雷区
        if(arr[x][y] != -1){
            //这里就应该判断八个方向是不是有雷 如果有雷则数值加1 按顺时针方向判断
            //向右时 x不变y+1
            if( x >=0 && x <arr.length && y+1 >= 0 && y+1 < arr.length && arr[x][y+1] == -1) res++;
            if( x+1 >=0 && x+1 <arr.length && y+1 >= 0 && y+1 < arr.length && arr[x+1][y+1] == -1) res++;
            if( x+1 >=0 && x+1 <arr.length && y >= 0 && y < arr.length && arr[x+1][y] == -1 ) res++;
            if( x+1 >=0 && x+1 <arr.length && y-1 >= 0 && y-1 < arr.length && arr[x+1][y-1] == -1 ) res++;
            if( x >=0 && x <arr.length && y-1 >= 0 && y-1 < arr.length && arr[x][y-1] == -1 ) res++;
            if( x-1 >=0 && x-1 <arr.length && y-1 >= 0 && y-1 < arr.length && arr[x-1][y-1] == -1 ) res++;
            if( x-1 >=0 && x-1 <arr.length && y >= 0 && y < arr.length && arr[x-1][y] == -1 ) res++;
            if( x-1 >=0 && x-1 <arr.length && y+1 >= 0 && y+1 <arr.length && arr[x-1][y+1] == -1 ) res++;
            return res;
        }else{
            return -1;
        }

    }
    /**如果周围没有雷全部显示*/
    //这里应该还要写一个 0 周围的所有八个格子都要显示
    private static  void showRound(int x,int y){
        book[x][y] = 1;
        int [][] next = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
        for(int k=0;k<next.length;k++){
            int tx = x + next[k][0];
            int ty = y + next[k][1];
            if(tx >=0 && tx < arr.length && ty >=0 && ty < arr.length && book[tx][ty] == 0){
                book[tx][ty] = 1;
                wipeCount++;

                if(arr[tx][ty] == 0){
                    showRound(tx,ty);
                }
            }
        }
    }
    // 建立一个点击某个按钮 根据不同的按钮显示不同的界面
    public static void showViewByButton(int num,IndexJButton eventButton){

    }
    // 采用java的swing组件编写界面
    public  void produceView() throws Exception {
        JFrame jf = new JFrame("简易扫雷");
        JPanel jp = new JPanel();
        GridLayout gl = new GridLayout(15,15);//java.lang.Integer
        jp.setLayout(gl);
        //JPanel jp = new JPanel(new GridLayout(20,20,0,0));
        MouseListener ml = new MouseListener() {


            public void mouseReleased(MouseEvent e) {
            }


            public void mousePressed(MouseEvent e) {
            }


            public void mouseExited(MouseEvent e) {
            }


            public void mouseEntered(MouseEvent e) {
            }

            public void mouseClicked(MouseEvent e) {

                try {
                    mus = new File(SRC_URL+"7116.wav").toURI().toURL();
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                }
                Applet.newAudioClip(mus).play();
                if(e.getButton() == 1){
                    // 表示鼠标左击 打开
                    IndexJButton eventButton = (IndexJButton) e.getSource();
                    int x = eventButton.x;
                    int y = eventButton.y;
                    if(arr[x][y] == 0){
                        wipeCount++;

                        showRound(x, y);
                        if(wipeCount == 185){
                            // 表示成功完成任务

                            try {
                                mus = new File(SRC_URL+"8745.wav").toURI().toURL();
                            } catch (MalformedURLException e1) {
                                e1.printStackTrace();
                            }
                            Applet.newAudioClip(mus).play();
                            JOptionPane.showMessageDialog
                                    (null, "你胜利了"+wipeCount+"个格子", "你胜利了", JOptionPane.ERROR_MESSAGE);

                        }
                        for(int m=0;m<book.length;m++){
                            for(int n=0;n<book[m].length;n++){
                                if(book[m][n] == 1){
                                    String str;
                                    if(arr[m][n] == 0){
                                        str = "";
                                    }else{
                                        str = arr[m][n]+"";
                                    }
                                    button = null;
                                    button = buttons[m][n];
                                    //button.setContentAreaFilled(false);
                                    //button.setEnabled(false);
                                    //button.setText(str);

                                    try {
                                        button.setIcon(new ImageIcon(new File(SRC_URL+"11"+arr[m][n]+".jpg").toURI().toURL()));
                                    } catch (MalformedURLException e1) {
                                        e1.printStackTrace();
                                    }
                                    //System.out.println(arr[x][y]);
                                }
                            }
                        }
                    }else if(arr[x][y] > 0){
                        wipeCount++;
                        if(wipeCount == 185){
                            // 表示成功完成任务
                            try {
                                mus = new File(SRC_URL+"8745.wav").toURI().toURL();
                            } catch (MalformedURLException e1) {
                                e1.printStackTrace();
                            }
                            Applet.newAudioClip(mus).play();
                            JOptionPane.showMessageDialog
                                    (null, "你胜利了"+wipeCount+"个格子", "你胜利了", JOptionPane.ERROR_MESSAGE);

                        }
                        try {
                            eventButton.setIcon(new ImageIcon(new File(SRC_URL+"11"+arr[x][y]+".jpg").toURI().toURL()));
                        } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                        }
                        book[x][y] = 1;
                        String str = arr[x][y]+"";
                        //eventButton.setContentAreaFilled(false);
                        //eventButton.setEnabled(false);
                        //eventButton.setText(str);
                    }else{
                        //表示踩到雷了

                        try {
                            mus = new File(SRC_URL+"4127.wav").toURI().toURL();
                        } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                        }
                        Applet.newAudioClip(mus).play();
                        JOptionPane.showMessageDialog
                                (null, "你踩到了雷,成功排了"+wipeCount+"个格子", "你失败了", JOptionPane.ERROR_MESSAGE);
                        System.exit(0);
                    }
                }else if(e.getButton() == 3){
                    // 表示鼠标右击 标记雷
                    IndexJButton eventButton = (IndexJButton) e.getSource();
                    int x = eventButton.x;
                    int y = eventButton.y;
                    if(book[x][y] != 1 && book[x][y] ==0){
                        // 表示这个格子还没有被打开
                        try {
                            eventButton.setIcon(new ImageIcon(new File(SRC_URL+"biaoji.jpg").toURI().toURL()));
                        } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                        }
                        book[x][y] = 3;//表示这个地方被标记成雷区
                    }else if(book[x][y] == 3){
                        try {
                            eventButton.setIcon(new ImageIcon(new File(SRC_URL+"wen.jpg").toURI().toURL()));
                        } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                        }
                        book[x][y] = 4;
                    }else if(book[x][y] == 4){
                        try {
                            eventButton.setIcon(new ImageIcon(new File(SRC_URL+"repare.jpg").toURI().toURL()));
                        } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                        }
                        book[x][y] = 0;
                    }
                }

            }
        };
        /*
        ActionListener al = new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                IndexJButton eventButton = (IndexJButton) e.getSource();
                int x = eventButton.x;
                int y = eventButton.y;
                if(arr[x][y] == 0){
                    showRound(x, y);
                    for(int m=0;m<book.length;m++){
                        for(int n=0;n<book[m].length;n++){
                            if(book[m][n] == 1){
                                String str;
                                if(arr[m][n] == 0){
                                     str = "";
                                }else{
                                     str = arr[m][n]+"";
                                }
                                button = null;
                                button = buttons[m][n];
                                button.setContentAreaFilled(false);
                                button.setEnabled(false);
                                button.setText(str);
                                //System.out.println(arr[x][y]);
                            }
                        }
                    }
                }else if(arr[x][y] > 0){
                    book[x][y] = 1;
                    String str = arr[x][y]+"";
                    eventButton.setContentAreaFilled(false);
                    eventButton.setEnabled(false);
                    eventButton.setText(str);
                }else{
                    //表示踩到雷了
                    JOptionPane.showMessageDialog
                    (null, "你踩到了雷,成功排了"+wipeCount+"个格子", "你失败了", JOptionPane.ERROR_MESSAGE);
                    System.exit(0);
                }
            }

        };
        */
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr.length;j++){
                buttons[i][j] = new IndexJButton(i,j);
                buttons[i][j].setIcon(new ImageIcon(new File(SRC_URL+"repare.jpg").toURI().toURL()));
                //buttons[i][j].addActionListener(al); //每个按钮的事件处理者都是al
                buttons[i][j].addMouseListener(ml);
                jp.add(buttons[i][j]);
            }
        }
        jf.add(jp);
        jf.pack(); //组件放入完成后,用pack()可以自动调节大小
        jf.setSize(650,650); //设置窗口大小
        jf.setVisible(true); //设置窗口可见,默认是不可见的
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时退出
        jf.setLocation(300,0);
        jf.setResizable(false);//设置窗口大小不可变
    }
    /**开场音乐*/
    public void sound() throws MalformedURLException {
        //mus = this.getClass().getResource("./resources/8730.wav");
        mus = new File(SRC_URL+"8730.wav").toURI().toURL();
        Applet.newAudioClip(mus).play();
    }
    public static void main(String[] args) throws Exception {

        paintMoRen();
        SweepBySwing sb = new SweepBySwing();
        //System.out.println(sb.getClass().getResource("/").getPath());
        sb.sound();
        sb.produceView();

    }

}

希望对初学的同学有帮助吧,毕竟学习还是要建立在兴趣的基础之上才会有动力坚持。
源码地址 https://github.com/laofuzi123/simpleMineClearance.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容