06. maj 2011 - 14:40Der 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...!?
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.....
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 :)
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.
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..?
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 :)
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 :-(
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 ?
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...
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(); }
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);
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.
Projektet kom aldrig videre end almindeligt C# kodning uden tråde, så jeg lukker den.
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.