ゲームクリエイターの呟き@ゲームプログラマ

オンライン麻雀の製作過程を気ままに書いていきます。

オンライン麻雀ゲームを1人で開発してみた:対局十四日目

どうも、僕です。

 

ゲームロジックをせっせと進める前に、Oculus Goで必要なパフォーマンスでるところまで調整中です。

 

安定して70FPSまで来たので、まずはいいかな。

 

f:id:anonakashima:20190923164634j:plain

 

70FPS安定ってなかなかないと思うし、自分頑張ったなw

牌山生成プログラム

どうも、僕です。

 

牌山生成プログラムを公開します。

 

山クラス

public class Wall
{
    public static int TileSize = 136;

    Tile wall = new Tile[TileSize];

    int drawIndex = 0;

    public Wall(int seedint diceNumberbool useRed = true) {
        var random = new Random(seed);
        Tile tmpWall = new Tile[TileSize];
        var tileIndex = 0;
        foreach (Tile.Type tileType in Enum.GetValues(typeof(Tile.Type)))
        {
            if (tileType != Tile.Type.None) {
                for (int i = 0i < 4i++) {
                    tmpWall[tileIndex= new Tile(0useRed && i == 0 ? true : false,  tileType);
                    tileIndex++;
                }
            }
        }
        // 洗牌
        for (int i = 0i < 8i++) {
            var n = tmpWall.Length;
            while (n > 1) {
                n--;
                var k = random.Next(n + 1);
                var tmp = tmpWall[k];
                tmpWall[k= tmpWall[n];
                tmpWall[n= tmp;
            }
        }
        // 山を分ける
        var startWall = (5 - diceNumber % 4% 4;
        var startTileIndex = startWall * 17 * 2 + diceNumber * 2;
        for (int i = 0i < TileSizei++) {
            wall[i= startTileIndex + i >= TileSize ? tmpWall[startTileIndex + i - TileSize: tmpWall[startTileIndex + i];
        }
        // ツモ位置を初期化
        drawIndex = 0;
    }

    // ツモ
    public Tile Draw() {
        var draw = wall[drawIndex];
        drawIndex++;
        return draw;
    }
}

 

牌列挙型

public class Tile
{
    // Characters マンズ
    // Bamboo 索子
    // Dots 筒子
    public enum Type : int {
        None = 0,
        C1 = 1C2 = 2C3 = 3C4 = 4C5 = 5C6 = 6C7 = 7 , C8 = 8C9 = 9,
        B1 = 21B2 = 22B3 = 23B4 = 24B5 = 25B6 = 26B7 = 27B8 = 28B9 = 29,
        D1 = 41D2 = 42D3 = 43D4 = 44D5 = 45D6 = 46D7 = 47D8 = 48D9 = 49,
        East = 61South = 69West = 81North = 89,
        White = 101Green = 109Red = 121
    }
}

 

リリースまでに変更があるかもしれませんが。。。

 

もし、プログラムとしておかしい部分があればコメントいただけると助かります。

オンライン麻雀ゲームを1人で開発してみた:対局十二日目

どうも、僕です。

 

今日は上がり判定と役判定のテストをしました。

 

20万対局分のテストをアプリに流して、問題なく動作しました!

 

f:id:anonakashima:20190921143514p:plain

20万対局テスト!

上がり判定は、何回かアルゴリズム変更しました。

 

麻雀は上がり形のパターンを全部取り出して、全てのパターンの中で一番点数が高いものを採用します(高点法)。でもこれを総当たりでやると、とんでもない数をやらなければならない場合が出てきてめちゃ重いです。

 

最初は、雀頭候補を全て取り出して、それから順子 ⇨ 刻子と、刻子 ⇨ 順子で面子を抽出するようにしてたんだけど、これでは対応できないパターンがあった。

 

だから、上がり牌が絡む順子を先に取り出すパターンと、刻子を一つ取り出すパターンを追加してみたら、20万対局テストしてエラーが出ないようになった。まー20万対局分の負荷テストに耐えたならもう大丈夫だよね。。。

 

次は山のアルゴリズムを書こうかな。この部分は、世の中に公開しないといけない部分だし。不正(課金者が有利になるなど)とかする気は全くないから、ちゃんとアルゴリズムと牌譜は公開する予定です。

 

牌譜の仕様ってどれがいいんだろうなぁ。。。まーそんなに成熟した分野じゃないし、独自仕様でもいいと思うけどね。むしろ戦略的にはそうした方がいいと思う。

 

1ヶ月でゲームとしてちゃんと形にするぞ!

オンライン麻雀ゲームを1人で開発してみた:対局五日目

どうも僕です。

 

オンラインVR麻雀ゲーム開発を始めて六日目(2019/09/09から)が過ぎました。

 

開発を進める上で最初にやらなければならないのが技術検証です。

 

出来ることを確認せずに開発を進めるのはリスクが大き過ぎます。

 

特に今回はオンラインゲームですし、プラットフォームはVRだけでなく、Web、モバイル、PCにも対応予定です。

 

ごにょごにょやってOculus GoでFPSが60出るまでになりました。

※動画ではFPS出てないですが、撮影をOSでやっているのでその分FPSが落ちています。

 これが静止画Ver

f:id:anonakashima:20190915124747j:plain

60FPS出てる

今日は上がり判定の部分を作って、メンツ構成を把握できるようになったから、上がり点とか計算する部分をサクッと作ろうかと思います。

 

まだまだ始めたばかりだけど、実際VR空間で卓を囲むのは楽しいですしLWRPを使ってるので綺麗な画面でもサクサク動作してます。

 

さぁ、少しづつ進めるぞ!

ブログ始めました!

どうも、僕です。

 

ブログを始めました。

まずは初級ブロガーを目指して、記事を書いていきます。

 

ちゃんと更新するのは、来月以降になるのかな?

 

こんなゲームを開発していくので、きままに読んで下さい。