« Előző oldal- - - ^Tartalom^- - - Következő oldal »
TÖBBJÁTÉKOS MÓD:
A GM támogatja a többjátékos módot. Ez a
fejezet a lehetőségek egy rövid leírását adja.
- Egy kapcsolat
felépítése:
Ahhoz, hogy két számítógép kapcsolatba léphessen
egymással, szükség van néhány csatlakozási protokollra (a
protokoll a szabályok és szabványok gyűjteményét jelenti).
A legtöbb játékhoz hasonlóan a GM is
négyféle csatlakozási típust kínál fel: IPX, TCP/IP,
modemes és soros kapcsolatot.
Az IPX csatlakozás (helyesebben protokoll) használható a helyi
hálózaton való játékra. Ez telepítve kell, hogy legyen a
használt számítógépeken (ha nem működik, nézzük át a
Windows ezzel kapcsolatos leírását, vagy a Windows
vezérlőpultjában a Hálózat ikont megnyitva telepítsük ezt
a protokollt).
A TCP/IP az Internet protokoll, ez használható az interneten
keresztüli játékra, az IP címek segítségével. Helyi
hálózaton a címek használata nélkül használható.
A modemes kapcsolat a modemen keresztül történik, ehhez
néhány modemes beállítás szükséges: egy inicializáló
(bevezető) szöveg és egy telefonszám.
Végül a soros kapcsolathoz, ami két számítógép közvetlen
összeköttetését jelenti, a csatlakozó (port) beállítások
egy számáról kell gondoskodni.
Négy GML függvény létezik ezen kapcsolatok
létrehozására:
mplay_init_ipx() - egy IPX kapcsolat
létrehozása.
mplay_init_tcpip(cim) - egy TCP/IP kapcsolat
létrehozása. A cím egy szöveg, mely egy honlap vagy IP címet
tartalmazhat, pl. 'www.gameplay.com' vagy '123.123.123.12',
esetleg egy port cím is követi (pl. ':12'). Csak egy gyűlés
(lásd később) létrejöttekor kell gondoskodni egy címről.
Helyi hálózaton nincs szükség címekre.
mplay_init_modem(bevszov,telszam) - egy modemes
kapcsolat létrehozása. A bevszov az
inicializáló szöveg (üres is lehet), a telszam
a tárcsázáshoz szükséges telefonszámot (pl. '0201234567')
tartalmazó szöveg, ez utóbbiról csak egy gyűlés (lásd
később) bekapcsolódásakor kell gondoskodni.
mplay_init_serial(portszam,atvseb,stopbits,paritas,fv)
- egy soros kapcsolat létrehozása. A portszam
a port száma (1-4), atvseb az átviteli
sebesség (100-256K), stopbits a
"megállító bitek" számát (0=1 bit, 1=1.5 bit,
2=2bit), paritas a paritásbitet (0=nincs,
1=páratlan, 2=páros, 3=jelölés), míg az fv
a forgalomvezérlés típusát jelzi (0=nincs, 1=xon/xoff, 2=rts,
3=dtr, 4=rts és dtr).
Ezeket a függvényeket a játéknak pontosan egyszer kell
hívnia. Mindegyik függvény jelzi a sikeres végrehajtást. Ha
a szükséges protokoll nincs a gépre telepítve, vagy nem
támogatott, akkor természetesen ezek a függvények sem lesznek
eredményesek. A sikeres csatlakozás ellenőrzésére a
következő függvény használható:
mplay_connect_status() - a jelenlegi kapcsolat
állapota. 0=nincs kapcsolat, 1=IPX, 2=TCP/IP, 3=modemes, 4=soros
kapcsolat.
A kapcsolat bontásához a következő függvény használható:
mplay_end() - a jelenlegi kapcsolat
megszakítása.
A saját gép IP címének megtalálásában a következő
függvény segít:
mplay_ipaddress() - a saját gép IP címe (pl.
'123.123.123.12'), szövegként. Ezt pl. ki lehet íratni
valahová a képernyőre, de ne hívjuk túl sokszor, mert
lassú.
- Gyűlések
létrehozása és csatlakozás:
Lehet, hogy több játék is zajlik ugyanazon a hálózaton,
amelyre csatlakozunk. Ezeket hívjuk gyűléseknek.
Amikor indítani akarunk egy új többjátékos módú játékot,
létre kell hozni egy új gyűlést. Ehhez a következő rutin
használható:
mplay_session_create(gynev,jatekosokszama,sajatnevem)
- egy új gyűlés létrehozása a jelenlegi kapcsolaton. Gynev
a gyűlés neve, jatekosokszama az a szám,
amennyi játékos játszhatja a játékot (ha ez 0, akkor
akármennyien lehetnek), sajatnevem az a név,
amellyel a gyűlés létrehozója szerepel. Jelzi, hogy
sikerült-e.
A játék egy példányát létre kell hozni a gyűlésben, a
játék többi példányainak pedig csatlakozniuk kell ehhez a
gyűléshez. Tehát először is szét kell nézni, hogy milyen
gyűlések léteznek, majd csatlakozni kell az egyikhez. Három
rutin fontos ezzel kapcsolatban:
mplay_session_find() - azon gyűléseket keresi,
amelyek fogadnak még játékosokat, és visszatér azzal a
számmal, ahány ilyet talált.
mplay_session_name(szam) - a szam
számú gyűlés nevét adja (0 az első gyűlés). Ez a rutin
csak az előző hívása után hívható.
mplay_session_join(szam,sajatnevem) -
csatlakozás a szam számú gyűléshez (0 az
első), sajatnevem néven.
A következő rutin a gyűlésmód megváltoztathatóságára
szolgál. Egy gyűlés létrehozása előtt kell hívni:
mplay_session_mode(elmegy) - átköltözhet-e a
gyűléskiszolgáló egy másik gépre, ha az eddigi kiszolgáló
befejezi működését (elmegy igaz vagy hamis
lehet, utóbbi az alapértelmezett).
A gyűlés pillanatnyi állapotának lekérdezésére a
következő függvény használható:
mplay_session_status() - a jelenlegi gyűlés
állapota. 0=nincs, 1=létrehozott, 2=csatlakozott.
Egy játékos a következő rutinnal kapcsolódhat le a
gyűlésről:
mplay_session_end() - a csatlakozás vége az
ezt hívó játékos számára.
- Játékosok:
A játék minden példánya, amely csatlakozik egy gyűléshez,
egy játékos. Mint már tudjuk, a játékosoknak van nevük.
Három rutin foglalkozik a játékosokkal.
mplay_player_find() - minden játékost megkeres
a jelenlegi gyűlésben, és visszatér a számukkal.
mplay_player_name(szam) - a szam
számú játékos nevét adja (0 az első játékos, mely mindig
saját maga). Ezt mindig az előző hívása után kell hívni.
mplay_player_id(szam) - a szam
számú játékos egyéni azonosítóját adja (0 az első
játékos, mely mindig saját maga). Ezt mindig az első rutin
hívása után kell hívni. Az egyéni azonosító használható
üzenetek küldésére és fogadására egyéni
játékosoknak/játékosoktól.
- Megosztott
adat:
A megosztott adatátvitel valószínűleg a legkönnyebb módja a
játék összhangba hozásának. Minden közlés védve van
tőlünk. Egy 1000000 értékű halmaz közös a játék minden
egyede számára. (memóriamegtakarítás végett ezekből
inkább csak az első néhányat használjuk). Minden egyed tud
beállítani és kiolvasni értékeket. A GM
megbizonyosodik arról, hogy minden egyed ugyanazokat az
értékeket látja. Egy érték lehet valós szám vagy szöveg.
Erre két rutin létezik:
mplay_data_write(hely,ertek) - az ertek
érték (egész vagy szöveg típusú) írása hely
helyre (ami 0 és 1000000 között lehet).
mplay_data_read(hely) - a hely
helyen (0 és 1000000 között) lévő adattal tér vissza.
Eleinte minden érték 0.
Hogy különböző gépeken összhangba hozhassuk az adatokat,
használhatjuk a szavatolt módot, mely megbizonyosodik arról,
hogy a változtatás megérkezett a másik gépre (ez lassú),
vagy a nem-szavatolt módot. Ehhez a következő függvény
használható:
mplay_data_mode(szav) - a szavatolt módot
használjuk-e az adatátvitelhez, vagy sem. Szav
igaz (alapértelmezett) vagy hamis lehet.
- Üzenetek:
Egy játékos küldhet üzeneteket egy másik játékosnak, vagy
az összes többinek. A játékosok megnézhetik, hogy
érkezett-e üzenetük, és ennek megfelelően cselekedhetnek. Az
üzeneteket elküldhetjük szavatolt módban, mely során
megbizonyosodhatunk azok megérkezéséről (de ez lassú lehet),
vagy nem-szavatolt módban, ami gyorsabb.
mplay_message_send(jatekos,id,ertek) - egy
üzenet küldése a jelölt játékosnak (megadható azonosító
vagy név is, a 0 használatával az összes játékosnak elmegy
az üzenet). Id egy egész típusú üzenet
azonosító, ertek pedig az érték (valós
típusú, vagy szöveg lehet). Az üzenet nem-szavatolt módban
megy el. Ha ertek szöveget tartalmaz, akkor a
legnagyobb szöveghossz 30000 írásjel lehet.
mplay_message_send_guaranteed(jatekos,id,ertek)
- ugyanaz, mint az előző, de ezzel az üzenet szavatolt módban
megy.
mplay_message_receive(jatekos) - a következő
üzenet vétele a jelölt játékostól (azonosító vagy név)
érkezett üzenetsorból, 0 használatával minden játékostól.
A rutin visszaadja, hogy valóban egy új üzenet volt-e.
Ezesetben a következő rutinokkal férhetünk a tartalmához:
mplay_message_id() - a legutóbb megkapott
üzenet azonosítója.
mplay_message_value() - a legutóbb megkapott
üzenet értéke.
mplay_message_player() - a legutóbb megkapott
üzenetet küldő játékos.
mplay_message_name()- a legutóbb megkapott
üzenetet küldő játékos neve.
mplay_message_count(jatekos) - az adott
játékostól érkezett sort elhagyó üzenetek száma (0
használatával minden üzenetet számlál).
mplay_message_clear(jatekos) - az adott
játékostól érkezett sort elhagyó üzenetek törlése (0
használatával minden üzenetet eltávolít).
Egy külön játékosnak való üzenetküldéskor ismerni kell az
ő egyéni azonosítóját. Ez a már ismert mplay_player_id()
függvénnyel tudható meg. Ez a játékosazonosító
használható egy külön játékostól való üzenet vételére
is. Ezenkívül szöveges név is adható a játékosnak. Ha
több játékosnak ugyanaz a neve, akkor csak az első fogja
megkapni az üzenetet.
Azért van minden üzenetnek egyéni azonosítója, mert ez
lehetővé teszi az alkalmazásunk számára, hogy különböző
típusú üzeneteket küldhessen. A vevő az azonosító
segítségével leellenőrizheti az üzenet típusát, és ennek
megfelelően cselekedhet.
(Mivel az üzenetek megérkezése nem szavatolt, az azonosító
és az érték külön üzenetben küldése súlyos gondokat
okozna.)
« Előző oldal- - - ^Tartalom^- - - Következő oldal »