Beispiel #1
0
            public void B防禦(玩家 A, 怪物 B, double B減傷, ref string 戰鬥描述)
            {
                int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(A.傷害) * A.玩家出牌.數值 * (B減傷)));

                B.受到傷害(傷害);
                戰鬥描述 += "= 怪物防禦 = " + "減傷為:" + B減傷 + " " + A.稱 + " 攻擊 " + B.稱 + " 造成 " + 傷害 + " 點傷害 \n";
            }
Beispiel #2
0
            public void A防禦(玩家 A, 怪物 B, double A減傷, ref string 戰鬥描述)
            {
                int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(B.傷害) * B.怪物出牌.數值 * (A減傷)));

                A.受到傷害(傷害);
                戰鬥描述 += "= 玩家防禦 = " + "減傷為:" + A減傷 + " " + B.稱 + " 攻擊 " + A.稱 + " 造成 " + 傷害 + " 點傷害 \n";
            }
Beispiel #3
0
            public void AB平局(玩家 A, 怪物 B, ref string 戰鬥描述)
            {
                int A傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(A.傷害) * A.玩家出牌.數值));
                int B傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(B.傷害) * B.怪物出牌.數值));

                B.受到傷害(A傷害);
                A.受到傷害(B傷害);
                戰鬥描述 += "= 互相傷害 = " + A.稱 + " 攻擊 " + B.稱 + " 造成 " + A傷害 + " 點傷害 \n";
                戰鬥描述 += "= 互相傷害 = " + B.稱 + " 攻擊 " + A.稱 + " 造成 " + B傷害 + " 點傷害 \n";
            }
Beispiel #4
0
            public 玩家 玩家暫存初始化(List <string> 暫存資訊, string 玩家出牌)
            {
                玩家 玩家 = new 玩家(暫存資訊[HC.C]);

                玩家.血量   = Convert.ToInt32(暫存資訊[HC.D]);
                玩家.傷害   = Convert.ToInt32(暫存資訊[HC.E]);
                玩家.玩家出牌 = 玩家.取得卡牌資訊(玩家出牌);
                玩家.取讀暫存牌庫(new List <int>(Array.ConvertAll <string, int>(暫存資訊[HC.G].Split(','), s => int.Parse(s))));

                return(玩家);
            }
Beispiel #5
0
            public void B克制A(玩家 A, 怪物 B, ref string 戰鬥描述)
            {
                int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(B.傷害) * B.怪物出牌.數值));

                A.受到傷害(傷害);

                if (B.怪物出牌.類型 == 5)
                {
                    戰鬥描述 += "= 怪物攻擊玩家 = " + B.稱 + " 攻擊 " + A.稱 + " 造成 " + 傷害 + " 點傷害 \n";
                }
                else
                {
                    戰鬥描述 += "= 怪物克制玩家 = " + B.稱 + " 攻擊 " + A.稱 + " 造成 " + 傷害 + " 點傷害 \n";
                }
            }
Beispiel #6
0
            public void A克制B(玩家 A, 怪物 B, ref string 戰鬥描述)
            {
                int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(A.傷害) * A.玩家出牌.數值));

                B.受到傷害(傷害);

                if (B.怪物出牌.類型 == 5)
                {
                    戰鬥描述 += "= 玩家攻擊怪物 = " + A.稱 + " 攻擊 " + B.稱 + " 造成 " + 傷害 + " 點傷害 \n";
                }
                else
                {
                    戰鬥描述 += "= 玩家克制怪物 = " + A.稱 + " 攻擊 " + B.稱 + " 造成 " + 傷害 + " 點傷害 \n";
                }
            }
Beispiel #7
0
            public void 儲存暫存(玩家 玩家, 怪物 怪物, int 怪物抽到編號)
            {
                List <string> 儲存資料 = new List <string>();

                儲存資料.Add(_key);
                儲存資料.Add(DateTime.Now.ToString());
                儲存資料.Add(玩家.稱);
                儲存資料.Add(玩家.血量.ToString());
                儲存資料.Add(玩家.傷害.ToString());
                儲存資料.Add("無");
                儲存資料.Add(玩家.取得目前牌庫("玩家"));
                儲存資料.Add(怪物.稱);
                儲存資料.Add(怪物.血量.ToString());
                儲存資料.Add(怪物.傷害.ToString());
                儲存資料.Add("無");
                儲存資料.Add(怪物.取得目前牌庫("怪物"));
                儲存資料.Add(怪物.牌庫[怪物抽到編號].卡牌名稱);
                儲存資料.Add("0");

                GH.CreateEntry("戰鬥暫存", "A", "L", 儲存資料);
            }
Beispiel #8
0
            public isRock.LineBot.CarouselTemplate 怪物出牌玩家抽卡並暫存(玩家 玩家, 怪物 怪物, ref List <isRock.LineBot.MessageBase> responseMsgs)
            {
                _key = Guid.NewGuid().ToString();

                _key = _key.Replace('-', '=');

                Random rdm1 = new Random(unchecked ((int)DateTime.Now.Ticks));

                //敵人抽牌 (只抽一張)
                int 怪物抽到編號 = rdm1.Next(0, 怪物.牌庫.Count);

                //怪物出牌顯示
                var act1 = new isRock.LineBot.MessageAction()
                {
                    text = " ", label = " "
                };

                var tmp = new isRock.LineBot.ButtonsTemplate()
                {
                    text              = 怪物.稱 + "階級:" + 怪物.階級 + "HP:" + 怪物.血量,
                    title             = "看樣子要使用: " + 怪物.牌庫[怪物抽到編號].卡牌名稱,
                    thumbnailImageUrl = new Uri(怪物.圖片網址),
                };

                tmp.actions.Add(act1);
                responseMsgs.Add(new isRock.LineBot.TemplateMessage(tmp));


                List <卡牌> 玩家抽到 = new List <卡牌>();

                int 牌庫數量;
                int 玩家抽到編號 = 0;

                // 玩家抽牌(抽三張)
                while (玩家抽到.Count < 3)
                {
                    牌庫數量   = 玩家.牌庫.Count - 1;
                    玩家抽到編號 = rdm1.Next(0, 牌庫數量);
                    if (!玩家抽到.Contains(玩家.牌庫[玩家抽到編號]))
                    {
                        玩家抽到.Add(玩家.牌庫[玩家抽到編號]);
                        玩家.牌庫.Remove(玩家.牌庫[玩家抽到編號]);
                    }
                }

                string 抽到卡牌 = "";

                foreach (卡牌 卡牌 in 玩家抽到)
                {
                    if (玩家抽到[玩家抽到.Count - 1] == 卡牌)
                    {
                        抽到卡牌 += 卡牌.順序編號;
                    }
                    else
                    {
                        抽到卡牌 += 卡牌.順序編號 + ",";
                    }
                }

                //玩家出牌顯示
                responseMsgs.Add(new isRock.LineBot.TextMessage("請選擇應對方式"));

                var actions1 = new List <isRock.LineBot.TemplateActionBase>();

                actions1.Add(new isRock.LineBot.MessageAction()
                {
                    label = "使用此張卡牌", text = "RPG-TeM-遭遇戰-出牌-" + _key + "-" + 玩家抽到[0].卡牌名稱
                });
                var actions2 = new List <isRock.LineBot.TemplateActionBase>();

                actions2.Add(new isRock.LineBot.MessageAction()
                {
                    label = "使用此張卡牌", text = "RPG-TeM-遭遇戰-出牌-" + _key + "-" + 玩家抽到[1].卡牌名稱
                });
                var actions3 = new List <isRock.LineBot.TemplateActionBase>();

                actions3.Add(new isRock.LineBot.MessageAction()
                {
                    label = "使用此張卡牌", text = "RPG-TeM-遭遇戰-出牌-" + _key + "-" + 玩家抽到[2].卡牌名稱
                });

                var Column1 = new isRock.LineBot.Column
                {
                    text  = "等級: " + 玩家抽到[0].等級 + " 說明:" + 玩家抽到[0].說明,
                    title = 玩家抽到[0].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[0].圖片網址),
                    actions           = actions1 //設定回覆動作
                };

                var Column2 = new isRock.LineBot.Column
                {
                    text  = "等級: " + 玩家抽到[1].等級 + " 說明:" + 玩家抽到[1].說明,
                    title = 玩家抽到[1].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[1].圖片網址),
                    actions           = actions2 //設定回覆動作
                };

                var Column3 = new isRock.LineBot.Column
                {
                    text  = "等級: " + 玩家抽到[2].等級 + " 說明:" + 玩家抽到[2].說明,
                    title = 玩家抽到[2].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[2].圖片網址),
                    actions           = actions3 //設定回覆動作
                };
                //建立CarouselTemplate
                var CarouselTemplate = new isRock.LineBot.CarouselTemplate();

                CarouselTemplate.columns.Add(Column1);
                CarouselTemplate.columns.Add(Column2);
                CarouselTemplate.columns.Add(Column3);

                儲存暫存(玩家, 怪物, 怪物抽到編號);

                return(CarouselTemplate);
            }
Beispiel #9
0
            public isRock.LineBot.CarouselTemplate 每日動作抽卡並暫存(玩家 玩家, ref List <isRock.LineBot.MessageBase> responseMsgs)
            {
                _key = Guid.NewGuid().ToString();

                _key = _key.Replace('-', '=');

                List <string> 卡牌清單 = new List <string>();

                牌庫初始化 牌庫初始化 = new 牌庫初始化(卡牌清單);

                地城牌庫初始化 地城牌庫初始化 = new 地城牌庫初始化();

                Random rdm1 = new Random(unchecked ((int)DateTime.Now.Ticks));



                List <地城卡牌> 玩家抽到 = new List <地城卡牌>();

                int 牌庫數量;
                int 每日行動抽到 = 0;

                // 玩家抽牌(抽三張)
                while (玩家抽到.Count < 3)
                {
                    if (玩家.動作次數 > 5)
                    {
                        每日行動抽到 = rdm1.Next(0, 地城牌庫初始化.牌庫.Count);
                    }
                    else
                    {
                        每日行動抽到 = rdm1.Next(0, 地城牌庫初始化.牌庫.Count - 1);
                    }

                    if (!玩家抽到.Contains(地城牌庫初始化.牌庫[每日行動抽到]))
                    {
                        玩家抽到.Add(地城牌庫初始化.牌庫[每日行動抽到]);
                    }
                }
                string 抽到卡牌 = "";

                foreach (地城卡牌 卡牌 in 玩家抽到)
                {
                    if (玩家抽到[玩家抽到.Count - 1] == 卡牌)
                    {
                        抽到卡牌 += 卡牌.順序編號;
                    }
                    else
                    {
                        抽到卡牌 += 卡牌.順序編號 + ",";
                    }
                }
                //玩家選擇地城顯示
                responseMsgs.Add(new isRock.LineBot.TextMessage("請選擇該回合動作"));

                var actions1 = new List <isRock.LineBot.TemplateActionBase>();

                //actions1.Add(new isRock.LineBot.MessageAction() { label = "選擇此動作", text = "RPG-TeM-每日動作-選擇-" + 玩家抽到[0].卡牌名稱 + _key + "-" + 玩家抽到[0].卡牌名稱 });
                actions1.Add(new isRock.LineBot.MessageAction()
                {
                    label = "選擇此動作", text = 玩家抽到[0].指令
                });
                var actions2 = new List <isRock.LineBot.TemplateActionBase>();

                actions2.Add(new isRock.LineBot.MessageAction()
                {
                    label = "選擇此動作", text = 玩家抽到[1].指令
                });
                var actions3 = new List <isRock.LineBot.TemplateActionBase>();

                actions3.Add(new isRock.LineBot.MessageAction()
                {
                    label = "選擇此動作", text = 玩家抽到[2].指令
                });

                var Column1 = new isRock.LineBot.Column
                {
                    text  = 玩家抽到[0].卡牌名稱,
                    title = 玩家抽到[0].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[0].圖片網址),
                    actions           = actions1 //設定回覆動作
                };

                var Column2 = new isRock.LineBot.Column
                {
                    text  = 玩家抽到[1].卡牌名稱,
                    title = 玩家抽到[1].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[1].圖片網址),
                    actions           = actions2 //設定回覆動作
                };

                var Column3 = new isRock.LineBot.Column
                {
                    text  = 玩家抽到[2].卡牌名稱,
                    title = 玩家抽到[2].卡牌名稱,
                    //設定圖片
                    thumbnailImageUrl = new Uri(玩家抽到[2].圖片網址),
                    actions           = actions3 //設定回覆動作
                };
                //建立CarouselTemplate
                var CarouselTemplate = new isRock.LineBot.CarouselTemplate();

                CarouselTemplate.columns.Add(Column1);
                CarouselTemplate.columns.Add(Column2);
                CarouselTemplate.columns.Add(Column3);


                return(CarouselTemplate);
            }
Beispiel #10
0
 public void A恢復(玩家 A, ref string 戰鬥描述)
 {
     A.恢復血量(Convert.ToInt32(A.傷害 * A.玩家出牌.數值));
     戰鬥描述 += A.稱 + " 恢復了 " + A.傷害 * A.玩家出牌.數值 + " 點血量 \n";
 }
Beispiel #11
0
            public string  戰(玩家 玩家, 怪物 怪物, string 戰鬥描述)
            {
                int 戰鬥判定 = 玩家.玩家出牌.類型 - 怪物.怪物出牌.類型;


                //防禦判定
                if (玩家.玩家出牌.類型 == 4 || 怪物.怪物出牌.類型 == 4)
                {
                    if (玩家.玩家出牌.類型 == 4)
                    {
                        switch (怪物.怪物出牌.類型)
                        {
                        case 1:
                            //怪物攻擊被克制無效沒事
                            戰鬥描述 += 怪物.稱 + "的攻擊 被防禦住了!\n";
                            break;

                        case 2:
                        case 3:
                            A防禦(玩家, 怪物, 玩家.玩家出牌.數值, ref 戰鬥描述);
                            break;

                        case 4:
                            //都防禦沒事
                            break;

                        case 5:
                            B恢復(怪物, ref 戰鬥描述);
                            break;
                        }
                    }
                    else //怪物出4
                    {
                        switch (玩家.玩家出牌.類型)
                        {
                        case 1:
                            //玩家攻擊被克制無效沒事
                            戰鬥描述 += 玩家.稱 + "的攻擊 被防禦住了!\n";
                            break;

                        case 2:
                        case 3:
                            B防禦(玩家, 怪物, 怪物.怪物出牌.數值, ref 戰鬥描述);
                            break;

                        case 4:
                            //都防禦沒事
                            break;

                        case 5:
                            A恢復(玩家, ref 戰鬥描述);
                            break;
                        }
                    }
                }

                //恢復判定
                else if (玩家.玩家出牌.類型 == 5 || 怪物.怪物出牌.類型 == 5)
                {
                    if (玩家.玩家出牌.類型 == 5)
                    {
                        switch (怪物.怪物出牌.類型)
                        {
                        case 1:
                            B克制A(玩家, 怪物, ref 戰鬥描述);
                            break;

                        case 2:
                        case 3:
                            A恢復(玩家, ref 戰鬥描述);
                            B克制A(玩家, 怪物, ref 戰鬥描述);
                            break;

                        case 4:
                            A恢復(玩家, ref 戰鬥描述);
                            //怪物防禦沒事發生
                            break;

                        case 5:
                            A恢復(玩家, ref 戰鬥描述);
                            B恢復(怪物, ref 戰鬥描述);
                            break;
                        }
                    }
                    //怪物出5
                    else
                    {
                        switch (玩家.玩家出牌.類型)
                        {
                        case 1:
                            A克制B(玩家, 怪物, ref 戰鬥描述);
                            break;

                        case 2:
                        case 3:
                            B恢復(怪物, ref 戰鬥描述);
                            A克制B(玩家, 怪物, ref 戰鬥描述);
                            break;

                        case 4:
                            B恢復(怪物, ref 戰鬥描述);
                            //玩家防禦沒事發生
                            break;

                        case 5:
                            A恢復(玩家, ref 戰鬥描述);
                            B恢復(怪物, ref 戰鬥描述);
                            break;
                        }
                    }
                }

                //有克制關係
                else if (戰鬥判定 == 2 || 戰鬥判定 == -2 || 戰鬥判定 == 1 || 戰鬥判定 == -1)
                {
                    if (戰鬥判定 > 0)
                    {
                        if (玩家.玩家出牌.類型 == 3 && 怪物.怪物出牌.類型 == 1)
                        {
                            A克制B(玩家, 怪物, ref 戰鬥描述);
                        }
                        else
                        {
                            B克制A(玩家, 怪物, ref 戰鬥描述);
                        }
                    }
                    else
                    {
                        A克制B(玩家, 怪物, ref 戰鬥描述);
                    }
                }
                //無克制
                else
                {
                    AB平局(玩家, 怪物, ref 戰鬥描述);
                }


                return(戰鬥描述);
            }
Beispiel #12
0
        public List <isRock.LineBot.MessageBase> RPGTeMCommand(string LineEvent, string 群組代碼, string 玩家代碼)
        {
            List <isRock.LineBot.MessageBase> responseMsgs = new List <isRock.LineBot.MessageBase>();
            var  CarouselTemplate = new isRock.LineBot.CarouselTemplate();
            遊戲機制 遊戲機制             = new 遊戲機制();

            if (LineEvent.Contains("遭遇戰-出牌-"))
            {
                string Key = LineEvent.Split('-')[4];

                //Todo 撈出暫存,判斷是否出過牌,出過就不進行判斷,沒出過 戰鬥計算 並更新為出過牌, 判斷狀況,更新暫存 或 結算後清理暫存。
                List <String> 暫存資訊 = 遊戲機制.讀取暫存(Key);


                if (Convert.ToInt32(暫存資訊[HC.N]) == 0 && 暫存資訊.Count != 0) //更新玩家是否已出牌
                {
                    遊戲機制.更新暫存(暫存資訊);

                    //初始化對戰資料
                    怪物 怪物 = 遊戲機制.怪物暫存初始化(暫存資訊);

                    string 初始化對戰訊息 = "";

                    初始化對戰訊息 += 怪物.稱 + "HP: " + 怪物.血量 + " 出牌: " + 怪物.怪物出牌.卡牌名稱 + "\n";

                    玩家 玩家 = 遊戲機制.玩家暫存初始化(暫存資訊, LineEvent.Split('-')[5]);

                    初始化對戰訊息 += 玩家.稱 + "HP:" + 玩家.血量 + " 出牌: " + 玩家.玩家出牌.卡牌名稱 + "\n";

                    //戰鬥計算
                    戰鬥計算 戰計 = new 戰鬥計算();

                    初始化對戰訊息 += "對戰開始 \n";

                    遊戲機制.戰鬥描述(戰計.戰(玩家, 怪物, 初始化對戰訊息));

                    遊戲機制.戰鬥描述(玩家.稱 + "剩餘HP:" + 玩家.血量 + "  " + 怪物.稱 + "剩餘HP: " + 怪物.血量);

                    if (怪物.血量 <= 0 && 玩家.血量 <= 0)
                    {
                        遊戲機制.戰鬥描述("戰鬥失敗");
                    }
                    else if (怪物.血量 <= 0)
                    {
                        遊戲機制.戰鬥描述(玩家.稱 + " 勝利");
                    }
                    else if (玩家.血量 <= 0)
                    {
                        遊戲機制.戰鬥描述("戰鬥失敗");
                    }

                    responseMsgs.Add(new isRock.LineBot.TextMessage(遊戲機制.取得戰鬥描述()));

                    //刪除原先暫存
                    遊戲機制.刪除暫存(暫存資訊);

                    //不存在勝利或失敗,繼續抽卡 並暫存
                    if (!遊戲機制.取得戰鬥描述().Contains("勝利") && !遊戲機制.取得戰鬥描述().Contains("失敗"))
                    {
                        CarouselTemplate = 遊戲機制.怪物出牌玩家抽卡並暫存(玩家, 怪物, ref responseMsgs);
                        responseMsgs.Add(new isRock.LineBot.TemplateMessage(CarouselTemplate));
                    }
                }
                else
                {
                    responseMsgs.Add(new isRock.LineBot.TextMessage("此戰已戰鬥過 或 暫存無資料"));
                }
            }
            else if (LineEvent.Contains("每日動作-選擇-戰鬥"))
            {
                responseMsgs.Add(new isRock.LineBot.TextMessage("遭遇戰開始,遇見哥布林"));
            }
            else if (LineEvent.Contains("每日動作-選擇-休息"))
            {
                responseMsgs.Add(new isRock.LineBot.TextMessage("休息回復體力"));
            }
            else if (LineEvent.Contains("每日動作-選擇-商店"))
            {
                responseMsgs.Add(new isRock.LineBot.TextMessage("買東西囉"));
            }
            else if (LineEvent.Contains("每日動作-選擇-魔王"))
            {
                responseMsgs.Add(new isRock.LineBot.TextMessage("你感覺到一股危險的壓迫逼近"));
            }
            else if (LineEvent.Contains("每日動作"))
            {
                玩家 玩家 = new 玩家("測試人員");
                CarouselTemplate = 遊戲機制.每日動作抽卡並暫存(玩家, ref responseMsgs);
                responseMsgs.Add(new isRock.LineBot.TemplateMessage(CarouselTemplate));
            }
            else if (LineEvent.Contains("遭遇戰"))
            {
                responseMsgs.Add(new isRock.LineBot.TextMessage("遭遇戰開始,遇見哥布林"));

                怪物 怪物 = new 怪物("哥布林");
                玩家 玩家 = new 玩家("測試人員");

                //ToDo: 流程 顯示對方出牌 -> 牌庫抽三張牌顯示 -> 玩家選一張牌 -> 戰鬥判定 (迴圈)
                CarouselTemplate = 遊戲機制.怪物出牌玩家抽卡並暫存(玩家, 怪物, ref responseMsgs);

                responseMsgs.Add(new isRock.LineBot.TemplateMessage(CarouselTemplate));
            }


            return(responseMsgs);
        }