import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JPanel;
public class Link extends javax.swing.JFrame {
private javax.swing.JComboBox change;
private static javax.swing.JPanel play;
private javax.swing.JButton start;
private static int PX=500;
private static int PY=PX;
private static int spit=10;
private static int d=PX/spit;
private static Graphics g;
private static int level=0;
private static int[] linea=new int[2];
private static int[] lineb=new int[2];
private static Point[][] pointList=new Point[spit][spit];
public Link() {
linea[0]=-1;linea[1]=-1;
lineb[0]=-1;lineb[1]=-1;
initComponents();
this.g=play.getGraphics();
for(int i=0;i<spit;i++)
for(int t=0;t<spit;t++)
pointList[i][t]=new Point();
setVisible(true);
setSize(PX+100, PY+100);
change.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
level=change.getSelectedIndex();
}
});
start.addActionListener(new startListener());
}
public class startListener implements ActionListener{ public void actionPerformed(ActionEvent e) {
int number=level*10+10;
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
pointList[k][m].status=0;
int g1x=(int)(Math.random()*spit),g1y=(int)(Math.random()*spit),
g2x=(int)(Math.random()*spit),g2y=(int)(Math.random()*spit);
char n='A'-1;
for(int i=1;i<=number;i++){
n++;
while(pointList[g1x][g1y].status==1)
{g1x=(int)(Math.random()*spit);
g1y=(int)(Math.random()*spit);
}
while(pointList[g2x][g2y].status==1){
g2x=(int)(Math.random()*spit);
g2y=(int)(Math.random()*spit);
}
//System.out.println(g1x+" "+g1y+" "+g2x+" "+g2y);
pointList[g1x][g1y].status=1;pointList[g1x][g1y].s=n;
pointList[g2x][g2y].status=1;pointList[g2x][g2y].s=n;
}
play.repaint();
}
}
private void initComponents() { play = new Play(pointList);
change = new javax.swing.JComboBox();
start = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); play.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
play.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
play.setPreferredSize(new java.awt.Dimension(PX, PY)); javax.swing.GroupLayout playLayout = new javax.swing.GroupLayout(play);
play.setLayout(playLayout);
playLayout.setHorizontalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
);
playLayout.setVerticalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
); change.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "easy", "normall", "hard" }));
/*change.addActionListener(new java.awt.event.ActionListener() {
//public void actionPerformed(java.awt.event.ActionEvent evt) {
// changeActionPerformed(evt);
//}
});*/ start.setText("start"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(change, 0, 0, Short.MAX_VALUE)
.addComponent(start, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(change, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(start)))
.addContainerGap(28, Short.MAX_VALUE))
); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-612)/2, (screenSize.height-572)/2, 612, 572);
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JPanel;
public class Link extends javax.swing.JFrame {
private javax.swing.JComboBox change;
private static javax.swing.JPanel play;
private javax.swing.JButton start;
private static int PX=500;
private static int PY=PX;
private static int spit=10;
private static int d=PX/spit;
private static Graphics g;
private static int level=0;
private static int[] linea=new int[2];
private static int[] lineb=new int[2];
private static Point[][] pointList=new Point[spit][spit];
public Link() {
linea[0]=-1;linea[1]=-1;
lineb[0]=-1;lineb[1]=-1;
initComponents();
this.g=play.getGraphics();
for(int i=0;i<spit;i++)
for(int t=0;t<spit;t++)
pointList[i][t]=new Point();
setVisible(true);
setSize(PX+100, PY+100);
change.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
level=change.getSelectedIndex();
}
});
start.addActionListener(new startListener());
}
public class startListener implements ActionListener{ public void actionPerformed(ActionEvent e) {
int number=level*10+10;
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
pointList[k][m].status=0;
int g1x=(int)(Math.random()*spit),g1y=(int)(Math.random()*spit),
g2x=(int)(Math.random()*spit),g2y=(int)(Math.random()*spit);
char n='A'-1;
for(int i=1;i<=number;i++){
n++;
while(pointList[g1x][g1y].status==1)
{g1x=(int)(Math.random()*spit);
g1y=(int)(Math.random()*spit);
}
while(pointList[g2x][g2y].status==1){
g2x=(int)(Math.random()*spit);
g2y=(int)(Math.random()*spit);
}
//System.out.println(g1x+" "+g1y+" "+g2x+" "+g2y);
pointList[g1x][g1y].status=1;pointList[g1x][g1y].s=n;
pointList[g2x][g2y].status=1;pointList[g2x][g2y].s=n;
}
play.repaint();
}
}
private void initComponents() { play = new Play(pointList);
change = new javax.swing.JComboBox();
start = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); play.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
play.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
play.setPreferredSize(new java.awt.Dimension(PX, PY)); javax.swing.GroupLayout playLayout = new javax.swing.GroupLayout(play);
play.setLayout(playLayout);
playLayout.setHorizontalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
);
playLayout.setVerticalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
); change.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "easy", "normall", "hard" }));
/*change.addActionListener(new java.awt.event.ActionListener() {
//public void actionPerformed(java.awt.event.ActionEvent evt) {
// changeActionPerformed(evt);
//}
});*/ start.setText("start"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(change, 0, 0, Short.MAX_VALUE)
.addComponent(start, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(change, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(start)))
.addContainerGap(28, Short.MAX_VALUE))
); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-612)/2, (screenSize.height-572)/2, 612, 572);
}
解决方案 »
- swt将部分位于上方组件隐藏后,怎么才能使得其下方的组件自适应高度,回复就给分
- 如何在计算器的运算符号连着被按两次取后一次呢怎么设置
- 线程的一句话,我不明白!
- 请教System.exit(0),System.exit(1)和return的区别!
- 问一下java套打(卫生许可证之类)的问题
- 为什么是Integer.arseInt(),而不是Integer.valueOf()
- 题: 我的TOMCAT 4.0 的STARTUP.BAT 运行失败!应该如何设置?
- 新手请教!!!!
- (向高手门致敬!)Visual Age for JAVA,我需要看什么书?
- java 对象转xml 多层嵌套
- 内部类访问外部类的成员变量,谁能解释一下
- java的微调器的监听
if(ax==bx||by==ay){
pointList[ax][ay].status=0;
pointList[bx][by].status=0;
if(lineIsConnect(ax, ay, bx, by)){
linea[0]=ax;linea[1]=ay;
lineb[0]=bx;lineb[1]=by;
return true;
}
pointList[ax][ay].status=1;
pointList[bx][by].status=1;}
int[] field=getFiled(ax, ay, bx, by);
System.out.println(field[0]+" "+field[1]+" "+field[2]+" "+field[3]+" \n");
pointList[ax][ay].status=0;
pointList[bx][by].status=0;
if(field[0]>=0)
for(int m=field[0];m<=field[1];m++)
if(lineIsConnect(ax, m, bx, m)){
linea[0]=ax;linea[1]=m;
lineb[0]=bx;lineb[1]=m;
pointList[ax][ay].s=' ';
pointList[bx][by].s=' ';
return true;
}
if(field[2]>=0)
for(int m=field[2];m<=field[3];m++)
if(lineIsConnect(m,ay,m,by)){
linea[0]=m;linea[1]=ay;
lineb[0]=m;lineb[1]=by;
pointList[ax][ay].s=' ';
pointList[bx][by].s=' ';
return true;
}
pointList[ax][ay].status=1;
pointList[bx][by].status=1;
return false;
}
public static int[] getFiled(int ax,int ay,int bx,int by){
int[] field=new int[4];
int[] f1=lockFiled(ax, ay);
int[] f2=lockFiled(bx, by);
System.out.println(f1[0]+" "+f1[1]+" "+f1[2]+" "+f1[3]+" \n");
System.out.println(f2[0]+" "+f2[1]+" "+f2[2]+" "+f2[3]+" \n");
int[] m=getUni(f1[0], f1[1], f2[0], f2[1]);
int[] k=getUni(f1[2], f1[3], f2[2], f2[3]);
field[0]=m[0];field[1]=m[1];
field[2]=k[0];field[3]=k[1];
return field;
}
public static int[] getUni(int at,int ab,int bt,int bb){
int[] t=new int[2];
if(ab<bt){t[0]=-1;t[1]=-1;}
else if(ab==bt)t[0]=t[1]=ab;
else if(ab>bt&&ab<=bb){
if(at<bt){t[0]=bt;t[1]=ab;}
else if(at>=bt){t[0]=at;t[1]=ab;}
}
else if(ab>bb){
if(at<=bt){t[0]=bt;t[1]=bb;}
else if(at>bt&&at<bb){t[0]=at;t[1]=bb;}
else if(at==bb){t[0]=t[1]=bb;}
else if(at>bb){t[0]=t[1]=-1;}
}
return t;
}
public static int[] lockFiled(int x,int y){
int[] t=new int[4];
for(int m=y+1;;m++){
if(m>spit-1){t[1]=spit-1;break;}
if(pointList[x][m].status==1){t[1]=m-1;break;}
}
for(int m=y-1;;m--){
if(m<0){t[0]=0;break;}
if(pointList[x][m].status==1){t[0]=m+1;break;}
}
for(int m=x+1;;m++){
if(m>spit-1){t[3]=spit-1;break;}
if(pointList[m][y].status==1){t[3]=m-1;break;}
}
for(int m=x-1;;m--){
if(m<0){t[2]=0;break;}
if(pointList[m][y].status==1){t[2]=m+1;break;}
}
return t;
}
public static void disStatus(){
for(int m=0;m<spit;m++){
for(int k=0;k<spit;k++)
System.out.print(pointList[k][m].status+" ");
System.out.println();
}
}
/*public static int[] getlocate(int x,int y){
int[] t=new int[2];
t[0]=x*d;t[1]=y*d;
return t;
}*/ /*public static int[] getindex(int x,int y){
int[] t=new int[2];
t[0]=x/d;t[1]=y/d;
return t;
}*/
int maxx=ax<bx?bx:ax,minx=ax<bx?ax:bx;
int maxy=ay<by?by:ay,miny=ay<by?ay:by;
for(int m=minx;m<=maxx;m++)
for(int k=miny;k<=maxy;k++)
if(pointList[m][k].status==1)return false;
return true;
}
public class Point{
int status=0;
char s=' ';
public Point(){};
public Point(int status,char s){
this.status=status;
this.s=s;
}
protected boolean equals(Point p){
if(this.status==p.status&&this.s==p.s)return true;
else return false;
}
}
public class Play extends JPanel{
Point[][] pointList;
private int x1=-1,x2=-1,y1=-1,y2=-1;
private int xi1,xi2,yi1,yi2;
private int count=0;
private boolean p=false;
public Play(final Point[][] pointList){
this.pointList=pointList;
addMouseListener(new MouseListener(){
Point[][] pointLPoints;
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
count++;
count=count%3;
if(count==1)
{x1=(e.getX()/d)*d;y1=(e.getY()/d)*d;}
else if(count==2)
{x2=(e.getX()/d)*d;y2=(e.getY()/d)*d;
xi1=x1/d;xi2=x2/d;yi1=y1/d;yi2=y2/d;
if((pointList[xi1][yi1].s)==(pointList[xi2][yi2].s)
&&(pointList[xi1][yi1].status==1&&pointList[xi2][yi2].status==1)
&&!(xi1==xi2&&yi1==yi2))
{if(pointIsConnect(xi1, yi1, xi2, yi2)) {
//disStatus();
p=true;}
}}
else{x1=-1;x2=-1;y1=-1;y2=-1;}
repaint();
}
});
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(win()){
p=false;count=0;x1=-1;x2=-1;
g.drawString("you win", PX/2, PY/2);}
else{
for(int i=0;i<=PY;i+=d)
g.drawLine(0, i, PX, i);
for(int i=0;i<=PX;i+=d)
g.drawLine(i, 0, i, PY);
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
if(pointList[k][m].status==1)
g.drawString(String.valueOf(pointList[k][m].s), k*d+10, m*d+20);
paintSelect(g);
if(xi1>=0&&p)paintPath(g);}
}
public void paintPath(Graphics g){
g.setColor(Color.red);int t=d/2;
int s1=xi1*d+t, s2=yi1*d+t, s3=xi2*d+t, s4=yi2*d+t;
int r1=linea[0]*d+t,r2=linea[1]*d+t,r3=lineb[0]*d+t,r4=lineb[1]*d+t;
g.drawLine(r1, r2, r3, r4);
if(r1==s1||r2==s2){
g.drawLine(r1, r2, s1, s2);
g.drawLine(r3, r4, s3, s4);
}
else{
g.drawLine(r1, r2, s3, s4);
g.drawLine(r3, r4, s1, s2);
}
xi1=-1;
p=false;
}
public boolean win(){
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
if(pointList[k][m].status==1)return false;
return true;
}
public void paintSelect(Graphics g){
g.setColor(Color.red);
if(x1>=0)g.drawRect(x1, y1, d, d);
if(x2>=0)g.drawRect(x2, y2, d, d);
}
}
public static void main(String args[]) {
new Link();
/*
pointList[0][1].status=1;
pointList[1][0].status=1;
pointList[2][1].status=1;
pointList[3][1].status=1;
pointList[3][2].status=1;
pointList[3][3].status=1;
pointList[3][6].status=1;
pointList[5][5].status=1;
pointList[7][8].status=1;
pointList[9][9].status=1;
pointList[9][8].status=1;
pointList[8][9].status=1;
pointList[8][8].status=1;
pointList[8][7].status=1;
pointList[3][4].status=1;
pointList[3][5].status=1;
pointList[3][7].status=1;
pointList[3][8].status=1;
pointList[3][7].status=1;
pointList[0][1].s='T';
pointList[1][0].s='P';
pointList[2][1].s='H';
pointList[3][1].s='T';
pointList[3][2].s='I';
pointList[3][3].s='F';
pointList[3][6].s='P';
pointList[5][5].s='I';
pointList[7][8].s='O';
pointList[9][9].s='O';
pointList[9][8].s='F';
pointList[8][9].s='E';
pointList[8][8].s='E';
pointList[8][7].s='R';
pointList[3][4].s='R';
pointList[3][5].s='G';
pointList[3][8].s='G';
pointList[3][7].s='H';*/
disStatus();
//int[] t=getFiled(7, 8, 8, 7);
//System.out.println(t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" ");
//System.out.println(pointIsConnect(3, 4, 8, 7));
//System.out.println(linea[0]+" "+linea[1]+" "+lineb[0]+" "+lineb[1]+" ");
}
}
刚copy完 试试~~~~~~~~~~
我自己测试了一下,发现原来我的鼠标监听器起作用的方法是clicked,之所以感觉没反应是因为你点击鼠标的时候稍微拖了一下,这时监听器就调用dragged方法而不是clicked,所以你吧public class Click implements MouseListener 里面的clicked方法里面的代码剪切到pressed方法里就行了
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JPanel;
public class Link extends javax.swing.JFrame {
private javax.swing.JComboBox change;
private static javax.swing.JPanel play;
private javax.swing.JButton start;
private static int PX=500;
private static int PY=PX;
private static int spit=10;
private static int d=PX/spit;
private static Graphics gp;
private static int level=0;
private static int[] linea=new int[2];
private static int[] lineb=new int[2];
private int buttonStart=0;
private static Point[][] pointList=new Point[spit][spit];
public Link() {
linea[0]=-1;linea[1]=-1;
lineb[0]=-1;lineb[1]=-1;
initComponents();
//gp.drawLine(1, 1, 100, 100);
for(int i=0;i<spit;i++)
for(int t=0;t<spit;t++)
pointList[i][t]=new Point();
setVisible(true);
setSize(PX+100, PY+100);
change.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
level=change.getSelectedIndex();
}
});
start.addActionListener(new startListener());
}
public class startListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
((Play)play).setClear();
buttonStart++;
int number=level*10+10;
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
pointList[k][m].status=0;
int g1x=(int)(Math.random()*spit),g1y=(int)(Math.random()*spit),
g2x=(int)(Math.random()*spit),g2y=(int)(Math.random()*spit);
char n='A'-1;
for(int i=1;i<=number;i++){
n++;
while(pointList[g1x][g1y].status==1)
{g1x=(int)(Math.random()*spit);
g1y=(int)(Math.random()*spit);
}
while(pointList[g2x][g2y].status==1){
g2x=(int)(Math.random()*spit);
g2y=(int)(Math.random()*spit);
}
//System.out.println(g1x+" "+g1y+" "+g2x+" "+g2y);
pointList[g1x][g1y].status=1;pointList[g1x][g1y].s=n;
pointList[g2x][g2y].status=1;pointList[g2x][g2y].s=n;
}
play.repaint();
}
}
private void initComponents() { play = new Play(pointList);
change = new javax.swing.JComboBox();
start = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); play.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
play.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
play.setPreferredSize(new java.awt.Dimension(PX, PY)); javax.swing.GroupLayout playLayout = new javax.swing.GroupLayout(play);
play.setLayout(playLayout);
playLayout.setHorizontalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
);
playLayout.setVerticalGroup(
playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 494, Short.MAX_VALUE)
); change.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "easy", "normall", "hard" }));
/*change.addActionListener(new java.awt.event.ActionListener() {
//public void actionPerformed(java.awt.event.ActionEvent evt) {
// changeActionPerformed(evt);
//}
});*/ start.setText("start"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(change, 0, 0, Short.MAX_VALUE)
.addComponent(start, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(change, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(start)))
.addContainerGap(28, Short.MAX_VALUE))
); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-612)/2, (screenSize.height-572)/2, 612, 572);
}
private static boolean pointIsConnect(int ax,int ay,int bx,int by){
if(ax==bx||by==ay){
pointList[ax][ay].status=0;
pointList[bx][by].status=0;
if(lineIsConnect(ax, ay, bx, by)){
linea[0]=ax;linea[1]=ay;
lineb[0]=bx;lineb[1]=by;
return true;
}
pointList[ax][ay].status=1;
pointList[bx][by].status=1;}
int[] field=getFiled(ax, ay, bx, by);
System.out.println(field[0]+" "+field[1]+" "+field[2]+" "+field[3]+" \n");
pointList[ax][ay].status=0;
pointList[bx][by].status=0;
if(field[0]>=0)
for(int m=field[0];m<=field[1];m++)
if(lineIsConnect(ax, m, bx, m)){
linea[0]=ax;linea[1]=m;
lineb[0]=bx;lineb[1]=m;
pointList[ax][ay].s=' ';
pointList[bx][by].s=' ';
return true;
}
if(field[2]>=0)
for(int m=field[2];m<=field[3];m++)
if(lineIsConnect(m,ay,m,by)){
linea[0]=m;linea[1]=ay;
lineb[0]=m;lineb[1]=by;
pointList[ax][ay].s=' ';
pointList[bx][by].s=' ';
return true;
}
pointList[ax][ay].status=1;
pointList[bx][by].status=1;
return false;
}
public static int[] getFiled(int ax,int ay,int bx,int by){
int[] field=new int[4];
int[] f1=lockFiled(ax, ay);
int[] f2=lockFiled(bx, by);
System.out.println(f1[0]+" "+f1[1]+" "+f1[2]+" "+f1[3]+" \n");
System.out.println(f2[0]+" "+f2[1]+" "+f2[2]+" "+f2[3]+" \n");
int[] m=getUni(f1[0], f1[1], f2[0], f2[1]);
int[] k=getUni(f1[2], f1[3], f2[2], f2[3]);
field[0]=m[0];field[1]=m[1];
field[2]=k[0];field[3]=k[1];
return field;
}
public static int[] getUni(int at,int ab,int bt,int bb){
int[] t=new int[2];
if(ab<bt){t[0]=-1;t[1]=-1;}
else if(ab==bt)t[0]=t[1]=ab;
else if(ab>bt&&ab<=bb){
if(at<bt){t[0]=bt;t[1]=ab;}
else if(at>=bt){t[0]=at;t[1]=ab;}
}
else if(ab>bb){
if(at<=bt){t[0]=bt;t[1]=bb;}
else if(at>bt&&at<bb){t[0]=at;t[1]=bb;}
else if(at==bb){t[0]=t[1]=bb;}
else if(at>bb){t[0]=t[1]=-1;}
}
return t;
}
public static int[] lockFiled(int x,int y){
int[] t=new int[4];
for(int m=y+1;;m++){
if(m>spit-1){t[1]=spit-1;break;}
if(pointList[x][m].status==1){t[1]=m-1;break;}
}
for(int m=y-1;;m--){
if(m<0){t[0]=0;break;}
if(pointList[x][m].status==1){t[0]=m+1;break;}
}
for(int m=x+1;;m++){
if(m>spit-1){t[3]=spit-1;break;}
if(pointList[m][y].status==1){t[3]=m-1;break;}
}
for(int m=x-1;;m--){
if(m<0){t[2]=0;break;}
if(pointList[m][y].status==1){t[2]=m+1;break;}
}
return t;
}
public static void disStatus(){
for(int m=0;m<spit;m++){
for(int k=0;k<spit;k++)
System.out.print(pointList[k][m].status+" ");
System.out.println();
}
}
/*public static int[] getlocate(int x,int y){
int[] t=new int[2];
t[0]=x*d;t[1]=y*d;
return t;
}*/ /*public static int[] getindex(int x,int y){
int[] t=new int[2];
t[0]=x/d;t[1]=y/d;
return t;
}*/
public static boolean lineIsConnect(int ax,int ay,int bx,int by ){
int maxx=ax<bx?bx:ax,minx=ax<bx?ax:bx;
int maxy=ay<by?by:ay,miny=ay<by?ay:by;
for(int m=minx;m<=maxx;m++)
for(int k=miny;k<=maxy;k++)
if(pointList[m][k].status==1)return false;
return true;
}
public class Point{
int status=0;
char s=' ';
public Point(){};
public Point(int status,char s){
this.status=status;
this.s=s;
}
protected boolean equals(Point p){
if(this.status==p.status&&this.s==p.s)return true;
else return false;
}
}
public class Play extends JPanel{
private Point[][] pointList;
private int x1=-1,x2=-1,y1=-1,y2=-1;
private int xi1,xi2,yi1,yi2;
private int count=-4;
private boolean p=false;
public Play(Point[][] pointList){
this.pointList=pointList;
addMouseListener(new Click());
}
public void setClear(){
count=0;
x1=-1;x2=-1;
}
public class Click implements MouseListener{
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
count++;
count=count%3;
//System.out.println(count);
if(count==1)
{x1=(e.getX()/d)*d;y1=(e.getY()/d)*d;}
else if(count==2)
{x2=(e.getX()/d)*d;y2=(e.getY()/d)*d;
xi1=x1/d;xi2=x2/d;yi1=y1/d;yi2=y2/d;
if((pointList[xi1][yi1].s)==(pointList[xi2][yi2].s)
&&(pointList[xi1][yi1].status==1&&pointList[xi2][yi2].status==1)
&&!(xi1==xi2&&yi1==yi2))
{if(pointIsConnect(xi1, yi1, xi2, yi2)) {
//disStatus();
p=true;}
}}
else{x1=-1;x2=-1;y1=-1;y2=-1;}
repaint();
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(buttonStart==0){g.drawString("press star", PX/2, PY/2);}
else if(win()){
p=false;count=0;x1=-1;x2=-1;
g.drawString("you win", PX/2, PY/2);}
else{
for(int i=0;i<=PY;i+=d)
g.drawLine(0, i, PX, i);
for(int i=0;i<=PX;i+=d)
g.drawLine(i, 0, i, PY);
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
if(pointList[k][m].status==1)
g.drawString(String.valueOf(pointList[k][m].s), k*d+10, m*d+20);
paintSelect(g);
if(xi1>=0&&p)paintPath(g);}
}
public void paintPath(Graphics g){
g.setColor(Color.red);int t=d/2;
int s1=xi1*d+t, s2=yi1*d+t, s3=xi2*d+t, s4=yi2*d+t;
int r1=linea[0]*d+t,r2=linea[1]*d+t,r3=lineb[0]*d+t,r4=lineb[1]*d+t;
g.drawLine(r1, r2, r3, r4);
if(r1==s1||r2==s2){
g.drawLine(r1, r2, s1, s2);
g.drawLine(r3, r4, s3, s4);
}
else{
g.drawLine(r1, r2, s3, s4);
g.drawLine(r3, r4, s1, s2);
}
xi1=-1;
p=false;
}
public boolean win(){
for(int m=0;m<spit;m++)
for(int k=0;k<spit;k++)
if(pointList[k][m].status==1)return false;
return true;
}
public void paintSelect(Graphics g){
g.setColor(Color.red);
if(x1>=0)g.drawRect(x1, y1, d, d);
if(x2>=0)g.drawRect(x2, y2, d, d);
}
}
public static void main(String args[]) {
new Link();
/*
pointList[0][1].status=1;
pointList[1][0].status=1;
pointList[2][1].status=1;
pointList[3][1].status=1;
pointList[3][2].status=1;
pointList[3][3].status=1;
pointList[3][6].status=1;
pointList[5][5].status=1;
pointList[7][8].status=1;
pointList[9][9].status=1;
pointList[9][8].status=1;
pointList[8][9].status=1;
pointList[8][8].status=1;
pointList[8][7].status=1;
pointList[3][4].status=1;
pointList[3][5].status=1;
pointList[3][7].status=1;
pointList[3][8].status=1;
pointList[3][7].status=1;
pointList[0][1].s='T';
pointList[1][0].s='P';
pointList[2][1].s='H';
pointList[3][1].s='T';
pointList[3][2].s='I';
pointList[3][3].s='F';
pointList[3][6].s='P';
pointList[5][5].s='I';
pointList[7][8].s='O';
pointList[9][9].s='O';
pointList[9][8].s='F';
pointList[8][9].s='E';
pointList[8][8].s='E';
pointList[8][7].s='R';
pointList[3][4].s='R';
pointList[3][5].s='G';
pointList[3][8].s='G';
pointList[3][7].s='H';*/
//disStatus();
//int[] t=getFiled(7, 8, 8, 7);
//System.out.println(t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" ");
//System.out.println(pointIsConnect(3, 4, 8, 7));
//System.out.println(linea[0]+" "+linea[1]+" "+lineb[0]+" "+lineb[1]+" ");
}
}