如果player1与player2的列表相交,如何将标签增加1



我正在做一个Tron游戏,当player1与player2的主体(player2列表(相交时,我试图将标签Score增加1。我几乎什么都试过了,但都没用。有Score1((和Score2((方法,当我杀死第二个玩家时会加1,但第二次它什么也没做。

Player player1;
Player player2;
List<Player> players1 = new List<Player>();
List<Player> players2 = new List<Player>();
public void SetPlayer1() {
var size = new Size(13, 13);
var location = new Point(pbCanvas.Width - pbCanvas.Width / 3, pbCanvas.Size.Height / 2);
player1 = new Player(Brushes.Red, size, location, 3);
}

public void SetPlayer2() {
var size = new Size(13, 13);
var location = new Point(pbCanvas.Width / 3, pbCanvas.Size.Height / 2);
player2 = new Player(Brushes.Blue, size, location, 3);
}
private void Score1() {
var displayScore = 0;
displayScore++;
label1.Text = "Red Score: " + displayScore;
}
private void Score2() {
var displayScore = 0;
displayScore++;
label2.Text = "Blue Score: " + displayScore;
}
private void HandleCollision() {
var players1Delete = new List<Player>();
var players2Delete = new List<Player>();
foreach (var item in players1) {
if (player2.Intersect(item.Rectangle)) {
players2Delete.Add(item);
Score1();
}
if (player1.Intersect(item.Rectangle)) {
players1Delete.Add(item);
Score2();
}
}
foreach (var item in players2) {
if (player1.Intersect(item.Rectangle)) {
players1Delete.Add(item);
Score2();
}
if (player2.Intersect(item.Rectangle)) {
players2Delete.Add(item);
Score1();
}
}
foreach (var item in players1Delete) {
if (item is Player) {
players1.Clear();
players2.Clear();
SetPlayer1();
SetPlayer2();
position = Position.Null;
position1 = Position1.Null;
}
}
foreach (var item in players2Delete) {
if (item is Player) {
players2.Clear();
players1.Clear();
SetPlayer2();
SetPlayer1();
position1 = Position1.Null;
position = Position.Null;
}
}
}

让我们看看Score1():

private void Score1() {
var displayScore = 0;
displayScore++;
label1.Text = "Red Score: " + displayScore;
}

您声明";displayScore";作为LOCAL变量。这意味着它只存在于Score1()中,并且每次运行Score1()时都会重新创建它。将其值设置为零,然后立即将其递增1。实际上,每次运行Score1()时,"红色"的分数都将更改为1。这是你唯一能得到的结果;红色的分数只能是1!

将该变量移到CLASS级别,以便在调用之间保持不变。由于您同时有红色和蓝色分数,我们需要区分这两个值。在这里,我已经从";displayScore";至";redScore":

private int redScore = 0;
private void Score1() {
redScore++;
label1.Text = "Red Score: " + redScore;
}

现在,每次运行Score1()时,上一个分数将加1,标签将更新。由于";redScore";处于CLASS级别时,它将保留其值。

您需要对Score2()和不同的变量执行类似的操作来跟踪Blue分数。

private int blueScore = 0;
private void Score2() {
blueScore ++;
label2.Text = "Blue Score: " + blueScore ;
}

最新更新