디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] 성계 위치바꾸는 프로그램 만들었다

ㅇㅇ(121.167) 2023.11.22 01:59:32
조회 1637 추천 14 댓글 11
														

바꾸기 전

a15714ab041eb360be3335625683746f07534428d6a4e989d73466f99d17cd6e0768a7091e3dc0364b8f9482b9e9


a15714ab041eb360be3335625683746f07534428d6a4e989d73466f99d1ccd6e02c0d615f1882b8aea55cd7222d9


바꾼 후

a15714ab041eb360be3335625683746f07534428d6a4e989d73466f69916cd6ef49408c0d1eadbf35221dbc6b0f489


a15714ab041eb360be3335625683746f07534428d6a4e989d73466f69817cd6edb354e4e7572dc284bf6cae7fd74de


어휴 시발 성계위치 바꾸는것만 하는데도 존나게 어렵네



a15714ab041eb360be3335625683746f07534428d6a4e989d73760f79c15cd6ef6da66ef5e5b86e600500ccb



원리는 별거 없음


1. 세이브 파일(gamestate)을 읽어온다(창 띄워서 선택)

2. 읽어온 파일에서 galactic_object 정보 중에서 coordinate(좌표)랑 hyperlane(연결)만 추출

3. 읽어온 부분 중에서 두 성계의 좌표 값을 서로 바꾸고 두 성계와 연결되어있는 모든 성계의 hyperlane값을 서로 바꿔줌

4. 기존 파일 지워버리고 그 위치에 저장


어우 시발 간만에 코딩하니 6시간 넘게 걸렸네

좀 더 돌려보고 버그있나 확인하고 UI 개선 좀 한 다음에 배포함


이 아래는 소스코드니까 관심있는 놈만 봐라


using System.Collections;

using System.Collections.Generic;

using System.IO;

using static System.Net.Mime.MediaTypeNames;


struct Galactic_object

{

    public string[]? Coordinate;

    public string[]? Hyperlane;

};

struct Ironman_object

{

    public bool bIronman;

    int nAddress;

};


namespace Editor

{

    public partial class Form1 : Form

    {

        string szFilePath = string.Empty;

        string szFileFullName = string.Empty;

        string szFileName = string.Empty;

        int nSize = 0;

        int nAddress = -1;

        Galactic_object[]? galactic;

        Ironman_object? Ironman;

        List<String> textvalue;


        public Form1()

        {

            InitializeComponent();


            comboBox_size.Items.Add("초소형(200)");

            comboBox_size.Items.Add("소형(400)");

            comboBox_size.Items.Add("중형(600)");

            comboBox_size.Items.Add("대형(800)");

            comboBox_size.Items.Add("초대형(1000)");


            comboBox_size.SelectedItem = "소형(400)";

        }


        private void button1_Click(object sender, EventArgs e)

        {

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Title = "세이브 파일 열기";

            ofd.FileName = "gamestate";

            ofd.Filter = "모든 파일 (*.*) | *.*";


            DialogResult dr = ofd.ShowDialog();


            if (dr == DialogResult.OK)

            {

                szFileName = ofd.SafeFileName;

                szFileFullName = ofd.FileName;

                szFilePath = szFileFullName.Replace(szFileName, "");


                textvalue = System.IO.File.ReadAllLines(szFileFullName).ToList();


                galactic = new Galactic_object[nSize];


                for (int i = 0; i < textvalue.Count; i++)

                {

                    if (textvalue[i] == "galactic_object=")

                    {

                        nAddress = i;

                        for (int j = 0; i < textvalue.Count && j < nSize; i++)

                        {

                            if (textvalue[i].Contains("coordinate"))

                            {

                                galactic[j].Coordinate = new string[4];

                                galactic[j].Coordinate[0] = textvalue[i + 2];

                                galactic[j].Coordinate[1] = textvalue[i + 3];

                                galactic[j].Coordinate[2] = textvalue[i + 4];

                                galactic[j].Coordinate[3] = textvalue[i + 5];

                            }

                            else if (textvalue[i].Contains("hyperlane"))

                            {

                                int n = i;


                                for (; i < textvalue.Count && !textvalue[i].Contains("asteroid_belts") && !textvalue[i].Contains("flags"); i++)

                                { }


                                galactic[j].Hyperlane = new string[i - n];


                                for (int k = 0; n < i; ++n)

                                {

                                    galactic[j].Hyperlane[k] = textvalue[n];

                                    k++;

                                }


                                j++;

                                continue;

                            }

                            if (textvalue[i].Contains("starbase_mgr"))

                            {

                                break;

                            }

                        }

                        break;

                    }

                }

                button_change.Enabled = true;

                textBox_Select_1.Enabled = true;

                textBox_Select_2.Enabled = true;


                button_Hyperlane.Enabled = true;

                textBox_Hyperlane_1.Enabled = true;

                textBox_Hyperlane_2.Enabled = true;

                textBox_Hyperlane_3.Enabled = true;


                button_Save.Enabled = true;

            }

        }


        private void comboBox_size_SelectedIndexChanged(object sender, EventArgs e)

        {

            string txt = comboBox_size.SelectedItem as string;


            switch (txt)

            {

                case "초소형(200)":

                    nSize = 200;

                    break;

                case "소형(400)":

                    nSize = 400;

                    break;

                case "중형(600)":

                    nSize = 600;

                    break;

                case "대형(800)":

                    nSize = 800;

                    break;

                case "초대형(1000)":

                    nSize = 1000;

                    break;

            }

        }


        private void button_change_Click(object sender, EventArgs e)

        {

            if (textBox_Select_1.Text == "" || textBox_Select_2.Text == "") return;


            int n1, n2;

            int.TryParse(textBox_Select_1.Text, out n1);

            int.TryParse(textBox_Select_2.Text, out n2);


            if (n1 == n2) return;


            if (n1 > n2)

            {

                int n = n1;

                n1 = n2;

                n2 = n;

            }


            string sz1 = "\t" + n1.ToString() + "=";

            string sz2 = "\t" + n2.ToString() + "=";



            for (int i = nAddress; i < textvalue.Count; i++)

            {

                if (textvalue[i] == sz1)

                {

                    textvalue[i + 4] = galactic[n2].Coordinate[0];

                    textvalue[i + 5] = galactic[n2].Coordinate[1];

                    textvalue[i + 6] = galactic[n2].Coordinate[2];

                    textvalue[i + 7] = galactic[n2].Coordinate[3];


                    for (; i < textvalue.Count && !textvalue[i].Contains("hyperlane"); i++)

                    { }

                    int n = i;


                    for (; i < textvalue.Count && !textvalue[i].Contains("asteroid_belts") && !textvalue[i].Contains("flags"); i++)

                    { }


                    for (int j = 0; j < i - n; j++)

                    {

                        textvalue.RemoveAt(n);

                    }

                    for (int j = 0; j < galactic[n2].Hyperlane.Length; j++)

                    {

                        textvalue.Insert(j + n, galactic[n2].Hyperlane[j]);

                    }


                    continue;

                }


                else if (textvalue[i] == sz2)

                {


                    textvalue[i + 4] = galactic[n1].Coordinate[0];

                    textvalue[i + 5] = galactic[n1].Coordinate[1];

                    textvalue[i + 6] = galactic[n1].Coordinate[2];

                    textvalue[i + 7] = galactic[n1].Coordinate[3];


                    for (; i < textvalue.Count && !textvalue[i].Contains("hyperlane"); i++)

                    { }

                    int n = i;


                    for (; i < textvalue.Count && !textvalue[i].Contains("asteroid_belts") && !textvalue[i].Contains("flags"); i++)

                    { }


                    for (int j = 0; j < i - n; j++)

                    {

                        textvalue.RemoveAt(n);

                    }

                    for (int j = 0; j < galactic[n1].Hyperlane.Length; j++)

                    {

                        textvalue.Insert(j + n, galactic[n1].Hyperlane[j]);

                    }


                    break;

                }

            }


            sz1 = n1.ToString();

            sz2 = n2.ToString();


            for (int i = nAddress; i < textvalue.Count; i++)

            {

                if (textvalue[i] == "\t\t\t\tto=" + sz1)

                {

                    textvalue[i] = "\t\t\t\tto=" + sz2;

                }

                else if (textvalue[i] == "\t\t\t\tto=" + sz2)

                {

                    textvalue[i] = "\t\t\t\tto=" + sz1;

                }

                else if (textvalue[i].Contains("starbase_mgr"))

                {

                    break;

                }

            }

        }


        private void button_Hyperlane_Click(object sender, EventArgs e)

        {

            

            if (textBox_Hyperlane_1.Text == "" || textBox_Hyperlane_2.Text == "") return;


            int n1, n2, n3;

            int.TryParse(textBox_Hyperlane_1.Text, out n1);

            int.TryParse(textBox_Hyperlane_2.Text, out n2);

            int.TryParse(textBox_Hyperlane_3.Text, out n3);


            if (n1 == n2) return;


            if (n1 > n2)

            {

                int n = n1;

                n1 = n2;

                n2 = n;

            }


            string sz1 = "\t" + n1.ToString() + "=";

            string sz2 = "\t" + n2.ToString() + "=";


            for (int i = nAddress; i < textvalue.Count; i++)

            {

                if (textvalue[i] == sz1)

                {

                    for (; i < textvalue.Count && !textvalue[i].Contains("hyperlane"); i++)

                    { }


                    i += 2;

                    textvalue.Insert(i, "");

                    textvalue.Insert(i + 1, "\t\t\t{");

                    textvalue.Insert(i + 2, "\t\t\t\tto=" + n2);

                    textvalue.Insert(i + 3, "\t\t\t\tlength=" + n3);

                    textvalue.Insert(i + 4, "\t\t\t}");


                    continue;

                }

                else if (textvalue[i] == sz2)

                {

                    for (; i < textvalue.Count && !textvalue[i].Contains("hyperlane"); i++)

                    { }


                    i += 2;

                    textvalue.Insert(i, "");

                    textvalue.Insert(i + 1, "\t\t\t{");

                    textvalue.Insert(i + 2, "\t\t\t\tto=" + n1);

                    textvalue.Insert(i + 3, "\t\t\t\tlength=" + n3);

                    textvalue.Insert(i + 4, "\t\t\t}");


                    break;

                }

            }


        }


        private void button_Save_Click(object sender, EventArgs e)

        {

            File.Delete(szFileFullName);

            StreamWriter sw = new StreamWriter(szFileFullName, true);

            for (int i = 0; i < textvalue.Count; i++)

            {

                sw.WriteLine(textvalue[i]);

            }

            sw.Close();

        }

    }

}


자동등록방지

추천 비추천

14

고정닉 6

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2858 설문 SNS로 싸우면 절대 안 질 것 같은 고집 있는 스타는? 운영자 24/05/06 - -
2859 AD 나혼렙 어라이즈 그랜드 론칭! 운영자 24/05/09 - -
186761 개발 개발일지 #330 - 에리다누스 패치의 커뮤니티 수정 사항 [6] ㅇㅇㅇ(118.176) 02.08 2146 15
186777 일반 파딱 받음 [8] ROMANIANOPOLIIS갤로그로 이동합니다. 02.09 1869 9
186739 창작 수생류 1번 포트레잇 [12] ㅇㅇ(119.203) 02.08 2806 28
186637 일반 파딱 좀 몇명 뽑으면 어디 탈나냐? [19] ㅇㅇ(106.101) 02.04 2598 18
186532 개발 개발일지 #329 - 기술 베타 요약 [6] ㅇㅇㅇ(118.176) 02.01 2419 14
186499 정보 최종정리 : 함재기가 ### 공격하나요? [20] 바보판타지갤로그로 이동합니다. 02.01 2923 21
186468 모드 BSB 버그픽스 : 또 드레드노트 픽스 바보판타지갤로그로 이동합니다. 01.31 1328 12
186344 모드 모드 업데이트 겸 내 모드들 소개 [7] Orca0108갤로그로 이동합니다. 01.27 3051 12
186269 일반 첩자질로 다른 제국 성계에 사략함대 불러왔는데 ㅋㅋ [6] ip4g갤로그로 이동합니다. 01.25 3023 20
186136 모드 BSB/CSS 업데이트 : 그때 그거 고침 [5] 바보판타지갤로그로 이동합니다. 01.20 1699 12
186107 일반 '모든 유기체를 말살하면서 듣는 SF 음악' [6] ㅇㅇㅇ(118.176) 01.20 3347 16
186088 모드 ㅆㄷ)엘프 포트레잇모드 업데이트함 [5] Boatfucker갤로그로 이동합니다. 01.20 1593 8
186034 개발 개발일지 #328 - 새로운 한해, 새로운 베타 [13] ㅇㅇㅇ(118.176) 01.18 2463 12
186009 정보 내가 따라하는 함선 설계 [10] ㅇㅇ(218.37) 01.18 8127 15
185932 일반 Fleet Transfer/ACOT/ASPR/SFTS모드 번역 완료 [3] 현질럿갤로그로 이동합니다. 01.17 927 12
185797 일반 야!!! [14] ㅇㅇ(121.183) 01.14 3100 12
185702 일반 이 씨발겜은 초상화모드 필수인게 [26] ㅇㅇ(211.171) 01.12 4952 21
185630 모드 한국어 보완 모드 작은 업데이트 [9] 바보판타지갤로그로 이동합니다. 01.10 1768 15
185465 일반 별박겜 4년만에 다시 시작했는데 잊고 살던거 떠오름 [59] 時雨갤로그로 이동합니다. 01.07 4463 40
185315 창작 응애 별린이 기생충이 애썼어 [37] 양봉꿀벌(121.154) 01.05 6638 53
185114 모드 [한글패치]Gigastructural Engineering & More [7] 페로프냥갤로그로 이동합니다. 01.02 864 9
184844 창작 본격 스텔라리스 만화 - 외계종노동자의 블루스 [31] 배넉번갤로그로 이동합니다. 23.12.29 4461 104
184764 일반 빈성계에서 시간보내는거 웃김 [9] ㅇㅇ(118.32) 23.12.27 3470 40
184649 창작 응애 별린이 기생충이 일냈어 [34] 양봉꿀벌(121.154) 23.12.24 6011 50
184640 연재 ㄴㄷㅆ) 씹덕의 짐을 져라 (1) [23] 27.35갤로그로 이동합니다. 23.12.24 4110 64
184519 개발 개발일지 #327 - 2023년을 돌아보며. [3] ㅇㅇㅇ(118.176) 23.12.21 1767 13
184310 일반 별붕이...겜 때문에 교수님께 불려갔다... [41] 별갤럼(119.202) 23.12.17 5069 27
184304 일반 ????: 연구, 함대칼질은 역대급 갓패치가 맞다 [8] ㅇㅇ갤로그로 이동합니다. 23.12.16 4632 23
184269 일반 ㅆㄷ) 포트레잇 모드 테스트3 + 워크샵에 올림 [5] ievel갤로그로 이동합니다. 23.12.16 2926 13
184199 일반 이때다 싶어서 섹폭도들 다 튀어나오네 [10] 별갤럼(220.88) 23.12.15 4053 20
184183 일반 나노봇 미친녀석아 [17] ㄴㅇㅍㄹ갤로그로 이동합니다. 23.12.15 4300 23
184165 모드 리얼스페이스/뉴프론티어 한글화 파일 슈팅스타(58.77) 23.12.14 929 10
184160 개발 개발일지 #326 - 3.10.4 "나침반자리"+홀리데이 기술개편 베타 [5] ㅇㅇㅇ(118.176) 23.12.14 2657 12
184104 일반 레딧에서 신박한 버그 봄 ㅋㅋㅋㅋㅋ [12] ㅇㅇ(119.202) 23.12.13 4082 18
184100 일반 뇌피셜분석) 스텔라리스식 포탑 다 위에달린 디자인이 과연 비현실적인가 [38] 별겜뉴비(119.202) 23.12.13 3123 15
184096 정보 스텔라리스 콘솔 ID 정리 중인 노션 링크 [7] 별갤럼(211.44) 23.12.13 1188 14
184053 일반 아이씨발 정신병자새낀가?? [18] ip4g갤로그로 이동합니다. 23.12.11 3883 15
183939 일반 커스텀으로 만든 종족이 틀딱으로 뜰 수 있는건 알았는데 [6] ip4g갤로그로 이동합니다. 23.12.09 3118 27
183834 모드 CSS 작업중인 것 [4] 바보판타지갤로그로 이동합니다. 23.12.08 1540 16
183823 개발 개발일지 #325 - 3.10.3 '나침반 자리' 출시+앞으로 계획. [10] ㅇㅇㅇ(118.176) 23.12.07 2496 13
183729 일반 3.10.3 오픈베타 나왔다! [10] ㅁㄴㅇㄹ갤로그로 이동합니다. 23.12.05 2053 9
183695 모드 CSS 업데이트 : E [14] 바보판타지갤로그로 이동합니다. 23.12.05 1518 15
183693 창작 응애 별린이 인류연방 썰풀어 [40] 양봉꿀벌(121.154) 23.12.05 6185 51
183494 일반 스타트렉 인피니트 지도자편 [6] 알로에갤로그로 이동합니다. 23.12.01 1453 8
183476 일반 살려줬는데 괘씸한 외계인놈들이 텅스텐 6발 던짐 [11] 별갤럼(211.205) 23.11.30 3476 16
183453 일반 간략한 인피니티 정보 종족편 [24] 알로에갤로그로 이동합니다. 23.11.30 2619 13
183452 정보 기원 정리해봄 [7] labirumbetos갤로그로 이동합니다. 23.11.30 6704 17
183422 개발 개발일지 #324 - 3.10.2 '나침반 자리' 출시 및 12월 계획 [4] ㅇㅇㅇ(118.176) 23.11.29 1796 11
183421 모드 3.10.2 파라곤 트레잇문제 픽스 [7] 바보판타지갤로그로 이동합니다. 23.11.29 1919 10
183410 일반 양자링월드 복구했다 [10] 왈왈장인갤로그로 이동합니다. 23.11.29 3016 9
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2