在 C# 中的拉绳中叠加字符

本文关键字:叠加 字符 | 更新日期: 2023-09-27 18:32:28

我正在做一个游戏,它就像一条蛇,但是你在游戏开始时输入了一些东西,你输入的单词变成了蛇的身体。

所以。。。我几乎把所有东西都弄清楚了,但是在画蛇时,字母重叠,我希望它们分开。

这是我的代码:

private void pbArea_Paint(object sender, PaintEventArgs e)
    {
        Graphics area = e.Graphics;
        if(!Config.FinJuego)
        {
            //Set snake color
            Brush colorVib;
            //Snake body colors
            for(int i=0; i< Viborita.Count; i++)
            {
                if (i == 0)
                    colorVib = Brushes.Black; //Draws the head
                else
                    colorVib = Brushes.OrangeRed; //Draws the rest of the body
                //Draws full snake
                foreach (char c in nombre)
                {
                    area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
            new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);
                }
                //Draw food
                area.FillEllipse(Brushes.Green,
                    new Rectangle(comida.X * Config.Ancho,
                    comida.Y * Config.Alto, Config.Ancho, Config.Alto));
            }
        }
        else
        {
            string finjuego = "Fin del juego.'nTu puntuación final fue: " + Config.Puntuacion +
                "'n Presiona la tecla Enter para reintentar.";
            if (RecordFinal==0)
            {
                Record = Config.Puntuacion;
                RecordFinal = Record;
            }
            if(Config.Puntuacion>RecordFinal)
            {
                RecordFinal = Config.Puntuacion;
            }
            lbFinJuego.Text = finjuego;
            lbFinJuego.Visible = true;
        }
    }

所以,正如你所看到的,我正在使用DrawString,"area"是一个PictureBox,"Viborita"是项目的名称,所以......有什么想法吗?

如果我不清楚,我很抱歉,这是因为我不会说母语,如果您对代码中的某些内容有任何疑问,请告诉我,顺便说一下,谢谢。

在 C# 中的拉绳中叠加字符

好吧,看起来Viborita[i]是第i条蛇的位置。问题是你没有跟踪蛇是如何卷曲的,或者它是什么形状。我建议您创建一个 Snake 类来跟踪蛇头的位置及其其他字符的位置,以及任何其他相关数据。


此外,每次绘制字符时,您都会创建新字体和新画笔。最好将画笔和字体放在该类所在的字段中。

所以...问题已解决。问题是这样的:

area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
        new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);

而不是使用"Viborita[i]。X * Config.Ancho"和"Viborita[i]。Y * Config.Alto"在那里,我使用了这个:

Ancho = Viborita[i].X * Config.Ancho;
                Alto = Viborita[i].Y * Config.Alto;
 foreach (char c in nombre)
                {
                        area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
            new SolidBrush(Color.Black), Ancho, Alto);
                        Ancho += 14;
                }

这就解决了我的问题。