Question by
Tydal · Feb 17, 2019 at 02:00 PM ·
buttonscript.scripting beginner
When you click the same image twice it see it says a match. Any thoughts on how to fix that?
Hi there i am trying to fix this code.There is 2 cards that have the same sprite example * symbol if two are seleced its a match.But after i click on the same image its says ita a match.How to make after i click the first button i stay deactivated or locked? Here is the code.
public class GameControler : MonoBehaviour {
[SerializeField]
private Sprite bgimage;
public Sprite[] puzzles;
public List<Sprite> gamePuzzles = new List<Sprite>();
public List<Button> btns = new List<Button>();
public GameObject Winnerpanel;
private bool firstGuess, secondsGuess;
private int countGuesses;
private int countCorrectGuesses;
private int gameGuesses;
private int firstGuessIndex, secondGuessIndex;
private string firstGuessPuzzle, secondGuessPuzzle;
private void Awake()
{
//puzzles = Resources.LoadAll<Sprite>("Sprites/Candy");
}
// Use this for initialization
void Start()
{
puzzles = Resources.LoadAll<Sprite>("Sprites/allgems");
GetButtons();
AddListeners();
AddGamePuzzles();
Shuffle(gamePuzzles);
gameGuesses = gamePuzzles.Count / 2;
}
// Update is called once per frame
void GetButtons()
{
GameObject[] objects = GameObject.FindGameObjectsWithTag("PuzzelButton");
for (int i = 0; i < objects.Length; i++)
{
btns.Add(objects[i].GetComponent<Button>());
btns[i].image.sprite = bgimage;
}
}
void AddGamePuzzles()
{
int looper = btns.Count;
int index = 0;
for (int i = 0; i < looper; i++)
{
if (index == looper / 2)
index = 0;
{
gamePuzzles.Add(puzzles[index]);
index++;
}
}
}
void AddListeners()
{
foreach (Button btn in btns)
{
btn.onClick.AddListener(() => PickAtPuzzle());
}
}
public void PickAtPuzzle()
{
string name = UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name;
//Debug.Log("CLick" + name);
if (!firstGuess)
{
firstGuess = true;
firstGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
firstGuessPuzzle = gamePuzzles[firstGuessIndex].name;
btns[firstGuessIndex].image.sprite = gamePuzzles[firstGuessIndex];
Debug.Log("First" + name);
}
else if (!secondsGuess)
{
secondsGuess = true;
secondGuessIndex = int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
secondGuessPuzzle = gamePuzzles[secondGuessIndex].name;
btns[secondGuessIndex].image.sprite = gamePuzzles[secondGuessIndex];
countGuesses++;
StartCoroutine(CheckIfThePuzzlesMatch());
}
}
IEnumerator CheckIfThePuzzlesMatch()
{
yield return new WaitForSeconds(1f);
if (firstGuessPuzzle == secondGuessPuzzle)
{
yield return new WaitForSeconds(.1f);
btns[firstGuessIndex].interactable = false;
btns[secondGuessIndex].interactable = false;
btns[firstGuessIndex].image.color = new Color(0, 0, 0, 0);
btns[secondGuessIndex].image.color = new Color(0, 0, 0, 0);
CheckIfTheGameIsFinished();
} else
{
yield return new WaitForSeconds(.1f);
btns[firstGuessIndex].image.sprite = bgimage;
btns[secondGuessIndex].image.sprite = bgimage;
}
yield return new WaitForSeconds (.1f);
firstGuess = secondsGuess = false;
}
void CheckIfTheGameIsFinished()
{
countCorrectGuesses++;
if (countCorrectGuesses == gameGuesses)
{
Winnerpanel.SetActive(true);
Debug.Log("Game Finisshed");
Debug.Log("It took you" + countGuesses + "many guess(es) to finish the game");
}
}
void Shuffle(List<Sprite> list)
{
for(int i = 0; i < list.Count; i++)
{
Sprite temp = list[i];
int randomIndex = Random.Range(0, list.Count);
list[i] = list[randomIndex];
list[randomIndex] = temp;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
How to enable and disable back game object for ui button after a few seconds? 1 Answer
SteamVR GetState() Grip 0 Answers
Unit Deployment 0 Answers
How To input text from a button? 1 Answer