Ring 1.11 の改訂履歴

Ring 1.11 (2019年09月15日) の新機能と変更点です。

新機能と変更リスト

Ring 1.11 の新機能!

  • 3Dサンプルの追加

  • Checkers ゲーム

  • Sokoban ゲーム

  • Maze ゲーム

  • Snake ゲーム

  • Sudoku ゲーム

  • デスクトップスクリーンショットアプリケーション

  • 文書読み上げアプリケーション

  • RingRayLib 拡張機能

  • ZeroLib ライブラリ

  • StdLib - 関数の追加

  • RingQt の改良

  • 実行性能の向上

  • 取扱説明書の増補

  • そのほかの改善

3Dサンプルの追加

Ring 1.11 より Qt3D 用の3Dサンプルがあります。

  • Folder : ring/samples/other/UsingQt3D (18 サンプル収録)

Qt3D 用例 18

Checkers ゲーム

遊びかたは国際ルールですが、強制ジャンプを採用した Checkers の方言です。

無効な移動、無効なジャンプ、強制ジャンプを扱います。

正方形は錯誤を示すために色分けしています。

正方形は移動元と移動先、またはジャンプ先を示すために色分けしています。

Checkers ゲーム

Sokoban ゲーム

Sokoban ゲームを短時間で実装したものです。

2Dゲーム用 Ring ゲームエンジンを用いて二時間で開発しました (300行以下のコード)

Sokoban ゲーム

Maze ゲーム

Maze ゲームを短時間で実装したものです。

2Dゲーム用 Ring ゲームエンジンを用いて開発しました (約100行のコード)

このゲームにはレベルデザイナーも搭載してあります (10分で開発、37行のコード)

Maze ゲーム

Snake ゲーム

Snake ゲームを短時間で実装したものです。

2Dゲーム用 Ring ゲームエンジンを用いて開発しました (約200行のコード)

Snake ゲーム

Sudoku ゲーム

9×9 のマスから構成される各列・各段と 9 つの 3×3 の補助マスを埋めて、全部のマスを 1~9 までの数字を全て埋めて完成させます。

Sudoku ゲーム

デスクトップスクリーンショットアプリケーション

デスクトップスクリーンショットアプリケーション

文書読み上げアプリケーション

文書読み上げアプリケーション

RingRayLib 拡張機能

Ring 1.11 より RayLib ゲームプログラミングライブラリに対応した拡張機能があります。

用例:

load "raylib.ring"

screenWidth     = 800
screenHeight    = 450

InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")

SetTargetFPS(60)

while !WindowShouldClose()
        BeginDrawing()
        ClearBackground(RED)
        DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
        EndDrawing()
end

CloseWindow()

実行結果:

RayLib の用例

用例:

load "raylib.ring"

screenWidth = 800
screenHeight = 450

InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")

SetTargetFPS(60)

while !WindowShouldClose()

        BeginDrawing()

        ClearBackground(RAYWHITE)

        DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
        DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
        DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
        DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)
        DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)

        DrawTriangle(Vector2(screenWidth/4*3, 80),
                         Vector2(screenWidth/4*3 - 60, 150),
                         Vector2(screenWidth/4*3 + 60, 150), VIOLET)

        DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)

        DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)

        DrawLine(18, 42, screenWidth - 18, 42, BLACK)
        DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
        DrawTriangleLines(Vector2(screenWidth/4*3, 160),
                          Vector2(screenWidth/4*3 - 20, 230),
                          Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
        EndDrawing()

end

CloseWindow()

実行結果:

RayLib の用例

ZeroLib ライブラリ

Ring 1.11 より添字 0 始点のリストと文字列用クラスである ZeroLib ライブラリがあります。

用例:

load "zerolib.ring"

? "Using List - Index start from 0"
List = Z( [1,2,3] )
List.Add(4)
List.Add(5)
? List[0]
? List[1]
? List[2]
? List[3]
? List[4]
nIndex = List.find(2)
? "Find(2) = " + nIndex
List.delete(0)
? "After deleting the first item : List[0]"
? "Now List[0] = " + List[0]

? "Using String - Index start from 0"
String = Z( "Welcome" )
? String[0]
? String[1]
? String[2]
? String[3]
? String[4]
? String[5]
? String[6]

実行結果:

Using List - Index start from 0
1
2
3
4
5
Find(2) = 1
After deleting the first item : List[0]
Now List[0] = 2
Using String - Index start from 0
W
e
l
c
o
m
e

StdLib - 関数の追加

次の関数を StdLib へ追加しました

  • IsListContainsItems(aParent,aChild)

  • IsBetween(nNumber,nMin,nMax)

  • TimeInfo(cInformation)

用例:

load "stdlibcore.ring"
? "Using the IsListContainsItems() function"
aList1 = "a":"z"
aList2 = [:h,:l,:p,:u]
? IsListContainsItems(aList1,aList2)
? "Using the IsBetween() function"
? isBetween(1,3,4)
? isBetween(4,1,6)
? "Using the TimeInfo() function"
? timeInfo(:date)
? timeInfo(:year)
? timeInfo(:time)
? timeInfo(:hour_12)

実行結果:

Using the IsListContainsItems() function
1
Using the IsBetween() function
0
1
Using the TimeInfo() function
05/24/19
2019
15:30:33
03

前述した関数の詳細は StdLib 関数の章を参照してください。

RingQt の改良

  • Qt 5.12.3 を用いての RingQt のビルド

  • Android 用 RingQt - WebView モジュールの存在時に WebView をインクルードするためにプロジェクトファイルを更新

  • QString クラス - 新規メソッド

    • compare()

    • contains()

    • indexOf()

    • insert()

    • isRightToLeft()

    • remove()

    • repeated()

    • replace()

    • startsWith()

    • endsWith()

    • toHtmlEscaped()

    • clear()

    • isnull()

    • resize()

    • fill()

  • QAxBase および QVariant - API の改善

  • RingQt へ下記のクラスを追加しました。

    • QQuickView クラス

    • QPrintDialog クラス

    • QAxWidget2 クラス

    • QTextToSpeech クラス

    • QGraphicsView クラス

    • QAbstractAspect クラス

    • QNode クラス

    • QEntity クラス

    • QTransform クラス

    • QAspectEngine クラス

    • QTorusMesh クラス

    • QConeMesh クラス

    • QCylinderMesh クラス

    • QCuboidMesh クラス

    • QPlaneMesh クラス

    • QSphereMesh クラス

    • QPhongMaterial クラス

    • QForwardRenderer クラス

    • Qt3DWindow クラス

    • QAbstractCameraController クラス

    • QFirstPersonCameraController クラス

    • QTextureMaterial クラス

    • QExtrudedTextMesh クラス

    • QText2DEntity クラス

    • QSkyBoxEntity クラス

    • QConeGeometry クラス

    • QOrbitCameraController クラス

    • QDiffuseSpecularMaterial クラス

    • QGoochMaterial クラス

    • QMetalroughMaterial クラス

    • MorphPhongMaterial クラス

    • QPervertexColorMaterial クラス

    • QInputAspect クラス

    • QFrameAction クラス

    • QLogicAspect クラス

    • QCamera クラス

    • QCameraLens クラス

    • QMesh クラス

    • QTechnique クラス

    • QMaterial クラス

    • QEffect クラス

    • QRenderPass クラス

    • QSceneLoader クラス

    • QPointLight クラス

    • QRenderAspect クラス

    • QTextureLoader クラス

    • QObjectPicker クラス

    • QCameraSelector クラス

    • QCullFace クラス

    • QDepthTest クラス

    • QViewPort クラス

実行性能の向上

Ring 1.11 は Ring 1.10 よりも高速です。

アプリケーションにもよりますが 10% ~ 30% ほどの性能向上が見込めます。

取扱説明書の増補

次の章を取扱説明書へ追加しました。

  • チュートリアル: C/C++ による拡張機能の開発方法

  • Qt3D の用法

  • ZeroLib の用法

  • RingRayLib の用法

そのほかの改善

  • 新規サンプル
    • samples/other/ModuloTimesTableCircle フォルダ

    • samples/other/saveimage folder

    • samples/other/UsingQML folder

    • samples/other/myguicontrol.ring

    • samples/other/qcalendarwidget.ring

    • samples/other/qcalendarwidget2.ring

    • samples/other/sudoku-KL02.ring

    • samples/other/sudoku-KL02-longproblem.ring

    • samples/other/zerobasedlist.ring

    • ringlibs/gameengine/lesson17.ring (ボタンの用法)

    • samples/other/SQLTutorial/SQL-Tutorial.ring

    • samples/other/DrawFourier/AA-Draw-Fourier.ring

    • samples/other/SmartPhoneEmulator/ejemploKey.ring

    • samples/other/DiscreteFourierTransform/DiscreteFourierTransform.ring

    • samples/other/phonedatabase/PhoneDatabase.ring

  • Gold Magic 800 - レベルの追加 (44 レベル)

  • Fifteen Puzzle ゲーム 3D - コードの改善 (アニメーション速度)

  • Flappy Bird 3000 - ゲームオーバー時、時機 (鳥) を落下させる演出へ変更

  • Ring ノートパッド - 着脱可能ウィンドウ方式時のキーボード・ショートカット

  • Ring ノートパッド - 関数リストの表示時に "_" 文字がある関数を除外しなくなりました

  • Ring ノートパッド - 実行結果ウィンドウ - データの送信 - コードの改良

  • Ring ノートパッド - 検索と置換ウィンドウ - コードの改良

  • Ring ノートパッド - 編集メニュー - テキストの挿入ウィンドウ

  • Ring ノートパッド - 編集メニュー - 大文字と小文字オプション

  • Ring ノートパッド - 編集メニュー - 接頭字オプション

  • Ring ノートパッド - 編集メニュー - コメント行とコメントブロック行

  • Ring ノートパッド - ファイルタブ - コンテキストメニュー (ほかのファイルを閉じる、使用中のファイルを閉じる、すべてのファイルを閉じる)

  • RingPM - パッケージの更新 - 依存性の再インストールをしなくなりました

  • 2Dゲーム用 Ring ゲームエンジン - 追加 : GE_FULLSCREEN, GE_SCREEN_W および GE_SCREEN_H

  • 2Dゲーム用 Ring ゲームエンジン - 追加 : ゲームオブジェクトの name プロパティ

  • 2Dゲーム用 Ring ゲームエンジン - 追加 : find() ゲームクラスのメソッド (名前によるオブジェクトの検索)

  • 2Dゲーム用 Ring ゲームエンジン - oGame[:ObjectName] によるオブジェクトへのアクセスに対応

  • Natural ライブラリ - 実行性能の改良

  • FoxRing - 追加: frCTOD() 関数

  • 拡張機能用のコード生成器 - 新規構造体によるマネージドポインタを用いた関数の生成

  • Ring VM - Ring オブジェクトファイルエラーに関するエラーコード

  • Ring VM - Eval() 関数 - コードの改良 (実行性能の改善)

  • Ring VM - ステート管理 - コードの改良

  • Ring VM - ">" 演算子と演算子オーバーロード - コードの改良

  • Ring VM - 代入とオブジェクトメソッドの呼び出し - コードの改良

  • Ring VM - オブジェクト指向プログラミング (OOP) - Getter、 メソッド - 実行性能の改善

  • Ring API - C 拡張機能での RING_API_ISLIST() の対応

  • Ring コンパイラ - 条件分岐の記述時に開業後の数値とリテラルに対応

  • Ring コンパイラ - 行の開始におけるセミコロン (;) へ対応

  • Ring コンパイラ - ループ外からの Loop と Exit 命令は使えなくなりました