유니티 퀘스트 달리기반 7번 행맨
string secretWord = "hangMan".ToUpper();
//C#에서는 string이 읽기 속성이기에 char[] 로 문자열을 관리해야된다.
//C#에서의 char[]과 string에 관련하여 TIL 작성하기
char[] guessWord = Enumerable.Repeat('_',secretWord.Length).ToArray(); // char[]을 '_'로 정답 글자수만큼 초기화하는 코드
int attepts = secretWord.Length;
bool wordGuessed = false;
string copySecretWord = secretWord;
for (int i = 0; i < attepts; i++)
{
//char[] -> string 변환 코드
string str = string.Concat(guessWord);
//'_'가 포함되어있으면 false , 포함되지 않으면 true
wordGuessed = !str.Contains('_');
//게임 클리어
if (wordGuessed)
{
Console.WriteLine("");
Console.WriteLine("축하합니다!! 단어 " + copySecretWord + " 를(을) 완성하셨습니다!! ");
Console.WriteLine("도전 횟수 " + i + "회에 통과하셨습니다!");
break;
}
//게임 안내
Console.WriteLine("도전 횟수 : " + (i+1) + "/" + attepts);
Console.WriteLine("[ " + str + " ]");
Console.Write("추측할 단어를 입력해 주세요 : ");
//글자 입력
string input = Console.ReadLine();
//글자 입력 체크 - 한개의 글자 체크
if(input.Length >= 2)
{
Console.WriteLine("");
Console.WriteLine("두 글자 이상이 입력되었습니다. 다시 입력해 주십시오.");
i--;
continue;
}
//글자 입력 체크 - 글자 영문 체크
else if ( !((input[0] >= 'A' && input[0] <= 'Z') || (input[0] >= 'a' && input[0] <= 'z')))
{
Console.WriteLine("");
Console.WriteLine("영어가 아닙니다. 다시 입력해 주십시오.");
i--;
continue;
}
//글자 소문자 고정
input = input.ToUpper();
//입력된 글자가 어디의 자리인지 체크
int result = secretWord.IndexOf(input);
do
{
if (result == -1)//없는 경우
{
Console.WriteLine("");
Console.WriteLine("해당 문자는 없습니다.");
break;
}
else
{
guessWord[result] = char.Parse(input);
char[] word = secretWord.ToCharArray(); //문자열을 수정 할 수 있게 char[] 로 변경
word[result] = '_'; //맞춘 글자를 '_' 처리함
secretWord = string.Concat(word); //char[]를 문자열로 다시 수정함
}
result = secretWord.IndexOf(input);
}
while (result != -1);
}
if (!wordGuessed)
{
Console.WriteLine("");
Console.WriteLine("실패하셨습니다!! 정답은 " + copySecretWord + " 입니다!! 다음기회에...");
}
5주차 숙제 게임개발
Run & Jump - 프로토타입 설명
1.마우스를 누르면 캐릭터 머리 위에 파워 게이지가 표시됨
2.마우스를 놓으면 놓은 방향으로 캐릭터가 빙글빙글 돌아가며 발판들을 넘어감
3.이미 한번 착지한 발판은 점수 x , 발판을 처음 밟을때만 점수 증가
구현 해야될것
1.각종 플레이어의 플레이를 방해할 장애물 추가 필요(화면을 날라다니는 오브젝트,발판 위의 가시 등등)
2.날라오는 블럭들이 지금 완전 랜덤 범위라서, 규격화가 필요함 ( 블럭이 겹쳐서 나오면 캐릭터가 피할 곳이 없음
버그
1.자기 발 밑에 바닥이 있는 상태로 아래를 향해 발사하면 캐릭터 착지하지 못한 판정이 되서 조작이 불가함
2.재시작(Scene 재로드)를 하면 GameManager에 있는 오브젝트들이 Mssing되어버림
*Collider2D의 한 면만 충돌판정을 받게 하고 싶을때
//Blcok Class
private void OnCollisionEnter2D(Collision2D collision)
{
//플레이어한테 점수 부여가 안되있고 , 콜리더가 Player 태그일때
if (!isScore && collision.gameObject.CompareTag("Player"))
{
foreach (ContactPoint2D contact in collision.contacts)
{
if (contact.point.y > transform.position.y + 0.3f)
{
GameManager.Instance.AddScore(score);
isScore = true;
}
}
}
}
- ContactPoint2D: 충돌 지점에 대한 정보를 나타내는 구조체로, 충돌한 두 물체의 접점 좌표, 충돌 방향(normal), 충돌 지점의 상대 속도 등을 포함합니다.
- collision.contacts: 충돌이 발생했을 때, 해당 충돌에 관련된 모든 접점을 포함하는 배열입니다. 이 배열은 충돌이 발생한 각 접점에 대해 ContactPoint2D 객체를 담고 있습니다.
- 이 조건은 충돌 지점(Block의 윗면 = transform.positon.y +0.3f)의 y 좌표가 현재 객체(Player)의 y 위치보다 0.3 단위 이상 위에 있을 때만 참이 됩니다. 이 코드는 플레이어가 적을 위에서 밟았을 때 점수를 주는 식으로 사용할 수 있다.
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-08-26(월) (0) | 2024.08.26 |
---|---|
TIL : 2024-08-22(금) (0) | 2024.08.23 |
TIL : 2024-08-21(수) (0) | 2024.08.21 |
TIL : 2024-08-20(화) ::C# Linq.OrderBy() 정렬 알고리즘 ,랜덤으로 원소 섞기(셔플기능) , 광고붙이기(UnityAD) (0) | 2024.08.20 |
TIL : 2024-08-19(월) (0) | 2024.08.19 |