GMC Bulgaria

Здравейте ( Вход | Регистрация )

Код за автоматично регулиране на нива, Има ли ?
term1nat0r
коментар 10:31:44, 13-April-2010, Tuesday
Коментар #1


Редовен потребител
***

Група: Потребител
Коментари: 102
Регистриран: 23.08.09
Град: Силистра.
Потребител № 1490



Значи има ли код, който прави автоматично нивата на определен размер на роома . Имам 15 тилес да слага автоматично кадето си ще (само да е достъпно да може да се мине) и върху тилес да слага инвизибъл wall . ???
И като се мине нивото да прави друго автоматично . Да стане нещо като на Пешо Супер Мариото . http://gmc.pi-dev.com/index.php?showtopic=1953


--------------------
Влезте в новият ми сайт : http://term1nat0r.netne.net/
Go to the top of the page
 
+Quote Post
 
Start new topic
Отговори
яверт
коментар 19:22:24, 13-April-2010, Tuesday
Коментар #2


Засмян тъпоъгълник :D
Икона на група

Група: Администратор
Коментари: 1790
Регистриран: 21.07.08
Град: Това е място, населено с много хора. FPS: 60
Потребител № 1116



Точно сто реда, най-много час работа:
Код
//махни отметката precise collision checking от спрайта да диаманта, за да не запецва при ъглите
//тайловете са доста объркващи, не се подразбира кой какво прави
//create event
var k,s,v,gr,zona,dosega;k=ширината на блока;s=броя на блокчетата надлъжно;v=броя на блокчетата на височина;
var skokx,skoky;skokx=максимално възможно разстояние, което може да се скочи по х;skoky=максимална височина на скока;
for(i=0;i<s;i+=1)for(j=0;j<v;j+=1)zemq[i,j]=0;//инициализация
/*стойности на земя:
0 - нищо
1 - нормална земя
2 - вода
3 - асансьор
4 - бодли*/
gr=round(3+random(10));//границата м/у началото и краят на нивото и началото и краят на стаята
//началото и краят на нивото са обградени със стени
for(i=0;i<gr;i+=1)for(j=0;j<v;j+=1)zemq[i,j]=1;
for(i=s;i>s-gr;i-=1)for(j=0;j<v;j+=1)zemq[i,j]=1;
dosega=gr;//докъде сме стигнали с направата на нивото
var vis,stp,vis2,n4,ss;//временни променливи

//начало на създаването

do
{
zona=10+round(random(30));//каква част от нивото ще запълваме
//променяй 10 и 30, докато не получиш желания разултат
switch(choose(1,2,3))//1 - твърда земя;2 - платформи, 3 - аквариум
   {
   case 1://твърда земя
        vis=round(random(skoky-1))+1;//нивото на земята - винаги може да бъде скокнато, но и винаги се вижда
        for(i=dosega;i<=dosega+zona;i+=1)for(j=v-vis;j<v;j+=1)zemq[i,j]=1;//запълваме пода
        repeat(choose(0,1,2,3))//0,1,2 или 3 хълма ще направим
           {
           stp=choose(1,1,2,2,3,3,4,5);//стъпка на изкачване и понижаване
           vis2=choose(2,3,4);//височина на хълмовете
           n4=dosega+round(random(zona));//началото на хълма
           //(стъпка)*(сегашна височина)*2 stp*j*2
           for(j=vis+vis2;j>vis;j-=1)for(i=0;i<stp*vis2;i+=1) {zemq[min(n4+i,dosega+zona),v-j]=1;zemq[max(n4-i,dosega),v-j]=1;}//запълване на хълма
           }
        n4=dosega+round(random(zona));//началото на бодлите
        for(i=0;i<round(random(max(skokx-1,0)));i+=1)//произволен брой бодли
           {
           for(j=0;j<v-1;j+=1){if zm[min(n4+i,dosega+zona),j+1]==1 zm[min(n4+i,dosega+zona),j]=4;break;}
           }
   break;//готови сме с генерацията на твърдата земя
   case 2://платформи
        n4=dosega+round(random(5));//прескачаме малко разстояние
        vis=10;//височината на предишната платформа
        do
          {
          stp=5+round(random(20));//дължина на платформата+дължина на скока
          ss=round(random(stp/2))+2;//дължина на платформата
          vis2=round(random(v-10));//височина на платформата
          if vis2-vis>skoky //ако не може да бъде скокната, правим асансьор
             for(j=v-vis2;j<v;j+=1)zemq[n4-1,j]=3;
          for(j=v-vis2;j<v;j+=1)for(i=0;i<ss;i+=1)zemq[i+n4,j]=1;//запълваме платформата
          vis=vis2;n4+=stp;
          }
        until(n4+stp>=dosega+zona)//правим платформи до края на този район
   break;
   case 3://аквариум
        vis=round(random(skoky/3-1))+1;//нивото на земята - винаги може да бъде скокнато, но и винаги се вижда
        for(i=dosega;i<=dosega+zona;i+=1)for(j=v-vis;j<v;j+=1)zemq[i,j]=1;//запълваме пода
        vis2=max(round(random(skoky))-vis,3);//височина на стените на аквариума
        stp=choose(1,2,3);//широчина на стените
        for(i=dosega;i<dosega+stp;i+=1)for(j=v-vis2-vis;j<v-vis;j+=1)zemq[i,j]=1;
        for(i=dosega+zona-stp;i<dosega+zona;i+=1)for(j=v-vis2-vis;j<v-vis;j+=1)zemq[i,j]=1;//запълване на стените
        for(i=dosega+stp;i<dosega+zona-stp;i+=1)for(j=v-vis2-vis+1;j<v-vis;j+=1)zemq[i,j]=2;//запълване с вода
   break;
   }
dosega=min(dosega+zona,s-gr);//продължаваме напред
}until(dosega>=s-gr)//продължаваме, докато не стигнем до края на стаята

//създали сме нивото, остава да създадем обектите

/*
стойности на земя:
0 - нищо
1 - нормална земя
2 - вода
3 - асансьор
4 - бодли
*/
for(i=0;i<s;i+=1)for(j=0;j<v;j+=1)
switch(zemq[i,j])
   {
   case 1:
   instance_create(i*k,j*k,обект за земя);
   if zemq[i,max(j-1,0)]==0
                            {
                            if zemq[max(i-1,0),j]==0 tile_add(бекграунд с тайовете,позицията на тайла за горен ляв ъгъл,k,k,i*k,j*k,10000);
                            else if zemq[min(i+1,s),j]==0 tile_add(бекграунд с тайовете,позицията на тайла за горен десен ъгък,k,k,i*k,j*k,10000);
                            else tile_add(бекграунд с тайовете,позицията на тайла за горна част,k,k,i*k,j*k,10000);
                            }
   else
                tile_add(бекграунд с тайовете,позицията на тайла за земя,k,k,i*k,j*k,10000);
   break;
   case 2:instance_create(i*k,j*k,обект за вода);if random(100)<1 instance_create(i*k,j*k,обект за риба); break;
   case 3:instance_create(i*k,j*k,обект за асансьор);break;
   case 4:instance_create(i*k,j*k,обект за шип);break;
   }

Домързя ме да го тествам. Искам да видя резултата - даже ако не я звършиш ми прати по ЛС това, което си направил.


--------------------
Цитат
Пешо:
4:53:46
Я недейти са карайти тука че да ни ва зашливйъ
Go to the top of the page
 
+Quote Post

Пишете в тази тема


Reply to this topicStart new topic
1 потребител(и) четат тази тема (1 гости и 0 скрити)
0 Потребител(и):

 



Олекотена версия Час: 05:02:13, 03.07.25