用java实现的连连看小游戏(绝对能运行(真的))

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//连连看java源代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5]; //游戏按钮数组
JButton exitButton,resetButton,newlyButton;
//退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0"); //分数标签
JButton firstButton,secondButton; //分别记录两次被选中的按钮
int grid[][] = new int[8][7]; //储存游戏按钮位置
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(){
mainFrame=new JFrame("连连看");
//为新窗体分配内存,并将其窗体命名为连连看
thisContainer = mainFrame.getContentPane();
//窗体调用getContentPane()方法得到其内容面板
thisContainer.setLayout(new BorderLayout());
//设置内容面板布局为边框布局
centerPanel=new JPanel(); //声明新对象,并为其分配内存
southPanel=new JPanel();
northPanel=new JPanel();
thisContainer.add(centerPanel,"Center"); //向窗体中添加三个Panel
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(new GridLayout(6,5));
//将容器中的centerPanel面板划分为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);
//向程序中创建的窗口对象llk中添加监视器
centerPanel.add(diamondsButton[cols][rows]);
//向centerPanel中添加按钮
}
}
exitButton=new JButton("退出");
//为新按钮分配内存,并将该按钮命为退出
exitButton.addActionListener(this);
resetButton=new JButton("重列");
resetButton.addActionListener(this);
//将窗口作为exitButton的按钮
newlyButton=new JButton("再来一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
//在southPanel中添加exitButton按钮
southPanel.add(newlyButton);
//在southPanel中添加exitButton按钮
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
//设置分数标签上的文本格式,先获取分数标签中的文本内容,并将//其数字格式字符串转换为int型,然后转换为字符串形式
northPanel.add(fractionLable);
//将分数标签添加到northPanel面板中
mainFrame.setBounds(280,100,500,450); //设置主窗体坐标
mainFrame.setVisible(true);
}
public void randomBuild() {
//随机构造方法,产生0~1的随机数,不包括0和1
int randoms,cols,rows;
for(int twins=1;twins<=15;twins++)

{
randoms=(int)(Math.random()*25+1);
//将Math类的random得到的随机数强制转化为整型
for(int alike=1;alike<=2;alike++) {
cols=(int)(Math.random()*6+1);
//将Math类的random得到的随机数强制转化为整型,并送给cols
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
//当网格中的内容不是0时,行和列将得到整型随机数
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=randoms;
//将得到的随机数放入llk窗体中的网格中
}
}
}
public void fraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
}
public void reload() { //重载方法
int save[] = new int[30]; //声明数组,并为之分配内存
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) { //当grid数组中的内容不为0
save[n]=this.grid[i][j]; //将grid数组中的内容送给数组save[n],并保存
n++;
}
}
}
n=n-1;
this.grid=grid;
//局部变量与成员变量名字相同,成员变量被隐藏,想在reload方法//中使用成员变量,必须使用关键字this
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]; //将数组save[n]中的内容送给grid数组
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) //当grid数组中某一项内容为0时
diamondsButton[i][j].setVisible(false);
}
}
}
public void estimateEven(int placeX,int placeY,JButton bz) {
if(pressInformation==false) { //没有按钮被选中
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true; //有按钮被选中
}
else {
x0=x;
y0=y;
fristMsg=secondMsg;
firstButton=secondButton; //两次被选中按钮相同
x=placeX;
y=placeY;
secondMsg=grid[x][y]; //第二条消息保存在网格坐标(x,y)处
secondButton=bz;
if(fristMsg==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//如果第二个按钮的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 ) {
//如果第二个按钮的y坐标等于空按钮的y坐标,说明第一个按钮与//第二个按钮是同一个按钮
linePassOne();
}
}
if (k==2) { //通过第二次验证
if (x0==x) { //如果第一个按钮的x0坐标与第二个按钮的x坐标相同
remove(); //消去相同的按钮
}
if (x0for (n=x0;n<=x-1;n++ ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 && n==x-1) {
remove();
}
}
}
if (x0>x) {
//如果第一个按钮的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) {
//如果第一个按钮的x0坐标小于第二个按钮的x坐标,说明第一个按//钮在第二个按钮左边
for (j=x-1;j>=i ;j-- ) {
if (grid[j][y]!=0) {
k=0;
break;
}
else { k=1; } //k=1,说明通过第一次验证
}
if (k==1) {
rowPassOne();
}
}
if (x//如果第一个按钮的x0坐标小于第二个按钮的x坐标,说明第一个按//钮在第二个按钮右边

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) { //如果第一个按钮的x0坐标等于第二个按钮的x坐标
rowPassOne();
}
}
if (k==2){
if (y0==y) {
//如果第一个按钮的y0坐标等于第二个按钮的y坐标
remove();
}
if (y0//如果第一个按钮的y0坐标小于第二个按钮的y坐标,说明第一个按//钮在第二个按钮下边
for (n=y0;n<=y-1 ;n++ ) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 && n==y-1) {
remove();
}
}
}
if (y0>y) {
//如果第一个按钮的y0坐标等于第二个按钮的y坐标,说明第一个按//钮在第二个按钮上边
for (n=y0;n>=y+1 ;n--) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 && n==y+1) {
remove();
}
}
}
}
}
}
}
public void linePassOne(){
if (y0>j){ //第一按钮同行空按钮在左边
for (i=y0-1;i>=j ;i-- ){ //判断第一按钮同左侧空按钮之间有没按钮
if (grid[x0][i]!=0) {
k=0;
break;
}
else { k=2; } //K=2说明通过了第二次验证
}
}
if (y0for (i=y0+1;i<=j ;i++){
if (grid[x0][i]!=0) {
k=0;
break;
}
else{ k=2; }
}
}
}
public void r

owPassOne(){
if (x0>i) { //第一个按钮同列空按钮在上面
for (j=x0-1;j>=i ;j-- ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
if (x0for (j=x0+1;j<=i ;j++ ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
}
public void remove(){
firstButton.setVisible(false);
secondButton.setVisible(false);
fraction();
pressInformation=false;
k=0;
grid[x0][y0]=0;
grid[x][y]=0;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==newlyButton){
//获取发生ActionEvent事件源对象的引用,即newlyButton的引用
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
init();
}
if(e.getSource()==exitButton)
System.exit(0);
if(e.getSource()==resetButton)
reload();
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
if(e.getSource()==diamondsButton[cols][rows])
estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);
}
}
}
public static void main(String[] args) {
lianliankan llk = new lianliankan();
llk.randomBuild();
llk.init();
}
}

相关文档
最新文档