1. 과제
1) 디자인패턴
: 소프트웨어 디자인 과정에서 자주 발생하는 문제들을 해결하기 위한 방법들을 일반화하여 정리한 것.
: 문제 쉽고 빠르게 해결 가능. 이미 정리된 기본 패턴에 자신만의 기능을 추가하여 새로운 패턴 생성 가능.
2) 싱글톤패턴
: 런타임 동안 단 하나의 인스턴스만을 생성하는 패턴.
(해당 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법)
: 프로그램이 동작하는 동안 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하기 쉬움.
3) JSON(JavaScript Object Notation)
: 사람이 읽을 수 있는 텍스트를 사용하여 데이터를 저장하고 전송하는 데이터 공유를 위한 개방형 표준 파일 형식.
(Javascript 객체 문법을 따르는 문자 기반의 데이터 포맷)
: 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용.
(서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우).
4) 직렬화
:객체를 저장하거나, 메모리, 데이터베이스 또는 파일로 전송하기 위해 객체를 바이트(Byte) 형식으로 변환하는 것.
(데이터 파일 형태로 영구 저장 장치에 저장)
5)역직렬화
: 바이트 또는 텍스트 스트림을 객체로 변환하는 것.
6)딕셔너리는 왜 검색이 빠른가??
: 해시 함수를 이용해 key를 만들어서 저장
2. 가짜 인벤토리1 복습
※ 주석 꼭 달아주면서 복습하기!!!!!!
※ return 주의하며 복습하기!!!
app 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace Starcraft
{
public class App
{
//생성자
public App()
{
//아이템 인스턴스화
//ItemData itemData = new ItemData(100, "장검", 0, 8);
//Item item = new Item(itemData);
//아이템데이터 Dictionary 초기화
Dictionary<int, ItemData> itemDic = new Dictionary<int, ItemData>();
itemDic.Add(100, new ItemData(100, "장검", 0, 8));
itemDic.Add(101, new ItemData(101, "단검", 0, 5));
itemDic.Add(102, new ItemData(102, "활", 0, 6));
itemDic.Add(103, new ItemData(103, "도끼", 0, 10));
itemDic.Add(104, new ItemData(104, "사슬 갑옷", 1, 0));
itemDic.Add(105, new ItemData(105, "체력 물약", 2, 0));
//사전에서 키로 값(장검) 가져오기
ItemData itemData = itemDic[100];
Item item = new Item(itemData); //<= 진짜 아이템을 가져오기 때문에 'Item' 사용
Console.WriteLine(item.itemData.id); //100
Console.WriteLine(item.itemData.name); //장검
//몬스터데이터 Dictionary로 초기화
Dictionary<int, MonsterData> monsterDic = new Dictionary<int, MonsterData>();
monsterDic.Add(1000, new MonsterData(1000, "고블린", 100, 50));
monsterDic.Add(1001, new MonsterData(1001, "트롤", 101, 45));
//고블린 생성
MonsterData monsterData = monsterDic[1000];
Monster monster = new Monster(monsterData,itemDic);
Console.WriteLine(monster.monsterData.id); //1000
Console.WriteLine(monster.monsterData.name); //고블린
//고블린 죽고 아이템(장검) 생성
Item dropItem = monster.Die();
Console.WriteLine("{0}을 획득하였습니다.",dropItem.GetName());
//고블린 공격받고 난 후 hp출력
monster.HitDamage(5);
Console.WriteLine("hp:{0}", monster.GetHp());
}
}
}
Item 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
public class Item
{
public ItemData itemData;
//생성자
public Item(ItemData itemData)
{
this.itemData = itemData;
}
//아이템 데이터의 이름 반환 메서드
public string GetName()
{
return this.itemData.name;
//<== return 실행 위해서 void를 name변수의 타입(string)으로 변경
}
}
}
ItemData 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
public class ItemData
{
public int id;
public string name;
public int item_type;
public int damage;
//생성자
public ItemData(int id,string name,int item_type,int damage)
{
this.id = id;
this.name = name;
this.item_type = item_type;
this.damage = damage;
}
}
}
Monster 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Monster
{
public MonsterData monsterData;
public Dictionary<int, ItemData> itemDic;
public int hp;
//생성자
public Monster(MonsterData monsterData,Dictionary<int,ItemData> itemDic)
{
this.monsterData = monsterData;
this.itemDic = itemDic;
this.hp = this.monsterData.hp;
}
//몬스터 죽고 아이템 생성 메서드
public Item Die()
{
Console.WriteLine("{0}이 죽었습니다.", this.monsterData.name); //몬스터 사망
ItemData itemData = this.itemDic[this.monsterData.item_id];
return new Item(itemData); //<= 진짜 아이템 생성(ItemData = monsterData 인)
//return 하기 위해서 void -> Item으로 변경
}
//몬스터 공격받는 메서드
public void HitDamage(int damage)
{
this.hp -= damage;
Console.WriteLine("{0}이 공격을 받았습니다.(-{1})", monsterData.name, damage);
}
//몬스터 hp 출력 메서드
public int GetHp()
{
return this.hp; //<== return 실행하기 위해 void를 hp의 타입(int)로 변경
}
}
MonsterData 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class MonsterData
{
public int id;
public string name;
public int item_id;
public int hp;
//생성자
public MonsterData(int id, string name, int item_id, int hp)
{
this.id = id;
this.name = name;
this.item_id = item_id;
this.hp = hp;
}
}
}
2. 가짜 인벤토리 2 복습
※ 클래스 사용 전에 꼭 인스턴스화!!!!!!!!!!!!
App 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace Starcraft
{
public class App
{
//생성자
public App()
{
//아이템 인스턴스화
//ItemData itemData = new ItemData(100, "장검", 0, 8);
//Item item = new Item(itemData);
//아이템데이터 Dictionary 초기화
Dictionary<int, ItemData> itemDic = new Dictionary<int, ItemData>();
itemDic.Add(100, new ItemData(100, "장검", 0, 8));
itemDic.Add(101, new ItemData(101, "단검", 0, 5));
itemDic.Add(102, new ItemData(102, "활", 0, 6));
itemDic.Add(103, new ItemData(103, "도끼", 0, 10));
itemDic.Add(104, new ItemData(104, "사슬 갑옷", 1, 0));
itemDic.Add(105, new ItemData(105, "체력 물약", 2, 0));
//인벤토리 생성 및 초기화 (용량:3)
Inventory inven = new Inventory(3);
//인벤토리에 아이템 추가(딕셔너리 id 사용)
inven.AddItem(new Item(itemDic[100])); //장검 추가
inven.AddItem(new Item(itemDic[101])); //단검 추가
inven.AddItem(new Item(itemDic[102])); //활 추가
}
}
}
인벤토리 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Inventory
{
//아이템을 그룹/관리
List<Item> items; //변수 정의
public int capacity;
//생성자
public Inventory(int capacity)
{
this.capacity = capacity;
this.items = new List<Item>();
Console.WriteLine("{0}칸짜리 가방이 생성되었습니다. [{1}/{2}]", this.capacity, this.items.Count, this.capacity);
}
//인벤토리 아이템 추가 메서드
public void AddItem(Item item)
{
this.items.Add(item); //<== List의 Add 메서드를 이용
Console.Write("{0}이(가) 추가 되었습니다. [{1}/{2}]", item.itemData.name, this.items.Count, this.capacity);
}
}
}
아이템 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
public class Item
{
public ItemData itemData;
//생성자
public Item(ItemData itemData)
{
this.itemData = itemData;
}
//아이템 데이터의 이름 반환 메서드
public string GetName()
{
return this.itemData.name;
//<== return 실행 위해서 void를 name변수의 타입(string)으로 변경
}
}
}
아이템데이터 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
public class ItemData
{
public int id;
public string name;
public int item_type;
public int damage;
//생성자
public ItemData(int id,string name,int item_type,int damage)
{
this.id = id;
this.name = name;
this.item_type = item_type;
this.damage = damage;
}
}
}
'KDT > C# 프로그래밍' 카테고리의 다른 글
23/07/27 대리자 (0) | 2023.07.27 |
---|---|
23/07/27 전시간 수업 내용 정리 (0) | 2023.07.27 |
23/07/26 가짜 인벤토리 만들기2 (0) | 2023.07.26 |
23/07/26 가짜 인벤토리 만들기1 (0) | 2023.07.26 |
23/07/25 배열 복습 및 연습(집에서) (0) | 2023.07.25 |