[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Noen tanker
- To: pvvmud@pvv.ntnu.no
- Subject: Noen tanker
- From: Tore Skaug <toresk@pvv.ntnu.no>
- Date: Fri, 20 Nov 1998 15:03:12 +0100 (CET)
- Delivered-To: home/andersr+pvvmud@homepvva.pvv.ntnu.no
- Delivered-To: andersr+pvvmud@pvv.ntnu.no
- Delivered-To: pvvmud@pvv.ntnu.no
Hei!
Ser at Anders akkurat sendte en mail om mye av dette her, men da var
jeg godt igang med å skrive, så denne mailen er ukorrelert med Anders
sin.
Jeg har lekt litt med forskjellige tanker om hva som kunne være best
egnet som en underliggende motor for MUD'en, og det jeg drømmer om å
få til er en fullstendig objektorientert affære. Det hadde vært stilig
om det gikk an å legge inn minimalt med begrensninger i
server/klient-biten, i den grad at en lett kunne bevege seg fra en
fantasy-setting og over til noe som baserer seg på helt andre
kampsystemer etc., eller for den saks skyld lage et
"Patagonia"-opplegg.
Kanskje er dette bare ønsketenkning, kanskje er det lite produktivt å
prøve noe i den retning, men det er hvertfall de tanker jeg diller
litt med om dagen. Foreløbig sliter jeg med å få alt til å komme på
plass, og det kan virke som om kompleksiteten av noe slikt kan bli i
største laget.
Når jeg tenker "objekt-orientert" tenker jeg ikke veldig Java/C++,
drømmen er noe mer dynamisk der objekter implementerer grensesnitt og
kanskje kan endre grensesnittene sine dynamisk etter visse
regler. Her er noen korte, ustrukturerte ideer.
Objekter som påvirker andre objekter registrerer seg hos dem eller
systemet som en agent som påvirker på en spesiell måte. Objekter kan
sende signaler (en fire-and-forget mekanisme som ikke engang
garanterer at signalet kommer frem, kanskje det kan ha blitt drept i
mellomtiden). Objekter kan implementere slots, mottagere av
signaler. Objekter kan implementere metoder.
Et grensesnitt består av et sett signaler, slots og
metoder. Omverdenen forholder seg til et objekt via de grensesnitt det
implementerer.
Et grensesnitt bør kunne arve andre grensesnitt og legge til egne
greier.
Hvis grensesnittet A arver B og C, og et objekt implementerer B og C
uten eksplisitt aa implementere A, boer en kanskje kunne si at
objektet ogsaa implementerer A.
Dette sier ikke saa mye, men kanskje det kan spore an til litt tekning
blant pvvmud'erne, kanskje er jeg helt paa jordet, kanskje kan dette
bli til noe som kan fungere i praksis. Jeg regner med aa komme med
noen mer konkrete forslag etterhvert som jeg har faatt tenkt litt mer
paa tingene.
Hovedtanken er: færrest mulig begrensninger. Hvis en
f.eks. implementerer mat i spillet, kan noen senere komme på at det
kunne være stilig i en diger skog å la noen dyr implementere at de kan
spises, men at en må vite litt om hvordan en går frem og de må
stekes. Som igjen kan lede til at noen må kunne litt om å lage et bål,
og at en må vente litt på at maten blir ferdig. Slikt kunne kanskje
hatt en effekt at det ble litt rollespill mens en er tvunget til å
vente ol. Hvis spillet er for statisk konstruert, ville denne
(kanskje dårlige) ideen ikke kunne bli implementert.
På en usannsynlig kjedelig kveld laget jeg en liten og dårlig historie som
vi kunne kalle "Tyven som ville bli sterk" eller noe slikt.
Til stede: en tyv, en potion og det allmektige systemet
Tyv: Jeg vil drikke deg
Pot: Skal vi se... har du høy nok visdom, da?
Tyv: Jepp.
Pot: Og har du drukket noe slikt som meg i det siste?
Tyv: Nope.
Pot: Ok... og ikke noe magisk motstand som gjør at jeg ikke virker?
Tyv: Magisk motstand, hva i huleste er det?
Pot: Glem det :) Ok, jeg vet at du har en liste over gjenstander som
påvirker styrken din, legg meg til der, gidder du? Og du kan
legge meg til som et objekt som påvirker massen din.
Tyv: Er gjort. Hmm.. har visst fått en del oppdateringer nå, får
sjekke ut litt om tilstanden min. Wow, jeg føler meg kjempesterk!
Pot: Da var _det_ gjort. Får sjekke ut hvor lenge jeg skal
virke... hei, allmektige system! Gi meg en 3D6!
Sys: Mas, mas, mas... ok, jeg gir deg en 4
Pot: Hehe, det blir nok konsumenten lite glad for. Ok, sett en timer
til å trigge meg på signal S om fire minutter, ok?
Sys: Mas, mas...
Pot: *snork*
Pot: Huh, hva skjer? Ah, fire minutter er gått. System-dude! Jeg
har bestemt meg for at jeg vil dø.
Sys: Ok, jeg tar knekken på deg etterhvert, inntil videre får du
sørge for å ha en saklig default oppførsel for en døende potion.
(Til tyv) Hoppla! Jeg har akkurat knertet noen objekter som
påvirker styrken din og massen din.
Tyv: Får regne litt på den nye tilstanden min, takker og bukker.
Sys: Ingen hårsmak. Du kan selvsagt ikke lenger aksessere objektet.
Og etter at alle andre interessenter har fått beskjed, vil det
få en stille død når alle køede kall er terminert.
Snipp snapp... Et fullstendig banalt eksempel på interaksjon, ei
heller noen kandidat for Nobel-pris i litteratur, men noe som kanskje
kan få igang litt tankeprosesser. Foreløbig har jeg litt sansen for et
konsept der objekter kan ha lister over objekter som påvirker dem på
forskjellige måter.
Et alvorlig problem i noe helt generelt og objekt-basert er ting som
o En del ting kan og bør skje parallelt
o Noen ting trenger locks for å utføres
o Som igjen kan lede til deadlocks
o En kan få situasjoner der en får uendelige løkker av metodekall
ol., ex. B spør A om a, for å svare må A spørre B om b, som da
må spørre A om a osv., f.eks. en magisk stein som alltid veier
10% av bærerens totale byrde (ikke at jeg tror noen kunne ha
interesse av å implementere noe slikt). Kanskje kunne noe slikt
sjekkes når en implementering legges inn i basen, dvs. "vil denne
endringen kunne gi deadlocks og uendelige løkker", men jeg antar
at det ville resultere i uhorvelig store graf-søk.
Innlegging i basen av implementasjoner, grensesnitt etc. kunne ha et
system av aksessrettigheter for hvem som får lov til å legge inn hva,
f.eks. hvilket aksessnivå som kreves for å kunne endre
implementasjoner av visse grensesnitt, gjøre endringer i et bestemt
område osv. Noe smalltalk-aktig som kunne være litt stilig ville være
å kunne aksessere basen med en haug views som "implementere av visse
grensesnitt, sender visse signaler" osv.
Dette var bare mine 10 øres løse ideer, spinn gjerne videre på dem,
forkast dem som latterlige eller kom med andre ideer. Jeg kommer
antageligvis ikke til å kunne få med meg evt. kommentarer i løpet av
helgen da jeg skal en tur til Toulouse (med mindre det blir togstreik,
Frankrike er streikenasjon nr. 1, skulle jeg tro. Det var visstnok
togstreik i går, og da jeg for noen uker siden tok en tur til
Aix-en-Provence på ettermiddagen, var det streik når jeg skulle hjem
om kvelden. Et lokalt navn på Air France er Air Strike ;-)
BTW, hvis noen har et tips til hvordan jeg på en Sun Ultra1 under
Solaris 2.5.1 kan klare å få norske tegn på tastaturet, blir jeg
veldig glad. Jeg har prøvd alle tipsene jeg har funnet i no.unix,
.inputrc og M- fungerer ikke, compose-tasten gir meg fem av seks
norske bokstaver. Jeg vil ikke ha norsk tastatur-layout, trenger bare
de norske bokstavene på saklig måte helst uten å måtte klå på xkeymaps
med redefinering av Home og slikt.
- Tore