Classiclll's Blog

an old boy

仮想タイプライターを考える(その2)

イメージ 1

仮想タイプライターを考える(その2)

まずはタイプ用紙(原型版)

前記事で書いた

【タイプ用紙は普通の長方形の紙】
・上下左右にマージン(印字できないスペース)があり、
・フィードしないで打てば、重ね打ちが可能で、
・スペースは単なるフィード(印字を消せる訳が無い)、
・文字を消すには、専用の消しゴムで手動消去
・タイプ中は用紙支えにもたれたように【たわみ】、
・取り出すと折り曲げ出来る柔らかい平面だけど、
・曲がった表面にはちゃんと印字がされている。

のうち、とりあえず最初の3行からモデルを考える。

(上のガラクタ置き場アプレットは、タイプされた文字をその場所に転写する。Enter/Returnでリボンチェンジ、ドラッグで用紙移動・・・・アプレットウィンドウをクリックしてP5を起こしてやってから試す事)

用紙の上にあるハンマーヘッドによる一つの転写像(文字)は
class TypedImage {
 char ch;   //タイプされたときのキーの文字を、
 PFont font; //タイプされたフォントフェースで、
 color ink;  //タイプされたときのリボンの色で、
 Loc at;   //タイプされた(紙との間の相対位置が変わらない)位置に、
         //じっとしている。
//転写像を作るには、文字、フェース、色、用紙との相対位置を指定する
 TypedImage(char c, PFont f, Loc p, color c)
         //文字、フォント、色、用紙との相対位置を覚える
//転写像に対する操作は、
 void draw() //描けと言われれば、覚えた位置に覚えた形と覚えた色で転写像(文字)を描く
}

タイプライター用紙を上下左右に動かすと、定着された一つ以上の文字は用紙の動きにあわせて動く。(なので、紙の上に印刷されているように見える??)

class TypingPaper{
 float width,height; //長方形で
 color col;      //淡いセピア色(の予定。ムラが出れば良いけど、まだ)で、
 TypedList tlist = new TypedList();
             //複数の転写像の入れ物(コンテナ)を持つ
//ただし、入れ物は、
 private class TypedList extends LinkedList { //汎用の入れ物なんだけど、
  void add(TypedChar ch)  //転写像の実体だけを覚えられる
  TypedChar get(int idx)  //転写像の実体を思い出せる
 }
//用紙を作るには、用紙色、高さ、幅を指定する
 TypingPaper(color pc, float ph, float pw)
//用紙に対する操作は、
 void erase()     //全ての転写像を消す(きれいな用紙にする)
 void typeIn(char c, Loc at, PFont font, float fsize, color ribbon)
             //新しい転写像を記憶に加える
 void draw() {    //描けと言われれば
  rect(x,y,width,height);       //用紙を描いて
  for (int i=0;i<tlist.size();i++) { //覚えている転写像をありったけ
   tlist.get(i).draw();         //復元する
  }
 }
}