작성
·
240
1
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace CSharp
{
//참조 Ref
class Naruto
{
//붕어빵 재료
//속성은 데이터로 기능은 함수로 표현
public int HP; //속성
public int Chakra;
public int Nine_Tailed_Fox_Chakra;
public Naruto() //생성자
{
HP = 100;
Chakra = 10;
Nine_Tailed_Fox_Chakra = 1000;
}
public Naruto(int Chakra, int FoxChakra) : this()
{
this.Chakra -= Chakra;
this.Nine_Tailed_Fox_Chakra -= FoxChakra;
}
}
class Class2
{
static void AlterEgo()
{
Console.Clear();
while (true)
{
string Ninja_Technique;
Naruto NarutoAE = new Naruto(1, 30);
Console.WriteLine("나루토 분신 생성\n");
Console.WriteLine("나루토 본체 정보");
Console.WriteLine($"체력: {NarutoAE.HP}\n차크라: {NarutoAE.Chakra}\n구미호차크라:{NarutoAE.Nine_Tailed_Fox_Chakra}\n\n");
Console.WriteLine("[1]그림자 분신술");
Console.WriteLine("[2]분신술 해제");
Ninja_Technique = Console.ReadLine();
if(Ninja_Technique == "1")
{
AlterEgo();
}
else if(Ninja_Technique == "2")
{
break;
}
}
}
static void Main(string[] args)
{
Naruto Naruto_Origenal = new Naruto();
while (true)
{
Console.Clear();
string Ninja_Technique;
Console.WriteLine("나루토 본체\n");
Console.WriteLine($"체력: {Naruto_Origenal.HP}\n 차크라: {Naruto_Origenal.Chakra}\n 구미호차크라:{Naruto_Origenal.Nine_Tailed_Fox_Chakra}\n");
Console.WriteLine("[1]그림자 분신술");
Ninja_Technique = Console.ReadLine();
Console.Clear();
if (Ninja_Technique == "1")
{
AlterEgo();
}
}
}
}
}
답변 3
1
아무리 클래스가 참조값이라 해도,
생성자를 이용해서 새로 new를 하면 기존과 무관한 새로운 객체가 만들어집니다.
(즉, 기존의 나루토가 아닌 새로운 나루토가 만들어지게 됩니다.)
Naruto NarutoAE = new Naruto(1, 30);
이 부분은 정말 다른 원본 나루토이지만,
차크라가 더 적은 불량품을 만든 셈이 되겠네요.
말씀하신대로 본체의 차크라를 깎고 싶다면
생성자로 접근해서는 안 되고
다른 함수 (ex. SetChakra(int chakra))를 사용하거나
Chakra를 직접 세팅을 해야 합니다 (ex. NarutoAE.Chakra -= 10 )
[분신술 해제 시 원래 차크라로 돌아간다]는 사양은
의외로 실제로도 구현할 일이 생길법한 사양인데,
그 이유는 흔히 RPG에서 Hp와 MaxHp의 관계와 유사하기 때문입니다.
(ex. 최고급 포션을 먹으면 초기의 풀 Hp로 세팅해주세요! 라거나)
결국 분신술을 쓰기 전의 초기값을 다른 변수 (ex. InitChakra, MaxChakra) 등으로 따로 저장하고 있다가,
분신술을 해제할 경우 Chakra를 InitChakra로 되돌리는 방식으로 구현을 하시면 되겠습니다
0
0
생성자를 이용해서 나루토 그림자 분신술 시도 할때마다 차크라를 감소 시키고 분신술 해제 할때 원래 차크라로 돌아가는 그런 간단한 방식을 구현 할 수 있겠다 했지만 음 생성자 원본값을 건드리는 방법이 없을까요?