Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Dva random broja čija kombinacija ne postoji u tabeli

  • 24 odgovora
  • 7.733 pregleda

Najnovija ↓

Re: Dva random broja čija kombinacija ne postoji u tabeli 29.05.2008. u 22:34 · pre 224 meseca #21
Baza je sve, ali nije mala. Trenutno postoji oko 30 tabela, a još nisu dodate sve opcije

Inače velična mape još nije određena, ali mislim da neće biti manja od 200x100.
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: Dva random broja čija kombinacija ne postoji u tabeli 29.05.2008. u 22:41 · pre 224 meseca #22
Mislio sam na veličinu u smislu količine podataka, ne broja tabela. 100x200 nije ništa i nema razloga da sve to ne učitaš u memoriju pri startovanju programa i zaboraviš na SQL.

Sa druge strane, TribalWars kaže da ima 500k igrača. Ako su svi na istoj mapi, veličina mape bi teško mogla da bude manjeg reda veličine od 100kx100k. A i da nisu svi na jednoj mapi, ukupan broj polja bi bio isti (reda veličine milijarde).
Re: Dva random broja čija kombinacija ne postoji u tabeli 29.05.2008. u 23:18 · pre 224 meseca #23
Nisu svi na jednoj mapi već je sve podeljeno u nekoliko desetina "svetova" tako da ipak mislim (nadam se) da će količina podataka biti veća.
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Re: Dva random broja čija kombinacija ne postoji u tabeli 30.05.2008. u 00:49 · pre 224 meseca
izmenjeno 2 puta, poslednji put deerbeer 30.05.2008. u 11:30
  1. deerbeer30.05.2008. u 11:30zapis iz teksta poruke
  2. deerbeer30.05.2008. u 11:19zapis iz teksta poruke
#24
Citat:
@vujkev
Učetvujem u izradi igrice slične TribalWars (nadam se da sam dobro napisao) u kom korisnik može da kreira "Selo" na mapi.

Pa sto ne rece da si u game-modu .Pitah te pre neki dan a tek sad vidim o cemu se radi ..

Tebi vec radi taj kod sto si postovao al kako kazes nemas dobru "gustinu raspodele" na mapi od 100 X 100
tj. voleo bi da imas neko maximalno dozvoljeno odstupanje tacaka (koje ti odredis) od koordinatnog pocetka.
Takvu bazu treba samo da popunis sa nekim boljim random generatorom iz nekog ozbiljnijeg programskog jezika a ne iz TSQL-a ...

Pogledaj ovde primer u c++ -u :
http://www.codeproject.com/KB/recipes/zigurat.aspx
Probaj da iskoristis ovaj algoritam koji se zasniva na normalnoj (Gausovoj) raspodeli tacaka (pogledaj grafikon u obliku zvona)
a koje ce zadovoljiti uslov standardne devijacije (ili srednje kvadratno odstupanje slucajnih vrednosti od srednje vrednosti ) kod slucajnih brojeva.
Evo malo teorije:
http://en.wikipedia.org/wiki/Standard_deviation
http://en.wikipedia.org/wiki/Variance
Kad pronadjes tj. generises sve moguce tacke ostaje ti samo da ih u bazi flag-ujes sa zauzeto/slobodno ..

EDIT :
Eh da ..setih se da u TSQL-u postoji takva funkcija za dobijanje standardne devijacije ..
Pogledaj STDEV ili STDEVP agregate funkcije ako ti gore pomenuti primer ne pije vodu .....
Potpis
Viva lollapalooza
Re: Dva random broja čija kombinacija ne postoji u tabeli 02.06.2008. u 11:23 · pre 224 meseca
izmenjeno 1 put, poslednji put deerbeer 02.06.2008. u 11:33
  1. deerbeer02.06.2008. u 11:33zapis iz teksta poruke
#25
Sta bi ? Nista od TribalWars-a ....
Kao sto rekoh za generisanje slucajnih brojeva tj. raspodela sela unutar nekog sveta koristi normalnu (gausovu) raspodelu
jer ako se uzme kao primer neki grad u srbiji statisticki gledano sva naselja, opstine,sela itd
su gusto raspodeljeni u nekom radijusu od recimo 20km (ako racunas ukupan radijus od 100km) od centra tog grada ....

Evo TSQL skripte koja ti mozda bude od pomoci :
STDEVP (ili ti STDEV population) je standardna devijacija slucajnih brojeva za veliki broj uzoraka
A sve statisticke raspodele u matematici priblizavaju se normalnoj(gausovoj) za veliki broj uzoraka
(ZAKON VELIKIH BROJEVA)

Code:

create  table  #temp (locationX int,locationY int)
declare @brojac int 
set @brojac = 0
while @brojac <= 100000     /* stdevp primeniti samo za veliki broj uzoraka slucajnih promenjlivih 
begin 
insert into #temp (locationX,locationY) 
values ((rand() * 100),rand()* 100) 
set @brojac = @brojac + 1 
end 


declare @stdevX int 
declare @stdevY int  

Select @stdevX = stdevp (locationX) FROM #temp
Select @stdevY = stdevp (locationY) FROM #temp

select distinct locationX,locationY from #temp 
where locationX < @stdevX and locationY < @stdevX 

drop table #temp

--result set --
11          2 
2    22
27    4
14    25
1    18
13    11
25    15
16    0
23    22
4    7
11    21
10    14
22    5
8    23
21    9
22    17
19    3
20    19
7    20
24    20
...
...
...



Ovakva raspodela ti daje 784 tacaka ... sto je dovoljno kako si rekao za 500 igraca na mapi ..

Tebi jedino ostaje da ocistis neke lokacije tj. tacke koje dobijes ovakvim generisanjem
a koje su mnogo blizu jedna druge
Na primer : selo1(5,10) i selo2(5,13) jer je malo verovatno da takva sela budu toliko blizu
mada posto je u TribalWars tematika srednji vek
vise je verovatno da su neka sela toliko blizu i da ih naprimer deli jedan most i reka :)
Potpis
Viva lollapalooza
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme