using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
namespace ConsoleApp8
{
public struct s_data
{
public string name = "";
public int hp = 0, mp = 0;
public s_data()
{
}
// 데이터 대입
public s_data(string _name, int _hp, int _mp)
{
name = _name;
hp = _hp;
mp = _mp;
}
}
// 기본 캐릭터 클래스
public class Character
{
public s_data data = new s_data();
// 캐릭터 정보 갱신
protected void Init(s_data _data)
{
data.name = _data.name;
data.hp = _data.hp;
data.mp = _data.mp;
}
public void Print()
{
Console.WriteLine(string.Format(" 캐릭터 닉네임 : {0} , hp : {1} , mp : {2} ", data.name, data.hp, data.mp));
}
public static void Set_null(ref Character _character)
{
_character = null;
}
~Character()
{
Console.WriteLine("캐릭터 소멸");
}
};
// 전사
public class Warrior : Character
{
public string[] arr_warrior_skill =
{
"베기",
"십자베기",
"찌르기"
};
public Warrior()
{
}
~Warrior()
{
Console.WriteLine("전사 소멸");
}
public Warrior(s_data _data)
{
base.Init(_data);
}
public Warrior(string[] _arr_skill)
{
arr_warrior_skill = _arr_skill;
}
public void Print_skills()
{
int count = 1;
foreach (var item in arr_warrior_skill)
Console.WriteLine(string.Format("스킬 {0}번 : {1}"), count, item);
}
}
// 1차 전직 나이트
public class Knight : Warrior
{
public string[] arr_knight_skill =
{
"강풍",
"초승달베기",
"평행우주베기"
};
public Knight()
{
}
~Knight()
{
Console.WriteLine("나이트 소멸");
}
public Knight(s_data _data)
{
base.Init(_data);
}
public Knight(ref Warrior _warrior) : this(_warrior.data)
{
if (_warrior != null)
_warrior.arr_warrior_skill = arr_knight_skill;
_warrior = null;
}
public Knight(string[] _arr_skill)
{
arr_warrior_skill = _arr_skill;
}
}
public class Zombie
{
public static s_data data = new s_data("좀비", 100, 0);
public Zombie(s_data _data)
{
Zombie.data = _data;
}
public void Print()
{
Console.WriteLine(string.Format(" 닉네임 : {0} , hp : {1} , mp : {2} ", data.name, data.hp, data.mp));
}
public static explicit operator Zombie(Character _character)
{
Zombie zombie = new Zombie(data);
return zombie;
}
public static implicit operator Zombie(s_data _data) => new Zombie(_data);
}
class Program
{
static void Main()
{
// 전사 생성
Warrior warrior = new Warrior(new s_data("워리어", 100, 25));
warrior.Print();
// 전사 나이트로 전직 후 소멸
Knight knight = new Knight(ref warrior);
knight.Print();
knight.data = new s_data("나이트", 300, 100);
knight.Print();
// 나이트가 좀비로 변신 명시적 변환
Zombie zombie = (Zombie)knight;
zombie.Print();
// 암시적 변환
zombie = new s_data("좀비1", 200, 20);
zombie.Print();
}
}
}
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# Boxing Unboxing 박싱 언박싱 값>참조, 참조>값 (0) | 2022.06.19 |
---|---|
C# 제네릭 (C++ > 템플릿) (0) | 2022.06.13 |
C# Delegate Event 사용법 (0) | 2022.06.08 |
C# LINQ (0) | 2022.06.07 |
C# 형변환 is as 키워드 (0) | 2022.06.05 |