eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingzaawansowane aiRe: zaawansowane ai
  • Data: 2012-04-17 18:32:51
    Temat: Re: zaawansowane ai
    Od: " " <f...@N...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    M.M. <m...@N...gazeta.pl> napisał(a):

    > <f...@N...gazeta.pl> napisał(a):
    >
    > > o jakim grafie ty mowisz? ja nie mam zadnych grafow tylko mape
    > > ktorej okolice czytam, nie bardzo wiem do czego uzywa sie grafow
    > > w programoaniu np programow do gry w warcaby czy tic tac toe
    > > - nie zajmowalem sie tym,
    > To przypomnij sobie czasy gdy pisałeś A* :D
    >

    mam tu kod algorytmu na najkrotsza droge sprzed 10 lat (z poczatkow
    nauki c) (nie chce mi sie tego czytac ale gdybym mial teraz to zrobic to
    bym tylko troche poprawil owczesny 'drewniany styl' (glupie nazwy itd)
    i tego mw i dzis uzyl (jest w c wiec jest dosyc szybkie)

    polega to na wypoczkowaniu kolejnej obwodki z poprzedniej az dojedzie sie
    do celu - nie pamietam jak to jest dokladnie z tym grafem i jak to jest
    'wszerz'


    void wypelnijmapeskalaremodleglosci(int XS, int YS, int XK, int YK)
    {
    int dx[8]={-1,0,1,-1,1,-1, 0, 1};
    int dy[8]={ 1,1,1, 0,0,-1,-1,-1};

    #define MAX_POJ_NACZOLOFALI 3000

    TypeTWOINT lista1[MAX_POJ_NACZOLOFALI];
    TypeTWOINT lista2[MAX_POJ_NACZOLOFALI];

    TypeTWOINT* listaprzerabianych=lista1;
    TypeTWOINT* listapaczkowanych=lista2;
    TypeTWOINT* tmp;

    int value_paczkowanych=1; // p/on/czkowanych tj. tworzonych w nowej
    generacji z listy przerabianych
    int j=0; // tutaj i jest aktualna pozycja na liscie
    przerabianych, j na tworzonych
    int czykonczymy=FALSE;

    //ini - od takiej krotkiej listy startujemy

    listaprzerabianych[0].x=XK;
    listaprzerabianych[0].y=YK; VGAEKRAN[320*YK+XK]=0;
    listaprzerabianych[1].x=KONIEC_OZN;

    do
    {

    for(int i=0; i<MAX_POJ_NACZOLOFALI;i++)
    {
    if(listaprzerabianych[i].x==KONIEC_OZN) break;

    // paczkuj_nowe_dookola_punktu

    for(int ii=0; ii<8; ii++)
    {
    int xp=listaprzerabianych[i].x+dx[ii];
    int yp=listaprzerabianych[i].y+dy[ii];

    if(value_paczkowanych<VGAEKRAN[320*yp+xp] && VGAEKRAN[320*yp+xp]!
    =255)
    {
    listapaczkowanych[j].x=xp;
    listapaczkowanych[j].y=yp;
    VGAEKRAN[320*yp+xp]=value_paczkowanych;
    j++;
    if(xp==XS && yp==YS) czykonczymy=TRUE;
    }
    }
    }
    listapaczkowanych[j].x=KONIEC_OZN;

    //odwrocenie macierzy i od nowa

    tmp=listapaczkowanych; listapaczkowanych=listaprzerabianych;
    listaprzerabianych=tmp;
    j=0; value_paczkowanych++;

    }
    while(!czykonczymy);

    }





    void narysujterazdroge(int XS, int YS)
    {

    int dx[8]={-1,0,1,-1,1,-1, 0, 1};
    int dy[8]={ 1,1,1, 0,0,-1,-1,-1};


    int x=XS;
    int y=YS;

    int xp, yp;
    do {
    //------
    for(int i=0; i<8; i++)
    {
    xp=(x+dx[i]);
    yp=(y+dy[i]);
    unsigned valx=VGAEKRAN[320*y+x];
    unsigned valxp=VGAEKRAN[320*yp+xp];
    if(valxp==0) return;
    if(valxp<valx) break;
    }
    //-------- w xp yp jest teraz nizszy sasiad x y


    VGAEKRAN[320*y+x]=150;
    x=xp; y=yp;

    // delay(10);

    } while(1);

    }






    >
    > > za to kiedys klepalem dosyc duzo roguelika
    > > (ktory jest wlasnie tilowym erpegiem z botami) i mam w tym troche
    > > doswiadczenia (swietnie sie programuje takie rzeczy ijest tu
    > > duzo ciekawych tematow - kiedys indziej napisze o tym wiecej)
    > Ja za to nie wiem co to jest tilowy erpeg :)
    >
    > Pozdrawiam
    >
    >


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: