Woord husselen

Status
Niet open voor verdere reacties.

Silty

Gebruiker
Lid geworden
15 sep 2008
Berichten
10
Hallo,

Momenteel doe ik voor school programmeren in C#, nu moeten we een spelletje maken, dat is als volgt (het moet in een console applicatie). Speler 1 moet een woord invoeren, dan moet de computer als volgt het woord door elkaar gooien. Vervolgens moet speler 2 raden wat het woord is, daar heeft hij/zij 3 pogingen voor.
De volgende regels moeten er in verwerkt zijn:
- De spelregels op het scherm (dit heb ik al)
- De titel van het spel op het scherm (heb ik ook al)
- De maximale woordgrootte 12 tekens (heb ik ook al)
- Na de tweede poging moet er een hint worden gegeven.
- De computer geeft aan of je hebt verloren of gewonnen.

Nu is mijn vraag hoe kan ik een woord laten husselen? Ik ben al bezig geweest met random maar krijg het niet voor elkaar :(
Het volgende heb ik al geprogrammeerd:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{

    class Program
    {
        static void Main(string[] args)
        {
            string woord;
            int lttr=0;
            int wrdlengte;

            //begin
            Console.WriteLine("Raad het woord!\n");
            Console.WriteLine("De spelregels:");
            Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");
            Console.WriteLine("Speler 1, voer een woord in:");
            woord = Console.ReadLine();

            //hoelang is het woord?
            //woord langer dan 12
            if (woord.Length > 12)
            {
                Console.WriteLine("\nHet woord is te lang");
            }
            //woord korter dan 12
            else
            {
                //alle letters van het woord onder elkaar plaatsen
                while (lttr < woord.Length)
                {
                    wrdlengte = woord.Length;
                    Console.WriteLine(woord[lttr]);
                    lttr++;
                }
            }
            Console.ReadKey();
            
        }
    }
}

Ik hoop dat iemand me kan helpen, eventueel wat hints geven zodat ik het uiteindelijk wel zelf heb gedaan. Graag geen complete code geven.

Alvast bedankt!

Silty
 
Laatst bewerkt door een moderator:
De beste optie zou hierin toch zijn gebruik te maken van Random.

Random kan je dan in combinatie met een array gebruiken.
Zet het woord in de array van characters.
Laat de Random een cijfer kiezen tussen 0 en de lengte van de array -1. (-1 omdat een array bij 0 begint. een array met een lengte van 5 heeft de posities: 0, 1, 2, 3, 4)
Haal zet de char die op die locatie in de array staat uit de array en ze deze in een String.
Ga zo door tot je array leeg is.
Vervolgs write je de string op de console.
 
Laatst bewerkt:
Dan ga ik dat even proberen, ik weet hoe ik een random aan moet maken. Ik ga alleen even opzoeken hoe het werkt met een array, want daar heb ik nog niet mee gewerkt.
Ik ben pas begonnen sinds 2 of 3 weken.

random r = new random();

zo begin ik een random.. verder ga ik dus veen zoeken.
 
Is vrij gemakkelijk zoals killermenace zegt

Je plaatst je string in een array van char's, kan je op verschillende manieren doen. Laat een for lus lopen dat iedere char van je string in de array plaatst tot het einde van het woord.

Vervolgens kan je door willekeurig (random()) een index nemen in je eerste array en die plaatsen in je 2de

Voorbeelden genoeg op google :)
 
Ik ben nog even aan het puzzelen gegaan, het woord wordt nu achterste voren gezet, probeer met random de letters op een willekeurige volgorde te zetten, maar daar ben ik nog niet helemaal over uit.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{

    class Program
    {
        static void Main(string[] args)
        {
            string woord;
            int tel = 0;
            int lengte;
            string hint;

            //begin
            Console.WriteLine("Raad het woord!\n");
            Console.WriteLine("De spelregels:");
            Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");
            Console.WriteLine("Speler 1, voer een woord in:");
            woord = Console.ReadLine();
            woord = woord.ToLower();
            lengte = woord.Length;
            Console.WriteLine("Geef een hint");
            hint = Console.ReadLine();

            char[] andere = new char[lengte];

            for (int t = (lengte - 1); t >= 0; t--)
            {
                andere[tel] = woord[t];
                tel++;
            }

            Random r = new Random();
            {
                for (int t = 0; t < lengte; t++)
                {
                    Console.Write(andere[t]);
                }
            }


            Console.WriteLine("\n\n\nDe hint is:");
            Console.WriteLine(hint);
            Console.ReadKey();

        }
    }
}
 
Wat jij doet is beginnen tellen vanop het einde van het woord naar het begin en dat plaats in een array, het is de bedoeling dat je op een random plek in andere[x] de woord[t] plaatst, waar x je random waarde is. Het enige waar je rekening mee dient te houden is als je een random waarde gegereerd deze al niet eens is gegeneerd, hiermee zou je dus op die random waarde in je andere een 2de maal dezelfde letter krijgen. Dit kan je oplossen door in je woord[t] dit leeg te maken en dan eerst te controleren of deze leeg is zo weet je dat deze letter al eens is genomen

Nu zou je het toch moeten kunnen:thumb:
 
Je kunt natuurlijk ook de letters gaan swappen met elkaar in een array:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string woord;
            int lttr = 0;

            //begin
            Console.WriteLine("Raad het woord!\n");
            Console.WriteLine("De spelregels:");
            Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");
            Console.WriteLine("Speler 1, voer een woord in:");
            woord = Console.ReadLine();

            //hoelang is het woord?
            //woord langer dan 12
            if (woord.Length > 12)
            {
                Console.WriteLine("\nHet woord is te lang");
            }
            //woord korter dan 12
            else
            {
                //alle letters van het woord onder elkaar plaatsen
                char[] woordArray = woord.ToCharArray();
                Class1.HusselWoord(ref woordArray);
                while (lttr < woordArray.Length)
                {
                    Console.Write(woordArray[lttr]);
                    lttr++;
                }
            }
            Console.ReadKey();
        }
    }

    public class Class1
    {
        public static void HusselWoord(ref char[] woordArray)
        {
            Random r1 = new Random();
            for (int i = 0; i < woordArray.Length; i++)
            {
                int letter1 = r1.Next(0,woordArray.Length);
                int letter2 = r1.Next(letter1, woordArray.Length);

                SwapLetters(letter1, letter2, ref woordArray);
            }
        }

        public static void SwapLetters(int letter1, int letter2, ref char[] woord)
        {
            char cLetter1 = woord[letter1];
            char cLetter2 = woord[letter2];

            woord[letter1] = cLetter2;
            woord[letter2] = cLetter1;
        }
    }
}
 
Bedankt mijn woord wordt nu gehusseld ;) Momenteel ben ik met het laatste onderdeeltje bezig dan heb ik mijn opdracht af. Dat is hij mag niet langer zijn als 12 tekens. Dat staat er ook al in, maar dan moet hij aangeven voer een nieuw woord in en moet hij verder gaan bij de else. Daar ben ik nog niet helemaal over uit, ben ik nog mee aan het puzzelen.

EDIT: Het is gelukt, na een tip van mijn vriend en wat googlen. Het geen wat dik gedrukt is heb ik nog toegevoegd.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{

    class Program
    {
        static void Main(string[] args)
        {
            string woord;
            int tel = 0;
            int lengte;
            string hint;
            string raden;
            int poging = 0;
            string invoer;


            
            //begin
            Console.WriteLine("Raad het woord!\n");
            Console.WriteLine("************Spelregels*****************\n");
            Console.WriteLine("De spelregels:");
            Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");
            Console.WriteLine("Speler 1, voer een woord in:");
[B]            Spel:[/B]
            woord = Console.ReadLine();
            woord = woord.ToLower();
            lengte = woord.Length;
            if (woord.Length > 12)
            {
                [B]Console.Clear();
                Console.WriteLine("Raad het woord!\n");
                Console.WriteLine("************Spelregels*****************\n");
                Console.WriteLine("De spelregels:");
                Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");
                Console.WriteLine("\n\nLET OP! Het woord is te lang, het mag niet meer dan 12 tekens bevatten.");
                Console.WriteLine("Geef een nieuw woord in:");
                goto Spel;[/B]
                
            }
            else
            {
                Console.WriteLine("\nGeef een hint");
                hint = Console.ReadLine();
                Console.Clear();
                Console.WriteLine("Raad het woord!\n");
                Console.WriteLine("************Spelregels*****************\n");
                Console.WriteLine("De spelregels:");
                Console.WriteLine("Vul een woord in van maximaal 12 letters, \ndaarna gooit de computer de letters door elkaar \nen moet de volgende speler het woord zien te raden in 3 beurten.\n\n");

                Console.WriteLine("Het woord is:");

                char[] woordArray = woord.ToCharArray();
                class1.HusselWoord(ref woordArray);
                while (tel < woordArray.Length)
                {
                    Console.Write(woordArray[tel]);
                    tel++;
                }

                Console.WriteLine("\n\n\nSpeler 2 probeer het woord te raden");
                raden = Console.ReadLine();
                invoer = raden.ToLower();
                
                if (woord == invoer)
                {
                    Console.WriteLine("\nGefeliciteerd u heeft het goed geraden");
                }
                else
                {
                    poging++;
                    if (poging == 1)
                    {
                        Console.WriteLine("\n\nU heeft het fout, probeer het opnieuw.");
                        Console.WriteLine("Voer een nieuw woord in:");
                        raden = Console.ReadLine();
                        invoer = raden.ToLower();
                        if (woord == invoer)
                        {
                            Console.WriteLine("\nGefeliciteerd u heeft het goed geraden");
                        }
                        else
                        {
                            Console.WriteLine("\n\n\nU heeft het fout, probeer het opnieuw, dit is uw laatste poging.");
                            Console.WriteLine("De hint is:");
                            Console.WriteLine(hint);
                            Console.WriteLine("Voer een nieuw woord in:");
                            raden = Console.ReadLine();
                            invoer = raden.ToLower();
                            if (woord == invoer)
                            {
                                Console.WriteLine("\nGefeliciteerd u heeft het goed geraden");
                            }
                            else
                            {
                                Console.WriteLine("\n\n\nHelaas u heeft het woord niet geraden, u heeft verloren");
                            }
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }
    public class class1
    {
        public static void HusselWoord(ref char[] woordArray)
        {
            Random r1 = new Random();
            for (int i = 0; i < woordArray.Length; i++)
            {
                int letter1 = r1.Next(0, woordArray.Length);
                int letter2 = r1.Next(letter1, woordArray.Length);

                SwapLetters(letter1, letter2, ref woordArray);
            }
        }
        public static void SwapLetters(int letter1, int letter2, ref char[] woord)
        {
            char cLetter1 = woord[letter1];
            char cLetter2 = woord[letter2];

            woord[letter1] = cLetter2;
            woord[letter2] = cLetter1;
        }
    }
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan