今日の雑記

<< 2013/10 >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

back to TOP PAGE

 | 

2013-10-31

0〜2までの乱数値を取ろうとして「rand() % 2」とかやってるボクはそろそろ別の道を模索すべきなのかもしれない。全ての道が行き止まりかもしれないけど。

トラックバック - http://d.hatena.ne.jp/isshiki/20131031

2013-10-28

昨日の「else-ifがない」の話で、ソース内に「でなければ」が唐突に出てくる違和感がでかいなーと、一日経って読んでみて感じた。

帰宅今日は一日だるかった。体調は悪くない感じ。咳は出るけど。

[][]「Sunabaで作ろうゲームプログラミング

生放送。作っていたシューティングが思いの他あっさり終わった。7枠で二日ほど。

ただ、パクパクマンのときも思ってはいたんだが、ちょっとSunaba本を卒業したての人間には複雑すぎるかもしれない。もうちょっと簡単なゲームとか考えたほうが良いかも。そういう人間に300行オーバーのソースはハードルが高いかもしれない、と勝手に思った。なのでシューティングソースは公開を控える。欲しい方はメールでもくださいということで。

そんなことを考えつつ、「上から降ってくる物をキャッチする」というだけの簡単なゲームを作る放送をしてみた。目標は100行くらい。テトリスが180行くらいだが、あれは手取り足取りの180行だ。あれを卒業した人間がいきなり別のゲームの完成形のソースを見せられた場合、理解可能な行数は(もちろん内容にもよるが)100行近辺が良いところなのではないだろうか?そう思いながら組み始めた。

これも予想外なほど順調に組めてしまい、1枠で終わってしまった。もちろん突っ込み所はあるが、最低限のフローと、ゲーム進行に伴う簡単な難易度上昇を組み込んで108行に収められた。これも思うところあってソース公開を控えるが、欲しい方はメール以下略ということで。

トラックバック - http://d.hatena.ne.jp/isshiki/20131028

2013-10-27

[][]「Sunabaにはelse-ifがない」

Zinniaさんの日記を見て思ったことなど。

http://risky-safety.org/zinnia/d/2013/10/#20131027-t0-h2-p2

ボクは概ねこの言語に対して不満はないし、大体受け入れてるんですが、この「else-if」が無いというか「if-else」すらないのが組んでいて引っかかることがあります。

理由は恐らく「無くても同等のものが組める」だと思いますし、確かにそうなんですが。

今のSunabaで組むとしたら、以下のような感じですか。

回数 → 0
回数 < 10 なかぎり
   回数 < 5 なら
      ほげほげ
   回数 ≧ 5 なら
      ふがふが
   回数 → 回数 + 1

こんな感じですが、それを、

回数 → 0
回数 < 10 なかぎり
   回数 < 5 なら
      ほげほげ
   でなければ
      ふがふが
   回数 → 回数 + 1

と書いたところで、確かに行数の節約にはなりません。特別解りやすくもなった感じもしないですし。

んで、「else-if」を実装したとすると、

回数 → 0
回数 < 10 なかぎり
   回数 < 5 なら
      ほげほげ
   でなければ 回数 = 9 なら
      ふがふが
   回数 → 回数 + 1

こんな感じですかねー。これも特別解りやすいかと言われると、確かになーという。

というわけで、「コレがあったらいいのに」と思うことを実際に妄想して記述してみると意外とそうでもないなー、と思った。と言う話でした。

トラックバック - http://d.hatena.ne.jp/isshiki/20131027

2013-10-25

[][] 「Sunabaで作ろうゲームプログラミング

「某場所」で生放送作ってみたゲームドットイートゲーム。その名も「パクパクマン」。

全19枠で合計9時間なんだけど、雑談とか色々してたので、実質の作業時間は恐らく7時間程度くらいだと思われる。

一応ゲームの流れは一通り出来てる。モンスターも同時に4体出てくる。簡単なプレイヤー追跡ルーチンも入ってる。それなりに真剣に遊ばないと割りとやられるかな?

相変わらず細かいことを気にし始めるときりが無いんだけど、ステージクリア型で敵が出てくるゲームをSunabaで組んだらこうなるかしら?という程度のサンプルにでもなれば。

以下全ソース。正直整理とかしきれてないのでちょっと雑&長い。全350行。

#
#  「Sunaba」で作ろう。ゲームプログラミング。
#
#     お題「Dot eat game」
#

メモリ[55001] → 1

背景色 → 102090

自機色 → 808020
自機縦 → 4500
自機横 → 5000
自機移動方向 → -1
自機移動速度 → 75

敵色 → 505050
敵移動速度 → 50

敵縦 → 0
敵横 → 0
敵移動方向 → 01

餌色 → 707010

メモリ[0] → 177  # 乱数初期値
乱数種 → 1

待機時間 → 0     # ゲームを始めるまでの待機時間
ゲーム中? → 0   # ゲームをプレイしている状態

壁を描く(背景色)
敵を配置()

1 なかぎり
   ゲーム中? = 0 なら
      メモリ[50009] なら
         # ゲームの初期化
         迷路を設定(乱数種、 背景色、 餌色)
         自機縦 → 4500
         自機横 → 5000
         自機移動方向 → -1
         敵を配置()
         待機時間 → 60
         ゲーム中? → 1
   ゲーム中? なら
      待機時間 なら
         待機時間 → 待機時間 − 1
      待機時間 = 0 なら
         # 自機移動
         自機縦移動 → 0
         自機横移動 → 0
         自機移動方向 → 自機移動する?(自機縦、 自機横、 自機移動方向)
         自機移動方向 ≧ 0 なら
            自機移動方向 ≦ 1 なら
               自機縦移動 → ((2 × 自機移動方向) − 1) × 自機移動速度
            自機移動方向 ≧ 2 なら
               自機横移動 → ((2 × (自機移動方向 − 2)) − 1) × 自機移動速度
         自機縦 → 自機縦 + 自機縦移動
         自機横 → 自機横 + 自機横移動
         壁に当たった?(自機縦 ÷ 100、 自機横 ÷ 100、 自機移動方向) なら
            自機縦 → 自機縦 − 自機縦移動
            自機横 → 自機横 − 自機横移動
         # 敵移動
         敵番号 → 0
         敵番号 < 4 なかぎり
            敵縦移動 → 0
            敵横移動 → 0
            敵縦 → メモリ[1000 + (敵番号 × 3) + 0]
            敵横 → メモリ[1000 + (敵番号 × 3) + 1]
            敵移動方向 → メモリ[1000 + (敵番号 × 3) + 2]
            敵移動方向 ≠ -1 なら
               敵移動方向 ≦ 1 なら
                  敵縦移動 → ((2 × 敵移動方向) − 1) × 敵移動速度
               敵移動方向 ≧ 2 なら
                  敵横移動 → ((2 × (敵移動方向 − 2)) − 1) × 敵移動速度
            敵縦 → 敵縦 + 敵縦移動
            敵横 → 敵横 + 敵横移動
            壁に当たった?(敵縦 ÷ 100、 敵横 ÷ 100、 敵移動方向) なら
               敵縦 → 敵縦 − 敵縦移動
               敵横 → 敵横 − 敵横移動
            敵移動方向 → 敵曲がる?(乱数種、 敵番号、 敵縦、 敵横、 敵移動方向、 自機縦、 自機横)
            メモリ[1000 + (敵番号 × 3) + 0] → 敵縦
            メモリ[1000 + (敵番号 × 3) + 1] → 敵横
            メモリ[1000 + (敵番号 × 3) + 2] → 敵移動方向
            敵番号 → 敵番号 + 1
         # ステージクリア判定
         餌全部食べた?() なら
            迷路を設定(乱数種、 背景色、 餌色)
            自機縦 → 4500
            自機横 → 5000
            自機移動方向 → -1
            敵を配置()
            待機時間 → 60
         # 敵との判定
         敵に当たった?(自機縦、 自機横、 -1) なら
            ゲーム中? → 0
   # ループの終端
   画面を更新(自機縦、 自機横、 自機色、 敵色、 餌色)
   乱数種 → 乱数種 + 1
   乱数種 → 余り(乱数種、 1024)

自機移動する?(縦、 横、 方向) とは
   縦 → 縦 ÷ 100
   横 → 横 ÷ 100
   (余り(縦、 5) = 0) × (余り(横、 5) = 0) なら
      餌を食べる(縦、 横)
      メモリ[50004] なら
         壁に当たった?(縦 − 5、 横、 方向) = 0 なら
            方向 → 0
      メモリ[50005] なら
         壁に当たった?(縦 + 5、 横、 方向) = 0 なら
            方向 → 1
      メモリ[50006] なら
         壁に当たった?(縦、 横 − 5、 方向) = 0 なら
            方向 → 2
      メモリ[50007] なら
         壁に当たった?(縦、 横 + 5、 方向) = 0 なら
            方向 → 3
   出力 → 方向

敵を配置() とは
   メモリ[1000 + (0 × 3) + 0] → 500   # 縦座標
   メモリ[1000 + (0 × 3) + 1] → 500   # 横座標
   メモリ[1000 + (0 × 3) + 2] → 1     # 方向
   メモリ[1000 + (1 × 3) + 0] → 8500  # 縦座標
   メモリ[1000 + (1 × 3) + 1] → 8500  # 横座標
   メモリ[1000 + (1 × 3) + 2] → 0     # 方向
   メモリ[1000 + (2 × 3) + 0] → 500   # 縦座標
   メモリ[1000 + (2 × 3) + 1] → 8500  # 横座標
   メモリ[1000 + (2 × 3) + 2] → 2     # 方向
   メモリ[1000 + (3 × 3) + 0] → 8500  # 縦座標
   メモリ[1000 + (3 × 3) + 1] → 500   # 横座標
   メモリ[1000 + (3 × 3) + 2] → 3     # 方向

敵に当たった?(自機縦、 自機横、 番号) とは
   当たった? → 0
   敵番号 → 0
   自機縦 → 自機縦 ÷ 100
   自機横 → 自機横 ÷ 100
   (敵番号 < 4) × (敵番号 ≠ 番号) × (当たった? = 0) なかぎり
      敵縦 → メモリ[1000 + (敵番号 × 3) + 0] ÷ 100
      敵横 → メモリ[1000 + (敵番号 × 3) + 1] ÷ 100
      (敵縦 ≦ (自機縦 + 2)) × ((敵縦 + 4) ≧ (自機縦 + 2)) なら
         (敵横 ≦ (自機横 + 2)) × ((敵横 + 4) ≧ (自機横 + 2)) なら
            当たった? → 1
      敵番号 → 敵番号 + 1
   出力 → 当たった?

敵曲がる?(種、 番号、 敵縦、 敵横、 敵方向、 自機縦、 自機横) とは
   敵縦 → 敵縦 ÷ 100
   敵横 → 敵横 ÷ 100
   自機縦 → 自機縦 ÷ 100
   自機横 → 自機横 ÷ 100
   縦方向 → 0
   横方向 → 0
   (余り(敵縦、 5) = 0) × (余り(敵横、 5) = 0) なら
      方向転換 → 0
      余り(乱数(種)、 100) ≧ 50 なら
         方向 → 自機追跡(敵縦、 敵横、 敵方向、 自機横、 自機縦)
         敵方向 ≠ 方向 なら
            敵方向 → 方向
            方向転換 → 1
      # 正面が壁だったら
      方向転換 = 0 なら
         縦方向 → 0
         横方向 → 0
         敵方向 = 0 なら
            縦方向 → -5
         敵方向 = 1 なら
            縦方向 → 5
         敵方向 = 2 なら
            横方向 → -5
         敵方向 = 3 なら
            横方向 → 5
         壁に当たった?(敵縦 + 縦方向、 敵横 + 横方向、 敵方向) なら
            (方向転換 = 0) × (敵方向 = 0) なら
               敵方向 → 2
               方向転換 → 1
            (方向転換 = 0) × (敵方向 = 1) なら
               敵方向 → 3
               方向転換 → 1
            (方向転換 = 0) × (敵方向 = 2) なら
               敵方向 → 1
               方向転換 → 1
            (方向転換 = 0) × (敵方向 = 3) なら
               敵方向 → 0
               方向転換 → 1
      敵に当たった?(敵縦 × 100、 敵横 × 100、 番号) なら
         敵方向 ≦ 1 なら
            敵方向 → 1 - 敵方向
         敵方向 ≧ 2 なら
            敵方向 → 2 + (敵方向 = 2)
   出力 → 敵方向

自機追跡(敵縦、 敵横、 敵方向、 自機横、 自機縦) とは
   縦方向 → 0
   横方向 → 0
   方向 → 0
   # 自機と縦軸が合った?
   (敵縦 − 自機縦) = 0 なら
      (敵横 < 自機横) なら
         方向 → 3
      (敵横 > 自機横) なら
         方向 → 2
      方向 = 2 なら
         横方向 → -5
      方向 = 3 なら
         横方向 → 5
      壁に当たった?(敵縦 + 縦方向、 敵横 + 横方向、 方向) = 0 なら
         敵方向 → 方向
   # 自機と横軸が合った?
   (敵横 − 自機横) = 0 なら
      (敵縦 < 自機縦) なら
         方向 → 1
      (敵縦 > 自機縦) なら
         方向 → 0
      方向 = 0 なら
         縦方向 → -5
      方向 = 1 なら
         縦方向 → 5
      壁に当たった?(敵縦 + 縦方向、 敵横 + 横方向、 方向) = 0 なら
         敵方向 → 方向
   出力 → 敵方向

自機を描く(自機縦、 自機横、 自機色) とは
   キャラを描く(自機縦、 自機横、 自機色)

敵を描く(色) とは
   番号 → 0
   番号 < 4 なかぎり
      縦 → メモリ[1000 + (番号 × 3) + 0]
      横 → メモリ[1000 + (番号 × 3) + 1]
      キャラを描く(縦、 横、 色)
      番号 → 番号 + 1

キャラを描く(縦、 横、 色) とは
   縦 → 縦 ÷ 100
   横 → 横 ÷ 100
   四角を描く(縦 + 0、 横 + 055、 色)
   四角を描く(縦 + 0、 横 + 0110)
   四角を描く(縦 + 4、 横 + 0110)
   四角を描く(縦 + 0、 横 + 4110)
   四角を描く(縦 + 4、 横 + 4110)

壁に当たった?(縦、 横、 方向) とは
   当たった? → 0
   方向 ≧ 0 なら
      縦 → (縦 + (4 × (方向 = 1))) ÷ 5
      横 → (横 + (4 × (方向 = 3))) ÷ 5
      メモリ[100 + (20 × 縦) + 横] = 1 なら
         当たった? → 1
   出力 → 当たった?

迷路内を消す(縦、 横) とは
   壁を設定(縦、 横、 00)

迷路内を設定(縦、 横、 色) とは
   壁を設定(縦、 横、 色、 1)

壁を設定(縦、 横、 色、 壁) とは
   四角を描く((5 × 縦) + 1、 (5 × 横) + 133、 色 × 壁)
   メモリ[100 + (20 × 縦) +  横] → 壁

餌を食べる(縦、 横) とは
   縦 → 縦 ÷ 5
   横 → 横 ÷ 5
   メモリ[100 + (20 × 縦) + 横] → 0

餌全部食べた?() とは
   食べきった? → 1
   縦回数 → 1
   縦回数 < 18 なかぎり
      横回数 → 1
      横回数 < 18 なかぎり
         メモリ[100 + (20 × 縦回数) + 横回数] = 2 なら
            食べきった? → 0
         横回数 → 横回数 + 1
      縦回数 → 縦回数 + 1
   出力 → 食べきった?

餌を描く(色) とは
   縦回数 → 1
   縦回数 < 18 なかぎり
      横回数 → 1
      横回数 < 18 なかぎり
         メモリ[100 + (20 × 縦回数) + 横回数] = 2 なら
            四角を描く((5 × 縦回数) + 2、 横回数 × 5211、 色)
         横回数 → 横回数 + 1
      縦回数 → 縦回数 + 1

壁を描く(背景色) とは
   回数 → 0
   回数 < 19 なかぎり
      壁を設定(回数、    0、 背景色、 1)
      壁を設定(回数、   18、 背景色、 1)
      壁を設定(   0、 回数、 背景色、 1)
      壁を設定(  18、 回数、 背景色、 1)
      回数 → 回数 + 1

壁にする?(縦、 横、 種) とは
   壁? → 1
   余り(縦、 2) なら
      壁? → 0
   (横 = 1) + (横 = 10) + (横 = 17) なら
      壁? → 0
   (余り(乱数(種)、 100) < 25) なら
      壁? → 0
   出力 → 壁?

迷路を設定(種、 背景色、 餌色) とは
   縦回数 → 1
   縦回数 < 18 なかぎり
      横回数 → 1
      横回数 < 18 なかぎり
         迷路内を消す(縦回数、 横回数)
         壁? → 壁にする?(縦回数、 横回数、 種)
         壁? なら
            迷路内を設定(縦回数、 横回数、 背景色)
         壁? = 0 なら
            メモリ[100 + (20 × 縦回数) +  横回数] → 2
         横回数 → 横回数 + 1
      縦回数 → 縦回数 + 1
   餌を描く(餌色)

画面を更新(自機縦、 自機横、 自機色、 敵色、 餌色) とは
   餌を描く(餌色)
   敵を描く(敵色)
   自機を描く(自機縦、 自機横、 自機色)
   メモリ[55000] → 0   # 画面に反映
   餌を描く(0)
   敵を描く(0)
   自機を描く(自機縦、 自機横、 0)

四角を描く(縦、 横、 高さ、 幅、 色) とは
   縦回数 → 縦
   縦回数 < (縦 + 高さ) なかぎり
      横回数 → 横
      横回数 < (横 + 幅) なかぎり
         メモリ[60000 + (100 × 縦回数) + 横回数] → 色
         横回数 → 横回数 + 1
      縦回数 → 縦回数 + 1

余り(値、 除算値) とは
   出力 → 値 − ((値 ÷ 除算値) × 除算値)

乱数(種) とは
   メモリ[0] → メモリ[0] + 種 + 153
   メモリ[0] → 余り(メモリ[0]、 1024)
   出力 → メモリ[0]

[]反省点や感想など

一応生放送枠でも、折を見てプログラムを見やすくする的なことはやっていたんだけど、そればっかだと流石にライブ的には色々アレなので、最低限で済ませた感が否めないですね。本当は本に習って数枠ぐらいやればよかったのかもしれません。

敵の思考ルーチンは正直もっとやりたかったです。ただ、この辺はやりすぎるとついてこれない面もあるので、ほどほどにしました。実はゲーム作る上である意味一番楽しい部分ではあるのですが、今回はそこがターゲットではないつもりでしたし...。

あと、ボクが掲載しているというか組んでいるSunabaのプログラムは、全て「本で紹介されている」機能で限定して組んでいるつもりです。他に便利な機能があることは知っていますが(例えば定数とか)、あえて紹介されて無い機能は使っていません。何故そうするかというのは明白で、「本を読み終えた人と同じ土俵でプログラムする」ことを旨としているからです。

でも、「そういう制約があった」としても、「この程度のゲームは作れますよ?」ということを示す事が、この言語(Sunaba)と「プログラムはこうして作られる」の普及の一助になるんじゃないのかなあ?と思ってやっている次第です。

迷惑にならない限りは、こういう地味な活動をしばらく続けていこうと思います。実はこの言語(=環境)でゲーム作るのが楽しかったりしてますし。こんなに制約がある環境で作るのも久しぶりですし。

トラックバック - http://d.hatena.ne.jp/isshiki/20131025

2013-10-23

[]「ネタばれになるから動画や生放送禁止」という規制をするメーカーの心理がわからない、という話。

よくタイトルのような話が一部のゲームでなされるのを見かけるけど、そういう告知をするメーカーというかなんというか何らかの勢力か知らないけど、まあ理由というか根拠が解らない。

冷静に考えてみて、そもそもが「買おうと思ってるゲーム」のゲームプレイ動画を観る動機として「xxxプレイ動画」と題された動画を観るのに、「あー買って楽しみたいから先が知りたくない」と思ってる人間て観ると思う?観ないだろ普通

まあ、最初の部分くらいだったら観るかもしれないけど、最初だけだよな?それ以上は「あーこれ以上は買って楽しもう!」と思ってそれ以上観ないよ。

逆にそういう動画を観て「あーこのゲームこういうのなんだー」と思って観続ける人間はこのゲーム買わないし。中には観続けたうえで買う人間いるかもしれないが、まあそれはそれで良い話だよな。

なので、ゲーム会社各位は積極的に自社の新製品動画配信を推奨するべきだと。というか「ユーザー勝手に宣伝してくれてる」状況を何故自ら規制するの?そんなに自信無いの?自信無いって事は「今回のゲーム出来に自信ないから騙されて買って欲しいな...」とかふざけた事こと考えてるんじゃないんだろうな?

もしそうなら即刻この世界から立ち去っていただきたい。というか店畳め。潰れろ。

ユーザー舐めるのもいい加減にしろよ。

トラックバック - http://d.hatena.ne.jp/isshiki/20131023

2013-10-22

[] プログラミングの動機 〜 そこから思ったことな

ちょっと前の記事ですが、コレと合わせて最近プログラムはこうして作られる」を読んでて思ったことなどもあったので、徒然書いてみる。

元記事は id:Nunocky さんのこれ。 http://d.hatena.ne.jp/Nunocky/20130726/p1

元記事の元記事(ITproの「記者の眼」)に書いてあった内容への反応は、Nunocky さんとほぼ同じ。ただ動機はちょっと違う。

前にも書いた記憶があるし、ボクと交流のある人には話したことがあるのでくだくだしくは書かない。手短に書くと「企画になりたいからゲーム作りを勉強するためにプログラムを始めた」という事だ。解りにくいかもしれないが。

当時の話もまあお決まりのコース(BASICベーマガ)になるので、コレもくだくだしくは書かない。

その後どうなったかというか、どういう心境の変化か運命なのか、なぜかプログラマをやっている。でも正直、最初に入ったゲーム会社でプログラマで受かるとは思わなかった(もちろん第一志望は企画だった。プログラマは駄目元で第二志望)。提出したゲームだってBASICで作ったもので、ASCIIキャラで画面が構成されたRPGだったし。

その後必死こいて8086のアセンブラ覚えてPC-98で作ったり、その後Windows時代になってC+DirectX時代になって、それらも何とかこなして、その後も家庭用機などで色々作って、気がついたら20年経ってた。

勉強を始めた頃からプログラムは好きで、今でも好きで家でも趣味ゲーム作っているくらいだけど、自分プログラマとしてどれほどの者かというと大したものではないと本気で思っている。そんな気持ちでプロやられても困ると思われる方もいるだろうが、周囲に凄い人ばかりいてなお「ボクは(結構)凄い」と思えるほど世間知らずでも馬鹿でもないつもりだ。この辺の話は別に書きたいことがあるのだが書いても、恐らく読んでも決して愉快な話にはならないような気がするので書くのを躊躇している。実際途中まで書いているわけだが。

もう齢40を超えてこの先何年プログラマとして仕事ができるのか?というのと、正直知識の器の許容量が心許ないと(勝手に)思っているので、かなりの焦りは感じている。あと、この先ボクは仕事でどういうゲームを作っていけるんだろう、という漠然とした不安も。

結論は無い。

トラックバック - http://d.hatena.ne.jp/isshiki/20131022

2013-10-16

[][]今日のSunabaでゲームプログラミング

Game&Watchの「HELMET」簡易版を作ってみた。もちろん完成してない。テスト動画を撮りながら作ったんだが、その動画趣旨は、

  • プログラムの流れを考えている様と喋りと共にお見せする
  • 目標を設けてそれに向かって作る

の二点。

今回の目標は、

  • ヘルメット君(勝手に命名)を出して左右に動く
  • 物が落ちてくる
  • 右端まで言ったらクリアして再度左端からスタート
  • 落下物に当たったらなんらかしらの処理をする(この時点ではゲームオーバーかどうか決めてなかった)

以上の4点。

とりあえず、ソースをはっつけておく。テキストファイルコピペして保存して、SunabaにD&Dすれば動く。

開始直後は何も動かないが、リターンキーを押すと始まる。落下物に当たってゲームオーバーになったら動けなくなるが、再度リターンキー押せば開始する。

メモリ[55001] → 1

背景色 → 707070

ヘルメット縦 → 9
ヘルメット横 → 1

落下物存在? → 0
落下物縦 → 0
落下物横 → 0
落下物時間 → 0

ゲーム終わった? → 2
キー押した? → 0
到達した? → 0
待ち時間 → 0

メモリ[0] → 177  # 初期乱数乱数種 → 1

背景を書く(背景色)

1 なかぎり
   (ゲーム終わった? = 2) × メモリ[50009] なら
      ヘルメット縦 → 9
      ヘルメット横 → 1
      落下物存在? → 0
      落下物縦 → 0
      落下物横 → 0
      落下物時間 → 0
      ゲーム終わった? → 0
   (ゲーム終わった? = 0) × (到達した? = 0) なら
      # ヘルメット動く
      ヘルメット移動 → 0
      (メモリ[50006] + メモリ[50007]) = 0 なら
         キー押した? → 0
      メモリ[50006] × (キー押した? = 0) なら
         ヘルメット移動 → -2
         キー押した? → 1
         乱数種 → 乱数種 + 7
      メモリ[50007] × (キー押した? = 0) なら
         ヘルメット移動 → 2
         キー押した? → 1
         乱数種 → 乱数種 + 7
      ヘルメット横 → ヘルメット横 + ヘルメット移動
      ヘルメット横 < 1 なら
         ヘルメット横 → ヘルメット横 − ヘルメット移動
      # ヘルメット到達した?
      ヘルメット横 ≧ 11 なら
         到達した? → 1
      # 落下物出す?
      落下物存在? = 0 なら
         落下物存在? → 1
         落下物縦 → 1
         落下物横 → (余り(乱数(乱数種)、 5) × 2) + 1
      # 落下物処理
      落下物存在? = 1 なら
         落下物時間 = 0 なら
            落下物時間 → 30
         落下物時間 > 0 なら
            (落下物縦 = 9) × (ヘルメット横 = 落下物横) なら
               ゲーム終わった? → 1
            落下物時間 → 落下物時間 − 1
            落下物時間 = 0 なら
               落下物縦 → 落下物縦 + 2
               落下物縦 ≧ 11 なら
                  落下物存在? → 0
   # ヘルメット演出
   ヘルメット色 → 0
   (ゲーム終わった? = 1) + (到達した? = 1) なら
      待ち時間 = 0 なら
         待ち時間 → 2 × 60
      待ち時間 > 0 なら
         余り(待ち時間、 30) ≧ 15 なら
            ヘルメット色 → 背景色
         待ち時間 → 待ち時間 − 1
         待ち時間 = 0 なら
            到達した? = 1 なら
               # ヘルメット戻す
               ヘルメット横 → 1
               到達した? → 0
            ゲーム終わった? = 1 なら
               ゲーム終わった? → 2
   #
   画面を更新(ヘルメット縦、 ヘルメット横、 ヘルメット色、 落下物存在?、 落下物縦、 落下物横、 背景色)

画面を更新(ヘルメット縦、 ヘルメット横、 ヘルメット色、 落下物存在?、 落下物縦、 落下物横、 背景色) とは
   落下物を描く(落下物存在?、落下物縦、 落下物横、 0)
   四角を描く(ヘルメット縦 × 8、 ヘルメット横 × 8、 12、 8、 ヘルメット色)
   メモリ[55000] → 1
   落下物を描く(落下物存在?、落下物縦、 落下物横、 背景色)
   四角を描く(ヘルメット縦 × 8、 ヘルメット横 × 8、 12、 8、 背景色)

落下物を描く(存在?、 縦、 横、 色) とは
   存在? = 1 なら
      四角を描く(縦 × 8、 横 × 8、 8、 8、 色)

背景を書く(色) とは
   四角を描く( 0、  0、 100、 100、 色)          # 背景
   四角を描く(86、  0、   2、 100、 604010)      # 地面
   # 家を描く
   四角を描く(52、 94、   4、   6、 0)
   四角を描く(56、 88、   4、  12、 0)
   四角を描く(60、 82、   8、  18、 0)
   四角を描く(68、 84、  18、   2、 0)

四角を描く(縦、 横、 高さ、 幅、 色) とは
   縦回数 → 縦
   縦回数 < (縦 + 高さ) なかぎり
      横回数 → 横
      横回数 < (横 + 幅) なかぎり
         メモリ[60000 + (100 × 縦回数) + 横回数] → 色
         横回数 → 横回数 + 1
      縦回数 → 縦回数 + 1

余り(値、 除数) とは
   出力 → 値 − ((値 ÷ 除数) × 除数)

乱数(種) とは
   メモリ[0] → メモリ[0] + 種 + 115
   メモリ[0] → 余り(メモリ[0]、1024)
   出力 → メモリ[0]

今回は、ゲームの基本的なルール(落下物に当たらないように左端から右端に行く)が実装できた。細かいところで実装できてない点はある。例えば「落下物が複数出てこない」とか「ゴールのドアは開きっぱなし(そもそもドアが無い)」とか「スコアに関するものが何も無い」とか。挙げればきりがないが。

それでも、上記の通りゲーム開始とゲームオーバーリスタートは実装した。画面に何も出ないので今どういう状態か解らないとは思うが。まあ、「操作できなければゲームオーバー」くらいなら解ってくれるよな。<色々酷い。

今回は目標に掲げてないこともできたのでまあ及第点か。正直な話もう少しがんばれたんだが。

あと、今回は何も考えずに愚直に組んだ。なのでメインループが大変なことになっている。そのままにして出したのもまあわざとだ。今後コレをネタに「綺麗にする」という趣旨テスト動画とか撮ろうかと思っている。実際にやるかどうかはわからん。というかそろそろ本番公開用の動画を撮ろうかとも思っているんだがなかなか...。

ちなみにコレを組み上げた時間はおよそ1時間40分。

実兄実兄 2013/10/17 23:21 やってみたよ。確かに言うとおり。
でも、こういう言語もあるんだね。それが吃驚。

isshikiisshiki 2013/10/17 23:43 元々は、ひらしょー(平山 尚)さんが、九州大学の講義用に作られたものです。もし興味があれば、これを題材にした本の前書きがあるので、読んでみてください。 ftp://ftp2.shuwasystem.co.jp/pub/book/3925/Chapter0.pdf

トラックバック - http://d.hatena.ne.jp/isshiki/20131016

2013-10-14

[]いや、やっぱり名曲だと思う

なにかって「ゼルダの伝説 大地に汽笛」の曲。汽車のシーンだけど。

正直、この曲が無かったら最後の方まで遊んでなかった。それだけは間違いない。

どんな曲か聴きたい方はググってください。某動画サイトで出てくるので。

[]今日のSunabaでプログラミング

日曜に引き続き「ドットイート」ゲームにチャレンジしてみた。結果、2時間弱で日曜の結果にまで到達できた。作ってみた内容の結果を見てる限りは良い感じだったと思うのだが。

Sunabaのプログラムには慣れてきてはいるが、動画を撮って観返してみると、元々の「プログラマとしての資質」に疑問を色々抱かさるを得ない。あと、今日は録画中に積み上がった「ファミコンスーファミソフト」の崩壊事件があったり。その他にも内容に疑問がある結果だった。

まあでも、動画を撮るというか、録画中に話すテンポとかそういうのは上達していると思う。そういうのばっかり上達してもしょうがないとは思うけど。もうちょっと訓練したら、そのうちどこかに動画上げようと思うけど、正直いつになることやら...。

トラックバック - http://d.hatena.ne.jp/isshiki/20131014

2013-10-11

仕事ゲームのメイン画面を仮作成のためにメイン処理に直書きしてて大体実装の目処が立ったので専用のクラス作って分離しようと思うんだが、だるい

↑長々と前置き書いておいて結論は3文字か。しかも解決してない。

Sunabaと仕事で使っている某スクリプト言語の変数への代入がどっちも矢印(Sunabaは"→"/某は"<-")なんだが、方向が逆で脳内が大騒ぎだ。

なんかここ数日我孫子は風が凄い。どうなってるんだ。

解決した。というかさせた。あ、仕事の話です。

大学入試の制度が変わるニュースの関連で、中学生へのインタビューで「社会人になったらチャンスは一度しかない」という言葉が出てきてびっくりした。どういう教育受けてるんだろう?それともお父さんが一度仕事で失敗して酷い目にでも遭ったんだろうか?(そりゃ失敗の度合いにも寄るかもしれないけど)大人の世界がそんなに厳しいものだったら、ボクなんかとっくに脱落して路上生活しているよ。

もし学校教育でそういう刷り込みをしているんだったら、そんなこと教えるんじゃなくてもっと他に教えることあるだろと。彼女女子だった)の思い込みであって欲しい。まあ、「そういう心構え」で社会人になる事を否定するつもりはないけど、そういう心構えで仕事続けてると疲れちゃうよ。精神的にも良くない。

「じゃあ失敗していいのか?」と言われるかも知れない。そりゃ(さっきも書いたが)失敗の度合いにも寄るけど、ボクは良いと思っている。というかどんどん失敗したりミスしたりすればいいと思う。もちろんその後になんらかしらの成長を感じさせて欲しいとも思うけど。

Sunabaで「3時間で一本ゲームを作る」ということにチャレンジしてるんだけど、なかなかうまくいかない。原因は「2時間くらいで集中が途切れる」のと、あと、仕事から帰ってきてやってるから(<コレは完全に言い訳)だと思う。休日の昼間に一回時間取って試してみるべきなのかもしれない。仲間内でたまに勉強会(=某喫茶店の会議室を数時間借りてもくもくプログラムをする会)をやってるので、その機会にでもチャレンジしてみても良いかも。勉強会だと時間も3時間以上あるし。あとはそうだなあ。どこかの箱を借りて「ライブプログラミング」をするとか!(<根本的に色々無理だよ)

lowlow 2013/10/14 14:08 ニコニコとかで配信したら見ますよ!

isshikiisshiki 2013/10/14 20:27 まあ気長に待っていてください...。

トラックバック - http://d.hatena.ne.jp/isshiki/20131011

2013-10-10

何かで読んだ気がするんだけど覚えてない。だけど思い出したので書いておく。

「何か商品を作るときに、作ってる側の専門家ほどあてにならないものはない。何故なら、その商品を買う人の大半は「作る人の専門家」ではないからだ。彼(彼女)らはあくまで「使う人」としての専門家だ。」

トラックバック - http://d.hatena.ne.jp/isshiki/20131010

2013-10-09

[] 「プログラムはこうして作られる」

行きの電車で2周目が終わった。すぐさま3周目に入った。会社についてから2周目までの正誤表を出版社メールした。ずいぶんそっけない書き方をしてしまったなあと送ってから後悔したが、まあ仕方が無い。フレンドリーに書いても仕方が無いわけだし。にしてももうちょっと書き方があったんじゃなかろうか?なんか怒ってる?みたいな文面に、読む人が読んだら捉えられかねない。

それで感想文なんだが...。正直書けない。「まだ書けない」という話ではなくて、「なんか書ける気がしない」という話だ。何を書けばいいんだろう?どう書けばいいんだろう?なんか小学生みたいな問いかけで申し訳ないが、素直にそういう感情だ。

書いて表に出すからには少なくても読む人はいるわけで、その人達に(この本に興味があるかどうかは別にしても)なんらかしらの感想を持ってもらわないと駄目だと思うし(面白そう/つまらんでも良い)、そうできないなら書いたとしても載せるべきではないと思う。

少なくとも、ボクはこの本の「本来の」読者対象ではないので、それがさらに感想文を書かせるのを難しくしていると思う。Zinniaさんのような洞察ができればまた違うと思うんだけど、不幸なことにボクはこの本を読んでいて疑問符が出るようなことは無かった。前に「落第者」と書いたのは、そういった気持ちからでもある。

その代わり、身に染みたというか、突き刺さったというか、思い起こされたというか、そういう感情になったことは何度かあった。「ならそれを書けば良い」と言われると思うが、それをうまく言葉、というか文章化できる自信が無い。コレも前に書いたが、ボクは「何度か読み返さないと、本の内容が頭の中に本当に入ってこない。」のだ。2周したが、まだ上辺だけのような気がしてならない。

あいいや。別に締め切りがある訳ではないし、誰かに約束したわけでもない。粛々と3周目を読み進めよう。

ところで今更ですが(「今夏」じゃないですよ?<それはもういい)、「カニばらない」って聞くけどどういう意味ですかね?<ググれカス

「ググれ」と(ボク自身に)言われたのでググってみたところ、「住み分け」という意味らしい。あと、こういう解説もあった。

カニバリゼーション【cannibalization】

共食い現象。同じ会社の製品類似性が強く互換性がある場合に生ずる製品間の競合関係のこと。

カニバらない:簡単にいえば「共食いしない」という、カニバリゼーションの造語

ふーん。

こういう言葉を発する人間はどうにかなって欲しいですね(<どうなって欲しいんだよ)。

トラックバック - http://d.hatena.ne.jp/isshiki/20131009

2013-10-07

[] 「過程」を見せる話

昨日の話の延長で、「プログラムを組んでいく上で、その思考とか流れ、手順がどう経ていくのかをどう見せるのか?」という話です。

動画で見せるのが良い」と書きましたが、もう一つ重要な点として、「自分が普段取り組んでいないものに取り組む」というのがあると思う。

ボクは確かに仕事ゲーム作っているし、趣味でもプログラムしてはいますが、ゲームにしても(他のゲームプログラマよりは様々なジャンルゲームを手がけている自負はありますが)全ジャンル網羅しているわけではないし、ゲーム意外となるとほとんど手を出していないのが現状。Android自分が使うためのアプリとか何本か作りましたが、まあ、その程度。

で、「動画で思考なども含めて過程を見せる」となると、なるべく「作ったことのないジャンル」が良いんだけど、だとしても「全く手がけたことのない」ジャンルに手を出すのもいけない。そもそも「これどう作ればいいんだ?」というレベルだと、思考ばっかりでまったく先に進まない動画になる。そんなの見せられても視聴者は困るというかブラウザ(かタブ)をそっと閉じるわけで。

となると、「作るのは想像できるけど作ったことなジャンル」とか、「以前別の言語で作ったことあるけどこの言語ではない」の2択になるのかな?と思っている。今回動画にするとしたら別にどっちでも良いんだけど。

後者最初の話(「自分が普段取り組んでいないものに取り組む」)と矛盾するけど、やっぱりこっちの方がいいのかなあ?と思う。3年位前に、当時の(Sunabaの)バージョンシューティング作ったことがあったけど、あの時は「この言語でこれをどう組めばいいのか?」というのでかなりの時間が掛かった。あと、あの時は「過程を見せる」とか「短くする」とかそういうことを全く考えていなかったので、今のSunabaと取り組み方で組むとまた違ったアプローチができるかもしれない。

ただ、正直シューティングは作り慣れてるけど、やっぱりある程度規模が大きくなってしまうので、3時間で作れるのか?という疑問はある。あと素材的(リソースという意味ではなくプログラミング的なという意味で)にも新しい要素が多いと思うので、動画密度は濃くなるだろうけどターゲット層に対して適切なのか?という点でも疑問だ。

一方テトリスは、結局完成させてないけど、アレを再度組めといわれたら普通に組めるし、昨日掲載したまでのソースだったら淀みなく組めると思う。でも、それでは「思考の過程」を全く説明しないまま進んでしまうので、動画としての意味がない。アレの続きを組めば良いんだろうけど、途中からのものを見せられても、ということになるよなあ。

といったような事をウダウダ考えてて、「これなら良いのでは?」というジャンルを思いついた。ジャンルについてはここで明言しないけど(そもそも動画撮れるかどうかという根本的な問題は解決してないし)、大体以下のような基準で考えた。

  • 作ったことは確かにあるけど仕事で作ったことはない。
  • しかも趣味でも一回くらいしか作ったことがない(=未経験ではない)。
  • そのジャンルを作ることに対して、どう作ればいいか想像はできるけど、具体的なビジョンとかコード(=プログラム)はすぐには出てこない。
  • なので、作る過程で適度に引っかかることが期待できる(=思考する時間ができる?)。
  • あと、ゲームとして成り立っていて、作る必要がある要素が極力少ない。

ようは何を期待しているのか?というか狙っているのか?というと、「ボクが素で手が適度に止まる程度のゲームプログラム」な訳です。やっぱりそういう「素」の部分がないと臨場感というかライブ感が出ないと思うし、見せたいのは「完成するまでのプログラミング動画」ではなくて「この形になるまでどういう過程を経てきたのか?」という動画だ。そのためにはボクが「本気で困っている」様を見せないといけないと思う。そして、それを「どう解決していくのか?」というのが撮れればいいのかな?正直、書けば書くほど新山さんのPythonゲーム作成動画の話になってしまうんですが。少しでも、あのライブ感が出せればいいかなあ。

話は変わるけど、最近Sunabaの日本語モード(と勝手に呼んでいる)でプログラムするのが楽しい。昨日見せたようなコードなんだけど、普段はいかにもなプログラムしか組んでないので、ああいう文法というか全角日本語での記述というのが新鮮で良い。普段使わない頭とか使ってる感じがするし。

個人的に気に入っている記述は、

移動できる?(縦) なら
   移動する(縦)

移動できる?(縦) とは
  出力 → {移動できるか判定}

移動する(縦) とは
  {縦方向に移動する}

のような、「移動できる?()」と、メソッド名に「?」が使える所。メソッド役割が明確になるし、日本語的にも明確なので、この記法ができるというのは素晴らしいと思う。

トラックバック - http://d.hatena.ne.jp/isshiki/20131007

2013-10-05

[] 「プログラムはこうして作られる」 〜 「あのゲーム」を作ってみた

Zinnia さんから言及されてしまったので、ソースを出さないわけにも行くまいと思いまして。

現状は「1ブロックが落ちてきて、積もって、揃ったら消えて、上のブロックが下に落ちてきて、次のブロックが出る」ところまで。あと4つブロックが出せたら「あのゲーム」としては完成かな?現状デバッグ込みで111行。妥当かどうかはわからん

コレを書いた理由はまあ色々あるんですが、主に「本の内容がどこまで頭に入ってるか」という確認と、あと、実はテトリス作ったこと無かったので取り組んでみるのも良いかな?と思ったもので。

ソースは下↓に張っておきます。

メモリ[55001] → 1

壁色 → 999999
ブロック色 → 998844
消す色 → 0
積もった色 → 442211
縦 → 1
横 → 5
落下時間 → 0
移動時間 → 0
移動方向 → 0

デバッグ(積もった色、 消す色)
壁を描く(壁色)
床を描く(壁色)

1 なかぎり
   (移動時間 = 0) × (メモリ[50006] + メモリ[50007]) なら
      移動時間 → 6
      移動方向 → (-1 × メモリ[50006]) + メモリ[50007]
   移動方向 なら
      移動できる?(縦、 横 + 移動方向) なら
         横 → 横 + 移動方向
      移動方向 → 0
   移動時間 なら
      移動時間 → 移動時間 − 1
   落下時間 → 落下時間 + 1
   落下時間10 なら
      当たった? → 移動できる?(縦 + 1、 横) = 0
      当たった? なら
         積もる(縦、 横、積もった色、 消す色)
         縦 → 0
         横 → 5
      縦 → 縦 + 1
      落下時間 → 0
   ブロック更新(縦、 横、 ブロック色、 消す色)

壁を描く(色) とは
   回数 → 0
   回数 < 20 なかぎり
      四角を描く(回数、 0、 色)
      四角を描く(回数、 11、 色)
      メモリ[100 + (回数 × 12) + 0] → 1
      メモリ[100 + (回数 × 12) + 11] → 1
      回数 → 回数 + 1

床を描く(色) とは
   回数 → 1
   回数 < 11 なかぎり
      四角を描く(19、 回数、 色)
      四角を描く(19、 回数、 色)
      メモリ[100 + (19 × 12) + 回数] → 1
      回数 → 回数 + 1

移動できる?(縦、 横) とは
   当たり → メモリ[100 + (縦 × 12) + 横]
   出力 → 当たり = 0

積もる(縦、 横、 積もった色、 消す色) とは
   メモリ[100 + (縦 × 12) + 横] → 1
   四角を描く(縦、 横、 積もった色)
   ブロックを消す(縦、 積もった色、 消す色)

ブロックを消す(縦、 積もった色、 消す色) とは
   回数 → 1
   消える? → 1
   回数 < 11 なかぎり
      消える? → 消える? × メモリ[100 + (縦 × 12) + 回数]
      回数 → 回数 + 1
   消える? なら
      回数1 → 縦
      回数1 なかぎり
         回数2 → 1
         回数2 < 11 なかぎり
            位置下 → 100 + (回数1 × 12) + 回数2
            位置上 → 位置下 − 12
            メモリ[位置下] → メモリ[位置上]
            メモリ[位置上] → 0
            四角を描く(回数1、 回数2、 消す色)
            メモリ[位置下] なら
               四角を描く(回数1、 回数2、 積もった色)
            四角を描く(回数1 − 1、 回数2、 消す色)
            回数2 → 回数2 + 1
         回数1 → 回数1 − 1

ブロック更新(縦、 横、 ブロック色、 消す色) とは
   四角を描く(縦、 横、 ブロック色)
   メモリ[55000] → 1
   四角を描く(縦、 横、 消す色)

四角を描く(縦、 横、 色) とは
   縦 → 縦 × 5
   横 → 横 × 5
   回数1 → 縦
   回数1 < (縦 + 4) なかぎり
      回数2 → 横
      回数2 < (横 + 4) なかぎり
         メモリ[60000 + (100 × 回数1) + 回数2] → 色
         回数2 → 回数2 + 1
      回数1 → 回数1 + 1

デバッグ(積もった色、 消す色) とは
   回数 → 1
   回数 < 11 なかぎり
      回数 ≠ 5 なら
         積もる(18、 回数、積もった色、 消す色)
      回数 → 回数 + 1
   積もる(17、 1、積もった色、 消す色)
   積もる(1710、積もった色、 消す色)
   積もる(16、 10、積もった色、 消す色)

んでまあ、ソース貼り付けておいてなんだけど、こういうのは結論(この場合は上のソース)だけ示しても何も意味が無くて、やっぱり過程重要だと思う。

それでも、きちんとした過程を見せながら解説するとなると、既にそういう本があるわけで。そうじゃない目的というか意義があるとすると、「実際他人はどういう過程を経て上のようなプログラムを組んでいるのか?」というのを直に見せること、そうですね、「生放送」とか「動画」で見せるのがいいですね。以前新山さんがPythonでやってたような。

新山さんはYoutubeだったけど、あれは10分で1動画だったっけ?ニコ動だと30分だから、例えば「3時間」を目標にしてどこまでできるか、というのを動画に撮ってみても良いかもしれませんね。動画6本分か。普段から独り言ぶつくさ言いながらプログラムは組んでないから、無音時間が多くならないか心配だけど。

ただ、動画撮ったことないし、そもそも普段使いのノートで視聴に耐えられる画質が出せるのかどうか...。

まあでも、試してみる価値はありそうだな。検討してみよう。需要全く無視だけど。

あと、Zinniaさんは「いっしきさんはさすがだなあ」と言ってくれてはいるが、Zinniaさんが疑問に思った、例えば「計算優先順位はなくて左から順に計算される」仕様については、本を読みながら「あーそういう仕様なんですねー解りましたー」と素直に受け入れてしまうタイプの人間なので、ひらしょーさん的には「落第者」ということになると思います。

トラックバック - http://d.hatena.ne.jp/isshiki/20131005

2013-10-03

本来はもうちょっと後にココの執筆を再開する予定だったのだが、色々あって本日書くことにする。

[]「プログラムはこうして作られる」〜2周目途中まで読んだ感想

最初に書いておきますが、以下は感想文ではないです。タイトルに付けてはいるけど。でもまあ、コレを読んだ上でのボクの「読書に対する姿勢」を綴ってる部分もあるので、そういう部分をもって「感想文」とさせていただく。

それと、この本についての詳細は「プログラムはこうして作られる」「平山 尚」あたりでググってください。

ひらしょーさんが「批判が欲しい。それも心無い奴。」とか無茶振りしている。ボクにそういう心無い精神が宿ってればいいんだけど、生憎そこまで他人に厳しく自分に甘い精神は持ち合わせてないつもりだ。そうやって投げた球が倍返し(=流行に乗ってみた<遅いよ)で食らうのは目に見えてるし。

それはともかく、敢えて文句つけるとしたら何だろう?実は本読む前にZinnniaさんのファーストインプレッション的なレビューを読んでいたので、そこで登場する事に関しては織り込み済みで読んでしまったんだよなあ。それ以外となるとねえなかなか。もはや「ケチをつける」レベルだよなあ。下手にケチつけると周囲から猛攻撃受けそうだし。「的確だけど心無い批判」ってどうすればいいんだ?難しいところだ。そしてそんなことを望んでるのか?という話でもある。

話は変わるけど、ボクは「コレだ」と思った本は何度も読み返す人間で、何故そうするかというと、大体「一回読んでみた」だけでは恐らく書いてあることの一割も理解というか把握してないと自分で思ってるからなんだけど。そうじゃない本は一度読んで「はいおしまい。」で、あまり心というか頭に残らない。なので、今回の本は「最低でも3回は読まないと」と思っている。これでも理解度は良くても恐らく5割くらいだ。3割いければ良い方だろう。それくらい、ボクは一冊の本を消化するのが遅い、というか苦手だ。

別の本の話で(主にひらしょーさんに対して)申し訳ないけど、「CプログラミングFAQ」と「プログラミング作法」の2冊は、ボクにとって珍しく血肉になっているプログラム関係の本だ。それぞれ軽く10回以上は読み返している。どちらも最初に読んだのは20代の頃で、正直20代のうちに読んでおいて良かったと思ってるし、そもそも20代でこの本に出会えて良かったと思っている。今これらの本に出会って読んでも感銘は受けるかもしれないけど、「もっと若い時に出会えていれば...」と考えたと思う。

この本に関しても同じような感想を抱いた。なので、敢えて文句を言うと「登場が遅すぎだよ...」ということになるけど、それは別にこの本のせいでも、ましてやひらしょーさんのせいでもない。この本の冒頭にも書いてあるけど、そもそも「今までこういう本がなかった」事自体が問題なわけだ。

今回の感想文としてはここで締めさせていただく。本の内容についての言及が一切無いけど、それは先に話したような理由なのでご容赦いただきたい。

トラックバック - http://d.hatena.ne.jp/isshiki/20131003
 | 
20040203040506070809101112
20050102030405060809101112
2006010203040506070809101112
2007010203040506070809101112
2008010203040506070809101112
2009010203040506070809101112
2010010203040506070809101112
2011010203040506070809101112
2012010203040506070811
201301020708101112
20140203040509101112
2015010203040506070809101112
201601020304101112
20170405091012
2018010204
プロフィール

isshiki

isshiki

上級NEETの実態

Connection: close