Мое первое предложение заключается в том, что вам нужно отделить свою логику от визуальных элементов. Это можно сделать либо с помощью шаблона MVVM , либо путем написания классов модели данных для партитуры и кота и перемещения туда логики. MVVM, вероятно, немного за борт для такого простого проекта, как этот, но могут быстро возникнуть ненужные проблемы и сложности, когда визуальные данные и логика смешаны.
Сказав это, вот простой ответ на вашу проблему. Если вы хотите сохранить счет на экране и просто обновить его, нет никаких причин удалять его вообще. Просто обновите текстовое значение и переместите его в новое случайное место на холсте. Как то так:
if (DetectCollisionLeft(myCat, myZero))
{
Random rand = new Random();
score.Text = int.Parse(score.Text) + 1;
// Measure text for new random position
score.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
// Set the position of the text
Canvas.SetLeft(score, rand.Next(640 + 10 - score.DesiredSize.Width));
Canvas.SetTop(score, rand.Next(480 + 10 - score.DesiredSize.Height));
}
Могут быть более эффективные способы рандомизировать положение счета. Например, было бы лучше передать ширину экрана / родительского контейнера вместо использования жестко закодированных значений 640 и 480. Надеемся, что это укажет вам правильное направление.