07. november 2006 - 02:51Der er
2 kommentarer og 1 løsning
Bogstaver der forsvinder
For at sætte mig ind i C# er jeg begyndt at programmere et lille spil Hang-Man, og jeg er stødt ind i et, synes jeg, mystisk problem. Visse tegn forsvinder i processen.
Sådan fungerer programmet: Det eller de skjulte ord, man skal gætte står i een label repræsenteret med bindestreger (-). Bogstaver som repræsenterer forkerte gæt, står i en anden label. Det skjulte ord består af uppercase bogstaver. Input fra keyboardet konverteres til uppercase.
Det fungerer som det skal, bortset fra når inputtet er F. Hvis de skjulte ord er "FREDE FIK FRIKADELLER", og jeg indtaster de relevante tegn, ender der med at stå "-REDE -IK -RIKADELLER".
Jeg har prøvet det samme kode med lowercase. Så forsvinder tegnene e, g, k, o, r, t og æ.
Jeg er mystificeret. Er der nogen, der kan forklare mig, hvad der går galt? Den foreløbige kode er vist herunder:
//KODE using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace Hang_Torben { public partial class Form1 : Form { private string answer; // ord der skal gættes
public Form1() { InitializeComponent(); initializeGame(); }
private void initializeGame() { lblWrongLetters.Text = "Forkerte gæt: "; // her vises ukorrekte bogstaver lblHiddenWord.Text = ""; // her vises de korrekt gættede bogstaver getCategory(); }
private void getCategory() { answer = "FREDE FIK FRIKADELLER";
// sætter streger for hvert bogstav i det eller de skjulte ord og evt. mellemrum for (int i = 0; i < answer.Length; i++) { if (answer.Substring(i,1).Equals(" ")) lblHiddenWord.Text += " "; else lblHiddenWord.Text += "-"; } }
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Der er flere ting som godt kan være anderledes i denne kode, men årsagen til dit egentlige problem er nu ret simpel.
Du starter med at assigne din "lblWrongLetters" til "Forkerte gæt: "
I dit "guess" metode checker du for: if (!lblWrongLetters.Text.Contains(Convert.ToString(c)))
Og da du har assignet lblWrongLetters med teksten "Forkerte gæt:" vil "F" jo allerede figurere som forkert. De øvrige karakterer er små bogstaver og vil ikke fejle.
Løsning... Så derfor bør du holde dine forkerte karakterer i en streng som kun bliver brugt til dette, og din UI ledetekst "Forkerte gæt:" i en tilsvarende separat label.
Men der er mange andre muligheder, men ovenstående vil løse dit nuværende problem.
Her en lille hurtig alternativ løsning... (Med baggrund i din egen løsning)
namespace Hang_Torben { using System; using System.Text; using System.Collections.Generic; using System.Windows.Forms;
public partial class Form1 : Form { private string answer = "Frede Fik Frikadeller";
private System.Collections.Generic.List<char> rightGuesses = new List<char>(); private System.Collections.Generic.List<char> currentRightGuesses = new List<char>(); private System.Collections.Generic.List<char> currentWrongGuesses = new List<char>();
public Form1() { this.InitializeComponent(); this.initializeGame(); }
/// <summary> /// Ord som skal gættes. /// </summary> public string Ansver { get { // Bør naturligvis returnere den teksten fra den kontrol hvor du taster dit hemmelige svar. return this.answer; } }
private void initializeGame() { #region Slet tidligere spil
this.currentWrongGuesses = new List<char>(); this.rightGuesses = new List<char>(); this.currentRightGuesses = new List<char>();
#endregion // Slet tidligere spil
#region Gem mulige rigtige svar
string answer = this.Ansver.ToUpper();
foreach (char c in answer.ToCharArray()) { if (Char.IsLetter(c) && !this.rightGuesses.Contains(c)) { this.rightGuesses.Add(c); } }
Som Homer ville sige: D'oh! Den havde jeg ikke tænkt ordenligt igennem. Tusind tak for hjælpen. Du er super effektiv. Din kodeforslag ser god og overskuelig ud, så den arbejder jeg videre med.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.