我是一个编程新手,我正在制作一个黑杰克游戏,但是我真的很难从我洗牌的牌中添加一张牌,进入玩家手中,当我调用该Hit函数时,我收到了这条消息:
你调用的对象是空的.
我知道解决方案可能非常明显但你可以帮忙吗?
问题出在DeckClass 的底部,在Hit()Function中
/*主类*/
using System;
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
public class MainClass
{
public static void Main (string[] args)
{
Deck cards = new Deck();
Hand playerHand = new Hand(cards);
Console.WriteLine("Welcome to Black Jack\n\nPress Enter To Start");
Console.ReadLine ();
cards.Hit();
playerHand.PrintHand();
}
}
}
Run Code Online (Sandbox Code Playgroud)
/*卡类*/
using System;
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
public enum Suit {Spades, Hearts, Clubs, Diamonds}
public enum FaceValue {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}
public class Card
{
public Suit CardSuit;
public FaceValue CardValue;
public int iValue;
public Card (Suit cardSuit, FaceValue cardValue, int ivalue)
{
CardSuit = cardSuit;
CardValue = cardValue;
iValue = ivalue;
}
public Card ()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
/*手工班*/
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
public class Hand
{
public List<Card> PlayerHand;
private Deck cardDeck = new Deck();
public Hand (Deck Cards)
{
cardDeck = Cards;
}
public void PrintHand()
{
for (int i = 0; i < PlayerHand.Count; ++i)
{
Console.WriteLine("You have a " + PlayerHand[i].CardValue + " of " + PlayerHand[i].CardSuit);
if (i < PlayerHand.Count)
{
Console.WriteLine ("&");
}
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
/*甲板类*/
using System;
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
public class Deck
{
Hand playerHand;
Random rNumber = new Random();
List<Card> Cards;
public int iValue1 = 11;
public int iValue2 = 2;
public int iValue3 = 3;
public int iValue4 = 4;
public int iValue5 = 5;
public int iValue6 = 6;
public int iValue7 = 7;
public int iValue8 = 8;
public int iValue9 = 9;
public int iValue10 = 10;
public int iValue11 = 10;
public int iValue12 = 10;
public int iValue13 = 10;
public Deck()
{
Cards = NewDeck();
}
private List<Card> NewDeck()
{
var AllSuits = new Suit[]
{
Suit.Spades,
Suit.Hearts,
Suit.Clubs,
Suit.Diamonds
};
var AllFaces = new FaceValue[]
{
FaceValue.Ace,
FaceValue.Two,
FaceValue.Three,
FaceValue.Four,
FaceValue.Five,
FaceValue.Six,
FaceValue.Seven,
FaceValue.Eight,
FaceValue.Nine,
FaceValue.Ten,
FaceValue.Jack,
FaceValue.Queen,
FaceValue.King
};
var AllValues = new int[]
{
iValue1,
iValue2,
iValue3,
iValue4,
iValue5,
iValue6,
iValue7,
iValue8,
iValue9,
iValue10,
iValue11,
iValue12,
iValue13
};
List<Card> myDeck = new List<Card>();
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 12; j++)
{
Card newCard = new Card(AllSuits[i], AllFaces[j], AllValues[j]);
myDeck.Add(newCard);
}
}
List<Card> shuffledDeck = new List<Card> ();
while (myDeck.Count > 0)
{
int c = myDeck.Count;
int n = rNumber.Next (0, c);
// var will translate into an int which will be used to pick the card needed from the list
var value = myDeck[n];
shuffledDeck.Add(value);
myDeck.Remove(value);
}
return shuffledDeck;
}
public void Print()
{
for (int i = 0; i <= 51; i++)
{
Console.WriteLine("You drew a " + (Cards [i].CardValue) + " of " + (Cards [i].CardSuit));
Console.ReadLine ();
}
}
public void Hit()
{
playerHand.PlayerHand.Add(Cards[0]);
Cards.Remove(Cards[0]);
/*var tmp = Cards[0];
Cards.Remove(tmp);
return tmp;*/
}
}
}
Run Code Online (Sandbox Code Playgroud)
public List<Card> PlayerHand;在你的Hand班级永远不会被分配到null.
在Hit,你打电话playerHand.PlayerHand.Add- playerHand.PlayerHand是null,所以调用Add结果NullReferenceException.
通过抛出异常的函数进行调试应该清楚地显示这些问题 - 通过观察使用的变量,您可以看到哪些变量具有预期值,哪些变量没有.