Avatar billede d4s Novice
27. juni 2003 - 23:50 Der er 5 kommentarer og
1 løsning

opbygning af database

jeg har en tabel på 10x10 felter hvor hvert felt kan have 1 ud af 3 forskellige værdier. Hvordan ville du opbygge den post i en database?

I databasen skal der kunne ligge flere tabeller.
Det er til et sænke slagskibe spil, hvor en spiller skal kunne udfordre en anden.
Posten skal derfor indeholde spillerens id nummer, modstanderens id nummer, og spillerens spilleplade med de 100 felter.
Der skal også være en lignende post for modstanderen.

hmmm, jeg skal vel også have en post, med hvilke felter spilleren har angrebet.

Problemet er at jeg ikke ønsker følgende:
spillerid, modstanderid, felt1, felt2, ... felt100
Det bliver umiddelbart for besværligt og tidskrævende at lave opslag i tabellen, da jeg så skal lave 4 opslag for hver gang en spiller angriber et felt.

Foreslag til hvordan jeg kan sende oplysningerne fra side til side uden at bruge en MySQL database, er også velkomne, men da spillerne skal kunne afbryde deres spil og gemme det til en anden dag, skal spillepladerne kunne gemmes.
Avatar billede abpdk Nybegynder
28. juni 2003 - 00:22 #1
Nu spiller jeg godt nok ikke "sænke slagskibe" ret tit (for ikke at sige aldrig), men jeg kan ikke lige gennemskue hvorfor det lige er bliver 4 opslag per skud?
Avatar billede d4s Novice
28. juni 2003 - 00:50 #2
Jeg får det til 4 databasetilgange pr. skud. Måske kan det gøres smartere:

1. et opslag for at hente spillernes plader (henter 4 poster)
2. en update af spillerens angrebsfelter (så spilleren kan se hvilke felter han har angrebet. Indholdet af modstanderens plade skal vises i de felter spilleren har angrebet)
3. evt. en update af modstanderens plade med ramt felt (hvis spilleren ramte noget, skal det destrueres fra modstanderens plade)
4. Hente spillernes plader for at vise dem på siden (skal ske hos begge spillere)

Så er det næste spillers tur og det hele starter forfra
Avatar billede abpdk Nybegynder
28. juni 2003 - 01:33 #3
Jeg ved ikke helt om jeg kan følge dit opslag nr. 2 og/eller 3.

Nu er min viden om mysql godt nok begrænset, men jeg kender ikke til andet end nogle ret basale datatyper så idéen om én post bestående af bl.a. et 2D-array er vist ikke muligt. Uanset om det er skal der jo hentes lige meget data hvad enten dataen ligger i én post eller den ligger hvert felt for sig, så mit bud på en løsning er den (synes jeg) mest oplagte:

CREATE TABLE felt(
  spillderid char(25),
  modstanderid char(25),
  x tinyint unsigned,
  y tinyint unsigned,
  value enum('vand', 'vand-ramt', 'skib', 'skib_ramt')
);

...så en spiller har 100 poster per spilleplade.

Jeg håber ikke det var det du mente med "spillerid, modstanderid, felt1, felt2, ... felt100", da jeg tolker det som:

CREATE TABLE spilleplade(
  spillderid char(25),
  modstanderid char(25),
  felt1 [type],
  felt2 [type],
  ...
  felt100 [type]
);
Avatar billede arne_v Ekspert
28. juni 2003 - 09:22 #4
Principielt er det vel noget a la:

spiller
-------

ID integer [PK]
navn varchar(64)

kamp
----

ID integer [PK]
spiller1 integer [FK->spiller.ID]
spiller2 integer [FK->spiller.ID]

plade
-----

ID integer [PK]
kamp integer [FK->kamp.ID]
spiller integer [FK->spiller.ID]

felt
----

plade integer [delt PK, FK->plade.ID]
x integer [delt PK]
y integer [delt PK]
indhold integer [0=vand,1=skib]
angrebet integer [0=ikke ramt,1=ramt]

men umiddelbart virker det tiltalende at forsimple det til:

kamp
----

ID integer [PK]
spiller1 varchar(64)
spiller2 varchar(64)

plade
-----

ID integer [PK]
kamp integer [FK->kamp.ID]
spiller varchar(64)
felt char(100) ['v'=vand, 's'=skib, 'V'=ramt vand, 'S'=ramt skib]
Avatar billede d4s Novice
28. juni 2003 - 10:26 #5
Da jeg gerne vil undgå 100 poster pr. spillerplade og gerne vil undgå 100 felter pr. pladepost, foretrækker jeg arnes løsning.
Jeg nåede selv frem til samme løsning i nat, nemlig at gemme pladen i en streng på 100 tegn. Så skal jeg kun hente en post med 5 felter
db_id int(5) (index autonummerering)
spiller_id int(5)
modstander_id int(5)
pladetype tinyint(1) (plade eller angreb)
plade varchar(100)

Dog havde jeg ikke set det geniale i at gemme angreb og plade i samme post v/V/s/S. Mange tak for det tip.

D4
Avatar billede abpdk Nybegynder
28. juni 2003 - 16:02 #6
Hmm, den med strengen var slet ikke faldet mig ind. Smart! :)
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
Computerworld tilbyder specialiserede kurser i database-management

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