プチコンまとめArchive

サンプルプログラム集

パンくずリスト

このページの最終更新 : 2015/06/07 (日) 16:13:22
公式アーカイブのリンク: http://wiki.hosiken.jp/petc/html/Sample.html

初心者にも役に立つかもしれないサンプル的、および部品的なプログラムをここに集積しましょう。

BASIC の基本

こんにちは、世界

最初の一歩。文字列を表示する場合はダブルクォーテーションで囲む必要があります。
なお、ダブルクォーテーションはコンソールに表示されません。

  1. PRINT ”Hello,world!”

ダブルクォーテーションの表示

ダブルクォーテーションをコンソールに表示する場合はCHR$()関数を使用する必要があります。

  1. PRINT CHR$(34)

個人情報を抽出

プチコンが個人情報を抽出して喜ぶプログラムです。

  1. INPUT ”アナタノ ナマエハ” ; NAME$
  2. INPUT ”オトシハ イクツテ゛スカ” ; AGE
  3. PRINT ”アナタノ ナマエハ ” ; NAME$ ; ” テ゛”
  4. PRINT ”オトシハ ” ; AGE ; ” サイ テ゛スネ”
  5. PRINT ”コシ゛ンシ゛ョウホウヲ オイシク イタタ゛キマシタ、 ククク”
  6. WAIT 30

ひたすら数える

524287まで0から順に数えていきます。

  1. @LOOP
  2. PRINT A
  3. A=A+1
  4. GOTO @LOOP

時計

現在の時間を表示するだけのプログラム。

  1. @TIME
  2. LOCATE 0,0:PRINT”Р”;TIME$
  3. VSYNC 60
  4. GOTO @TIME

ボタン入力待ち

一行でAボタンの入力をまつプログラム。 16のところをいじると、どのボタンの入力待ちでも出来ます。

  1. FOR I=0 TO 1:I=BUTTON()==16:NEXT

ブロックIFの代わり

FOR文を用いてブロックIFを実装しています。

  1. FOR I=1 TO A
  2.  ?”Block IF”
  3. NEXT

この場合、の部分が条件式となり、?”Block IF”の部分が処理となります。

下画面にスプライト表示

下画面にスプライトを表示するサンプルは以下の通り。付属のエディタ等で CHR リソースを作成しておく必要あり。(例ではファイル名 "TCHR01")

  1. VISIBLE 1,1,1,1,1,1
  2. PNLTYPE ”OFF”
  3. SPPAGE 1
  4. LOAD”SPS0:TCHR01”,FALSE
  5. SPSET 0,0,0,0,0,0
  6. SPOFS 0,100,100
  7. VSYNC 600

超簡易ランチャー

INPUTで文字列を取得し、それでEXECするプログラム。

  1. INPUT A$
  2. EXEC A$

少し違う無限ループ

ライオネルさんの「新しい無限ループ?」と同じです。

  1. ’---------------------------
  2. ’ルーフ゜ないのしょりをかく
  3. ’---------------------------
  4. EXEC”このフ゜ロク゛ラムのファイルめい”

使用例

ファイル名は「PRG:TEST」にしてください。

  1. PRINT A
  2. A=A+1
  3. EXEC”TEST”

サブルーチン

サブルーチンは単独では動きません。自作のプログラムに混ぜて使います。

ボタン入力

変数表
  • BTN : ボタン状態
  • TRG : トリガ
  • REP : リピート
プログラムリスト
  1. @GETBTN
  2. BTN=BUTTON()
  3. TRG=(NOT OLD_BTN)AND BTN
  4. OFFTRG=OLD_BTN AND(NOT BTN)
  5. REP=0
  6. REPCNT=REPCNT+1
  7. IF OLD_BTN!=BTN THEN REPCNT=0
  8. IF REPCNT==0 THEN REP=BTN:GOTO @_GETBTN0
  9. IF REPCNT<30 GOTO @_GETBTN0
  10. IF (REPCNT-30)%5==0 THEN REP=BTN
  11. @_GETBTN0
  12. OLD_BTN=BTN
  13. RETURN
使用例
  1. CLEAR:CLS:S=0
  2. @LOOP
  3.  GOSUB @GETBTN
  4.  IF (REP AND 8) THEN S=(S+1)%70
  5.  IF (REP AND 4) THEN S=(S-1+70)%70
  6.  IF (TRG AND 16) THEN BEEP S
  7.  LOCATE 0,0:PRINT S;”  ”
  8.  VSYNC 1
  9. GOTO @LOOP

文字列を置き換える

使い方
  1. 置き換えたい文字列が入った文字列を H1$ に入れる
  2. 置き換えたい文字列を H2$ に入れる
  3. 置き換後の文字列を H3$ に入れる
  4. GOSUB @OKIKAE でサブルーチンを呼び出す すると変換された文字列が H1$ に入って帰ってくる。
プログラムリスト
  1. @OKIKAE
  2. L1$=H1$:L2$=H2$:L3$=H3$
  3. S1=LEN(L2$):S2=LEN(L3$)
  4. FOR RI=0 TO LEN(L1$)-1
  5. M1$=MID(L1$,RI,1)
  6. M2$=MID(L2$,S3,1)
  7. IF M1$!=M2$ THEN S3=0:M3$=””
  8. IF M1$==M2$ THEN S3=S3+1:M3$=M3$+M1$
  9. IF M3$==L2$ THEN F1=1
  10. IF F1 THEN M4$=MID$(L1$,0,RI-LEN(L2$)+1):S4=LEN(M4$+L2$):S5=LEN(L3$)-LEN(L2$):M5$=MID$(L1$,S4,255)
  11. IF F1 THEN M6$=M4$+L3$+M5$:L1$=M6$:RI=RI+S5-1:F1=0
  12. NEXT
  13. R1$=L1$
  14. RETURN
使用例
  1. CLEAR:CLS
  2. H1$=”アカン”
  3. H2$=”ア”
  4. H3$=”オ”
  5. GOSUB @OKIKAE
  6. ?R1$

文字列の指定位置に文字列を挿入する

使い方
  1. 文字列を H1$ に入れる
  2. 位置を H2$ に入れる
  3. 位置に挿入する文字列を H3$ に入れる
  4. @MIDL を呼び出す。すると R1$ に変換された文字列が入って帰ってくる
プログラムリスト
  1. @MIDL
  2. L1$=H1$:L2$=H2$:L3$=H3$
  3. S1=VAL(L2$)
  4. S2=LEN(L1$)
  5. M1$=MID$(L1$,0,S1)
  6. FOR RI=0 TO S1-S2-1
  7. M1$=M1$+” ”
  8. NEXT RI
  9. M2$=MID$(L1$,S1+1,255)
  10. M3$=M1$+L3$+M2$ 
  11. R1$=M3$
  12. RETURN
使用例
  1. CLEAR:CLS
  2. H1$=”タラコ”
  3. H2$=”1”
  4. H3$=”ハ゛ス”
  5. ?H1$
  6. GOSUB @MIDL
  7. ?R1$

それぞれのボタンの入力フレーム数を取得する

使い方

まず、このサブルーチンを呼ぶ前に DIM B(12) と配列を宣言しておいてください。

  • IF B(0)==1 THEN

などとすることで、上ボタンが押された瞬間だけ THEN 以降を実行するということもできます。

プログラムリスト
  1. @BTN
  2. B=BUTTON():BA=1
  3. FOR I=0 TO 11
  4. IF B AND BA THEN B(I)=B(I)+1
  5. IF (B AND BA)==0 THEN B(I)=0
  6. BA=BA*2:NEXT:RETURN
使用例
  1. CLEAR:CLS
  2. DIM B(12)
  3. @LOOP
  4. VSYNC 1
  5. GOSUB @BTN
  6. FOR I=0 TO 11
  7. LOCATE 0,I:?B(I);”     ”
  8. NEXT
  9. GOTO @LOOP

' , ' で区切った文字列を分割する

使い方
  • H$”A,B,C” のように文字列を区切って入れます。
  • そして @BNKT を呼び出すと L$(0~9) にそれぞれ分割された文字列が入ります。
プログラムリスト
  1. @BNKT
  2. F1=0:S1=0:M3$=””
  3. FOR RI=0 TO LEN(H$)-1
  4. F1=0
  5. IF M1$==”,”THEN L$(S1)=M3$:S1=S1+1:M3$=””:F1=1
  6. M1$=MID$(H$,RI+1,1)
  7. M2$=MID$(H$,RI,1)
  8. IF F1==0 THEN M3$=M3$+M2$
  9. NEXT
  10. L$(S1)=M3$:S1=S1+1:M3$=””:F1=1
  11. H$=””
  12. RETURN

指定位置から文字列に上書き

使い方
  • すぐ上に書いた「' , ' で区切った文字列を分割する」のサブルーチンの内容が、プログラムのどこかに必要です。
  • H$ に "文字列 , 開始位置 , 書き込む文字列" と入れて @MIDL2 を呼び出すと、R1$ に上書きされた文字列が入って帰ってきます。
プログラムリスト
  1. @MIDL2
  2. GOSUB @BNKT
  3. M1$=MID$(L$(0),0,VAL(L$(1)))
  4. FOR RI=LEN(M1$) TO VAL(L$(1))-1
  5. M1$=M1$+” ”
  6. NEXT
  7. M2$=MID$(L$(0),LEN(M1$)+LEN(L$(2)),255)
  8. M3$=M1$+L$(2)+M2$
  9. R1$=M3$
  10. RETURN
使用例
  1. CLEAR:CLS
  2. H$=”アイウエオ,2,シテル”
  3. GOSUB @MIDL2
  4. ?R1$
  5. @LOOP
  6. GOTO @LOOP

カラーパレットを白黒化

使い方
  • @COLBW を呼び出すと、カラーパレットが白黒になります。
プログラムリスト
  1. @COLBW
  2. FOR P=0 TO 1
  3. BGPAGE P
  4. SPPAGE P
  5. GPAGE P
  6. FOR I=0 TO 255
  7. COLREAD(”SP”,I),R,G,B
  8. COLSET ”SP”,I,HEX$(FLOOR((R+G+B)/3),2)*3
  9. COLREAD(”BG”,I),R,G,B
  10. COLSET ”BG”,I,HEX$(FLOOR((R+G+B)/3),2)*3
  11. COLREAD(”GRP”,I),R,G,B
  12. COLSET ”GRP”,I,HEX$(FLOOR((R+G+B)/3),2)*3
  13. NEXT
  14. NEXT
  15. RETURN

楕円の描画

使い方
  • 変数を設定して@RINGを呼び出すと、だ円を描くことができます
    • プチコン標準機能のGCIRCLEは、だ円を描くことができません。このプログラムでは、三角関数を利用してだ円を含む円を描くことができます。
変数リスト
変数意味
X始点X
X2終点X
Y始点Y
Y2終点Y
プログラムリスト
  1. X2=0
  2. X=0
  3. Y2=0
  4. Y=0
  5. ’--------------------
  6. @RING
  7. BX=0:BY=0
  8. HANKEIX=ABS(X2-X)
  9. HANKEIY=ABS(Y2-Y)
  10. XS=HANKEIX/2
  11. YS=HANKEIY/2
  12. FOR G=0 TO 360
  13.  X4=COS(RAD(G))*(XS)+X+XS
  14.  Y4=SIN(RAD(G))*(YS)+Y+YS
  15.  IF BX==0 AND BY==0 THEN BX=X4:BY=Y4
  16.  GLINE BX,BY,X4,Y4,COL
  17.  BX=X4:BY=Y4
  18. NEXT
  19. X4=COS(RAD(0))*(XS)+X+XS
  20. Y4=SIN(RAD(0))*(YS)+Y+YS
  21. GLINE BX,BY,X4,Y4,COL
  22. RETURN

GPUTCHRで文字を表示する

使い方

PUT$に文字列、PUTX,PUTYに位置(1ドット単位)PUTCに文字色を入れて呼び出すと文字列をグラフィック面に描画します。

プログラムリスト
  1. PUT$=”HELLO WORLD!”
  2. PUTX=80:PUTY=96
  3. GOSUB @PUTSTR
  4. END
  5. @PUTSTR
  6. DRAWX=PUTX:DRAWY=PUTY:DRAWC=PUTC
  7. FOR I=0 TO LEN(PUT$)-1
  8.  GPUTCHR DRAWX,DRAWY,”BGF”,ASC(MID$(PUT$,I,1)),DRAWC,1
  9.  DRAWX=DRAWX+8
  10.  IF DRAWX>248 THEN DRAWX=DRAWX-248:DRAWY=DRAWY+8
  11. NEXT
  12. RETURN

連想配列のようなもの

使い方

使用している変数やラベル名は全てHT_*

  • プログラム開始時に@HT_INITを呼ぶ
  • HT_K$にキー, HT_V$に値を入れて@HT_SETを呼ぶと代入
  • HT_K$にキーを入れて@HT_GETを呼ぶとHT_V$に値が戻ってくる
プログラムリスト

前半部分はサンプル

  1. ACLS:CLEAR:GOSUB@HT_INIT
  2. HT_K$=”AHO”:HT_V$=”HAGE”
  3. GOSUB@HT_SET
  4. HT_K$=”HAHAHA”:HT_V$=”AHYA”
  5. GOSUB@HT_SET
  6. HT_K$=”HAHAHA”
  7. GOSUB@HT_GET
  8. ?HT_V$
  9. HT_K$=”AHO”
  10. GOSUB@HT_GET
  11. ?HT_V$
  12. END
  13. @HT_INIT
  14.  HT_P=0:HT_M=3000
  15.  DIM HT_K$[HT_M],HT_V$[HT_M]
  16. RETURN
  17. @HT_INDEX ’HT_I=HT_K$
  18.  HT_I=-1
  19.  FOR HT_INDEX_I=0 TO HT_P-1
  20.   IF HT_K$[HT_INDEX_I]==HT_K$ THEN HT_I=HT_INDEX_I
  21.  NEXT
  22. RETURN
  23. @HT_NEWKEY ’HT_K$
  24.  HT_K$[HT_P]=HT_K$
  25.  HT_I=HT_P:HT_P=HT_P+1
  26. RETURN
  27. @HT_GET ’HT_V$=HT_K$
  28.  HT_V$=CHR$(0)
  29.  GOSUB@HT_INDEX
  30.  IF HT_I!=-1 THEN HT_V$=HT_V$[HT_I]
  31. RETURN
  32. @HT_SET ’HT_K$,HT_V$
  33.  GOSUB@HT_INDEX
  34.  IF HT_I==-1 THEN GOSUB@HT_NEWKEY
  35.  HT_V$[HT_I]=HT_V$
  36. RETURN

デバッグルーチン

ヤッフーさんの「デバッグルーチン?」と同じです。

使い方

三行目までをプログラムの始めに、四行目からプログラムの最後に入れます。 そして、プログラム内でDEBUG$にルーチン名を入れてGOSUBします。

プログラムリスト
  1. DEBUG$=””
  2. GOSUB @DEBUG
  3. END
  4. @DEBUG
  5. IF DEBUG$==”@” OR DEBUG$==”” THEN RETURN
  6. IF DEBUG$!=”@” THEN DEBUG2$=”@”+DEBUG$
  7. GOTO DEBUG2$
  8. RETURN