java连连看课程设计报告,连连看游戏的设计与实现

  java连连看课程设计报告,连连看游戏的设计与实现

  本文分享JAVA语言课程设计:连连看游戏,供大家参考。具体内容如下

  00-1010接口中有一个5*10接口。图中有6张不同的图片,每两张相同的图片连在一起。如果连接线匝数=3次,则两幅图可以同时剪掉,否则不能剪掉。

  00-1010颜色鲜艳,用鼠标点击按键很容易。固定时间擦除所有图片就是胜利。如果时间到了还有图片,那就失败了。

  00-1010 1)建立一个接口。首先,构建一个简单的界面。可以先用按钮代替图片,可以先少做几行几列,如下图所示:2)用户每次选择两个图形,如果图形满足一定条件(两个图形相同,中间有一条少于3圈的路径),两个图形都可以被擦除。给定任意两个具有相同模式的格子,我们需要找到这两个格子之间具有最少格数和最少转弯数的路径。如果该最优路径的转弯数小于3,则可以消除这两个网格。3)定义擦除方法,可以实现。当执行擦除功能时,可以取消两个按钮。4)在检验两个方块是否可以消除时,我们要使两个方块同时满足两个条件,即两个方块配对连接成功。

  分3种情况:(从下面的三种情况,我们可以知道需要三种测试,而这三种测试分别测试一条笔直的道路。所以会有三条路。如果三条路线都是空按钮,那么只有三条直线(两个转折点)连接两个按钮)

  * 1.相邻* 2。如果不相邻,首先在第一个按钮的对等体中找到一个空按钮。1).找到后,看第二个按钮所在的列中是否有一个按钮与这个空按钮水平。2).如果没有,就看第一个按钮和与之配套的空按钮之间是否有按钮。3)如果没有,从有第一个按钮的空按钮垂直看向有第二个按钮的空按钮,看是否有按钮。如果没有,路线就通过了,可以淘汰。* 3.如果2失败,在第一个按钮的同一列中找到一个空按钮。1).找到后,看第二个按钮是否垂直于这个空按钮所在的行。2).如果没有,看第一个按钮和与其同列的空按钮之间是否有按钮。3)如果没有,从与第一个按钮同列的空按钮横向看,看是否有与第二个按钮同列的按钮。如果没有,路就过去了,可以消失了。

  *如果上述三个步骤失败,则两个按钮无法擦除。

  5)在出现死锁的情况下,我们也可以暂时不终止游戏,而是随机打乱局面(即点击“重新排序”按钮)来打破“死锁”局面。6)设计时间限制,即如果在规定时间内没有消除所有按钮,游戏结束。7)设计通关模式,可以以所有按钮被淘汰,或者分数达到一定阈值为通关依据。8)每一级的规定时间要逐渐减少。9)尝试把按钮换成图片。可以用数组定义图片的名称,然后把随机选择的按钮改成随机选择的数组下标,这样就实现了选择图片的功能。

  代码如下:

  包测试1导入Java。awt。borderlayout导入Java。awt。容器;导入Java。awt。gridlayout导入Java。awt。工具包;导入Java。awt。事件。动作事件;导入Java。awt。事件。动作监听器;导入Java。util。计时器;导入javax。挥棒。jbutton导入javax。挥棒。jframe导入javax。挥棒。jlabel导入javax。挥棒。jpanel公共类连连看实现动作监听器{ JFrame mainFrame//主面板容器thisContainerJPanel中心面板,southPanel,northPanel//子面板JButton diamonds button[][]=new JButton[6][5];//游戏按钮数组JButton exitButton,resetButton,new ybutton//退出,重列,重新开始按钮JLabel fractional table=new JLabel( 0 );//分数标签JButton firstButton,secondButton//分别记录两次被选中的按钮int grid[][]=new int[8][7];//储存游戏按钮位置(同Internationalorganizations)国际组织得分=0;静态布尔表达式信息=假;//判断是否有按钮被选中int x0=0,y0=0,x=0,y=0,firstMsg=0,second msg=0;//游戏按钮的位置坐标int i,j,k,n;//消除方法控制public void init(){ mainFrame=new JFrame( JKJ连连看);本次比赛

  ainer = mainFrame.getContentPane();        thisContainer.setLayout(new BorderLayout());        centerPanel = new JPanel();        southPanel = new JPanel();        northPanel = new JPanel();        thisContainer.add(centerPanel, "Center");        thisContainer.add(southPanel, "South");        thisContainer.add(northPanel, "North");        centerPanel.setLayout(new GridLayout(6, 5));        for (int cols = 0; cols < 6; cols++) {            for (int rows = 0; rows < 5; rows++) {                diamondsButton[cols][rows] = new JButton(String.valueOf(grid[cols + 1][rows + 1]));                diamondsButton[cols][rows].addActionListener(this);                centerPanel.add(diamondsButton[cols][rows]);            }        }        exitButton = new JButton("退出");        exitButton.addActionListener(this);        resetButton = new JButton("重列");        resetButton.addActionListener(this);        newlyButton = new JButton("再来一局");        newlyButton.addActionListener(this);        southPanel.add(exitButton);        southPanel.add(resetButton);        southPanel.add(newlyButton);        fractionLable.setText("分数:"+score);        northPanel.add(fractionLable);        int width=Toolkit.getDefaultToolkit().getScreenSize().width;        int height=Toolkit.getDefaultToolkit().getScreenSize().height;        mainFrame.setBounds((width-500)/2,(height-500)/2, 500, 500);        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        mainFrame.setResizable(false);        mainFrame.setVisible(true);    }    public void randomBuild() {        int randoms, cols, rows;        for (int twins = 1; twins <= 15; twins++) {  //生成15个随机数            randoms = (int) (Math.random() * 15 + 1);            for (int alike = 1; alike <= 2; alike++) {   //每次将这个数放在两个位置                cols = (int) (Math.random() * 6 + 1);                rows = (int) (Math.random() * 5 + 1);  //随机生成数组坐标[cols,rows]                while (grid[cols][rows] != 0) {         //如果这个位置已经赋值了,重新生成。                    cols = (int) (Math.random() * 6 + 1);                    rows = (int) (Math.random() * 5 + 1);                }                this.grid[cols][rows] = randoms;    //将这个随机数赋到数组中。            }        }    }    //显示分数    public void fraction() {        score+=100;        fractionLable.setText(score+"");    }    //重列方法的实现    public void reload() {        int save[] = new int[50];        int n = 0, cols, rows;        int grid[][] = new int[8][7];        for (int i = 0; i <= 6; i++) {            for (int j = 0; j <= 5; j++) {                if (this.grid[i][j] != 0) {                    save[n] = this.grid[i][j];                    n++;                }            }        }        n--;        this.grid = grid;        while (n >= 0) {            cols = (int) (Math.random() * 6 + 1);            rows = (int) (Math.random() * 5 + 1);            while (grid[cols][rows] != 0) {  //如果已经赋值了,重新生成                cols = (int) (Math.random() * 6 + 1);                rows = (int) (Math.random() * 5 + 1);            }            this.grid[cols][rows] = save[n];            n--;        }        mainFrame.setVisible(false);        pressInformation = false; // 这里一定要将按钮点击信息归为初始        init();        for (int i = 0; i < 6; i++) {            for (int j = 0; j < 5; j++) {                if (grid[i + 1][j + 1] == 0)                    diamondsButton[i][j].setVisible(false);            }        }    }    public void estimateEven(int placeX, int placeY, JButton bz) {        if (pressInformation == false) {//如果以前没点击过            x = placeX;            y = placeY;      //记录这个按钮坐标[x,y]            secondMsg = grid[x][y];            secondButton = bz;//记录这个按钮的信息            pressInformation = true;        } else {           //如果以前点击过            x0 = x;                y0 = y;            firstMsg = secondMsg;            firstButton = secondButton;    //将上一次的button按钮信息赋给first            x = placeX;            y = placeY;            secondMsg = grid[x][y];        //将这次点击按钮的信息记录下来            secondButton = bz;            if (firstMsg == secondMsg && secondButton != firstButton) {                xiao();            }        }    }    public void xiao() { // 相同的情况下能不能消去。仔细分析,不一条条注释        if ((x0 == x && (y0 == y + 1 y0 == y - 1)) ((x0 == x + 1 x0 == x - 1) && (y0 == y))) { // 判断是否相邻            remove();        } else {            for (j = 0; j < 7; j++) {                if (grid[x0][j] == 0) { // 判断第一个按钮同行哪个按钮为空                    if (y > j) { // 如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边                        for (i = y - 1; i >= j; i--) { // 判断第二按钮左侧直到第一按钮中间有没有按钮                            if (grid[x][i] != 0) {                                k = 0;                                    break;                            } else {                                k = 1;                            } // K=1说明通过了第一次验证                        }                        if (k == 1) {                            linePassOne();                        }                    }                    if (y < j) { // 如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边                        for (i = y + 1; i <= j; i++) { // 判断第二按钮左侧直到第一按钮中间有没有按钮                            if (grid[x][i] != 0) {                                k = 0;                                break;                            } else {                                k = 1;                            }                        }                        if (k == 1) {                            linePassOne();                        }                    }                    if (y == j) {                        linePassOne();                    }                }                if (k == 2) {                    if (x0 == x) {                        remove();                    }                    if (x0 < x) {                        for (n = x0; n <= x - 1; n++) {                            if (grid[n][j] != 0) {                                k = 0;                            }                            if (grid[n][j] == 0 && n == x - 1) {                                remove();                            }                        }                    }                    if (x0 > x) {                        for (n = x0; n >= x + 1; n--) {                            if (grid[n][j] != 0) {                                k = 0;                                break;                            }                            if (grid[n][j] == 0 && n == x + 1) {                                remove();                            }                        }                    }                }            }            for (i = 0; i < 8; i++) { // 列                if (grid[i][y0] == 0) {                    if (x > i) {                        for (j = x - 1; j >= i; j--) {                            if (grid[j][y] != 0) {                                k = 0;                                break;                            } else {                                k = 1;                            }                        }                        if (k == 1) {                            rowPassOne();                        }                    }                    if (x < i) {                        for (j = x + 1; j <= i; j++) {                            if (grid[j][y] != 0) {                                k = 0;                                break;                            } else {                                k = 1;                            }                        }                        if (k == 1) {                            rowPassOne();                        }                    }&nbs

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: