C#/과제

2020.04.10. 과제 - Character class, Item class

dev_sr 2020. 4. 10. 23:34

 

1. class App - 맨손일 땐 ("item",n)->(null,n)

 
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
 class App
    {
        public App()
        {
            //홍길동 인스턴스 생성
            Character hong = new Character("홍길동");
 
            //임꺽정 인스턴스 생성
            Character lim = new Character("임꺽정");
 
            //아이템 제작 메서드 호출, return값을 변수에 저장함
            Item item=hong.CreateItem("단검",4);
 
            //아이템 획득 메서드 호출
            hong.GetItem(item);
 
            //아이템 착용 메서드 호출
            hong.EquipItem(item);
 
            //아이템 해제 메서드 호출
            hong.UnEquipItem(item);
 
            //공격 메서드 호출
            hong.Attack(lim);
        }
   }

 

 

2. class Character

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
class Character
    {
        //멤버 변수
        public string heroName; //캐릭터 이름
        public int maxHp;       //최대 체력
        public int hp;          //체력
 
        public Item item;       //아이템 소지(이름, 데미지)
        public bool equipItem;  //아이템 착용 여부, 없으면 맨손
 
        //생성자
        public Character(string heroName)
        {
            this.heroName = heroName;
            this.maxHp = 15;
            this.hp = maxHp;
 
            Console.WriteLine("이름 : {0}, 체력 : ({1}/{2})"this.heroName, this.hp, this.maxHp);
 
        }
 
        //메서드
        //아이템을 제작할 수 있다.
        public Item CreateItem(string itemName, int itemDamage)
        {
            Item item = new Item(itemName, itemDamage);
          
            return item; //itemName과 itemDamage를 가진 item 클래스의 인스턴스 값을 반환
 
        }
 
        //아이템을 획득할 수 있다.
        public void GetItem(Item item)
        {
            this.item = item;
 
            if(this.item.itemName!=null)
            {
 
                Console.WriteLine("\n{0}이(가) {1}을 획득했습니다 "this.heroName, this.item.itemName);
           
            }
            else
            {
                Console.WriteLine("\n맨손은 획득할 수 없습니다");
            }
 
 
        }
 
        //아이템을 착용할 수 있다.
        public void EquipItem(Item item)
        {
            this.item = item;
 
            if(this.item.itemName!=null && this.equipItem==false)
            {
                Console.WriteLine("\n{0}이(가) {1}을 착용했습니다."this.heroName, this.item.itemName);
                this.equipItem = true;
            }
            else
            {
                Console.WriteLine("\n맨손은 착용할 수 없습니다.");
            }
 
        }
 
        //아이템을 해제할 수 있다.
        public void UnEquipItem(Item item)
        {
            this.item = item;
 
            if(this.item.itemName!=null || this.equipItem==true)
            {
                Console.WriteLine("\n{0}이(가) {1}을 해제했습니다."this.heroName, this.item.itemName);
                this.equipItem = false;
              
            }
 
            else
            {
                Console.WriteLine("\n맨손은 해제할 수 없습니다.");
            }
 
 
        }
 
        //타켓을 공격 할 수 있다.
        public void Attack(Character target)
        {
            if (this.item.itemName != null && this.equipItem == true)
            {
                Console.WriteLine("\n{0}이 {1}을(를) {2}으로 공격했습니다."this.heroName, target.heroName, this.item.itemName);
                 
            }
 
            else
            {
                Console.WriteLine("\n{0}이 {1}을(를) 맨손으로 공격했습니다."this.heroName, target.heroName);
                this.item.itemDamage = 2;
            }
            target.Hit(thisthis.item);  //Hit 메서드의 대상은 홍길동 인스턴스(this), 아이템 인스턴스
        }
 
        //타켓에게 피해를 받을 수 있다.
        //피해를 받는다면 타켓의 공격만큼 체력을 감소 시킨다.
        //만약 체력이 0보다 같거나 작다면 죽어야한다.
        //아이템을 착용 안하면 맨손 피해가 나온다.
        public void Hit(Character target, Item item)
        {
            this.item = item;
 
 
            for (; ; )
            {
               
 
                this.hp -= this.item.itemDamage;
 
                if (this.hp <= 0)
                {
                    this.hp = 0;
                    Console.WriteLine("\n{0}이 {1}만큼 피해를 받았습니다"this.heroName, this.item.itemDamage);
                    Console.WriteLine("체력 상황 : ({0}/{1})"this.hp, this.maxHp);
                    Die(this);
                    break;
                }
 
                else
                {
                    Console.WriteLine("\n{0}이 {1}만큼 피해를 받았습니다"this.heroName, this.item.itemDamage);
                    Console.WriteLine("체력 상황 : ({0}/{1})"this.hp, this.maxHp);
                }
 
            }
 
        }
 
        //죽을 수 있다.
        public void Die(Character target)
        {
            Console.WriteLine("\n{0}이(가) 죽었습니다.", target.heroName);
        }
 
}

 

 

3. class Item

 

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
    class Item
    {
        //멤버변수
        public string itemName; //아이템 이름
        public int itemDamage;  //아이템의 데미지
        //생성자
        public Item(string itemName,int itemDamage)
        {
            this.itemName = itemName;
            this.itemDamage = itemDamage;
 
            if (this.itemName !=null)
            {
                Console.WriteLine("{0}을(를) 제작하였습니다 (데미지 : {1})"this.itemName, this.itemDamage);
               
            }
            else
            {
                this.itemDamage = 2;
                Console.WriteLine("아이템을 제작하지 않았습니다. 맨손입니다 (데미지 : {0})",this.itemDamage);
 
            }
        }
 
        
    }
 

 

 

1.아이템 착용했을 때

 

2.아이템을 착용했다가 해제 했을 때 

 

3.아이템을 제작하고 획득만 했을 때

 

4. CreateItem에 매개변수로 넣은 값이 null일때(맨손일때)