HashTable的使用,扑克牌发牌游戏

l  场景

主要实现以下功能:

1.      首先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下:
 
红桃按照从小到大依次为:1-13
 
方块按照从小到大依次为:
14-26
 
黑桃按照从小到大依次为:
27-39
 
梅花按照从小到大依次为:
40-52
 
小王为53,大王为54

2.      按照以上编号规则, 每次随机从该数组中抽取一个数字,为玩家分配13张牌。

l  实验方法

1.   在控制台应用程序程序中编写代码,项目名为HashTable

l  实验预估时间

50分钟

实验结果

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

namespace HashTable
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable hb = new Hashtable();
                        
            for (int i = 0; i < 54; i++)
            {
                int num = i / 13;
                int key = i + 1;
                if (num == 0) //红桃
                {
                    if (i < 10)
                        hb.Add(key, "红桃" + key);
                    else if (i == 10)
                        hb.Add(key, "红桃J");
                    else if (i == 11)
                        hb.Add(key, "红桃Q");
                    else if (i == 12)
                        hb.Add(key, "红桃K");               
                }
                else if (num ==1) //方块
                {
                    int keyNum = key - num * 13;
                    if (i < 23)
                        hb.Add(key, "方块" + keyNum);
                    else if (i == 23)
                        hb.Add(key, "方块J");
                    else if (i == 24)
                        hb.Add(key, "方块Q");
                    else if (i == 25)
                        hb.Add(key, "方块K");
                }
                else if (num == 2) //黑桃
                {
                    int keyNum = key - num * 13;
                    if (i < 36)
                        hb.Add(key, "黑桃" + keyNum);
                    else if (i == 36)
                        hb.Add(key, "黑桃J");
                    else if (i == 37)
                        hb.Add(key, "黑桃Q");
                    else if (i == 38)
                        hb.Add(key, "黑桃K");
                }
                else if (num == 3) //梅花
                {
                    int keyNum = key - num * 13;
                    if (i < 49)
                        hb.Add(key, "梅花" + keyNum);
                    else if (i == 49)
                        hb.Add(key, "梅花J");
                    else if (i == 50)
                        hb.Add(key, "梅花Q");
                    else if (i == 51)
                        hb.Add(key, "梅花K");
                }
                else //num=4
                {
                    if (i == 52)
                        hb.Add(key,"小王");
                    else
                        hb.Add(key,"大王");
                }
            }
            //Console.WriteLine(hb[40]); //测试用
            //Console.Read();

            Random rd = new Random();

            Console.WriteLine("玩家的牌已发,如下:");
            for (int j = 0; j < 13; j++)
            {
                int numCard = rd.Next(1, 55);
                string result = null;

                //避免重复发牌
                try
                {
                   result = hb[numCard].ToString(); //如果取到已经取过的牌,产生异常,此次循环作废,j值不变。
                }

                catch
                { 
                    j--;
                    continue;
                }
                  
                Console.Write(result);
                hb.Remove(numCard);  //每次发完牌将这个牌删除
                Console.Write("\t");
            }
            Console.Read();            
        }
    }
}

 

posted @ 2014-04-29 11:49  YouxiBug  阅读(332)  评论(0编辑  收藏  举报