Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

プチコンでかんたんプログラミング

今朝9時にダウンロード解禁となったプチコンを買いました。私は25歳ですし(元)マイコン族ではないのですが、BASICからプログラムを始めたようなものなので懐かしさを感じます。とりあえずFizzBuzzと跳ねるボールを組んでみたのでコードを晒しておきます。

FIZZBUZZ

通勤時間だいたい15分くらいで作成。IF〜ELSEで書くよりもシンプルに見えるのは気のせいでしょうか。

'FizzBuzz
'
CLS
CLEAR

@START
INPUT"MAX";MAX
IF MAX<1 GOTO @START

FOR I=0 TO MAX
    J=0
    IF I%3 == 0 THEN J=1
    IF I%5 == 0 THEN J=J+2
    IF J == 0 THEN PRINT I
    IF J == 1 THEN PRINT"FIZZ"
    IF J == 2 THEN PRINT"BUZZ"
    IF J == 3 THEN PRINT"FIZZBUZZ"
NEXT

BOUND BALL

画面をボールが跳ねます。それだけ。ボールの消去は空白をPRINTすることで行いました。重力を考慮するバージョンも作成しましたが、さすがにテキストではカクカクしてしまいます。

CLS
CLEAR
BALLS=20
WIDTH=30:HEIGHT=20
DIM BX(BALLS),BY(BALLS)
DIM VX(BALLS),VY(BALLS)

@INIT
FOR I=0 TO BALLS-1
    BX(I)=1+RND(WIDTH-1)
    BY(I)=1+RND(HEIGHT-1)
    VX(I)=RND(2)*2-1
    VY(I)=RND(2)*2-1
NEXT
FOR X=0 TO WIDTH+1
    LOCATE X,HEIGHT+1
    PRINT"■"
NEXT
FOR Y=0 TO HEIGHT
    LOCATE WIDTH+1,Y
    PRINT"■"
NEXT

@LOOP
    GOSUB @CLSCREEN
    GOSUB @MOVE
    GOSUB @DRAW
    VSYNC(8)
GOTO @LOOP

@CLSCREEN
    FOR I=0 TO BALLS-1
        LOCATE BX(I),BY(I)
        PRINT" "
    NEXT
RETURN

@MOVE
    FOR I=0 TO BALLS-1
        BX(I)=BX(I)+VX(I)
        BY(I)=BY(I)+VY(I)
        IF BX(I)==WIDTH THEN VX(I)=-1
        IF BX(I)==0 THEN VX(I)=1
        IF BY(I)==HEIGHT THEN VY(I)=-1
        IF BY(I)==0 THEN VY(I)=1
    NEXT
RETURN

@DRAW
    FOR I=0 TO BALLS-1
        LOCATE BX(I),BY(I)
        PRINT"○"
    NEXT
RETURN


単なるBASICプログラムのはずですが、DSiの2画面で動くというだけでかなりの楽しさが感じられるものですね。これはちょっとした驚きでした。