ďťż

[PHP] + [MySQL] Jak ułożyć baze do gry?

       

Podstrony


telcocafe

Robie gre MMO, i mam problem, nie wiem, jak skonstruowac baze.
Uwzglednic w niej musze, ilosc poszczegolnych statkow(12 typów)ilosc surowca(3 typy) systemy obronne(9 typów) pozycja planety, dane gracz(mail, nick, haslo, ostatnio aktywny) poziomy budowli(10 typów). I nie wiem jak to skonstruowac, mielem niedawno koncepcje, zeby na gracz zajmowal w tabelce(500 pol) 1 rekord, ale to zbyt wolne. ALbo stworzyc kilka tabel( 1: gracz 2: planeta 1 2:planeta2 ... 10: planeta 9) i w ten sposob by gracz mial w kazdej tabelce jeden rekord, a odpowiednie funkcje by dzialaly

BŁAGAM POMOŻCIE, prosilbym także o jakies przykłady.
Użytkownik bobek_balinek edytował ten post 04 marzec 2006, 17:07


a skąd mamy wiedzieć co chcesz tam umieścić? "itd" to nie jest coś uniwersalnego. a z resztą to ty sam powienieś wiedzieć skoro za to się zabierasz.

tabela planet1:
name varchar(100),  //nazwa planety user int, //wlasciciel - liczba oznaczajaca id uzytkownika surowiec1 int, //surowiec ... blabla surowiec2 int, //i tak dalej ... id int not null auto_increment,   //takie moje widzimisie - do kazdej tabeli dodaje. primary key(id);
Podobnie dla tabeli planet2 itp. Do tego potrzebna bedzie tez tabela uzytkownikow na podstawie ktorej zamienisz id uzytkownika na jego nazwe itp. Jest z tym troche roboty. Ale Tobie sukcesu nie wróżę.

Dobra to jeszcze tabela users
name varchar(100), email varchar(100), ... i tak dalej ... id int not null auto_increment,   primary key(id);
Do tego odrobina php:
class users { function GetName($id) { $zapytanie = 'select name from users where id='.$id; $wynik = mysql_query($zapytanie); $rekord = mysql_fetch_array($wynik); return $rekord['name']; } }
Wywolanie:
Po odczytaniu wartosci 'user' dla danej planety robimy users::GetName($wyczytany_user_z_planety); i juz mamy nazwe wlasciciela :)
Na wzor tego zrob dla innych rzeczy - emaila, opisu czy czego tam chcesz. W podobny sposob wyczytuj dane z tabeli planet - np ilosc surowcow, wlasciciela.
Użytkownik Einzeinbleth edytował ten post 04 marzec 2006, 17:14
Heh czyż by miało powstać drugie OGame?
Ja bym to zrobił tak:
[tabela Planety] id INT UNSIGNED NOT NULL AUTO_INCREMENT // id planety nazwa VARCHAR(50) NOT NULL AUTO_INCREMENT pozGal TINYINT UNSIGNED NOT NULL // pozycja planety (galaktyka) pozUkl SMALLINT UNSIGNED NOT NULL // pozycja planety (układ planetarny) pozPlan TINYINT UNSIGNED NOT NULL // pozycja planety (miejsce w układzie planetarnym) owner_id INT UNSIGNED NOT NULL // ID właściciela, będzie odnosiło się do tabeli Users // No i musisz tu dodać wszystkie BUDYNKi, bo przeciez na kazdej planecie beda inne poziomy rozbudowanych budynkow, wiec musza byc przechowywane w tej tabeli, przyklady: kopalniaMetalu TINYINT UNSIGNED NOT NULL // poziom kopalni metalu kopalniaKrysztalu TINYINT UNSIGNED NOT NULL //itd... // Z obroną robisz tak samo. Z flotą podobnie, tyle że musisz rozwiązać jeszcze problem wysyłania floty na inne planety  :) Z tym już sam pokombinuj. // I teraz zalezy jeszcze jak rozwiazesz problem z surowcami: czy masz juz ustalone jakie dokladnie beda i raczej nie bedziesz dodawal nowych, czy surowce maja obowiazywac dla wszystkich planet gracza czy tylko dla konkretnej planety. Jesli dla konkretnej planety to musisz dodac: metal INT UNSIGNED // ilosc metalu krysztal INT UNSIGNED // ilosc krysztalu deuter INT UNSIGNED // ilosc deuteru // Nazwy surowcow wzialem z ogame :) / A jak chcesz zrobic zeby surowce obowiazuja dla wszystkich graczy to musisz dodac je w tabeli z informacjami o graczach, w moim przykladzie tabela Players.

A co do graczy to juz chyba zaden problem
[tabela Players] id INT UNSIGNED NOT NULL AUTO_INCREMENT nazwa_uzytkownika VARCHAR(30) haslo VARCHAR(32) // << 32 znaki, bo tyle koduje MD5 email VARCHAR(50)
Użytkownik zbig27 edytował ten post 04 marzec 2006, 18:39


Spoko, dzieki wielkie, aha i jeszcze jedno... jak zapisac w bazie, kiedy uzytkownik rozpoczal budowe i kiedy sie skończy, ja to probuje rozwiazac w ten sposób:

planeta1:

kop_m : int;
b_kom_m : datetime (i do kazdej budowli, statku badania by bylo dopisane b_NAZWA i specjalna funkcja by obliczala, porownywala itd.)

aha i jeszcze jedno pytanko, jak zrobić funkcje do "wydobywania surowców"? Ja wpadle m na pomysl, aby funkcja porownywala date ostatniego klikniecia a obecną(w sekundach) i obliczalo odpowiednia ilosc poprzez dzialanie matematyczne 22*(a*a)*19/11)
gdzie a to poziomkopalni a liczba 22 to ilosc wydobywanego suworca na godzine. ALe nie umiem napisac funkcji która by to porównywałą. Prsze o pomoc
Co wy o takim rozwiazaniu myślicie??

w tym watku masz moje odpowiedzi na oba twoje pytania (tam bylo o cwiczeniu skilli zamiast o wydobywaniu surowcow, ale to to samo): http://forum.ks-eksp...pic=73081&st=0#
Użytkownik Deadeye edytował ten post 06 marzec 2006, 13:13
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.