2018年08月30日

夏休みの宿題ゲーム for Ichigojam

この記事は、クエリちゃん x プロ生ちゃん 夏休み #プチプログラミング コンテスト2018応募用の記事っぽいです。

夏休みの宿題ゲーム
このゲームは8月31日までに100ページもある夏休みの友(宿題帳)をやり終えるゲームです。
ゲームを実行すると7月20日の晩から始まります。
あなたは次の日の予定を決めてから寝ることにしています。
また、予定を決めたらその通りに実行する几帳面なひとなのです。
明日の天気予報(晴れ、曇り、雨)がパーセントで表示されますので
それを参考に明日のやることを決めます。
※予報なのでもちろん想定外な天気なこともありそうです。

・宿題をする(1を選択)
100ページもある夏休みの宿題帳をやります。天気が悪いほうが
どちらかというとはかどります。
・遊ぶ(2を選択)
せっかくの夏休みなんだから遊びます。遊ぶとやる気が充実します。
天気がよいと充実しやすいですが雨の日はちょっぴり残念です。
・寝る(3を選択)
天気に関係なく寝てしまいます。ゆっくり休んだらやる気が充実する
こともあるかもしれません。
数字を入力したらエンターキーで決定です。

明日のやることを入力したらもう次の日です。
今日の天気が表示されて決めたことをやります。
宿題をやると進んだページ数が表示されます。
やる気があると多めにページ数をこなせそうです。
遊んだり寝るとやる気が充実しますが、充実度は
小←「v」「>」「^」→大
で表現されています。
そうこうしているうちにもう夜なので次の日の予定を決めます。

こうして42日間の夏休み中に100ページの宿題帳をやりとげればクリアです!
ただし、夏休みが終わってしまうとゲームオーバーです。

うーん、これってゲームか?夏休み中ずっと宿題やってればいいじゃん!と
思うかもしれませんが、天候にもよりますが夏休み中ずっと宿題やってても
やる気が続かずに終わらないようになってますので、天気のいい日は遊びましょう。
とはいうものの現実では健康にかかわるほどの酷暑ですのでそうも言ってられないかも。
ていうかもう夏休み終わりですよね。
今思うと超大昔に天気が関係するゲームってなんかあったような気がしますよね…

ソースというかプログラムリストはこちら。
100 LET[1],"HARE","KUMORI","AME",100,"v",">","^"
110 Y=20:N=0:P=0
120 PRINT"7/20 ASHITA KARA NATSUYASUMI!":?
130 @LOOP:N=N+1:IF Y>100 THEN Y=100
140 H=RND(98)+1:K=RND(98-H)+1:A=100-H-K:T=RND(100)+1
150 E=(H<=T)+((K+H)<=T)+1:R=(Y>30)+(Y>70)+5
160 PRINT"SHUKUDAI:";P;"PAGE YARUKI:";STR$([R])
170 IF N>42 THEN PRINT"NATSUYASUMIHA OWARIMASITA..ZANNEN..":END
180 IF N<12 THEN PRINT"7/";N+20; ELSE PRINT"8/";N-11;
190 PRINT" TENKIYOHOU HARE:";H;"% KUMORI:";K;"% AME:";A;"%"
200 @D:INPUT"DOUSURU?(1:SHUKUDAI 2:ASOBU 3:NERU):",D
210 IF D<1 OR D>3 GOTO @D
220 PRINT"KYOU NO TENKI:";STR$([E])
230 IF D=1 GOTO @SKD ELSE IF D=2 GOTO @ASB
240 PRINT"NETARA...SUKKIRI!?":Y=Y+RND(30):GOTO @RTN
250 @SKD:W=RND(2)+E:IF Y>=20 THEN Y=Y-20:W=W+RND(2)+2
260 IF (P+W)>100 THEN W=100-P
270 PRINT"SHUKUDAI:";W;"PAGE YATTA!":P=P+W:GOTO @RTN
280 @ASB:W=(RND(10)+30)*(E=1):W=W+(RND(20)+10)*(E=2)
290 W=W+RND(10)*(E=3):Y=Y+W
300 PRINT"YARUKIGA AGATTA!"
310 @RTN:PRINT"----":IF P<[4] GOTO @LOOP
320 PRINT"SHUKUDAI:";[4];"PAGE OWATTA! OMEDETOU!":END
プログラムは自由に変えて遊んでみてください、といってももうほとんどメモリは残っていませんが…。
メモリの節約のため、150行や280行などが普通ではない記述になっています。
たとえば、(E=2) なんてありますが、これはEに2を入れているのではなくてEと2を比較しています。
比較した結果が正しければ、(E=2)は1の値になり、正しくなれば0の値になります。
これを応用して R=(Y>30)+(Y>70)+5 の例ですと、Yが60だとしたら R=(1)+(0)+5 となってR=6になります。
上手く使えばIF文を何個も書かなくて済むのでメモリと処理時間の節約にもなりますよ!

表示メッセージがアルファベットのローマ字になっていて読みづらくてすみません。
Ichigojamはカタカナも扱えるのですが、コード体系が違うため実機以外のIchigojam Webや
プログラムリストをウェブに掲載する際に文字が化けてしまうのでやむなくローマ字としました。
実機で遊ぶ際はカタカナで手入力すれば文字数が減るのでメモリが節約できるかも。

こちらからIchigojam Webで実機が無くてもブラウザからでも楽しめます。
RUNとキーボードから入力してエンターキーを押すとゲームが実行されます。
スマホでは(物理的な)キーボードが無いのでゲームの実行や操作ができないのではないかと思われます…。
posted by まちゅ at 23:15| Comment(0) | プログラミング

2018年01月08日

IchigoJamの疑似グラフィックでドット絵を描いてみる

こどもパソコンIchigoJamには標準ではグラフィック機能は無くて文字しか表示できないのですが、正方形の記号をちょうど田の字に4分割した16種類の文字の組み合わせで疑似的なグラフィックを描くことができますので、プロ生ちゃんドット絵を描くプログラムを作成してみました。
まず、元となるドット絵を描いてみます。
IchigoJamはプログラムで使えるメモリが1KByteくらいしかないので、余裕をみて今回は32x32ドットとしています。
プロ生ちゃんドット元絵
1から描いてもよかったのですが、工期短縮のためドット絵はT-Naさんの「8Bit ゲーム機風ドット絵プロ生ちゃん」素材を参考にさせていただきました。ありがとうございます。
(※4隅の■は目印用です)
このドット絵を16文字×16文字に変換するのですが、今回は一部で悪名高い方眼紙エクセルにてセルに埋め込む関数を駆使してBASICのデータを作成するようにしてみました。
ドット絵変換用方眼紙エクセル
ドット絵のデータは配列に定義してプログラムで展開して表示するようにします。
IchigoJamの配列変数は16進4桁まで扱えるので、メモリ節約のため4文字分を1要素に入れるようにしました。
プログラムは前半でドット絵データを配列に定義しています。
後半にてFOR文で回しながら1要素あたり4文字分を論理演算で展開して表示しています。
10 REM pronama-chan dot picture @machuoka
20 CLS
30 LET [0],#1800,#0000,#0000,#0090
40 LET [4],#0180,#0000,#9008,#0900
50 LET [8],#0050,#4200,#0050,#4209
60 LET [12],#081A,#A004,#00A4,#5042
70 LET [16],#0505,#A005,#6529,#A055
80 LET [20],#E8BD,#008C,#6F47,#20E8
90 LET [24],#A061,#0000,#9555,#09B9
100 LET [28],#B01D,#0809,#F3F5,#51A1
110 LET [32],#E554,#AAD8,#0992,#55A5
120 LET [36],#B551,#1B65,#5D20,#061D
130 LET [40],#AAA5,#00E2,#0000,#0039
140 LET [44],#950A,#4005,#0000,#0A05
150 LET [48],#4242,#0009,#6080,#4655
160 LET [52],#5000,#2490,#0612,#D9D7
170 LET [56],#AA00,#D60A,#80EC,#01A1
180 LET [60],#0100,#6509,#A951,#0050
190 I=0
200 FOR Y=0 TO 15
210 LOCATE 8,Y+4
220 FOR X=0 TO 15 STEP 4
230 D=[I]:I=I+1
240 FOR J=1 TO 4
250 C=D&#000F:D=D>>4
260 PRINT CHR$(C+#80);
270 NEXT:NEXT:NEXT
280 LOCATE 0,22
290 END
実行するとこんな感じでドット絵が出てきます。
実行イメージ
プロ生ちゃんに見えますよ…ね!?
IchigoJamの仕様的には64x48ドット表示できます。1KByteのメモリにもぎりぎり入るようです。
今回の上記のプログラムではもう800Byte近く使っているのでこの方法では無理そうです。
直接PRINT文でグラフィックキャラクターを表示するのであればあるいは…??
続きを読む
posted by まちゅ at 03:20| Comment(0) | プログラミング

2017年12月15日

すぱこー焼きそばソースを使って(焼きそばじゃなくって)ナポリタンを作ってみたよ

この記事はプロ生ちゃん Advent Calendar 2017の15日目の記事になります。

去年、すぱこー焼きそばソースを使ってナポリタン風味の焼きそばを作ってみました。
(その記事はこちら
あの時のソースが半分くらい残ってしまい、そのまま冷蔵庫へ保存されたままとなっておりました。プロ生ちゃん Advent Calendarの記事を考えるにあたってもしかしたら、ナポリタン風味の焼きそばを作れるのなら、焼きそばソースでナポリタンを作れるのではないか?と思い付き、賞味期限が約1年前に切れてしまったソースを使い切る絶好の機会でもありますのでせっかくなので検証することにしてみました。
期限…

大体2人分の材料は以下の通りです。
  • スパゲッティ早ゆでタイプ 240g
  • 玉ねぎ 1つ
  • ピーマン 2つ
  • ウインナー 1袋
  • デラックスハム(魚肉ソーセージのでかいやつ。試しに半分入れてみます)
  • すぱこー焼きそばソース 半分くらい(味付けはすぱこー焼きそばソースのみです!)
ナポリタン食材

玉ねぎは5mm幅にタテ薄切り、
ウインナーは5mm幅の斜め薄切り、
魚肉ソーセージも5mm幅に切り、
ピーマンはヘタと種を取り、5mm幅に切ります。
食材を5mmにカット

スパゲッティは熱湯に塩を入れて袋に書いてある通りのゆで時間でザルにあげて水気を切っておきます。
スパゲッティはゆでておく

フライパンにオリーブオイルを前回の改善点をふまえてちょっと多めに入れて、まずは玉ねぎとピーマンを弱火で炒めます。
玉ねぎピーマン投入

玉ねぎが透けてきはじめたら、ウインナーと魚肉ソーセージを入れて炒めます。
ウインナー投入

ウインナーが焼けてきたら、前回の改善点をふまえてすぱこー焼きそばソースを入れてからめます。
すぱこー焼きそばソース投入

ひと炒めしたら、スパゲッティと残りのすぱこー焼きそばソースを入れて炒めます。
スパゲッティ投入

全体にソースが絡んだら出来上がりです。
盛り付け例

お皿に盛って粉チーズをかけるとそれっぽくは見えますが、色的にはどう見てもナポリタンというよりかは太麺の焼きそばで、やらかしてしまった感じがします…。半信半疑で食べてみると、なんとちゃんとナポリタンのような味がしてしかも美味しいです!これは本当に驚きでした。とはいえソースの風味もありますので、もし気になる場合は試してはいませんがケチャップをかけてみてもいいかもしれません。
2歳の息子も麺をぱくぱく食べてましたがもう焼きそばソースは無いので二度と作れないのだ…。

今回、すぱこー焼きそばソースを使ってナポリタンを作ってみて、魚肉ソーセージは思った以上に合わなかったという知見を得ました。好みにもよりますが、個人的には入れないことをお勧めいたします。

最後にソースはある程度寝かせるとおいしい、という話もありますが未開封の場合に限ると思われます。
開封済みのソースを使っての調理の際は十分に注意して頂き、自己責任にてお願いいたします。
posted by まちゅ at 00:00| Comment(0) | やってみた