일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- c#프로그래머스기초문법
- unity게임
- c#문제
- 유니티상호작용
- 스파르타코딩클럽
- c# c#프로그래머스
- unity공부
- 유니티서바이벌게임만들기
- 유니티게임만들기
- 유니티
- unity3dservival
- c#코테
- c# 백준
- Unity
- 시샵
- 유니티3dui
- c#기본문법
- 유니티공부
- 오블완
- c#
- 티스토리챌린지
- 스파르타
- unity3d게임만들기
- Console.WriteLine
- C#문법
- c#코딩기초트레이닝
- c#기초문법
- unity3d
- unity게임만들기
- 시샵문법
- Today
- Total
나 개발자 진짜 되냐?
C#으로 텍스트 RPG 만들기 _ [ 상 ] 본문
음..
크리스마스는 아니지만
함께라는 의미를 담은 이 움짤로 시작한다.
이제 팀프로젝트를 시작하기 전
기본 개념을 다잡기 위해
다시!
텍스트 RPG를 짜보려고 한다.
다시
다시
다시
중요한 건 다시
다시마..
여하튼 시작한다.
먼저 TEXT RPG를 짜기 위해
해야 할 건
1. 무슨 화면을 만들어야 할까
< 메인화면 >
< 상태정보 >
< 상태정보, 장착여부 확인 >
< 가방 >
< 가방, 구매한 물건 확인 >
< 상점, 보유 품목 >
< 상점, 구매 가능 >
* 1. 메인화면 // 환영합니다! 1,2,3 입력하세요.
* 2. 상태정보 // 정보 확인할 수 있게 하기
* 3. 가방 // 열었을 때 내 물건이 있는지
* 4. 가방 // 장착을 했는지 안 했는지
* 5. 상점 // 아이쇼핑, 물건이 있는지 없는지
* 6. 상점 // 실제 쇼핑, 물건을 구매
2. 내가 쓸 기능은 뭘까
1. 메인화면으로 이동하게 하기
2. 상태 정보창에 캐릭터 정보 띄우기
2-1 아이템 장착 시 캐릭터 스탯 업그레이드
3. 가방에 상점에 산 물건이 진입했는가
3-1. 상점에서 산 물건이 장착이 되는가 [E] 표시
4. 상점에 물건 띄우기
4-1. 있는 물건을 골드에 맞게 구매
3. 내가 쓸 데이터는 뭘까
1. 캐릭터 정보
( 레벨 / 이름 / 직업 / 공격력 / 방어력 / 체력 / 골드 )
2. 아이템
( 이름 / 특징 / 장비 벨류 / 장비 타입 / 가격 / 장착여부 )
장비 벨류와 장비 타입인 이유는
갑옷은 옷이니 방어력 증가
검은 무기니 공격력 증가
이렇게 장착부위에 따라 공방이 극명하게 나뉘기 때문에
공격력 / 방어력이 아니라
장비타입을 정하고
무기일 경우 장비벨류를 공격력 + n 이렇게
설정하기로 했다.
이 부분을 앞으로도 프로젝트할 때
꼭 생각하고 가자
자.
하나씩 해보자.
Console.WriteLine()으로 입력! 해준다.
먼저 메인에,
맨 처음에 뜰 문구를 적는다.
다음은
번호를 입력해줘야 하니
번호 가져오는 친구를 써야 한다.
Console.ReadLine()으로 가져오고
ReadLine으로 가져오게 될 경우,
문자열로 가져오기 때문에
만약에 숫자나, 뭐 다른 값으로 받기 위해서는
Parse라는 친구를 사용해야 한다.
그래서 우리는 그 밑줄에
string input = Console.readline();
int result = intParse(input);
을 해준다.
사실은 간단하게
int result = intParse(Console.Readline());
로 써줘도 된다.
자 여기서!
우리는 숫자만 받으려면 123 써도 된다.
근데 유저가
이것저것 뚱땅 뚱땅 누르다 보면
123 이 아닌 다른 숫자
또는
문자를 칠 수도 있다.
또는 문자열까지..
이 얼마나 충격적인 상황인가
아주 난감한 상황이 생긴다.
그래서,
우리는
🌟 TryParse() 🌟
함수를 사용하게 된다.
진짜 간단하게 말하면
아까와 위에서 말한
난감한 상황들 ( 예외 )를 처리해 주기 위한 친구이다.
이 친구의 특징은
1. 자료형 값을 넣는 게 아니다 보니
이 친구는 반환이 true 아님 false다.
2. 이 친구는 변수에 값을 넣을 때 out이라는 친구를 쓴다.
여럿 검색을 해보았는데
그냥 짝꿍이라고 생각해야 할 거 같다.
int x;
int.TryParse("10", out x);
자료형을 써주는 것도 중요하다!
bool b;
bool.TryParse("true", out b );
값을 변수에 넣어준다.
자 그래서 우리는 아까 써놓은 intParse를
TryParse로 바꿔보자.
TryParse를 사용하려는 이유는
true 아님 false를 출력해 주는 친구라서
int를 받는 곳인데
문자열이 오면 안 돼!
false! 출력할 거야!
가 되고
간단하게 말하면 그냥 문자열 이면
false 출력해 줘서 안 받기 위함이다.
먼저 위에처럼
변수 하나 선언
bool값의 isNumber을 하나 만들어주고
왜?
Tryparse는 불값이니까!
방금 받은 숫자 int로 바꿔서 result에 넣을 건데
참이면 바뀐 거고, 즉! 숫자가 잘 들어왔다.
거짓이면 안 바뀐 거고, 음? 숫자가 아닌데? 얘 누구야?
그 참/거짓 값이 지금 isNumber에 들어갔다.
그리고 우리는! 숫자일 때 실행해야 하기 때문에
숫자는 아까 참이 나온 다했었죠?
그래서 if문에 넣으면 바로
조건문이 실행된다.
if(isNumber){
}
우리는 이 중괄호 안에다가
숫자일 경우
오케이 1,2,3 실행!
숫자가 아니면?
다시 처음에 우리 보여주기로 한
던전입니다 1.2.3 어디 갈래요?
이것을 또 보여줘야 하니까,
이것은 while문으로 반복을 돌려야 한다.
이렇게 쓰면 성공,
이해했다면 더 성공
이제 우리는 숫자를 입력받아
넣을 수 있게 되었다.
자 이제 값이
1,2,3 중
뭐인가에 따라
화면이 바뀌어야 하기 때문에
우리는 switch를 사용해야 한다.
case 1, 2, 3을 통하여
화면이 이동되어야 하니
번호에 맞게 나올 화면을 고대로 적어준다.
Console.Clear();이 뭐냐고요?!
화면을 사악 지워준다.
깔끔하게!
아니 근데.. 너무 뭔가 답답하고 많아 보여서 읽기 싫어진다.
정확히 말하면
메인은 우리가 주로 봐야 하기 때문에
가독성이 좋아야 해서
이 많은 글을 하나의 함수로 빼보자!
Console.WriteLine()을 모아둔 함수를 만들어보자!
이렇게 메서드 안에 넣어서
내가 짠 코드를 넣어주고
case에는 이제 간단하게 메서드만 적어주면 된다!
꼭 함수뒤에 ()를 잊지 말자!
캬 case가 깔끔해졌어요!
자 이제!
아까 못 넣었던
if (isNumber) { }의 중괄호를 채워보자
여기서는 " 입력값이 숫자일 경우 " 들어온다.
하지만 숫자도 다 같은 숫자가 아니다.
1,2,3 만 받아야 하고
4니 28이니 82니 안된다.
그렇기 때문에
또 if문을 걸어서
그 값이 1 이상 뭐 3 이하일경우
이 while문 탈출해서 switch가 실행되도록,
만약 그 이외 숫자다?
잘못된 입력입니다! 출력
1부터 3까진데 그 값을 비교하려면
입력값이랑 비교해야 하니까
result >= 1;
제말대로 했다면
여러분의 코드도 이렇게 될 것입니다.
자 우리는 이 친구를 최소 3번 써야 한다.
case1,2,3 세 개니깐
그러면!
이런 반복적인 코드도 줄일 수 있지 않을까?!
줄여보자!
코드이름은
음..
숫자를 체크 해서 넣어주는 거니까
static void CheckInput으로 해주고
그 안에 이 값을 넣어주면 된다.
요렇게!
❗❗
흠.. 우리는 여기서 문제가 하나 생긴다.
이 result값을 함수에서 빼주어야 하기 때문
엇 왜죠?
스위치에서 아주 뻘건 빛이 나네요.
이유는 뭘까?
바로 result를 함수에 넣어버렸기 때문
함수에 넣어주면 캡슐화가 되어서
불러도 대답 안 한다..
그러면 어째야 하나?
그럼 함수에서 다시 main으로 빼면 안 되나?
NONO
그 함수에서도 씁니다.
다시 봅시다.
이 함수에서 result값은 입력받아온 값을 숫자로 바꾼 값이다.
우리는 이 값 이 있어야
스위치문 케이스에 들어가서
다음 화면으로 이동이 될 것이다.
함수에 있는 변수를
함수 밖 다른 곳에서 보여주려면!
return
이라는 친구를 사용해야 한다.
❗❗
자 그러면 문제가 또 발생
1. return을 어디에 써야 할까
2. return을 쓰려면 함수 선언에 void 써도 되나?
이다.
2번부터 말하면
안된다!
void가 있는 함수는
나, 이 함수 끝날 때 아무것도 안 낼 거야!
라는 뜻이다
void는
반환하기 귀찮아하는 친구
반환을 해주지 않는다.
그러면 우리는 void 대신 int라고 써줘야 한다.
왜냐면? 우리는 숫자를 줄 거니깐 ㅎ
int를 써줬어
이제
우리는 무조건 return을 해줘야 하는데
어디가 좋을까?
이 친구는 반환해 주는 동시에 탈출하는 능력자 친구이기 때문에
break에 써주면 된다.
return으로 우리는 뭘 줘야 할까?
내보내줘야 할 애!
바로 result!
그래서
이렇게 써주면 된다.
이제 이 함수를 필요한 위치에 넣어보자
❗❗❗삐용삐용❗❗❗
근데 우리는 또 문제 발생!
아까 CheckInput에 if문으로
1 이상 3 이하로 잡아놨는데..
스탯 UI에서는..
0뿐이다.
즉 안에 비교가 조금씩 다르다는 것..!
이것을 어떻게 해결할 수 있을까?
각 UI마다 받아야 하는 번호가 다르다..
누구는 1,2,3
누구는 1,0
그러면 그 번호를 함수가 알게 되면
처리해주지 않을까?!
함수에 있는 값을 내보내는 건 return이었다
함수로 값을 가져오는 것도 가능할까?
가능가능!
이것이 파라미터
즉 매개변수이다.
함수 소괄호 쓸 변수와 개수를 적어주면
우리는 변수를 함수에 가져올 거예요!
계산식 좀 써주쇼!라고 해석 할 수 있다.
바꿔 주어야 할 값은
어떤 애는 1 이상 3 이하
어떤 애는 0 이상 1 이하
뭐 스탯창 같은 경우 0 밖에 없으니 0 이상 0 이하로
n이상 n이하가 계속 바뀌고 있다.
그래서 변수를 두 개, 필요로 할 것이고
함수에 미리 적어주어서
변수 두 개 넣을 거니까 준비혀
라고 말해주는 것을 해주어야 한다!
그래서 이렇게 아까 만든 CheckInput을 써주고
소괄호 안에!
변수 두 개!
최솟값 최댓값 받고
그 친구는 1이랑 3을 대체할 친구들이니
숫자 있던 곳에 저 변수들을 넣어주면 된다.
오 이렇게 썼더니
전에 함수 선언해 주었던 곳에서 빨간 줄이다.
정상입니다!
변수 두 개 받을 준비를 하고 있는 함수이기 때문에
변수 두 개를 뭘 줄지
무조건 알려주어야 한다.
그래서 1부터 3까지면 1,3
0부터 1까지면 0,1
0부터 0까지면 0,0
을 넣어주면 된다!
자.. 이렇게 먼저
큰 틀을 짜보았다.
지금까지 우리는
메인화면구현
내 정보화면구현
상점화면구현
내 가방화면 구현
4가지를 그려 넣고
나가기 함수까지 만들어보았다.
함수화를 해줘야 하는 건
한 번의 수정으로
다양한 곳에서 활용할 수 있어서
꼭 필요하다!
앞으로 자주자주 활용해 보도록 하자!!!!!!!!!!!!
파이팅..!!!!!!!!!
'C# 을 맛보았어요! > 프로젝트를 만들었어요!' 카테고리의 다른 글
C#으로 텍스트 RPG 만들기 _ [ 업그레이드 버전 ] (0) | 2024.09.27 |
---|---|
C#으로 텍스트 RPG 만들기 _ [ 하 ] (2) | 2024.09.27 |