亀場でプログラミング:開発状況

このページでは、「亀場」について、現在進行中のアイデアやコードについての情報をまとめておきます。

最近の更新

15-NOV-2021 golang用のAPIを試作(turtle.go)
21-JUL-2019 GLUTの代わりにGLFWを使用したバージョンを試作(macOS用テスト版)
10-JUN-2019 Windows版亀場サーバーの不具合を修正。
19-JUN-2017 Python用API(python.py)のバグ修正。Python用のサンプル集を追加。
09-JUN-2017 亀場にトランプのカードを表示する機能を追加。
17-AUG-2015 Windows版で表示がおかしくなる(画像が次第に消える、色が変・・)不具合に対応。
11-JUL-2013 同時に複数の亀場サーバーを起動した際に警告を表示。POINTモード追加。
05-JUL-2013 LW()で線幅を0にすると落ちるバグを修正。
04-JUL-2013 相対ジャンプRJUMP()を追加。
02-JUL-2013 毛筆モードの仕様を一部変更。TCPサーバーの応答を一部変更。
27-JUN-2013 「亀場ライブ」でブラウザ側から強制切断された場合の処理を修正 。
26-JUN-2013 Windows版「亀場ライブ」のバグを修正 。
24-JUN-2013 「亀場ライブ」機能を追加 。
11-JUN-2013 Windows版でFINDERを使うと落ちるバグを修正。
10-JUN-2013 同報(同胞)通信(BCAS(), Q_BCAS())追加。通信の際の文字列の扱いを変更。
05-JUN-2013 BRUSH(毛筆)モードのバグ修正。
02-JUN-2013 BRUSH(毛筆)モードを追加。
01-JUN-2013 簡単なヘルプ画面を追加。hキーを押すか、メニューから About Turtle Field を選択

疑似三次元表示

亀場での物体の座標は二次元的に扱われていますが、描画にOpenGLを使っていますので、立体的な表示も可能です。

画面上で数字の3キーを押すと、表示が通常モードと三次元モードとの間を切り替わります。 +キーでズームイン、-キーでズームアウト、 < キーと > キーで 視点を回転させることができます。 「ゲーム感覚」で使いたい方はお試しください。

三次元版での迷路モードの表示例

tfield-birdview-maze

01-JUN-2013 FINDERやRADERに補足されたとき、亀からターゲットとなる物体に「ビーム」が走るようにしてみました。 FINDERビームは赤、RADERビームは青色です(表示はBattle mode中のみ有効)

各言語への対応

turtle.go

Go

Go言語用のAPIを試作してみました。まだ動作確認は十分に行っておりません。turtle.goを適切なディレクトリに置いてお使いください。 あらかじめモジュールと、importのところの調整を行っておかないと "build command-line-arguments: cannot find module for path ..."エラーが出ますので、ご注意ください。

以下に、ヒルベルト曲線を描くコードの例を示します(importfooは適宜修正のこと)。

package main

import (
  "foo/turtle"
)

const (
  STEP = 13
)

func hilbert(t *turtle.Turtle, level int, angle float64) {
  if level<=0 {
    return
  }
  t.Rt(angle)
  hilbert(t,level-1,-angle)
  t.Fd(STEP)
  t.Lt(angle)
  hilbert(t,level-1,angle)
  t.Fd(STEP)
  hilbert(t,level-1,angle)
  t.Lt(angle)
  t.Fd(STEP)
  hilbert(t,level-1,-angle)
  t.Rt(angle)
}

func main() {
  ttl := new(turtle.Turtle)
  ttl.Connect("localhost")
  ttl.Clr()
  ttl.Rst()
  ttl.Lw(2)
  ttl.Col(1.0,1.0,0.0)
  ttl.Bk(200)
  ttl.Lt(90)
  ttl.Fd(200)
  ttl.Rt(90)
  ttl.Pd()
  hilbert(ttl,5,90.0)
  ttl.Fire()
}

turtlefield.rkt

Racket (Scheme)

Schemeの処理系として色々な機能が整備されているRacketでも 亀場がいじれるように、とりあえず動くプログラムを作ってみました。 Racketにはもともとタートルグラフィックスなどが内蔵されていますので、亀場などはじめから必要ないようなものですが・・・ 左のリンクから turtlefield.rkt をダウンロードして、 Racketのプログラムと同じ場所に保存しておけば、 以下のようにして亀を操ることができます。

#lang racket
(require "./turtlefield.rkt")

(tf-con "localhost")
(tf-clr)
(tf-rst)
(tf-pd)
(tf-fd 100)
(tf-lt 90)
(tf-fd 100)
(tf-lt 90)
(tf-fd 100)
(tf-lt 90)
(tf-fd 100)
(tf-discon)

JavaScript + Node.js

turtle.js

JavaScriptの練習用に、Node.jsを使って亀場と通信するためのAPIもこしらえてみました。 亀場は画面の更新に合わせて同期的に動作するソフトである一方、Node.jsは非同期的な動作が前提であるため、 正直、あまり使い勝手は良くありません。

詳しくはこちらのページにまとめておきました。


分かっているバグ

Windows版の亀場サーバーの不具合

Windows版でのテクスチャ描画が大変遅い場合があるようですが、今のところ解決法は見つかっていません(2015-08-17)。