基础知识我的代码:
public class Player
{
public ConsoleColor color;
public ConsoleKey upKey, downKey, leftKey, rightKey;
public static Player[] players;
public void addPlayer(ConsoleColor _color, ConsoleKey _upKey, ConsoleKey _downKey, ConsoleKey _leftKey, ConsoleKey _rightKey)
{
Player.players[Player.players.Length] = new Player(_color, _upKey, _downKey, _leftKey, _rightKey);
}
public Player()
{
}
public void attack()
{
}
public Player(ConsoleColor _color, ConsoleKey _upKey, ConsoleKey _downKey, ConsoleKey _leftKey, ConsoleKey _rightKey)
{
color = _color;
upKey = _upKey;
downKey = _downKey;
leftKey = _leftKey;
rightKey = _rightKey;
}
}
void mainLoop()
{
Player.addPlayer(ConsoleColor.DarkGreen, ConsoleKey.W, ConsoleKey.S, ConsoleKey.A, ConsoleKey.D);
Player.addPlayer(ConsoleColor.DarkGreen, ConsoleKey.UpArrow, ConsoleKey.DownArrow, ConsoleKey.LeftArrow, ConsoleKey.RightArrow);
for (int _player = 0; _player < Player.players.Length; _player++)
{
Player.players[_player].attack();
}
}
这样做的目的是使代码可以重用。最后,这将是一个基本的多人游戏。
我目前正在做的是创建课程&#34; Player&#34;它还包含自身的所有实例(对象)的列表。我需要这样做有很多原因,但最重要的是使代码尽可能可重用和可集成。
当我尝试做这个时,我的问题出在&#34; Player.addPlayer()&#34;。如果没有我制作一个Player对象,它就不会接受这个。我宁愿不这样做。
答案 0 :(得分:1)
那是因为addPlayer
也应该是静态的:
public static void addPlayer
但是有一个更大的问题:你的设计。而不是在Player
类中填充所有内容:创建一个新类Players
,在那里创建像addPlayer
这样的非静态成员,并传递Players
的实例。< / p>
与现有方法相比,这是一种更好,更实用的设计。为什么?如果你想分开双方球员怎么办?您无法对它们进行分组,因为它们位于同一个静态列表中。如果你想删除一个等等怎么办
而不是数组,使用List<Player>
,它允许自动调整大小,删除等。
答案 1 :(得分:0)
如果你想在不创建类实例的情况下使用任何方法,你应该像{1}}属性那样使用static
。但是你应该知道实际上是你的类的一个实例,如果你在应用程序启动时有静态方法或属性。
所以如果你想使用像这样的方法addPlayer:
players
你应该这样声明:
Player.addPlayer()