【连连看】小游戏初始源代码

合集下载

scratch编程简单小游戏

scratch编程简单小游戏

scratch编程简单小游戏Scratch编程简单小游戏引言:Scratch是一款简单易用的图形化编程软件,适合初学者和儿童使用。

它可以帮助用户快速理解编程逻辑,通过拖拽积木模块的方式搭建程序,并实现自己的创意想法。

本文将介绍如何使用Scratch编程创建一个简单的小游戏,让您体验到编程的乐趣。

一、游戏概述我们将创建一个名为“连连看”的小游戏。

游戏规则是点击两个相同的方块使它们消除,当所有方块都被消除时,游戏胜利。

如果在游戏时间结束前无法消除所有方块,则游戏失败。

二、创建背景打开Scratch软件,在界面左侧选择选择一个合适的背景,比如森林、海洋或者夜晚城市。

通过拖拽背景图像到舞台区域,设置背景。

三、创建方块1. 创建一个新的角色:点击左上角的角色按钮,选择一个方块图像作为角色。

2. 设置角色的初始位置:在舞台区域点击角色,然后将其拖动到合适的位置。

3. 添加角色行为:点击角色按钮下方的“代码”选项卡,在代码区域选择“触摸”类别,在左侧选择“当角色被点击时”,将其拖到代码区域。

4. 添加交互逻辑:在“当角色被点击时”积木模块后面,连接“播放声音”积木模块,为其选择一个合适的声音。

四、创建连连看功能1. 创建多个方块:按照上述方式创建多个方块角色,并设置它们的初始位置。

2. 添加交互逻辑:点击角色按钮下方的“代码”选项卡,在代码区域选择“事件”类别,在左侧选择“当绿旗被点击时”,将其拖到代码区域。

3. 创建方块点击事件:在“当绿旗被点击时”积木模块后面,添加一个无限循环“重复”积木模块,设置重复次数为所创建的方块数。

4. 判断方块之间的距离:在“重复”积木模块内部,依次判断每对方块之间的距离是否小于一个预设的值。

5. 方块消除逻辑:如果两个方块之间的距离小于预设值,则将它们隐藏。

六、游戏结束逻辑1. 创建游戏结束事件:在代码区域选择“控制”类别,在左侧选择“当开始时”,将其拖到代码区域。

2. 检查方块是否全部消除:在“当开始时”积木模块后面,添加一个无限循环“重复”积木模块,设置重复次数为所创建的方块数。

连连看源代码

连连看源代码
panel1.add(b4); panel1.add(b5); panel1.add(b6);
panel1.add(b7); panel1.add(b8); panel1.add(b9);
panel1.add(b10); panel1.add(b11); panel1.add(b12);
f.pack();
f.setBounds(25,10,600,750);
f.setResizable(false);
f.setVisible(true);
bc.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) { ex(); }
bc=new Button(" EXIT");
br=new Button("RESET");
p1=new Button();
b1=new Button(String.valueOf(d[1][1]));
b2=new Button(String.valueOf(d[1][2]));
});
b23=new Button(String.valueOf(d[5][3]));
b24=new Button(String.valueOf(d[5][4]));
b25=new Button(String.valueOf(d[5][5]));
b26=new Button(String.valueOf(d[6][1]));
public void mouseClicked(MouseEvent e){ wei(1,1,b1); }
});

连连看源代码

连连看源代码

摘要:近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。

Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。

Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。

有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了.连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。

饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。

之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。

连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。

关键字:发展,java,连连看,程序设计;1.课程设计介绍课题设计的目的:1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。

2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。

3)熟练掌握JAVA语言中图形用户界面程序的编写;4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。

课程设计的要求:由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。

面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。

【连连看】小游戏初始源代码

【连连看】小游戏初始源代码

【连连看】简单小游戏初始源代码使用说明:进入Java开发工具eclipse中,在左面建立一个任意名的java project,然后在工程下建立一个名字为Lianliankan的package,最后建立一个名字为lianliankan的class类。

将以下程序代码复制入class内容面板中,点击运行。

package Lianliankan;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("JKJ连连看");thisContainer = 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(String.valueOf(Integer.parseInt(fractionLable.getText()))); northPanel.add(fractionLable);mainFrame.setBounds(280,100,500,450);mainFrame.setVisible(true);}public void randomBuild() {int randoms,cols,rows;for(int twins=1;twins<=15;twins++) {randoms=(int)(Math.random()*25+1);for(int alike=1;alike<=2;alike++) {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]=randoms;}}}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) {save[n]=this.grid[i][j];n++;}}}n=n-1;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;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];secondButton=bz;if(fristMsg==secondMsg && secondButton!=firstButton){xiao();}}}public void xiao() { //相同的情况下能不能消去。

连连看c语言代码,连连看C语言代码.doc

连连看c语言代码,连连看C语言代码.doc

连连看c语⾔代码,连连看C语⾔代码.doc #include void initialize(); //初始化void near1(int a,int b,int a1,int b1); //算法void print_chess(); //打印棋盘int exit_chess(); //判断是否结束//全局变量char chessman[10][10]; //编译系统初始化每个元素为0void main(){int row,line; //row是⾏号,line是列号int row2,line2; //row是⾏号,line是列号printf("\t\t\t按任意键开始\n");fflush(stdin);getch();initialize(); //初始化棋盘内容do{print_chess();printf("输⼊第⼀个:");fflush(stdin);scanf("%d.%d",&line,&row);printf("输⼊第⼆个:");fflush(stdin);scanf("%d.%d",&line2,&row2);if(chessman[line][row]!=chessman[line2][row2]){printf("两数不相同!\n"); //两数不同}else if(line==line2&&row==row2){printf("错误输⼊\n"); //输⼊相同的坐标,提⽰⽤户错误}else if(line<=line2){near1(line,row,line2,row2); //使⽤函数处理,第⼀个点⼀定在第⼆个点上⽅}else{near1(line2,row2,line,row); //使⽤函数处理}system("pause");}while(exit_chess());system("pause");printf("\n\n\n\t\t恭喜您,您胜利了!\n");printf("\n\t\t制作⼈:蒋睿⽴\n");printf("\n\t博客:http:\\");}void initialize() //初始化棋盘{int i,j; //⽤于循环计数int a[8]={0}; //记录哪些字符出现次数不是偶数srand(time(NULL));for(i=1;i<8;i++) //这⾥只随机前8⾏,留最后⼀⾏不打印for(j=1;j<9;j++){chessman[i][j]=rand()%8+65; //棋盘内容为⼤写字母A到Hif(chessman[i][j]==65) a[0]++; //记录A的个数if(chessman[i][j]==66) a[1]++; //记录B的个数if(chessman[i][j]==67) a[2]++; //记录C的个数if(chessman[i][j]==68) a[3]++; //记录D的个数if(chessman[i][j]==69) a[4]++; //记录E的个数if(chessman[i][j]==70) a[5]++; //记录F的个数if(chessman[i][j]==71) a[6]++; //记录G的个数if(chessman[i][j]==72) a[7]++; //记录H的个数}for(i=0;i<8;i++){if(a[i]%2!=0) //如果字符的个数是奇数就还需要打印⼀个chessman[8][i+1]=i+65;else //如果前⾯7⾏随机的A到H字符恰好是偶数,最后⼀⾏全是I字符chessman[8][i+1]=73;}}void print_chess() //打印棋盘内容{int i,j;system("cls");printf("\t 1 2 3 4 5 6 7 8 \n");for(i=0;i<10;i++){printf("\t\n\t");for(j=0;j<10;j++){printf("%4c",chessman[i][j]);if(j==9&&i!=0&&i!=9)printf("\t%d",i);}}printf("\n\n\n\n");}int exit_chess() //判断是否满⾜退出{int i,j;for(i=0;i<10;i++){for(j=0;j<10;j++)if(chessman[i][j]!=0)return 1; //只要有1个棋⼦不为0,就返回1}return 0;}void near1(int a,int b,int a1,int b1)int arow[2];int aline[2];int brow[2];int bline[2];int start=0,end=0; //临时两个点int i,j,n; //⽤于循环for(i=0;i<2;i++) //初始化数组{arow[i]=a;brow[i]=a1;aline[i]=b;bline[i]=b1;}(a,b) a⾏中有哪些列for(i=a+1;i<10;i++){if(chessman[i][b]==0)arow[1]=i; //arow[1]是A点a⾏向下向量elsebreak;}for(i=a-1;i>=0;i--){if(chessman[i][b]==0) //arow[0]是A点a⾏向上向量arow[0]=i;elsebreak;}(a1,b1) a1⾏中有哪些列for(i=a1+1;i<10;i++){if(chessman[i][b1]==0) //brow[1]是B点a1⾏向下向量brow[1]=i;break;}for(i=a1-1;i>=0;i--){if(chessman[i][b1]==0) //brow[0]是B点a1⾏向上向量{brow[0]=i;}else{break;}}//(a,b) b列中有哪些⾏for(i=b+1;i<10;i++){if(chessman[a][i]==0) //aline[1]是A点b列向右向量{aline[1]=i;}else{break;}}for(i=b-1;i>=0;i--){if(chessman[a][i]==0) //aline[0]是A点b列向左向量{aline[0]=i;}else{break;}}//(a1,b1) b1列中有哪些⾏for(i=b1+1;i<10;i++){if(chessman[a1][i]==0) //bline[1]是B点b1列向右向量{bline[1]=i;}else{break;}}for(i=b1-1;i>=0;i--)if(chessman[a1][i]==0) //bline[0]是B点b1列向左向量{bline[0]=i;}else{break;}}//关键算法////********************************情况⼀·(a,b)·(a1,b1)*********************************//*********************************情况⼆·(a,b)·(a1,b1)**********************************//*考虑上下向量*/if(brow[0]>=arow[0]) //向上⽅向向量 有共同的列向量start=brow[0]; //取⼤的elsestart=arow[0];if(brow[1]<=arow[1]) //向下⽅向向量 有共同的列向量end=brow[1]; //取⼩的elseend=arow[1];for(;start<=end;start++) //列向量上共同点start到end {/** b1要⼤于b,否则就交换如果不交换将使下⾯的循环出错*/if(b0)) //因为b与b1⼤⼩不能确定,所有有2个if chessman[a][b]=chessman[a1][b1]=0;if((n==b1-b)&&(n>0))chessman[a][b]=chessman[a1][b1]=0;}/*考虑左右向量*/if(aline[0]>=bline[0]) //向左的向量 有共同的⾏向量start=aline[0]; //取⼤的elsestart=bline[0];if(aline[1]0) //a1始终⼤于a{chessman[a][b]=chessman[a1][b1]=0;break;}}/********************************************************************************* * 同⾏ 或者 同列 ·(a,b)** · · 或者* (a,b) (a1,b1) ·(a1,b1) **********************************************************************************/ if(a==a1) //同⾏{if((aline[1]>=b1)||(aline[0]<=b1))chessman[a][b]=chessman[a1][b1]=0;}if(b==b1) //同列{if(arow[1]>=a1)chessman[a][b]=chessman[a1][b1]=0;}}。

《连连看》算法c语言演示(自动连连看)

《连连看》算法c语言演示(自动连连看)

《连连看》算法c语⾔演⽰(⾃动连连看)(图⽚是游戏的⽰意图,来⾃互联⽹,与本⽂程序⽆关)看题⽬就知道是写给初学者的,没需要的就别看了,⾃⼰都觉得怪⽆聊的。

很多游戏的耐玩性都来⾃精巧的算法,特别是⼈⼯智能的⽔平。

⽐如前⼏天看了著名的Alpha GO的算法,⽤了复杂的⼈⼯智能⽹络。

⽽最简单的,可能就是连连看了,所以很多⽼师留作业,直接就是实现连连看。

连连看游戏的规则⾮常简单:1. 两个图⽚相同。

2. 两个图⽚之间,沿着相邻的格⼦画线,中间不能有障碍物。

3. 画线中间最多允许2个转折。

所以算法主要是这样⼏部分:1. ⽤数据结构描述图板。

很简单,⼀个2维的整数数组,数组的值就是图⽚的标志,相同的数字表⽰相同的图⽚。

有⼀个⼩的重点就是,有些连连看的地图中,允许在边界的两个图⽚,从地图外连线消除。

这种情况⼀般需要建⽴的图板尺⼨,⽐实际显⽰的图板,周边⼤⼀个格⼦,从⽽描述可以连线的空⽩外边界。

本例中只是简单的使⽤完整的图板,不允许利⽤边界外连线。

2. ⽣成图板。

通常⽤随机数产⽣图⽚ID来填充图板就好。

⽐较复杂的游戏,会有多种的布局⽅式,例如两个三⾓形。

这种⼀般要⼿⼯编辑图板模板,在允许填充的区域事先⽤某个特定的整数值来标注,随后的随机数填充只填充允许填充的区域。

本例中只是简单的随机填充。

3. 检查连线中的障碍物。

确定有障碍物的关键在于确定什么样的格⼦是空。

通常定义格⼦的值为0就算空。

要求所有的图⽚ID从1开始顺序编码。

复杂的游戏还会定义负数作为特定的标志,⽐如允许填充区之类的。

4. 检查直接连接:两张图⽚的坐标,必然x轴或者y轴有⼀项相同,表⽰两张图⽚在x轴或者y轴的同⼀条线上才可能出现直接连接。

随后循环检查两者之间是否有障碍物即可确定。

5. 检查⼀折连接:与检查直接连接相反,两个图⽚必须不在⼀条直线上,才可能出现⼀折连接,也就是x/y必须都不相同。

随后以两张图⽚坐标,可以形成⼀个矩阵,矩阵的⼀对对⾓是两张图⽚,假设是A/B两点。

连连看C语言源代码

连连看C语言源代码
long TotalTime; /* 游戏总共的最大秒数!,*/
/* BoardDatas: a small-size board */
/* Board[x][y][0] - 0:empty, 1:filled */
/* Board[x][y][1] - cell's key; */
while(min2-1>=0 && Board[c2->x][min2-1][0]==0) min2--;
top=max(min1,min2);
while(max1+1<BoardHeight && Board[c1->x][max1+1][0]==0) max1++;
/* Pb - ProgressBar */
int PbColor=LIGHTGREEN;
int PbY=4;
int PbHeight=4;
int PbValue; /* 进度条百分比,初始值为100.*/
long StartTime; /* 开始时间的秒数,只统计分钟,秒 */
int FindPath(CELL *c1,CELL *c2)
{
int i,j,path,min1,max1,min2,max2,left,right,top,bottom;
/*---------------(0)判断是否点中相同块! ------------*/
if(Board[c1->x][c1->y][1] != Board[c2->x][c2->y][1])
/*
* 连连看游戏C语言源代码
*/

Java课程设计连连看游戏(含代码)

Java课程设计连连看游戏(含代码)

Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。

8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。

当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。

在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。

该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。

图片全部消完为游戏成功。

游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。

并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。

三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。

连连看游戏设计思想及程序详细讲解(附源码)

连连看游戏设计思想及程序详细讲解(附源码)

连连看游戏设计思想及程序详细讲解(附源码)1、连连的设计思想1)、准备好相应的大小相同的小图片若干public static final int CELL_SIZEx = 36;public static final int CELL_SIZEy = 40;public static final int CELL_COLS = 34;public static final int CELL_ROWS = 14;public static final int CELL_ZONGS = (CELL_COLS-2)*(CELL_ROWS-2);例如本程序:小图片宽:CELL_SIZEx = 36 高:CELL_SIZEy = 40摆放小图片舞台:横向:34格CELL_COLS= 34纵向:14格CELL_ROWS= 14真正要摆放图片的格数:CELL_ZONGS = (CELL_COLS-2)*(CELL_ROWS-2)即:四面的边格不放图片2)、设定34*14个图片数组,其中除四边外,全部随机存入图片,要保证每种图片各数相同(至少不要差太多),并且是偶数(奇数最后消不掉了)。

3)、在舞台上放上鼠标监听器,当点击任一图片时,做出判断,是否第一次点击(点击标记为0就是第一次点击),如果是第一次点击,就将相关信息记录到第一次内容中,比如:x1,y1,cell1,并将点击标记记为1,再次点击后,判断,点的是否同一图片,如果是,不做处理,如果不是,就认为点击了第二个图片,将相关住处记录到第二次内容中,如:x2,y2,cell2。

然后得用这个方法public boolean delkey()判断两点是否可以连通,如果可以,就消掉图片,不可以就不做处理。

整个连连看原理就是这样,其中有几个难点:1、随机图片,并且保证每种图片数相同,并且为偶数。

2、点击监听3、判断两点是否连通,这个算法是整个连连看的核心,也是最难的。

C++实现连连看游戏

C++实现连连看游戏

C++实现连连看游戏本⽂实例为⼤家分享了C++实现连连看游戏的具体代码,供⼤家参考,具体内容如下这个项⽬还是挺不错的,运⾏后也⽐较有意思,可以看看。

#include<iostream>#include<conio.h>#include<time.h>#include<stdlib.h>#include<math.h>#include<string.h>using namespace std;void Initial(int a[8][8]);/*初始化*/int Output(int a[8][8]);/*输出*/void Sort(int a[8][8]);/*重排*/void Change(int a[8][8],int x,int y,int x1,int y1);/*交换数组内两坐标对的符号值*/void Judge(int a[8][8],int b[4]);/*判断是否能够消除*/void Zero(int a[8][8],int b[4]);/*设置为零,即:消除*/int Two(int a[8][8],int b[4]);/*两条线*/void Check(int a[8][8],int x,int y,char c[5]);/*返回某点上下左右的情况*/int UpDown(int a[8][8],int b[4],int g);int LeftRight(int a[8][8],int b[4],int g);int main(){int flag=1,flag1=1;//flag⽤于标记是否已经初始化,flag=1表⽰未初始化;flag1标记⽤户是否选择了退出,flag1=1表⽰未选择。

int a[8][8]={0};//0 表⽰空格。

使⽤数组a[8][8]存放符号值,其中仅⽤了下标1-6.int b[4];/*接收坐标*/char ch;do{int o;//⽤于标记是否已经获胜。

原生javascript实现连连看游戏

原生javascript实现连连看游戏

原⽣javascript实现连连看游戏本⽂实例为⼤家分享了js实现连连看游戏的具体代码,供⼤家参考,具体内容如下<!DOCTYPE html><html><head><title>连连看</title><meta charset="gbk"><style type="text/css">body {text-align: center;}.text {text-align: center; margin-top: 60px; color: #fff;}.agin {text-align: center; margin-top: 60px; color: #fff;}#game-box {margin: 60px auto;position: relative;}#game-box img {float: left;width: 59px;height: 59px;border: 1px solid #000000;}#game-box img.hover {border: 1px solid #ffffff;}#game-box img.active {border: 1px solid #7fff00;}#game-box div {background-color: #7fff00;position: absolute;}</style><script type="text/javascript">var byId = function (id) {return document.getElementById(id);}var boxWidth = 61; //格⼦宽度var gameBox;var mapid = 'game-box';//地图 id//22张图⽚var arr = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'.split(',');var h = 8; //图⽚共8⾏var w = 11; //图⽚共11列var boxsLength = h*w;var boxArr = {}; //map对象var startBox = ''; //开始的格⼦var endBox = ''; //结束的格⼦window.onload = init;//初始化function init() {byId('agin').style.display = 'none';//隐藏再来⼀把按钮boxsLength = h*w;//图⽚⽅框的个数boxArr = {};startBox = '';endBox = '';var str = '';gameBox = byId(mapid);for (var i = 0; i < h; i++) {for (var j = 0; j < w; j++) {str += '<img class="" onclick="choose(this);" id="t' + i + '_l'+ j + '" src="img/blank.gif">'// alert(str);}//id="t0_l0,t0_l1,t0_l2,t0_l3..."}gameBox.innerHTML = str;gameBox.style.width = w * boxWidth + 'px';pushBoxArr();toHTML();}// 随机获取坐标function getPosition() {var t, f;(function () {t = parseInt(Math.random() * h);l = parseInt(Math.random() * w);if (('t' + t + '_l' + l) in boxArr) {arguments.callee();}})();return {t:t, l:l}}// 创建随机坐标的格⼦function CearteBox(name) {var p = getPosition(); = name;//图⽚名this.t = p.t;//⾏this.l = p.l;//列this.position = 't' + p.t + '_l' + p.l;//位置this.love = 0;//这个⽤于特殊,某些图⽚不同也可以连接switch (name) {case '100':case '200':this.love = 1;break;case '300':case '400':case '500':this.love = 2;break;case '600':case '700':this.love = 3;break;case '800':case '900':this.love = 4;break;}}// 产⽣88个格⼦(图⽚框)function pushBoxArr() {var index = 0;var last = arr.length - 1;for (var i=0; i< h;i++) {for (var j=0;j< w;j++) {var a = new CearteBox(arr[index]);//⽤图⽚名创建,每张图⽚四次 boxArr['t' + a.t + '_l' + a.l] = a;//格⼦的位置(也是每张图⽚的id) if (index === last) {index = 0;} else {index += 1;}}}}// 初始化htmlfunction toHTML() {for (var i in boxArr) {//遍历所有图⽚的idbyId(i).src = 'img/' + boxArr[i].name + '.png';}}// choosefunction choose(el) {if (el.src.indexOf('blank') >= 0) {//⿏标点击了空⽩图⽚return false;}else{el.className = 'active';//更改点击图⽚的样式//第⼀次点击或点击了同⼀张图⽚if (startBox == '' || startBox == el.id) {startBox = el.id;} else {//点击了第⼆张图⽚endBox = el.id;test(boxArr[startBox], boxArr[endBox]);}}}// 判断是不是可连接格⼦function test(a, b) {var can = function (a, b) {if ( == ) {//图⽚名相同就可以连接return true;} else {if (a.love != 0 && b.love != 0) {if (a.love == b.love) {return true;} else {return false;}} else {return false;}}}(a, b);//⽴即执⾏if (can) {//可以连接go(a, b);} else {//不能连接byId(startBox).className = '';startBox = endBox;//指向第⼆张图⽚endBox = '';}}// 判断是否连通function go(a, b) {var _ap = a.position, _bp = b.position;var a = a, b = b, temp, isKill = false;// 建⽴四个点,判断是否两两相通var pt1, pt2, pt3, pt4;// 上到下扫描if (isKill == false) {//交换位置if (a.t > b.t) {temp = a;a = b;b = temp;}for (var i = -1, len = h; i <= len; i++) {pt1 = a;pt2 = {t:i, l:a.l};pt3 = {t:i, l:b.l};pt4 = b;if( (!isNull(pt2) && (pt2.t != a.t) ) || ( !isNull(pt3) && (pt3.t != b.t) ) ){ continue;}else if (link4pt(pt1, pt2, pt3, pt4)){isKill = true;kill(a, b);showLine(pt1, pt2, pt3, pt4);break;return;}}}// 左到右扫描if (isKill == false) {//交换位置if (a.l > b.l) {temp = a;a = b;b = temp;}for (var i = -1, len = w; i <= len; i++) {pt1 = a;pt2 = {t:a.t, l:i};pt3 = {t:b.t, l:i};pt4 = b;if( (!isNull(pt2) && (pt2.l != a.l) ) || ( !isNull(pt3) && (pt3.l != b.l) ) ){ continue;}else if (link4pt(pt1, pt2, pt3, pt4)){isKill = true;kill(a, b);showLine(pt1, pt2, pt3, pt4);break;return;}}}//扫描完毕if(isKill == false){endBox = '';byId(_ap).className = '';startBox = _bp;}}//⼲掉格⼦,删除boxArr中相应格⼦function kill(a, b) {boxArr[a.position] = null;boxArr[b.position] = null;boxsLength -= 2;startBox = '';endBox = '';}// 显⽰链接路径function showLine(a, b, c, d) {var line1 =show2pt(a,b);var line2 = show2pt(b,c);var line3 = show2pt(c,d);var hideLine = function () {gameBox.removeChild(line1);gameBox.removeChild(line2);gameBox.removeChild(line3);byId(a.position).src = byId(d.position).src ='img/blank.gif';byId(a.position).className = byId(d.position).className = '';if (boxsLength<=0) {alert('亲,你赢了!好腻害啊。

连连看游戏课程设计+源代码

连连看游戏课程设计+源代码

课程设计课程名称:程序设计课程设计课题名称:网络连连看游戏班级:xxx学号:xxx姓名:xxx指导教师:计算机学院一、课程设计目的本课程设计的目的最主要是掌握linux系统下C++编程思想,以及关于QT软件编程,设计出连连看图形界面,实现连连看各项功能,提高编程和解决问题的能力。

二、课程设计内容设计一个连连看游戏项目,实现如下功能:1、设计连连看游戏界面,能让用户在该界面上进行相关操作。

2、为游戏添加功能:聊天对话,逻辑层相消,游戏级别,时间限制等。

三、课程设计要求1、课程设计的程序必须用C++语言完成。

2、课程设计必须在linux系统下进行。

3、要求写出需求分析报告。

分析部分包括功能需求和界面需求。

4、本项目要求分团队完成,连连看游戏五人一组共同合作,培养学生团队合作的能力。

四、系统的需求分析和模块设计1、需求分析本项目需完成两大模块设计:一为游戏界面设计,二为游戏功能设计。

2、模块分解系统功能层次模块图:五、系统的程序设计与实现程序的运行环境:Linux终端开发环境:QT、C++程序的详细设计:连连看消去算法实现在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。

分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。

这样就会有三条路经。

若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2. 若不相邻的先在第一个按钮的同行找一个空按钮。

1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。

2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。

3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。

没有的话路经就通了,可以消了.* 3.若2失败后,再在第一个按钮的同列找一个空按钮。

1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。

Android连连看源代码

Android连连看源代码

运行出来效果如下:MainActivity:package games.llk;import android.app.Activity;import android.os.Bundle;public class Main extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//setContentView(yout.main);setContentView(new GameView(this));}}GameView:package games.llk;import java.util.Random;import android.content.Context;import android.content.res.Resources; import android.graphics.Bitmap;import android.graphics.BitmapFactory; import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import android.graphics.Rect;import android.graphics.Bitmap.Config; import android.os.Handler;import android.view.MotionEvent; import android.view.View;public class GameView extends View {private int m_w;private int m_h;private int top_client;private int right_client;private int bottom_client;private int left_client;private Rect client_r;private Paint p_client_r;private boolean display_moreInfo;private boolean isInited;private Paint p;private Paint p_line;private Paint p_line_2;private Paint p_text;private Paint p_pross_b;private Paint p_pross;private int point_w;private int point_h;private Rect btn_r_1;private Rect btn_r_2;private Rect btn_r_close;private Bitmap bmp_btn;private Rect pross_r;private Rect pross_r_2;private Rect t_r;private Rect t_r_2;private boolean ispause=false;private boolean isstart=false;private String s_pause="暂停中。

连连看游戏源代码C#

连连看游戏源代码C#

连连看using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections; //ArrayList命名空间namespace 连连看{public partial class Form1 : Form{private Bitmap Source; //所有动物图案的图片private int W = 50; //动物方块图案的宽度private int GameSize=10; //布局大小即行列数private bool Select_first = false; //是否已经选中第一块private int x1, y1; //被选中第一块的地图坐标private int x2, y2; //被选中第二块的地图坐标Point z1, z2; //折点棋盘坐标private int m_nCol = 10;private int m_nRow = 10;private int[] m_map = new int[10*10];private int BLANK_STATE = -1;public enum LinkType {LineType,OneCornerType,TwoCornerType};LinkType LType; //连通方式public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Source = (Bitmap)Image.FromFile("..\\..\\res\\animal.bmp");this.pictureBox1.Height = W * (m_nRow + 2);this.pictureBox1.Width = W * (m_nCol+2);this.pictureBox1.Top = 0;this.pictureBox1.Left = 0;//当前窗体标题栏高度int d = (this.Height - this.ClientRectangle.Height);this.Height = this.pictureBox1.Height + this.pictureBox1.Top+ d;this.Width = this.pictureBox1.Width + this.pictureBox1.Left ;//for (int i = 0; i < 10 * 10; i++)//{// m_map[i] = i % 6;//}StartNewGame();Init_Graphic();}private void StartNewGame(){//初始化地图,将地图中所有方块区域位置置为空方块状态for(int iNum=0;iNum<(m_nCol*m_nRow);iNum++){m_map[iNum] = BLANK_STA TE;}Random r = new Random();//生成随机地图//将所有的动物物种放进一个临时的地图tmpMap中ArrayList tmpMap=new ArrayList ();for(int i=0;i<(m_nCol*m_nRow)/4;i++)for(int j=0;j<4;j++)tmpMap.Add(i);//每次从上面的临时地图tmpMap中取走(获取后并在临时地图删除) //一个动物放到地图的空方块上for (int i = 0; i < m_nRow * m_nCol; i++){//随机挑选一个位置int nIndex = r.Next() % tmpMap.Count ;//获取该选定物件放到地图的空方块m_map[i]=(int)tmpMap[nIndex];//在临时地图tmpMap除去该动物tmpMap.RemoveAt(nIndex);}}private void Init_Graphic(){Graphics g = get_Graphic(); //生成Graphics对象for (int i = 0; i< 10 * 10; i++){g.DrawImage(create_image(m_map[i]), W * (i % GameSize)+W,W * (i / GameSize)+W, W, W);}}private Graphics get_Graphic(){if (pictureBox1.Image == null){Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);pictureBox1.Image = bmp;}Graphics g = Graphics.FromImage(pictureBox1.Image);return g;}public Graphics GetGraphicsObject(ref PictureBox pic){System.Drawing.Graphics g;Bitmap bmp = new Bitmap(pic.Width, pic.Height);pic.Image = bmp;g = Graphics.FromImage(bmp);return g;}//create_image()方法实现按标号n从所有动物图案的图片中截图。

VC_实现连连看游戏

VC_实现连连看游戏

的图片, 或者程序判断出无可消的图片时, 可以重新排序, 以 便游戏可以继续进行。
为了游戏的美观, 当点击每个图片时, 应该有类似按钮点 击的效果。 要实现这一点, 最简单的就是把每个图片都做成一 个 按 钮 , 这 可 以 利 用 MFC 的 CButton 类 , 编 写 CLLKanButton 类 , 使 其 继 承 于 Cbutton 类 , 使 每 个 Button 都 有 自 己 的 ID 号 , 用来存储图片类型, 还应该有一个 CPoint 类型的成员变量, 用 来 存 储 每 个 Button 的 位 置 信 息 , 最 后 在 创 建 时 , 将 和 ID 号 对 应的图片贴到相应的位置上即可。
for(j=1; j<=MAXY-2; j++) {
p.x = i; p.y = j; m_btnGroup.Add(new CLLKanButton(map[i][j], p)); } //显 示 按 钮 for(i=0; i<(MAXX-2)*(MAXY-2); i++) { CLLKanButton *btn = (CLLKanButton *)m_btnGroup. GetAt(i); btn->Create(str, WS_CHILD|BS_BITMAP, CRect(130+(i%(MAXY-2))*40, 70+(i/(MAXY-2))*40, 170 +(i% (MAXY -2))*40, 110 +(i/(MAXY -2))*40), this, IDC_BLOCK+i); if(btn->m_id)//如果为 0 则不显示 { str.Format("res\\%d.bmp", btn->m_id); HBITMAP m_fkBmp = (HBITMAP)::LoadImage (AfxGetInstanceHandle(), str, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE); //加 载 图 片 if(m_fkBmp == NULL)

C++实现连连看游戏核心代码

C++实现连连看游戏核心代码

C++实现连连看游戏核⼼代码这两天研究了⼀下连连看游戏的源代码,感觉它挺简单的,主要就是判断选中的两张图⽚能否消去。

我参考了⽹上的源代码(抱歉的是,不记得当时下载的⽹址了,在此对原作者表⽰深深的歉意!),然后⾃⼰把核⼼代码整理如下,与⼤家共享。

需要说明的是,这只是核⼼算法的代码,界⾯设计和操作的代码均已略去。

#include <stdlib.h>#include <time.h>//图⽚类class picture{public:int type;//图⽚的编号,共有n种,从0到n-1bool visible;//图⽚是否可见int x;//图⽚位置的横坐标int y;//图⽚位置的综坐标};//整个图由8⾏10列组成,每个单元格是⼀张⼩图⽚const int pNum = 10;const int pType = 8;static picture p[pType][pNum];//进⼊新⼀关void newStage(){srand(time(0));int i,j;for(i = 0;i < pType;++i)for(j = 0;j < pNum;j++)p[i][j].visible = false;int x,y;for (i = 0;i < pType - 1;++i)for(j = 0;j < pNum;++j){bool re = true;while (re){x = rand() % pType;y = rand() % pNum;if (p[x][y].visible == false){p[x][y].type = i;p[x][y].visible = true;p[x][y].x = x;p[x][y].y = y;re = false;}}}//处理剩余的最后⼀种图⽚for (i = 0;i < pType;++i)for(j = 0;j < pNum;++j){if (p[i][j].visible == false){p[i][j].type = pType - 1;p[i][j].visible = true;p[i][j].x = i;p[i][j].y = j;}}}//在a、b两点之间画线void drawLine(picture a,picture b){}//判断图⽚a和b之间能否通过⼀条直线相连(a和b之间有0个转⾓)bool matchDirect(picture a,picture b){if(!(a.x == b.x || a.y == b.y))return false;//a、b的横坐标相同时bool yMatch = true;if(a.x == b.x){if(a.y > b.y){for(int i = b.y + 1;i < a.y;++i){if(p[a.x][i].visible == true)yMatch = false;}}if(b.y > a.y){for(int i = a.y + 1;i < b.y;++i){if(p[a.x][i].visible == true)yMatch = false;}}}//a、b的纵坐标相同时bool xMatch = true;if(a.y == b.y){if(a.x > b.x){for(int i = b.x + 1;i < a.x;++i){if(p[i][a.y].visible == true)xMatch = false;}}if(b.x > a.x){for(int i = a.x + 1;i < b.x;++i){if(p[i][a.y].visible == true)xMatch = false;}}}return (xMatch && yMatch);}//判断图⽚a和b之间是否可以通过⼀个转⾓的折线相连bool matchOneCorner(picture a,picture b){if (p[a.x][b.y].visible == false && matchDirect(a,p[a.x][b.y]) && matchDirect(p[a.x][b.y],b)) {drawLine(a,p[a.x][b.y]);drawLine(p[a.x][b.y],b);return true;}if (p[b.x][a.y].visible == false && matchDirect(a,p[b.x][a.y]) && matchDirect(p[b.x][a.y],b)) {drawLine(a,p[b.x][a.y]);drawLine(p[b.x][a.y],b);return true;}return false;}//判断图⽚a和b之间是否可以通过两个转⾓的折线相连bool matchTwoCorner(picture a,picture b){int i,j;for(i = a.x - 1,j = a.y;i >= 0;--i){if(p[i][j].visible == true)break;else if(matchOneCorner(b,p[i][j])){drawLine(a,p[i][j]);return true;}}for (i = a.x + 1,j = a.y;i < pNum;++i){if(p[i][j].visible == true)break;else if(matchOneCorner(b,p[i][j])){drawLine(a,p[i][j]);return true;}}for(i = a.x,j = a.y - 1;j >= 0;--j){if(p[i][j].visible == true)break;else if(matchOneCorner(b,p[i][j])){drawLine(a,p[i][j]);return true;}}for(i = b.x,j = b.y + 1;j < pType;++j){if(p[i][j].visible == true)break;else if(matchOneCorner(b,p[i][j])){drawLine(a,p[i][j]);return true;}}return false;}//判断a和b能否相连,条件是a和b的类型相同,且a和b之间的连线拐⾓数<=2个bool match(picture a,picture b){if(a.type != b.type)return false;if(matchDirect(a,b)){drawLine(a,b);return true;}else if(matchOneCorner(a,b))return true;else if(matchTwoCorner(a,b))return true;return false;}关于C++⼩游戏的更多精彩内容请点击专题:学习了解以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

C# WPF新手入门之连连看小游戏

C# WPF新手入门之连连看小游戏

C# WPF新手入门之连连看小游戏选择10张图片,生成10*10的网格,共100张,每张图片出现10次。

界面包含“游戏开始”,“游戏结束”,“游戏失败”。

1.界面设计:实际效果如下:剩余时间显示10种图片,每种出现10次,共100个格子以下为xaml代码:<Window x:Class="连连看.MainWindow"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"xmlns:d="/expression/blend/2008"xmlns:mc="/markup-compatibility/2006"xmlns:local="clr-namespace:连连看"mc:Ignorable="d"Title="连连看" Height="450" Width="624.5" Background="#FFF1A8A8" Loaded="Window_Load" WindowStartupLocation="CenterScreen"ResizeMode="CanMinimize" Visibility="Visible" BorderBrush="#FF61B917"Icon="Image/1.JPG"><Grid Background="#FFEEE6E6"><Grid.RowDefinitions><RowDefinition Height="30" ></RowDefinition><RowDefinition ></RowDefinition></Grid.RowDefinitions><Label Grid.Row="0" x:Name="Label1" Content="00:00" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="16" RenderTransformOrigin="8.573,4.41"/><Grid Grid.Row="1" Name="GridName" Background="#FFC9C9BA"Margin="0,2,0,0"/><Menu Grid.Row="0" Height="29" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Top"><MenuItem Header="菜单" Background="#FFD1D4C5"BorderBrush="#FF65E69A" VerticalAlignment="Top"VerticalContentAlignment="Center" Height="28" HorizontalAlignment="Left"><MenuItem x:Name="Start_Btn" Header="开始游戏"Click="StartBtn_Click" /><MenuItem x:Name="End_Btn" Header="结束游戏"Click="EndBtn_Click" /></MenuItem><MenuItem x:Name="About_Btn" Header="关于" Background="#FFD1D4C5" BorderBrush="#FF65E69A" Margin="2,0,0,0" Click="AboutBtn_Click"/></Menu></Grid></Window>2.程序设计:首先,在项目路径下需要一些图片:背景音乐,需要WAV格式:在代码中生成Grid方法:for (int i = 0; i < 10; i++)//生成10*10的格子{ColumnDefinition column = new ColumnDefinition(); GridName.ColumnDefinitions.Add(column);RowDefinition row = new RowDefinition();GridName.RowDefinitions.Add(row);}界面上各个按键:About_BtnStart_BtnEnd_Btn图片加载方法:private void Create_Image()//加载图片{int[,] arr1 = new int[10, 10];Random random = new Random();//取随机数for (int i = 1; i < 11; i++)//把数组arr1[0,0]~arr1[9,9]填满随机的1~10数字,并且每个数字出现10次{int ImageCount = 0;while (ImageCount < 10){int x = random.Next(0, 10);int y = random.Next(0, 10);if (arr1[x, y] == 0) //随机数占位,放入空位,否则不放{arr1[x, y] = i;ImageCount++;}}}for (int i = 0; i < 10; i++)//把图片加载到10*10的格子里{for (int j = 0; j < 10; j++){image = new Image{Source = new BitmapImage(new Uri("image/" + arr1[i, j].ToString() + ".JPG", UriKind.Relative)),Name = "image" + arr1[i, j].ToString()};Grid.SetRow(image, i);Grid.SetColumn(image, j);GridName.Children.Add(image);GridName.RegisterName("Cimage" + ImageNo.ToString(), image); //注册图片名字,游戏结束的时候需要注销ImageNo++;image.MouseDown += Image_MouseDown; //图片点击事件}}}消除图片事件:默认count为0,当点击一个图片count+1,然后再次点击的时候count赋值0,且判断此次点击的图片与上次是不是同一种图片,是的话触发消除,否则不消除。

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

【连连看】简单小游戏初始源代码使用说明:进入Java开发工具eclipse中,在左面建立一个任意名的java project,然后在工程下建立一个名字为Lianliankan的package,最后建立一个名字为lianliankan的class类。

将以下程序代码复制入class内容面板中,点击运行。

package Lianliankan;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("JKJ连连看");thisContainer = 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(String.valueOf(Integer.parseInt(fractionLable.getText()))); northPanel.add(fractionLable);mainFrame.setBounds(280,100,500,450);mainFrame.setVisible(true);}public void randomBuild() {int randoms,cols,rows;for(int twins=1;twins<=15;twins++) {randoms=(int)(Math.random()*25+1);for(int alike=1;alike<=2;alike++) {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]=randoms;}}}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) {save[n]=this.grid[i][j];n++;}}}n=n-1;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;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];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<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;break;}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();}}if (x==i) {rowPassOne();}}if (y0==y) {remove();}if (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) {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 (y0<j){ //第一按钮同行空按钮在与第二按钮之间for (i=y0+1;i<=j ;i++){if (grid[x0][i]!=0) {k=0;}else{ k=2; }}}}public void rowPassOne(){if (x0>i) {for (j=x0-1;j>=i ;j-- ) {if (grid[j][y0]!=0) {k=0;break;}else { k=2; }}}if (x0<i) {for (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){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();}}。

相关文档
最新文档