예제 #1
0
	//determine whether "I" get win
	private bool win(){
		bool won = false;
		ArrayList foundRowList;
		
		if (stepCount >= multi_init.totalLength) {
			//find start edge
			for (int i = 0; i < multi_init.totalLength; i++){
				if(visitRow[i,0] ==  true){
					foundRowList = new ArrayList ();
					Coordination cord = new Coordination(i,0);
					foundRowList.Add(cord);
					//won = findNextEdge(i,0,1,foundRowList);
					won = setPathArray(cord, foundRowList);
					if (won) {
						Camera.main.SendMessage("disableButtons");

						ArrayList path = new ArrayList ();
						//set first path
						Coordination coor = (Coordination)foundRowList[0];
						addPath (coor.getX (), coor.getY (), path);
						addPath (coor.getX (), coor.getY ()+1, path);
						Coordination c = new Coordination (coor.getX (), coor.getY ()+1);
						setPathArray (c, path);

						character.winAnimation(path);
						break;
					}
				}
			}
		}
		
		return won;
	}
예제 #2
0
	private bool win(){
		Debug.Log ("<color=green>check win</color>");
		bool won = false;
		ArrayList foundRowList;
		int length = 0;
		if (SceneManager.GetActiveScene ().name == "scene_multi")
			length = multi_init.totalLength;
		else if (SceneManager.GetActiveScene ().name == "scene_ai")
			length = aiMode_init.totalLength;
		
		if (stepCount >= length) {
			//find start edge
			for (int i = 0; i < length; i++){
				if(visitCol[0,i] ==  true){
					foundRowList = new ArrayList ();
					Coordination cord = new Coordination(0,i);
					foundRowList.Add(cord);
					//won = findNextEdge(0,i,1,foundRowList);
					won = setPathArray(cord, foundRowList, length, length, false);
					if (won) {
						//StartCoroutine(winAnimation (foundRowList));
						//ch.SetActive(true);
						Camera.main.SendMessage("disableButtons");

						ArrayList path = new ArrayList ();

						//set first path
						Coordination coor = (Coordination)foundRowList[0];
						addPath (coor.getX (), coor.getY (), path);
						addPath (coor.getX ()+1, coor.getY (), path);
						Coordination c = new Coordination (coor.getX () + 1, coor.getY ());
						setPathArray (c, path, length, length, false);
						if(aiMode_init.mustConnect)
							checkConnectBonusNode (path);
						character.winAnimation(path);

						break;
					}
				}
			}
		}
		Debug.Log ("<color=green>" + won + "</color>");
		return won;
	}
예제 #3
0
	public static int getCheckmateY(){
		if (checkmatePath.Count >= 1) {
			/*
			Vector3 cm = (Vector3)checkmatePath [blueEdgeRespond.checkmatePath.Count - 1];
			cm = new Vector3 (cm.x, cm.y-19.5f, cm.z);
			for (int i = 0; i < 6; i++) {
				for (int j = 0; j < 7; j++) {
					if (blueNodeArray [i, j] != null && blueNodeArray [i, j].GetComponent<RectTransform> ().anchoredPosition3D.Equals(cm))
						return j;
				}
			}
			return -1;
			*/
			Coordination c = (Coordination)checkmatePath [checkmatePath.Count - 1];
			foreach(Coordination co in checkmatePath)
				Debug.Log(co.getX() +", "+ co.getY());
			return c.getY ();
		} else
			return -1;
	}
예제 #4
0
	//find path almost connected
	//c -> starting coordinate | path -> arraylist to record checked path | length -> board size | skipped -> check if skipped once already
	private bool findCheckmatePath(Coordination c, ArrayList path, int length, int end, bool skipped, Coordination targetCoor){
		//is the path found
		bool pathFound = false;
		bool preSkipped = skipped;

		//if path finding finished, return blank targetCoor
		if (c.getX () == end) {
			Debug.Log ("<color=red>Found end</color>");
			path.Add (targetCoor);
			return true;
		}

		//find path upward
		if (!pathFound && c.getX () - 1 >= 0) {
			Coordination coor = new Coordination (c.getX () - 1, c.getY ());
			if (visitCol [c.getX () - 1, c.getY ()] == true) { 
				if (!checkCoorEqual(path, coor.getX(), coor.getY()) && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Check Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					path.Add (coor);
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
				}
			}
		}

		//find path downward
		if (!pathFound && c.getX () + 1 <= (length)) {
			Coordination coor = new Coordination (c.getX () + 1, c.getY ());
			if (visitCol [c.getX (), c.getY ()] == true) {
				if (!checkCoorEqual(path, coor.getX(), coor.getY()) && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Check Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					path.Add (coor);
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
				}
			}
		}

		Debug.Log (pathFound);
		//find path at left
		if(pathFound == false && c.getY() - 1 >= 0){
			Coordination coor = new Coordination (c.getX (), c.getY ()-1);
			if(visitRow[c.getX(), c.getY()-1] == true){
				if (!checkCoorEqual(path, coor.getX(), coor.getY()) && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Check Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					path.Add (coor);
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
				}
			}
		}

		//find path at right
		if(!pathFound && c.getY() + 1 <= (length-1)){
			Coordination coor = new Coordination (c.getX (), c.getY ()+1);
			if(visitRow[c.getX(), c.getY()] == true){
				if (!checkCoorEqual(path, coor.getX(), coor.getY()) && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Check Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					path.Add (coor);
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
				}
			}
		}

		//Skip upward
		if (!pathFound && c.getX () - 1 >= 0) {
			Coordination coor = new Coordination (c.getX () - 1, c.getY ());
			if (visitCol [c.getX () - 1, c.getY ()] != true) { 
				if (!skipped && !checkCoorEqual (path, coor.getX (), coor.getY ()) && !blockedCol [c.getX () - 1, c.getY ()] && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Skip to Coor: x," + coor.getX () + ", " + coor.getY () + "</color>");
					skipped = true;
					checkmateCol = false;
					skipLeft = false;
					skipUp = true;
					targetCoor = coor;
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
					if (!pathFound)
						skipped = false;
				}
			}
		}

		//Skip downward
		if (!pathFound && c.getX () + 1 <= (length)) {
			Coordination coor = new Coordination (c.getX () + 1, c.getY ());
			if (visitCol [c.getX (), c.getY ()] != true) {
				if (!skipped && !checkCoorEqual(path, coor.getX(), coor.getY()) && !blockedCol[c.getX(), c.getY()]  && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Skip to Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					skipped = true;
					checkmateCol = false;
					skipLeft = false;
					skipUp = false;
					targetCoor = coor;
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
					if (!pathFound)
						skipped = false;
				}
			}
		}

		//Skip left
		if(pathFound == false && c.getY() - 1 >= 0){
			Coordination coor = new Coordination (c.getX (), c.getY ()-1);
			if(visitRow[c.getX(), c.getY()-1] != true){
				if (!skipped && !checkCoorEqual(path, coor.getX(), coor.getY()) && !blockedRow[c.getX(), c.getY()-1] && targetCoor.Equals(coor) == false) {
					Debug.Log (pathFound);
					Debug.Log ("<color=orange>Skip to Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					skipped = true;
					checkmateCol = true;
					skipLeft = true;
					skipUp = false;
					targetCoor = coor;
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
					if (!pathFound)
						skipped = false;
				}
			}
		}

		//Skip right
		if(!pathFound && c.getY() + 1 <= (length-1)){
			Coordination coor = new Coordination (c.getX (), c.getY ()+1);
			if(visitRow[c.getX(), c.getY()] != true){
				if (!skipped && !checkCoorEqual(path, coor.getX(), coor.getY()) && !blockedRow[c.getX(), c.getY()]  && targetCoor.Equals(coor) == false) {
					Debug.Log ("<color=orange>Skip to Coor: x," + coor.getX() + ", " + coor.getY() + "</color>");
					skipped = true;
					checkmateCol = true;
					skipLeft = false;
					skipUp = false;
					targetCoor = coor;
					pathFound = findCheckmatePath (coor, path, length, end, skipped, targetCoor);
					if (!pathFound)
						skipped = false;
				}
			}
		}

		//if path not connected yet, return a null coordination
		if (!pathFound) {
			Debug.Log ("<color=red>Remove Coor: x," + c.getX () + ", " + c.getY () + "</color>");
			//path.Remove (c);
			//skipped = preSkipped;
			skipped = false;
			return false;
		} else
			return true;

		skipped = false;
		return false;
	}
예제 #5
0
	//Find linked path start from c and fille the path to arraylist "path" 
	//bool checkCM -> check checkmate
	private bool setPathArray(Coordination c, ArrayList path ,int length, int end, bool checkCM){
		Debug.Log ("<color=yellow> Called with coor: x," + c.getX() + ", " + c.getY() + "</color>");

		//if path found
		bool pathFound = false;

		//if path finding finished
		if (c.getX () == end) {
			if (checkCM) {
				if(end == 1)
					return blockedCol[c.getX()-1,c.getY()] != true;
				else
					return blockedCol[c.getX(),c.getY()] != true;
			}else
				return true;
		}

		//find path upward
		if (!pathFound && c.getX () - 1 >= 0) {
			if (visitCol [c.getX () - 1, c.getY ()] == true) {
				Vector3 pos = blueNodeArray [c.getX()-1, c.getY()].GetComponent<RectTransform> ().anchoredPosition3D;
				if (!path.Contains (new Vector3 (pos.x, pos.y + 19.5f, pos.z))) {
					addPath (c.getX () - 1, c.getY (), path);
					Coordination coor = new Coordination (c.getX () - 1, c.getY ());
					pathFound = setPathArray(coor, path, length, end, checkCM);
				}
			}
		}

		//find path downward
		if (!pathFound && c.getX () + 1 <= (length)) {
			if (visitCol [c.getX (), c.getY ()] == true) {
				Vector3 pos = blueNodeArray [c.getX()+1, c.getY()].GetComponent<RectTransform> ().anchoredPosition3D;
				if (!path.Contains (new Vector3 (pos.x, pos.y + 19.5f, pos.z))) {
					addPath (c.getX () + 1, c.getY (), path);
					Coordination coor = new Coordination (c.getX () + 1, c.getY ());
					pathFound = setPathArray(coor, path, length, end, checkCM);
				}
			}
		}

		//find path at left
		if(!pathFound && c.getY() - 1 >= 0){
			if(visitRow[c.getX(), c.getY()-1] == true){
				Vector3 pos = blueNodeArray[c.getX(), c.getY()-1].GetComponent<RectTransform>().anchoredPosition3D;
				if (!path.Contains (new Vector3 (pos.x, pos.y + 19.5f, pos.z))) {
					addPath (c.getX (), c.getY () - 1, path);
					Coordination coor = new Coordination (c.getX (), c.getY ()-1);
					pathFound = setPathArray(coor, path, length, end, checkCM);
				}
			}
		}

		//find path at right
		if(!pathFound && c.getY() + 1 <= (length-1)){
			if(visitRow[c.getX(), c.getY()] == true){
				Vector3 pos = blueNodeArray[c.getX(), c.getY()+1].GetComponent<RectTransform>().anchoredPosition3D;
				if (!path.Contains (new Vector3 (pos.x, pos.y + 19.5f, pos.z))) {
					addPath (c.getX (), c.getY () + 1, path);
					Coordination coor = new Coordination (c.getX (), c.getY ()+1);
					pathFound = setPathArray(coor, path, length, end, checkCM);
				}
			}
		}

		if (!pathFound) {
			Vector3 pos = blueNodeArray[c.getX(), c.getY()].GetComponent<RectTransform>().anchoredPosition3D;
			path.Remove (new Vector3 (pos.x, pos.y + 19.5f, pos.z));
			Debug.Log ("<color=red>Remove Coor: x," + c.getX() + ", " + c.getY() + "</color>");
		}

		return pathFound;
	}
예제 #6
0
		public bool Equals(Coordination other){
			if (this.x == other.getX () && this.y == other.getY ())
				return true;
			else
				return false;
		}