2016-12-08 4 views
0

私はC#の初心者です。イメージリストからイメージをクラスに追加する方法について質問があります。 私が持っているクラスは、これらの画像を追加するために使用されます。これらの画像は、各カードの画像、スーツの名前、面の値、ポイントの値を含む「カード」です。私は各カードのスーツの名前と額面値を追加するコードを作業中の現行のコードを持っていますが、私はイメージリストをイメージに追加するために "for"ループを使って各イメージを追加することができますか?イメージリストからイメージをクラスに追加する

private void FormShuffleCardDeck_Load(object sender, EventArgs e) 
    { 
     string[] suitList = new string[4]; 
     string[] faceList = new string[13]; 
     int[] pointValues = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 
     string face = ""; 
     int counter = 0; 
     for (int i = 0; i < 4; i++) 
      { 
       suitList[i] = i.ToString(); 
       switch (suitList[i]) 
       { 
        case "0": 
         suitList[0] = "Hearts"; 
         break; 
        case "1": 
         suitList[1] = "Clubs"; 
         break; 
        case "2": 
         suitList[2] = "Diamonds"; 
         break; 
        case "3": 
         suitList[3] = "Spades"; 
         break; 
       } 
       for (int k = 0; k < 13; k++) 
       { 
        // face = k.ToString(); 
        faceList[k] = k.ToString(); 
        switch (faceList[k]) 
        { 
         case "0": 
          faceList[0] = "2"; 
          break; 
         case "1": 
          faceList[1] = "3"; 
          break; 
         case "2": 
          faceList[2] = "4"; 
          break; 
         case "3": 
          faceList[3] = "5"; 
          break; 
         case "4": 
          faceList[4] = "6"; 
          break; 
         case "5": 
          faceList[5] = "7"; 
          break; 
         case "6": 
          faceList[6] = "8"; 
          break; 
         case "7": 
          faceList[7] = "9"; 
          break; 
         case "8": 
          faceList[8] = "10"; 
          break; 
         case "9": 
          faceList[9] = "Jack"; 
          break; 
         case "10": 
          faceList[10] = "Queen"; 
          break; 
         case "11": 
          faceList[11] = "King"; 
          break; 
         case "12": 
          faceList[12] = "Ace"; 
          break; 
        } 
        cardDeckList[counter] = new PlayingCard(suitList[i], faceList[k], imageListCards.Images[counter], 1); 
        counter++; 
        listBoxOutput.Items.Add(cardDeckList[counter].ToString()); 
       } 
      } 
    } 

編集: はさらに、私は

以下は私の現在のコードが含まれているクラスで、少なくとも52枚のカードを...新しいオブジェクトのインスタンスを追加しようとしている私は、私が働いているクラスを追加しましたに。

public class PlayingCard 
{ 
    /// <summary> 
    /// Fields: used to store the data about a Playing card (private access for security) 
    /// </summary> 
    private string _faceValue; // face value  
    private string _suit;   // suit value 
    private Image _cardImage; // image of card 
    private double _pointValue; // point Value 

    /// <summary> 
    /// Properties: used to access the fields (get = read, set = modify or write) 
    /// </summary> 
    public string Suit 
    { 
     get { return _suit; } 
     set { _suit = value; } 
    } 
    public string FaceValue 
    { 
     get { return _faceValue; } 
     set { _faceValue = value; } 
    } 
    public Image CardImage 
    { 
     get { return _cardImage; } 
     set { _cardImage = value; } 
    } 
    public double PointValue 
    { 
     get { return _pointValue; } 
     set { _pointValue = value; } 
    } 

    /// <summary> 
    /// The constructor is a special method that instantiates PlayingCard objects (e.g. Ace of Spades). 
    /// </summary> 
    /// <param name="suit">The suit of the playing card (e.g. Hearts, Clubs, Diamonds and Spades)</param> 
    /// <param name="faceValue">The face value of the playing card (numbers 2-10, Jack, Queen, King, Ace)</param> 
    /// <param name="cardImage">The image of the card</param> 
    /// <param name="pointValue">The point value of the card</param> 
    public PlayingCard(string suit, string faceValue, Image cardImage, double pointValue) 
    { 
     _suit = suit; 
     _faceValue = faceValue; 
     _cardImage = cardImage; 
     _pointValue = pointValue; 
    } 
    } 
+0

あなたは語らいながら[ImageList]について話していますか(https://msdn.microsoft.com/en-us/library/system.windows.forms.imagelist( v = 1.10).aspx)? – TaW

+0

はい、ImageListです。 –

答えて

0

は、私の知る限り、あなたのプロジェクトを理解していて、あなたはカードデッキ、 権利を作成したいですか? 私はあなたのコードとアイデアをより簡単に扱うのに役立ついくつかの小さなクラスを設計したと思った。

初めは、カードにぴったりのクラスから始めておくことをお勧めします。

public class Card 
{ 
    public string Name { get; set; } 
    public int FaceValue { get; set; } 
    public int PointValue { get; set; } 
    public string Name { get; set; } 
    public byte[] image { get; set; } 
} 

デッキも同様です。たぶん難しくはありませんが、あなたのカードを保管したり、あなたの心を失うことなくより多くのカードで作業する方が簡単です。

public class Deck 
{ 
    public string Name { get; set; } 
    public ICollection<Card> Cards { get; set; } 
} 

やすいようなもので、あなたのデッキのカードを検索するためのUsing System.Linq;を追加:あなたのデッキの外にカードを取得することがより簡単にする必要があります

Card tmpCard = tmpDeck.Cards.Where(w => w.Name == "MyFavouriteCard").FirstOrDefault();

。あなたのクラスにあなたのカードの画像を保存するために今すぐ

:)

public static byte[] ImageToByte(Image pImage) 
{ 
ImageConverter tmpConverter = new ImageConverter(); 
return (byte[])tmpConverter.ConvertTo(pImage, typeof(byte[])); 
} 

とバックビットマップに保存した画像を変換します。

public static Bitmap ByteToImage(byte[] pImage) 
{ 
    MemoryStream tmpStream = new MemoryStream(); 
    tmpStream.Write(pImage, 0, Convert.ToInt32(pImage.Length)); 
    Bitmap tmpBitmap = new Bitmap(tmpStream, false); 
    tmpStream.Dispose(); 
    return tmpBitmap; 
} 

戻り値のビットマップを例として画像ボックスにロードします。

これはあなたのプロジェクトで少し役に立ちます。または今少なくともあなたはいくつかのカードを一緒に入手する方法を知っています:)

関連する問題