На главную alter.sinor.ru/lisek

Калькулятор цивилизации v2005
Скачать калькулятор цивилизации v2005, 999 Кб
 

Если у вас включена Ява, то ниже по тексту должна произойти загрузка облегчённой версии калькулятора (без галереи картинок с этого сайта), объём 500 килобайт.

На калькуляторе имеются две одинаковые панели, как в Norton Commander, для сравнения исторических аналогов. На каждой панели есть по три кнопки:
"Солнечная система" - рисует схему Солнечной системы;
"График расчётного климата" - рисует график притяжения летней (июньской) Земли к Солнцу;
"Расчёт развития цивилизации" - для вычисления анимированной этнической и технологической карты развития Африки, Европы и Азии, а также движения границ Московского государства.

Вопросительный знак вверху запускает анимированный Help, две кнопки-паутинки в верхних углах: сброс заданий и цвет фона. Сведения "О программе" можно узнать щелчком по тучке. Луна показана в реальном времени.

Если вы скачаете полную версию (999 килобайт) и откроете её, то в нижнем левом углу увидите ещё одну кнопку паутинку, открывающую галерею картинок с этого сайта. Здесь же можно выбрать между произвольным и последовательным доступом к картинкам.

Об алгоритме работы калькулятора цивилизации можно узнать здесь, здесь и здесь.
Калькулятор написан на языке Action Script - 2. Ниже приведены фрагменты кода:

  // новый кадр _ _ _ _ _ _ _ _ _
tecMax=0;//Признак предисловия
mapbac5_mc._visible=false;
_root.pannel_mc.itext_txt._visible=false; _root.pannel_mc.closeText_mc._visible=false;
_root.pannel2_mc.itext_txt._visible=false; _root.pannel2_mc.closeText_mc._visible=false;
_root.pannel_mc.intro_mc.gotoAndStop(1); _root.pannel2_mc.intro_mc.gotoAndStop(1);
_root.pannel_mc.solar_mc.gotoAndStop(1); _root.pannel2_mc.solar_mc.gotoAndStop(1);
_root.pannel_mc.graph_mc.gotoAndStop(1); _root.pannel2_mc.graph_mc.gotoAndStop(1);
frost2_array = new Array; road_array = new Array; x=0;
hill_array=["0000000/*вырезано*/00000000000"];
frost_array=["00000000000/*вырезано*/0000000"];
fill_array=[0,4,7, 5,2,8, 6,1,3];
sin_array = new Array(); cos_array = new Array();
for(i=0;i<8;i++) {//готовим тригонометрическую таблицу
  sin_array[i] = Math.sin(i * 3.14 / 4);
  cos_array[i] = Math.cos(i * 3.14 / 4);
}
colors = [0x0000ff, 0x00ff00]; alphas = [50,50]; ratios = [0x00, 0xff]; //тонируем фон
matrix = {a:2000,b:0,c:0, d:0,e:1000,f:0, g:393,h:255,i:1};
beginGradientFill( "radial", colors, alphas, ratios, matrix );
lineStyle(0,0x000000,0);moveTo(0, 0);lineTo(786, 0);//ось
lineTo(786, 510); lineTo(0, 510); endFill();
country_txt._visible=false; country2_txt._visible=false;
playPlay_btn._visible=false;playRewind_btn._visible=false;

  // новый кадр _ _ _ _ _ _ _ _ _
if(x>76) {x=0;}//рисуем карту физическую
for (y=0; y<=63;y++) {
  i=hill_array[x].charAt(y);
  if(i>0) {
    switch (i) {
      case "1": lineStyle(3,0x007700,100); break;
      case "2": lineStyle(3,0xffff00,100); break;
      case "3": lineStyle(3,0x773300,100); break;
    }
    moveTo(20+3*x,20+3*y); lineTo(20+3*x+.2,20+3*y);

    i=water_array[x].charAt(y);
    switch (i) {
      case "1": lineStyle(3,0x007700,100); break;
      case "2": lineStyle(3,0xffff00,100); break;
      case "3": lineStyle(3,0x773300,100); break;
    }
    moveTo(20+3*x+400,20+3*y);lineTo(20+3*x+400.2,20+3*y);    
    
    
    
  }
  else {
    if(hill_array[x+1].charAt(y-1)>0) {
      lineStyle(3,0x0000ff,8);moveTo(20+3*x,20+3*y);lineTo(20+3*x+.2,20+3*y);
      moveTo(20+3*x,300+3*y);lineTo(20+3*x+.2,300+3*y);
      lineStyle(3,0x0000ff,8);moveTo(20+3*x+400,20+3*y);lineTo(20+3*x+400.2,20+3*y);
      moveTo(20+3*x+400,300+3*y);lineTo(20+3*x+400.2,300+3*y);
    }
  }
}
play();


  // новый кадр _ _ _ _ _ _ _ _ _
x++; if(x<=76) {
  prevFrame();
}

  // новый кадр _ _ _ _ _ _ _ _ _
with(map0_mc) {
if(x>76) {x=0;} //рисуем карту морозов
ii=frost_array[x];
for (y=0; y<=63;y++) {
  i=ii.charAt(y);
  if(i>0) {
    switch (i) {
      case "1": lineStyle(3,0xffff00,100); break;
      case "2": lineStyle(3,0x007f00,100); break;
      case "3": lineStyle(3,0xff00ff,100); break;
      case "4": lineStyle(3,0x00ffff,100); break;
      case "5": lineStyle(3,0xffffff,100); break;
    }
    moveTo(-400+3*x,3*y);lineTo(-400+3*x+.2,3*y);
  }
}
}
play();


  // новый кадр _ _ _ _ _ _ _ _ _
x++; if(x<=76) {prevFrame();}

  // новый кадр _ _ _ _ _ _ _ _ _
if(x>76) {x=0;} //рисуем массив и карту уточненных морозов
with(map0_mc) {
for (y=0; y<=62;y++) {    
  i=frost_array[x].charAt(y)
  if(i>0) {
    switch(i) {
      case "1": colorHort = 10; colorCold = 2; temHort = 30; temCold = 16; break;
      case "2": colorHort = 1; colorCold = 3; temHort = 16; temCold = 0; break;
      case "3": colorHort = 2; colorCold = 4; temHort = 0; temCold = -16; break;
      case "4": colorHort = 3; colorCold = 5; temHort = -16; temCold = -32; break;
      case "5": colorHort = 4; colorCold = 10; temHort = -32; temCold = -48; break;
    }
    rHort = 0; rCold = 0;
    for(i=1;i<=7;i++) {
    if(i>2) {i++}
      r = i; 
      for(angl=0;angl<8;angl++) {
        colorV = 0;
        xi=x+Math.round(r*cos_array[angl]);
        yi=y+Math.round(r*sin_array[angl]);  
        if(xi>=0 && xi<+76 && yi>=0 && yi<=62) {
          colorV = frost_array[xi].charAt(yi);
          if(rHort==0 && colorV==colorHort) {rHort=r;} 
          if(rCold==0 && colorV==colorCold) {rCold=r;}
        }
      }
    }
    if(rHort==0) {rHort=15;}
    if(rCold==0) {rCold=15;}
    t = temCold + (temHort - temCold) * (rCold / (rHort + rCold)); 
    frost2_array[x*63+y]=t;
    i=0x000000;        
    if(t>-50) {i=0xffffff;} if(t>-37) {i=0xeeffff;} if(t>-35) {i=0xccffff;}
    if(t>-32) {i=0xaaffff;} if(t>-26) {i=0x77ffff;} if(t>-21) {i=0x00ffff;}
    if(t>-16){i=0x77ccff;}  if(t>-10){i=0xcc77ff;}  if(t>-5) {i=0xff00ff;}
    if(t> 0) {i=0xcc99cc;}  if(t> 8) {i=0xaaccaa;}  if(t>12) {i=0x00ff00;}
    if(t>16) {i=0x99ff00;}  if(t>19) {i=0xccff00;}  if(t>22) {i=0xffff00;}
    lineStyle(3,i,100); moveTo(3*x,3*y);lineTo(3*x+.2,3*y);
  }     
}
}
//}
play();

  // новый кадр _ _ _ _ _ _ _ _ _
x++; if(x<=76) {prevFrame();}

  // новый кадр _ _ _ _ _ _ _ _ _
tOptimal =28;
tecMax=5; tecMaxBac=tecMax;
tWhite=.2  ;tYellow=.5  ;tMagenta=.8;
xOptimal=29; yOptimal=23;
xCapital=26; yCapital = 14;
fill=0; 
country_txt._x=486; country2_txt._x=486;

  // новый кадр _ _ _ _ _ _ _ _ _
//trace("map"+(xc+3*yc)+"_mc");
countryTextBack_mc._alpha=40-fill*5;
with(this["map"+fill+"_mc"]) {
  clear(); 
  if(fill==0){
    ti=""; if(tOptimal>0){ti+="+"}; ti+=tOptimal+chr(42)+"C)";
    leftDown_txt.text="Вычисляем развитие мозга ("+ti;  
    rightDown_txt.text="Вычисляем техносферу ("+ti;
    x=300; y=150;    
    h=5*tecMaxBac; moveTo(x,y-h);//мерный столбик технологий 
    lineStyle(5,0xff0000,100); lineTo(x,y-h*tMagenta);
    lineStyle(5,0xff00ff,100); lineTo(x,y-h*tYellow);
    lineStyle(5,0xffff00,100); lineTo(x,y-h*tWhite);
    lineStyle(5,0xffffff,100); lineTo(x,y);
  }
  
  if(fill==8){leftDown2_txt.text = leftDown_txt.text;rightDown2_txt.text = rightDown_txt.text;}
  else {leftDown2_txt.text = "";rightDown2_txt.text = "";}
  t2Optimal = 30 - tOptimal; 
  mid = .15 / (1 + Math.pow((t2Optimal / 24),  20));// тяготение технологий к центру материка

  //блок вычисления доноримперского потенциала столицы
  if(tOptimal<=5 && tOptimal>-10) {
    mapbac5_mc._visible=true;
    t=frost2_array[xCapital*63+yCapital];
    t2 = 30-t; dt = Math.abs(t2 - t2Optimal);
     tec = t2Optimal - dt; if(tec<0) {tec=.01;}// вычисляем техноуровень
     good = 1;//к-т технологичности территории        
    i = hill_array[xCapital].charAt(yCapital); // нетехнологичность гор
    if(i==2) {good *=.95;}
    if(i==3) {good *=.3;}
     i = water_array[xCapital].charAt(yCapital); // нетехнологичность пустынь 
    if(i==2) {good *=.9;}
    if(i==3) {good *=.3;}
    good /= (1+mid*Math.sqrt((xCapital-xOptimal)*(xCapital-xOptimal)+(yCapital-yOptimal)*(yCapital-yOptimal)));
     tec *= good;
     uoing = .5 * t2 / t2Optimal; if(uoing>1) {uoing = 1;}// коммунистический коэффициент
     strategyCapital = uoing*tec;
    country_txt._visible=true; country2_txt._visible=true;
    country_txt._x+=.5; country2_txt._x+=.5;
  }
  else {country_txt._visible=false; country2_txt._visible=false;  mapbac5_mc._visible=false;
}
  
  
  for (x=fill_array[fill] % 3; x<=76;x+=3) {    
    for(y=Math.floor(fill_array[fill]/3);y<=62;y+=3) {
      t=frost2_array[x*63+y];
      if(t != undefined) {
        t2 = 30-t; dt = Math.abs(t2 - t2Optimal);
         tec = t2Optimal - dt;//вычисляем техноуровень
         if(tec<0) {tec=.01;}
          good = 1;//к-т технологичности территории        
        i = hill_array[x].charAt(y); //нетехнологичность гор
        if(i==2) {good *=.95;}
        if(i==3) {good *=.3;}
         i = water_array[x].charAt(y); //нетехнологичность пустынь 
        if(i==2) {good *=.9;}
        if(i==3) {good *=.3;}
        good /= (1+mid*Math.sqrt((x-xOptimal)*(x-xOptimal)+(y-yOptimal)*(y-yOptimal)));
         tec *= good;
         if (tecMax < tec) {tecMax = tec * .1 + tecMax * .9;}
         i=tec/tecMaxBac;
        if (i=tWhite && i=tYellow && i=tMagenta) {c=0xff0000;} 
        if(tOptimal>6 || tOptimal<=-10 || x<50 || y<40) {lineStyle(3, c, 100); moveTo(3*x,3*y); lineTo(3*x+.2,3*y);}
        racial = 2; i = 1 + (.5 - Math.random()) * .05;//расовый вариатор
        good = .2 + .8 * good; raceColor = 0xa7a777;
        if (t2Optimal-2.5-.1*t2 > 1.2*i/good) {raceColor = 0x773300;}
        if (t2Optimal-.2*dt >= 6*i/good && t2>= 12*i) {raceColor = 0xffff00;}
         if (t2Optimal-.4*dt >= 19*i/good && t2>=26*i) {raceColor = 0xffffff;}
         if (t2Optimal-.8*dt >= 45*i/good && t2>=52*i) {raceColor = 0x00ffff;}
        lineStyle(3, raceColor, 100); moveTo(3*x-400,3*y); lineTo(-400+3*x+.2,3*y);
      
        if(tOptimal<=5 && tOptimal>-10) { //блок  вычисления территории государства
          road=road_array[x*63+y];
          if(road == undefined) {//единожды сканируем доступность провинций
            road=Math.sqrt((x-xCapital)*(x-xCapital)+(y-yCapital)*(y-yCapital)+.01); hard=0;
            for(i=3; i<=road;i+=1) {//вычисление труднодоступности
                j=hill_array[Math.round(xCapital + (x-xCapital)*i/road)].charAt(Math.round(yCapital + (y-yCapital)*i/road));
              if (j==3) {hard+=33;}}
            road+=hard; road_array[x*63+y]=road;}
          if(tec<1) {tec=1;}
           uoing = .5 * t2 / t2Optimal; if(uoing > 1) {uoing = 1;}//коммунистический коэффициент
          separate=Math.pow(tec,(.75 - uoing) * 4); //потенциал провинциального сепаратизма
          country= (strategyCapital - 7.7) * 12 - road*separate; //trace(country);
          if (country>0) {lineStyle(1, 0xff0000,100);} else {lineStyle(1, 0x00aaaa,100);}
          moveTo(x+152,y+124);lineTo(x+153,y+124);
        }
      }
    }
  }
  lineStyle(2, 0xffffff, 100); moveTo(xCapital+152,yCapital+124); lineTo(xCapital+152.2,yCapital+124);
}
tecMaxBac=tecMax;


//stop();
play();


  // новый кадр _ _ _ _ _ _ _ _ _
fill++;
if(fill<9){prevFrame();}
else {
  fill=0;
  tOptimal --; 
  if(tOptimal <= 3 && tOptimal > 2.01) {
    tOptimal = .1 * Math.floor((tOptimal + .91) * 10);
    if(tOptimal < 3.6) {tOptimal = tOptimal - .1;}
  }
  if(tOptimal < -8) {tOptimal -= 1;}
  if (tOptimal>=-50){
if(tOptimal>=26) {comment_txt.text = "Когда-то не было ни технологий, ни людей"}
if(tOptimal<=25 && tOptimal>=24) {comment_txt.text = "Зарождение Человека Разумного"}
if(tOptimal<=23 && tOptimal>=21) {comment_txt.text = "Расселение Человека Разумного"}
if(tOptimal==20) {comment_txt.text = "Зарождение  Цивилизации"}
if(tOptimal<=18 && tOptimal>=14) {comment_txt.text = "Египет,  Междуречье,  Инд"}
if(tOptimal<=12 && tOptimal>=10) {comment_txt.text = "Острова Средиземноморья, Персия"}
if(tOptimal==9) {comment_txt.text = "Греция,    Рим,   колонии"}
if(tOptimal==7) {comment_txt.text = "Римская   империя,  Халифат"}
if(tOptimal<=4 && tOptimal>=1) {comment_txt.text = "Московское государство"}
if(tOptimal<=0 && tOptimal>=-2) {comment_txt.text = "Современный  мир"}
if(tOptimal<=-4 && tOptimal>=-16) {comment_txt.text = "П е р с п е к т и в а"}
if(tOptimal<=-39 && tOptimal>=-42) {comment_txt.text = "Конец активного развития Земли"}
if(tOptimal<=-44) {comment_txt.text = "Земля превратилась в музей для космической цивилизации, расчёт окончен.."}
    prevFrame();
  }
  else{
    stop(); playPlay_btn._visible=false; playStop_btn._visible=false;
    playRewind_btn._visible=true;
  }
}

lisek_xp-2005 в
 софт-каталоге ProtoPlex Просмотры и закачки программы на SOFT@Mail.Ru "lisek_xp" на Wolf-Ware.ru: скачивания / отзывы - рейтинг

Скачать калькулятор цивилизации v2005, 999 Кб

Next