JSON,데이터 관리 연습 3- 몬스터 잡으면 아이템 드롭, 가방에 넣기
Attack하면 몬스터는 Hero클래스의 this.damage만큼 피해를 입는다.
이는 monster클래스의 HitDamage로 구현한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Game
{
private Hero hero;
private Monster monster;
//생성자
public Game() { }
//메서드
public void Start()
{
Console.WriteLine("게임이 시작 되었습니다.\n");
this.hero = this.CreatHero("홍길동",3);
this.monster = this.CreateMonster(1000);
Inventory bag = new Inventory(5);//5칸 짜리 가방 생성
this.hero.SetBag(bag);//영웅에게 가방 지급
//아이템 지급(무기)
Item item = this.CreateItem(100);
this.hero.SetItem(item);//가방에 넣기
//장비 착용하기
this.hero.Equip(100);
//몬스터 공격
this.hero.Attack(monster);
}
public Hero CreatHero(string name,int damage)
{
return new Hero(name,damage);
}
public Monster CreateMonster(int monster_id)
{//몬스터 생성 메서드: 몬스터 정보도 가져와야한다.
MonsterData data = DataManager.Instance.GetMonsterData(monster_id);//데이터 매니저에서 가져옴
return new Monster(data);
}
private Item CreateItem(int item_id)
{
ItemData data = DataManager.Instance.GetItemData(item_id);
return new Item(data);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Hero
{
private Inventory bag;
private int damage;
private string name;
private Item leftHandItem;
//생성자
public Hero(string name, int damage) {
this.name = name;
this.damage = damage;
Console.WriteLine("영웅({0})이 생성되었습니다, damage: {1}", this.name, this.damage);
}
//메서드
public void SetBag(Inventory bag)//가방을 영웅에게 지급하는 메서드
{
this.bag = bag;
Console.WriteLine("영웅이 ({0})칸짜리 가방({1})을 지급받았습니다.", bag.capacity,this.bag);
}
public void SetItem(Item item)//아이템을 가방에 넣는 메서드
{
this.bag.Additem(item);
}
public void Equip(int itemId)
{
//가방에서 아이템이 있는지 검색
if (this.bag.Exist(itemId))
{
//착용
this.leftHandItem = this.bag.GetItem(itemId);
Console.WriteLine("왼손에 {0}을 착용했습니다.", leftHandItem);
}
else
{
Console.WriteLine("아이템({0})을 찾을 수 없습니다.",itemId);
}
}
public void Attack(Monster target)
{//몬스터를 공격하는 메서드
target.HitDamage(this.damage);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Monster
{
private MonsterData data;
public int hp;
public int maxHp;
public Action onDie; //Action 대리자
//생성자
public Monster(MonsterData data) {
this.data = data;
this.maxHp = data.maxHp;
this.hp = maxHp;
Console.WriteLine("몬스터가 생성되었습니다.(체력:{0}/{1})",hp,maxHp);
}
//메서드
public void HitDamage(int damage)
{
this.hp -= damage * int.MaxValue;
if (this.hp <= 0)
{
this.hp = 0;
}
Console.WriteLine("공격을 받았습니다. 체력 : {0}/{1}", this.hp, this.maxHp);
if (this.hp <= 0)
{
this.Die();
}
}
private void Die()
{
// Console.WriteLine("몬스터({0})가 사망했습니다.", this.data.monster_id);
//대리자 호출
onDie = () =>
{
Console.WriteLine("몬스터({0})가 사망했습니다.", this.data.monster_id);
};
this.onDie();
}
}
}
'C# 기초' 카테고리의 다른 글
C# LINQ (0) | 2023.07.31 |
---|---|
C# 게임 저장, 로드 (0) | 2023.07.28 |
JSON, 데이터 관리연습2-아이템 가방에 넣고 착용하기 (0) | 2023.07.28 |
JSON, 데이터 관리 연습 (0) | 2023.07.28 |
JSON (0) | 2023.07.27 |