Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 14:40 Der er 17 kommentarer og
1 løsning

Multi-trådet program

Jeg skal lave et multi-trådet program som skal simulere en kamp mellem 2 soldater der hver skal have våben, rang og livspoint.
Hver kamp skal vare 2 minutter og der må kun udkæmpes én kamp af gangen.

Er der nogen der har fjerneste idé om hvordan man griber den an, eller har lavet et eller andet multi-trådet af nogen art som de vil dele så jeg kan få et indblik i noget kode af den art...!?
Avatar billede jakobdo Ekspert
06. maj 2011 - 14:50 #1
Tråde eller en baggrundsarbejder. :o)
Kan "nemt" laves med denne:
http://www.dotnetperls.com/backgroundworker
Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 14:57 #2
Jeg kigger lige på dit link, tak skal du have..
Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 19:16 #3
Hmm føler mig lidt blond, for jeg har kigget på det men kan slet ikke omsætte hvordan jeg får lavet to tråde der skal battle mod hinanden og tage livspoint fra hinanden.....

Anybody????
Avatar billede janus_007 Nybegynder
06. maj 2011 - 19:29 #4
Den nemmeste måde at gøre det på er at lade trådene snakke igennem main thread.

Nu ved jeg ikke hvor meget du lige ved om threading, men man snakker om mainthread, workerthreads og backgroundthreads.

Du skal bruge en main thread, det kan være dit hovedprogram, men også en tråd du spawner fra hovedprogrammet, denne mainthread styrer så 2 andre tråde, de hedder worker threads.
Din opgave er nu at få dine worker threads til at snakke med mainthread, det er simpelt nok :)
Jeg forestiller mig en soldat som laver en masse kalkulationer og angriber den anden og omvendt. Du kunne jo lade mainthread være din "dommer" sådan at hver worker thread ikke skulle kende til vind/tabs logikken, men kun angrib/ forsvar/ passiv.
På den måde er det nemt at se at worker threads skal kommunikere ind til main thread alt afhængig af tilstand :)
Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 19:32 #5
Du kunne vel ikke overtales til at plastre noget kode sammen om det? Jeg forstår princippet, men derfra og til at kode det, er der langt.... :-/
Avatar billede tjens Nybegynder
06. maj 2011 - 20:27 #6
Jeg har tidligere vis lidt kode i dette spørgsmål: http://www.eksperten.dk/spm/930576#reply_7728071

Læg mærke til at UserState-objektet kan bruges til at aflevere data fra backgroundworker til UI-tråd.

Der kan dine soldater aflevere data som position og retning af skud.
Og her skal din UI-tråd så være dommer som tidligere nævnt, og beregne om soldaterne har liv tilbage.
Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 20:44 #7
Tak for det... Jeg kigger på det...
Avatar billede BenedikteJ Nybegynder
06. maj 2011 - 21:41 #8
Jeg er simpelthen kørt fast, kan ikke hitte hverken hovede eller hale...
Min opgave skal afleveres mandag og jeg er helt blank. Jeg ved det lyder som en simpel opgave, men er der nogen der kan/vil hjælpe med at kode det? Evt. privat..?
Avatar billede janus_007 Nybegynder
07. maj 2011 - 11:00 #9
Jeg ved de fleste gerne vil hjælpe, men det kræver nok en større engagement end bare at sige "kørt fast", hvis du poster din kode vil alle hjælpe tror jeg :)
Avatar billede BenedikteJ Nybegynder
07. maj 2011 - 11:08 #10
Jeg har ikke nogen kode på nuværende tidspunkt, for jeg kan slet ikke finde hvor jeg skal starte.
Jovist jeg kan da sagtens oprette en tråd, men hvordan jeg får skabt to tråde der skal have livspoint, rang og et våben og skal kunne gøre skade på hinanden (det våben de har skal have et tal det gør i skade som skal trækkes på den anden tråds livspoint, tænker jeg) der battler imod hinanden til den ene dør....
Det kan jeg slet ikke se :-(
Avatar billede janus_007 Nybegynder
08. maj 2011 - 00:31 #11
Måden tråde kan snakke med main thread på er eks.vis vha. events.

http://www.albahari.com/threading/part2.aspx
Avatar billede BenedikteJ Nybegynder
08. maj 2011 - 16:40 #12
Tak for det. Jeg kigger på det.

Bare lige et kodespørgsmål, jeg har kigget en del på tråde generelt med parametre mv. men hvordan skriver jeg det kodemæssigt at en tråd skal have (parametrene?) livspoint, rang og våbenpoint ?
Avatar billede BenedikteJ Nybegynder
08. maj 2011 - 23:07 #13
For at sige det mildt, jeg er på herrens mark.
Alt jeg kan få lavet er to tråde og det kommer jeg vitterlig ikke langt med, slet ikke taget i betragtning af at opgaven skal afleveres i morgen aften.

Er der nogen der kan hjælpe mig med at kode programmet???
Ikke bare flere linke til en masse (enormt brugbart!) information, for det er udemærkede links men fortæller mig egentlig bare hvor dum jeg må være siden jeg ikke kan omsætte det til praktisk kodning...
Avatar billede BenedikteJ Nybegynder
08. maj 2011 - 23:47 #14
Dette er hvad jeg har, indrømmet det er nok ikke kønt...
Parametrene er health point og et random tal mellem 10-25 som skal forestille våbentypen (jo højere tal - jo mere skade skal det gøre)

Meningen er så at de to tråde skal kæmpe, og trække våbentallet fra den andens health point, til den ene tråd er død.
Men hvordan gør jeg?

static void Main(string[] args)
        {
            Random rnd = new Random();


            // Make an AddParams object to pass to the secondary thread.
            AddParams ap1 = new AddParams(100, rnd.Next(10, 25));
            AddParams ap2 = new AddParams(100, rnd.Next(10, 25));


            Thread t = new Thread(new ParameterizedThreadStart(Add1));
            t.Start(ap1);
            Thread u = new Thread(new ParameterizedThreadStart(Add2));
            u.Start(ap2);

            // Force a wait to let other thread finish.
            Thread.Sleep(5);
            Console.ReadLine();
        }

        static void Add1(object data)
        {
                AddParams ap = (AddParams)data;
                Console.WriteLine("Soldat - health: {0} , våbentype: {1}",
                  ap.life, ap.weapon);
        }
        static void Add2(object data)
        {
            AddParams ap = (AddParams)data;
            Console.WriteLine("Soldat - health: {0} , våbentype: {1}",
              ap.life, ap.weapon);
        }
Avatar billede BenedikteJ Nybegynder
09. maj 2011 - 14:47 #15
Fik lavet lidt om.

Jeg har en Soldier.cs klasse som ser således ud:

public class Soldier
    {
        public int life = 100;
        public int weapon;
        public int rang;

        public Soldier(int numb1, int numb2, int numb3)
        {
            life = numb1;
            weapon = numb2;
            rang = numb3;
        }

    }

Og så har jeg min program fil som ser således ud:

static void Main(string[] args)
        {
            Random rnd = new Random();


            // Instancierer to soldater objekter med parametre
            Soldier ap1 = new Soldier(100, rnd.Next(10, 25), rnd.Next(50, 100));
            Soldier ap2 = new Soldier(100, rnd.Next(10, 25), rnd.Next(50, 100));


            //Laver to tråde med objekterne
            Thread t = new Thread(new ParameterizedThreadStart(Add));
            t.Start(ap1);
            Thread u = new Thread(new ParameterizedThreadStart(Add));
            u.Start(ap2);

            Thread.Sleep(5);
            Console.ReadLine();

        }

        static void Add(object data)
        {
            Soldier ap = (Soldier)data;
                Console.WriteLine("Soldat - health: {0} , våbentype: {1}",
                  ap.life, ap.weapon);
        }
Avatar billede janus_007 Nybegynder
10. maj 2011 - 18:27 #16
Det ser da fint ud Benedikte, men du mangler "dommer"-metoden :)
Avatar billede BenedikteJ Nybegynder
10. maj 2011 - 18:32 #17
Det er den jeg spurgte om hjælp til tidligere... Så ja den mangler jeg.

Jeg har stadig ikke fået lavet dommermetoden. Projektet endte med at blive lavet med samme principper men som almindelig c# windows-form applikation uden tråde.
Avatar billede BenedikteJ Nybegynder
09. juni 2011 - 12:33 #18
Projektet kom aldrig videre end almindeligt C# kodning uden tråde, så jeg lukker den.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester