GUST NOTCH? DIARY

petitcom

100行プログラム再び

また作ってみました。一行画面幅内の制限で100行に収めました。 昔懐かしい「ゲームロボット9」にあったやつです。 MEMORY 30秒以内に光った順にボタンを押してください。クリアするごとに押さないといけないボタンが一つづつ増えていきます。 オールクリア…

15 PUZZLE

数字のスプライトが16まであるようだったので、それなら15パズルだな、ということで、100行プログラムを目指して作り始めたんだけど、どうしても120行前後にしかならなかったので、方針転換。220行になりました。一行が一画面の幅以内という制約をつけてるの…

100行プログラムに挑戦

電車の中でスマートフォンでこんなアプリをやってる人を見かけた。これならベースは簡単に作れると思って作ってみたら84行でできた。ちょっと手直しして93行になった。 せっかくなので、一行の幅が一画面内に収まるようにもしてみた。そのため、一行で書ける…

蘇るBASICプログラミング プチコン公式活用テクニック / 松原拓也,株式会社スマイルブーム,株式会社ジョルス (asin:4048706713)

プチコンの企画を提出する際に注意した点は、「解析に使えると思われないこと」だという。これは安全性に配慮したもので、メモリへ読み書きを行うPEEK・POKE命令がなかったり、ユーザーが作成したプログラムをパソコンに吸い出したりできないのは、このため…

蘇るBASICプログラミング プチコン公式活用テクニック / 松原拓也,株式会社スマイルブーム,株式会社ジョルス (asin:4048706713)

ちょっと読み始めたら、一気に読んでしまいそうだ。 1890 yen @ 丸善

StarTrek for Petitcom V0.2

こないだ作ったのを元にして、上下2画面にしてボタンとタッチパネルの両方で操作できるようにしました。 ソースはこちらにあります。 http://www2.u-netsurf.ne.jp/~ozawa/startrek/startrek.html 以下の動画は音も入っていますので、音量に注意。 2334行に…

MAINCNTL と MAINCNTH

自分でBGMを鳴らそうかと思うが、VSYNC を使うとずれてしまうので、同期をとるにはどうしたらいいのか?と調べていたら、起動時からの経過フレーム時間を示すシステ変数 MAINCNTL というのがあることが分かった。最初、MAIN CoNTroL という意味なのかと思っ…

SPANIM

プチコンにはスプライトでアニメーションする SPANIM というコマンドがある*1。これを使うと、ほっといてもアニメーション処理をしてくれる。 たとえば、SPU3*2で定義されている248番から255番のキャラクタで爆発パターンのアニメーションをしようとした場合…

画面のクリア

スプライトとグラフィックとテキストを使うプログラムを書いている。別のプログラムの後に走らせてもちゃんと表示できるようにと、画面クリアをちゃんとしたつもりだったんだけど、下画面の背景色が期待通りにならない場合があった。 CLS, GCLS, SPCLR, を全…

タッチされた位置の取得

スクリーンがタッチされたのを検出する関数が見当たらないと思ったら、自動的にシステム変数に入るらしい。*1 こんな感じで押された位置と押され続けた時間が分かる LX=0:LY=0 PRESSED=FALSE @LOOP IF TCHST==TRUE THEN GOSUB @TDOWN IF TCHST==FALSE THEN G…

StarTrek for Petitcom

スタートレックをプチコンに移植してみました。 リクエストがあったりしましたので、説明とソースなどは以下にあります。 http://www2.u-netsurf.ne.jp/~ozawa/startrek/startrek.html 実際にプレイしている様子はこちら。一応クリアまで入ってます。 1520行…

スタートレックのプレビュー

一応、ゲームとしては動く状態になった。が、フェーザの攻撃力がイマイチ低すぎるので、パラメータを調整中。その他にも、メッセージの見直しなども。現在1493行にまで膨らんでます。 こんな感じになってます。 無駄にグラフィカルなタイトル 短距離センサ …

INPUT と LINPUT

こんなプログラムを考えます。 @Q INPUT "VALUE ?";A$ IF A$=="" THEN GOSUB @MSG:GOTO @Q PRINT "STRING=";A$ B=VAL(A$) PRINT "VALUE=";B END @MSG PRINT "PLEASE INPUT VALUE!" RETURN意図したい動作は、入力が空の場合は @MSG 以後の説明を出して入力に…

計算誤差

HP BASIC のスタートレックで、こんな部分があります。 830 X=G[Q1,Q2]*.01 840 K3=INT(X) 850 B3=INT((X-K3)*10) 860 S3=G[Q1,Q2]-INT(G[Q1,Q2]*.1)*10G[Q1,Q2] は Quadrant の状態を3桁の数値で格納していて、たとえば「215」ならば、クリンゴンが2個、基…

論理演算における評価方法

HP BASIC の書式では通るらしいし、Cでも普通だと思うんだけど、プチコンでは IF A AND B THEN ... と書いたとき、Aが偽でもBも評価されるんですね。

スタートレックのソースを読む(まとめ)

Mike Mayfield によるスタートレックの機能まとめです。 コマンド ワープ 短距離センサ 長距離センサ フェーザ 光子魚雷 シールド制御 ダメージレポート コンピュータ 銀河系地図 状況レポート 魚雷弾道計算 銀河系は 8x8 quadrant, quadrant は 8x8 sector …

スタートレックのソースを読む その12(最終回)

その11からの続きです。 ゲームオーバー 3920 PRINT "THE ENTERPRISE IS DEAD IN SPACE. IF YOU SURVIVE ALL IMPENDING" 3930 PRINT "ATTACK YOU WILL BE DEMOTED TO THE RANK OF PRIVATE" 3940 IF K3 3950 GOSUB 3790 3960 GOTO 3940 3970 PRINT 3980 PRINT…

スタートレックのソースを読む その11

その10からの続きです。 コンピュータ 4630 IF D[8] >= 0 THEN 4660 4640 PRINT "COMPUTER DISABLED" 4650 GOTO 1270 4660 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND"; 4670 INPUT A 4680 GOTO A+1 OF 4740,4830,4880 4690 PRINT "FUNCTIONS AVAILABLE F…

スタートレックのソースを読む その10

その9からの続きです。 今回は2つ。シールド制御とダメージ制御です。 シールド制御 3460 IF D[7] >= 0 THEN 3490 3470 PRINT "SHIELD CONTROL IS NON-OPERATIONAL" 3480 GOTO 1270 3490 PRINT "ENERGY AVAILABLE ="E+S" NUMBER OF UNITS TO SHIELDS:"; 3500…

スタートレックのソースを読む その9

その8からの続きです。 光子魚雷 2800 IF D[5] >= 0 THEN 2830 2810 PRINT "PHOTON TUBES ARE NOT OPERATIONAL" 2820 GOTO 1270 2830 IF P>0 THEN 2860 2840 PRINT "ALL PHOTON TORPEDOES EXPENDED" 2850 GOTO 1270 2860 PRINT "TORPEDO COURSE (1-9):"; 287…

スタートレックのソースを読む その8

その7からの続きです。 フェーザ 2530 IF K3 2540 IF D[4] >= 0 THEN 2570 2550 PRINT "PHASER CONTROL IS DISABLED" 2560 GOTO 1270 2570 IF D[7] >= 0 THEN 2590 2580 PRINT " COMPUTER FAILURE HAMPERS ACCURACY" 2590 PRINT "PHASERS LOCKED ON TARGET. …

スタートレックのソースを読む その7

その6からの続きです。 長距離センサ 2330 IF D[3] >= 0 THEN 2370 2340 PRINT "LONG RANGE SENSORS ARE INOPERABLE" 2350 IMAGE "LONG RANGE SENSOR SCAN FOR QUADRANT",D,",",D 2360 GOTO 1270 2370 PRINT USING 2350;Q1,Q2 2380 PRINT USING 2520 2390 FO…

スタートレックのソースを読む その6

その5からの続きです。 メインループとワープ 1270 PRINT "COMMAND:"; 1280 INPUT A 1290 GOTO A+1 OF 1410,1260,2330,2530,2800,3460,3560,4630 1300 PRINT 1310 PRINT " 0 = SET COURSE" 1320 PRINT " 1 = SHORT RANGE SENSOR SCAN" 1330 PRINT " 2 = LONG…

スタートレックのソースを読む その5

その4からの続きです。 短距離センサの出力 4120 FOR I=S1-1 TO S1+1 4130 FOR J=S2-1 TO S2+1 4140 IF I8 OR J8 THEN 4200 4150 A$=">! 4160 Z1=I 4170 Z2=J 4180 GOSUB 5680 4190 IF Z3=1 THEN 4240 4200 NEXT J 4210 NEXT I 4220 D0=0 4230 GOTO 4310 424…

スタートレックのソースを読む その4

その3からの続きです。 現在の宇宙域の配置を設定 810 K3=B3=S3=0 820 IF Q18 OR Q28 THEN 920 830 X=G[Q1,Q2]*.01 840 K3=INT(X) 850 B3=INT((X-K3)*10) 860 S3=G[Q1,Q2]-INT(G[Q1,Q2]*.1)*10 870 IF K3=0 THEN 910 880 IF S>200 THEN 910 890 PRINT "COMBA…

スタートレックのソースを読む その3

その2からの続きです。 変数定義と初期化の続き 490 B9=K9=0 500 FOR I=1 TO 8 510 FOR J=1 TO 8 520 R1=RND(1) 530 IF R1>.98 THEN 580 540 IF R1>.95 THEN 610 550 IF R1>.8 THEN 640 560 K3=0 570 GOTO 660 580 K3=3 590 K9=K9+3 600 GOTO 660 610 K3=2 6…

スタートレックのソースを読む その2

その1からの続きです。 変数定義と初期化 230 REM ***** PROGRAM STARTS HERE ***** 240 Z$=" " 250 GOSUB 5460 260 DIM G[8,8],C[9,2],K[3,3],N[3],Z[8,8] 270 DIM C$[6],D$[72],E$[24],A$[3],Q$[72],R$[72],S$[48] 280 DIM Z$[72] 290 T0=T=INT(RND(1)*20+…

スタートレックのソースを読む その1

Mike Mayfield が1972年に書いた HP BASIC 用のコードを読みながら、プチコンの命令を確認していこうかと思います。オリジナルのソースはこちら。 http://www.dunnington.u-net.com/public/startrek/STTR1 プチコンのサイトはこちらです。 プチコン 予備知識…

久々のスタートレック

C移植版のソースを読みながら、動作確認をするために実際にやってみた。 http://www.dunnington.u-net.com/public/startrek/startrek.c インストラクション部分は別ファイルになっててこれ。docだけどただのテキストです。 http://www.dunnington.u-net.com/…

下の画面も使えば2倍

よく考えたら、下のスクリーンも描画できる。入力はコマンド選択と数値だけなのだから、コマンドは選択式にして、テンキーだけ自作すればなんとかなるような気がする。 そうすれば、上の画面はこんな感じにできる。 下はメッセージ出力とコマンド選択ボタン…