C# 在类中使用列表+;范围问题

C# 在类中使用列表+;范围问题,c#,list,class,scope,C#,List,Class,Scope,好吧,我已经避免这个问题有一段时间了,但在我继续之前,我需要整理我的代码的范围,我对C#编程非常陌生,所以我一直在使用的坏约定上的任何帮助都会很好 这是我当前的玩家类(我知道你可以使用“Name{get;set}”,例如,但是我在定义时遇到了一些问题,下面是我的2个类、我的顶级王牌类(后来创建了10张顶级王牌)和一个玩家类 //Top trumps class, layout of top trump card defined in here public class T

好吧,我已经避免这个问题有一段时间了,但在我继续之前,我需要整理我的代码的范围,我对C#编程非常陌生,所以我一直在使用的坏约定上的任何帮助都会很好

这是我当前的玩家类(我知道你可以使用“Name{get;set}”,例如,但是我在定义时遇到了一些问题,下面是我的2个类、我的顶级王牌类(后来创建了10张顶级王牌)和一个玩家类

        //Top trumps class, layout of top trump card defined in here
    public class TopTrumps 
    {
        public int height;
        public int length;
        public int speed;
        public int CardID;

        public TopTrumps(int a, int b, int c, int d)  
        {
            this.height = a;   
            this.length = b;
            this.speed = c;
        }
    }

    // The player class, Containing player name, Score etc.
    public class Player
    {

        public string Name;
        public int Score;
        public bool Turn;
   //     public List<TopTrumps> PlayerDeck = new List<TopTrumps>();


        public Player(string a, int b, bool c)
        {
            this.Name = a;
            this.Score = b;
            this.Turn = c;
     //       this.PlayerDeck = d;
        }
    }
任何关于如何正确组织这些代码的帮助都会有很大的帮助,除非我能想出如何分解我的程序,并得到一个在课堂上工作的列表,否则我无法继续,我已经在下面发布了一个完整的源代码,如果你需要更好地理解我的程序,非常感谢

-汤姆

公共部分类游戏:表单
{
//顶级王牌类,此处定义的顶级王牌布局
公共阶级的王牌
{
公众内部高度;
公共整数长度;
公共交通速度;
公共信息卡;
公共TopTrumps(inta,intb,intc,intd)//将高度、长度和速度作为参数传递给课堂,例如“TopTrumps(10,10,20);”
{
this.height=a;//将对象高度设置为a的解析值
这个长度=b;
这个速度=c;
这个.cardd=d;
}
}
//玩家类,包含玩家姓名、分数等。
公开课选手
{
公共字符串名称;
公众智力得分;
公共厕所;
//public List PlayerDeck=新列表();
公共播放器(字符串a、整数b、布尔c)
{
this.Name=a;
这个分数=b;
这个.Turn=c;
//this.PlayerDeck=d;
}
}
publicplayer player1=新玩家(“新玩家”,0,true);//创建新玩家
公共游戏()
{
初始化组件();
}
私有void隐藏\u单击(对象发送方,事件参数e)
{
Form1主屏幕=新Form1();
this.Hide();
MainScreen.ShowDialog();
}
公共无效的释放卡\u单击(对象发送者,事件参数e)
{
List Trumps=new List();//创建一组顶级Trumps
//我们现在可以轻松访问每个顶级王牌变量,例如“王牌[1]。高度=5”,将修改第二张牌的高度
王牌。添加(新的头号王牌(10,20,50,1));//将每个头号王牌(其中10张)添加到新创建的列表中
添加(新的TopTrump(15,50,40,2));//格式=(高度、长度、速度、卡迪德)
新增(新的热门特朗普(6,4,20,3));
新增(新的热门特朗普(11,20,30,4));
新增(新的顶级特朗普(10,70,25,5));
新增(新的热门特朗普(10,14,35,6));
新增(新的热门特朗普(20,80,40,7));
新增(新的顶级特朗普(10,44,45,8));
新增(新的顶级特朗普(13,67,30,9));
新增(新的顶级特朗普(14,12,20,10));
/////////////////////
//洗牌程序
/////////////////////
Random Random=new Random();//创建新的随机数
int n=Trumps.Count;//创建特朗普长度的变量
//列表框1.Items.Add(n);
而(n>1)
{
n--;//n立即减少
int k=random.Next(n+1);//创建一个介于0和9(列表的可寻址范围)之间的随机数
TopTrumps n_value=Trumps[k];//在临时存储器中存储随机数索引内容
特朗普[k]=特朗普[n];//将随机数索引与第n个索引交换(在第1个循环中,随机数索引将与第10张卡交换值)
Trumps[n]=n_值;//将第n张卡设置为随机数索引内容
}
for(int i=0;i对于(int i=0;i计算机是在
DealCards\u单击
方法中定义的,因此尝试在该方法之外访问它将失败。如果您希望计算机成为类成员,请按照您定义的
Player1

另外,还有几条建议可以使您的代码更易于阅读(和维护)

  • 以小写字母开始命名变量
  • 在同一位置定义所有类成员/属性(更容易找到)
  • 使用一些符号将类成员与局部范围变量分开(我通常以m_2;作为成员开始)

计算机是在
DealCards\u Click
方法中定义的,因此尝试在该方法之外访问它将失败。如果您希望计算机成为类成员,请按照您定义的
Player1

另外,还有几条建议可以使您的代码更易于阅读(和维护)

  • 以小写字母开始命名变量
  • 在同一位置定义所有类成员/属性(更容易找到)
  • 使用一些符号将类成员与局部范围变量分开(我通常以m_2;作为成员开始)

我希望您不要期望工作代码作为答案,所以这里
            /////////////////////////////
        // Create computer card deck
        /////////////////////////////

        Player Computer = new Player("Computer", 0, true);  //Create new player

        List<TopTrumps> ComputerDeck = new List<TopTrumps>();

        ComputerDeck = Trumps.GetRange(5, 5);

        for (int i = 0; i <ComputerDeck.Count; i++)
            {
                listBox3.Items.Add("COMP Card [" + i + "] : " + ComputerDeck[i].height);
             }
        listBox3.Items.Add(Computer.Name);
        private void button1_Click(object sender, EventArgs e)
    {
        Player1.Name = PlayerName.Text;
    }
public partial class Game : Form
{


    //Top trumps class, layout of top trump card defined in here
    public class TopTrumps 
    {
        public int height;
        public int length;
        public int speed;
        public int CardID;

        public TopTrumps(int a, int b, int c, int d)  //Pass height length and speed as arguements to class, Example 'TopTrumps(10,10,20);'
        {
            this.height = a;   // Set objects height to the parsed value of a
            this.length = b;
            this.speed = c;
            this.CardID = d;

        }
    }

    // The player class, Containing player name, Score etc.
    public class Player
    {

        public string Name;
        public int Score;
        public bool Turn;
   //     public List<TopTrumps> PlayerDeck = new List<TopTrumps>();


        public Player(string a, int b, bool c)
        {
            this.Name = a;
            this.Score = b;
            this.Turn = c;
     //       this.PlayerDeck = d;
        }
    }

    public Player player1 = new Player("New Player", 0, true);  //Create new player

    public Game()
    {
        InitializeComponent();
    }


    private void Hide_Click(object sender, EventArgs e)
    {
        Form1 MainScreen = new Form1();
        this.Hide();
        MainScreen.ShowDialog();

    }

    public void DealCards_Click(object sender, EventArgs e)
    {

        List<TopTrumps> Trumps = new List<TopTrumps>(); //Create a list of deck of top trumps
        // We can now easily access each top trump card variables, For example 'Trumps[1].height = 5', will modify the 2nd cards height

        Trumps.Add(new TopTrumps(10, 20, 50,1));   //Add each top trump card (10 of them) to the newly created list
        Trumps.Add(new TopTrumps(15, 50, 40,2));      //Format = (height, Length, speed, CardID)
        Trumps.Add(new TopTrumps(6, 4, 20,3));
        Trumps.Add(new TopTrumps(11, 20, 30,4));
        Trumps.Add(new TopTrumps(10, 70, 25,5));
        Trumps.Add(new TopTrumps(10, 14, 35,6));
        Trumps.Add(new TopTrumps(20, 80, 40,7));
        Trumps.Add(new TopTrumps(10, 44, 45,8));
        Trumps.Add(new TopTrumps(13, 67, 30,9));
        Trumps.Add(new TopTrumps(14, 12, 20,10));

        /////////////////////
        //Shuffle routine
        /////////////////////

        Random random = new Random(); //Create new random number
        int n = Trumps.Count;   //Create variable of Trump decks length 
        //    listBox1.Items.Add(n);

        while (n > 1)
        {
            n--;    //n immedietely decreased
            int k = random.Next(n + 1);  //Create a random number between 0 and 9 (The adressable range of the list)
            TopTrumps nth_value = Trumps[k];     //Store random number index contents, in temp storage 
            Trumps[k] = Trumps[n];           //Swap the random number index with the nth index (On 1st loop, Random number index will swap values with 10th card)
            Trumps[n] = nth_value;       //Set the nth card to the random numbers index contents
        }

        for (int i = 0; i < Trumps.Count; i++)
        {
            listBox2.Items.Add("Card [" + i + "] : " + Trumps[i].CardID);
        }


        /////////////////////////////
        // Create player 1 card deck
        /////////////////////////////


        List<TopTrumps> PlayerDeck = new List<TopTrumps>();
        listBox1.Items.Add(PlayerDeck.Count);
        PlayerDeck = Trumps.GetRange(0, 5);
        listBox1.Items.Add(PlayerDeck.Count);

        for (int i = 0; i < PlayerDeck.Count; i++)
        {
            listBox1.Items.Add("PLAYER Card [" + i + "] : " + PlayerDeck[i].height);
        }

        /////////////////////////////
        // Create computer card deck
        /////////////////////////////

        Player Computer = new Player("Computer", 0, true);  //Create new player

        List<TopTrumps> ComputerDeck = new List<TopTrumps>();

        ComputerDeck = Trumps.GetRange(5, 5);

        for (int i = 0; i <ComputerDeck.Count; i++)
            {
                listBox3.Items.Add("COMP Card [" + i + "] : " + ComputerDeck[i].height);
             }
        listBox3.Items.Add(Computer.Name);

        /////////////////////////
        //Initial deck set up
        /////////////////////////

        CardID.Text = "Card ID: " + PlayerDeck[0].CardID;
        Height.Text = "Height: " + PlayerDeck[0].height;
        Length.Text = "Length: " + PlayerDeck[0].length;
        Speed.Text = "Speed: " + PlayerDeck[0].speed;

        listBox1.Items.Clear();

        listBox1.Items.Add("Card Number: "+PlayerDeck[0].CardID);
        listBox1.Items.Add("");

        listBox1.Items.Add("Height: " + PlayerDeck[0].height);
        listBox1.Items.Add("length: " + PlayerDeck[0].length);
        listBox1.Items.Add("speed: " + PlayerDeck[0].speed);


    }




    private void button1_Click(object sender, EventArgs e)
    {
        Computer.Name = PlayerName.Text;
    }

    private void PlayCard_Click(object sender, EventArgs e)
    {

        bool PlayerWon = false;

        if (Height.Checked)
        {
        //    PlayerDe
        }


    }

}