微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编程解决各种问题一 ----------------Flash 经典智力游戏一 人羊菜以及狼的故事

一个问题:帮助男人用船把狼、羊、和一箱菜运送到河对面,船一次只能运一样,而且有苛刻的附加条件:当男人不在时,狼会吃羊,羊也会吃卷心菜。移动鼠标,开始解题吧 

这个有游戏地址 :http://www.chinaren.com/20050330/n224934721.shtml


没玩过的最好玩过再看我的代码,不懂的可以问我,写的比较乱。。。

一个有两个类,这个是主要的处理类


import java.util.ArrayList;
public class Flash {
	
	static Body sheep;

	static Body dish;
	
	static Body wolf;
	
	static Body people;
	
	static Body tarBody;		//当前运送的东西
	
	final static ArrayList<Body> tarList = new ArrayList<Body>();
	final static ArrayList<Body> curList = new ArrayList<Body>();
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//初始化羊
		sheep = new Body(Body.SHEEP);
		
		sheep.setnAfraidindex(Body.WOLF);
		sheep.setnLikeIndex(Body.disH);
		
		//初始化菜
		dish = new Body(Body.disH);
		
		dish.setnAfraidindex(Body.NONE);
		dish.setnLikeIndex(Body.NONE);
		
		//初始化狼
		wolf = new Body(Body.WOLF);
		
		wolf.setnAfraidindex(Body.NONE);
		wolf.setnLikeIndex(Body.SHEEP);
		
		//初始化特殊的人
		people = new Body(Body.NONE);
		
		people.setnAfraidindex(Body.NONE);
		people.setnLikeIndex(Body.NONE);
		
		curList.add(people);
		curList.add(wolf);
		curList.add(sheep);
		curList.add(dish);
		
		new Thread(){
			public void run(){
				while(tarList.toArray().length < 4){
					if(curList.indexOf(people) != -1){
						Transportation(tarList,curList,1);
					}else{
						Transportation(curList,tarList,0);
					}
				}
			}
		}.start();
	}
	
	public static void Transportation(ArrayList<Body> tar,ArrayList<Body> cur,int flag){
		
		//随即取出一个备选的运送的Body
		boolean bFlag = false;
		if(!cur.equals(curList)){
			boolean bFlag2 = false;
			//比较剩下的Body,是否会出现弱者被吃掉的情况
			//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
			for(Body bb : cur){
				if(!bb.equals(people)){
					for(Body bbb : cur){
						if(!bbb.equals(people) && !bbb.equals(bb)){
							if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidindex() == bb.getIndex()
									|| bb.getnAfraidindex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
								bFlag2 = true;
								break;
							}
						}
					}
					if(bFlag2){
						break;
					}
				}
			}
			
			if(cur.toArray().length == 2 || bFlag2 == false){
				tar.add(people);
				cur.remove(people);
				if(flag == 1){
					System.out.println("向目的地运送:空");
				}else{
					System.out.println("向目原来地方运送:空");
				}
			}else{
				for(Body b : cur){
					bFlag = false;
					if(!b.equals(people)){
						if(tarBody == null){
							//比较剩下的Body,是否会出现弱者被吃掉的情况
							//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
							for(Body bb : cur){
								if(!bb.equals(b) && !bb.equals(people)){
									for(Body bbb : cur){
										if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
											if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidindex() == bb.getIndex()
													|| bb.getnAfraidindex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
												bFlag = true;
												break;
											}
										}
									}
									if(bFlag){
										break;
									}
								}
							}
						}else if(!tarBody.equals(b)){
							//比较剩下的Body,是否会出现弱者被吃掉的情况
							//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
							for(Body bb : cur){
								if(!bb.equals(b) && !bb.equals(people)){
									for(Body bbb : cur){
										if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
											if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidindex() == bb.getIndex()
													|| bb.getnAfraidindex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
												bFlag = true;
												break;
											}
										}
									}
									if(bFlag){
										break;
									}
								}
							}
						}
						
						if(!bFlag){
							String str = "";
							switch(b.getIndex()){
							case Body.disH:
								str = "菜";
								break;
							case Body.SHEEP:
								str = "羊";
								break;
							case Body.WOLF:
								str = "狼";
								break;
							}
							if(flag == 1){
								System.out.println("向目的地运送:"+str);
							}else{
								System.out.println("向目原来地方运送:"+str);
							}
							tarBody = b;
							tar.add(b);
							tar.add(people);
							cur.remove(b);
							cur.remove(people);
							break;
						}
					}
				}
			}
		}else{
			for(Body b : cur){
				bFlag = false;
				if(!b.equals(people)){
					if(tarBody == null){
						//比较剩下的Body,是否会出现弱者被吃掉的情况
						//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
						for(Body bb : cur){
							if(!bb.equals(b) && !bb.equals(people)){
								for(Body bbb : cur){
									if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
										if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidindex() == bb.getIndex()
												|| bb.getnAfraidindex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
											bFlag = true;
											break;
										}
									}
								}
								if(bFlag){
									break;
								}
							}
						}
					}else if(!tarBody.equals(b)){
						//比较剩下的Body,是否会出现弱者被吃掉的情况
						//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
						for(Body bb : cur){
							if(!bb.equals(b) && !bb.equals(people)){
								for(Body bbb : cur){
									if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
										if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidindex() == bb.getIndex()
												|| bb.getnAfraidindex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
											bFlag = true;
											break;
										}
									}
								}
								if(bFlag){
									break;
								}
							}
						}
					}
					
					
					if(!bFlag){
						String str = "";
						switch(b.getIndex()){
						case Body.disH:
							str = "菜";
							break;
						case Body.SHEEP:
							str = "羊";
							break;
						case Body.WOLF:
							str = "狼";
							break;
						}
						if(flag == 1){
							System.out.println("向目的地运送:"+str);
						}else{
							System.out.println("向目原来地方运送:"+str);
						}
						tarBody = b;
						tar.add(b);
						tar.add(people);
						cur.remove(b);
						cur.remove(people);
						break;
					}
				}
			}
		}
		
	}
}
这个是物体类,我把人菜狼和羊归为了物体
public class Body {
		
	public static final int NONE = 0;
	public static final int SHEEP = 1;
	public static final int disH = 2;
	public static final int WOLF = 3;
	
	private int index;
	
	private int nLikeIndex;
	
	private int nAfraidindex;
	
	public Body(int index){
		this.index = index;
	}


	public int getIndex() {
		return index;
	}


	public void setIndex(int index) {
		this.index = index;
	}


	public int getnLikeIndex() {
		return nLikeIndex;
	}


	public void setnLikeIndex(int nLikeIndex) {
		this.nLikeIndex = nLikeIndex;
	}


	public int getnAfraidindex() {
		return nAfraidindex;
	}


	public void setnAfraidindex(int nAfraidindex) {
		this.nAfraidindex = nAfraidindex;
	}	
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐