做窗体扑克牌游戏,在pictureBox里添加了一整副扑克牌。
如何让每个牌附带各自的点数,可访问。
我尝试用Tag属性做,但是发现不可以获取到值。(初学,不知道是不是可以用)。
希望大神求解。

解决方案 »

  1.   

    Tag可以。Tag是object类型的,需要强制类型转换:
    int id = (int)pic.Tag;
      

  2.   


    我是这样写的:
    imageList1.Images[0].Tag = 1;
    label12.Text = (String)imageList1.Images[0].Tag;
    但是label12.Text上不显示内容哎
      

  3.   

    label12.Text = ((int)imageList1.Images[0].Tag).ToString();
      

  4.   

    出错了,感觉不能有问题啊。错误列表也没提示,运行时候出错的。应该是imageList1.Images[0].Tag为null了,所以报未将对象引用到实例。。
    你确定你给Tag赋值了?
      

  5.   

    应该是imageList1.Images[0].Tag为null了,所以报未将对象引用到实例。。
    你确定你给Tag赋值了?
    imageList1.Images[0].Tag = 1;我是这样赋的值。也不知道对不对
      

  6.   

    imageList1.Images[0]这样调用每次都返回一个新的图像的,所以你上面那些调用是两个不同的对象了;应该先设置好Image i1,image i2...这些图片属性后再添加到imageList1当中 imageList1.Images.Add或者你压根不要imageList1定义一个类
    public class 扑克牌
    {
         public Bitmap surface; //牌的图片
         public int point;      //点数
         public ......          //其他属性 
    }使用IList<扑克牌> 扑克牌集=new List<扑克牌>();
      

  7.   

    你去看 ImageList this[int index] 实现 
      

  8.   


    不是很懂。我试了下,在pictureBox控件里设置它的Tag属性很好用。
    但是一放到imageList里面就不行了(imageList1.Images.Add(pictureBox1.image))。就出那个错误。
      

  9.   

    还有如果用这个写.上面的Bitmap surface的图片怎么添加到扑克牌集.Add()里面,(没用过)
    还有定义的这个类是要写到program.cs文件里面么
      

  10.   

    还有如果用这个写.上面的Bitmap surface的图片怎么添加到扑克牌集.Add()里面,(没用过)
    还有定义的这个类是要写到program.cs文件里面么为什么要守着imagelist不放呢,添加扑克牌进集合  就是  扑克牌集.Add(new 扑克牌);
      

  11.   

    会啊。以前学的都是控制台很好做。
    刚刚接触窗体,我用控制台是这样写的
    cards.Add(new Card("黑桃",cardnum1));
    现在定义的那个扑克牌类有public Bitmap surface
    现在cards.Add(new Card(?));?号里面怎么写。
      

  12.   

    看你从哪里获取图片资源了,在本地可以
    cards.Add(new Card(new Bitmap("图片路径"),"黑桃",cardnum1)); 类似这样
    或者在资源列表
      

  13.   


    哦。那这些代码要写在哪里。我写在From1.cs,然后设计页面就出错了。
      

  14.   

    你控制台版本的扑克牌小游戏已经做了?
    代码不多可以发上来
    看看是否有能力帮你转换成winform的,只是试一试,能力有限啊!
      

  15.   


    namespace _21点游戏_控制台版_
    {
        public class Card {
            public int num;
            public string color;
            public string cardnum;
            public Card(int num,string color,string cardnum) {
                this.color = color;
                this.num = num;
                this.cardnum = cardnum;
            }
        }
        public class CardList {
            List<Card> cards = new List<Card>();
            public void List() {
                int x;
                string cardnum1;
                for (x = 1; x <=10; x++)
                {
                    cardnum1=Convert.ToString(x);
                    cards.Add(new Card( x,"黑桃",cardnum1));
                    cards.Add(new Card(x, "梅花", cardnum1));
                    cards.Add(new Card(x, "红桃", cardnum1));
                    cards.Add(new Card(x, "方块", cardnum1));
                    
                }
                cards.Add(new Card(10, "黑桃", "J"));
                cards.Add(new Card(10, "梅花", "J"));
                cards.Add(new Card(10, "红桃", "J"));
                cards.Add(new Card(10, "方块", "J"));
                cards.Add(new Card(10, "黑桃", "Q"));
                cards.Add(new Card(10, "梅花", "Q"));
                cards.Add(new Card(10, "红桃", "Q"));
                cards.Add(new Card(10, "方块", "Q"));
                cards.Add(new Card(10, "黑桃", "K"));
                cards.Add(new Card(10, "梅花", "K"));
                cards.Add(new Card(10, "红桃", "K"));
                cards.Add(new Card(10, "方块", "K"));
            }
            public void ResetCard() {
                int x;
                Card TapCard = new Card(1,"花色","X");
                Random ran = new Random();
                for (int i = 0; i < 500; i++) {
                    x = ran.Next(0, 52);
                    TapCard = cards[0];
                    cards[0] = cards[x];
                    cards[x] = TapCard;
                }
            }
            public Card PutCard() {
                Card Tap= new Card(1, "花色", "X");
                Tap= cards[0];
                cards.RemoveAt(0);
                return Tap;
            
            }
        }
        public class Game
        {
            List<Card> PlayerList = new List<Card>();
            List<Card> PCList = new List<Card>();
            CardList card1 = new CardList();
            public void GameStart()
            {
                place1://重新开始游戏
                int PlayerCount, PcCount;
                int PlayerMoney=1000, PcMoney=1000;
                string key1,key2,key3;//key1为游戏开始的判定,key2为摸牌判定,key3为赌金完的判定
                int tap;//每局的赌金
                place:while (true)
                {//游戏最起初开始循环
                    if (PlayerMoney <= 0) {
                        Console.WriteLine("你已经输掉了所有赌金,是否重新开始游戏(y开始,n放弃)");
                        key3 = Console.ReadLine();
                        if (key3 == "y") {
                            goto place1;
                        }
                        if (key3 == "n") {
                            Console.WriteLine("游戏结束");
                            break;
                        }
                    }
                    if (PcMoney <= 0)
                    {
                        Console.WriteLine("恭喜你已经赢取了所有赌金,是否重新开始游戏(y开始,n放弃)");
                        key3 = Console.ReadLine();
                        if (key3 == "y")
                        {
                            goto place1;
                        }
                        if (key3 == "n")
                        {
                            Console.WriteLine("游戏结束");
                            break;
                        }
                    }
                    Console.WriteLine("玩家目前赌金:" + PlayerMoney);
                    Console.WriteLine("庄家目前赌金:" + PcMoney);
                    Console.WriteLine();
                    Console.Write("输入y继续游戏,输入n结束游戏");
                    key1 = Console.ReadLine();
                    if (key1 == "y")
                    {//游戏开始判定
                        PlayerCount = 0;
                        PcCount = 0;
                        Console.Write("请下注:");
                        tap = Convert.ToInt32(Console.ReadLine());
                        card1.List();
                        card1.ResetCard();
                        PlayerList.Add(card1.PutCard());//发牌
                        PCList.Add(card1.PutCard());
                        PlayerList.Add(card1.PutCard());
                        PCList.Add(card1.PutCard());
                        Console.WriteLine("你的手牌:");
                        foreach (Card m in PlayerList)
                        {
                            if (m.cardnum == "1") {
                                Console.Write("您拿到了" + m.color + m.cardnum + ",请输入您选择的点数1或者11:");
                                m.num = Convert.ToInt32(Console.ReadLine());
                            }
                            Console.WriteLine(m.color + " " + m.cardnum + "点数" + m.num);
                            PlayerCount += m.num;
                        }
                        Console.WriteLine("你的点数之和:" + PlayerCount);
                        Console.WriteLine();
                        Console.WriteLine("庄家手牌:(第一张为暗牌)");
                        Console.WriteLine(PCList[1].color + " " + PCList[1].cardnum + "点数" + PCList[1].num);
                        PcCount = PCList[0].num + PCList[1].num;
                        while (true)
                        {//第一次摸牌的循环
                            Console.Write("是否继续摸牌(y继续,n放弃)");
                            key2 = Console.ReadLine();
                            if (key2 == "y")
                            {
                                PlayerCount = 0;
                                PlayerList.Add(card1.PutCard());
                                Console.WriteLine("你的手牌:");
                                foreach (Card m in PlayerList)
                                {
                                    if (m.cardnum == "1")
                                    {
                                        Console.Write("您拿到了" + m.color + m.cardnum + ",请输入您选择的点数1或者11:");
                                        m.num = Convert.ToInt32(Console.ReadLine());
                                    }
                                    Console.WriteLine(m.color + " " + m.cardnum + "点数" + m.num);
                                    PlayerCount += m.num;
                                }
                                Console.WriteLine("你的点数之和:" + PlayerCount);
                                if (PlayerCount > 21)
                                {
                                    Console.WriteLine("爆牌,输掉了此场");
                                    PlayerMoney -= tap;
                                    PcMoney += tap;
                                    PlayerList.Clear();
                                    PCList.Clear();
                                    break;
                                }
                            }
                            if (key2 == "n")
                            {
                                int x = 2;
                                while (true)
                                {//庄家摸牌的循环
                                    if (PcCount <= 16)
                                    {
                                        PCList.Add(card1.PutCard());
                                        PcCount += PCList[x].num;
                                        x++;
                                    }
                                    else
                                    {
                                        Console.WriteLine("庄家手牌:");
                                        foreach (Card m in PCList)
                                        {
                                            Console.WriteLine(m.color + " " + m.cardnum + "点数" + m.num);
                                        }
                                        Console.WriteLine("庄家点数之和:" + PcCount);
                                        if (PcCount > 21)
                                        {
                                            Console.WriteLine("庄家爆牌,你赢了!");
                                            PlayerMoney += tap;
                                            PcMoney -= tap;
                                        }
                                        if (PcCount <= 21 && PcCount > PlayerCount)
                                        {
                                            Console.WriteLine("庄家点数之和大于你,你输了!");
                                            PlayerMoney -= tap;
                                            PcMoney += tap;
                                        }
                                        if (PcCount <= 21 && PlayerCount > PcCount)
                                        {
                                            Console.WriteLine("你的点数之和大于庄家,你赢了!");
                                            PlayerMoney += tap;
                                            PcMoney -= tap;
                                        }
                                        if (PcCount <= 21 && PcCount == PlayerCount)
                                        {
                                            Console.WriteLine("庄家点数之和你相同,平局!");
                                        }
                                        PlayerList.Clear();
                                        PCList.Clear();
                                        goto place;
                                    }
                                }
                            }
                        }
                    }
                    if (key1 == "n") {
                        Console.WriteLine("游戏结束");
                        break;
                    }
                }        }    }
        class Program
        {
            static void Main(string[] args)
            {
                Game game1 = new Game();
                game1.GameStart();
            }
        }
    }
      

  16.   

    1:首先定义一整副扑克牌,去掉大小王,共52张。A可做1点或11点。2~9按牌面。
       10~K为10点。
    2:构造洗牌与发牌的方法。
    3:庄家暗一张,明一张。玩家可见自己所有牌。(初始每人发两张牌)
    4:黑杰克:若庄家有10和A的时候,此时为黑杰克。
    如果玩家有黑杰克,庄家没有黑杰克,玩家就能赢得2倍的赌金(1赔2)。如果庄家的明牌有一张A,则玩家可以考虑买不买保险,金额是赌筹的一半。如果庄家是blackjack,那么玩家拿回保险金并且直接获胜;如果庄家没有blackjack则玩家输掉保险继续游戏。
    5:庄家若不足16点,就继续不牌,直至16点为止。
    6:若庄家与玩家点数均小于等于21点且玩家大于庄家,玩家赢。玩家大于21点,庄家不摸牌即赢。1. 定义一个扑克牌类card。包括花色,牌面点数。
    2. 定义CardList类,使用泛型来定义一整副扑克牌,52张。在CardList类里添加洗牌ResetCard方法,添加发牌PutCard方法。
    3. 定义玩家Player类,使用泛型来定义玩家手中扑克牌。
    4. 定义庄家PC类,使用泛型来定义庄家手中扑克牌。
    5. 定义游戏Game类,创建GameStart方法(用于一开始的发牌),创建Gaming方法(将各种规则添加)。
    6. 在Main方法中开始游戏,结束游戏。自己写的
      

  17.   

    public enum 花色{黑桃,梅花,方块,红桃}
    public class
    {
       public image img{get;set;}
       public int number{get;set;}
       public 花色 style {get;set;}
    }
      

  18.   


    TAG肯定可以的
    不行。imageList.image[0].Tag=1.这样赋不了值。始终都是NULL
    但是pictureBox这样就可以。可能imageList控件的问题。
      

  19.   

    你的email呢,我把代码发到你邮箱你自己完善下
      

  20.   

    不好意思。刚刚去上课了。
    [email protected]
    我研究研究。谢谢你。辛苦了