* 初心者向けプログラミング体験ワークショップ#10
-(by [[K]], 2021.12.14)

** (0)
-[[a21_edu04]]の「ジャンプ・ゲーム」を「なでしこ3」に移植してみました。
-これは、[[「初心者向けプログラミング体験ワークショップ」>a21_edu01]]の教材のうちの一つとして作り始めたつもりだったのですが、プログラムが簡単ではなくなってしまたので、適切ではないかもしれません。
-しかし、ブラウザ上で同じゲームができるのはかなり感激します!
-ここに取り上げるのが適切かどうかはかなり迷いましたが、まあ未公開で眠らせておくのももったいないので、ここに掲載します。

-なお、スペースでジャンプする仕様だとちょっと遊びにくかったので、「J」でジャンプする仕様に変更しています。

** (1)
-ストーリーやルールなどはすべてオリジナルの[[a21_edu04]]に準じます。ここでは実行方法を主に説明します。

-まず [[''「なでしこ3簡易エディタ」''>https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF-%E3%82%BF%E3%83%BC%E3%83%88%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E7%94%A8%E5%A4%A7%E7%94%BB%E9%9D%A2&simple]] へ行きます。
-そして画面上部のテキストボックスに、以下のプログラムをコピー&ペーストなどで入力してください(もう手で入力してもらうには長すぎると思いますので)。
-あとは「実行」ボタンを押せば始まります!
-「クリア」ボタンを押せばいつでもやめられます。

** (2) プログラム
 
 // 以下はaclライブラリの代わり
 
 画面内容=[]。KEY=0。
 
 ●(xyにchをcで)キャラクタ描画とは
   変数 x=xy[0]。
   変数 y=xy[1]。
   変数 cc=c[0]。
   変数 bc=c[1]。
   変数 ixy=(x+y*100)*3。
   画面内容[ixy]=ch。
   画面内容[ixy+1]=cc。
   画面内容[ixy+2]=bc。
   1に線太設定。
   bcに線色設定。
   bcに塗り色設定。
   x=x*16。 y=y*16。
   [x, y, 16, 16]へ四角描画。
   ccに線色設定。
   ccに塗り色設定。
   もし、ch=1ならば
     [x, y, 16, 16]へ四角描画。
   ここまで。
   もし、ch=2ならば
     [x+8, y+8]へ7の円描画。
   ここまで。
   もし、ch=3ならば
     3に線太設定。
     [x,y]から[x+15,y+15]まで線描画。
     [x,y+15]から[x+15,y]まで線描画。
   ここまで。
   もし、ch=4ならば
     [x, y+6, 16, 4]へ四角描画。
   ここまで。
   もし、ch=5ならば
     [x+6, y, 4, 16]へ四角描画。
   ここまで。
   もし、ch=6ならば
     [x+8, y+8]へ8の円描画。
     bcに線色設定。
     bcに塗り色設定。
     [x+3, y+5, 2,2]へ四角描画。
     [x+11,y+5, 2,2]へ四角描画。
     [x+6, y+12,4,2]へ四角描画。
   ここまで。
 ここまで。
 
 ●(xyにchをcでabの)キャラクタ四角描画とは
   変数 a=ab[0]。
   変数 b=ab[1]。
   変数 x=xy[0]。
   変数 y=xy[1]。
   変数 i=0。
   変数 j=0。
   もし、(a>0)かつ(b>0)ならば
     jを0からb-1まで繰り返す
       iを0からa-1まで繰り返す
         [x+i,y+j]にchをcでキャラクタ描画。
       ここまで。
     ここまで。
   ここまで。
 ここまで。
 
 ●(abxyをdに)スクロール描画とは
   変数 a=abxy[0]。
   変数 b=abxy[1]。
   変数 x=abxy[2]。
   変数 y=abxy[3]。
   変数 aa=[]。
   変数 i=0。
   変数 j=0。
   jを0からb-1まで繰り返す
     iを0からa-1まで繰り返す
       変数 ixy=((x+i)+(y+j)*100)*3。
       変数 iij=(i+j*100)*3。
       aa[iij]=画面内容[ixy]。
       aa[iij+1]=画面内容[ixy+1]。
       aa[iij+2]=画面内容[ixy+2]。
     ここまで。
   ここまで。
   x=x+d[0]。
   y=y+d[1]。
   jを0からb-1まで繰り返す
     iを0からa-1まで繰り返す
       iij=(i+j*100)*3。
       変数 cc=aa[iij+1]。
       変数 bc=aa[iij+2]。
       [x+i,y+j]にaa[iij]を[cc,bc]でキャラクタ描画。
     ここまで。
   ここまで。
 ここまで。
 
 XMOVE=0。YMOVE=0。
 
 DOCUMENTをキー押した時には
   KEY=押されたキー。
   XMOVE=0。YMOVE=0。
   もし、KEY=「ArrowLeft」ならば、XMOVE= -1。
   もし、KEY=「A」ならば、XMOVE= -1。
   もし、KEY=「a」ならば、XMOVE= -1。
   もし、KEY=「ArrowRight」ならば、XMOVE=1。
   もし、KEY=「S」ならば、XMOVE=1。
   もし、KEY=「s」ならば、XMOVE=1。
   もし、KEY=「ArrowUp」ならば、YMOVE= -1。
   もし、KEY=「W」ならば、YMOVE= -1。
   もし、KEY=「w」ならば、YMOVE= -1。
   もし、KEY=「ArrowDown」ならば、YMOVE=1。
   もし、KEY=「Z」ならば、YMOVE=1。
   もし、KEY=「z」ならば、YMOVE=1。
 ここまで。
 
 // ここから本体
 
 PH=0。HI=0。X=0。Y=0。GE=0。J=0。
 
 0.2秒毎には(タイマーID)
   変数 I=0。変数 R0=0。変数 R1=0。
   PHで条件分岐
     0ならば
       [0,0]に0を[黒色,黒色]で[32,24]のキャラクタ四角描画。
       Iを0から4まで繰り返す
         [0,I*5+2]に1を[水色,黒色]で[32,1]のキャラクタ四角描画。
       ここまで。
       Iを0から9まで繰り返す
         R0=(5の乱数)*5+6。R1=(3の乱数)*5+7。
         [R0,R1]に0を[黒色,黒色]で[2,1]のキャラクタ四角描画。
       ここまで。
       Iを0から15まで繰り返す
         R0=(26の乱数)+4。R1=(19の乱数)+3。[R0,R1]に3を[赤色,黒色]でキャラクタ描画。
         R0=(26の乱数)+4。R1=(19の乱数)+3。[R0,R1]に2を[白色,黒色]でキャラクタ描画。
       ここまで。
       PH=1。GE=1000。X=0。Y=21。J=0。KEY=0。
     ここまで。
     1ならば
       [X,Y]に0を[黒色,黒色]でキャラクタ描画。
       もし、KEY=「j」ならば、KEY=「J」。
       もし、(KEY<>「J」)または(Y%5=3)ならば、J=0。
       I=(Y+1)*100+X。
       もし、(KEY=「J」)かつ(画面内容[I*3]=1)ならば、J=1。
       X=X+1。
       もし、X=32ならば
         X=0。Y=Y-5。
       ここまで。
       Y=Y-J。
       I=(Y+1)*100+X。
       もし、(J=0)かつ(画面内容[I*3]<>1)ならば、Y=Y+1。
       GE=GE-1。
       I=Y*100+X。
       もし、画面内容[I*3]=3ならば、GE=GE-400。
       もし、GE<0ならば、GE=0。
       もし、画面内容[I*3]=2ならば、GE=GE+200。
       [0,0]に0を[黒色,黒色]で[32,1]のキャラクタ四角描画。
       白色に塗り色設定。
       「16px sans-serif」に描画フォント設定。
       [0,13]へ「GENKI:{GE}  HIGH:{HI}」を文字描画。
       [X,Y]に6を[黄色,黒色]でキャラクタ描画。
       もし、GE<=0ならば
         [X,Y]に6を[紫色,黒色]でキャラクタ描画。
         PH=2。
       ここまで。
       もし、(Y<=6)かつ(X=31)ならば
         緑色に塗り色設定。
         「16px sans-serif」に描画フォント設定。
         [368,13]へ「<< CLEAR !! >>」を文字描画。
         PH=2。
       ここまで。
       KEY=0。
     ここまで。
     2ならば
       もし、HI<GEならば、HI=GE。
       もし、KEY=「Enter」ならば、PH=0。
     ここまで。
   ここまで。
 ここまで。
 

** (3)
-「なでしこ3」はこんな無茶な使い方でもちゃんと書いた通りに動いて、さすがによくできているなーとつくづく思いました。
-私は「なでしこ3」の理解が甘いので、もっとうまい書き方があるかもしれません。至らないところはどうかご容赦ください。

* こめんと欄
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS