Archief - [PROG]c# galgje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iamsoscrewed

Legacy Member
ik heb problemen met het random ophalen van een woord
uit mijn array
nu kiest hij gewoon altijd het volgende

private void getNewWord_Click(object sender, EventArgs e)
{
if (advanceCounter > 9)
{
advanceCounter = 0;
}
newWord = wordList[advanceCounter];

advanceCounter++;

ik zou willen dat hij dus een willekeurig woord uit mijn array kiest
dit is mijn array

private void Form1_Load(object sender, EventArgs e)
{
wordList[0] = "Cat";
wordList[1] = "Mat";
wordList[2] = "Hat";
wordList[3] = "Bat";
wordList[4] = "Sat";
wordList[5] = "Tat";
wordList[6] = "Fat";
wordList[7] = "Pat";
wordList[8] = "Rat";
wordList[9] = "Vat";

disableLetters();
}
elke hulp is welkom
alvast bedankt

TiZon

Legacy Member
Logisch toch dat hij altijd het volgende getal neemt...

Code:
private void getNewWord_Click(object sender, EventArgs e)
{
if (advanceCounter > 9)
{
advanceCounter = 0;
}
newWord = wordList[advanceCounter]; 

advanceCounter++;
Als je couter groter is dan 9 zet je hem op nul, en voor de rest tel je er altijd 1 bij (advanceCounter++;)

Maak er dan dit van:

Code:
private void getNewWord_Click(object sender, EventArgs e)
{
int randomNumber = RandomClass.Next(10);
newWord = wordList[randomNumber]; 
}

zal wel werken dan denk ik :)

iamsoscrewed

Legacy Member
The name 'RandomClass' does not exist in the current context

hmm weet niet wat dat juist betekent :)


I'm just a beginner:)

Recipe4hate

Legacy Member
Het komt er dus op neer dat je eerst eens de 'random'-functies moet gaan bekijken.

http://www.csharp-home.com/index/tiki-print_article.php?articleId=178
http://www.geekpedia.com/tutorial238_Generate-Random-Numbers-using-Csharp.html

Het principe achter deze random is in veel talen hetzelfde, en is op zich niet moeilijk te begrijpen. Succes ermee!

Edit: TiZon is volgende vergeten denk ik:
Random RandomClass = new Random()
Deze regel moet BOVEN het gebruik van je RandomClass staan, want hier creeer je een instantie van het object 'Random'.

iamsoscrewed

Legacy Member
ok ik heb nog maar eens een probleem :)
je ziet altijd hoeveel letters je moet raden maar aangezien ik begon met altijd woorden van 3 letters staan er altijd 3 * in een textbox

private void getNewWord_Click(object sender, EventArgs e)
{
Random RandomClass = new Random();
int randomNumber = RandomClass.Next(10);
newWord = wordList[randomNumber];



enableLetters();
getNewWord.Enabled = false;
textBox3.Text = "7";
textBox2.Text = "***";


ik probeer dat hij kijkt naar het WordToGuess en dan evenveel * zet als er letters zijn in het woord

ik ben nogal aan het prutsen met WordToGuess.Length
maar lukt me niet

TiZon

Legacy Member
@ Recipe4hate: foutje, idd ;)

Voorbeeldje om de lengte van een string op te halen:

String tekst = "Heel veel tekst hier om te kijken hoe lang deze string is";
int lengte = tekst.Length;

iamsoscrewed

Legacy Member
hmm en ik blijf maar komen met mijn vragen :)

ik zou graag nog een kleine tekening bijvoegen
die verandert elke keer je fout hebt gegokt
ik had gedacht dat te koppelen aan textbox 3
dus voor een bepaalde waarde in textbox 3 (aantal gokken over)
een andere tekening

iemand die weet hoe dat mogelijk is

echt al mega bedankt, c# is niet mijn beste ding :)

joew

Recipe4hate

Legacy Member
Ik weet niet of het in C# van toepassing is, maar misschien kan je werken met een imagelist. Dit is een verzameling (ik denk een array) van afbeeldingobjecten. En dan kan je deze oproepen met een indexnummer. Anders zal je een imageobject moeten declareren en dit toewijzen aan een lokale url ("images\voorbeeld.jpg") ofzo.

Ik denk dat je best even de logica achter objecten declareren en instantieren bestudeert.
Misschien is dit iets te gevorderd voor je, maar het meeste leer je door zelf te zoeken in bestaande klasse/objectdatabases zoals MSDN:
http://msdn.microsoft.com/en-us/library/system.drawing.bitmap(VS.80).aspx

Ik denk dat je hiermee wel verder kunt.

Edit: net gezien dat je in c# zelfs pictureboxes hebt. Dan kan het toch niet moeilijk meer zijn om je afbeelding te tonen?
http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.aspx

Uiteindelijk zal je tot zoiets komen:
Bitmap art = new Bitmap(filePath);
myPictureBox.Image = art;

iamsoscrewed

Legacy Member
hoe kan je door gebruik te maken van picturebox een afbeelding toevoegen
heb gedaan wat ik moest doen maar ik kan gelijk niet verwijzen naar mijn afbeelding
zegt altijd dat mijn path niet klopt ..?

iamsoscrewed

Legacy Member
hmm als ik
private void getNewWord_Click(object sender, EventArgs e, string WordToGuess)
{
Random RandomClass = new Random();
int randomNumber = RandomClass.Next(10);
newWord = wordList[randomNumber];



enableLetters();
getNewWord.Enabled = false;
textBox3.Text = "7";
textBox2.Text = "***";
om dan hier te maken dat in tekstbox 2 evenveel * als letters in
WordToGuess komen


}

dan geef hij volgende foutmelding
Error1:No overload for 'getNewWord_Click' matches delegate 'System.EventHandler'

iemand ook maar enig idee hoe ik dat kan oplossen???

Recipe4hate

Legacy Member
Picturebox is niet moeilijk. Dit is wel de enige broncode die ik expliciet ga geven, aangezien je zo bitter weinig leert:

De image is genaamd midgets, met als extensie .gif en zit in de map images in de map bin\debug\. Je bronbestand moet altijd makkelijk te vinden zijn voor de compiler, en als je je project wil gaan overbrengen, moet je dus je sourcebestanden niet expliciet (bv: c:\afbeeldingen\midgets.gif) gaan plaatsen, want de gebruiker kan ze ergens anders zetten. Best is in een geordende map naast je exe-bestand.

Code:
[I]//Maak een string aan waar je de lokale URL zet[/I]
String Path = "images/midgets.gif";

[I]//Maak een afbeeldingobject aan.[/I]
[I]//Hierin roep je de statische methode FromFile op (die een string vraagt). [/I]
[I]//Zo kan je je pad opgeven in je bitmap[/I]
Bitmap myImage = new Bitmap(Bitmap.FromFile(Path));

[I]//Zorg ervoor dat de image in je picturebox mooi stretched (optioneel).[/I]
picImage.SizeMode = PictureBoxSizeMode.StretchImage;

[I]//Ken je afbeelding toe aan het toepasselijke attribuut van de picturebox.[/I]
picImage.Image = myImage;

Wat het volgende betreft: het overloaden van interne methodes is een slecht idee. Waarom krijg je die fout? De methode getNewWord_Click verwacht een aantal argumenten, zoals die gespecifieerd zijn in de signature van de methode. Jij wil daar nog een extra argument aan toevoegen, wat op zich niet zo dom bedacht is, maar dit doe je best niet met methodes die door je IDE (waarschijnlijk visualstudio) gegenereerd zijn. Hun signature is namelijk elders bepaald, en is daarom niet zo makkelijk te overloaden.

Moest je niet weten wat overloading is:
http://en.wikipedia.org/wiki/Method_overloading

De oplossing voor je 2de probleem is zelf een methode te schrijven die je oproept binnen je getNewWord_Click methode, en daar kan je wel extra argumenten bepalen. Een andere oplossing is om de scope van je variabelen te vergroten (globaal declareren) en zo kan je gemakkelijker aan je variabelen in andere functies en methodes. Dit is wel niet altijd aan te raden, uit ervaring zal je merken welke scope je het best aan variabelen geeft.

iamsoscrewed

Legacy Member
ivm picturebox
hmm ik snap wat je bedoelt en denk dat ik alles goed heb geplaatst waar het moet
maar ik krijg nu steeds volgende error
Unrecognized escape sequence
iets met mijn path dat blijkbaar niet in orde is

Recipe4hate

Legacy Member
Escape sequences zijn bepaalde karakters die iets uitvoeren.
Zo kan je in je code bijvoorbeeld geen " typen, aangezien je compiler dit als tekst gaat beschouwen. Om dit probleem op te lossen bestaan er Escape Sequences. Deze beginnen met een \ gevolgd door een anders illegaal karakter ofwel een commando.
Om dit zijn "aanhalingstekens" correct weer te geven zou je dus dit zijn \"aanhalingstekens\" moeten typen. Andere bekende ES'n zijn \n en \r.

Ik denk dat je hierdoor wel weet wat er fout is gelopen? Vermoedelijk heb je je urlpad vol \ staan.
Oplossing:
in plaats van "map\afbeelding.jpg" gebruik je nu "map/afbeelding" OFWEL "map\\afbeelding".
Die laatste is trouwens een perfect voorbeeld van een Escape Sequence.

haha en dan te denken dat ik c# nog nooit heb aangeraakt :D

iamsoscrewed

Legacy Member
ok ik krijg geen errors meer
maar ik krijg een soort pop-up
die zegt FileNotFoundExeption was unhandled
en hij verwijs naar Bitmap myImage = new Bitmap(Bitmap.FromFile(Path));

(voor iemand die C# nog niet heeft aangeraakt kan je er behoorlijk weg mee:))

Recipe4hate

Legacy Member
Da's een redelijk logische fout imo. Hij throwt een exception die jij niet opvangt, van het type "file not found". Ofwel los je dit op door een try-catch blok in te bouwen, waardoor je deze fout opvangt, maar veel gemakkelijker is gewoon te linken naar de juiste plaats. Maw: je programma vindt je afbeelding niet!
Plaats je bestand eens direct naast je exe in de bin\Debug-map. Als je test vanuit VisualStudio en je runt in debug-mode (standaard), dan zou dit de exe zijn die je compileert en opent bij tests. Ik ben hier niet 100% zeker van, dus je moet dat zelf even verifieren, aangezien je in je projectmap meerdere gecompileerde exe-bestanden hebt staan.

en
(voor iemand die C# nog niet heeft aangeraakt kan je er behoorlijk weg mee)
De logica achter een OOP-taal is in het merendeel hetzelfde, gewoon de syntaxis verschilt. Maar dat kan je dan weer opzoeken.

iamsoscrewed

Legacy Member
haha soms zou je jezelf gewoon tegen het hoofd willen schoppen
voel me echt bijna beschaamd om het te zeggen :)
galg9 bestond gewoon niet:)
ok dit werkt nu zoals het hoort

heb altijd dat probleem met programmeren van die kleine foutjes die overal insluipen waar ik zelf heel de tijd over kijk

ik dank u zeer

nu me eens bezig houden dat die afbeelding zich aanpast naargelang het aantal keer dat je fout gokt
als je me hier op weg zou kunnen zetten zou dat geweldig zijn
ik had gedacht aan een gewone if-then en verwijzen naar textbox3 (die aantal foute gokken bijhoudt)

joew

Ryxi

Legacy Member
ik weet niet of de controle er al in zit om te controleren of WordToGuess de ingegeven letter wel bevat. Dit zal eerst moeten gedaan worden voor je die afbeelding kunt aanpassen.

Je kunt er eens over nadenken hoe je dit zou doen maar aangezien je vraagt om je op weg te helpen kan ik je al zeggen dat je WordToGuess.contains() zal nodig hebben, ik weet niet of je dat kent.

Ik zie ook dat je zegt dat textbox3 het aantal foute gokken bijhoudt, dit zal op zich wel werken maar het is geen goeie gewoonte om waarden op te slaan in een textbox.Text. Steek die in een variabele en update die textbox steeds met die variabele.

TiZon

Legacy Member
iamsoscrewed zei:
nu me eens bezig houden dat die afbeelding zich aanpast naargelang het aantal keer dat je fout gokt
als je me hier op weg zou kunnen zetten zou dat geweldig zijn
ik had gedacht aan een gewone if-then en verwijzen naar textbox3 (die aantal foute gokken bijhoudt)

ik zou eerst en vooral mijn tellertje bijhouden in een integer, niet in een textbox, daarna kan je het nog in een textbox/label steken, dat maakt me niet uit :)

En ik zou ook geen if/then gebruiken, maar een switch-case:

Code:
switch (teller)
{
  case 1: "wat er moet gebeuren bij 1 fout"; break;
  case 2: "wat er moet gebeuren bij 2 fouten" break;
  ....
  default: "wat er anders moet gebeuren" break;
}

http://www.codeproject.com/KB/GDI-plus/quickview.aspx
Mss nog iets handig voor die tekeningskes :)

PS: En net zoals Recipe4hate heb ik nog nooit een letter c# geprogrammeerd :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan