【问题标题】:C# Help drawing letter (Word Game)C#帮助画字母(文字游戏)
【发布时间】:2013-01-05 22:26:30
【问题描述】:

我正在创建一个文字游戏(行话)。它是这样工作的:从数组中选择一个随机单词,用户必须猜出正确的单词。然后这个词被打印出来。 红色:字母错误 黄色:字母正确但位置错误 绿色:位置和字母正确

现在的问题是它只画了猜词的几个字母。我还需要更改 y 值,以便所有内容不在同一行。

这是我目前得到的。

    public string CorrectPlace; // Correct letter and postion
    public string WrongPlace; // Correct letter but incorrect postion
    public string NoneExist;  // Wrong
    public string inputwordstring; // user input
    public string CorrectWord; // Correct word
    public char[] CorrectWordchar;
    public char[] InputWord;
    int x;// position
    int y; //position
    public int points = 0;
    char replacemt = '#'; 
    public string[] Wordarray = null; // Declare string array
    public string getRandomWord() // generate random word
    {
        Random ran = new Random();
        return Wordarray[(ran.Next(0, Wordarray.Length - 1))];

    }

    public void Gamers() // 
    {
        Wordarray = new string[] { "radar", "andar", "axars", "rapar", "raser", "matar", "rikas", "ratas", "bakar", "bruka" }; // Dictionary
        CorrectWord = getRandomWord(); // store the random word in a string
    }
    public void CheckWords(string name, Graphics g)
    {

        if (CorrectWord == inputwordstring)
        {

            points += 100;
            MessageBox.Show("AMAZING");




        }
        for (int i = 0; i < CorrectWord.Length; i++)  
        {

            for (int b = 0; b < CorrectWord.Length; b++)
            {

                CorrectWordchar = CorrectWord.ToCharArray();
                InputWord = inputwordstring.ToCharArray();

                if (InputWord[i] == CorrectWordchar[b]) // check if the have the same index
                {
                    if (i == b)
                    {
                        CorrectPlace = CorrectWord;
                        SolidBrush s = new SolidBrush(Color.Green);
                        FontFamily ff = new FontFamily("Arial");
                        System.Drawing.Font font = new System.Drawing.Font(ff, 20);
                        g.DrawString(InputWord[i].ToString(), font, s, new PointF(x, y));
                        x += 20;
                        // draw out green letters
                        break;
                    }
                    else
                    {
                        if (InputWord[b] != CorrectWordchar[b])
                        {
                            SolidBrush s = new SolidBrush(Color.DarkOrange);
                            FontFamily ff = new FontFamily("Arial");
                            System.Drawing.Font font = new System.Drawing.Font(ff, 20);

                            g.DrawString(InputWord[b].ToString(), font, s, new PointF(x, y));
                            x += 20;
                            // Yellow letters

                            CorrectWordchar[b] = replacemt; // ersätter rätt bokstav med #
                            break;
                        }
                        else
                        {
                            b = 4;
                            SolidBrush s = new SolidBrush(Color.Red);
                            FontFamily ff = new FontFamily("Arial");
                            System.Drawing.Font font = new System.Drawing.Font(ff, 20);
                            g.DrawString(InputWord[b].ToString(), font, s, new PointF(x, y));
                            x += 20;
                            // Red letters
                            break;
                        }

                    }

                }
            }
        }
    }
}

}

【问题讨论】:

    标签: c#


    【解决方案1】:

    一些cmets和示例代码。

    1. 你有很多重复的代码,只是因为你画的是红色和绿色。这可以概括。

    2. WinForms 绘图中使用的大多数类都必须被释放。否则你会遇到内存泄漏和 GDI+ 泄漏。画笔、字体等都应该丢弃。

    3. 使用Graphics.MeasureString 获取每个字符的大小。生成的大小可用于在 X 和 Y 中前进。

    4. 字符串的字符可以通过索引直接访问。您不需要将它们转换为 char 数组。

      void YourDrawMethod(图形 g) { var wrongBrush = new SolidBrush(Color.Red); var correctBrush = new SolidBrush(Color.Green);

      var ff = new FontFamily("Arial"); using(var font = new System.Drawing.Font(ff, 20)) { 诠释 x = 0; 整数 y = 0;

      foreach(car letter in InputWord)
      {
        SolidBrush brush = InputWord[i] == CorrectWord[b] ? correctBrush : wrongBrush;
        g.DrawString(letter.ToString(), font, brush, new PointF(x, y));         
        Size sizeOfLetter = g.MeasureString(letter.ToString(), font);
        x += sizeOfLetter.Width;
      }
      

      }

      wrongBrush.Dispose(); 正确的刷子.Dispose(); }

    【讨论】:

    • 感谢您的意见。我知道代码可能写得不好,但是您认为您可以通过聊天帮助我吗(我有很多问题=)。我可以上传游戏,你可以试试,如果可以的话。
    • 当然。只需将代码放在网上某处,让我知道何时何地聊天。我在维也纳时区,整个周日下午都有空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2021-07-19
    • 2011-11-03
    相关资源
    最近更新 更多