일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 프로그래머스 푸드 파이트 대회
- 문자형 배열
- auto 키워드
- 프로그래머스 배열만들기4
- 백준 파이썬
- 회전 및 자리 이동 연산
- 입출력 관리자
- 주기억장치
- 원형 연결 구조 연결된 큐
- const화
- 유형 변환
- 네트워크 결합
- IPv4 주소체계
- getline()함수
- r-value참조자
- C언어 계산기 프로그램
- 값/참조/주소에 의한 전달
- c언어 괄호검사
- 문제해결 단계
- 알고리즘 조건
- 논리 연산
- C언어 스택 연산
- l-value참조자
- string유형
- 운영체제 기능
- LAN의 분류
- 범위 기반 for문
- C언어 덱
- const l-value참조자
- 괄호 검사 프로그램
- Today
- Total
chyam
[unity] - 버튼 순서대로 누르면 성공하는 퍼즐 본문
구현 목표는 저장된 순서대로 버튼을 누르면 성공하는것이다.
한번눌렀다가 다시 누르면 취소되어야 하고, reset버튼을 통해 모두 초기화도 가능하도록한다.
그래서 누를때마다 리스트에 저장되는것을 생각했다.


버튼의 text는 간단하게 A,B,C,D,E로 해주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Linq;
UI는 버튼, TMPro는 텍스트에 접근하기위해, Linq는 나중에 Sequence equal을 사용하기위해 추가해줬다.
public List<string> blank = new List<string> { "P", "P", "P", "P", "P" };
public int clickCnt = 0;
public int cnt = 0;
public Button[] btn;
List를통해서 버튼을 저장하기위해서 먼저 아무글자로 초기화를 해줬다.
clickCnt는 클릭한 번호라고 볼수있다.
cnt는 아직 제대로 안해두긴했는데, stack에 여러 경우의 수를 둘거라서 나중에 랜덤값을 가지게 할것이다. stack의 인덱스를 나타내며 현재는 0번째 stack값으로 버튼순서를 정하였다.
btn은 버튼들을 저장해줬다.
public void BtnClick(Button clickedBtn)
{
TextMeshProUGUI btnText = clickedBtn.GetComponentInChildren<TextMeshProUGUI>();
Image btn=clickedBtn.GetComponentInChildren<Image>();
List<List<string>> stack = new List<List<string>>();
stack.Add(new List<string> { "E", "A", "C", "D", "B" });
stack.Add(new List<string> { "C", "A", "D", "E", "B" });
string text=btnText.text;
int textIndex = blank.IndexOf(text);
if (textIndex==-1)
{
blank[clickCnt] = text;
clickCnt++;
btn.color = new Color(0.5f,1,1,0.5f);
}
else
{
blank[textIndex] = "P";
clickCnt--;
btn.color = new Color(1,1,1, 1);
}
int pIndex = blank.IndexOf("P");
if (clickCnt >= 5)
{
if (pIndex == -1)
{
if (stack[cnt].SequenceEqual(blank))
{
Debug.Log("Success");
return;
}
}
else
{
Debug.Log("Reset Plz");
ResetBtn();
return;
}
}
}
btnText로 클릭한 버튼을 불러온다.
누른 버튼의 색을 바꾸기 위해서 Image로 저장해준다.
stack에 2차원배열로 새로운 리스트를 만든다.
여러개의 버튼 순서들을 추가해준다.
text에 btnText의 text를 저장한다.
textIndex는 text가 blank에 있는지 확인해주는 숫자이다.
-1인거면 blank에 없는것이므로 clickCnt인덱스에 text를 저장해주고 ++해준다.
그리고 색을 바꿔줘서 누른것이 보이도록한다.
만약에 -1이 아니면 blank에 있는것이므로 textIndex의 값을 초기화시키고 clickCnt--를 해주고 색도 원래대로해준다.
pIndex는 "P"가 있는지를 확인해준다.
clickCnt가 5이상인거면 다 한번이상은 누른것이므로 그때부터 비교해준다.
pIndex가 -1이라는것은 blank에 P아닌것들이 하나씩 들어간것이므로 stack과 비교해서 성공했는지를 알려준다.
-1이아니라면 다시 초기화해야한다.
public void ResetBtn()
{
blank = new List<string> { "P", "P", "P", "P", "P" };
clickCnt =0;
for (int i = 0; i < btn.Length; i++)
{
Image btnImage = btn[i].GetComponentInChildren<Image>(); // Image 컴포넌트 가져오기
if (btnImage != null)
{
btnImage.color = new Color(1, 1, 1, 1); // 버튼 색상을 초기 색상으로 변경
}
}
}
ResetBtn은 누르면 초기화되는 버튼이다.
blank와 clickCnt를 초기화시켜준다.
for문을 통해서 버튼색도 초기화시켜준다.
'unity' 카테고리의 다른 글
[unity 3d] - 플레이어, 카메라 이동 (2) | 2025.02.27 |
---|---|
[unity] - 로켓을 움직여 도착지에 도달하는 미니게임 (0) | 2025.01.08 |
[unity] - 시간 흐름 [ deltaTime ] (0) | 2024.09.09 |
[unity] - 물리 퍼즐 게임 4 ( 수박 게임 ) (0) | 2024.08.18 |
[unity] - 물리 퍼즐 게임 3 ( 수박 게임 ) (0) | 2024.08.15 |