// start와 goal state를 정해준다. public void set_start_goal_state() { this.algorithm = gameObject.GetComponent <A_star>(); this.algorithm.start_state = this.start_state; //this.sample; this.algorithm.goal_state = this.goal_state; }
//*************************************************** public void Astar_solving() { if (detect.detect_puzzle(_2D, puzzle_size, zeroplace[0])) { A_star A = new A_star(); start = new node(_2D, puzzle_size, 0, zeroplace, puzzle_string, false); path = new node(); if (manhattenradio.Enabled) { path = A.solve(start, false); } else { path = A.solve(start, true); } numberofmoves = path.moves; stepslist.Items.Clear(); stepslist.Items.Add("Number Of Moves = " + numberofmoves.ToString()); while (path.parent != null) { stepsstack.Push(path); path = path.parent; } stepsstack.Push(start); //******************************************* int s = stepsstack.Count; String steps = ""; int x, y; for (int i = 1; i < s; i++) { if (stepsstack.ElementAt(i).node_direction == "right") { x = stepsstack.ElementAt(i).zero_placeXY[0]; y = stepsstack.ElementAt(i).zero_placeXY[1]; steps = (i).ToString() + "- Move " + stepsstack.ElementAt(i).puzzle2D[x, y - 1].ToString() + " left"; stepslist.Items.Add(steps); } else if (stepsstack.ElementAt(i).node_direction == "left") { x = stepsstack.ElementAt(i).zero_placeXY[0]; y = stepsstack.ElementAt(i).zero_placeXY[1]; steps = (i).ToString() + "- Move " + stepsstack.ElementAt(i).puzzle2D[x, y + 1].ToString() + " right"; stepslist.Items.Add(steps); //---------------------------------------------------- } else if (stepsstack.ElementAt(i).node_direction == "up") { x = stepsstack.ElementAt(i).zero_placeXY[0]; y = stepsstack.ElementAt(i).zero_placeXY[1]; steps = (i).ToString() + "- Move " + stepsstack.ElementAt(i).puzzle2D[x + 1, y].ToString() + " Down"; stepslist.Items.Add(steps); //---------------------------------------------------- } else if (stepsstack.ElementAt(i).node_direction == "down") { x = stepsstack.ElementAt(i).zero_placeXY[0]; y = stepsstack.ElementAt(i).zero_placeXY[1]; steps = (i).ToString() + "- Move " + stepsstack.ElementAt(i).puzzle2D[x - 1, y].ToString() + " Up"; stepslist.Items.Add(steps); //------------------------------------------ } } } else { MessageBox.Show("Unsolvable"); } this.Enabled = true; }