Avatar billede mikkelk Nybegynder
28. februar 2006 - 21:08 Der er 15 kommentarer og
1 løsning

Spil - gemme data

Ja, har kastet mig ud i at udvikle et lille multiplayer kortspil i C# og ASP.NET. Det giver mig naturligvis lidt problemer hen ad vejen.
Jeg er lige nu løbet ind i lidt problemer med hvordan data skal gemmes/kommunikeres mellem de enkelte spillere...
Jeg har en række objekter, spiller, hånd, spillebord, kortbunke, etc. Problemet er så bare hvordan disse data bliver tilgængelige for alle spillere og kommunikeres undervejs.
Jeg har overvejet database, xml-fil manuelt kodet og serialisering. Men hvad vil i foreslå? Nogle ideer til hvordan man smartest håndterer dette? Gerne med nogle eksempler.
Avatar billede snepnet Nybegynder
28. februar 2006 - 21:18 #1
det vil nok være det mest oplagte at bruge en database, hvis du har mulighed for det .... det kan jo være vældig meget data du kan få brug for at gemme der - altså hvis du skal gemme historik over tidligere spil, scorelister og blabla.

så længe du kan lave en relationel model over det du skal gemme - er det nok det nemmeste for dig.

jeg ved ikke lige hvad jeg skal give dig et eksempel på - det er sådan lidt omfattende det du har spurgt om, men eksempler på at hive data ind og ud af databaser, kan du naturligvis godt få.
er du mere interesseret i at finde ud af hvordan man arbejder med serialisering (omænd jeg ikke tror at det er en løsning for dig i denne situation) - så kan du skam også få det.

kan du gemme det i databaser - kan du også gemme det som xml.

mvh
Avatar billede arne_v Ekspert
28. februar 2006 - 21:31 #2
selve den interactive del skal vel gemmes i en memory struktur
enten med rod i Application eller egen singleton

historiske data skal naturligvis persisteres og database lyder umiddelbart
bedst

da alle sessions bruger samme memory struktur er kommunikation ikke et problem

hvis spillerne skal skiftes til at goere noget er det ogsaa relativt nemt at styre

hvis du ikke skal tabe noget ved nedbrud skal du enten koere flere maskiner
hvor memory strukturen replikeres eller du skal ogsaa loebende persistere den
i databasen - det sidste kan godt koste en del i performance
Avatar billede mikkelk Nybegynder
01. marts 2006 - 08:55 #3
Det med at gemme historiske data i en database lyder fornuftigt og var også det jeg havde tænkt mig.
Det jeg virkelig er interesseret i eksempler på er, som arne_v nævner, til den interaktive del.
Hvordan kan hver spille få fat i alle data undervejs hvis det gemmes i session hørende til den enkelte spiller?
Der findes jo fælles objekter og ikke fælles objekter. F.eks. er bordet og bunken jo fælles objekter, mens spiller og hånd(måske kun til dels) er personlige...
Avatar billede snepnet Nybegynder
01. marts 2006 - 09:13 #4
der er forskellige steder du kan gemme tilstand, som arne nævner kan du have root i
Application eller en singleton, som han har lagt en artikel omkring her:
http://www.eksperten.dk/artikler/37

for at lægge noget i application kan du bare:

Application["someTime"] = DateTime.Now;

og du kan så hente igen med
DateTime time = (DateTime)Application["someTime"];

Du har desuden en Cache - som også er fælles for alle, og som giver muligheder for expiration mv.

Og session har du så også - som du selv nævner - og benytter du version 2.0 har du profiles, der giver fine muligheder for at håndtere brugerspecifikke oplysninger.

mvh
Avatar billede arne_v Ekspert
01. marts 2006 - 14:28 #5
jeg ville have en single tree structure saaledes at de faelles oplysninger har
referencer til alle de individuelle oplysninger

husk paa at fordi koden der koerer paa server side har adgang til nogle data saa
betyder det ikke at brugeren ude med browseren har adagng til det
Avatar billede mikkelk Nybegynder
01. marts 2006 - 14:31 #6
Det lyder jo alt sammen vældigt fornuftigt... Jeg tror jeg forsøger mig med Application. Singleton giver vel kun mulighed for ét objekt pr. klasse, ik?
Avatar billede arne_v Ekspert
01. marts 2006 - 14:39 #7
ja

men du skal vel ogsaa kun have 1 spille site ?

1 spille site -> N spil -> N * M spillere
Avatar billede mikkelk Nybegynder
01. marts 2006 - 14:42 #8
Det er selvfølgelig rigtigt...
Hvad er fordelen ved singleton frem for application?
Avatar billede arne_v Ekspert
01. marts 2006 - 14:46 #9
du undgaar at blande dit spil med oevrige web app ting

du kan lave din app i layers hvor BLL layeret ikke er afhaengig af web kontekst
fordi det bruger en generel singleton og ikke det web specifikke Application objekt

om det er vigtigt for dig - tja ...
Avatar billede mikkelk Nybegynder
01. marts 2006 - 14:52 #10
Damn...der fik du sat mig af :-D
Well, jeg prøver at læse lidt om singleton.
I skal have tak for hjælpen....
Bare smit et svar begge to...
Avatar billede arne_v Ekspert
01. marts 2006 - 15:02 #11
det har naeppe den store funktionelle betydning om du bruger Application eller
egen singleton

men det fleste erfarne programmoerer vil have en eller anden opfattelse
af hvad er mest rigtigt - men ikke noedvendigvis samme opfattelse
Avatar billede arne_v Ekspert
01. marts 2006 - 15:02 #12
og et svar
Avatar billede mikkelk Nybegynder
22. marts 2006 - 09:43 #13
Så må vi hellere lukke... endnu engang tak for hjælpen.
Avatar billede snepnet Nybegynder
22. marts 2006 - 20:14 #14
beklager .... jeg er lidt tung i det en gang imellem :o)
mvh
Avatar billede mikkelk Nybegynder
22. marts 2006 - 20:23 #15
:-) Sådan kan det jo gå...
Avatar billede arne_v Ekspert
23. marts 2006 - 04:41 #16
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