順番設定をエクセルでできるようにしました

キャラの順番をエクセルで設定できるようにしました

今までは、キャラの画像を持つ構造体のメンバ変数に、前衛になるほど値が大きくなるように設定することで、キャラの順番を設定していました。

 

SpreadsheetLightでエクセルを読み込むことで、キャラの名前と順番を設定できるようにしました。

SpreadsheetLight

エクセルファイルの取得の仕方

SLDocument sl = new SLDocument(@"myfolder/character.xlsx");

エクセルのセルの値の取得の仕方

string str = sl.GetCellValueAsString("A10");

セルの値のおすすめ

string CharaName = sl.GetCellValueAsString("A" + CellNum.ToString());

CellNum++;

こうやって、エクセルの縦の列は文字で指定して、横の行を変数にして、その値を1ずつ増やすと、列を変えずに、1行ずつ、セルの値が取得できます。

エクセルファイルのパスを使った取得の仕方

visual studioのプロジェクトファイルの中の実行ファイルが入っているフォルダに、

新しくフォルダを作ります。フォルダ名をmyfolderとして、エクセルファイルをchara.xlsxとします。

こうして、エクセルファイルのパスを使うときは、myfolder/chara.xlsxとすればうまくいきます。

 

using System;
using System.Windows.Forms;
using System.Drawing;
using SpreadsheetLight;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;

namespace プリコネ_バフ_デバフ
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {

            Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    class Form1 : Form
    {

        int scroll = 0;
        public static int Cscroll = 0;
        int scrollpicT = 100, scrollpicY = 200, countX = 1125, countY = 10;

        PictureBox scrpic = new PictureBox();
        Bitmap scrpicture;

        Label buff = new Label();
        Button buffbutton = new Button();

        Label count = new Label();
        int Bcount = 90;

        Button start = new Button();
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();

        Button charaselect = new Button();
        public static bool charaform = true;

        public static Set charaset = new Set[100];


        static Panel ScrollPanel = new Panel();
        static PictureBox CharaPosition = new PictureBox[100];

        int? CP = new int?[100];
        int table = 0;

        public static int CharaCount = 0;
        int i = 0;

        public static Set SelectChara = new Set[100];

        public static int eDelta;
        public static int Characlick = 0;

        static PictureBox back_ground = new PictureBox();
        public static SLDocument sl = new SLDocument(@"myfolder/character.xlsx");

        public static Set Cposition = new Set[100];

        public static Bitmap Samune = new Bitmap[100];

        int CellNum = 1;

        public Form1()
        {
            this.Size = new Size(1200, 600);

            this.Location = new Point(0, 0);
            this.Dock = DockStyle.Fill;

            scrpicture = new Bitmap(@"myfolder/バフ<改>.png");
            scrpic = new PictureBox()
            {
                Image = scrpicture,
                SizeMode = PictureBoxSizeMode.AutoSize,
            };
            scrpic.Location = new System.Drawing.Point(scrollpicT, scrollpicY);
            scrpic.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.buff_MouseWheel);
            this.Controls.Add(scrpic);

            buff.Location = new System.Drawing.Point(scrollpicT + 30, scrollpicY);
            buff.Size = new Size(84, 24);
            buff.Font = new System.Drawing.Font("Arial", 12);
            buff.Text = "バフ:";
            buff.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.buff_MouseWheel);
            this.Controls.Add(buff);

            //バフボタン設定
            buffbutton.Text = "バフ";
            buffbutton.Location = new System.Drawing.Point(10, 150);
            buffbutton.Size = new System.Drawing.Size(50, 30);
            this.Controls.Add(buffbutton);

            timer.Interval = 1000;
            timer.Tick += new EventHandler(Battle_Clock);

            start.Location = new System.Drawing.Point(countX, countY + 24);
            start.Size = new System.Drawing.Size(50, 30);
            start.Text = "開始";
            start.Click += new EventHandler(start_click);
            this.Controls.Add(start);

            count.Location = new System.Drawing.Point(countX, countY);
            count.AutoSize = true;
            count.Font = new System.Drawing.Font("Arial", 12);
            count.Text = string.Format("{0}:{1:D5}", (Bcount / 60).ToString(), (Bcount - (Bcount / 60) * 60).ToString("00"));
            this.Controls.Add(count);

            charaselect = new Button()
            {
                Text = "キャラ",
                Location = new Point(1110, 100),
            };
            charaselect.Click += new EventHandler(Charaform);
            this.Controls.Add(charaselect);

            ScrollPanel.BorderStyle = BorderStyle.FixedSingle;
            ScrollPanel.Location = new Point(85, 295);
            ScrollPanel.Size = new Size(980, 150);

            chara();//キャラの画像など設定


            i = 0;
            while (true)
            {
                Set chara = charaskill(i);
                if (chara.CharaName != null)
                {
                    CharaCount++;
                }
                else
                {
                    break;
                }
                i++;
            }

 

            for (i = 0; i < CharaCount - 1; i++)
            {
                Samune[i] = ExcelChara();
            }

            for (i = 0; i < CharaCount - 1; i++)
            {
                CharaPosition[table] = new PictureBox()
                {
                    Image = new Bitmap(Samune[i]),
                    SizeMode = PictureBoxSizeMode.AutoSize,
                    Location = new Point(table * 129 + 10 * (table + 1), 10),
                };
                ScrollPanel.Controls.Add(CharaPosition[table]);
                table++;
            }
            ScrollPanel.MouseWheel += new MouseEventHandler(CharaScroll);

 

            this.Controls.Add(ScrollPanel);


        }

        void CharaScroll(object sender, MouseEventArgs e)
        {
            eDelta = e.Delta;
            CharaMove(eDelta, Characlick, 1000);
        }

        Bitmap ExcelChara()
        {
            Bitmap bit;
            while (true)
            {
                string CharaName = sl.GetCellValueAsString("A" + CellNum.ToString());
                if (CharaName != "")
                {
                    for (int a = 0; a < CharaCount; a++)
                    {
                        Set Cs = new Set();
                        Cs = charaskill(a);
                        if (CharaName == Cs.CharaName)
                        {
                            bit = Cs.CharaPicture;
                            CellNum++;
                            return bit;
                        }
                    }
                }
                CellNum++;
            }

        }
        public static void CharaMove(int eMouse, int Characlick, int Creturn)
        {
            Form1.back_ground.Visible = false;

            if (eMouse >= 0)
            {
                if (Cscroll <= (CharaCount - 7) * 129 + 10 * (CharaCount + 1 - 7))
                {
                    Cscroll += eMouse;
                }
            }
            else
            {
                if (Cscroll < 10)
                {
                    Cscroll = 0;
                }
                else
                {
                    Cscroll += eMouse;
                }
            }
            if (Characlick != 0)
            {
                Cscroll = Characlick;
            }

            for (int i = 0; i < CharaCount - 1; i++)
            {

                CharaPosition[i].Location = new Point(i * 129 + 10 * (i + 1) - Cscroll, 10);
                ScrollPanel.Controls.Add(CharaPosition[i]);
                CharaPosition[i].BringToFront();

                if (Creturn == i)
                {
                    Form1.back_ground = new PictureBox()
                    {
                        Image = new Bitmap(プリコネ_バフ_デバフ_.Properties.Resources.background_red),
                        SizeMode = PictureBoxSizeMode.AutoSize,
                        Location = new Point(i * 129 + 10 * (i + 1) - Cscroll - 5, 5),
                    };
                    ScrollPanel.Controls.Add(Form1.back_ground);
                }
            }
            Creturn = 1000;
        }

        private void buff_MouseWheel(object sender, MouseEventArgs e)
        {
            scroll += e.Delta;
            if (scroll < 0)
            {
                scroll = 0;
            }
            buff.Text = "バフ量:" + (scroll / 120).ToString();
        }


        private void Battle_Clock(object sender, EventArgs e)
        {
            Bcount -= 1;
            if (Bcount <= 0)
            {
                Bcount = 0;
                timer.Enabled = false;
            }
            count.Text = string.Format("{0}:{1:D5}", (Bcount / 60).ToString(), (Bcount - (Bcount / 60) * 60).ToString("00"));
            this.Controls.Add(count);
        }

        private void Charaform(object sender, EventArgs e)
        {
            if (charaform)
            {
                Cform();
            }
            charaform = false;
        }

        private void Cform()
        {
            charaform = false;
            Charaselect_form charaselect_form = new Charaselect_form();
            charaselect_form.Show();
        }
        private void start_click(object sender, EventArgs e)
        {
            timer.Enabled = true;
        }

        public struct Set
        {
            public string CharaName;
            public Bitmap CharaPicture;
        }

        private void chara()
        {
            //UntiBuffがマイナスなら魔法デバフ、プラスなら物理デバフ

            //おばキャルレベル179の時とりあえず、スタンやバフデバフ表示のみ
            charaset[0].CharaName = "おばキャル";
            charaset[0].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.obakyal;

            //アン
            charaset[1].CharaName = "アン";
            charaset[1].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.ann;

            //ホマレ
            charaset[2].CharaName = "ホマレ";
            charaset[2].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.homare;

            //カイノリ
            charaset[3].CharaName = "カイノリ";
            charaset[3].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kainori;

            //クレジッタ
            charaset[4].CharaName = "クレジッタ";
            charaset[4].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kurezitta;

            //クリサレン
            charaset[5].CharaName = "クリサレン";
            charaset[5].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kurisarenn;

            //クリスティー
            charaset[6].CharaName = "クリスティーナ";
            charaset[6].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kurisuthina;

            //クリユカリ
            charaset[7].CharaName = "クリユカリ";
            charaset[7].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kuriyukari;

            //キョウカ
            charaset[8].CharaName = "キョウカ";
            charaset[8].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kyouka;

            //マホ
            charaset[9].CharaName = "マホ";
            charaset[9].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.maho;

            //マコト
            charaset[10].CharaName = "マコト";
            charaset[10].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.makoto;

            //水ヒヨリ
            charaset[11].CharaName = "水ヒヨリ";
            charaset[11].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.mizuhiyori;

            //水ノゾミ
            charaset[12].CharaName = "水ノゾミ";
            charaset[12].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.mizunozomi;

            //水サレン
            charaset[13].CharaName = "水サレン";
            charaset[13].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.mizusarenn;

            //水シズル
            charaset[14].CharaName = "水シズル";
            charaset[14].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.mizusizuru;

            //水ユイ
            charaset[15].CharaName = "水ユイ";
            charaset[15].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.mizuyui;

            //モニカ
            charaset[16].CharaName = "モニカ";
            charaset[16].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.monika;

            //ネネカ
            charaset[17].CharaName = "ネネカ";
            charaset[17].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.neneka;

            //闇クウカ
            charaset[18].CharaName = "闇クウカ";
            charaset[18].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.yamikuuka;

            //ノウェム
            charaset[19].CharaName = "ノウェム";
            charaset[19].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nowemu;

            //ニャル
            charaset[20].CharaName = "ニャル";
            charaset[20].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nyaru;

            //ニュフィ
            charaset[21].CharaName = "ニュフィ";
            charaset[21].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nyufi;

            //ニュイミ
            charaset[22].CharaName = "ニュイミ";
            charaset[22].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nyuimi;

            //ニュネカ
            charaset[23].CharaName = "ニュネカ";
            charaset[23].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nyuneka;

            //ニュペコ
            charaset[24].CharaName = "ニュペコ";
            charaset[24].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.nyupeko;

            //オバペコ
            charaset[25].CharaName = "オバペコ";
            charaset[25].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.obapeko;

            //オバラビ
            charaset[26].CharaName = "オバラビ";
            charaset[26].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.obarabi;

            //ハツシオ
            charaset[27].CharaName = "ハツシオ";
            charaset[27].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.hatusio;

            //オユキ
            charaset[28].CharaName = "オユキ";
            charaset[28].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.oyuki;

            //プリコロ
            charaset[29].CharaName = "プリコロ";
            charaset[29].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.purikoro;

            //プリキャル
            charaset[30].CharaName = "プリキャル";
            charaset[30].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.purikyaru;

            //プリペコ
            charaset[31].CharaName = "プリペコ";
            charaset[31].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.puripeko;

            //プリレイ
            charaset[32].CharaName = "プリレイ";
            charaset[32].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.purirei;

            //プリユイ
            charaset[33].CharaName = "プリユイ";
            charaset[33].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.puriyui;

            //プヨリ
            charaset[34].CharaName = "プヨリ";
            charaset[34].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.puyori;

            //ラビリスタ
            charaset[35].CharaName = "ラビリスタ";
            charaset[35].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.rabirisuta;

            //ランファ
            charaset[36].CharaName = "ランファ";
            charaset[36].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.rannfa;

            //レイ
            charaset[37].CharaName = "レイ";
            charaset[37].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.rei;

            //サオイ
            charaset[38].CharaName = "サオイ";
            charaset[38].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.saoi;

            //サレン
            charaset[39].CharaName = "サレン";
            charaset[39].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.sarenn;

            //ユイ
            charaset[40].CharaName = "ユイ";
            charaset[40].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.yui;

            //ユカリ
            charaset[41].CharaName = "ユカリ";
            charaset[41].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.yukari;

            //ユニ
            charaset[42].CharaName = "ユニ";
            charaset[42].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.yuni;

            //エクマホ
            charaset[43].CharaName = "エクマホ";
            charaset[43].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.ekumaho;

            //ステミサ
            charaset[44].CharaName = "ステミサ";
            charaset[44].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.sutemisa;

            //アメス
            charaset[45].CharaName = "アメス";
            charaset[45].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.amesu;

            //アキサレ
            charaset[46].CharaName = "アキサレ";
            charaset[46].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.akisare;

            //カオリ
            charaset[47].CharaName = "カオリ";
            charaset[47].CharaPicture = プリコネ_バフ_デバフ_.Properties.Resources.kaori;
        }
        private Set charaskill(int skilli)
        {
            return charaset[skilli];
        }
    }
    class Charaselect_form : Form
    {

        Form1.Set chara = new Form1.Set[100];

        PictureBox CharaSamune = new PictureBox[100];

        PictureBox click_gif = new PictureBox();

        int CharaX = new int[100];
        int
CharaY = new int[100];
        int i;
        public Charaselect_form()
        {
            CharaX[0] = 5;
            CharaY[0] = 0;

            this.Text = "キャラセレクト";
            this.Size = new Size(750, 700);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.ShowInTaskbar = false;
            this.FormBorderStyle = FormBorderStyle.FixedDialog;

            this.AutoScroll = true;

            this.Location = new Point(0, 0);

            int count = 1;
            for (i = 0; i < Form1.CharaCount - 1; i++)
            {
                CharaSamune[i] = new PictureBox()
                {
                    Size = new Size(129, 129),
                    Image = new Bitmap(Form1.Samune[i]),
                };
                CharaSamune[i].Location = new Point(CharaX[i], CharaY[i]);

                CharaSamune[i].MouseClick += new MouseEventHandler(chara_click);

                this.Controls.Add(CharaSamune[i]);

                CharaX[i + 1] = CharaX[i] + 138;
                CharaY[i + 1] = CharaY[i];

                if ((i + 1) == 5 * count)
                {
                    CharaY[i + 1] = CharaY[i] + 140;
                    CharaX[i + 1] = 5;
                    count++;
                }
            }

            this.FormClosing += new FormClosingEventHandler(charaselect_close);
        }

        void chara_click(object sender, MouseEventArgs e)
        {
            int Creturn = 10;
            for (i = 0; i < Form1.CharaCount; i++)
            {
                if (sender == CharaSamune[i])
                {
                    Creturn = i;
                }
            }
            Form1.CharaMove(0, Creturn * 129 + Creturn * 10 - (129 + 6) * 3, Creturn);

            int mx = PointToClient(System.Windows.Forms.Cursor.Position).X;//フォーム座標に設定
            int my = PointToClient(System.Windows.Forms.Cursor.Position).Y;
        }

        void charaselect_close(object sender, FormClosingEventArgs e)
        {
            Form1.charaform = true;
        }
    }
}