最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

控制臺(tái)2048游戲

2018-01-17 22:09 作者:程序員小明哥  | 我要投稿

眾所周知,unity中用的最多的腳本是C#。所以,為了鞏固大家的C#語(yǔ)法,特給大家?guī)?lái)一個(gè)練習(xí)c#函數(shù)和二維數(shù)組的實(shí)例——控制臺(tái)2048。

現(xiàn)將代碼貼出,大家來(lái)學(xué)習(xí)學(xué)習(xí)吧!代碼中有詳細(xì)的注釋,大家很容易理解噠!如果大家覺(jué)得太多一點(diǎn)一點(diǎn)翻看太麻煩的話,可以先復(fù)制到IDE里,然后在詳細(xì)的看哦!

這個(gè)是主類,“Program.cs”這個(gè)是整個(gè)游戲的邏輯代碼。

using System;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            bool isReset = true;


            while (isReset)

            {

                ArrayTwoMove move = new ArrayTwoMove();

                int[,] map = new int[4, 4];//2048游戲地圖

                map = CreateNewNumber(map);

                map = CreateNewNumber(map);


                bool b = true;


                while (b)

                {

                    Console.Clear();//控制臺(tái)清除

                    PrintMap(map);

                    Console.Write("請(qǐng)按“↑”、“↓”、“←”、“→”方向鍵執(zhí)行相對(duì)應(yīng)的操作!");

                    var v = Console.ReadKey();

                    switch (v.Key)

                    {

                        case ConsoleKey.UpArrow: map = move.MoveArray2Up(map); break;//上

                        case ConsoleKey.DownArrow: map = move.MoveArray2Down(map); break;//下

                        case ConsoleKey.LeftArrow: map = move.MoveArray2Left(map); break;//左

                        case ConsoleKey.RightArrow: map = move.MoveArray2Right(map); break;//右

                    }


                    if (IsGameOver(map)) { b = false; }

                }

                bool d=true ;

                while (d)

                {

                    Console.Clear();//控制臺(tái)清除

                    GameOverMap();

                    Console.WriteLine("\t\t   ============是否重新開始游戲!============");

                    Console.WriteLine("\t\t   ============Enter\"開始\",Esc\"結(jié)束\"============");

                    var xv = Console.ReadKey();

                    switch (xv.Key)

                    {

                        case ConsoleKey.Enter: isReset = true; d = false; break;

                        case ConsoleKey.Escape: isReset = false; d = false; break;

                        default: d = true; break;

                    }

                }

            }

        }


        /// <summary>

        /// 2048地圖控制臺(tái)打印

        /// </summary>

        /// <param name="map"></param>

        private static void PrintMap(int[,] map)

        {

            Console.Write("\n\n");

            Console.WriteLine("\t\t   ============控制臺(tái)2048游戲============");

            for (int r = 0; r <= map.GetUpperBound(0); r++)

            {

                Console.Write("\n\n\t\t|----------|----------|----------|----------|\n");

                Console.Write("\t\t|   ");


                for (int c = 0; c <= map.GetUpperBound(0); c++)

                {

                    if (map[r, c] == 0)

                    {

                        //Console.ForegroundColor = ConsoleColor.Cyan;

                        Console.Write("    " + "   |   ");

                    }

                    else

                    {

                        switch (map[r, c])

                        {

                            case 2: Console.ForegroundColor = ConsoleColor.DarkGray; break;//深灰色

                            case 4: Console.ForegroundColor = ConsoleColor.Gray; break;//灰色

                            case 8: Console.ForegroundColor = ConsoleColor.White; break;//白色

                            case 16: Console.ForegroundColor = ConsoleColor.Blue; break;//藍(lán)色

                            case 32: Console.ForegroundColor = ConsoleColor.Cyan; break;//青色

                            case 64: Console.ForegroundColor = ConsoleColor.DarkYellow; break;//深黃色

                            case 128: Console.ForegroundColor = ConsoleColor.Yellow; break;//黃色

                            case 256: Console.ForegroundColor = ConsoleColor.Magenta; break;//紫紅色

                            case 512: Console.ForegroundColor = ConsoleColor.Red; break;//紅色

                            case 1024: Console.ForegroundColor = ConsoleColor.Green; break;//綠色

                            default: Console.ForegroundColor = ConsoleColor.Green; break;

                        }

                        Console.Write("{0,4}   |   ", map[r, c]);

                    }

                }

                //Console.Write("\n\t\t|----------|----------|----------|----------|\n");

                //Console.Write("\n\t\t|          |          |          |          |\n");

            }

            Console.Write("\n\t\t|----------|----------|----------|----------|\n");

        }


        private static Random random = new Random();

        /// <summary>

        /// 在2048地圖上生成新的數(shù)組(2(80%)或4(20%))

        /// </summary>

        /// <param name="map"></param>

        public static int[,] CreateNewNumber(int[,] map)

        {

            bool b = true;

            while (b)

            {

                int x = random.Next(0, map.GetUpperBound(0) + 1);

                int y = random.Next(0, map.GetUpperBound(0) + 1);

                if (map[x, y] == 0)

                {

                    b = false;

                    int res = random.Next(1, 6) == 1 ? 4 : 2;

                    map[x, y] = res;

                }

            }

            return map;


        }


        /// <summary>游戲結(jié)束界面

        /// 游戲結(jié)束界面

        /// </summary>

        private static void GameOverMap()

        {

            Console.Write("\n\n");

            Console.WriteLine("\t\t   ============游戲結(jié)束============\n\n\n\n");

        }


        /// <summary>查找2048地圖里面是否還有空的位置

        /// 查找2048地圖里面是否還有空的位置

        /// </summary>

        /// <param name="map">2048地圖</param>

        /// <returns></returns>

        public static bool IsNull(int[,] map)

        {

            int[] tem = new int[map.GetUpperBound(0) + 1];

            for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

            {

                for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                {

                    tem[c] = map[r, c];

                }

                foreach (var item in tem)

                {

                    if (item == 0) { return true; }

                }

            }

            return false;

        }


        /// <summary>判斷2048游戲是否結(jié)束

        /// 判斷2048游戲是否結(jié)束

        /// </summary>

        /// <param name="map">2048地圖</param>

        /// <returns></returns>

        private static bool IsGameOver(int[,] map)

        {

            if (IsNull(map)) { return false; }//地圖有空位置  不滿足游戲結(jié)束的條件

            else//地圖沒(méi)有有空位置

            {

                if (IsHNoAdd(map) && IsVNoAdd(map))

                { return true; }

                else { return false; }

            }

        }


        /// <summary>判斷數(shù)組里面的所有成員有沒(méi)有符合相鄰相同非零的條件存在

        /// 判斷數(shù)組里面的所有成員有沒(méi)有符合相鄰相同非零的條件存在

        /// </summary>

        /// <param name="array">數(shù)組</param>

        /// <returns></returns>

        private static bool IsAddOk(int[] array)

        {

            for (int i = 0; i < array.Length - 1; i++)

            {

                if (array[i] == array[i + 1] && array[i] != 0)

                {

                    return true;

                }

            }

            return false;

        }


        /// <summary>查閱2048地圖每一行有沒(méi)有符合相鄰相同非零的條件存在

        /// 查閱2048地圖每一行有沒(méi)有符合相鄰相同非零的條件存在

        /// </summary>

        /// <param name="map">2048地圖</param>

        /// <returns></returns>

        public static bool IsHNoAdd(int[,] map)

        {

            int[] tem = new int[map.GetUpperBound(0) + 1];

            for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

            {

                for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                {

                    tem[c] = map[r, c];

                }

                if (IsAddOk(tem)) { return false; }

            }

            return true;

        }


        /// <summary>查閱2048地圖每一列有沒(méi)有符合相鄰相同非零的條件存在

        /// 查閱2048地圖每一列有沒(méi)有符合相鄰相同非零的條件存在

        /// </summary>

        /// <param name="map">2048地圖</param>

        /// <returns></returns>

        public static bool IsVNoAdd(int[,] map)

        {

            int[] tem = new int[map.GetUpperBound(0) + 1];

            for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

            {

                for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                {

                    tem[c] = map[c, r];

                }

                if (IsAddOk(tem)) { return false; }

            }

            return true;

        }

    }

}

接下來(lái)是游戲數(shù)據(jù)的處理。即交換數(shù)字,移動(dòng)數(shù)字,合并數(shù)字等等。

using System;


namespace ConsoleApplication1

{

    class ArrayTwoMove

    {   //                     去零          相加            去零

        //   0,2,2,4     ==>  2,2,4,0   ==>  4,0,4,0   ==>  4,4,0,0

        private int[]MoveLeftOrUp(int[]array)//去零

        {

            int[] newA = new int[array.Length];//   0,0,0,0

            int index=0;


            for (int i = 0; i < array .Length; i++)

            {

                if(array [i]!=0)

                {

                    newA[index] = array[i];//  2,0,0,0

                    index++;

                }

            }

            return newA;

        }

        private int[] Add(int[] array)//相鄰相同非零相加   2,2,4,0   4,0,4,0

        {

            for (int i = 0; i < array.Length-1; i++)

            {

                if(array [i]==array [i+1]&&array [i]!=0)

                {

                    array[i] *= 2;

                    array[i + 1] = 0;

                }

            }

            return array;

        }


        /// <summary>2048左移動(dòng)算法

        /// 2048左移動(dòng)算法

        /// </summary>

        /// <param name="map">地圖二維數(shù)組</param>

        /// <returns></returns>

        public int[,] MoveArray2Left(int[,]map)

        {

            //0,2,2,4     4,4,0,0

            //2,0,8,4     2,8,4,0

            //0,0,2,2     4,0,0,0

            //2,4,4,4     2,8,4,0


            bool b = true;

            if (Program.IsHNoAdd(map)&&!Program .IsNull(map)) { b = false; }

            if (b)

            {

                int[] tem = new int[map.GetUpperBound(0) + 1];

                for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

                {

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        tem[c] = map[r, c];

                    }

                    tem = MoveLeftOrUp(tem);

                    tem = Add(tem);

                    tem = MoveLeftOrUp(tem);

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        map[r, c] = tem[c];

                    }

                }

                map = Program.CreateNewNumber(map);

                return map;

            }

            return map;

        }

        /// <summary>2048右移動(dòng)算法

        /// 2048右移動(dòng)算法

        /// </summary>

        /// <param name="map">地圖二維數(shù)組</param>

        /// <returns></returns>

        public int[,] MoveArray2Right(int[,] map)

        {

            //0,2,2,4     0,0,4,4

            //2,0,8,4     0,2,8,4

            //0,0,2,2     0,0,0,4

            //2,4,4,4     0,2,4,8

            bool b = true;

            if (Program.IsHNoAdd(map) && !Program.IsNull(map)) { b = false; }

            if (b)

            {

                int[] tem = new int[map.GetUpperBound(0) + 1];


                for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

                {

                    for (int c = 3; c >= 0; c--)

                    {

                        tem[3 - c] = map[r, c];

                    }

                    tem = MoveLeftOrUp(tem);

                    tem = Add(tem);

                    tem = MoveLeftOrUp(tem);

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        map[r, c] = tem[3 - c];

                    }

                }

                map = Program.CreateNewNumber(map);

                return map;

            }

            return map;

        }

        /// <summary> 2048上移動(dòng)算法

        /// 2048上移動(dòng)算法

        /// </summary>

        /// <param name="map">地圖二維數(shù)組</param>

        /// <returns></returns>

        public int[,] MoveArray2Up(int[,] map)

        {

            bool b = true;

            if (Program.IsVNoAdd(map) && !Program.IsNull(map)) { b = false; }

            if (b)

            {

                int[] tem = new int[map.GetUpperBound(0) + 1];


                for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

                {

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        tem[c] = map[c, r];

                    }

                    tem = MoveLeftOrUp(tem);

                    tem = Add(tem);

                    tem = MoveLeftOrUp(tem);

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        map[c, r] = tem[c];

                    }

                }

                map = Program.CreateNewNumber(map);

                return map;

            }

            return map;

        }

        /// <summary>2048下移動(dòng)算法

        /// 2048下移動(dòng)算法

        /// </summary>

        /// <param name="map">地圖二維數(shù)組</param>

        /// <returns></returns>

        public int[,] MoveArray2Down(int[,] map)

        {

            bool b = true;

            if (Program.IsVNoAdd(map) && !Program.IsNull(map)) { b = false; }

            if (b)

            {

                int[] tem = new int[map.GetUpperBound(0) + 1];


                for (int r = 0; r < map.GetUpperBound(0) + 1; r++)

                {

                    for (int c = 3; c >= 0; c--)

                    {

                        tem[3 - c] = map[c, r];

                    }

                    tem = MoveLeftOrUp(tem);

                    tem = Add(tem);

                    tem = MoveLeftOrUp(tem);

                    for (int c = 0; c < map.GetUpperBound(0) + 1; c++)

                    {

                        map[3 - c, r] = tem[c];

                    }

                }

                map = Program.CreateNewNumber(map);

                return map;

            }

            return map;

        }

    }

}

好啦,今天的分享就到這里,內(nèi)容可能有點(diǎn)多,大家可以直接復(fù)制到IDE里面測(cè)試,在IDE里面具體查看代碼喲!我們下期再見(jiàn)吧??!

控制臺(tái)2048游戲的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
关岭| 探索| 磴口县| 乌拉特后旗| 闻喜县| 河津市| 太康县| 封开县| 通渭县| 永州市| 山西省| 台中县| 巫山县| 成武县| 通州区| 临邑县| 韩城市| 崇信县| 车致| 新田县| 诸城市| 瑞金市| 隆回县| 松阳县| 天等县| 曲松县| 宜川县| 双柏县| 呼玛县| 宁夏| 元谋县| 梁河县| 富川| 平泉县| 临武县| 宣恩县| 昭平县| 花垣县| 渑池县| 青河县| 新安县|