dholmes/bga-workbench

BoardGameArena 工作台

0.2.1 2021-06-01 23:35 UTC

README

Build Latest Stable Version

一套用于与BoardGameArena项目协同工作的工具。

安装

通过composer

composer require --dev dholmes/bga-workbench

通过Docker

docker build -t bgawb .
alias bgawb="docker run --rm -v $PWD:/data -w /data bgawb"

(最后一行应设置在您的 ~/.bashrc 中,以保持别名在新终端中生效)

要设置项目以与BGA Workbench协同工作,您需要在根目录中有一个 bgaproject.yml 文件。要生成一个,请查看bgawb init 命令

初始化BGA项目

安装 bgawb 后,您可以运行以下命令以在当前目录中交互式地创建一个 bgaproject.yml 文件。

bgawb init

部署到BGA Studio

bgawb build --deploy

持续部署到Studio

监视开发文件,并在它们更改时部署它们。

bgawb build --deploy --watch

编译composer项目

Board Game Arena 生产框架/环境不原生支持 Composer 项目设置。通过在您的 bgaproject.yml 文件中设置 useComposer: true,在部署前,bgawb build(部署到BGA Studio)命令将所有非开发composer依赖项合并到您的 .game.php 文件中。

测试工具

提供了一些测试工具,以帮助测试标准BGA项目游戏的各个部分。

验证命令

将对您的项目设置运行一些基本检查。例如,您是否有在BGA平台上运行所需的文件(.game.php.action.php等),您的 states.inc.php 文件是否有效等。

bgawb validate

PHPUnit TestHelp 特性

包括此特性和实现 createGameTableInstanceBuilder 方法将为每个运行的测试设置和撤销一个游戏表格实例。请注意,这使用了 setUptearDown PHPUnit 插件。

<?php

namespace Game\Tests;

use PHPUnit\Framework\TestCase;
use BGAWorkbench\Test\TestHelp;
use Doctrine\DBAL\Connection;
use BGAWorkbench\Utils;

class ChooseAttackTest extends TestCase
{
    use TestHelp;
    
    protected function createGameTableInstanceBuilder() : TableInstanceBuilder
    {
        return $this->gameTableInstanceBuilder()
            ->setPlayersWithIds([66, 77])
            ->overridePlayersPostSetup([
                66 => ['player_color' => 'ff0000'],
                77 => ['player_color' => '00ff00']
            ]);
    }
    
    public function testAction()
    {
        $action = $this->table
            ->setupNewGame()
            ->withDbConnection(function (Connection $db) {
                $db->exec('INSERT battlefield_card (player_id, type, x, y) VALUES (' .
                    join('), (', [
                        [77, '"infantry"', 0, -1],  
                        [66, '"infantry"', 0, 1],  
                        [66, '"artillery"', 6, 1],  
                    ])
                . ')');
            })
            ->createActionInstanceForCurrentPlayer(66)
            ->stubActivePlayerId(66)
            ->stubArgs(['x' => 5, 'y' => 5]);

        $action->chooseAttack();
        
        // TODO: Run some asserts on the db
    }
    
    public function testStateFunc()
    {
        $game = $this->table
            ->setupNewGame()
            ->createGameInstanceWithNoBoundedPlayer()
            ->stubActivePlayerId(66);
        
        $game->stNextPlayer();
    }
    
    public function testGetAllDatas()
    {
        $game = $this->table
            ->setupNewGame()
            ->withDbConnection(function (Connection $db) {
                $db->exec('DELETE FROM deck_card');
                $db->exec('DELETE FROM playable_card');
                $db->exec('INSERT INTO battlefield_card (player_id, type, x, y) VALUES (66, "tank", 0, 2)');
                $db->executeUpdate('UPDATE player SET player_score_aux = 1 WHERE player_id = 66');
            })
            ->createGameInstanceForCurrentPlayer(66);

        $datas = Utils::callProtectedMethod($game, 'getAllDatas');
        
        // TODO: Some asserts on $datas
    }
}

使用BGA Workbench的项目

开发

即如果您想对BGA Workbench项目进行一些修改。这在使用库在自己的项目中是不必要的。

需求

设置开发者机器

vagrant up

运行测试

vagrant ssh
composer test

发布新版本

  1. 在github上添加带有版本号的发布/标签。
  2. 转到packagist网址并点击“更新”:https://packagist.org.cn/packages/dholmes/bga-workbench。这应该自动完成,但如果留下不更新,则可以完成。