This is a documentation for Board Game Arena: play board games online !

Гаме лаyоут: виеw анд темплате: yоургаменаме.виеw.пхп анд yоургаменаме yоургаменаме.тпл

Извор: Board Game Arena
Пређи на навигацију Пређи на претрагу

Тхесе 2 филес wорк тогетхер то провиде тхе ХТМЛ лаyоут оф yоур гаме.

Усинг тхесе 2 филес, yоу специфy wхат ХТМЛ ис рендеред ин yоур гаме цлиент интерфаце.

Ин <yоургаме.тпл>, yоу цан дирецтлy wрите раw ХТМЛ тхат wилл бе дисплаyед бy тхе броwсер.

Еxампле: еxтрацт оф "хеартс_хеартс.тпл":

  <div id="myhand_wrap" class="whiteblock">
    <h3>{MY_HAND}</h3>
    <div id="myhand">
    </div>
  </div>

WАРНИНГ

Yоур виеw анд yоур темплате аре суппосед то генерате онлy тхе БАСЕ лаyоут оф тхе гаме

Yоу схоулдн'т трy то сетуп тхе цуррент гаме ситуатион ин тхе виеw: тхис ис тхе роле оф yоур Јавасцрипт цоде. Wхy? Бецаусе yоу'лл хаве то wрите Јавасцрипт цоде то пут гаме елементс ин плаце анywаy, анд yоу дон'т wант то wрите ит тwице :)

Еxампле оф тхингс то генерате ин yоур виеw:

  • Тхе овералл лаyоут оф yоур гаме интерфаце (wхат ис дисплаyед wхере).
  • Тхе боард анд фиxед елементс он тхе боард (еx: плацес фор цардс, сqуарес, ...).

Еxампле оф тхингс тхат схоулдн'т бе генерате бy yоур виеw:

  • Гаме елементс тхат цоме анд го фром тхе гаме ареа.
  • Гаме елементс тхат нормаллy хидден фром плаyерс (отхер плаyерс цардс, цардс ин тхе децк).

пхплиб темплате сyстем

БГА ис усинг тхе пхплиб темплате сyстем, усед фор еxампле ин ПХПбб форумс.

Море детаилс абоут хоw то усе пхплиб темплате сyстем хере: http://www.phpbuilder.com/columns/david20000512.php3

Вариаблес

Ин yоур темплате ("тпл") филе, yоу цан усе вариаблес. Тхен ин yоур виеw (".виеw.пхп") филе, yоу филл тхесе вариаблес wитх валуе.

Ин тхе еxампле абове, "{МY_ХАНД}" ис а вариабле. Ас yоу цан сее, а вариабле ис упперцасе цхарацтерс бордер бy "{" анд "}".

То гиве а валуе то тхис вариабле ин yоур виеw.пхп:

Еxамплес:


   // Display a translated version of "My hand" at the place of the variable in the template
   $this->tpl['MY_HAND'] = self::_("My hand");

   // Display some raw HTML material at the place of the variable
   $this->tpl['MY_HAND'] = self::raw( "<div class='myhand_icon'></div>" );

WАРНИНГ: до нот усе а вариабле цаллед {ид} ас ит wилл интерфере wитх ацтион буттонс.

Блоцкс

Усинг "блоцкс", yоу цан репеат а пиеце оф ХТМЛ фром yоур темплате северал тиме.

Yоу схоулд усе "блоцкс" wхеневер yоу хаве а блоцк оф ХТМЛ тхат муст бе репеатед манy тимес. Фор еxампле, фор Реверси, wе хаве то генерате 64 (8x8) сqуарес:


(in reversi_reversi.tpl)

<div id="board">
    <!-- BEGIN square -->
        <div id="square_{X}_{Y}" class="square" style="left: {LEFT}px; top: {TOP}px;"></div>
    <!-- END square -->
    
    <div id="discs">
    </div>
</div>

(in reversi.view.php)

 $this->page->begin_block( "reversi_reversi", "square" );
        
 $hor_scale = 64.8;
 $ver_scale = 64.4;
 for( $x=1; $x<=8; $x++ )
 {
    for( $y=1; $y<=8; $y++ )
    {
       $this->page->insert_block( "square", array(
         'X' => $x,
         'Y' => $y,
         'LEFT' => round( ($x-1)*$hor_scale+10 ),
         'TOP' => round( ($y-1)*$ver_scale+7 )
        ) );
    }        
 }

Еxпланатионс:

  • Yоу специфy а блоцк ин yоур темплате филе, усинг "БЕГИН" анд "ЕНД" кеywордс. Ин тхе еxампле абове, wе аре цреатинг а блоцк намед "сqуаре".
  • Ин yоур виеw, yоу децларе yоур блоцк усинг "бегин_блоцк" метход.
  • Тхен, yоу цан инсерт ас манy блоцк ас yоу wант то, усинг "инсерт_блоцк" метход.

Тхе инсерт_блоцк метход такес 2 параметерс:

  • тхе наме оф тхе блоцк то инсерт.
  • ан ассоциативе арраy yоу цан усе то ассигн валуес то темплате вариаблес оф тхис блоцк. Ин тхе еxампле абове, тхере аре 4 параметерс ин тхе блоцк (X, Y, ЛЕФТ анд ТОП).

Нестед блоцкс

Yоу цан усе нестед блоцкс. Ин тхе еxампле белоw, wе аре гоинг то адд а мини-боард фор еацх плаyер оф тхе гаме, wитх 4 цард плацес он еацх оф ит:


(In template file)

<!-- BEGIN player -->
    <div class="miniboard" id="miniboard_{PLAYER_ID}">

        <div class="card_places">
            <!-- BEGIN card_place -->
            <div id="card_place_{PLAYER_ID}_{PLACE_ID}">
            </div>
            <!-- END card_place -->
        </div>

    </div>
<!-- END player -->
  
(In view file)

$this->page->begin_block( "mygame_mygame.tpl", "card_place" ); // Nested block must be declared first
$this->page->begin_block( "mygame_mygame.tpl", "player" );

foreach( $players as $player_id => $player )
{
    // Important: nested block must be reset here, otherwise the second player miniboard will
    //  have 8 card_place, the third will have 12 card_place, and so one...
    $this->page->reset_subblocks( 'card_place' ); 

    for( $i=1; $i<=4; $i++ )
    {
       $this->page->insert_block( "card_place", array( 
             'PLAYER_ID' => $player_id,
             'PLACE_ID' => $i
       );
    }

    $this->page->insert_block( 'player', array( 'PLAYER_ID' => $player_id );
}

Јавасцрипт темплатес

Фор гаме елементс тхат цоме анд го фром тхе гаме ареа, wе суггест yоу то дефине а Јавасцрипт темплате.

А Јавасцрипт темплате ис дефинед ин yоур темплате филе лике тхис:

(Реверси Токен фром Реверси еxампле):

<script type="text/javascript">

// Templates

var jstpl_disc='<div class="disc disccolor_${color}" id="disc_${xy}"></div>';

</script>  

Ноте: а сецтион фор јавасцрипт темплатес ис алреадy аваилабле ат тхе енд оф yоур темплате скелетон филе.

Тхен, yоу цан усе тхис јавасцрипт темплате то инсерт тхис пиеце оф ХТМЛ ин yоур гаме интерфаце, лике тхис:

    dojo.place( this.format_block( 'jstpl_disc', {
           xy: x+''+y,
           color: color
    } ) , 'discs' );

WАРНИНГ: алwаyс усе лоwерцасе фор субститутион вариаблес ин yоур Јавасцрипт темплатес, ин ордер то авоид цоллисион wитх пхплиб темплате вариаблес (ин партицулар, до нот усе ${ИД}).

Хоw то аццесс гаме информатион фром .виеw.пхп?

Фром yоур .виеw.пхп, yоу цан аццесс тхе фоллоwинг:

Аццесс цуррент плаyер ид

  global $g_user;
  $current_player_id = $g_user->get_id();

Аццесс гаме објецт

Ин yоур виеw филе, "$тхис->гаме" цонтаинс ан инстанце оф yоур маин гаме цласс.

Еxампле:


   // Access to some game elements description described in your "material.inc.php":
   $my_cards_types = $this->game->card_types;

   // Access to any (public) method defined in my .game.php file:
   $result = $this->game->myMethod();

Типс: дисплаyинг а нице буттон

Фром тиме то тиме, yоу неед то дисплаy а стандард буттон ин yоур интерфаце. БГА фрамеwорк провидес yоу а стандард буттон тхат yоу цан усе дирецтлy ин yоур интерфаце:

    <a href="#" id="my_button_id" class="bgabutton bgabutton_blue"><span>My blue button</span></a>
    <a href="#" id="my_button_id" class="bgabutton bgabutton_gray"><span>My gray button</span></a>
    <a href="#" id="my_button_id" class="bgabutton bgabutton_red"><span>My red button</span></a>
    <a href="#" id="my_button_id" class="bgabutton bgabutton_red bgabutton_big"><span>My big red button</span></a>


Ноте: То сее ит ин ацтион, цхецк фор еxампле а Цолоретто гаме