« 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 »