www.civilization.org.pl
Forum •  FAQ •  Search •  Memberlist •  Usergroups •  Register •  Log in •  Download
 
 Announcement 
   Jesteś nowy? Kliknij tutaj!    Zgłoś grę Civ6     Zgłos grę Civ5    Zgłoś grę Civ4         Mistrz sezonu    IRC, TUTAJ UMÓWISZ SIĘ NA GRĘ    Na ircu jest users osób. Załaduj obrazek Czytnik RSS 

Previous topic «» Next topic


Kto pierwszy założy religię?
Author Message
Beny 



xfire: fcbeny
Helped: 50 times
Age: 30
Joined: 12 Mar 2006
Posts: 9054
Piwa: 65/13
Location: Czerniejewo
generał dywizji  Złoty order za specjalne zasługi - system Dyplo, PBEM, FFA, losujący, civilopedia  Brązowy zlotowicz - 2 zloty  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Piwosz – otrzymał minimum 25 piw  Obibok – nie grał od 90 dni  I miejsce w Dyplo - Dyplo Miś 2  Przeżycie w Dyplo - Dyplo4  Złoty gracz w demokrację - GwD1-admin  Złoty gracz w demokrację - GwD2 
Posted: 2007-09-16, 22:54   Kto pierwszy założy religię?

A konkretnie:
Kto pierwszy założy religię, jeśli kilku graczy ukończy wynajdowanie potrzebnego techa w tej samej turze?
Od kiedy gramy bez symultany to nas mniej to ciekawi ;)

Kod z pliku CvGame.cpp z katalogu: Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL
Code:

void CvGame::doHolyCity()
{
    PlayerTypes eBestPlayer;
    TeamTypes eBestTeam;
    long lResult;
    int iValue;
    int iBestValue;
    int iI, iJ, iK;

    lResult = 0;
    gDLL->getPythonIFace()->callFunction(PYGameModule, "doHolyCity", NULL, &lResult);
    if (lResult == 1)
    {
        return;
    }

    if (getElapsedGameTurns() < 5 && !isOption(GAMEOPTION_ADVANCED_START))
    {
        return;
    }

    int iRandOffset = getSorenRandNum(GC.getNumReligionInfos(), "Holy City religion offset");
    for (int iLoop = 0; iLoop < GC.getNumReligionInfos(); ++iLoop)
    {
        iI = ((iLoop + iRandOffset) % GC.getNumReligionInfos());

        if (!isReligionSlotTaken((ReligionTypes)iI))
        {
            iBestValue = MAX_INT;
            eBestTeam = NO_TEAM;

            for (iJ = 0; iJ < MAX_TEAMS; iJ++)
            {
                if (GET_TEAM((TeamTypes)iJ).isAlive())
                {
                    if (GET_TEAM((TeamTypes)iJ).isHasTech((TechTypes)(GC.getReligionInfo((ReligionTypes)iI).getTechPrereq())))
                    {
                        if (GET_TEAM((TeamTypes)iJ).getNumCities() > 0)
                        {
                            iValue = getSorenRandNum(10, "Found Religion (Team)");

                            for (iK = 0; iK < GC.getNumReligionInfos(); iK++)
                            {
                                int iReligionCount = GET_TEAM((TeamTypes)iJ).getHasReligionCount((ReligionTypes)iK);

                                if (iReligionCount > 0)
                                {
                                    iValue += iReligionCount * 20;
                                }
                            }

                            if (iValue < iBestValue)
                            {
                                iBestValue = iValue;
                                eBestTeam = ((TeamTypes)iJ);
                            }
                        }
                    }
                }
            }

            if (eBestTeam != NO_TEAM)
            {
                iBestValue = MAX_INT;
                eBestPlayer = NO_PLAYER;

                for (iJ = 0; iJ < MAX_PLAYERS; iJ++)
                {
                    if (GET_PLAYER((PlayerTypes)iJ).isAlive())
                    {
                        if (GET_PLAYER((PlayerTypes)iJ).getTeam() == eBestTeam)
                        {
                            if (GET_PLAYER((PlayerTypes)iJ).getNumCities() > 0)
                            {
                                iValue = getSorenRandNum(10, "Found Religion (Player)");

                                if (!(GET_PLAYER((PlayerTypes)iJ).isHuman()))
                                {
                                    iValue += 10;
                                }

                                for (iK = 0; iK < GC.getNumReligionInfos(); iK++)
                                {
                                    int iReligionCount = GET_PLAYER((PlayerTypes)iJ).getHasReligionCount((ReligionTypes)iK);

                                    if (iReligionCount > 0)
                                    {
                                        iValue += iReligionCount * 20;
                                    }
                                }

                                if (iValue < iBestValue)
                                {
                                    iBestValue = iValue;
                                    eBestPlayer = ((PlayerTypes)iJ);
                                }
                            }
                        }
                    }
                }

                if (eBestPlayer != NO_PLAYER)
                {
                    ReligionTypes eReligion = (ReligionTypes)iI;

                    if (isOption(GAMEOPTION_PICK_RELIGION))
                    {
                        eReligion = GET_PLAYER(eBestPlayer).AI_chooseReligion();
                    }

                    if (NO_RELIGION != eReligion)
                    {
                        GET_PLAYER(eBestPlayer).foundReligion(eReligion, (ReligionTypes)iI, false);
                    }
                }
            }
        }
    }
}


I krótka interpretacja:

Zaczynamy od sprawdzenia każdej reli, zaczynając od losowo wybranej i potem po kolei.
Oczywiście pomija religie, które zostały założone.
Sprawdza każdego z graczy, czy skończył odkrywać technologię potrzebną do danego techa. (czyt. czy w tej turze skończył, bo reli jeszcze nie ma)
Jeśli gracz skończył to losujemy mu liczbę od 1 do 10 (albo od 0 do 9, nie wiem dokjładnie, ale to nie ma znaczenia).
Sprawdza delikwenta, czy założył już jakąś religię.
Jeśli tak, to ma nieciekawie(co sie okaże na końcu), bo za każdą założoną relę dostaje dodatkowe 20 pkt.
Jeśli delikwent jest kompem to dostaje jeszcze 10 pkt, żeby nie był smutny ;)
I na końcu wygrywa ten, co ma najmniej punktów :)

PODSUMOWANIE:
Jeśli ukończysz techa w tej samej turze co komputer - wygrywasz :)
Jeśli ukończysz techa w tej samej turze co komputer, ale komputer nie ma reli, a Ty masz - przegrywasz :(
Jeśli dwóch ludzi ukończy techa w tej samej turze, a jeden z nich, założył więcej religii od drugiego - wygrywa ten co ma mniej religii :D
I najciekawszy przypadek, jeśli dwoje graczy ukończy techa w tej samej turze i mają pozakładane po tyle samo religii - wygrywa ten, kto sie zna z Sorenem, a konkretnie z jego funkcją losową ;)


I bonusik:
Które miasta są pod F9 jako Top 5 cities?

Kod z pliku: Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Assets\Python\Screens\CvInfoScreen.py
Code:

        # Calculate the top 5 cities

        for iPlayerLoop in range(gc.getMAX_PLAYERS()):

            apCityList = PyPlayer(iPlayerLoop).getCityList()
           
            for pCity in apCityList:
           
                iTotalCityValue = ((pCity.getCulture() / 5) + (pCity.getFoodRate() + pCity.getProductionRate() \
                    + pCity.calculateGoldRate())) * pCity.getPopulation()

                for iRankLoop in range(5):

                    if (iTotalCityValue > self.iCityValues[iRankLoop] and not pCity.isBarbarian()):

                        self.addCityToList(iRankLoop, pCity, iTotalCityValue)

                        break




Oczywiście 5 miast o największym współczynniku, który wyliczamy ze wzoru:

W = (K / 5 + J + P + Z) * Pop

W - współczynnik
K - kultura w mieście
J - liczba jedzonka wyciąganego w mieście
P - liczba młoteczków
Z - liczba monet złota
Pop - Populacja (nie ta z demo, tylko normalnie, jeden obywatel - jeden punkcik)
_________________
278
Postaw piwo autorowi tego posta
 
 
 
borys 
BENE VERTAT QUOD AGIS!


xfire: Boryslukasz
Age: 30
Joined: 12 Mar 2006
Posts: 1416
kapitan  Brązowy civmaniak – najwięcej rozegranych gier  Obibok – nie grał od 90 dni  IV-VIII miejsce w Pucharze KAC - II Puchar KAC 
Posted: 2007-09-17, 09:14   

Beny przecież my gramy oddzielne tury, więc chyba ten kto jest hostem bierze religie, jeśli dwóch graczy ukończy w tej samej turze...
Postaw piwo autorowi tego posta
 
 
 
Beny 



xfire: fcbeny
Helped: 50 times
Age: 30
Joined: 12 Mar 2006
Posts: 9054
Piwa: 65/13
Location: Czerniejewo
generał dywizji  Złoty order za specjalne zasługi - system Dyplo, PBEM, FFA, losujący, civilopedia  Brązowy zlotowicz - 2 zloty  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Piwosz – otrzymał minimum 25 piw  Obibok – nie grał od 90 dni  I miejsce w Dyplo - Dyplo Miś 2  Przeżycie w Dyplo - Dyplo4  Złoty gracz w demokrację - GwD1-admin  Złoty gracz w demokrację - GwD2 
Posted: 2007-09-17, 09:37   

Jak sie gra oddzielne tury to nie ma, ze w tej samej turze ;)

A FFA?
A dyplo?
A GOTM?
_________________
278
Postaw piwo autorowi tego posta
 
 
 
LDeska



xfire: ldeska
Helped: 34 times
Age: 42
Joined: 29 Mar 2006
Posts: 23314
Piwa: 13/1
Location: Warszawa
marszałek  Złoty order za specjalne zasługi  Złoty zlotowicz - 11 zlotów  Brązowy sponsor KAC  Srebrny civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Obibok – nie grał od 90 dni  III miejsce w Dyplo - Dyplo6  Przeżycie w Dyplo - Dyplo1  Przeżycie w Dyplo - Dyplo3  IV-VIII miejsce w Pucharze KAC - I,II,III,IV,V,VI Puchar KAC  II miejsce w rankingu FFA  II miejsce w Astro Pucharze - II Astro Puchar  I miejsce w Pucharze Randomowym - I Puchar Randomowy  I miejsce w Pucharze Randomowym - II Puchar Randomowy  I miejsce w Pucharze Randomowym - III Puchar Randomowy  I miejsce w sezonie Ligi KAC - I sezon  I miejsce w sezonie Ligi KAC - II sezon  I miejsce w sezonie Ligi KAC - III sezon  I miejsce w sezonie Ligi KAC - IV sezon 
Posted: 2007-09-17, 10:29   

Ta funkcja getSorenRandNum( int max, const char * opis ) zwraca liczbę pseudolosową z zakresu 0 .. max-1 włącznie więc w tym wywołaniu getSorenRandNum( 10, "Found Religion (TEAM)" ) zwróci wartość między 0 a 9.

Wyrazy uznania Beny za grzebanie w kodzie ;) Przyda się ta wiedza w grach typu FFA albo w turach symultanicznych
_________________
www.leszekbiega.pl - blog biegowy
Postaw piwo autorowi tego posta
 
 
 
Beny 



xfire: fcbeny
Helped: 50 times
Age: 30
Joined: 12 Mar 2006
Posts: 9054
Piwa: 65/13
Location: Czerniejewo
generał dywizji  Złoty order za specjalne zasługi - system Dyplo, PBEM, FFA, losujący, civilopedia  Brązowy zlotowicz - 2 zloty  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Piwosz – otrzymał minimum 25 piw  Obibok – nie grał od 90 dni  I miejsce w Dyplo - Dyplo Miś 2  Przeżycie w Dyplo - Dyplo4  Złoty gracz w demokrację - GwD1-admin  Złoty gracz w demokrację - GwD2 
Posted: 2007-09-17, 10:35   

LDeska wrote:
Ta funkcja getSorenRandNum( int max, const char * opis ) zwraca liczbę pseudolosową z zakresu 0 .. max-1

Tak myślałem, ale to nigdy nic nie wiadomo co ten Soren tam nagryzmolił :)

A właśnie,
jest gdzieś w plikach ta funkcja losowa Sorena?
Bardzo chętnie bym sie jej przyjrzał ;)
_________________
278
Postaw piwo autorowi tego posta
 
 
 
LDeska



xfire: ldeska
Helped: 34 times
Age: 42
Joined: 29 Mar 2006
Posts: 23314
Piwa: 13/1
Location: Warszawa
marszałek  Złoty order za specjalne zasługi  Złoty zlotowicz - 11 zlotów  Brązowy sponsor KAC  Srebrny civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Obibok – nie grał od 90 dni  III miejsce w Dyplo - Dyplo6  Przeżycie w Dyplo - Dyplo1  Przeżycie w Dyplo - Dyplo3  IV-VIII miejsce w Pucharze KAC - I,II,III,IV,V,VI Puchar KAC  II miejsce w rankingu FFA  II miejsce w Astro Pucharze - II Astro Puchar  I miejsce w Pucharze Randomowym - I Puchar Randomowy  I miejsce w Pucharze Randomowym - II Puchar Randomowy  I miejsce w Pucharze Randomowym - III Puchar Randomowy  I miejsce w sezonie Ligi KAC - I sezon  I miejsce w sezonie Ligi KAC - II sezon  I miejsce w sezonie Ligi KAC - III sezon  I miejsce w sezonie Ligi KAC - IV sezon 
Posted: 2007-09-17, 10:40   

Szukałem ale nie znalazłem - nie ma jej. Ale nie jest ona ważna dla nas, myślę że po prostu zaimplementował w niej któryś z generatorów liczb pseudolosowych, jest ich dość dużo. Co do ich oglądania to prawdopodobnie nie ma co oglądać :) miałem na studiach trochę o tych generatorach - bardzo zaawansowana matma a ich badanie czy mają dobry rozkład to zaawansowana statystyka :)
_________________
www.leszekbiega.pl - blog biegowy
Postaw piwo autorowi tego posta
 
 
 
Beny 



xfire: fcbeny
Helped: 50 times
Age: 30
Joined: 12 Mar 2006
Posts: 9054
Piwa: 65/13
Location: Czerniejewo
generał dywizji  Złoty order za specjalne zasługi - system Dyplo, PBEM, FFA, losujący, civilopedia  Brązowy zlotowicz - 2 zloty  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Piwosz – otrzymał minimum 25 piw  Obibok – nie grał od 90 dni  I miejsce w Dyplo - Dyplo Miś 2  Przeżycie w Dyplo - Dyplo4  Złoty gracz w demokrację - GwD1-admin  Złoty gracz w demokrację - GwD2 
Posted: 2007-09-17, 10:44   

LDeska wrote:
miałem na studiach trochę o tych generatorach


Ja nie miałem :P

Ale takie badanie, hm.. Zapuściło by sie generatora w pętli i niech sie kręci :P Oczywiście po zmodyfikowaniu, żeby zapisywał wyniki gdzieś tam, Bo my tu pitu pitu, a So0ren mógł nam kiche jakąś odstawić ;)
_________________
278
Postaw piwo autorowi tego posta
 
 
 
sc0rp 



xfire: sc0rpionus
Helped: 3 times
Age: 38
Joined: 04 Jan 2007
Posts: 1897
Piwa: 1/1
Location: Poznań
starszy chorąży sztabowy  Srebrny zlotowicz - 3 zloty  Obibok – nie grał od 90 dni 
Posted: 2007-09-17, 10:51   

...i tu dochodzimy do sedna sprawy: mamy super wyczesany komputery robiace po setki milionow operacji na sekunde a nie potrafia wygenerowac prawdziwej liczby losowej ;)

pozostaje pytanie czy czlowiek potrafi :) bo sa testy sugestywne i jak mamy po nich wymyslic liczbe to spora czesc populacji wymysla 11 lub 7 :)
_________________
We are the Web
No to sie doczekalem CiV
Postaw piwo autorowi tego posta
 
 
Cola 
WTF?



xfire: cola0760
Helped: 10 times
Age: 41
Joined: 31 Jan 2006
Posts: 7565
Piwa: 4/43
Location: z półobrotu
generał dywizji  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Obibok – nie grał od 90 dni  Przeżycie w Dyplo - Dyplo1  Przeżycie w Dyplo - Dyplo3  Przeżycie w Dyplo - Dyplo4  Wygrany jeden GOTM 
Posted: 2007-09-17, 11:52   

tam cos beny napisał ze komp sprawdza czy mamy relę już i daje temu co nie ma, ale czy bierze pod uwagę tylko relę załozoną (ze stolica) czy relę przybrana od kogos tez?
_________________
:cola:
Postaw piwo autorowi tego posta
 
 
 
LDeska



xfire: ldeska
Helped: 34 times
Age: 42
Joined: 29 Mar 2006
Posts: 23314
Piwa: 13/1
Location: Warszawa
marszałek  Złoty order za specjalne zasługi  Złoty zlotowicz - 11 zlotów  Brązowy sponsor KAC  Srebrny civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Obibok – nie grał od 90 dni  III miejsce w Dyplo - Dyplo6  Przeżycie w Dyplo - Dyplo1  Przeżycie w Dyplo - Dyplo3  IV-VIII miejsce w Pucharze KAC - I,II,III,IV,V,VI Puchar KAC  II miejsce w rankingu FFA  II miejsce w Astro Pucharze - II Astro Puchar  I miejsce w Pucharze Randomowym - I Puchar Randomowy  I miejsce w Pucharze Randomowym - II Puchar Randomowy  I miejsce w Pucharze Randomowym - III Puchar Randomowy  I miejsce w sezonie Ligi KAC - I sezon  I miejsce w sezonie Ligi KAC - II sezon  I miejsce w sezonie Ligi KAC - III sezon  I miejsce w sezonie Ligi KAC - IV sezon 
Posted: 2007-09-17, 12:12   

@Cola Wygląda na to że wystarczy religia w dowolnym mieście, przyniesiona może być nawet z innego państwa.

@Beny taki test można zrobić, wystarczy trochę samozaparcia - poszukaj na fanatykach jak skompilować SDK albo popytaj asiox3. Ja tego jeszcze nie robiłem ale czytałem na forum realms beyond że jeden chłopak skompilował sobie taki mini programik wywołujący fukncję SorenRand dla wartości 2 i dostawał tylko 0 i 1. Zrobił to żeby sprawdzić to czy ta funkcja zwraca wartości od 0 czy od 1 - to o co pytałeś wcześniej. Czyli to nie powinno być trudne żeby taki test sobie zrobić.
Tylko że jest to trudne aby ocenić w jakim stopniu generowane liczby pseudolosowe są "losowe". Żeby to zrobić należałoby najpierw obmyśleć dobrą metodą badawczą. Proponuję losować bardzo dużą liczbę liczb w pętli i badać wariancję, średnią i ilość wylosowanych poszczególnych liczb. W profesjonalnych zastosowaniach bada się też czy nie występują pętle w generatorze, ale żeby to zbadać to już bardzo ciężka sprawa.
Może kiedyś się tym pobawię...
_________________
www.leszekbiega.pl - blog biegowy
Postaw piwo autorowi tego posta
 
 
 
Beny 



xfire: fcbeny
Helped: 50 times
Age: 30
Joined: 12 Mar 2006
Posts: 9054
Piwa: 65/13
Location: Czerniejewo
generał dywizji  Złoty order za specjalne zasługi - system Dyplo, PBEM, FFA, losujący, civilopedia  Brązowy zlotowicz - 2 zloty  Brązowy civmaniak – najwięcej rozegranych gier  Pomocna dłoń – pomógł minimum 10 razy  Piwosz – otrzymał minimum 25 piw  Obibok – nie grał od 90 dni  I miejsce w Dyplo - Dyplo Miś 2  Przeżycie w Dyplo - Dyplo4  Złoty gracz w demokrację - GwD1-admin  Złoty gracz w demokrację - GwD2 
Posted: 2007-09-17, 12:12   

No i dobre pytanie Cola :)
Myślałem, ze tylko założone rele, ale teraz jak na to nie patrzeć, to liczy wszystkie rele, więc te przybrane też :)
_________________
278
Postaw piwo autorowi tego posta
 
 
 
Display posts from previous:   
Reply to topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Add this topic to your bookmarks
Printable version

Jump to:  

Podobne Tematy
Topic Author Forum Replies Last Post
No new posts pierwszy desant
czyli jacy turysci plyna na waszych galeonach?
bombel79 Strategie i taktyka - Civ4 1 2006-05-06, 10:32
Peter
No new posts Pierwszy Gameplay
wnuczus Przedpremierowe nowości ze świata civ 12 2016-05-26, 10:10
LDeska
No new posts Pierwszy save
Nefliqus PBEM DRAFT 2 2012-09-26, 11:14
Nefliqus
No new posts Pierwszy PBEM W Civilization V
Maiar PBEM "Ten Drugi" 60 2011-07-11, 15:41
wnuczus
No new posts Pierwszy Sezon - Półfinały
Losowanie
Richards I Sezon - Civ4 6 2008-03-30, 10:35
LDeska

Czas generowania strony : 0.43 s.

Powered by phpBB modified by Przemo © 2003 phpBB Group