1行プログラム、2行プログラム、1画面プログラムなどのごく小さなプログラムを公開しているページです。
※PC-E500シリーズの1行は行番号、改行込みで最大255文字(命令の後には自動的にスペースが挿入)、255バイト(ただし、10進数の単精度数値は桁数に関係なく8バイトで扱われる)、1画面は行番号、改行別で最大152文字となっている。
JUN氏がPB-1000用に作った1LINEハイローをPC-E500シリーズ用に移植したものです。
1 CLEAR :WAIT Z:RANDOMIZE :FOR I=&TO 1:A=RND 8,B=RND 8,D=RND 2:CLS :PRINT A;B:PRINT CHR$ (47-D*2):PRINT "スコア";S:FOR J=&TO 99-S:K=VAL INKEY$,J=J+K*99:NEXT :I=-(K<>EVAL CHR$ (67-(A<>B)*(SGN (1.5-D)*(A<B)-D))),S=S+1:BEEP 1:NEXT :WAIT :PRINT "END":GOTO 1 |
このゲームはPJのゲームデザイン館の「ピョンコ」を元にしたゲームです。
(1) RUNモードにする (2) FOR I=1 TO 7:A$=A$+CHR$ 135:NEXT [RETURN] (3) PROGRAMモードにする (4) A$ [RETURN][+/-] (5) 行番号その他を挿入する |
1 Z=&:FOR K=&1TO &5:CLS :PRINT K:X=-8:Y=23:LOCATE ,&3:FOR I=&TO &4:PRINT MID$ ("□□□□□□■■■■■■■",&8-RND &2-K,&8);:NEXT :FOR J=&TO &STEP &:T=&:K$=INPUT $(1):FOR I=&F1 TO &F5 STEP &:T=T+1:IF ASC INKEY$<>I NEXT ELSE I=I+1:NEXT :Z=Z+1:W=-5:V=70/T:FOR I=&TO 18 2 X=X+V:W=W+0.5:Y=Y+W:GCURSOR (X-V,Y-W):GPRINT "0000000000000000":GCURSOR (X,Y):GPRINT "80404864E47478B0":BEEP &1,Y*9,&9:NEXT :IF POINT (X,Y+1)<>1BEEP 1:K=K-1:PAUSE "MISS":NEXT K ELSE IF X<232 NEXT ELSE PAUSE "CLEAR":NEXT K:BEEP &4:PRINT "SCORE";Z |
「OPASを使った2LINEゲームを作ってみよう」と思ったので作ってみました。
どんなゲームかはまずは動画を見てください。
(1) RUNモードにする (2) A$=CHR$31 [RETURN] (3) FOR I=0 TO 9:A$=A$+CHR$29:NEXT [RETURN] (4) A$=A$+A$+A$ [RETURN] (5) PROGRAMモードにする (6) A$ [RETURN][+/-] (7) 行番号その他を挿入する |
POKE &BFE03,&1A,&FD,&B,&9A,1,0 [RETURN] CALL &FFFD8 [RETURN] |
1 CLS :CLEAR :Y=&B,A$="タチツテトナニヌネノ↓←←←←←←←←←←カキクケコサシスセソ↓←←←←←←←←←←アイウエオカキクケコ↓←←←←←←←←←←サシスセソタチツテト":INPUT Z$:IF Z$ LET Z=RND -1,A=&BFA66:FOR I=A TO A+406:POKE I,0:NEXT :FOR I=40TO 406:I=I+RND 1500/I+&4,B=&2^RND &5/&2:POKE A+I,6*B,&D*B,&F*B,&6*B:NEXT 2 OPEN "SCRN:"FOR OUTPUT AS &1:FOR I=&TO &FF:X=X-(INKEY$="")*2-1,Y=Y+X:POKE &BFC93,I,&FA,&B:LOCATE E,E:PRINT #1,A$:Z=POINT (4,Y-3):GCURSOR (E,Y):GPRINT "70E87C2A3A2A7CE870":BEEP 1,Y*6,5:LOCATE &F,E:PRINT #1,I:IF Z BEEP 1ELSE NEXT :BEEP &3:PRINT "CLEAR!" |
2 POKE &BFC94,&FA,&B:OPEN "SCRN:"FOR OUTPUT AS &1:FOR I=&TO &FF:X=X-(INKEY$="")*2-1,Y=Y+X:POKE 785555,I:LOCATE 0,0:PRINT #1,A$:Z=POINT (4,Y-3):GCURSOR (0,Y):GPRINT "70E87C2A3A2A7CE870":IF Z LOCATE 15,0:PRINT I:BEEP 1ELSE NEXT :BEEP &3:PRINT "CLEAR!" |
連射命の100M走のゲームです。
このゲームはポケコンジャーナル94年5月号に発表された「ハイパー100M走II」のバージョンアップ版で、BASICの限界に迫る速度を実現していた前作と比べても何と最大2倍の高速化をしており、更に簡易キーコンフィグ機能も搭載しています。
この短いリストの中に高速化テクニックを数多く詰め込んでいます。したがって、従来指摘されていた、「2LINEゲームは速度的に無駄がある」というようなことはありません。・・・っていうか、BASICでこれ以上速く出来るのならしてみろっていう感じですね。(←かなり強気)
下記リストを入力後CLEAR[RETURN]としてハイスコアを初期化してください。あとはRUNをすればゲームが始まるので、[1][3]をひたすら交互に押してください。1秒当たりメインルーチンを最高100回実行しているので、コスリを使おうがちゃんと反応します。連続で遊ぶときは[RETURN]でリトライできます。
ゲーム終了後は[CTRL]+[+/-]としてフォントを元に戻してください。
なお、使うキーは自分で選ぶこともできます。1行目のM、Nに使うキーのアスキーコードを入れてください。ただし、MとNは同じ数にしないでください。
私の自己ベストは9秒29です。これを破った人は、ぜひ、お知らせください。秒間20連射以上できないと絶対破れません!
1 M=49,N=51,T=&,A=&1:POKE &BFC93,&80,&FA,&B:FOR I=&TO 23:POKE &BFAE6+I,VAL ("&"+MID$ ("904735391B201420000000000000002F45393B2050800000",I*2+A,2)):NEXT :CLS :WAIT &:ERASE C$:DIM C$(A):C$(T)="□アイ”,C$(A)="□ウエ":LINE (T,&E)-(234,25),B:USING "##.##" 2 N=N+M:PAUSE "BEST";B;:PAUSE "□□READY□";:PRINT "GO!":BEEP A,99,&64:FOR X=&TO 37STEP &:T=T+4:IF -M+ASC INKEY$ NEXT ELSE A=1-A,M=N-M:LOCATE X,2:PRINT C$(A):X=X+0.5:NEXT :BEEP 1,X,99:T=(T-RND &4)/&64:B=-(B<T)*B-((B>=T)+(B=&))*T:WAIT :PRINT "TIME";T:GOTO 1 |
2LINEでできた、キャラクタ作成エディタです。
まず、1行目の最初の「L=12」のところで、Lに作成するキャラクタの「横のドット数」を入れてください。(1〜14の範囲)
あとは[8][2][4][6]で上下にカーソルを動かし、[SPACE]でドットを反転させます。作成が終わったらPFキーを押してください。押したPFキーにデータが登録([PF6]〜[PF10]を使用するのであらかじめ大事なデータはどこかに保管しておいてください)され16進数データを表示します。作成中に[√]を押せばコマンド入力待ちになり、[OFF]を押せば一時中止でき(再び修正するときは電源ONのあと[RETURN]を押せばよい)また、過去に作ったキャラクタを参照して作成したい場合はそのデータを入力してください。データを登録したくないけど16進数データを表示したいというときは、このキーを使うと便利です。
2LINEながら必要な機能はすべて備えているので充分実用に耐えます。事実、私が作成したゲームの大半(というか「シュプール」以外の全部)がこのエディタによって作成されているのです!
このプログラムのウリは
(1)サイズが小さいのでメモリに常駐できる (2)PFキーを使うためデータの受け渡しが楽 |
1 CLEAR :L=12,F=&4,G=&1:CLS :FOR A=G TO L*F STEP F:LINE (A,E)-(A,&1F),&4444:NEXT :FOR Z=&TO F^F:FOR P=&TO &F1:FOR W=&TO G-(P=33):LINE (X*F,Y*F)-(X*F+2,Y*F+2),X,B:PSET (X+64,Y+19),X:WAIT W:NEXT :K$=INKEY$ ,X=X+(K$="4")*(G+(X=E)*L)-(K$="6")*(G+(X=L-G)*L) 2 P=ASC K$,Y=Y+(P=56)-(P=50)AND 7:NEXT :G$="":FOR A=&40TO &3F+L:Z=E,V=GFOR B=19TO 26:Z=Z+POINT (A,B)*V,V=V+V:NEXT :G$=G$+RIGHT$ ("0"+HEX$ Z,2):NEXT :LOCATE &A,E:PRINT G$:IF P-&FD KEY P-&EC,G$:NEXT ELSE LOCATE &A:INPUT H$:GCURSOR (68+L,26):GPRINT H$:NEXT |
何と2行で出来た疑似3Dのレースゲームです。
このゲームでは直接入力できないスペードマークが使用されています。これを入力するには以下のようにしてください。
(1)RUNモードにする (2)CLEAR [RETURN] (3)FORI=1TO24:A$=A$+CHR$232:NEXT [RETURN] (4)PROGRAMモードにする (5)A$ [RETURN] [+/-] (6)行番号、その他を入力する |
RUNをしたらゲーム開始です。[4][6]で左右の移動、[SPACE]がアクセルで何も押していないとブレーキがかかります。[1][9]で左右に急ハンドルが切れます。ただし、急ハンドルを切ると減速します。ちなみに同時キー入力は出来ません。
画面左上の数字が現在の速度で最高速度は243km/hです。中央の数字が走行距離でこれが99になるとゴールです。ちなみに左右の木(スペードマーク)に少しでも触れると減速します。ゴールするとタイムが表示されます。またこの時、[RETURN]を押すとリトライできます。ゴールする瞬間に木に接触するとリタイアとなりタイムは表示されません。
コースを変える場合は1行目のA=RND−1の「−1」を適当な数(ただし、負の数に限る)に変えてください。コースの長さを変えたいときはFOR文の99を適当に変えてください。コースの難易度を変えたいときはIF ABS (A+Z)<4〜の「4」を3〜6(大きいほうが難しい)に変えてください。同時キー入力が出来ないことを利用した走行テクニックもあります。私のベストタイムはデフォルトのコースで19秒91です。いかに急ハンドルを切らないで済むようなライン取りができるかがタイム短縮のポイントです。
前作(PJCLUB通第4号)に掲載との違いを記します。
1 CLS :CLEAR :A=RND -1,X=99,S=&1,U=&B,P=3,Q=0.2:BEEP S,X:FOR I=&TO 99:WAIT E:LOCATE ,E:PRINT INT (S*30),I:LOCATE Y+Z+U:PRINT "♠♠♠♠♠□□♠♠♠♠♠":LOCATE Y+U:PRINT "♠♠♠♠□□□□♠♠♠♠":LOCATE U:PRINT "♠♠♠□□□□□□♠♠♠":WAIT 24-S*P:A=RND 5-3,Y=Z:IF ABS (A+Z)<4LET Z=Z+A 2 K$=INKEY$ :T=T+RCP S,V=SGN VAL K$*(VAL K$-5),X=X+V*P-S*Y/P,S=S+(K$=" ")*(S<8)/S-((ABS V>2)+(K$=""))*(S>1.3)/P:GCURSOR (X,31):GPRINT "F0D8747474D8F0":IF ABS (X-98)>15BEEP &1,,P:S=S*0.7+Q:NEXT ELSE NEXT :BEEP P,P:WAIT :PRINT USING "TIME###.##";T:GOTO 1 |
どういう原理で占っているかというと、実は、小学生でも知っている方法なのです。例えば、「御茶目菜子(おちゃめなこ)」なら「521415」として(つまり、母音がアなら1、イなら2、ウなら3、エばら4、オなら5になる)隣同士の数を足していき、合計が10以上になったら1の位のみを残してどんどん計算していき、最終的に2桁になるまで続けるというものです。
まず、お互いの名前を入力してください。普通にカナを入力を入力してもいいですが、相手の名前を入力するのが恥ずかしいという照れ屋さんのために直接数値入力も出来るようにもなっています。名字と名前の間は空けても空けなくても構いません。
なお、[RETURN]で再計算が出来ます。
1行目(E500用)のMID$の処理は一見メモリの無駄に思うかも知れませんが、これは一種のテーブル処理なのでIF文を使うよりは遥かに短く、かつ、高速化できるのです。
ちなみに、最高は99%、最低は0%です。「ランティス」と「シドウヒカル」(「魔法騎士レイアース」より←知ってる?)では99%になります。ならなければリストの入力ミスでしょう(笑)。
同じ名前で入力するときは[RETURN]を押すだけで前回入力した名前で計算出来るので、特定の一人と多くの人(例えば、自分とクラス全員の異性など←オイ!)との相性の計算に便利です。
今回は、E500シリーズ専用と汎用BASIC(N88BASIC、E200シリーズ、その他の機種用、カタカナはすべて半角で入力してください)の2つのリストを用意しました。お好きな方を使ってください。なお、ポケコン以外を使用する場合は、前回の名前を自動入力する機能は付いていません(機能というよりBASICの仕様による)。
改良点としては相性の値によってによって様々なコメントを表示するようにしてみてはいかがでしょうか。
1 CLEAR :DIM A(40),X(233):FOR I=&TO 13:FOR J=1TO 5:X(ASC MID$ ("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤ*ユ*ヨラリルレロワ***ヲン****ァィゥェォャ*ュ*ョ12345",I*5+J,1))=J:NEXT :NEXT :FOR I=&TO &STEP &:CLS :PRINT "* アイショウ ウラナイ *":INPUT "オトコノ ナマエ:";A$:INPUT "オンナノ ナマエ:";B$ 2 N$=A$+B$:L=LEN N$:FOR J=1TO L:A=X(ASC MID$ (N$,J,1)),P=P+SGN A,A(P*SGN A)=A:NEXT :FOR N=P TO 3STEP -1:FOR J=1TO N-1:A=A(J)+A(J+1),A=A-INT (A/10)*10,A(J)=A:NEXT :NEXT :WAIT :PRINT "アイショウ=";A(1)*10+A(2);"%":WAIT &:NEXT |
10 CLEAR :DIM A(40),X(233) 20 FOR I=0 TO 13:FOR J=1 TO 5 30 P$=MID$ ("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤ*ユ*ヨラリルレロワ***ヲン****ァィゥェォャ*ュ*ョ12345",I*5+J,1) 40 X(ASC (P$))=J 50 NEXT J:NEXT I 60 P=0:PRINT "* アイショウ ウラナイ *":INPUT "オトコノ ナマエ:";A$: INPUT "オンナノ ナマエ:";B$ 70 N$=A$+B$:L=LEN (N$) 80 FOR J=1TO L 90 A=X(ASC (MID$ (N$,J,1))):IF A>0 THEN P=P+1:A(P)=A 100 NEXT J 110 FOR N=P TO 3STEP -1:FOR J=1TO N-1 120 A=A(J)+A(J+1):IF A(J)>9 THEN A(J)=A(J)-10 130 NEXT J:NEXT N 140 Z=A(1)*10+A(2):PRINT "アイショウ=";Z;"%" 150 GOTO 60 |
何と2行でできた録音・再生機能付きのキーボードプログラムです。
まず、入力前に録音データ記録用としてマシン語エリアを何Kバイトか確保する必要があります。
POKE &BFE03,&1A,&FD,&B,0,N*4,0 [RETURN] CALL &FFFD8 [RETURN] (注)5KバイトならNを5に変えてください。 |
O:オクターブ
1〜3の間で指定してください。 P:音の高さを半音変える。
簡単に言えばカラオケについているようなやつです。 T:曲のテンポ
小さくするほど音が長くなります。 |
録音データをRAMファイルにSAVEするにはデータセーバープログラムを入力してください。
RAMファイルを適当に確保(RAMカードを持っていない人は3行目の「F:」を「E:」に変えてください)しておいてください。練習モードでPFキーを押せば起動します。SAVEかLOADを選択してファイル名を入力してください。
このプログラムでは63Kバイトを越えるデータを扱うことが出来ませんので注意してください。まあ、それだけ大きなデータを記録することはないと思いますが・・・。
要望があれば、録音データのデータ圧縮プログラムやデータをMMLに変換するプログラムを作ります。
1 O=2,P=0,T=25,N=4,B=&2^RCP &C,F=&DC*B^(O*&C+P-&A):DIM A(&FF),B(&FF):FOR I=&1TO &19:F=F*B,A=ASC MID$("AWSEDFTGYHUJKOLPZXCVBNM,;",I,1),A(A)=64000/F-22,B(A)=F/T:NEXT :Y=&BFBFD,X=Y-&400*N+&3:CLS :PRINT "1","2","3","PRAC","PLAY","REC 2 A=VAL INKEY$ :IF A=1FOR K=&TO &F0:K=ASC INKEY$:BEEP 1,A(K),B(K):NEXT ELSE IF A=2FOR K=Y TO Z STEP -1:BEEP &1,A(PEEK K),B(PEEK K):NEXT ELSE IF A=3FOR Z=Y TO X STEP-1:K=ASC INKEY$ :POKE Z,K:BEEP 1,A(K),B(K):NEXT ELSE 2 |
3 *DS CLS :A=&,W=256:INPUT "SAVE:1 LOAD:2 ";A:INPUT "NAME=";N$:KEY &,"R."+CHR$ &D:N$="F:"+N$+".ORG":IF A=1THEN V=INT (Z/W):POKE Y+&1,V-2816,Z-V*W:SAVE M N$,Z,Y+2:END ELSE IF A=2LOAD M N$:Z=PEEK (Y+&1)*W+PEEK (Y+&2)+&B0000:END ELSE IF A=& END ELSE 3 |
[W][E] [T][Y][U] [O][P] #ド #レ #ファ#ソ #ラ #ド #レ [A][S][D][F][G][H][J][K][L] ド レ ミ ファ ソ ラ シ ド レ [Z][X][C][V][B][N][M][,][;] ミ ファ#ファ ソ #ソ ラ #ラ シ ド |