public void B防禦(玩家 A, 怪物 B, double B減傷, ref string 戰鬥描述) { int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(A.傷害) * A.玩家出牌.數值 * (B減傷))); B.受到傷害(傷害); 戰鬥描述 += "= 怪物防禦 = " + "減傷為:" + B減傷 + " " + A.稱 + " 攻擊 " + B.稱 + " 造成 " + 傷害 + " 點傷害 \n"; }
public void A防禦(玩家 A, 怪物 B, double A減傷, ref string 戰鬥描述) { int 傷害 = Convert.ToInt32(Math.Round(Convert.ToDouble(B.傷害) * B.怪物出牌.數值 * (A減傷))); A.受到傷害(傷害); 戰鬥描述 += "= 玩家防禦 = " + "減傷為:" + A減傷 + " " + B.稱 + " 攻擊 " + A.稱 + " 造成 " + 傷害 + " 點傷害 \n"; }
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"; }
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(玩家); }
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"; } }
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"; } }
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", 儲存資料); }
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); }
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); }
public void A恢復(玩家 A, ref string 戰鬥描述) { A.恢復血量(Convert.ToInt32(A.傷害 * A.玩家出牌.數值)); 戰鬥描述 += A.稱 + " 恢復了 " + A.傷害 * A.玩家出牌.數值 + " 點血量 \n"; }
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(戰鬥描述); }
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); }