㈠ javascript连连看计分
这个超级简单,写个循环就可以了
㈡ 用C++写一个连连看程序,最好有注释,谢谢
也许呵呵
㈢ 我用Java编写的连连看。运行后全是按钮。怎样导入图片呢。求导入图片的完整代码。在线等。
很简单,你用的Button是JButton?那参考如下代码。
Iconicon=newImageIcon(newURL("http://www..com/img/logo-yy.gif"));
JButtonjb=newJButton(icon);
㈣ 软件开发一般学什么
IT技术领域可以分为18个领域:
人工智能,云计算,大数据,区块链,物联网,设计,Web开发,移动开发, 游戏 开发,服务端开发,数据库,架构,测试,运维,网络管理,安全技术,认证考试,信息化建设。
软件开发一般指web开发、移动开发、 游戏 开发、服务端开发、数据库这几类,你可以选择其中一类或几类学习和研究,现在比较火的属于移动开发和 游戏 开发了。技术其实都是触类旁通的,能学号一个,就能学号好外一个。
高端的软件开发就是人工智能、云计算、大数据、区块链、物联网等,这里就不深入讨论。先从基本的软件开发开始吧。
web开发:
移动开发
游戏 开发
服务端开发
数据库
作为一名计算机专业的研究生导师,我来回答一下这个问题。
在当前的大数据时代背景下,计算机相关专业受到了广泛的关注,也是当前的热门专业。软件开发专业主要涉及到三方面知识结构,分别是基础学科、计算机基础以及软件开发技术。
基础学科包括高数、线性代数、概率论、离散数学、物理、数电、模电等课程,其中数学是软件开发专业的重点课程,一定要引起足够的重视。数学不仅是计算机专业考研的必考内容,对于软件开发也具有重要的意义,因为软件开发问题说到底就是数学问题。如果想在软件开发的道路上有更好的发展,一定要有一个扎实的数学基础。
计算机基础课程包括操作系统体系结构、计算机网络、数据结构、算法设计、编译原理、编程语言、数据库等内容,这些课程都是非常重要的基础课,尤其是数据结构和算法设计。对于软件开发专业的学生来说,这些基础课将为以后的读研和工作打下扎实的基础。一个比较好的学习方法是在本科阶段读一下Linux操作系统的核心源代码,这样不仅能够系统的了解操作系统,也能够锻炼自己的编程能力。
软件开发技术则主要针对于当前流行的技术方向,比如Web开发、大数据开发、移动互联网开发等内容。不同的学校通常会有具体的细分方向,学生可以根据自身的知识结构和兴趣爱好进行选择。如果学习能力比较强,可以考虑一下大数据开发方向,当前正处在大数据落地应用的初期,所以未来大数据开发岗位会比较多,就业前景也比较值得期待。
如果有互联网方面的问题,或者考研方面的问题,都可以咨询我,谢谢!
1、一门编程语言(C、C++、Java、PHP、Python、Html等),
2、熟悉一种操作系统(Windows、Unix、Linux/类Linux、Android、IOS等),
3、简单的算法和数据结构。
先确定你学习完软件开发后想从事的工作,比如 游戏 开发(LOL,吃鸡,手游等);前端开发(网页、微信小 游戏 、Android/IOS APP等);后台服务器,数据库(支撑前端运行的技术和数据);嵌入式(驱动、单片机等)。
确定方向后,再选择相应的编程语言,如 游戏 开发(C++为主);网站,小 游戏 (H5/CSS/js等)、Android(Java为主);IOS(Objective-C、switch);后台服务器(Java、Python等);数据库(Mysql、Oracle、SQL Server等);嵌入式(C、汇编等)
如果选择学习Java,建议来我们学校实地考察。我们作为一个12年的老牌培训机构,专业只教Java语言,且有专业团队为不同学习需求的学员打造的不同课程,十几年未变,是学员们口口相传,靠谱的Java培训学校!找一家适合自己的培训机构主要看他的专业程度,口碑,师资力量还有课程,建议可以多找几家培训机构线下实地考察一下~而且现在成都也有分校啦!有意向的小伙伴可以前去一试~
如果你想成为一名java软件工程师,我给你整些具体的技术,掌握这些技术,你基本可以成为一名高级软件工程师了。别看回答者说到的什么人工智能,物联网,区块链什么的,相信我,一般软件开发根本用不到。我是一名5年经验的软件工程师,相信我。
jdbc、servlet、jsp、struts、hibernate、jpa、spring、springmvc、springboot、springcloud、mybatis、mysql、mongodb、maven、gradle、git、nginx、redis、memcache、bbo、zookeeper、tomcat、netty、jetty、kafka、docker、k8s、linux、hadoop、spark、hive、hdfs、hbase、sqoop、flume等。
掌握这些技术,然后再加强自己软技能的培养,沟通,协作等能力,你就算的上一名优秀的软件工程师了。
软件开发需要学习的东西很多,但也不是一天就学完,很多知识可能需要几个月、几年甚至十几年去学习。不过对于一个初学者来说,主要还是以掌握一两门语言、基本算法、一两种数据库为主,下面简单介绍一下。
一、语言。推荐Java、csharp、php或者Python。不建议C++,因为现在大多数是web项目,以上几种语言对于web开发非常合适。
二、算法。纯粹的算法学习不是很多,很多算法学习都融合到语言学习中。比如排序算法、过滤算法、搜索算法等等。在高级语言的列表、字典和数组类型,基本上都包含了这些算法。
三、数据库。目前中小型web项目的数据库以MySQL为多,所以建议学习MySQL,也有的公司使用sqlserver,有时间可以学一下,此外,移动端使用sqlite小型数据库,可以掌握一下。
除此之外,就是要了解一些编程调试的基本方法,也要了解一些实施部署的套路,就基本上可以应付一些开发工作了。
什么叫软件开发?就是通过计算机所识别的计算机语言来开发系统,从而解决生活,工作或者是学习中遇到的问题,更加的方便人们的工作和学习。
先学习一门编程语言,目前企业用的最多的就是Java了,很多企业的软件,系统,网站都是用Java来开发的。
以前学习Java是在“如鹏网”上学习的,有详细的教程和学习路线,可以作为参考。
1、Java基础,还是挺不错的,通过开发超级玛丽,飞机大战,吃金币,连连看,汤姆猫,电影的弹幕动画等来讲解Java的基础知识点,做出这些项目来还是蛮有成就感的
2、Java高级技术
3、web前端
4、Java web(核心阶段)
5、框架
6、企业项目实战
7、企业专题
有网络的地方就可以学习,根据自己的时间来灵活安排学习进度,每个章节的后面都有相应的练习和面试,需要通过录音的方式来进行提交,夯实基础,为面试做准备,有新的课程更新了,也是可以继续来学习的。
有需要相关Java教程的可在后台私信哦(备注:Java)。
一般大学的软件开发课程:面向对象程序设计、计算机组成原理、操作系统、数据结构、计算 机网络、软件工程、编译原理、分布式系统、软件项目管理、Oracle数据库系统等。
但是个人认为学习软件开发,除了以上那些课程,还需要大量的项目实战课,实战的最终目的是全面提高学生的职业素质,最终达到学生满意就业、企业满意用人的目的。合理的实战教育本应该是大学教育的一个重要组成部分,但是目前却成为了 社会 培训机构、企业内训的责任。对于学生来说,通过实站课程,一方面可以增加实践经验;另一方面,可以降低就业的成本和风险;增加就业的机会;实战教学是有一定理论基础的学生,在拥有多年实战经验老师的指导下,在真实条件下,最终达到企业的用人要求,并获得国家认可的职业资格证书的过程。所以实战课程在大学也应该是必不可少的。
当初再帮我弟弟找大学的时候,我看到一所学校的课程还是挺靠谱的,也就是现在他们的学校,以下是我在他们官网上面截下来的课程截图。
他们除了基础课以外,还有一些实战课程以及职业规划课,以前不觉得项目实战课有多重要,只是后来我弟弟在传智专修学院学习的时候,他们老师经常带他们做实战项目,完全模拟企业实际项目开发的场景,从项目经理到搭建项目架构到最后组合项目,每个人的开发经验都相当成熟,如果时间允许的话,他们甚至可以具备单独开发项目的能力,相对于当初计算机专业毕业的我来说,我当初毕业的时候写个网页都困难,更何况写项目,还得经过企业长时间的培养和锻炼才具备他们现在具备的能力。他们现在不管对于自身还是企业来说都是非常有利的,对于自身来说节省了中间的过程,对于企业来说节省了培养一个新人的成本。所以个人感觉实战课程还是挺重要的。
所以当你在选择学校的时候,可以多研究一下他们的课程设置,这是经验所得,希望可以帮助到你。
如果只是为了开发某一个小软件,达到某一个功能的话,还不如找人家给你做了,花点钱就能解决了,不需要花费大量时间学习。如果是为了从事软件开发的话,建议学习python 网上教程多,简单易入门。
软件开发是一个广义的概念,其中包含了很多技术方向,如前端和后端,而前端又可以细分为UE、UI、前端程序员,后端也可以细分为java、php、C#、GO、Ruby、C、C++、Python等。而目前人数最多且比较容易就业的就应该是java后端开发人员了,而我也是一名java后端开发人员,所以具体介绍下如果想要做一名java开发,需要学哪些技术。
满足以上几点,你已经是一名合格的初级开发人员了,其他的包括技术和业务就需要在工作中慢慢的积累了。
以上为个人观点,欢迎在评论中发表自己不同的观点,喜欢的加个关注,谢谢。
现在小学已经开始教授软件开发的相关课程了,所以掌握软件开发在未来 社会 发展中占据着重要的地位,如果之前没有软件开发的相关学习自学起来还是有些麻烦的,不同的程序语言学习路线是不同的,单纯从掌握语言的角度看一般可以这么开始学习:
1)找一本好的学习教材。建议最好是纸质的,虽然现在网络上各种资料比较容易找到,但是书上写的一般还是比较系统和基础的。从最初的开发环境配置到一些简单的项目开发都会有关键代码提供,这样学习起来会比较直接。现在视频教育网站也很多,也可以看视频学习。只不过在一段视频和多个视频之间切换时没有翻书那么方便。
2)准备一台电脑。软件开发最关键的是实际动手的能力,它比机械,建筑等行业好的太多,一个人在家坐着就可以实际动手操作积累项目经验。按照教材从最基础的开发环境配置到基础语言熟悉再到简单项目实践,教材中的代码都自己敲过一遍并且正确运行过,这样就可以算是基础软件开发了。
3)找技术论坛,公众号。在看书的过程中总会遇到一时理解不了的问题,这个时候就要去专门的论坛找答案了,这个也是培养自己解决问题的能力,是软件开发人员的基础能力,通常高级开发人员并不是什么都懂,只不过他们知道解决问题的技巧能比别人更快的解决问题。
4)多于同道中人沟通,他们也会介绍自己的学习方法和学习经历,这样可以减少自己走弯路的代价,同时也锻炼了自己的表达能力,是掌握知识的有效捷径。
当一门开发语言学习的差不多了可以再学习数据库相关知识,操作系统相关知识,软件开发不是单独的程序语言学习,还包括了很多其它计算机知识的学习。希望有自学软件开发的小伙伴都能有恒心和毅力坚持下来。
㈤ 想用C++写一个连连看的小游戏,求思路
一下是我的思路 我也是菜鸟 愿交流
1.用一个线程来专门负责刷帧 (就是定时重绘界面)
2.用一个数组来存储游戏的数据
3.从数组来绘制画面
4.从用户输入 改变 数组
类的话应该有
GameView ---用于负责怎个游戏的绘制 里面新建线程刷帧
GameData ---用于存储游戏数据 和 改变数据
GameContrl ---由于接受用户输入
Game ---控制怎个游戏
㈥ 求一连连看算法 C 语言
第一个:
bool isClear(int row1,int col1,int row2,int col2)
{
int row,col;
for(row=1;row<=ROW;row++)
if( check_point(row,col1) && check_point(row,col2) )
if( check_col(col1,row1,row) && check_row(row,col1,col2)
&& check_col(col2,row2,row) )
return true;
for( col=1;col<COL;col++)
if( check_point(row1,col) && check_point(row2,col) )
if( check_row(row1,col1,col) && check_col(col,row1,row2)
&& check_row(row2,col2,col) )
return true;
return false;
}
第二个:回溯算法
bool ClearAll()
{
int row1,col1,row2,col2;
for( row1=1;row1<ROW;row1++)
for( col1=1;col1<COL;col1++)
if( A[row1][co1]!=0 )
for( row2=row1;row2<ROW;row2++)
for( col2=1;col2<COL;col2++)
if(row2>row1 || col2>col1)
if( A[row2][col2]==A[row1][col1]
&& isClear(row1,col1,row2,col2) )
{
SaveWay();
Delete(row1,col1,row2,col2);
if( ClearAll() )
return true;
else
Load();
}
return false;
}
第三个:改写下Delete/Load函数就可以了,我就不贴出来了
=================================================
含有很多简单的函数没写,不懂再问我吧
㈦ 用java写个连连看app,想做出消除时的特效,比如闪电连线啊之类的,要怎么绘制
我给你两个灵感,建一个类是专门对应消除时的对象,在两个图的坐标之间生成一条线,具体的线转弯我也不会,还有一个灵感,就是消除的时候用另一个图片代替消除的图片,然后再消失,可用炸弹图片代替,这个简单点,如果你觉得行的话给分谢谢
㈧ gamemaker怎么做连连看,用按钮做不用代码,现在已经摆好了,就是不知道怎么设定把两个连起来在
不写代码几乎很难实现,例如你的连连看有三种类型,正方形、圆形、三角形,你始终得用一个变量来记录你鼠标第一次点击的是什么图形,然后第二次点击时再判断2次是不是点击的同一个图形,然后才能判断是不是能连接消除;
写代码的话也很简单,最好定义一个全局的变量(例如A):表示当前点击的图形类型(名称随意取);
然后在每种图形里加上鼠标点击事件,在里面判断点击的图形是否等于变量A存好的值,如果等于就可以判断连接消除了,如果不等就把新的图形存入A里面。
㈨ 谁能帮忙写一个c语言连连看游戏,要4x4的,功能最简单的就可以!但是要实现连连看应该有的功能
刚写的,新鲜出炉:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#defineMAPSIZE4
#defineMAXLINESIZE60
//typedefenum{false,true}bool;
typedefstruct{
intx,y;
}Point;
constcharpictureTable[]={"ABCEDFGHI"};
booljudgeLine(char**MP,Point*start,Point*end){
inti;
if(start->x==end->x){
if(start->y>end->y){
for(i=start->y-1;i>end->y;i--)
if(MP[start->x][i]!=0)
returnfalse;
returntrue;
}
else{
for(i=start->y+1;i<end->y;i++)
if(MP[start->x][i]!=0)
returnfalse;
returntrue;
}
}
elseif(start->y==end->y){
if(start->x>end->x){
for(i=start->x-1;i>end->x;i--)
if(MP[i][start->y]!=0)
returnfalse;
returntrue;
}
else{
for(i=start->x+1;i<end->x;i++)
if(MP[i][start->y]!=0)
returnfalse;
returntrue;
}
}
returnfalse;
}
booljudgeTwoLines(char**MP,Point*start,Point*end,Point*mid){
Pointp1,p2;
mid->x=-1;
mid->y=-1;
if(judgeLine(MP,start,end)==true)returntrue;
p1.x=start->x;
p1.y=end->y;
p2.x=end->x;
p2.y=start->y;
mid->x=p1.x;
mid->y=p1.y;
if(MP[p1.x][p1.y]==0&&judgeLine(MP,start,&p1)&&judgeLine(MP,end,&p1))returntrue;
mid->x=p2.x;
mid->y=p2.y;
if(MP[p2.x][p2.y]==0&&judgeLine(MP,start,&p2)&&judgeLine(MP,end,&p2))returntrue;
returnfalse;
}
booljudgeTreeLines(char**MP,Point*start,Point*end,Point*mid1,Point*mid2,intn){
inti;
mid1->x=-1;mid1->y=-1;
mid2->x=-1;mid2->y=-1;
if(judgeTwoLines(MP,start,end,mid1))returntrue;
for(i=start->x-1;i>=0;i--){
if(MP[i][start->y]!=0)break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->x+1;i<=n+1;i++){
if(MP[i][start->y]!=0)break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->y-1;i>=0;i--){
if(MP[start->x][i]!=0)break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->y+1;i<=n+1;i++){
if(MP[start->x][i]!=0)break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
returnfalse;
}
voidptMap(char**MP,intn){
intspace=(MAXLINESIZE-n*2)/2;
inti,j;
for(i=0;i<(MAXLINESIZE-10)/2;i++)
printf("");
printf("《连连看》 ");
for(i=2;i<space;i++)printf("");
printf("x ");
for(i=1;i<=n;i++){
for(j=2;j<space;j++)
printf("");
printf("%d",i);
for(j=1;j<=n;j++)
printf("%c",pictureTable[MP[i][j]]);
printf(" ");
}
for(i=0;i<space;i++)
printf("*");
for(i=0;i<n;i++)
printf("%d*",i+1);
for(i=1;i<space;i++)
printf("*");
printf(" ");
}
char**createMap(intn){
char**ret;
inti;
ret=(char**)malloc(sizeof(char*)*(n+2));
for(i=0;i<n+2;i++)
ret[i]=(char*)malloc(sizeof(char)*(n+2));
returnret;
}
voidranMap(char**MP,intn){
int*all=(int*)malloc(sizeof(int)*n*n);
inti,tmpi,tmp;
for(i=0;i<n*n;i++)
all[i]=i/4+1;
for(i=0;i<n*n;i++){
tmpi=rand()%(n*n-i);
tmp=all[tmpi];
all[tmpi]=all[n*n-i-1];
all[n*n-i-1]=tmp;
}
for(i=0;i<n+2;i++){
MP[0][i]=0;
MP[n+1][i]=0;
MP[i][0]=0;
MP[i][n+1]=0;
}
tmpi=0;
for(i=1;i<=n;i++)
for(tmp=1;tmp<=n;tmp++)
MP[i][tmp]=all[tmpi++];
}
voiddeletePoints(char**MP,Point*p1,Point*p2){
MP[p1->x][p1->y]=0;
MP[p2->x][p2->y]=0;
}
intplayTurns(intn){
intrest=n*n;
char**mp=createMap(n),c;
ranMap(mp,n);
Pointmid1,mid2,pt1,pt2;
while(1){
ptMap(mp,n);
printf("请输入消去的坐标1(x1y1): ");
scanf("%d%d",&pt1.x,&pt1.y);
printf("请输入消去的坐标2(x2y2): ");
scanf("%d%d",&pt2.x,&pt2.y);
if((pt1.x==pt2.x&&pt1.y==pt2.y)||(pt1.x<1||pt1.x>n||pt2.x<1||pt2.x>n||pt1.y<1||pt1.y>n||pt2.y<1||pt2.y>n)){
printf("无法消除这两图案,请再次检查。");
}
elseif(mp[pt1.x][pt1.y]!=0&&mp[pt1.x][pt1.y]==mp[pt2.x][pt2.y]&&judgeTreeLines(mp,&pt1,&pt2,&mid1,&mid2,n)){
if(mid1.x==-1){
printf("Direct ");
}
elseif(mid2.x==-1){
printf("TwoLines:(%d,%d) ",mid1.x,mid1.y);
}
else{
printf("TreeLines:(%d,%d)(%d,%d) ",mid1.x,mid1.y,mid2.x,mid2.y);
}
deletePoints(mp,&pt1,&pt2);
printf("消去成功! ");
rest-=2;
if(rest==0){
printf("恭喜!你已消去所有图案! ");
break;
}
}
else{
printf("无法消除这两图案,请再次检查。");
}
printf("继续游戏(N/n不继续)?");
scanf("%c",&c);
if(c=='N'||c=='n')break;
}
printf("是否重新开局(Y/y继续)?");
scanf("%c",&c);
if(c=='y'||c=='Y')return1;
return0;
}
intmain(){
srand(time(0));
while(playTurns(4));
return0;
}
㈩ 用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("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 (k==2){ 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; break; } 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(); } }