Mr.Jealousy 2015-06-05 11:45 采纳率: 100%
浏览 1597
已采纳

代码没提示有错误,点调试什么也没有,一个比较扑克牌大小的程序

  public class Poker
    {
        public string Suit { get; set; }
        public string Value { get; set; }
        public  Poker()
        {
            int m;
            Random r1 = new Random();
            m = r1.Next(1, 5);
            int n;
            Random r2 = new Random();
            n = r2.Next(1, 14);
            if (m == 1)
                Suit = "黑桃";
            else if (m == 2)
                Suit = "红桃";
            else if (m == 3)
                Suit = "方块";
            else
                Suit = "梅花";
            if (n == 1)
                Value = "A";
            if (n == 2)
                Value = "2";
            if (n == 3)
                Value = "3";
            if (n == 4)
                Value = "4";
            if (n == 5)
                Value = "5";
            if (n == 6)
                Value = "6";
            if (n == 7)
                Value = "7";
            if (n == 8)
                Value = "8";
            if (n == 9)
                Value = "9";
            if (n == 10)
                Value = "10";
            if (n == 11)
                Value = "J";
            if (n == 12)
                Value = "Q";
            else
                Value = "K";
        }       
    }
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;

        }
        public int GetValue(Poker ob)
        {
            if (ob.Value.Equals("A"))
                return 1;
            else if (ob.Value.Equals("2"))
                return 2;
            else if (ob.Value.Equals("3"))
                return 3;
            else if (ob.Value.Equals("4"))
                return 4;
            else if (ob.Value.Equals("5"))
                return 5;
            else if (ob.Value.Equals("6"))
                return 6;
            else if (ob.Value.Equals("7"))
                return 7;
            else if (ob.Value.Equals("8"))
                return 8;
            else if (ob.Value.Equals("9"))
                return 9;
            else if (ob.Value.Equals("10"))
                return 10;
            else if (ob.Value.Equals("J"))
                return 11;
            else if (ob.Value.Equals("Q"))
                return 12;
            else
                return 13;
        }//方法:获取牌的大小

        public static Poker[] Shuffle()
        {           
            Poker[] pokers = new Poker[52];           
            for (int i = 0; i < 52; i++)
            {            
                pokers[i] = new Poker();                
                    for (int u = 0; u < i; u++)
                    {
                        while (pokers[u].Suit.Equals(pokers[i].Suit) == true && pokers[u].Value.Equals(pokers[i].Value) == true)
                        {
                            pokers[i] = null;
                            pokers[i] = new Poker();
                            u = 0;
                            continue;
                        }
                    }
            }              
            return pokers;            
        }//方法:洗牌,生成一副牌

        Poker[] pokers = Shuffle();   
        int click1_time = 1;
        Poker[] gamerpoker = new Poker[26];
        Poker[] AIpoker = new Poker[26];

        private void button1_Click(object sender, EventArgs e)
        {
            if (click1_time == 26)
                MessageBox.Show("没有牌了!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            if (click1_time < 26)
            {
                listBox1.Items.Add("???");
                AIpoker[click1_time] = pokers[2 * click1_time - 2];
                gamerpoker[click1_time] = pokers[2 * click1_time-1];
                listBox2.Items.Add(gamerpoker[click1_time-1].Suit + gamerpoker[click1_time-1].Value);
                click1_time++;
            }
        }//按顺序摸牌
        int click2_time = 0;
        int AIpoint = 0;
        int gamerpoint = 0;
        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.SelectedIndex = click2_time;
            listBox2.SelectedIndex = click2_time;
            listBox1.Items[click2_time] = AIpoker[click2_time].Suit + AIpoker[click2_time].Value;

            if (GetValue(AIpoker[click2_time]) > GetValue(gamerpoker[click2_time]))
            {
                AIpoint += 1;
                label5.Text = "电脑+1";
                label3.Text += "{0},AIpoint";
            }
            if (GetValue(AIpoker[click2_time]) < GetValue(gamerpoker[click2_time]))
            {
                gamerpoint += 1;
                label5.Text = "玩家+1";
                label4.Text += "{0},gamerpoint";
            }
            click2_time++;
        }//比较大小并计分    
    }
  • 写回答

2条回答 默认 最新

  • danielinbiti 2015-06-05 12:56
    关注
    生成牌的效率太低了,这重复率得多高,运行个几小时可能能初始化完52张牌
     public static Poker[] Shuffle()
            {           
                Poker[] pokers = new Poker[52];           
                for (int i = 0; i < 52; i++)
                {            
                    pokers[i] = new Poker();                
                        for (int u = 0; u < i; u++)
                        {
                            while (pokers[u].Suit.Equals(pokers[i].Suit) == true && pokers[u].Value.Equals(pokers[i].Value) == true)
                            {
                                pokers[i] = null;
                                pokers[i] = new Poker();
                                u = 0;
                                continue;
                            }
                        }
                }              
                return pokers;            
            }//方法:洗牌,生成一副牌
    
    

    改改方法

     class PokerContainer
        {
            private static PokerContainer pc = new PokerContainer();
            private List<string> pokerList = new List<string>();
            private string[] hsArr = new string[] { "黑桃", "红桃", "方块", "梅花" };
            private string[] numArr = new string[] { "A", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
            public static PokerContainer getInstance(){
                return pc;
            }
            public void init()
            {
                for (int i = 1; i < 5; i++)
                {
                    for (int j = 1; j <= 13; j++)
                    {
                        pokerList.Add(hsArr[i - 1] + "," + numArr[j]);
                    }
                }
            }
            public string[] getOne()
            {
                int m;
                Random r1 = new Random(10);
                m = r1.Next(1, pokerList.Count + 1);
                string[] arr = getInfo(pokerList[m-1]);
                pokerList.RemoveAt(m-1);
                return arr;
            }
            private string[] getInfo(string info)
            {
                string[] arr = info.Split(',');
                return arr;
                //Suit = arr[0];
                //Value = arr[1];
            }
            public PokerContainer()
            {
                init();
            }
        }
    
            public class Poker
        {
            public string Suit { get; set; }
            public string Value { get; set; }
    
            public Poker()
            {
                string[] arr = PokerContainer.getInstance().getOne();
                Suit = arr[0];
                Value = arr[1];
            }
        }
    
            最后去掉while比较
            public static Poker[] Shuffle()
            {
                Poker[] pokers = new Poker[52];
                for (int i = 0; i < 52; i++)
                {
                    pokers[i] = new Poker();
                }
                return pokers;
            }//方法:洗牌,生成一副牌
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型