更新:2022年5月16日 HSPトップへもどる
『 ソフトウェア・キーボード 』 ◆ブラウザ上で動作するページ
★このスクリプトは 画像を使用していませんので、WebDishサービスにそのまま登録できます
#include "hsp3dish.as"
title "Yo-ga Jun-chan 2022-5-14"
// 《 変数定義 》
//title " HSP stat = "+ sysinfo(0)
//OSを判別する
os = sysinfo(0) //ブラウザ版だと [ Emscripten 1.39 ] Windows版だと[Windows~ ]
os_kasiramoji = strmid(os,0,1) //頭文字半角1文字を取得する
zenkakuitimojinagasa = 2 //Windows版では 全角ひらがな一文字は長さ2
if os_kasiramoji = "E": zenkakuitimojinagasa = 3 //ブラウザ版では 全角ひらがな一文字は長さ3
mk = "" //未確定日本語文字列(例 ka)
md = "" //戻り値受け渡し(文字列)
moji = "" //未確定が確定してできた文字
mojiretu = "" //入力一行文字列全体
kotoba_a = "" //決定された言葉a
kotoba_b = "" //決定された言葉b(未使用)
ositeru = 0 //タッチ押下フラグ
key_w = 44 //キー幅+余白
key_h = 84 //キー高さ+余白
sdim keys_zen,50 //キーボード刻印表示用の全角配列
keys_zen = "q", "w", "e", "r","t", "y", "u", "i", "o", "p","a", "s", "d", "f","g", "h", "j", "k", "l", ";", "z", "x", "c", "v", "b", "n", "m", " Clr", " <BS", " Ent"
sdim keys,50 //日本語変換用の半角文字列配列
keys = "q", "w", "e", "r","t", "y", "u", "i", "o", "p","a", "s", "d", "f","g", "h", "j", "k", "l", ";", "z", "x", "c", "v", "b", "n", "m", "", "", ""
//※このプログラムでは「アルファベット一文字の変数は使いまわし汎用変数」とする
//※ HSP3 の「変数」は通常はすべてグローバル扱いでスコープがない(※モジュール変数、外部の変数を除く)
//変数名を知らないうちに重複して名づけてしまうと混乱とバグの原因になり調査がむずかしいので命名には十分な配慮を。
//Windows版実行時とブラウザ版実行時ではstrlenで取得できる「文字列の長さ」がちがう!(BS一文字削除に影響でる!)
*top
// メインループ ====================================================
repeat
redraw 0 //hsp3dishで画面描画する際処理の先頭に必要
//《 物理キーボードとマウス入力検知 》
stick key : if key&128 : end //[ESC]キーで終了
//------------------------------------------------------
// 《 タッチ検出と日本語入力 》
mtlist touchid //現在タッチされている情報を持つポイントIDリストを取得
id = touchid(0) //シングルタッチのみ対応(※このプログラム内の仕様)
mtinfo touch,id
if touch(0) = 1 && ositeru = 0 { //キー連打にならないよう最初一回押した時だけ実行
//どのキーが押されたか判定
y = touch(2) : x = touch(1) //タッチされたxy座標
nanbanme_y = (y-410) / key_h //キーボード盤面を一個のキーの高さで割って何段目のキーか判定
nanbanme_x = (x-20) / key_w //キーボード盤面を一個のキーの幅で割って何列目のキーか判定
a = (10 * nanbanme_y) + nanbanme_x //最初に定義した半角配列の何番目か算出し、次で取り出す
if a >= 0 && a < 30{ //キーボード範囲内を押した時だけ実行
if a < 27 {
mk = mk + keys.a //未確定日本語文字列にいま押したキー文字列を追加
gosub *nihongo_henkan //日本語変換(現在のアルファベット組で日本語になれば
moji = md //( md変数は汎用で使う可能性があるので一時べつの変数へ格納
mojiretu += moji
}else{ //26以下↑と27 28 29 ↓の処理
if a = 29 { //決定キー
if mojiretu != "" { kotoba_a = mojiretu : mojiretu="" : mk="" } //決定キーで文字列を上部へ表示(実行)
}
if a = 27 { mojiretu="" : mk="" : kotoba_a="" } //クリアキー
//------
if a = 28 { //BSキー
if mk = "" { //BSキー押されたときにアルファベットなければ末尾一文字消す
n = strlen(mojiretu) //文字列の長さ取得(バイト)
//title ""+n : stop //テスト用 Win版は2文字 ブラウザ版は3文字 扱いになってる!
t = strmid(mojiretu, 0, n-zenkakuitimojinagasa)
mojiretu = t
}else{
mk="" //BSキー押されたときにアルファベット入力中ならそれを消す
}
}
//------
}
ositeru = 1 //押下一回目しか実行されないためのフラグ
}
}
if touch(0) = 0 && ositeru = 1 { ositeru = 0 } //キーから指が離れたら押下フラグをリセット
//------------------------------------------------------
// 《 描画 》
//上部画面エリア
color 0,0,128 : boxf 0,0,480,400
//マウス位置表示(開発用 ※さいごに削除してよい)
color 128,128,128 : pos 0,4 : mes "("+mousex+","+mousey+")"
//キーボード下地
color 100,100,100 : boxf 0,400,480,800
//入力文字表示エリア
color 1,1,1 : boxf 0,300,480,400
//キーボード描画
gosub *keys_put
//文字入力のなかみを描画
color 255,255,255 : font "",36,16,1 : pos 50,356 : mes mojiretu,1 : mes mk,1 //1行につなげて表示
//決定後の文字列表示エリア
pos 100,150 : mes kotoba_a
redraw 1 //hsp3dishで画面描画する際さいごに必要
await 1000/60 //描画書き換え待ち時間
loop
stop
//(※ HSP3Dish は Windows版HSP と一番大きな違いとして「描画のためのメインループをまわし続ける必要がある」)
// ================================================================
//日本語変換
*nihongo_henkan
md = "" //戻り値を初期化
if mk = "a" { md = "あ" : mk="" }
if mk = "i" { md = "い" : mk="" }
if mk = "u" { md = "う" : mk="" }
if mk = "e" { md = "え" : mk="" }
if mk = "o" { md = "お" : mk="" }
if mk = "ka" { md = "か" : mk="" }
if mk = "ki" { md = "き" : mk="" }
if mk = "ku" { md = "く" : mk="" }
if mk = "ke" { md = "け" : mk="" }
if mk = "ko" { md = "こ" : mk="" }
if mk = "sa" { md = "さ" : mk="" }
if mk = "si" { md = "し" : mk="" }
if mk = "su" { md = "す" : mk="" }
if mk = "se" { md = "せ" : mk="" }
if mk = "so" { md = "そ" : mk="" }
if mk = "ta" { md = "た" : mk="" }
if mk = "ti" { md = "ち" : mk="" }
if mk = "tu" { md = "つ" : mk="" }
if mk = "te" { md = "て" : mk="" }
if mk = "to" { md = "と" : mk="" }
if mk = "na" { md = "な" : mk="" }
if mk = "ni" { md = "に" : mk="" }
if mk = "nu" { md = "ぬ" : mk="" }
if mk = "ne" { md = "ね" : mk="" }
if mk = "no" { md = "の" : mk="" }
if mk = "ha" { md = "は" : mk="" }
if mk = "hi" { md = "ひ" : mk="" }
if mk = "hu" { md = "ふ" : mk="" }
if mk = "he" { md = "へ" : mk="" }
if mk = "ho" { md = "ほ" : mk="" }
if mk = "ma" { md = "ま" : mk="" }
if mk = "mi" { md = "み" : mk="" }
if mk = "mu" { md = "む" : mk="" }
if mk = "me" { md = "め" : mk="" }
if mk = "mo" { md = "も" : mk="" }
if mk = "ya" { md = "や" : mk="" }
if mk = "yu" { md = "ゆ" : mk="" }
if mk = "yo" { md = "よ" : mk="" }
if mk = "ra" { md = "ら" : mk="" }
if mk = "ri" { md = "り" : mk="" }
if mk = "ru" { md = "る" : mk="" }
if mk = "re" { md = "れ" : mk="" }
if mk = "ro" { md = "ろ" : mk="" }
if mk = "wa" { md = "わ" : mk="" }
if mk = "wo" { md = "を" : mk="" }
//不足分のローマ字と記号(長音、促音など)追加する!
return
//================================================================
//キーボード表示
*keys_put
font "",36,16,1
y = 410 // y初期位置
keycnt=0
repeat 3 //段数
x = 20 // x初期位置
repeat 10 //列数
color 255,255,255 : boxf x,y,x+40,y+80 //キー(幅と高さ)
if keycnt > 26 : font "",18,16,1
color 1,1,1 : pos x,y+20 : mes keys_zen.keycnt //「キー刻印」となるアルファベットを配列から取り出す
x +=44 //幅と余白分
keycnt++ //次のアルファベットへ
loop
y +=84 //高さと余白分
loop
return
//================================================================
stop
・この「ソフトウェア・キーボード」は簡易版であり、完全なものではありません。「文字入力」を使った hsp3dish.js 向け作品 を作りたいと思ったとき誰かの参考に役立てばいいなと思い公開しています
スクリプト改善:
日本語変換 *nihongo_henkan サブルーチンのなかに同じような処理がたくさんあります。「繰り返し命令」と「配列」をつかって短く書き直すこともできます