Diary
반응형

전체 글 117

카테고리 설명
일상을 담아둔 다이어리
  • 그래도 꽤 여러가지 만들었기에 이래저래 테스트를 돌려보았다 아니나다를까 문제점이 여러가지 보인다 ;ㅅ; 나중에 고치려면 골치아플수 있으니 미리 수정하고 넘어가야지   1. Max all 버튼 수정 지난번에 나름 괜찮게 고쳤다고 생각했는데   public void Max_all(){ while (MA >= TS_cost){ TS_purchase(); } while (MA >= D1_cost * (10 - D1_amount%10)){ D1_purchase(); } while (MA >= D2_cost * (10 - D2_amount%10)){ D2_purchase(); ..

  • 오늘은 만들어둔 버튼들중 Buy max와 Max all 버튼을 구현해볼 생각이다 그리고 저번에 생각했던대로 1~6차원은 10단위까지는 한번의 클릭으로 일괄구매가 되도록 해보자   생각해보니 10단위 일괄구매를 먼저 만드는게 나을듯해서 그쪽을 먼저 시작했다 간단한 반복문을 사용하면 될것같았는데 만들다보니 C#에는 do~while 이라는 파이썬에는 없었던 특이한 반복문이 있다는걸 알게되서 한번 써보았다     public void D1_purchase(){ if (MA >= D1_cost){ do { MA -= D1_cost; D1_amount += 1; D1_amount_total += 1..

  • 지난번에 생각한대로 오늘은 스크립트의 길이를 줄여보기로했다 사실 이런 작업이 실제로 프로그램이 돌아가는데 좋은영향인지 나쁜영향인지는 잘 모르겠다 그냥 내가 보기쉽게 하고싶을뿐...       일단 눈에보인 원인은 수많은 변수선언과 복붙해서 반복한 작업들 이었는데 반복작업은 메소드를 만들어서 간략화 해주어야겠고... 변수선언은 어떻게 방법이 있나 싶어서 파이썬 쓸때 하던대로 해보았는데     이런식으로 같은종류의 변수는 여러줄 사용할 필요 없이 한번에 입력하는게 C#도 가능한듯하다 굳 방법을 알았으니 수정하는건 쉽다      혹시모르니 기존것은 주석처리해두고 너무 길면 오른쪽끝에 들어간것들이 안보이니 두줄로 만들어주었다 double과 Image에도 같은작업을 반복       이렇게 많이 줄어들었다 테스트해..

카테고리
작성일
2024. 12. 23. 11:53
작성자
yul s
반응형

 

 

그래도 꽤 여러가지 만들었기에 이래저래 테스트를 돌려보았다

 

아니나다를까 문제점이 여러가지 보인다 ;ㅅ;

 

나중에 고치려면 골치아플수 있으니 미리 수정하고 넘어가야지

 

 

 

1. Max all 버튼 수정

 

지난번에 나름 괜찮게 고쳤다고 생각했는데

 

 

    public void Max_all(){
        while (MA >= TS_cost){
            TS_purchase();
        }
        while (MA >= D1_cost * (10 - D1_amount%10)){
            D1_purchase();
        }
        while (MA >= D2_cost * (10 - D2_amount%10)){
            D2_purchase();
        }
        while (MA >= D3_cost * (10 - D3_amount%10)){
            D3_purchase();
        }
        while (MA >= D4_cost * (10 - D4_amount%10)){
            D4_purchase();
        }
        while (MA >= D5_cost * (10 - D5_amount%10)){
            D5_purchase();
        }
        while (MA >= D6_cost * (10 - D6_amount%10)){
            D6_purchase();
        }
    }

 

 

 

이런 기존의 구조에는 문제가있었다

 

아니 사실 문제가 아닐지도 모르지만

 

위에서부터 순서대로 최대치를 구매하면서 내려가는거라

 

골고루 한번씩 구매하는걸 반복하는것과 조금씩 다른결과가 나올수있는데

 

문제가 아니라면 아닐수도 있지만 난 골고루 사주길 원한다 -_-

 

좀 더 머리를 굴린끝에...

 

 

 

    public void Max_all(){
        double min_cost;
        do {
            if (MA >= D1_cost * (10 - D1_amount%10)){
                D1_purchase();
            }
            if (MA >= D2_cost * (10 - D2_amount%10)){
                D2_purchase();
            }
            if (MA >= D3_cost * (10 - D3_amount%10)){
                D3_purchase();
            }
            if (MA >= D4_cost * (10 - D4_amount%10)){
                D4_purchase();
            }
            if (MA >= D5_cost * (10 - D5_amount%10)){
                D5_purchase();
            }
            if (MA >= D6_cost * (10 - D6_amount%10)){
                D6_purchase();
            }
            if (MA >= TS_cost){
            TS_purchase();
            }
            double[] costs = {D1_cost * (10 - D1_amount%10), D2_cost * (10 - D2_amount%10), D3_cost * (10 - D3_amount%10), D4_cost * (10 - D4_amount%10), D5_cost * (10 - D5_amount%10), D6_cost * (10 - D6_amount%10), TS_cost};
            min_cost = costs.Min();
        } while (MA >= min_cost);
    }

 

 

 

 

이렇게 수정했더니

 

이제야 진짜 원하던대로 되는가 싶었는데

 

 

 

특정 차원의 갯수가 0개이고 10개 미만으로 구매가능할때 Max all 버튼을 눌러도

 

작동을 안해야하는데 1~9개만 구매가능할때 Max 버튼을 누르면 1개가 구매되는 버그가 있었다

 

뭐가 문제인가 싶어 둘러보니 나머지를 구하는 %연산에 문제가 있는듯하다

 

위의 스크립트에서 amount 가 0일때는 나눗셈을 할수가 없어서 오류가 나는듯

 

이리저리 고민해봤는데....

 

뭔가 아름답게 해결할만한 방법이 안보여서 그냥 땜빵처리를 했다

 

 

 

 

 

미래의 내가 좋은 방법을 생각해줄거야

 

 

    public void Max_all(){
        double min_cost;
        do {
            double D1_amounts, D2_amounts, D3_amounts, D4_amounts, D5_amounts, D6_amounts;
            D1_amounts = D1_amount + 0.0001;
            D2_amounts = D2_amount + 0.0001;
            D3_amounts = D3_amount + 0.0001;
            D4_amounts = D4_amount + 0.0001;
            D5_amounts = D5_amount + 0.0001;
            D6_amounts = D6_amount + 0.0001;
            if (MA >= D1_cost * (10 - D1_amounts%10)){
                D1_purchase();
            }
            if (MA >= D2_cost * (10 - D2_amounts%10)){
                D2_purchase();
            }
            if (MA >= D3_cost * (10 - D3_amounts%10)){
                D3_purchase();
            }
            if (MA >= D4_cost * (10 - D4_amounts%10)){
                D4_purchase();
            }
            if (MA >= D5_cost * (10 - D5_amounts%10)){
                D5_purchase();
            }
            if (MA >= D6_cost * (10 - D6_amounts%10)){
                D6_purchase();
            }
            if (MA >= TS_cost){
            TS_purchase();
            }
            double[] costs = {D1_cost * (10 - D1_amounts%10), D2_cost * (10 - D2_amounts%10), D3_cost * (10 - D3_amounts%10), D4_cost * (10 - D4_amounts%10), D5_cost * (10 - D5_amounts%10), D6_cost * (10 - D6_amounts%10), TS_cost};
            min_cost = costs.Min();
        } while (MA >= min_cost);
    }

 

 

 

 

정수이어야할 Dn_amount 변수들에 순간적으로 0.0001을 더해줘서

 

0이 아니게만들어주는 무식한 방식의 땜빵 ^^

 

일단 문제는 해결

 

 

 

 

 

2. 지수표현 수정

 

 

대부분 숫자들이 1000 미만은 그대로 표기하고 넘어가면 1.23e45 형태로 나오게 해놓았는데

 

지수형태로 표현할때는 상관없지만 1000 미만을 그대로 사용하는경우

 

어떤건 정수이고 어떤건 소수점을 보여줘야하는데

 

정수로 일괄처리를 해두어서 어색한 부분이 있었다

 

 

 

 

Total Tickspeed가 현재 1.1이어야 하는데 그냥 1로 보이는모습....

 

뭐 이건 인지만 하면 간단하게 해결할수있는 문제였다

 

 

 

 

    public string Expo(double number, string note){
        string result;
        if (number < 1e3){
            result = number.ToString(note);
        }
        else{
            var exponent = (Math.Truncate(Math.Log10(Math.Abs(number))));
            result = (number / Math.Pow(10, exponent)).ToString("F2") + "e" + exponent;
        }
        return result;
    }

 

 

기존의 Expo 메소드에 그냥 애초에 1000미만일때

 

소수점 자리수를 어떻게 표시할지 받아오게 만들고

 

 

        MA_text.text = "You have " + Expo(MA, "F0") + " matters (MA)";
        MA_speed_text.text = "You are earning matters " + Expo(MA_speed, "F2") + "/s";

 

 

 

update()에서 메소드를 사용할때도 그냥 "F0"나 "F2"를 집어넣어주니 해결끗

 

 

 

 

 

 

 

 

어떤건 소수점 2자리로, 어떤건 정수로

 

잘 표시되는모습이다

 

 

 

 

만든것도 그렇게 많지도않은데 벌써 이렇게 문제점들이 보이니...

 

역시 혼자 배우고 혼자 만드는데는 한계가 있는걸까?

 

 

반응형
카테고리
작성일
2024. 12. 21. 12:42
작성자
yul s
반응형

 

 

 

 

 

 

오늘은 만들어둔 버튼들중 Buy max와 Max all 버튼을 구현해볼 생각이다

 

그리고 저번에 생각했던대로

 

1~6차원은 10단위까지는 한번의 클릭으로 일괄구매가 되도록 해보자

 

 

 

생각해보니 10단위 일괄구매를 먼저 만드는게 나을듯해서 그쪽을 먼저 시작했다

 

간단한 반복문을 사용하면 될것같았는데

 

만들다보니 C#에는 do~while 이라는 파이썬에는 없었던

 

특이한 반복문이 있다는걸 알게되서 한번 써보았다

 

 

 

 

    public void D1_purchase(){
        if (MA >= D1_cost){
            do {
                MA -= D1_cost;
                D1_amount += 1;
                D1_amount_total += 1;
                D1_cost = 10 * Math.Pow(10,Math.Truncate(D1_amount/10));
                D1_multiple = Math.Pow(2,Math.Truncate(D1_amount/10));
            } while (MA >= D1_cost && D1_amount%10 != 0);

        }
    }

 

 

 

do~while 이 없었으면 좀 더 복잡하게 되었을거같은데

 

덕분에 기존의 코드와 큰 차이가 없는수준 ㅎ

 

테스트해보니 잘 돌아가는걸 확인하고 2~6차원까지 다 바꿔주었다

 

 

 

다음은 Max all 버튼차례

 

먼저 그냥 모든 구매대상들중 최소가격이 현재 물질수보다 작으면 계속 반복구매하도록

 

스크립트를 만들어 보았다

 

 

 

    public void Max_all(){
        double min_cost;
        do {
            TS_purchase();
            D1_purchase();
            D2_purchase();
            D3_purchase();
            D4_purchase();
            D5_purchase();
            D6_purchase();
            double[] costs = {D1_cost, D2_cost, D3_cost, D4_cost, D5_cost, D6_cost, TS_cost};
            min_cost = costs.Min();
        } while (MA >= min_cost);
    }

 

 

 

 

요론느낌?

 

근데 막상 실행해서 Max all 버튼을 눌러보니

 

 

 

 

 

 

이렇게 10개까지 못채우고 낱개로 짜투리가 남는게 불편한 느낌 ;ㅅ;

 

그래서 수정을 더 해보았는데

 

결국 이래저래 생각해 보아도 스크립트 자체를 짧게 만들기는 힘들듯하여

 

그냥 하나씩 넣어주었다 ..^

 

 

 

    public void Max_all(){
        while (MA >= TS_cost){
            TS_purchase();
        }
        while (MA >= D1_cost * (10 - D1_amount%10)){
            D1_purchase();
        }
        while (MA >= D2_cost * (10 - D2_amount%10)){
            D2_purchase();
        }
        while (MA >= D3_cost * (10 - D3_amount%10)){
            D3_purchase();
        }
        while (MA >= D4_cost * (10 - D4_amount%10)){
            D4_purchase();
        }
        while (MA >= D5_cost * (10 - D5_amount%10)){
            D5_purchase();
        }
        while (MA >= D6_cost * (10 - D6_amount%10)){
            D6_purchase();
        }
    }

 

 

 

이제 실행해보니

 

 

 

 

 

 

요로케 Max all 버튼을 눌러도

 

1개단위는 구매하지않고 내비두도록 완성

 

 

반응형
카테고리
작성일
2024. 12. 19. 11:04
작성자
yul s
반응형

 

 

 

지난번에 생각한대로 오늘은 스크립트의 길이를 줄여보기로했다

 

사실 이런 작업이 실제로 프로그램이 돌아가는데

 

좋은영향인지 나쁜영향인지는 잘 모르겠다

 

그냥 내가 보기쉽게 하고싶을뿐...

 

 

 

 

 

 

 

일단 눈에보인 원인은 수많은 변수선언과 복붙해서 반복한 작업들 이었는데

 

반복작업은 메소드를 만들어서 간략화 해주어야겠고...

 

변수선언은 어떻게 방법이 있나 싶어서 파이썬 쓸때 하던대로 해보았는데

 

 

 

 

 

이런식으로 같은종류의 변수는 여러줄 사용할 필요 없이 한번에 입력하는게 C#도 가능한듯하다

 

 

방법을 알았으니 수정하는건 쉽다

 

 

 

 

 

 

혹시모르니 기존것은 주석처리해두고

 

너무 길면 오른쪽끝에 들어간것들이 안보이니 두줄로 만들어주었다

 

double과 Image에도 같은작업을 반복

 

 

 

 

 

 

 

이렇게 많이 줄어들었다

 

테스트해보니 딱히 이상은 없는듯하여 주석처리한 부분을 없애주었다

 

그리고 혹시나 해서

 

 

 

 

반대로도 테스트해보았는데...

 

이건안되는듯 ㅎ

 

 

 

다음으로 처리할건 1000이 넘어갈때 지수형태로 변환해주는 작업을

 

메소드형태로 만들어서 간략화 하는것이다

 

 

 

    public string Expo(double number){
        string result;
        if (number < 1e3){
            result = number.ToString("F0");
        }
        else{
            var exponent = (Math.Truncate(Math.Log10(Math.Abs(number))));
            result = (number / Math.Pow(10, exponent)).ToString("F2") + "e" + exponent;
        }
        return result;
    }

 

 

 

 

반복되는 부분을 이렇게 Expo(숫자)를 넣어주면 알아서 변환해줄 메소드를 만들었다

 

또 혹시모르니 하나만 수정해서 테스트 해보았는데

 

 

 

 

 

 

 

변함없이 지수형태로 잘 나타나는 모습이다

 

이제 길다란것들을 전부 줄여주면 되는데

 

시간을 표현하는건 변환기준이 1000이 아니라서 제외했다

 

 

 

 

 

 

 

 

 

437이었던 스크립트 길이가 252로 줄어든모습

 

기부니좋다

 

 

 

 

반응형
반응형