Esempio n. 1
0
        public CollectDataUI(CardDataBase carddb)
        {
            InitializeComponent();
//			BringToFront();
//			Dock = DockStyle.Fill;
            Init(carddb);
        }
Esempio n. 2
0
 public CardListUI(CardDataBase cardDB, PackData pack, Form1 form1)
 {
     InitializeComponent();
     Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
     Dock   = DockStyle.Fill;            //これやばいらしい?
     Init(cardDB, pack, form1);
 }
Esempio n. 3
0
        public void Init(CardDataBase carddb)
        {
            int カード名別持ってるカード  = carddb.getAllCardNumHave();
            int カード名全カード      = carddb.getAllCardNum();
            int 略号別持ってるカード    = carddb.getCardNumCodeHave();
            int 略号別全カード       = carddb.getCardNumCode();
            int レアリティ別持ってるカード = carddb.getCardNumRarityHave();
            int レアリティ別全カード    = carddb.getCardNumRarity();

            /*
             * foreach (var card in cardlist)
             * {
             * foreach (var variation in card.ListVariations)
             * {
             * foreach (var rarity in variation.ListRarity)
             * {
             *                      レアリティ別全カード++;
             *                      if (rarity.所持フラグ)
             *                              レアリティ別持ってるカード++;
             *              }
             *              略号別全カード++;
             *              if (variation.IsCardHavePack())
             *                      略号別持ってるカード++;
             *      }
             *      カード名全カード++;
             *      if (card.IsCardHaveName())
             *              カード名別持ってるカード++;
             *
             * }
             */

            label2.Text  = カード名別持ってるカード.ToString();
            label4.Text  = カード名全カード.ToString();
            label8.Text  = 略号別持ってるカード.ToString();
            label7.Text  = 略号別全カード.ToString();
            label13.Text = レアリティ別持ってるカード.ToString();
            label12.Text = レアリティ別全カード.ToString();

            if (カード名全カード > 0 && 略号別全カード > 0 && レアリティ別全カード > 0)
            {
                label5.Text  = ((double)カード名別持ってるカード / カード名全カード).ToString("F") + "%";
                label10.Text = ((double)略号別持ってるカード / 略号別全カード).ToString("F") + "%";
                label15.Text = ((double)レアリティ別持ってるカード / レアリティ別全カード).ToString("F") + "%";
            }
            else
            {
                label5.Text  = "0%";
                label10.Text = "0%";
                label15.Text = "0%";
            }
        }
Esempio n. 4
0
        //右側は左側で何をクリックしたかで変わる
        public static void SetFormPanelRight(TreeNode treenode, Form1 form)
        {
            if (treenode.Tag == null)
            {
                return;
            }
            form.splitContainer1.Panel2.Controls.Clear();

            CardDataBase cardDB;
            PackData     pack;

            if (form.あいうえお順ToolStripMenuItem.CheckState == CheckState.Indeterminate)
            {
                cardDB = ((TreeNodeAIUEOTag)treenode.Tag).CardDB;
                pack   = null;
            }
            else
            {
                pack = (PackData)treenode.Tag;

                cardDB = new CardDataBase();

                //全カードからそのパックにあるカードを探す
                foreach (var card in form.CardDB.CardList)
                {
                    foreach (var variation in card.ListVariations)
                    {
                        if (variation.発売パック.Name == pack.Name)
                        {
                            cardDB.CardList.Add(card);
                            break;
                        }
                    }
                }

                //順番はめちゃくちゃになってるので略号順にソート
            }

            CardListUI packUI = new CardListUI(cardDB, pack, form);

            form.splitContainer1.Panel2.Controls.Add(packUI);
        }
Esempio n. 5
0
        public static async Task <CardDataBase> getAllCardsAsync(Config config, Form1 form, List <string> errorlist)
        {
            Program.WriteLog("カードデータ取得中", LogLevel.必須項目);

            CardDataBase carddatabase = new CardDataBase();
            int          NoCardCount  = 0;

            for (int i = (int)config.CardID_MIN; i < config.CardID_MAX + 1; i++)
            {
                await Task.Delay(1000); //負荷軽減のため1秒待機;

                //カードリストはjavascriptを経由しないと入手できないっぽいので直接idを入力(当てずっぽう)
                string url  = config.URL2 + i;
                var    html = await Program.GetHtml(url);

                if (html == null)
                {
                    errorlist.Add(" id=" + i + " ");
                    Program.WriteLog($"エラー発生。ログファイル参照。[{url}]", LogLevel.エラー);

                    if (errorlist.Count > 10)
                    {
                        Program.WriteLog($"エラーが多すぎるので強制終了", LogLevel.エラー);
                        MessageBox.Show("エラーが多すぎたため、カード収集を終了します。(ログ参照)", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(null);
                    }

                    continue;
                }

                if (html.Source.Text.IndexOf("カード情報がありません。") >= 0)
                {
                    Program.WriteLog(config.URL2 + i + ":カードデータなし", LogLevel.情報);
                    NoCardCount++;
                    if (config.Is捜索打ち切り == true && NoCardCount >= config.捜索打ち切り限界)
                    {
                        Program.WriteLog($"カード情報が{NoCardCount}回連続で存在しなかったので捜索終了", LogLevel.必須項目);
                        break;
                    }
                    continue;
                }

                var    DivNameNode   = html.QuerySelector("div[id='cardname']>h1");
                var    ListSpanNodes = DivNameNode.QuerySelectorAll("span");
                string 読み            = "";
                string 英語            = ""; //英語名が存在しないカードがある

                for (int j = 0; j < ListSpanNodes.Count(); j++)
                {
                    if (j == 0)
                    {
                        読み = ListSpanNodes[0].TextContent;
                    }
                    if (j == 1)
                    {
                        英語 = ListSpanNodes[1].TextContent;
                    }
                }


                //タグがないので面倒だが、正規表現を使って1回だけ置き換える(全部置き換えるとカタカナの名前は全部なくなってしまう)
                var    re1  = new Regex(読み);
                var    re2  = new Regex(Regex.Escape(英語)); //カッコなどのメタ文字があるのでエスケープを追加する
                string str1 = re1.Replace(DivNameNode.TextContent, "", 1);
                string str2 = re2.Replace(str1, "", 1);
                string 前    = str2.Trim();

                var CardTextSetNode = html.QuerySelector("div[id='CardTextSet']");
                var ItemBoxNodes    = CardTextSetNode.QuerySelectorAll("div[class*='item_box']");

                Dictionary <string, string> dic = new Dictionary <string, string>();
                string 種族 = "";
                foreach (var node in ItemBoxNodes)
                {
                    //種族欄のとき
                    var speciesnode = node.QuerySelector("p[class='species']");
                    if (speciesnode != null)
                    {
                        種族 = speciesnode.TextContent.Replace("\t", "").Replace("\n", "");
                        continue;
                    }
                    //その他の欄のとき
                    var titlenode = node.QuerySelector("span[class='item_box_title']");
                    var valuenode = node.QuerySelector("span[class='item_box_value']");
                    if (titlenode != null && valuenode != null)  //ペンデュラムだと中身がないことがある
                    {
                        dic.Add(titlenode.TextContent.Trim(), valuenode.TextContent.Trim());
                    }
                }

                //ペンデュラムテキスト
                var pendulumnode1 = CardTextSetNode.QuerySelector("div[class='CardText pen']");
                var pendulumnode2 = pendulumnode1.QuerySelector("div[class='item_box_text']");

                //カードテキスト
                var    cardtextnode = CardTextSetNode.QuerySelector("div[class='CardText']>div[class='item_box_text']");
                string cardtext     = cardtextnode.TextContent.Replace("カードテキスト", "").Trim();//タグないので面倒


                //カード情報を取得したので、次は収録シリーズを取得

                List <CardData.CardVariation> listvaridations = new List <CardData.CardVariation>();

                var SeriesNode  = html.QuerySelector("div[id='update_list']");
                var SeriesNodes = SeriesNode.QuerySelectorAll("div[class='t_row']");

                foreach (var node in SeriesNodes)
                {
                    var    誕生日node  = node.QuerySelector("div[class='time']");
                    string 誕生日      = Program.getTextContent(誕生日node);
                    var    略号node   = node.QuerySelector("div[class='card_number']");
                    string 略号       = Program.getTextContent(略号node);
                    var    パック名node = node.QuerySelector("div[class='pack_name flex_1']");
                    string パック名     = Program.getTextContent(パック名node);
                    var    URLnode  = node.QuerySelector("input[class='link_value']");
                    string URL      = Config.Domain + URLnode.GetAttribute("value");
                    var    Rarenode = node.QuerySelector("div[class*='lr_icon']");
                    string レア記号     = Program.getTextContent(Rarenode.QuerySelector("p"));
                    string レアリティ    = Program.getTextContent(Rarenode.QuerySelector("span"));

                    //これは仮のパックデータ 本物はパック情報を開くときに特定する
                    PackData packdata = new PackData(URL, パック名, "", "", Program.ConvertDate(誕生日, "yyyy-MM-dd"), 0);


                    CardData.Rarity rarity = new CardData.Rarity(レア記号, レアリティ);

                    //リストと比較して同じならレアリティ違いに統合
                    foreach (var vari in listvaridations)
                    {
                        if (packdata.Name == vari.発売パック.Name)
                        {
                            vari.ListRarity.Add(rarity);
                            goto nextloop;
                        }
                    }

                    //なかったら追加
                    List <CardData.Rarity> listrarity = new List <CardData.Rarity>();
                    listrarity.Add(rarity);

                    CardData.CardVariation variation = new CardData.CardVariation(packdata, 略号, listrarity);
                    listvaridations.Add(variation);

                    nextloop :;
                }

                //varidationのpackdataが、既に存在するpackdataListと矛盾していないかチェック・・・する必要ある?するならここ


                読み = Kanaxs.Kana.ToKatakana(読み); //ひらがなはカタカナにする
                読み = RemoveSymbol(読み);           //読みに紛れ込む記号などを排除

                CardData carddata = new CardData(i, url, 前, 読み, 英語, dic, Program.getTextContent(pendulumnode2), cardtext, 種族, listvaridations);

                Program.WriteLog(carddata.前 + " : " + carddata.読み + " : " + carddata.英語名 + " : " + config.URL2 + i, LogLevel.情報);
                Program.WriteLog(Program.ToJson(carddata.ValuePairs, Newtonsoft.Json.Formatting.None) + " : " + carddata.テキスト + " : " + carddata.ペンデュラム効果, LogLevel.情報);
                Program.WriteLog(Program.ToJson(listvaridations, Newtonsoft.Json.Formatting.None), LogLevel.情報);
                form.UpdateLabel((i - config.CardID_MIN) + "/" + (config.CardID_MAX + 1 - config.CardID_MIN) + ":" + carddata.前);

                carddatabase.CardList.Add(carddata);
                NoCardCount = 0;
            }
            Program.WriteLog("カードデータ取得終了", LogLevel.必須項目);


            return(carddatabase);
        }
Esempio n. 6
0
        public void Init(CardDataBase cardDB, PackData pack, Form1 form1)
        {
            form   = form1;
            CardDB = cardDB;
            if (form.あいうえお順ToolStripMenuItem.CheckState == CheckState.Indeterminate)
            {
                Pack = null;
                linkLabel1.Visible = false;
                label1.Visible     = false;
                label4.Visible     = false;

                PackCardDB = cardDB;
            }
            else if (form.パック順ToolStripMenuItem.CheckState == CheckState.Indeterminate)
            {
                Pack            = pack;
                linkLabel1.Text = Pack.Name;
                label1.Text     = Pack.TypeName;
                label4.Text     = Pack.SeriesName;

                PackCardDB.CardList.Clear();

                //variationがそのパックのカードで、そのvariationのみの状態のカードを新しく作成し、それ用のリストに追加
                foreach (var card in cardDB.CardList)
                {
                    foreach (var variation in card.ListVariations)
                    {
                        if (variation.発売パック.URL == pack.URL)
                        {
                            var tmpcard = new CardData(card, variation);
                            PackCardDB.CardList.Add(tmpcard);
                            break;
                        }
                    }
                }
            }
            collectDataUI1.Init(PackCardDB);                //埋め込むのに引数のないコンストラクタが必要なので初期化


            Color red    = Color.FromArgb(255, 128, 128);
            Color yellow = Color.FromArgb(255, 255, 128);
            Color green  = Color.FromArgb(128, 255, 128);

            dataGridView1.Rows.Clear();
            foreach (var card in PackCardDB.CardList)
            {
                string ryakugou = "";
                string rarity   = "";

                if (card.getCardNumRarity() == 1)                   //1枚しか存在しない場合はクイックチェックが可能に
                {
                    ryakugou = card.ListVariations[0].略号.get略号Full();
                    rarity   = card.ListVariations[0].ListRarity[0].Initial;
                }
                else
                {
                    ryakugou = $"{card.getCardNumCodeHave()} / {card.getCardNumCode()}";
                    rarity   = $"{card.getCardNumRarityHave()} / {card.getCardNumRarity()}";
                }

                int num = dataGridView1.Rows.Add(card.IsCardNameHave(), card.前, ryakugou, rarity, card.ListVariations[0].ListRarity[0].所持フラグ);
                dataGridView1.Rows[num].Tag = CardDB.getCard(card.ID);                 //行のタグにカード情報を埋め込む  cardは変更されてる可能性があるのでCardDBから同じのを持ってくる
                dataGridView1.Rows[num].Cells["名前"].Style.BackColor = card.IsCardNameHave() ? green : red;
                Color c;
                if (card.getCardNumCodeHave() == 0)
                {
                    c = red;
                }
                else if (card.getCardNumCodeHave() == card.getCardNumCode())
                {
                    c = green;
                }
                else
                {
                    c = yellow;
                }

                dataGridView1.Rows[num].Cells["略号"].Style.BackColor = c;

                if (card.getCardNumRarityHave() == 0)
                {
                    c = red;
                }
                else if (card.getCardNumRarityHave() == card.getCardNumRarity())
                {
                    c = green;
                }
                else
                {
                    c = yellow;
                }

                dataGridView1.Rows[num].Cells["レアリティ"].Style.BackColor = c;

                var dgvcell = (DataGridViewImageCell)dataGridView1.Rows[num].Cells["type"];
                dgvcell.Value = getCanvasCardColor(card, dgvcell);

                var quickcell = dataGridView1.Rows[num].Cells["クイック"];

                if (card.getCardNumRarity() == 1)                    //1枚しか存在しない場合はクイックチェックが可能に
                {
                    quickcell.Tag             = card.ListVariations[0].ListRarity[0];
                    quickcell.Style.BackColor = c;
                }
                else
                {
                    dataGridView1.Rows[num].Cells["クイック"].Value    = null;
                    dataGridView1.Rows[num].Cells["クイック"]          = new DataGridViewTextBoxCell();             //テキストボックスを消すためにタイプを変更
                    dataGridView1.Rows[num].Cells["クイック"].Value    = "";
                    dataGridView1.Rows[num].Cells["クイック"].ReadOnly = true;
                }
            }

            //DGVの内容物に合わせてサイズを大きくする
            dataGridView1.Size = new Size(dataGridView1.Size.Width, dataGridView1.ColumnHeadersHeight + CardDB.CardList.Count * dataGridView1.RowTemplate.Height);
        }
Esempio n. 7
0
        //Depthは読み取る文字数であり再帰回数
        public async static Task RecursiveAddTreeNodeAIUEO(TreeNodeCollection treenodes, CardDataBase carddb, int Depth, string ParentName)
        {
            //あ~んなどまでの全部のNodeをここにも保存
            List <TreeNode> AIUEONodeList = new List <TreeNode>();


            //あ行~その他までのnodeを追加
            foreach (var gyou in かな.行リスト)
            {
                var GyouNode = treenodes.Add($"{ParentName} 【{gyou.名前}】");
                GyouNode.Tag = new TreeNodeAIUEOTag(gyou);

                //各行のひらがなをノードとして行ノードに追加
                for (int i = 0; i < Program.getTextLength(gyou.文字); i++)
                {
                    string one_text = Program.getTextElement(gyou.文字, i);
                    var    KanaNode = GyouNode.Nodes.Add(ParentName + one_text);
                    KanaNode.Tag = new TreeNodeAIUEOTag(new 行(ParentName + one_text, one_text));                      //1文字だけの行扱いだけど特に意味はない
                    AIUEONodeList.Add(KanaNode);
                }
            }
            if (Depth == 0)
            {
                //最初だけ非表示ノードも追加
                TreeNode node = treenodes.Add($"非表示");
                node.Tag = new TreeNodeAIUEOTag(null);

                foreach (var card in carddb.CardList)
                {
                    if (card.表示フラグ == false)
                    {
                        ((TreeNodeAIUEOTag)node.Tag).CardDB.CardList.Add(card);
                    }
                }
            }



            //カードをツリーに登録する
            foreach (var card in carddb.CardList)
            {
                if (card.表示フラグ == false)
                {
                    continue;
                }
                //文字数をオーバーしたらスキップ
                if (Program.getTextLength(card.読み) <= Depth)
                {
                    continue;
                }
                //最初の文字を取得
                string one_txt = Program.getTextElement(card.読み, Depth);

                foreach (var node in AIUEONodeList)
                {
                    if (((TreeNodeAIUEOTag)(node.Tag)).Gyou.文字.Equals(one_txt))
                    {
                        //行ノードとその下のかなノード両方登録
                        ((TreeNodeAIUEOTag)node.Tag).CardDB.CardList.Add(card);
                        ((TreeNodeAIUEOTag)node.Parent.Tag).CardDB.CardList.Add(card);
                        goto nextloop;
                    }
                }

                //どこにも所属出来ない場合、その他に
                foreach (TreeNode node in treenodes)
                {
                    if (node.Text.Contains("その他"))
                    {
                        ((TreeNodeAIUEOTag)node.Tag).CardDB.CardList.Add(card);
                        break;
                    }
                }

                nextloop :;
            }

            //要素がないツリーを削除
            for (int i = treenodes.Count - 1; i >= 0; i--)
            {
                TreeNode node = treenodes[i];

                for (int j = node.Nodes.Count - 1; j >= 0; j--)
                {
                    TreeNode childnode = node.Nodes[j];
                    if (((TreeNodeAIUEOTag)childnode.Tag).CardDB.CardList.Count == 0)
                    {
                        node.Nodes.RemoveAt(j);
                    }
                }
                if (((TreeNodeAIUEOTag)node.Tag).CardDB.CardList.Count == 0)
                {
                    treenodes.RemoveAt(i);
                }
            }

            //カード枚数を表示
            foreach (TreeNode node in treenodes)
            {
                var treenodetag = (TreeNodeAIUEOTag)node.Tag;
                int num         = treenodetag.CardDB.CardList.Count;
                node.Text += $" ({num})";

                foreach (TreeNode childnode in node.Nodes)
                {
                    var childnodetag = (TreeNodeAIUEOTag)childnode.Tag;
                    int childnum     = childnodetag.CardDB.CardList.Count;
                    childnode.Text += $" ({childnum})";
                }
            }

            //再帰的にツリーを作成
            for (int i = treenodes.Count - 1; i >= 0; i--)
            {
                TreeNode node = treenodes[i];

                for (int j = node.Nodes.Count - 1; j >= 0; j--)
                {
                    TreeNode childnode   = node.Nodes[j];
                    var      treenodetag = (TreeNodeAIUEOTag)childnode.Tag;
                    if (treenodetag.Gyou.前 != "非表示" && treenodetag.CardDB.CardList.Count > 50)                         //50しかなかったらツリーを作成しない
                    {
                        await RecursiveAddTreeNodeAIUEO(childnode.Nodes, treenodetag.CardDB, Depth + 1, ((TreeNodeAIUEOTag)childnode.Tag).Gyou.前);

                        //1つしか子を持っていない場合、自分を削除して親は孫を子にする
                        NodeUp(childnode, node.Nodes);
                    }
                }

                NodeUp(node, treenodes);
            }
        }