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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。