flash小游戏:求解人鬼过河flash小游戏的正确方法?来源: 发布时间:星期四, 2008年11月20日 浏览:8次 评论:0
求解人鬼过河flash小游戏的正确算法
或者把我写的源码改好 package game; import java.util.*; public class RiverGame { //人 private final String PERSON = "1"; //鬼 private final String GHOST = "2"; //开始的岸上的人和鬼集合 private List <String> a; //船上的人和鬼集合 private List <String> b; //到达的岸上的人和鬼集合 private List <String> c; public RiverGame() { init(); } private void init(){ a = new ArrayList <String>(); for (int i = 0; i < 3; i++) { a.add(PERSON); a.add(GHOST); } b = new ArrayList <String>(); c = new ArrayList <String>(); } //获取某一个岸或船上人或鬼的数量 public int getCount(List <String> arg0, String arg1) { int count = 0; for (String s : arg0) { if (arg1.equals(s)) { count++; } } return count; } //打印List的Method private String show(List <String> s){ StringBuffer ss=new StringBuffer(); for(String s1:s){ ss.append(s1); } return ss.toString(); } //从岸到船 public void transToShip(List <String> arg0, List <String> arg1,List <String> reacher, int direction) { // 传两人 if ((getCount(arg0, PERSON) - 2 >= getCount(arg0, GHOST))&& (getCount(arg0, PERSON) >= 2) && (arg1.size() == 0)) { for (int i = 0; i < 2; i++) { arg0.remove(PERSON); arg1.add(PERSON); } System.out.print("传两人 "); if (b.size() >= 1) { crossRiver(arg1, reacher, direction); }else{ for (int i = 0; i < 2; i++) { arg0.add(PERSON); arg1.remove(PERSON); } } } // 传两鬼 if ((getCount(arg0, PERSON) >= getCount(arg0, GHOST))&& (getCount(arg0, GHOST) >= 2) && (arg1.size() == 0)) { for (int i = 0; i < 2; i++) { arg0.remove(GHOST); arg1.add(GHOST); } System.out.print("传两鬼 "); if (b.size() >= 1) { crossRiver(arg1, reacher, direction); }else{ for (int i = 0; i < 2; i++) { arg0.add(GHOST); arg1.remove(GHOST); } } } // 传一人一鬼 if ((getCount(arg0, PERSON) >= getCount(arg0, GHOST))&& (getCount(arg0, GHOST) >= 1) && (arg1.size() == 0)) { arg0.remove(GHOST); arg0.remove(PERSON); arg1.add(GHOST); arg1.add(PERSON); System.out.print("传一人一鬼 "); if (b.size() >= 1) { crossRiver(arg1, reacher, direction); }else{ arg0.add(GHOST); arg0.add(PERSON); arg1.remove(GHOST); arg1.remove(PERSON); } } // 传一人 if ((getCount(arg0, PERSON) - 1 >= getCount(arg0, GHOST))&& (getCount(arg0, PERSON) >= 1) && (arg1.size() <= 1)) { arg0.remove(PERSON); arg1.add(PERSON); System.out.print("传一人 "); if (b.size() >= 1) { crossRiver(arg1, reacher, direction); }else{ arg0.add(PERSON); arg1.remove(PERSON); } } // 传一鬼 if ((getCount(arg0, PERSON) >= getCount(arg0, GHOST))&& (getCount(arg0, GHOST) >= 1) && (arg1.size() <= 1)) { arg0.remove(GHOST); arg1.add(GHOST); System.out.print("传一鬼 "); if (b.size() >= 1) { crossRiver(arg1, reacher, direction); }else{ arg0.add(GHOST); arg1.remove(GHOST); } } } //从船到岸 public void transToBank(List <String> arg0, List <String> arg1,List <String> reacher, int direction) { // 传两人 if (arg1.size() <= 4 && (getCount(arg0, PERSON) == 2)&& (arg0.size() == 2)) { for (int i = 0; i < 2; i++) { arg0.remove(PERSON); arg1.add(PERSON); } System.out.print("传两人 "); crossRiver(arg1, reacher, direction); } // 传两鬼 if ((arg1.size() <= 4)&& (((getCount(arg1, PERSON) - 2 >= getCount(arg1, GHOST)) && (getCount(arg1, PERSON) > 0)) || (getCount(arg1, PERSON) == 0))&& (getCount(arg0, GHOST) == 2) && (arg0.size() == 2)) { for (int i = 0; i < 2; i++) { arg0.remove(GHOST); arg1.add(GHOST); } System.out.print("传两鬼 "); crossRiver(arg1, reacher, direction); } // 传一人一鬼 System.out.println("船:"+show(arg0)); System.out.println("岸:"+show(arg1)); System.out.println("reacher:"+show(reacher)); System.out.println(direction); if ((arg1.size() <= 4) && (getCount(arg0, GHOST) == 1)&& (getCount(arg0, PERSON) == 1) && (arg0.size() == 2)) { arg0.remove(GHOST); arg0.remove(PERSON); arg1.add(GHOST); arg1.add(PERSON); System.out.print("传一人一鬼 "); crossRiver(arg1, reacher, direction); } // 传一人 if ((arg1.size() <= 5) && (getCount(arg0, PERSON) >= 1)&& (arg0.size() >= 1)) { arg0.remove(PERSON); arg1.add(PERSON); System.out.print("传一人 "); crossRiver(arg1, reacher, direction); } // 传一鬼 if ((arg1.size() <= 5)&& (((getCount(arg1, PERSON) - 2 >= getCount(arg1, GHOST)) && (getCount(arg1, PERSON) > 0)) || (getCount(arg1, PERSON) == 0))&& (getCount(arg0, GHOST) >= 1) && (arg0.size() >= 1)) { arg0.remove(GHOST); arg1.add(GHOST); System.out.print("传一鬼 "); crossRiver(arg1, reacher, direction); } } public void crossRiver(List <String> arg0, List <String> arg1, int direction) { if (direction == 1) { transToShip(arg0, arg1, a, 2); } else if (direction == 2) { transToBank(arg0, arg1, b, 3); } else if (direction == 3) { transToShip(arg0, arg1, c, 4); } else if (direction == 4) { if (c.size() == 6) { System.out.println("过河了"); return; } transToBank(arg0, arg1, b, 1); } } public static void main(String[] args) { RiverGame gr = new RiverGame(); gr.crossRiver(gr.a, gr.b, 3); } }
import java.util.*;
public class RiverGame { //人 private final String PERSON = "1"; //鬼 private final String GHOST = "2"; //开始的岸上的人和鬼集合 private List <String> a; //船上的人和鬼集合 private List <String> b; //到达的岸上的人和鬼集合 private List <String> c; public RiverGame() { a = new ArrayList <String>(); for (int i = 0; i < 3; i++) { a.add(PERSON); a.add(GHOST); } b = new ArrayList <String>(); c = new ArrayList <String>(); } //获取某一个岸或船上人或鬼的数量 public int getCount(List <String> arg0, String arg1) { int count = 0; for (String s : arg0) { if (arg1.equals(s)) { count++; } } return count; } //打印List的Method private String show(List <String> s){ } //从岸到船 public void transToShip(List <String> arg0, List <String> arg1,List <String> reacher, int direction) { // 传两人 ... // 传两鬼 ... // 传一人一鬼 ... // 传一人 ... // 传一鬼 ... } //从船到岸 public void transToBank(List <String> arg0, List <String> arg1,List <String> reacher, int direction) { // 传两人 ... // 传两鬼 ... // 传一人一鬼 ... // 传一人 ... // 传一鬼 ... } public void crossRiver(List <String> arg0, List <String> arg1, int direction) { if (direction == 1) { transToShip(arg0, arg1, a, 2); } else if (direction == 2) { transToBank(arg0, arg1, b, 3); } else if (direction == 3) { transToShip(arg0, arg1, c, 4); } else if (direction == 4) { if (c.size() == 6) { System.out.println("过河了"); return; } transToBank(arg0, arg1, b, 1); } } public static void main(String[] args) { RiverGame gr = new RiverGame(); gr.crossRiver(gr.a, gr.b, 3); } }
刚回了的........
import java.util.*; public class RiverGame { private boolean sf = true; private final int pairs; private final String PERSON = "1"; // 人 private final String GHOST = "2"; // 鬼 private List <String> leftCount; // 开始的岸上的人和鬼集合 private List <String> middleCount; // 船上的人和鬼集合 private List <String> rightCount; // 到达的岸上的人和鬼集合 public RiverGame (){ this(0); } public RiverGame (int count) { if(count <3){ pairs = 3; }else{ pairs = count; } leftCount = new ArrayList <String>(); for (int i = 0; i < pairs; i++) { leftCount.add(PERSON); leftCount.add(GHOST); } middleCount = new ArrayList <String>(); rightCount = new ArrayList <String>(); } public int getCount(List <String> list, String name) { int count = 0; for (String s : list) { if (name.equals(s)) { count++; } } return count; } public void leftToMiddle(String str1,String str2,int step){ int personCount = 0; int ghostCount = 0; if(str1.equals(PERSON)){ personCount++; }else{ ghostCount++; } leftCount.remove(str1); middleCount.add(str1); if(str2 != null&&str2.equals(PERSON)){ personCount++; leftCount.remove(str2); middleCount.add(str2); }else if(str2 != null&&str2.equals(GHOST)){ ghostCount++; leftCount.remove(str2); middleCount.add(str2); } System.out.println("第"+step+"步:"); System.out.print((personCount>0?personCount+"人":"")+(ghostCount>0?ghostCount+"鬼":"")+"上船 "); printc("过河 "); } public void middleToRight(String str1,String str2){ int personCount = 0; int ghostCount = 0; if(str1.equals(PERSON)){ personCount++; }else{ ghostCount++; } middleCount.remove(str1); rightCount.add(str1); if(str2 != null&&str2.equals(PERSON)){ personCount++; middleCount.remove(str2); rightCount.add(str2); }else if(str2 != null&&str2.equals(GHOST)){ ghostCount++; middleCount.remove(str2); rightCount.add(str2); } System.out.print((personCount>0?personCount+"人":"")+(ghostCount>0?ghostCount+"鬼":"")+"上岸; "); } public void rightToMiddle(String str){ if(str != null){ rightCount.remove(str); middleCount.add(str); System.out.print(1+(str.equals(PERSON)?"人":"鬼")+"上船 "); } printc("回来 "); } public void middleToLeft(String str){ if(str != null){ middleCount.remove(str); leftCount.add(str); System.out.print(1+(str.equals(PERSON)?"人":"鬼")+"上岸 "); } System.out.println(); } private void printc(String s){ int personCount = getCount(middleCount, PERSON); int ghostCount = getCount(middleCount, GHOST); System.out.print((personCount>0?personCount+"人":"")+(ghostCount>0?ghostCount+"鬼":"")+" "+s); if(leftCount.contains(PERSON)&&getCount(leftCount, GHOST)>getCount(leftCount, PERSON)){ sf = false; }else if(rightCount.contains(PERSON)&&getCount(rightCount, GHOST)>getCount(rightCount, PERSON)){ sf = false; } } public void crossRiver() { int step = 0; while(leftCount.size() != 0){ step++; if(leftCount.size()==pairs*2){ leftToMiddle(GHOST, GHOST,step); middleToRight(GHOST,null); rightToMiddle(null); middleToLeft(null); }else if(getCount(leftCount, PERSON)-2==getCount(leftCount, GHOST)&&middleCount.size()!=0){ leftToMiddle(GHOST, null,step); middleToRight(GHOST,null); rightToMiddle(null); middleToLeft(GHOST); }else if(getCount(leftCount, PERSON)-2==getCount(leftCount, GHOST)&&middleCount.size()==0){ leftToMiddle(PERSON, PERSON,step); middleToRight(PERSON,null); rightToMiddle(GHOST); middleToLeft(GHOST); } else if(getCount(leftCount, PERSON)>getCount(leftCount, GHOST)){ leftToMiddle(PERSON, null,step); middleToRight(PERSON,null); rightToMiddle(null); middleToLeft(null); }else if(leftCount.contains(PERSON)){ leftToMiddle(PERSON, null, step); middleToRight(PERSON,PERSON); rightToMiddle(GHOST); middleToLeft(null); }else{ leftToMiddle(GHOST, null, step); if(leftCount.size()==0){ middleToRight(GHOST,GHOST); }else{ middleToRight(GHOST,null); } rightToMiddle(null); middleToLeft(null); } if(!sf){ System.out.println("过河失败!!!"); return; } } System.out.println("成功过河了!"); } public static void main(String[] args) { RiverGame gr = new RiverGame (); gr.crossRiver(); } } 0
相关文章
读者评论
发表评论 |

