Kuinでサンプルコードを書いた
くいなちゃんさんが2017/9/17にプログラミング言語Kuinを発表した。誕生日の記念にプログラミング言語を作成するといった点に技術力の高さを感じざるを得ない。なお、くいなちゃんさんのプロフィールを読む限り、2017/9/16日にくいなちゃんさんは6歳であり、2017/9/17日に誕生日を迎え、6歳になられた。永遠の6歳児なのだと思われる。
Kuinを使ってみた感想
エディタについて
Kuin をダウンロードすると Kuin の開発環境が付属している。これの完成度が高い。VisualStudio の IntelliSense まではいかないものの、入力と同時に構文チェックが走る。またスクリーンショットのようにハイライト機能も完備している。
なお、Kuin でリリースビルドを行うと、実行ファイルと同時に、dataフォルダが作成される。このdataファイルを消した状態で実行ファイルを起動するとエラーとなる。このエディタもdataフォルダを消すとKuin で作成されたソフトウェアと同じ起動エラーを出す。このことから、Kuin の開発環境はKuinで書かれていることが推察できる。すなわち、くいなちゃんさんの技術力やばい高い・・・
言語仕様について
Kuin を初見で見た時の印象は、「doが多い」であった。確かにプログラミングは、宣言と実行式の2つを組み合わせていくものであろうと思われるため、いい刺激を受けた。他にも、変数の代入に、「=」ではなく、「::」を使うという点や、「+=」が「:+」であったりする等の演算子がC言語系とは異なっていたり、関数の中に関数を定義できるなど、JavaScript のような機能もある。
作ってみたもの
スクリーンショットをご覧いただければお分かりのように自分にとってのサンプルでしかない。これでテキスト表示やメニューの作成、簡単な数値計算の仕方を試した。
test1.kn
var wndMain: wnd@Wnd
var drawMain: wnd@Draw
var fontBig: draw@Font
var fontLittle: draw@Font
; ウインドウが閉じられたときに呼ばれるイベント関数
func wndMainOnClose(wnd: wnd@WndBase): bool
var result: wnd@MsgBoxResult :: wnd@msgBox(@wndMain, "終了しても良いですか?", "HelloKuinWorld", %warn, %yesNoCancel)
if(result = %yes)
ret true {trueを返すとウインドウは閉じる}
else
ret false {falseを返すとウインドウは閉じない}
end if
end func
; メニューが選択されたときに呼ばれるイベント関数
func wndMainOnPushMenu(wnd: wnd@WndBase, id: int)
switch(id)
case 16#0001 {Exit}
do @wndMain.close() {ウインドウを閉じる}
case 16#1001 {About HelloKuinWorld}
do wnd@msgBox(@wndMain, "Hello Kuin World\nVersion 1.0.0\njskny.", "Hello Kuin World", %info, %ok)
end switch
end func
; FPS を計測し描画する
var lastCounter : int :: 0
func showFPS()
var tmp : int :: (lib@sysTime() - @lastCounter)
do @fontLittle.draw(10.0, 600.0 - 60.0, "System Time: " ~ lib@sysTime().toStr(), draw@white)
do @fontLittle.draw(10.0, 600.0 - 40.0, "Last frame time : " ~ tmp.toStr(), draw@white)
do @fontLittle.draw(10.0, 600.0 - 20.0, "FPS : " ~ (1000 / tmp).toStr(), draw@white)
do @lastCounter :: lib@sysTime()
end func
; main
func main()
; ウインドウの作成
do @wndMain :: wnd@makeWnd(null, %normal, 800, 600, "Hello Kuin World")
do @wndMain.onClose :: @wndMainOnClose {ウインドウが閉じられたときのイベントを登録}
do @wndMain.onPushMenu :: @wndMainOnPushMenu {メニューが選択されたときのイベントを登録}
; 描画領域の作成
do @drawMain :: wnd@makeDraw(@wndMain, 0, 0, 800, 600, %scale, %scale, false) {ドローコントロールの生成}
; フォント読み込み等
do @fontBig :: draw@makeFont(null, 32, false, false, true, 0.0)
do @fontLittle :: draw@makeFont(null, 12, false, false, true, 0.0)
; メニューの作成
var menuMain: wnd@Menu :: wnd@makeMenu()
var popupMainFile: wnd@Popup :: wnd@makePopup()
do menuMain.addPopup("&Magic", popupMainFile)
do popupMainFile.add(16#0001, "E&xit")
var popupMainHelp: wnd@Popup :: wnd@makePopup()
do menuMain.addPopup("&Help", popupMainHelp)
do popupMainHelp.add(16#1001, "&About Hello Kuin World...")
; メニューの登録
do @wndMain.setMenu(menuMain)
; 背景色の設定
do draw@clearColor(16#FF3333FF)
var counter : int :: 0
while(wnd@act())
do @fontBig.draw(0.0, 0.0, "Hello Kuin World !", draw@white)
do @fontLittle.draw(0.0, 50.0, "and This is first Kuin application.", draw@white)
do @fontLittle.draw(0.0, 70.0, "Create the world !", 16#FFFF00FF)
do @fontLittle.draw(10.0, 100.0, "'A' button ('Z' key): " ~ input@pad(0, %a).toStr(), draw@white)
do @fontLittle.draw(10.0, 120.0, "'B' button ('X' key): " ~ input@pad(0, %b).toStr(), draw@white)
do @fontLittle.draw(10.0, 140.0, "'C' button ('C' key): " ~ input@pad(0, %c).toStr(), draw@white)
do @fontLittle.draw(10.0, 160.0, "'D' button ('V' key): " ~ input@pad(0, %d).toStr(), draw@white)
do @fontLittle.draw(10.0, 180.0, "'E' button: " ~ input@pad(0, %e).toStr(), draw@white)
do @fontLittle.draw(10.0, 200.0, "'F' button: " ~ input@pad(0, %f).toStr(), draw@white)
do @fontLittle.draw(10.0, 220.0, "'G' button: " ~ input@pad(0, %g).toStr(), draw@white)
do @fontLittle.draw(10.0, 240.0, "'H' button: " ~ input@pad(0, %h).toStr(), draw@white)
do @fontLittle.draw(10.0, 260.0, "'I' button: " ~ input@pad(0, %i).toStr(), draw@white)
do @fontLittle.draw(10.0, 280.0, "'L' button ('A' key): " ~ input@pad(0, %l).toStr(), draw@white)
do @fontLittle.draw(10.0, 300.0, "'R' button ('S' key): " ~ input@pad(0, %r).toStr(), draw@white)
do @fontLittle.draw(10.0, 320.0, "'Menu' button ('Esc' key): " ~ input@pad(0, %menu).toStr(), draw@white)
do @fontLittle.draw(10.0, 340.0, "'Left' button ('Left' key): " ~ input@pad(0, %left).toStr(), draw@white)
do @fontLittle.draw(10.0, 360.0, "'Right' button ('Right' key): " ~ input@pad(0, %right).toStr(), draw@white)
do @fontLittle.draw(10.0, 380.0, "'Up' button ('Up' key): " ~ input@pad(0, %up).toStr(), draw@white)
do @fontLittle.draw(10.0, 400.0, "'Down' button ('Down' key): " ~ input@pad(0, %down).toStr(), draw@white)
do @showFPS()
do draw@render(60)
do counter :+ 1
end while
end func
終わりに
HSPでおっかなびっくりmes文を書いていたころをふと思い出した。エディタでF5を押せば即実行できるところが似ていたからであろうか。
最近のコメント