JavaScriptコード掲載ページ

キー入力のサンプル




<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>キーによるキャラ移動のテスト</title>
<style type="text/css">
#SCR { font-family: MS ゴシック,Osaka-等幅,monospace }
</style>
<script>
   // 文字スクリーン用文字列、幅、高さ
   var SCRTXT = "",SCRW = 10,SCRH = 10;
   var px,py,kCode;

   // 半角英数字記号→全角変換
   function convertFullWidth(s) {
       var r;
       r = s.replace(/[!-~]/g, function(s) {
              return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
       });
       // 空白は上の方法だとうまく変換されないので別個
       r = r.replace(/ /g," ");
       return r;
   }

   // 指定したIDの項目に文字列を入れる
   // 書式:cPrint(ID,文字列)
   function cPrint(id,str) {
       document.getElementById(id).innerHTML = str;
   }

   // 押されたキーの情報を取得する
   function keyTouch(e) {
       var k, ax = 0,ay = 0;
       // ブラウザによって取得方法が異なる
       if (window.event) {
           // firefox以外
           kCode = window.event.keyCode;
       } else {
           // firefox
           kCode = e.keyCode;
       }
   }

   // キー入力を受け付ける
   document.onkeydown = keyTouch;

   // 文字スクリーン表示
   function pTx() {
       var y,s;
       s = "";
       for (y = 0;y < SCRH;y++) {
           s = s + SCRTXT.substr(y * SCRW,SCRW) + "<br>";
       }
       cPrint("SCR",s);
   }

   // 文字スクリーン大きさ設定
   function setTxWidth(w,h) {
       var x,y,s;
       if (w < 0 || h < 0) return false;
       SCRTXT = "";
       // 空白1行分作成
       s = "";
       for (x = 0;x < w;x++) s = s + " ";
       // 高さhの回数だけ繰り返す
       for (y = 0;y < h;y++) SCRTXT = SCRTXT + s;
       //
       SCRW = w;
       SCRH = h;
       pTx();
   }

   // 文字スクリーン画面消去
   function clsTx() {
       setTxWidth(SCRW,SCRH);
       pTx();
   }

   // 文字描画
   function printTx(x,y,s) {
       var p,l,t = "",t0 = "",t1 = "";
       s = convertFullWidth(s);
       l = s.length;        // 表示したい文字列の長さ
       p = y * SCRW + x;    // 表示位置の計算
       if (p > 0) t0 = SCRTXT.substr(0,p);
       t1 = SCRTXT.substr(p + l);
       SCRTXT = t0 + s + t1;
       SCRTXT = SCRTXT.substr(0,SCRW*SCRH);
       pTx();
   }

   // キャラ移動
   function chrMove() {
       var ax = 0, ay = 0;
       if (kCode == 37 && px > 0) ax = -1;    // 左
       if (kCode == 39 && px < 9) ax =  1;    // 右
       if (kCode == 38 && py > 0) ay = -1;    // 上
       if (kCode == 40 && py < 9) ay =  1;    // 下
       //
       if (ax != 0 || ay != 0) printTx(px, py, " ");
       px += ax;
       py += ay;
       printTx(px, py, "●");
       kCode = 0;
   }

   // 関数使用サンプル
   function prog() {
       setTxWidth(10,10);
       px = 4; py = 4; kCode = 0;
       printTx(px, py, "●");
       TimerID = setInterval("chrMove()",50);
   }
</script>
</head>
<body onLoad="prog()">
<table border=1><tr><td id="SCR">&nbsp;</td></tr></table>
<br>
カーソルキーで●が動かせます。
</body>
</html>