java连连看项目汇报_java连连看小项目 - osc_x4wlt5vu的个人空间 - OSCHINA - 中文开源技术交流社区...
/*
*本人也是刚入门,希望各位多多指教
*该项目主要代码在于连线
*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 - 中文开源技术交流社区...相关推荐
- java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
Java 环境变量和路径 在 Solaris 系统上,必须先设置 JAVA_HOME 和 PATH 环境变量,Sun Management Center 3.6 安装向导.设置向导和 Java 控制台 ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
- java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...
类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性. eg: //** *创建一个父类Teacher,父类有两个属性name,age,两个方法sleep(),tea ...
- java网络编程 听_java网络编程 - 亲亲媛的个人空间 - OSCHINA - 中文开源技术交流社区...
一.TCP/UDP,Socket,Http,Ftp简介 1.TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议(支持网间互联的数据报协议 ...
- java回调函数的生命_Java的回调函数 - choaklin 的个人空间 - OSCHINA - 中文开源技术交流社区...
暂且不提回调函数的各种定义,如我本人,虽然知道JavaScript的回调的使用,但是百科了回调的定义,还是觉得云里来雾里去.所以大可先从已熟悉的入手,旁推侧引它的原理,再引出Java版的实现. 因为博 ...
- java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...
Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...
- java拼图_JAVA实现拼图游戏 - osc_yozufu01的个人空间 - OSCHINA - 中文开源技术交流社区...
package org.test; /** * Title: LoonFramework * Description:拼图图像处理[未优化] * Copyright: Copyright (c) 20 ...
- java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...
Java锁和并发需要结合在一块了理解,涉及到了多个话题. 本文主要参考了 http://ifeve.com/java_lock_see1/ 但是我认为原文中有某些错误,我在下面的代码中做了修改. 公平 ...
- java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...
java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...
最新文章
- 如何设计一款电商产品?
- 我读了这七本书,写了这篇关于如何高效阅读的文章(转)
- BLE】CC2541之通过RSSI测距
- Ajax发送formdata数据,SpringMVC后台处理
- 使用C++实现DPCM编码(左向预测8bit、4bit、2bit、1bit和上向预测8bit)(更新过)
- servlet容器_Tomcat 容器与servlet的交互原理
- 寻找榜样的力量!CSDN【百万人学 AI】评选活动重磅启动
- UC浏览器电脑版播放视频时出现崩溃怎么解决
- 无法发送具有此谓词类型的内容正文_采用多模态细化类型进行程序合成
- sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库
- I00025 寻找循环数
- oracle中的函数
- 雅诗兰黛公司宣布品牌集群领导层更新
- 详解:什么是NVMe?
- 耿建超英语语法---非谓语动词作同位语和定语
- 国产小家电品牌如何用dtc模式打造新中产超爆款?
- 国外计算机cpu排行,电脑处理器排行榜_电脑处理器排行榜最新2020
- 破解帐户后,黑客重现如何榨干用户的最终价值
- sql 凭证明细表 科目余额表_科目余额SQL
- 最简单的混合开发教程:APICloud.
热门文章
- 【轴承故障分解】基于 ITD实现轴承故障信号分解含Matlab源码
- 连接超时计算机无法连接失败,爱思助手无法连接或者连接超时解决办法
- Android中设置分割线
- poi 操作 导出excel 合并列
- 自媒体人绝对要知道的6款软件工具!免费文案、配音不在话下
- Microsoft XBOX 360 Project Natal 体感装置2010年6月15正式发布产品正式命名为“Kinect”...
- 刘强东的“毛乌素”之斗
- 工程造价能不能预防超预算
- win10虚拟机搭建 Hadoop集群
- ios开发遇到的memory持续上涨导致页面crash解决思路总结