当前位置:编程学习 > C#/ASP.NET >>

求“QuickMatch 牌类游戏”的C#代码

规则:
1:多人游戏,可以有2到4个玩家。
2:给每个玩家一组5张的牌。剩下的牌被堆积在中间。
3:玩家可以从这堆牌子抽取一张牌或拾取由一个玩家抛出的某张牌。
4:第一个收集到同一花色5张牌的玩家赢得游戏。


设计规则:
1:2-4人游戏。
2:每个玩家的姓名都是用户在开始游戏前输入的。
3:牌是随机分发给玩家的。剩下的牌被堆积在中间。
4:首先输入姓名的玩家获得优先机会。
5:其他的玩家按照他们输入姓名的顺序获得机会。
6:第一个玩家需要从牌堆中挑出最上面的牌。
7:玩家挑出的牌被添加到他或她的牌集合。当向玩家的牌集合添加新牌时,集合牌的总数超过5,因此,玩家需要放弃他或她集合中的一张牌,并将该张牌翻过来可以让其他玩家看到的牌。
8:当第一个玩家放弃牌后,下一个玩家就有机会挑出一张牌。除了第一个玩家的所有玩家可以从堆中挑出一张牌或挑出前一个玩家放弃的那张牌。
9:一个玩家放弃一张牌后,应检查玩家的牌集合以确定是否所有的牌属于同一套。 --------------------编程问答-------------------- --------------------编程问答-------------------- using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Stack<int> dealer = GetCardDealer();
                while (dealer.Count >= 10)
                {
                    Play(dealer);
                }
                if (Console.ReadKey().Key != ConsoleKey.Enter) break;
            }
        }

        // 比牌。A,B各分5张,比谁重复的花色多。
        static void Play(Stack<int> dealer)
        {
            int[] suitsA = new int[4];
            int[] suitsB = new int[4];

            Console.WriteLine("Player A         Player B");
            Console.WriteLine("=========================");
            for (int i = 0; i < 5; i++)
            {
                int cardA = dealer.Pop();
                int cardB = dealer.Pop();
                Console.WriteLine("{0,2} {1,-8}    {2,2} {3,-8}",
                    (cardA >> 2)+1, (Suit)(cardA & 3),
                    (cardB >> 2)+1, (Suit)(cardB & 3)
                    );

                suitsA[cardA & 3]++;
                suitsB[cardB & 3]++;
            }

            int maxA = 0, maxB = 0;
            string resultA="", resultB="";

            for (int i = 0; i < suitsA.Length; i++)
            {
                if (suitsA[i] > maxA)
                {
                    maxA = suitsA[i];
                    resultA = string.Format("Player A got {0} {01}s", maxA, (Suit)i);
                }
                if (suitsB[i] > maxB)
                {
                    maxB = suitsB[i];
                    resultB = string.Format("Player B got {0} {01}s", maxB, (Suit)i);
                }
            }
            Console.WriteLine("\n{0}\n{1}\n\n", resultA, resultB);
        }

        // 准备一副52张的牌
        static Stack<int> GetCardDealer()
        {
            int[] cards = new int[52];
            for (int i = 0; i < cards.Length; i++) cards[i] = i;
            Shuffle(cards);

            return new Stack<int>(cards);
        }

        // 洗牌
        static void Shuffle(int[] cards)
        {
            Random random = new Random();
            for (int i = cards.Length - 1; i > 0; i--)
            {
                int j = random.Next(i);

                // swap 
                int tmp = cards[i];
                cards[i] = cards[j];
                cards[j] = tmp;
            }
        }

        enum Suit
        {
            Spade = 0,
            Heart = 1,
            Club  = 2,
            Diamond = 3,
        }
    }
}

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,