Thursday, September 18, 2014

การบ้านครั้งที่2 APP DEV

CLASS : PROGRAM


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void menu(character player01)
        {
            int Input = 0;

         
            do
            {



                Console.WriteLine(player01.getname() + "                    Level :  " + player01.getLV());
                Console.WriteLine("HP : " + player01.getHP() + "        / " + player01.getmaxHP());
                Console.WriteLine("MP : " + player01.getMP() + "        / " + player01.getmaxMP());
                Console.WriteLine("Speed : " + player01.getspeed());


                Input = 0;

                Console.WriteLine("Select Command Here");
                Console.WriteLine("1.Use Skill ");
                Console.WriteLine("2.Level UP");
                Console.WriteLine("3.Rest");
                Console.WriteLine("4.refresh");

                Input = Convert.ToInt32(Console.ReadLine());

                Console.Clear();

                int Input2 = 0;
                if (Input == 1)
                {
                    Console.WriteLine(player01.getname() + "                    Level :  " + player01.getLV());
                    Console.WriteLine("HP : " + player01.getHP() + "        / " + player01.getmaxHP());
                    Console.WriteLine("MP : " + player01.getMP() + "        / " + player01.getmaxMP());
                    Console.WriteLine();


                    int num = 1;
                    Console.WriteLine("Select Skill");
                    Console.WriteLine(num + ". Burn Like a Midnight Oil");
                    num++;
                    if (player01.getLV() >= 10)
                    {
                        Console.WriteLine(num + ". Shiny Shiny Wax ");
                        num++;
                    }
                    Console.WriteLine(num + ". Return ");



                    Input2 = Convert.ToInt32(Console.ReadLine());

                    Console.Clear();

                    if (Input2 == 1)
                        player01.skill1();

                    else if (Input2 == 2 && player01.getLV() >= 10)
                        player01.skill3();

                    else
                        Console.WriteLine("Return");
                    Console.WriteLine();

                   
                }

                if (Input == 2)
                {
                    player01.lvup();
                }

                if (Input == 3)
                {
                    player01.rest();
                }


            } while (Input != 0);



            Console.ReadLine();
        }


        static void Main(string[] args)
        {
           

            string name1;
           

            Console.WriteLine("Your character Name : ");

            name1 = Console.ReadLine();

            character player01 = new character(name1);

            Console.Clear();

            menu(player01);
           
           
        }

       
    }
}



CLASS : CHARACTER

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;


namespace ConsoleApplication1
{
    class @character  
    {
        private Timer timer1;
        private Timer timer2;
        private Timer timer3;
       protected int hp = 0;
       protected int mp = 0;
       protected int speed = 275;
     
       protected int lv = 1;
       protected int max_hp = 152;
       protected int max_mp = 76;

       protected int sk1time = 0;
       protected int skill2a = 0;
       protected int skill4 = 0;

       protected int fire1 = 10;
       protected int tempspd = 0;
       protected int bwax = 0;
       protected int wax1 = 0;
       protected int ash = 0;
     
       

       protected string name = "No name";
       
        DateTime now = DateTime.Now; // <-- Value is copied into local
       
            int    y1, z1, cd1;
            int    y2, z2, cd2;
           

       public character()
       {
           initialize();
       }
       
       public character(string name) : this()
       {
           this.name = name;    
       }
       
        public void initialize()
        {
            hp = max_hp;
            mp = max_mp;
           
        }

        public int getHP()
        {
            return hp;
        }

        public int getMP()
        {
            return mp;
        }

        public int getmaxHP()
        {
            return max_hp;
        }

        public int getmaxMP()
        {
            return max_mp;
        }

        public string getname()
        {
            return name;
        }

        public int getLV()
        {
            return lv;
        }

        public int getspeed()
        {
            return speed;
        }

        public void skill1()
        {

                y1 = now.Second+skill4;
                cd1 = (z1%60) - (y1%60);

               
                    Console.Clear();
                    now = DateTime.Now;

                    if (cd1 < 0)
                    {
                        if (mp > 130)
                        {
                            Console.WriteLine("Use ");
                            Console.WriteLine();
                           

                            if (skill2a == 8)
                                speed += ((tempspd * 10) / 100);

                            if (skill2a == 16)
                                speed += ((tempspd * 20) / 100);

                            if (skill2a == 24)
                                speed += ((tempspd * 30) / 100);
                            z1 = now.Second + 14;
                            mp -= 130;

                            timer1 = new Timer();
                            timer1.Interval = 1000;
                            timer1.Enabled = true;
                            timer1.Elapsed += burn;
                            skill4 = 0;

                           

                             
                           

                           
                        }

                        else
                        {
                            Console.WriteLine("Not Enough MP");
                            Console.WriteLine();
                        }

                       


                    }
                    else
                    {
                        Console.WriteLine("On Cooldown");
                        Console.WriteLine("Cooldown " + cd1);
                        Console.WriteLine();

                    }
                }

        public void skill2()
        {
            if(lv==5)
             skill2a = 8;
            if (lv == 10)
                skill2a = 16;
            if (lv == 15)
                skill2a = 24;

        }

        public void skill3()
        {


             y2 = now.Second;
            cd2 = (z2 % 60) - (y2 % 60);


            Console.Clear();
            now = DateTime.Now;

            if (cd2 < 0)
            {
                if (mp > 200)
                {
                    Console.WriteLine("Use ");
                    Console.WriteLine();

                    timer2 = new Timer();
                    timer2.Interval = 1000;
                    timer2.Enabled = true;
                    timer2.Elapsed += wax;
                   
                    z2 = now.Second + 13-skill4;
                    mp -= 200;
                    skill4 = 0;
                }

                else
                {
                    Console.WriteLine("Not Enough MP");
                    Console.WriteLine();
                }




            }
            else
            {
                Console.WriteLine("On Cooldown");
                Console.WriteLine("Cooldown " + cd2);
                Console.WriteLine();

            }
        }

        public void ashburn(Object source, ElapsedEventArgs e)
        {

           
            if (ash == 0)
                skill4++;

            ash++;

            hp -= (25 - skill2a);
            Console.WriteLine("Ashburn : HP- " + (25-skill2a));
            if (ash == 8)
            {
                timer3.Stop();
                ash = 0;
            }
        }

        public void wax(Object source, ElapsedEventArgs e)
        {  
               
     
            if(wax1==0)
            {
                speed -= (tempspd * 10) / 100;


                if (bwax == 1)
        {
            timer3 = new Timer();
            timer3.Interval = 1000;
            timer3.Enabled = true;
            timer3.Elapsed += ashburn;
        }
               
            }

            wax1++;
           
            Console.WriteLine("Waxing");

            if(wax1==8)
            { timer2.Stop();
            wax1 = 0;
            }


        }
        public void lvup()
        {
            if(lv<25)
            {
            ++lv;
            max_hp += 100 + (lv * 10);
            max_mp += 100 + (lv * 10);
            speed += 20 ;

            hp = max_hp;
            mp = max_mp;

            skill4 = 1;
            tempspd = speed;

            skill2();
            }
            else
            {
                Console.WriteLine("Already MAX LV");
            }
           
        }
         
        public void rest()
        {
            hp = max_hp;
            mp = max_mp;
        }

        private void burn(Object source, ElapsedEventArgs e)
        {


            if (sk1time == 0)
                skill4++;
           

            int fire2 = (fire1 - skill2a);
            if (fire2 < 0)
                fire2 = 0;

            bwax = 1;

            hp -= (fire2);
            Console.WriteLine("HP -"+ (fire2));
            sk1time++;
            if (sk1time == 8)
            {
                timer1.Stop();
                sk1time = 0;

                if (skill2a == 8)
                    speed -= ((tempspd * 10) / 100);

                if (skill2a == 16)
                    speed -= ((tempspd * 20) / 100);

                if (skill2a == 24)
                    speed -= ((tempspd * 30) / 100);
                bwax = 0;
            }
        }
           
        }
    }

Tuesday, September 16, 2014

Game Review - Saboteur


    
    
Gameplay

        Saboteur นั้นเป็นการ์ดเกมที่ผู้เล่นจะเล่นเป็นคนขุดเหมือง มีเป้าหมายคือพยายามขุดทางเพื่อที่จะไปหาทองคำ โดยในตอนเล่นผู้เล่นจะแบ่งเป็น 2 ฝ่าย คือฝ่ายที่พยายามขุดไปหาทอง และ ฝ่ายที่พยายามขัดขวางไม่ให้อีกฝ่ายไปถึงทองคำได้ โดยผู้เล่นจะไม่รู้ว่าใครอยู่ฝ่ายไหนบ้าง แต่ละคนจะรู้บทบาทของตัวเองเมื่อได้รับการ์ดตัวละครมาแล้วเท่านั้น
        ในเกมนี้ผู้เล่นจะต้องเล่นกันทั้งหมด 3 รอบ โดยในแต่ละรอบก็จะได้สุ่มตัวละครไหม่ทุกครั้ง ในแต่ละรอบนั้น หากฝ่ายที่ขุดเหมืองเป็นฝ่ายชนะ จะได้จับการ์ดทองคำ โดยผู้ที่เป็นคนวางการ์ดใบสุดท้ายก่อนเจอทองคำ จะได้การ์ด 2 ใบ ส่วนผู้เล่นในฝ่ายเดียวกันที่เหลือจะได้รับการ์ดทองคำคนละใบ ในการ์ดทองคำนี้จะมีสุ่มทองคำที่ได้ 1-3 ก้อน
         ในทางตรงกันข้าม หากผู้ที่ขัดขวางชนะ ทุกคนที่เป็นฝ่ายขัดขวางจะได้จำนวนทองคำตายตัวตามที่กฏกำหนดไว้ หลังจากเล่นจบ 3 รอบแล้วผู้ที่ชนะในเกมนี้ก็คือผู้เล่นที่มีจำนวนทองคำมากที่สุด


   
    ในส่วนของการเล่นแต่ละรอบนั้น ผู้เล่นจะต้องจั่วการ์ดจากกองตามจำนวนที่กำหนด ขึ้นอยู่กับจำนวนผู้ที่ร่วมเล่นเกม ส่วนการ์ดที่หยิบขึ้นมานั้น สามารถแบ่งหลักๆได้เป็น 2 ประเภท คือ
  1.การ์ดทางเดิน การ์ดนี้จำเป็นต้องใช้ในการต่อทางเพื่อไปให้ถึงทองคำ 
  2.การ์ดพิเศษ การ์ดเหล่านี้จะมีความสามารถพิเศษต่างๆที่ช่วยในการเล่นของทั้งสองฝ่าย หรือ ขัดขวางอีกฝ่ายหนึ่งก็ได้

    ในตอนเริ่มจะมีการ์ดเป้าหมายที่จะต้องไปให้ถึงคว่ำอยู่ 3 ใบ มีเพียง 1 ใบในนั้นเท่านั้นที่เป็นทองคำ ที่เหลือจะเป็นการ์ดถ่านที่ถึงจะไปถึงก็ไม่เกิดผลอะไร โดย ในเกมจะมีการ์ดที่สามารถเลือกการ์ด 1 ใน 3 ใบแล้วดูได้ว่าเป็นการ์ดอะไร เพื่อช่วยในการเล่น




 Ability Card
    การ์ด Ability หรือ การ์ดความสามารถพิเศษ เป็นการ์ดที่มีผลต่อเกมค่อนข้างมาก ทั้งกับฝ่ายหาทองและฝ่ายขัดขวาง โดยการ์ดพิเศษจะมีอยู่ 4 ประเภทคือ
      1.การ์ดทำลายอุปกรณ์ ซึ่งเป็นการ์ดที่จะต้องใช้ใส่คนอื่น จะทำให้ผู้ที่โดนใช้ใส่ไม่สามารถใช้การ์ดทางเดินได้ การ์ดทำลายอุปกรณ์นี้หากเป็นฝ่ายดีก็สามารถใช้ใส่คนที่เป็นฝ่ายร้ายได้เพื่อป้องกันไม่ให้โดนการ์ดทางเดินที่สามารถทำให้เกิดทางตันได้ ในขณะเดียวกันฝ่ายร้ายก็สามาถใช้การ์ดนี้เพื่อหยุดฝ่ายดีจากการลงการ์ดได้

      2.การ์ดซ่อมอุปกรณ์ เป็นการ์ดที่ไว้ใช้เพื่อช่วยยกเลิกผลของการ์ดทำลายอุปกรณ์ สามารถใช้ใส่ได้ทั้งกับตัวเองและกับผู้อื่น

      3.การ์ดทำลายทาง เป็นการ์ดที่สามารถเลือกทางการ์ดทางเดินใบไหนก็ได้ที่ได้ลงไปแล้ว แล้วนำการ์ดใบนั้นขึ้นมือตนเองพร้อมทำให้พื้นที่นั้นกลายเป็นทางว่าง ถือว่าเป็นการ์ดที่มีประโยชน์มากทั้งฝ่ายขุดเหมืองและฝ่ายขัดขวาง

     4.การ์ดดูการ์ดทองคำ เป็นการ์ดที่สามารถเลือกดูการ์ดทองคำ 1 ใบที่คว่ำอยู่ได้ โดยเราสามารถบอกคนอื่นได้ว่าการ์ดนั้นเป็นการ์ดทองคำ หรือ การ์ดถ่าน แต่ไม่สามารถแสดงให้คนอื่นดูได้ว่าเป็นการ์ดอะไร


         Analysis

    เทคนิคการเล่นฝ่ายขุด
         ผู้เล่นฝ่ายขุดในเกมนี้ค่อนข้างมีความได้เปรียบฝ่ายขัดขวาง เพราะว่าโอกาสที่จะแพ้นั้นมีแค่ 2 อย่างคือทางทั้งหมดไม่สามารถต่อทางไปต่อได้แล้ว ซึ่งถือเป็นเรื่องที่ยากมาก เพราะฝ่ายขัดขวางต้องวางทางตันเพื่อบลอคทางทุกเส้น นอกจากนี้ยังมีการ์ดทำลายทางที่สามารถแก้การถูกบลอคได้อีกด้วย 
          อีกวิธีการที่จะแพ้คือการ์ดทั้งหมด หมดและไม่สามารถวางทางไปถึงทองคำได้ ดังนั้นผู้เล่นที่เล่นฝ่ายขุดควรจะมีการ์ดสำรองไว้เผื่อในยามคับขัน เช่น การ์ดทำลายทาง หรือ การ์ดซ่อมอุปกรณ์ หรือแม้แต่การ์ด 4 แยกซึ่งสามารถต่อได้กับทางหลายแบบ ก็ควรที่จะเก็บไว้ในช่วงหลัง หลังจากที่เราเริ่มเดาทางได้แล้วว่าใครเป็นฝ่ายขัดขวางบ้าง เพราะการ์ดเหล่านี้สามารถแก้ไขสถาณการณ์ได้ดี นอกจากนี้ฝ่ายขุดยังควรพูดคุยกับคนอื่นๆเพื่อที่จะสามารถเดาหรือวิเคราะห์ได้ว่า มีใครเป็นฝ่ายขัดขวางบ้าง

เทคนิคการเล่นฝ่ายขัดขวาง
       เป็นฝ่ายที่เล่นค่อนข้างยาก แต่มีความสนุกในการเล่นค่อนข้างสูงเช่นกัน เพราะผู้เล่นจะต้องคอยขัดขวางคนอื่นแบบอ้อมๆโดยพยายามอย่าให้โดนจับได้ และควรขัดขวางแบบเปิดเผยตัวเฉพาะในช่วงที่จำเป็น ที่สามารถส่งผลแพ้ชนะได้จริงๆเท่านั้น เพราะการรีบแสดงตัวจะโดนถูกขัดขวางได้ง่าย เพราะผู้เล่นฝ่ายขุดนั้นมีจำนวนมากกว่า 




Tuesday, September 2, 2014

The Resistance : Avalon VS Ultimate Werewolf

Introduction

          ขึ้นเรื่องแบบนี้ไม่ได้หมายความว่าเราจะวิจารณ์เปรียบเทียบระหว่างเกม The Resistance : Avalon กับ Ultimate Werewolf นะ แต่เราจะว่าวิเคราะห์ถึงข้อแตกต่างของทั้งสองเกมกัน ซึ่งทั้งสองเกมนี้เป็นเกมที่มีความคล้ายคลึงกันค่อนข้างมาก โดยเราจะมารู้จักกับเกม The Resistance : Avalon หรือเรียกสั้นๆว่า Avalon คร่าวๆกันก่อน

The Resistance : Avalon



Gameplay

     Avalon นั้นเป็น Card Game ที่แบ่งเป็นสองฝ่ายคือทหารฝ่ายดี หรือทหารที่อยู่ฝ่ายเดียวกับ King Authur นั่นเอง และอีกฝั่งคือทหารที่เป็นสายสืบของฝั่งตรงข้ามนั่นเอง ซึ่งผลการแพ้ชนะจะตัดสินจากการทำเควส ซึ่งเป้าหมายของฝ่ายดีคือทำเควสสำเร็จ 3 ภารกิจ จากทั้งหมด 5 ภารกิจ ส่วนของฝ่ายตรงข้ามก็มีหน้าที่ขัดขวางฝ่ายดีไม่ให้ทำภารกิจสำเร็จ

Quest
       Quest หรือ ภารกิจในเกม Avalon คือการนำคนไปทำภารกิจซึ่งประกอบด้วยคน 3-5 คนตามที่ภารกิจกำหนดไว้ โดยผู้ที่ไปทำภารกิจคือทหารทั้งสองฝ่ายนั่นเอง โดยตอนเริ่มกรรมการจะแจกไพ่ Fail กับ Success ให้กับทุกคนที่ไปทำภารกิจ โดยหน้าที่ของฝ่ายร้ายคือเลือกไพ่ Fail ให้กับภารกิจ หากมีไพ่ Fail มากกว่า 1 ใบจะถือว่าภารกิจล้มเหลวทันที

Character 
         ในเกม Avalon จะมีตัวละครหลักๆอยู่หลายตัว ยกตัวอย่างเช่น Merlin,Percival,Morcana และ Assassin

         Merlin - เป็นฝ่ายดีมีความสามารถพิเศษคือสามารถรู้ตัวฝ่ายตรงข้ามได้ หน้าที่หลักๆคือพยายามบอกฝ่ายเดียวกันไม่ให้นำฝ่ายตรงข้ามไปทำภารกิจ

         Percival - สามารถมองเห็น Merlin ได้และเป็นคนเดียวที่รู้ว่าใครคือ Merlin มีหน้าที่รับหน้าแทน Merlin และพยายามสังเกตุว่าใครเป็นฝ่ายตรงข้าม

         Morcana - สามารถปรากฏตัวต่อหน้า Percival เป็น Merlin มีหน้าที่หลอกล่อให้ Percival สับสนระหว่าง Merlin ตัวจริงและตัวปลอม

         Assassin - ในตอนจบเกมหากฝ่ายดีเป็นฝ่ายชนะ Assassin สามารถเลือกคนได้หนึ่งคน หากคนๆนั้นเป็น Merlin ฝ่ายร้ายจะชนะแทนทันที

ข้อแตกต่างระหว่าง Ultimate Werewolf และ The Resistance : Avalon  
                                                                                                                                              ถึงแม้ว่าทั้งสองเกมจะมีแนวความคิดและแนวการเล่นที่คล้ายกัน แต่วิธีและเทคนิคการเล่นของทั้งสองเกมนั้นก็มีความแตกต่างกันอยู่ เพราะว่าหากเปรียบเทียบฝ่ายร้ายของเกม Avalon เป็นหมาป่าของเกม Ultimate Werewolf แล้ว กฏในการชนะเกมของทั้งคู่จะแตกต่างกัน


              -ในเกม Avalon นั้นเงื่อนไขการชนะของเกมคือฝ่ายดีจะต้องพยายามทำภารกิจให้สำเร็จ 3 ภารกิจซึ่งจากกฏนี้ทำให้ยิ่งเวลาผ่านไปนาน ฝ่ายคนดีจะยิ่งมีเบาะแสของคนร้ายมากขึ้นและสร้างความได้เปรียบให้กับตนเองได้ ในขณะที่เกม Ultimate Werewolf นั้นหากยิ่งปล่อยเวลาผ่านไปนาน จะทำให้ฝ่ายมนุษย์เสียเปรียบขึ้นเรื่อยๆจากการที่จะต้องมีคนตายตอนกลางคืนของทุกวัน ทำให้ยิ่งปล่อยเวลาไปนอน มนุษย์จะขาดคนมากขึ้นเรื่อยๆ

               - การชนะเกมของ Avalon นั้นนอกจากจะใช้การหลอกล่อและการ Bluff กันแล้วยังต้องใช้ความสามารถในการวิเคราะห์อีกด้วย เพราะหากทำภารกิจแล้วภารกิจมีการ์ด fail มาก็จะสามารถจำแนกกลุ่มที่ไปทั้งหมดว่าหนึ่งในนั้นจะต้องมีคนร้ายปนมาอย่างแน่นอน หลังจากนั้นก็นำข้อมูลที่ได้มาวิเคราะห์ว่าใครเป็นฝ่ายตรงข้าม ในขณะที่ Ultimate Werewolf เราจะไม่มีวันรู้ตัวหมาป่าอย่างแน่นอนยกเว้นหากเราเป็น Seer หรือมี Seer เปิดเผยว่าใครเป็นหมาป่าดังนั้นการเล่นในแต่ละครั้งดวงจึงมีส่วนในการเลือกผสมอยู่ด้วย