0

私は単語ゲーム (lingo) を作成しています。これがどのように機能するかです: 配列からランダムな単語が選択され、ユーザーは正しい単語を推測する必要があります。次に、単語が出力されます。 : 間違った文字 黄色: 正しい文字だが位置が間違っている : 位置と文字が正しい

現時点での問題は、推測された単語の数文字しか描画されないことです。すべてが同じ行にならないように、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;
                        }

                    }

                }
            }
        }
    }
}

}

4

1 に答える 1

2

いくつかのコメントとサンプルコード。

  1. 赤と緑を描いているという理由だけで、重複したコードがたくさんあります。これは要約することができます。

  2. WinForms描画で使用されるクラスのほとんどは、破棄する必要があります。そうしないと、メモリリークとGDI+リークが発生します。ブラシ、フォントなどは廃棄する必要があります。

  3. Graphics.MeasureStringを使用して、各文字のサイズを取得します。結果のサイズは、XとYで転送するために使用できます。

  4. 文字列の文字には、インデックスから直接アクセスできます。それらをchar配列に変換する必要はありません。

    void YourDrawMethod(Graphics g){varwrongBrush = new SolidBrush(Color.Red); varcorrectBrush = new SolidBrush(Color.Green);

    var ff = new FontFamily( "Arial"); using(var font = new System.Drawing.Font(ff、20)){int x = 0; int 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(); correctBrush.Dispose(); }

于 2013-01-05T14:15:36.443 に答える