我在一個小小的泡菜。我開始基於GUI的Hangman遊戲開發,以進行娛樂。但是,我遇到了一些問題。Hang子手 - GDI +問題
需要猜測的單詞已轉換爲char數組。但是,當用戶輸入字符以猜測單詞時,CheckLetter()方法似乎不起作用,儘管它調用正確。由於這些字母不會在屏幕上顯示,因此當他們被正確猜測時。
我將不勝感激,如果你能在正確的方向引導...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HangmanV1._0
{
public partial class Main : Form
{
private Graphics g;
//Stores words characters
private char[] WordCharactes;
//Cloned array size of word characters, though data only appears in the elements
//when characters are matched succesfully
private char[] GuessedLetters;
public Main()
{
InitializeComponent();
}
public void GetWord(string Word, int NumberOfCharacters)
{
//Declares new char array
WordCharactes = new char[NumberOfCharacters];
GuessedLetters = new char[NumberOfCharacters];
//Converts word to char array
WordCharactes = Word.ToCharArray();
}
private void btnPlay_Click(object sender, EventArgs e)
{
//invokes the method by passing the word required to be guessed, specified by the user
GetWord(tbWordToGuess.Text, tbWordToGuess.Text.Length);
grbNewGame.Visible = false;
//Draw hangman game board
DrawWord(g);
}
public void DrawWord(Graphics e)
{
//Line Coordinates
int LinePointX = 50;
int LinePointY = 80;
int LetterPoint = 50;
for (int i = 0; i < WordCharactes.Length; i++)
{
//Draws dashed unser letters, highlights how many letters to guess
e.DrawLine(new Pen(Color.Black, 5), new PointF(LinePointX, 300), new PointF(LinePointY, 300));
//Draws letters that have been correctly guessed
e.DrawString(GuessedLetters[i].ToString(), new Font("Arial", 18), Brushes.Black, new PointF(LetterPoint, 270));
//Steadily increments line
LetterPoint += 40;
LinePointX += 40;
LinePointY += 40;
}
}
public void CheckLetter(char Letter)
{
this.Refresh(); //<-- Edit: adding this solved my problem
//Compares letters
for (int i = 0; i < WordCharactes.Length; i++)
{
if (WordCharactes[i] == Letter)
{
GuessedLetters[i] = WordCharactes[i];
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
g = this.CreateGraphics();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
//Exits enviroment
Environment.Exit(0);
}
private void btnInputLetter_Click(object sender, EventArgs e)
{
//Invokes the checkletter method to compare inputted char to that of the word
CheckLetter(char.Parse(tbGuessedLetter.Text));
//Redraws
DrawWord(g);
}
}
}
這會在DrawWord()方法內引起問題(空引用異常),因爲WordCharacters []對象引用沒有實例化,直到用戶輸入一個單詞爲止。 – Hmm 2011-05-11 20:18:04
這應該可以在for循環中使用「if(WordCharacters!= null)」來輕鬆解決。 – 2011-05-11 20:30:56