Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가변배열
- 공부
- 표창던지기
- premake5
- 파이썬
- 화살표 메서드
- 3차원배열
- python
- 유니티
- 언리얼
- c++class
- IMGUI
- 화살표 함수
- 이득우
- 배열문제
- 비주얼스튜디오
- visualstudio2022
- 다중상속
- 화살피하기
- 셰이더
- c#
- swipe
- 그림자 효과
- C++
- rendermonkey
- Unity
- uidesign
- 렌더몽키
- 이득우언리얼
- 게임만들기
Archives
- Today
- Total
신입 개발자 공부 과정
1/10 - dictionary2 / 디자인 패턴(싱글톤) 본문
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Smithy//어떤 아이템을 만들어주세요
{
//private Dictionary<int, WeaponData> dic;
public Smithy()//Dictionary<int, WeaponData> dic)//생성자 - app에 있는 dictionary값들(id, 등등 쓸려고)
{
//this.dic = dic;
}
public Weapon CreatWeapon(int id)//메서드= json에 있는 id값을 입력할거다// 다만 id값은 현재 app이 가지고 있다.
{
WeaponData data = DataManager.GetInstance().GetWeaponData(id);
return new Weapon(data.id, data.name, data.damage, data.price);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace ConsoleApp2
{
class App
{
Dictionary<int, WeaponData> dicWeaponData = new Dictionary<int, WeaponData>();
public App()
{
string json = File.ReadAllText("./weapon.data.json");
Console.WriteLine(json);
WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
foreach(var data in weaponDatas)
{
this.dicWeaponData.Add(data.id, data);
}
Console.WriteLine(this.dicWeaponData.Count);
var mydata = this.dicWeaponData[100];
Console.WriteLine("{0}{1}{2}{3}", mydata.id, mydata.name, mydata.damage, mydata.price);
}
}
}
-------------------
디자인 패턴:
-싱글패턴: 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
1.DataManager 클래스를 싱글톤으로 만들고
2.Loaddatas 메서드를 정의하고 json 파일을 읽어 역직렬화 하고 사전에 넣으세요
3.DataManager의 인스턴스 메서드를 정의하고 사전에서 데이터를 가져오게 만드세요.
파일저장하기
신규유저 기존유저 판별하기
파일 로드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
new App();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace ConsoleApp2
{
class App
{
public App()
{
//데이터를 로드하고 싶을때 - 딕셔네리 값이 올라옴
DataManager.GetInstance().LoadDatas();
Smithy smithy = new Smithy();//대장간 인스턴스 생성
Weapon weapon = smithy.CreatWeapon(100);//무기 넘버100을 만들어 주세요
Console.WriteLine("----\nnb:{0}\nname:{1}",weapon.Id, weapon.Name);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class WeaponData
{
public int id;
public string name;
public float damage;
public int price;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Weapon
{
public int Id {get; private set;}//조회는 가능하고 설정은 안되게
public string Name { get; private set; }
private float damage;
private int price;
//생성자 //Weapon 정보 입력 된다.
public Weapon(int id, string name, float damage, int price)
{
this.Id = id;
this.Name = name;
this.damage = damage;
this.price = price;
}
}
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class DataManager//싱글톤 클래스
//데이터들을 관리
{
private Dictionary<int, WeaponData> dicWeaponData = new Dictionary<int, WeaponData>();//캡슐화-app class에 있던 딕셔네리 = 변하지 않는 데이터다=벨런스패치
private static DataManager instance = new DataManager();//private static이어야 한다
private DataManager()//생성자
{
}
public static DataManager GetInstance()//DataManager를 반환해 주는 GetInstance method생성
{
if (DataManager.instance == null) DataManager.instance = new DataManager();//null이면 새로운 DataManager 객체를 만들어주고
return DataManager.instance;//기존 DataManager의 인스턴스를 반환해준다
}
//------------------------
//데이터 로드도 한다.
public void LoadDatas()
{
string json = File.ReadAllText("./weapon.data.json");
//Console.WriteLine(json);
WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
foreach (var data in weaponDatas)
{
this.dicWeaponData.Add(data.id, data);
}
//Console.WriteLine(this.dicWeaponData.Count);
var mydata = this.dicWeaponData[100];
Console.WriteLine("------\nid:{0}\nname:{1}\ndamage:{2}\nprice:{3}", mydata.id, mydata.name, mydata.damage, mydata.price);
}
public WeaponData GetWeaponData(int id) //데이터를 가져오고싶다
{
return this.dicWeaponData[id];
}
}
}
'C# > 수업 내용' 카테고리의 다른 글
c# out, ref, Int32.TryParse,TryParse(String, Int32) 과 (0) | 2022.01.12 |
---|---|
1/11 - (테이블만들기, Json변환, 파일읽고쓰기, 직렬화, 역직렬화, 사전넣기, 싱글톤만들기) (0) | 2022.01.12 |
01/06 과제 (0) | 2022.01.07 |
Dictionary (0) | 2022.01.06 |
Delegate 대리자 2 + Lamda 람다 (0) | 2022.01.05 |