2019-10-18 20일차 롤 챔피언 Attack메시지 출력 (json, Dictionary, 클래스상속사용)

Console Programming/C# Console 2019. 10. 18. 10:24

 

 

champion_Data.json

[
    {
      "character_id": 1,
      "name": "리신",
      "damage": 70
    },
    {
      "character_id": 2,
      "name": "레넥톤",
      "damage": 69
    },
    {
      "character_id": 3,
      "name": "오른",
      "damage": 69
    },
    {
      "character_id": 4,
      "name": "초가스",
      "damage": 69
    },
    {
      "character_id": 5,
      "name": "칼리스타",
      "damage": 69
    },
    {
      "character_id": 6,
      "name": "트린다미어",
      "damage": 69
    },
    {
      "character_id": 7,
      "name": "그레이브즈",
      "damage": 68
    },
    {
      "character_id": 8,
      "name": "렝가",
      "damage": 68
    },
    {
      "character_id": 9,
      "name": "사이온",
      "damage": 68
    }
  ]

 

Program.cs

namespace Console1018
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

 

App.cs

using System;
using System.IO;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace Console1018
{
    public class App
    {
        public App()
        {
            string path = @"C:\Workspace\Console1018\Console1018\bin\Debug\champion_Data.json";
            string json = File.ReadAllText(path);

            ChampionData[] arrChampionData = JsonConvert.DeserializeObject<ChampionData[]>(json);

            Dictionary<int, ChampionData> dicChampionData = new Dictionary<int, ChampionData>();
            
            foreach(var data in arrChampionData)
            {
                dicChampionData.Add(data.character_id, data);

            }

            LeeSin leeSin = new LeeSin();

            leeSin.ChampionData = dicChampionData[1];
            
            ChoGath choGath = new ChoGath();
            choGath.ChampionData = dicChampionData[4];

            leeSin.Attack(choGath);

            choGath.Attack(leeSin);


        }
    }
}

 

Champion.cs

using System;

namespace Console1018
{
    public class Champion
    {
        public ChampionData ChampionData { get; set; }
        
        public Champion()
        {

        }
        public virtual void Attack(Champion target)
        {
            target.Hit(this.ChampionData.damage);
        }

        public void Hit(int damage)
        {
            Console.WriteLine($"{this.ChampionData.name}이 피해({-damage})를 입었습니다.");

        }
    }
}

 

ChoGath.cs

using System;

namespace Console1018
{
    public class ChoGath : Champion
    {
        public ChoGath()
        {

        }
        public override void Attack(Champion target)
        {
            Console.WriteLine($"{this.ChampionData.name}이(가) 가시를 날려  {target.ChampionData.name}을 공격했습니다.");
            base.Attack(target);            
        }
    }
}

 

LeeSin.cs

using System;

namespace Console1018
{
    public class LeeSin : Champion
    {
        public LeeSin()
        {

        }
        public override void Attack(Champion target)
        {
            Console.WriteLine($"{this.ChampionData.name}이(가) 발차기로 {target.ChampionData.name}을 공격했습니다.");
            base.Attack(target);
        }
    }
}

 

ChampionData.cs

namespace Console1018
{
    public class ChampionData
    {

        //data
        //character_id name    damage
        public int character_id { get; set; }
        public string name { get; set; }
        public int damage { get; set; }

        public ChampionData()
        {

        }
    }
}

 

 

실행결과

 

: