지금까지의 정리

 평소엔 9시가 넘겨서 작성을 시작하는데

오늘은 조금 이르게 작성하기 시작한다

뭐 사실 제출시간이 9시라 이게 맞는건데 여지껏 잘못해온거지....

뭐 그래도 딱히 패널티는 없으니까


시간이 날때 이번 기수들의 til을 전부다 확인해봤다 물론 개중에는 로그인을 요구한다거나

그런 블로그가 있어서 그런건 보지 못했지만 아무튼 퍼블릭한건 다 봤다

그러다보니 조금 괜찮은거랑 그닥인걸 조금 알것같았다 물론 그것도 나의 평가에서지만....

단순히 기술적인 내용만 좌라락 적는건 개인적으로 별로 재미는 없었다

솔직히 구경하는 맛은 나 처럼 그날 그날 있던 일을 풀어서 쓰는게 보는 맛이 있다....

다만 기술적인 내용이 언젠가 필요에 의해 검색해 찾아온 사람에겐 더 도움이 되겠지

검색 결과에 나올거라 생각하지는 않지만 굳이 도움적인 요소를 생각해봤을때의 이야기다..

절대 내가 다른 사람의 til을 보고 뭔가를 배워서 그렇게 말하는게 아니다........

개발자의 문화인가..


그리고 뭔가 여자가 쓴게 더 보기 좋았다 학창시절 여자애들 메모장이 더 보기 편했던거의

연장선일까?


저번에 이야기 했던 뱀 게임은 다 완성했다 아쉬운 점은 바로뒤에 몸뚱이가 있는데 뒤로가기 버튼을 클릭하면 바로 자폭한다는 점이려나.... 보통의 뱀 게임은 뭄뚱이가 붙은 쪽으로는 못 움직인다 뭐 해결법은 그냥 뒤로가는 기능을 지우는 것이다 애초에 뒤로 못 가게 할거니 뒤로 가기 기능이 왜 필요한가 더불어 내가 직접 만들고 여럿 게임을 해보니 앞으로 가는 버튼도 필요가 없다 이미 게임 속 흐름에 의해 자동으로 앞으로 움직이기 때문에 앞으로 가는 버튼도 지워주면 오히려 깔끔할듯 싶었다 뭐 그렇게 생각만하고 개인프로잭트랑 강의가 바쁘기에 손은 놨다 


다음은 텍스트 게임 어제 말했던 공격력 소수점 반영은 아직 못 했다만

생각지 못 했던 게임 저장기능을 구현할수 있었다. json을 활용하는 방법이다.


    static public void SaveObject(params object[] objects)

    {

        if (!Directory.Exists("D"))

        {

            Directory.CreateDirectory("D");

        }

        for (int i = 0; i < objects.Length; i++)

        {

            string temp = JsonConvert.SerializeObject(objects[i]);

            File.WriteAllText($"D\\consolegame{i}.json",temp);

        }

    }

    static void LoadGame()

    {

        string player = File.ReadAllText("D\\consolegame0.json");

        string shop = File.ReadAllText("D\\consolegame1.json");

        Player newP = JsonConvert.DeserializeObject<Player>(player);

        Shop TownShop = JsonConvert.DeserializeObject<Shop>(shop);

        Map SpartaTown = new Map(newP, TownShop);

        Dungeon dun = new Dungeon(newP);

    }


에고 함수를 가져오니 공간 차지가 심하네 여튼 각각 저장함수와 로드함수다.

using Newtonsoft.Json;을 추가해야 사용한다. 추측하기로 뭔가 더 많은 using이 있어야 할거같은데 아니 요즘 시스템은 using을 안 해도 알아서 된거로 처리가 되는건지 뭔지 오히려 불안하다 using 내가 명시적으로 선언할태니 반투명하게 설정되는거 좀 풀어주면 안 될까....


각설하고 새로이 사용한 것들을 이야기 해보자면

if (!Directory.Exists("D")) 경로에 D라는 폴더가 있나

        {

            Directory.CreateDirectory("D");  없으면 D라는 폴더를 만들어라

        }


string temp = JsonConvert.SerializeObject(objects[i]); 객체의 내용을 json화해서 string에 담아라

File.WriteAllText($"D\\consolegame{i}.json",temp); D폴더에 consolegamei.json 파일을 만들고 temp의 내용을 담아라 이런식이다


반대로 로드함수는

string player = File.ReadAllText("D\\consolegame0.json"); json파일의 내용을 string에 담고

Player newP = JsonConvert.DeserializeObject<Player>(player);  역직렬화해서 플레이어 레퍼런스에 할당하라는 내용이다 그 이후는 일반적인 게임 작동 함수와 동일하다.


시리얼라이즈 == 직렬화 / 디시리얼라이즈 == 역직렬화

객체의 내용을 json으로 만들고 다시 해체하는 걸 의미한다

뭐.... 이정도려나


json에 저장하고 싶은 정보는 public을 해줘야한다 프로퍼티로 선언했다면 get; set;을 둘다 해줘야해서 필요한것만 set;하고 public을 해준 나는 정말 곤란했다 json을 알려주는 한국 자료는 유니티 자료보다 너무 없었다.

그래서 저장해야할 자료형들을 무지성 public화 했다.

그리고 프로퍼티를 get만하면 역직렬화할때 그 값이 할당이 안 된다 그래서 set도 해줘야한다 이것 때문에 튜터님에게 갔다.... 아니 근데 그럼 캡슐화의 의미가 없어지는거 아닌가? 그 개념에 대해 잘은 모르지만

내가 이해하기론 필요한것만 공개하고 그 외의 것은 수정을 못하게 하거나 아예 숨겨버리는 의미인데 다 풀어버리면 .... 뭐지?

그리고 이부분은 잘 이해하지 못 했는데 역직렬화로 만든 객체는 원본 객체랑 달라서??

오브젝트끼리 ==로 비교하면 flase를 뱉는다 듣자하니 주소값이 다르다는거 같은데....

마치 스트링과 스트링 빌더에 같은 글을 넣어도 ==가 아니라는것과 같다나

그럼 값형은 그렇게 비교해도 되남.... 아무튼 그래서 오브젝트의 원소들로 비교를 해서 ==했더니 잘 동작하더라.... 어 근데 string으로 비교했는데 이거 레퍼런스형 아닌가.. 아 뭔냐고!!!!!!

클래스 객체의 주소값만 다르고 그 객체의 변수주소값은 같은건가?


뭐 여튼 이정도다

나답지 않게 내일 할걸 미리 생각을 하자면

소수점 반영을 해두고 hp에 따른 로직하나 만들고 일단 제출할 생각이다

아마 그렇게 오래 걸릴 작업은 아니니 남은 시간엔 5주차 강의 좀 볼 생각이다

보아하니 탐색하는 방법이랑 정렬하는 방법을 알려주는 내용인데

그 부분은 어디다 저장해 둬도 좋을거 같다 다만 탐색하는 방법에 노드 비선형 탐색도 알려주던데.... 아니 아무리 봐도 이거 진도가 조금 이상하다 이해 못 하는 사람 좀 있을거 같은데

아닌가.... 나만 한심한것인가!?



자료구조 용어정리

시퀸스 컨테이너 / 넣는대로 순서가 정해짐

연관 컨테이너 / 넣은 자료형들간에 정렬작업?이 있음

어뎁터 컨테이너 / 몰라~


배열 / 한 자료에서 다음 자료로만 이동

노드 / 한 자료에서 여러 자료로 이동


뭐 그래서 위 세 분류와 아래 두 분류를 합쳐서 부르면 된다

리스트는 시퀸스 배열이다~ 이런식 .... 어디서 배웠지만 제대로 배운거같다 .....제대로 배운거여야만 한다 ... 제대로 배웠으면 좋겠다 배열 노드가 아니라 선형 비선형같은 기분이....?

뭐 확실히 시퀸스 배열형은 조금 탐색하는 법이 망상하다보면 나올거 같은데

노드형은 감도 안 잡히니 이 블로그에 작성하는것도 괜찮을듯 싶다

댓글

이 블로그의 인기 게시물

1/29

오늘의 til

메모