/*

*本人也是刚入门,希望各位多多指教

*该项目主要代码在于连线

*1.2个连线没有拐弯

*2.2个连线有一个拐弯

*3.2个连线有2个拐弯

*采用递归算法

*/

package llk;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class llk implements ActionListener {

JFrame mainf;

Container c1;

JPanel centerPanel, southPanel, northPanel;

JButton diamondsButton[][] = new JButton[11][10];// 游戏按钮数组

JButton exitButton, resetButton, newlyButton;// 退出,重列,重新开始按钮

JLabel fractionLable = new JLabel("0"); // 分数标签

JButton firstButton, secondButton;

int grid[][] = new int[13][12];

static boolean pressInformation = false;

int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; // 游戏按钮的位置坐标

int i, j, k, n;// 消除方法控制

public void init() {

mainf = new JFrame("连连看");

c1 = mainf.getContentPane();

c1.setLayout(new BorderLayout());

centerPanel = new JPanel();

southPanel = new JPanel();

northPanel = new JPanel();

c1.add(centerPanel, "Center");

c1.add(southPanel, "South");

c1.add(northPanel, "North");

centerPanel.setLayout(new GridLayout(11, 10));

for (int cols = 0; cols < 11; cols++) {

for (int rows = 0; rows < 10; rows++) {

diamondsButton[cols][rows] = new JButton(

String.valueOf(grid[cols + 1][rows + 1]));

diamondsButton[cols][rows].addActionListener(this);

centerPanel.add(diamondsButton[cols][rows]);

for (int i = 1; i <= 10; i++) {

ImageIcon icon = new ImageIcon("src/image/" + i + ".jpg");

if (grid[cols + 1][rows + 1] == i) {

diamondsButton[cols][rows].setIcon(icon);

}

}

}

}

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(String.valueOf(Integer.parseInt(fractionLable

.getText())));

northPanel.add(fractionLable);

mainf.setBounds(280, 100, 600, 600);

mainf.setVisible(true);

mainf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void randombulid() {

int randoms, col, row;

for (int t = 1; t <= 55; t++) {

randoms = (int) (Math.random() * 10 + 1);

for (int a = 1; a <= 2; a++) {

col = (int) (Math.random() * 11 + 1);

row = (int) (Math.random() * 10 + 1);

while (grid[col][row] != 0) {

col = (int) (Math.random() * 11 + 1);

row = (int) (Math.random() * 10 + 1);

}

grid[col][row] = randoms;

}

}

}

public void reload() {

int r = 0, cols, rows;

int save[] = new int[110];

for (int q = 1; q <= 11; q++) {

for (int w = 1; w <= 10; w++) {

if (grid[q][w] != 0) {

save[r] = grid[q][w];

r++;

}

}

}

r = r - 1;

for (int q = 1; q <= 11; q++) {

for (int w = 1; w <= 10; w++) {

grid[q][w] = 0;

}

}

while (r >= 0) {// 把没有消去的button重新放一次

cols = (int) (Math.random() * 11 + 1);

rows = (int) (Math.random() * 10 + 1);

while (grid[cols][rows] != 0) {

cols = (int) (Math.random() * 11 + 1);

rows = (int) (Math.random() * 10 + 1);

}

this.grid[cols][rows] = save[r];

r--;

}

mainf.setVisible(false);

pressInformation = false; // 这里一定要将按钮点击信息归为初始

init();

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 10; j++) {

if (grid[i + 1][j + 1] == 0)

diamondsButton[i][j].setVisible(false);

}

}

}

public void jilu(int placeX, int placeY, JButton bz) {

if (pressInformation == false) {

x = placeX;

y = placeY;

fristMsg = grid[x][y];

firstButton = bz;

pressInformation = true;

} else {

x0 = x;

y0 = y;

secondMsg = fristMsg;

secondButton = firstButton;

x = placeX;

y = placeY;

fristMsg = grid[x][y];

firstButton = bz;

if (fristMsg == secondMsg && secondButton != firstButton) {

if (xiao2(x, y, x0, y0) == true) {

remove();

}

if (xiao3(x, y, x0, y0) == true) {

remove();

}

if (xiao4(x, y, x0, y0) == true) {

remove();

}

}

pressInformation = false;

}

}

public void fraction() {

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText()) + 100));

}

public void remove() {

firstButton.setVisible(false);

secondButton.setVisible(false);

fraction();

grid[x0][y0] = 0;

grid[x][y] = 0;

}

public boolean xiao2(int a, int b, int a0, int b0) {

boolean state = false;

// 0折,同一行,之间没有控件,则可以消去

if ((a > a0) && (b == b0)) {

if (a == a0 + 1) {

state = true;

} else {

for (int i = a - 1; i > a0; i--) {

if (grid[i][b] != 0) {

state = false;

break;

} else {

state = true;

}

}

}

}

if ((a < a0) && (b == b0)) {

if (a == a0 - 1) {

state = true;

} else {

for (int i = a + 1; i < a0; i++) {

if (grid[i][b] != 0) {

state = false;

break;

} else {

state = true;

}

}

}

}

// 0折,同一列,之间没有控件,则可以消去

if ((a == a0) && (b > b0)) {

if (b == b0 + 1) {

state = true;

} else {

for (int i = b - 1; i > b0; i--) {

if (grid[a][i] != 0) {

state = false;

break;

} else {

state = true;

}

}

}

}

if ((a == a0) && (b < b0)) {

if (b == b0 - 1) {

state = true;

} else {

for (int i = b + 1; i < b0; i++) {

if (grid[a][i] != 0) {

state = false;

break;

} else {

state = true;

}

}

}

}

return state;

}

public boolean xiao3(int a, int b, int a0, int b0) {

boolean state = false;

if (xiao2(a, b, a0, b) == true && xiao2(a0, b0, a0, b) == true

&& grid[a0][b] == 0) {

state = true;

}

if (xiao2(a, b, a, b0) == true && xiao2(a0, b0, a, b0) == true

&& grid[a][b0] == 0) {

state = true;

}

return state;

}

public boolean xiao4(int a, int b, int a0, int b0) {

boolean state = false;

// (a,b)正右边的点

for (int i = a + 1; i <= grid.length - 1; i++) {

if (grid[i][b] == 0) {

if (xiao3(i, b, a0, b0) == true) {

state = true;

}

}

}

// (a,b)正左边的点

for (int i = a - 1; i >= 0; i--) {

if (grid[i][b] == 0) {

if (xiao3(i, b, a0, b0) == true) {

state = true;

}

}

}

// (a,b)正上方的点

for (int i = b + 1; i <= grid[b].length - 1; i++) {

if (grid[a][i] == 0) {

if (xiao3(a, i, a0, b0) == true) {

state = true;

}

}

}

// (a,b)正下方的点

for (int i = b - 1; i >= 0; i--) {

if (grid[a][i] == 0) {

if (xiao3(a, i, a0, b0) == true) {

state = true;

}

}

}

return state;

}

public static void main(String[] args) {

llk l = new llk();

l.randombulid();

l.init();

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == newlyButton) {

int grid[][] = new int[13][12];

this.grid = grid; randombulid(); mainf.setVisible(false);

pressInformation = false;

init();

}

if (e.getSource() == exitButton)

System.exit(0);

if (e.getSource() == resetButton)

reload();

for (int cols = 0; cols < 11; cols++) {

for (int rows = 0; rows < 10; rows++) {

if (e.getSource() == diamondsButton[cols][rows])

jilu(cols + 1, rows + 1, diamondsButton[cols][rows]);

}

}

}

}

java连连看项目汇报_java连连看小项目 - osc_x4wlt5vu的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java 环境变量和路径 在 Solaris 系统上,必须先设置 JAVA_HOME 和 PATH 环境变量,Sun Management Center 3.6 安装向导.设置向导和 Java 控制台 ...

  2. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  3. java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...

    类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性. eg: //** *创建一个父类Teacher,父类有两个属性name,age,两个方法sleep(),tea ...

  4. java网络编程 听_java网络编程 - 亲亲媛的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.TCP/UDP,Socket,Http,Ftp简介 1.TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议(支持网间互联的数据报协议 ...

  5. java回调函数的生命_Java的回调函数 - choaklin 的个人空间 - OSCHINA - 中文开源技术交流社区...

    暂且不提回调函数的各种定义,如我本人,虽然知道JavaScript的回调的使用,但是百科了回调的定义,还是觉得云里来雾里去.所以大可先从已熟悉的入手,旁推侧引它的原理,再引出Java版的实现. 因为博 ...

  6. java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...

  7. java拼图_JAVA实现拼图游戏 - osc_yozufu01的个人空间 - OSCHINA - 中文开源技术交流社区...

    package org.test; /** * Title: LoonFramework * Description:拼图图像处理[未优化] * Copyright: Copyright (c) 20 ...

  8. java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java锁和并发需要结合在一块了理解,涉及到了多个话题. 本文主要参考了 http://ifeve.com/java_lock_see1/ 但是我认为原文中有某些错误,我在下面的代码中做了修改. 公平 ...

  9. java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...

    java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...

最新文章

  1. 如何设计一款电商产品?
  2. 我读了这七本书,写了这篇关于如何高效阅读的文章(转)
  3. BLE】CC2541之通过RSSI测距
  4. Ajax发送formdata数据,SpringMVC后台处理
  5. 使用C++实现DPCM编码(左向预测8bit、4bit、2bit、1bit和上向预测8bit)(更新过)
  6. servlet容器_Tomcat 容器与servlet的交互原理
  7. 寻找榜样的力量!CSDN【百万人学 AI】评选活动重磅启动
  8. UC浏览器电脑版播放视频时出现崩溃怎么解决
  9. 无法发送具有此谓词类型的内容正文_采用多模态细化类型进行程序合成
  10. sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库
  11. I00025 寻找循环数
  12. oracle中的函数
  13. 雅诗兰黛公司宣布品牌集群领导层更新
  14. 详解:什么是NVMe?
  15. 耿建超英语语法---非谓语动词作同位语和定语
  16. 国产小家电品牌如何用dtc模式打造新中产超爆款?
  17. 国外计算机cpu排行,电脑处理器排行榜_电脑处理器排行榜最新2020
  18. 破解帐户后,黑客重现如何榨干用户的最终价值
  19. sql 凭证明细表 科目余额表_科目余额SQL
  20. 最简单的混合开发教程:APICloud.

热门文章

  1. 【轴承故障分解】基于 ITD实现轴承故障信号分解含Matlab源码
  2. 连接超时计算机无法连接失败,爱思助手无法连接或者连接超时解决办法
  3. Android中设置分割线
  4. poi 操作 导出excel 合并列
  5. 自媒体人绝对要知道的6款软件工具!免费文案、配音不在话下
  6. Microsoft XBOX 360 Project Natal 体感装置2010年6月15正式发布产品正式命名为“Kinect”...
  7. 刘强东的“毛乌素”之斗
  8. 工程造价能不能预防超预算
  9. win10虚拟机搭建 Hadoop集群
  10. ios开发遇到的memory持续上涨导致页面crash解决思路总结