gpt4 book ai didi

c# - Hangman - GDI+ 问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:06 25 4
gpt4 key购买 nike

我有点难受。我开始开发基于 GUI 的 Hangman 游戏,用于娱乐。但是,我遇到了一些问题。

需要猜的单词已经转换为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);
}
}
}

最佳答案

在窗体(或任何其他控件)上绘制的正确方法是通过调用使其无效

Invalidate();

你会这样做而不是 btnInputLetter_Click 中的 DrawWord(g)

然后系统会调用窗体的paint事件。此事件有一个参数,其中包含您应该用于绘画的 Graphics 对象。

所有这些总结起来是这样的:

private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawWord(e.Graphics);
}

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
Invalidate();
}

关于c# - Hangman - GDI+ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com