博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

苦丁茶

tomcent.cublog.cn
迷宫源代码
文件: Image.rar
大小: 7KB
下载: 下载

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.math.*;
import java.awt.event.*;

//窗体
public class migong extends JFrame
{
 public migong(String s)
 {
     super(s);    
     this.getContentPane().add(new Table(),BorderLayout.CENTER); 
 } 
 
 public static void main(String args[])
 {
  migong nf=new migong("迷宫");
  nf.setSize(370,315);
  //使窗体无法改变大小
  nf.setResizable(false);
  //设置窗体在屏幕的中心
   
  nf.setLocation(200,100);
  nf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  nf.setVisible(true); 
 }
}
//面板
class Table extends JPanel implements ActionListener
{
 int way=0;  ////路
 int wall=1; ///墙
 int east=2; ///方向东
 int south=3; ///方向南
 int west=4;  ////方向西
 int north=5; ////方向北
 int no_way=6; ///没有路
 int have_way=7;///有路
 boolean  end=true;//表示能够走通
 static  int x=0;
 int  record_way[]=new  int[100];
 //int  map[][]=new  int[15][15];
 
    int  map[][]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                  {1,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
                  {1,0,0,1,1,1,1,1,0,0,0,0,1,1,1},
                  {1,1,0,1,1,1,1,1,0,1,1,0,1,1,1},
                  {1,1,0,1,1,1,1,1,1,1,1,0,1,1,1},
                  {1,1,0,0,0,0,0,0,0,0,0,0,1,1,1},
                  {1,1,1,1,1,0,1,1,1,1,1,0,1,1,1},
                  {1,1,1,1,1,0,0,1,1,1,0,0,1,1,1},
                  {1,1,1,1,1,1,0,0,1,1,0,1,1,1,1},
                  {1,1,1,1,1,1,1,0,1,1,0,1,1,1,1},
                  {1,1,1,1,0,0,0,0,1,1,0,1,1,1,1},
                  {1,1,1,1,1,1,1,0,1,1,0,1,1,1,1},
                  {1,1,1,1,0,1,1,0,1,1,1,1,1,1,1},
                  {1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},
                  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                 };
    //new三个按钮
 JButton btnStart=new JButton("Start");          //开始
 JButton btnExit=new JButton("Exit");            //退出
 
 static int i;
 static int j;
 Image imgwall,imgeast,imgsouth,imgwest,imgno_way,imgnorth;
   
    //构造函数
 public Table()
 {  
  //空布局
  this.setLayout(null);
  //设置背景色(雪色)
  this.setBackground(new Color(255,250,250));  
 
  btnStart.setBounds(270,40,80,20);            //开始按钮
  btnExit.setBounds(270,80,80,20);             //退出按钮
  add(btnStart);                               
  btnStart.addActionListener(this);      
  add(btnExit);
  btnExit.addActionListener(this);
        String imgwallname="Image/wall.jpg";//
        String imgeastname="Image/east.jpg";
        String imgsouthname="Image/south.jpg";
        String imgwestname="Image/west.jpg";
        String imgno_wayname="Image/no_way.jpg";
        String imgnorthname="Image/north.jpg";
              
  
  imgwall=Toolkit.getDefaultToolkit().getImage(imgwallname);
  imgeast=Toolkit.getDefaultToolkit().getImage(imgeastname);
  imgsouth=Toolkit.getDefaultToolkit().getImage(imgsouthname);
  imgwest=Toolkit.getDefaultToolkit().getImage(imgwestname);
  imgno_way=Toolkit.getDefaultToolkit().getImage(imgno_wayname);
  imgnorth=Toolkit.getDefaultToolkit().getImage(imgnorthname);
  //加提示
     btnStart.setToolTipText("开始");                
  btnExit.setToolTipText("退出"); 

  
  
  
 }
 
   
    //绘画
 public void paint(Graphics g)
 {
  
     super.paint(g);                       //必须重写父类的这个方法,否则图形无法消除
  
  g.setColor(Color.pink);
 
       
  for(i=0;i<15;i++)
  { 
   for(j=0;j<15;j++)
      { 
            
     
      switch(map[j][i])                          //根据标志画图
    {
     case 0:
            break;
     case 1:
            g.drawImage(imgwall,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;
     case 2:
            g.drawImage(imgeast,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;  
     case 3:
            g.drawImage(imgsouth,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;
     case 4:
            g.drawImage(imgwest,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;
     case 5:
            g.drawImage(imgnorth,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;
     case 6:
            g.drawImage(imgno_way,10+i*(15+2)+2,15+j*(15+2)+2,this);
            break;
     
     default:break;
    }
         
   }
  }
  
 }
   
    //定时器的监听事件
 public void actionPerformed(ActionEvent e)
{
     //如果是开始按钮
     if(e.getSource()==btnStart)
  {
    
   
      start();
      for(int jj=0;jj<99;jj++)   ///打印结果!!
      {
       System.out.print(record_way[jj]+"  ");
       System.out.println(record_way[jj++]);
      }
  }
  if (e.getActionCommand()=="Exit") ///退出
  {
   System.exit(0);
  }
 }
 
 
 public void  start() 
 {
  go(1,1,east);
 
 }
 
 
 public int  go(int n,int m,int direction)  //坐标位置(n,m)
 {
  int   record_noway=0;
  int   back;
  if(n==13&&m==13)
  {
   end=false;
   return  have_way;
  }
  else
  {////////////////////////////////////////////////东方向
   if(map[n][m+1]==way&&direction!=west&&end)
   {
    
    map[n][m+1]=east;
    repaint();
    back=go(n,m+1,east);
    record_noway+=direction(n,m+1,back);
    
   }
   else
   {
    record_noway++;
    
   }
   
   
   
   ///////////////////////////////////////////南方向
   if(map[n+1][m]==way&&direction!=north&&end)
   {
    
    map[n+1][m]=south;
    repaint();
    
    back=go(n+1,m,south);
    record_noway+=direction(n+1,m,back);
   }
   else
   {
    record_noway++;
    
   }
   ////////////////////////////////////////////////////////西方向
   
   
   
   if(map[n][m-1]==way&&direction!=east&&end)
   {
    
    map[n][m-1]=west;
    repaint();
    back=go(n,m-1,west);
    record_noway+=direction(n,m-1,back);
   }
   else
   {
    record_noway++;
    
   }
   /////////////////////////////////////////////////////北方向
   if(map[n-1][m]==way&&direction!=south&&end)
   {
    
    map[n-1][m]=north;
    repaint();
    back=go(n-1,m,north);
    record_noway+=direction(n-1,m,back);
   }
   else
   {
    record_noway++;
    
   }
   //////////////////////////////////////////////////////////
      return  record_noway>=3?no_way:have_way;
  
  
  
   
  }
  
 }
 
 
 
 public int  direction(int n,int m,int back) //
 {
  
         
    if(back==no_way)
    {
     map[n][m]=no_way;
     repaint();
     return  1;
    }
    else
    {
     record_way[x]=n;
     record_way[x+1]=m;
     x=x+2;
     return  -2;///有路与 return  record_noway>=3?no_way:have_way;相应
    }
  
 }

 

发表于: 2006-11-14,修改于: 2006-11-14 12:25,已浏览1226次,有评论6条 推荐 投诉
网友: 本站网友 时间:2006-11-21 15:24:11 IP地址:221.7.131.★
强悍啊.哈哈

网友: zxfzl 时间:2007-05-21 09:53:51 IP地址:218.12.166.★
可以介绍一下这个游戏怎么玩吗?我运行出来,但怎么不能移动呢?谢谢了!

网友: tomcent_2006 时间:2007-06-19 00:06:04 IP地址:220.173.39.★
这个不是游戏,,,

网友: 本站网友 时间:2007-07-06 12:57:56 IP地址:219.140.169.★
你的这个迷宫只是简单的找到结果,还没有找到最短路径的算法,可能是因为你没做分支吧...呵呵

网友: 本站网友 时间:2007-10-30 16:52:37 IP地址:59.53.167.★
我出不来

网友: 本站网友 时间:2007-11-29 16:41:58 IP地址:61.50.223.★
怎么运行后只出现数字,没有出现运行的轨迹


给我留言
版权所有 ChinaUnix.net 页面生成时间:0.00915