Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
114 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3498
次のページ(過去)
返信[1]
親投稿
ΖΕΧ ZEX256
皆が作ったゲームやツールは下記サイトにあります。 プチコン大喜利 http://smileboom.com/special/ptcm3/ogiri/ プチコン研究所・公開キー保存室 https://miiverse.nintendo.net/users/smileDr/posts プチコン3号まとめWiki - 投稿プログラムコーナー http://wiki.hosiken.jp/petc3gou/?Toukou プチコン3号作品データベース https://docs.google.com/spreadsheets/d/1ihBdTe0w3GRSE-NgzqTo7i0XtMvLKqWTZ6xuVmsHiJ4/
1そうだね
プレイ済み
返信[44]
親投稿
ΖΕΧ ZEX256
再帰呼び出しでは、終了条件を正しく判定しないと無限に再帰呼び出ししてしまい、メモリが不足してエラーになる。 (命令・関数・サブルーチン呼び出しはメモリを消費するため、帰ってこないとメモリが開放されないためメモリが不足になる。)
0そうだね
プレイ済み
返信[43]
親投稿
ΖΕΧ ZEX256
自作命令・関数からネストして自作命令・関数を呼び出すこともできる。 自作命令から、自分自身の関数を呼び出すことも当然できる。 これを再帰呼び出し(リカーシブコール)と呼ぶ。 COUNT_DOWN 10 '自作命令呼び出し DEF COUNT_DOWN CNT '←カウントダウン表示命令 VSYNC 60 '←1秒くらい待つ ? CNT '←カウント表示 IF CNT>0 THEN '←カウントが0より大きければ CNT = CNT -1 '←カウンデウン COUNT_DOWN CNT '←再帰呼び出し ENDIF END
0そうだね
プレイ済み
返信[42]
親投稿
ΖΕΧ ZEX256
この場合、自作命令を呼んだとき変数X,Yが書き換わってしまい LOCATE X,Yが正しく実行できずエラーになってしまう。 こんなことにならないために、自作命令・関数内で変数を使う場合はローカル変数を作り、それを使う。 A=1:B=2 SETA:SETB ? A,B DEF SETA A=10 '←呼び出し元の変数Aを壊してしまう END DEF SETB VAR B '←ローカル変数Bを宣言 B=20 '←ローカル変数Bを変更しても呼び出し元の変数Bは変わらない END これを実行すると 10 2 と表示される
0そうだね
プレイ済み
返信[41]
親投稿
ΖΕΧ ZEX256
自作命令・関数内で独自に変数を使った場合、偶然呼び出し元で使っている変数と名前が被ってしまいバグになることがある。 例えばこんな場合だ。 X=10:Y=5 '←呼び出し元では変数X,Yを使っている ICHIGO_GO '←自作命令を呼ぶ LOCATE X,Y:? "できるかな?" DEF ICHIGO_GO '←自作命令 SPSET 0,0 '←スプライト0番に苺を設定・表示 FOR Y=0 TO 240 STEP 16 '←変数Yを使った FOR X=0 TO 400 '←変数Xを使った SPOFS 0,X,Y '←苺のスプライトの表示位置を変更する NEXT NEXT END
0そうだね
プレイ済み
返信[40]
親投稿
ΖΕΧ ZEX256
命令を自作できるなら関数も自作できる。 DEF~ENDの組み合わせで、関数名の後ろに括弧を書き、引数がある場合、括弧の中に書く。 関数は戻り値があるのでRETURNの戻り値を書く DEF IS_ODD(VALUE) '自作関数 奇数判定 RETURN VALUE AND 1 '←引数が奇数なら1、偶数なら0を返す END '↑自作関数、自作命令は処理の前に書くこともできる、この場合、呼び出すまで中身は実行されない ? IS_ODD(5) '自作関数の戻り値を表示している ? IS_ODD(10)
0そうだね
プレイ済み
返信[39]
親投稿
ΖΕΧ ZEX256
LPRINT 10,5,"まほっ" '←自作命令LPRINT LPRINT 10,6,"プログラミング言語全てわかるマン" LPRINT 10,7,"舛添要一の朝までファミコン" END '←プログラムの終了 DEF LPRINT X,Y,P$ '自作命令 LOCATE X,Y:? P$ END '←自作命令の終わりで、コール元に戻る
0そうだね
プレイ済み
返信[38]
親投稿
ΖΕΧ ZEX256
↑このサブルーチンを使うには、事前に変数をセットしないといけないので面倒だ。 そんな時は、自作の命令があれば便利だ。 自作命令はDEF~ENDの組み合わせで書く 命令に引き渡す引数がある場合は、命令名の後ろに書く DEF 命令名 [引数1][,引数2][,引数3]・・・ 命令の処理 END
0そうだね
プレイ済み
返信[37]
親投稿
ΖΕΧ ZEX256
特定の決まった処理(ルーチン)を、プログラムの複数箇所から呼び出せると便利なことがある。 そんな時はサブルーチンを使う。 サブルーチンはGOSUB命令で呼び出し、サブルーチンの最後に書くRETURN命令で、呼び出し元の次の命令に戻ってくる。 X=10:Y=5:P$="こうげき":GOSUB @LPRINT X=10:Y=6:P$="にげなきゃだめだ":GOSUB @LPRINT X=10:Y=7:P$="おかねだいじに":GOSUB @LPRINT END '←プログラム終了 @LPRINT LOCATE X,Y:? P$ RETURN
0そうだね
プレイ済み
返信[36]
親投稿
ΖΕΧ ZEX256
GOTO命令は多用すると、処理が複雑になり理解し難いプログラムとなる、 それをスパゲティーコードと呼び嫌われている、GOTO命令は最小限に留めるべきだ。 使うのは、例えばメインループの繰り返しや、ネストしたループ処理の内側から一気にループ外に飛び出すときくらいだ。
0そうだね
プレイ済み
返信[35]
親投稿
ΖΕΧ ZEX256
GOTO命令で実行位置をジャンプできる。 GOTOを使うには、ジャンプ先にラベルを記述する必要がある。 ラベルは@(アットマーク)で始まる英数字と_(アンダーバー)で記述できる。 ラベル自体は何も処理されない、場所を示すだけ。 @LOOP '←ジャンプ先のラベル INPUT A$ '←ユーザーに喋らせる言葉をキーボード入力させる TALK A$:? A$ '←A$を喋らせ、表示する IF A$!="" THEN @LOOP '←A$が空じゃなければ@LOOPにジャンプする ↑THENとGOTOが連続する場合どちらかを省略できる。
0そうだね
プレイ済み
返信[34]
親投稿
ΖΕΧ ZEX256
REPEAT VSYNC '←処理が速過ぎるので1/60秒の表示更新まで待つ(必ず必要) B = BUTTON() '←ユーザーの押したボタン情報を変数Bに取得 IF B==0 THEN CONTINUE '←何も押されて無ければループ評価に戻る IF B==#UP THEN ?"↑" '←上が押されたら「↑」を表示 IF B==#DOWN THEN ?"↓" '←下が押されたら「↓」を表示 IF B==#LEFT THEN ?"←" '←左が押されたら「←」を表示 IF B==#RIGHT THEN ?"→" '←右が押されたら「→」を表示 UNTIL B==#A '(A)ボタンが押されたらループを抜ける
0そうだね
プレイ済み
返信[33]
親投稿
ΖΕΧ ZEX256
これらループはネストできる。 ループ内でCONTINUE命令により、すぐループの条件式評価に戻る。 (FOR~NEXTの場合は、変数がカウントアップ/ダウンされた後、ループを抜けるか評価される) ループ内でBREAK命令により、すぐさまループを抜ける。
0そうだね
プレイ済み
返信[32]
親投稿
ΖΕΧ ZEX256
REPEAT ループ処理 UNTIL 条件式 REPEAT~UNTILは後判定型のループで、UNTILまで処理が進むと条件式が評価され、条件が偽である間ループします。 ループするとREPEATに戻り、ループ処理を行います。 注意しなければならないのは、UNTILのループする条件がWHILEとは真偽逆であることです。 REPEAT INPUT A$ '←ユーザーに喋らせる言葉をキーボード入力させる TALK A$:? A$ '←A$を喋らせ、表示する UNTIL A$=="" 'A$が空ならループを抜ける
0そうだね
プレイ済み
返信[31]
親投稿
ΖΕΧ ZEX256
WHILE 条件式 ループ処理 WEND WHILE~WENDは前判定型のループで、ループに入る前に条件式が判定され、条件が真である間ループします。 WENDまで処理が進むと再びWHILEの条件式の評価に戻ります、条件が偽になるとループの中は処理されずWENDの次に進みます。 A$="はい、マイケル" WHILE A$!="" '←文字列も比較できる、A$が空でなければループ処理に入る TALK A$:? A$ '←A$を喋らせ、表示する INPUT A$ '←ユーザーに喋らせる言葉をキーボード入力させる WEND
0そうだね
プレイ済み
返信[30]
親投稿
ΖΕΧ ZEX256
ループ命令でFOR~NEXTは、最初に決まった数だけループするには良いのですが、 ループ回数が判らない場合には、どうすれば良いのでしょうか。 その場合、WHILE~WENDや、REPEAT~UNTILを使うと良いでしょう。 それぞれ使用に適した使い方があります。 WHILE~WENDの特徴は前判定型のループであるため、ループ処理の最低実行回数は0回、つまり条件に依っては1度もループ内に入らず次の処理に抜ける場合もあるということです。 REPEAT~UNTILの特徴は後判定型のループであるため、必ず1度はループに入ります。
0そうだね
プレイ済み
返信[5]
親投稿
ΖΕΧ ZEX256
0で割ることはできません。 理由はネットで検索してみて下さい。 ほぼ全てのプログラミング言語では、0除算エラーになります。 そのためプログラムでは、除算を行う前に分母が0になっていないかチェックするのです。
1そうだね
プレイ済み
返信[1]
親投稿
ΖΕΧ ZEX256
BGマップサイズのことなのかBG画像サイズのことなのかによるけど でんペンさんのPUCHI-MAPならMAPサイズ設定できたはず。 https://miiverse.nintendo.net/users/DENPEN PUCHIPACK v1.81/公開キー:EEVE83NJ これに入ってます。 ロードするソースはこの辺に書いてある https://miiverse.nintendo.net/posts/AYMHAAACAAADVHk04rsiRg
0そうだね
プレイ済み
返信[29]
親投稿
ΖΕΧ ZEX256
まだまだ続きがありますが、1日の投稿回数制限があるので、続きはまた今度
1そうだね
プレイ済み
返信[25]
親投稿
ΖΕΧ ZEX256
文字列の一部を切り出すことができる。 LEFT$  文字列の左から指定文字数を切り出して取得する MID$   文字列の指定位置から指定文字数を切り出して取得する RIGHT$  文字列の右から指定文字数を切り出して取得する 使い方はヘルプで読んでみて下さい。 他にも文字を扱う関数がいろいろあります。 LEN  文字列の文字数を取得する SUBST$ 文字列内を置換することができる(この置換とは文字を別の文字に置き換えること) INSTR 文字列内を検索
0そうだね
プレイ済み