したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が900を超えています。1000を超えると投稿できなくなるよ。

【初心者歓迎】プチコンなんでも相談室【質問専用スレ】

1プチコンまとめWiki管理人★:2012/08/25(土) 15:52:47 ID:???
こちらは【初心者歓迎】の【質問専用スレッド】です。
プチコンで分からない事があったら、こちらで質問してください。
知識のある方は、よろしければ質問への回答のご協力をお願いします。
雑談その他は【プチコン総合スレッド】へお願いします。

★これは2ちゃんねるによく似た見た目の掲示板ですが、
ここは2ちゃんねるではなく、プチコンまとめWikiの一部です。お気軽に書き込んでください。
また、不適切な書き込み・他人が不快になる書き込みは削除する場合があります。

★マナーを守って楽しく書き込みましょう!
・質問前に、自分で出来る事は最大限試してみて下さい。きっと上達につながります。
・質問内容はなるべく詳しく書きましょう。
 ×プログラムを書いたんですが動きません
 ○上記のように命令を書いたんですが、「Syntax Error」というエラーが出てしまいます
・質問者も回答者も気持ちよく話を締められるように、解決したら一言お礼をお願いします。
 (質問者からの返答がなく、解決したのかもよく分からない状態になるのは良くないことです)

2名無しッス:2012/08/25(土) 17:33:34 ID:wr9GNurU
下記のように命令を書いたんですかエラーになります。
STRQ$="アッシュクマエノ モジレツハ"
INPUT STRQ$,BEFORE$

3わぁぃ@ ◆vCvQmsUz9g:2012/08/25(土) 18:26:26 ID:EWBetNiE
>>2
INPUTがエラーなら
INPUT ""+STRQ$;BEFORE$

4わぁぃ@ ◆vCvQmsUz9g:2012/08/25(土) 18:41:32 ID:EWBetNiE
>>3
ついでにからくりを説明すると
””+を挟まないと、STRQ$に対する入力と判断されてしまいます。
つまり
INPUT STRQ$
;BEFORE$
というプログラムを実行するのと同じになってしまうからです。

5名無しさん:2012/08/26(日) 13:21:46 ID:APNwwRNE
なんでも相談室というタイトル、いいですね><

6名無しさん:2012/08/26(日) 14:49:13 ID:ezkTHjvg
説明書が途中で途切れているような気がするんですが……
エラー番号表の「20 RETURN without」から下ってありますか?

7メルビル:2012/08/26(日) 15:03:02 ID:xtetZzjw
21 FOR without NEXT NEXTに対応しないFORがあります。
22 Illegal MML MMLに間違いがあります。

8べるっく:2012/08/26(日) 16:39:48 ID:HWmf70cU
MMLのマクロ定義ってどうやって使うんですか。
例をあげてくれたらうれしいです。

9名無しさん:2012/08/26(日) 18:32:45 ID:ezkTHjvg
>>7
ありがとうございます。

何で途切れてるんだろ……

10わぁぃ@ ◆vCvQmsUz9g:2012/08/26(日) 19:03:05 ID:SXoA3pss
>>9
他にも切れているところがありますね。(TALKコマンド一覧のとこ)
ページ長の設定ミスかな?

11名無しさん:2012/08/26(日) 20:09:12 ID:wknbYeQ.
ver2.1からなったようです
というかずっと前にわぁぃさんたち指摘してませんでしたっけ?

12名無しさん:2012/08/26(日) 22:30:26 ID:2x6rQMno
>>8
一つの場所で質問しましょう

13メルビル:2012/08/26(日) 23:04:32 ID:xtetZzjw
>>11
OFコーナーの5月の過去ログで確認しました。

あとバグのとこに追加しておきました。

にしても説明書が途中でないとか致命的すぎると思うのだが・・・

14メルビル:2012/09/03(月) 22:29:46 ID:xtetZzjw
公式コンテストの「未発表の作品」しか投稿できないとあるのですが、
逆に発表された作品とは何のことでしょうか?
公式プログラムリストの作品でしょうか・・・?

非公式の方に投稿した物も公式の方に投稿してもいいんですかね?

15名無しさん:2012/09/04(火) 02:40:54 ID:nK1/X2/6
やや詳しく書いてあった気がするが

16名無しさん:2012/09/04(火) 21:03:23 ID:kt85aOYU
>>14
要綱を見た限りでは公式と非公式に両方投稿するのは問題ないように思える

17メルビル:2012/09/05(水) 20:16:14 ID:xtetZzjw
>>14
>>15

ありがとです

18hatena ◆V9z5kp4Y0s:2012/09/19(水) 18:17:32 ID:HBECEuqg
短縮について教えて下さい。
何故1のプログラムを2のプログラムに短縮出来るのか分からないです。
短縮は御茶目菜子さんの方が得意かな?

1)IF A>B THEN ? A-B ELSE ? B-A
2)? (A-B)*A>B+(B-A)*B>A

19名無しさん:2012/09/19(水) 20:52:58 ID:gzlx7D4U
>>18
条件式は、真なら1、偽なら0の値になる
それとかけ算をすれば、真ならそのまま、偽なら絶対に0になる
それを利用している

20hatena ◆V9z5kp4Y0s:2012/09/20(木) 16:53:17 ID:7f7AgRy2
>>19

ご回答、有難うございます。

ちなみに、
このプログラムはA、Bで大きい方から小さい方
を引いた答えを表示するプログラムです。

21名無しさん:2012/09/21(金) 23:05:12 ID:QqSn3wXw
グラフィックの命令で棒人間を戦わせるゲームを作ろうとしたのですがループを使って何人か描いたせいか画面がチラついてしまいますどうしたらチラつきませんか?

22名無しさん:2012/09/21(金) 23:42:48 ID:fmsa1Wj6
>>21
グラフィック画面は4枚ある
まずループ1回の中で、今画面に表示されているのと別のグラフィック画面に全部の棒人間を描いて、描き終わったらそれを今見えている画面ととりかえる
2ループ目では前回表示されていた画面に全部描いて、またとりかえる
を繰り返す

説明書の、GPAGEの上級者版を使えばいいはず

23名無しさん:2012/09/22(土) 09:10:18 ID:QqSn3wXw
>>22
ありがとうございます
早速試してみます

24名無しさん:2012/10/02(火) 17:10:05 ID:U06Xtsr2
非表示のGRP面に書いてからGCOPYで表示面にコピーするという手もありかも
個人的にこっちの方が直感的かな

25わぁぃ@ ◆vCvQmsUz9g:2012/10/02(火) 18:59:15 ID:NoInQD8U
>>21
VSYNCで同期をとりましたか?
同期するとちらつきが軽減される可能性があります。
あと、VSYNCを使うと動作速度を一定に保てるというメリットもあります。

26名無しさん:2012/10/02(火) 19:36:06 ID:wYelCPPs
>>24
それだと半端なく重いかも

27ごましを:2012/10/03(水) 18:13:41 ID:1VpQfrHk
RPGのマップの作り方がわからーん

2824:2012/10/03(水) 20:02:57 ID:U06Xtsr2
>>26
とりあえずテストしてみた
http://ux.getuploader.com/petitcom_mkII/download/86/GSHOT.zip
やっぱりGCOPYは重い
けど個人的にGPAGEを切り替えるのはあまり好きじゃないかな
それぞれ使いどころがあるはずだから使い分けた方が良いと思う

というかグラフィック面に描画すること自体重い・・・

2924:2012/10/03(水) 20:08:09 ID:U06Xtsr2
>>28
のプログラムは文字以外全てグラフィック面です。
最初に0と1以外を入力すればよくわかるかもしれません

30名無しさん:2012/10/03(水) 21:21:05 ID:JUnbbvLQ
>>28
それはGCOPYが重いのではなくGPUTCHARが重いだけだと思う。
予め使用するキャラを未使用のグラフィック面に表示しておいて
それをGPUTCHRではなくGCOPYで表示すれば
格段に速くなるのでは?

3124:2012/10/03(水) 22:05:43 ID:U06Xtsr2
>>30
いや、これは画面をちらつかせないようにするために
GPAGEを切り替えながら描画するのと
GCOPYでコピーして表示する速度を比較するために作ったので
あまり描画の速度は気にしてません

32名無しさん:2012/10/03(水) 22:33:27 ID:JUnbbvLQ
>>31
その両者の比較だけならいいけどこのプログラムで
「グラフィック面は重い」と結論づけるのは早計かなと思っただけね。
16x16ならばCPUTCHRと比べてGCOPYは4倍速いので。

33nao:2012/10/04(木) 22:16:45 ID:jaYi29Cg
bgmsetd 128,@mml
BGMPLAY 128
WAIT 300
@mml
data ":0 v100q91o5l8c e q93l4d b g q91l8a g q93l4g f f q91<l8a "
DATA "b q93>l4c a f q91l8g f q93l4e d d q91<l8b >c "
DATA "q93l4d q91l8g a q93l4b q91l8a f q93l4e q91l8a b"
DATA "q93l4b q91l8b a q93l4d >c <b a q63l2.g q94l4.g q91l8g"
DATA "q93l4b g q94l4.a q91l8a q70l2a l4.a q91l8a "
DATA "q93>l4c <a q94l4.b q91l8b q70l2b l4.b q91l8b q93>l4d "
DATA "<b q94>l4.c q91l8c q94l4.c q91<l8b a q54l2^4.d"
と入力したのですが、illegal mml と表示されてしまいます。

34ごましを:2012/10/05(金) 17:23:52 ID:1VpQfrHk
どなたかRPGのマップのつくりかたおしえてください><

35名無しさん:2012/10/05(金) 19:38:15 ID:wYelCPPs
>>34
プチコンはなんでも作れるかわりに
何でも1から作らなければならないから
質問する前に何かやってみてください
初心者向けのページなども検索するといろいろ出てきます

36名無しさん:2012/10/08(月) 11:48:00 ID:BspwhoyY
配列変数で敵などを動かす時の
コツみたいなのありますか?

あまりうまくできません・・・

37名無しさん:2012/10/08(月) 22:18:05 ID:wYelCPPs
配列で動かすって?

38名無しさん:2012/10/09(火) 01:40:03 ID:x6Gutnj.
敵って書き方をしてる辺り、複数キャラを制御する方法の事だろうと思ったので。

古典的な方法としては、
X座標・Y座標・状態・移動ベクトルなど、の4つを登場キャラ数分配列宣言しておいて
for〜next内で処理するのが簡単かと。
例)
for i=0 to 9  ”10キャラ分
if st(i)==1 then gosub @tekimove ”st()=状態用。0=停止・1=移動中
next

@tekimove             ”v()=移動ベクトル用。移動パターン数分用意。
on v(i) gosub @移動パターン1,@移動パターン2,@移動パターン3・・
return

例だとぼんやりして分かり辛いと思うので、
詳しくは公式サイトの初心者向け講座内にインベーダー風敵の制御方法が載ってるので
参考にしてみて下さい。

39?????????:2012/10/09(火) 16:29:57 ID:o8NdnjGc
QRコードの変換の仕方がわかりません(おしえて)

40?????????:2012/10/09(火) 16:34:06 ID:o8NdnjGc
QRコードの変換の仕方がわかりません(おしえて)

41道産子の初心者:2012/10/09(火) 16:55:17 ID:Y4jr5J4c
BUTTON命令がうまくいきません…errorにならず無視されます。

42道産子の初心者:2012/10/09(火) 17:00:20 ID:Y4jr5J4c
↑以下のように書きました。
1行目 B=BUTTON(2)
2行目 IF B==16 THEN (その他命令)

43名無しさん:2012/10/09(火) 17:17:14 ID:BspwhoyY
38
有り難うございます
例があったんで
結構わかりやすかったです

42
ループになってません
@L
IF BUTTON(2)==16 THEN (命令)
GOTO @L
ですね

44わぁぃ* ◆vCvQmsUz9g:2012/10/11(木) 15:16:27 ID:fr/XYcgg
>>43
BUTTON()でBUTTON(0)以外のときは正しく動作させるにはVSYNCが必要です。
システムの都合上、同期する必要があるからです。

こんな感じでどうでしょうか?
@L
B=BUTTON(2)
IF B==16 THEN (命令)
VSYNC 1
GOTO @L

45麿:2012/10/11(木) 20:46:20 ID:wRmpYntQ
VSYNCしたくなければ、メインループで自前の処理を作るのも手かもね。
1ループ前のBUTTON(0)を保存しておいて、現在のBUTTON(0)とビット演算でゴニョゴニョすれば、できる。

46道産子の初心者:2012/10/11(木) 22:19:22 ID:Y4jr5J4c
MML同時鳴らしがうまくいきません…以下のように書きました。
1行目 MMLPLAY "MMLデータ1"
2行目 MMLPLAY "MMLデータ2"
1と2を同時に鳴らしたいのですが、2のみ鳴ります。

47名無しさん:2012/10/11(木) 23:19:03 ID:U06Xtsr2
>>46
このままだとどちらもトラック0で鳴らしているので最後に書いたもので上書きされてしまうわけです。
和音を鳴らしたいという事なら
BGMPLAY":0AAA:1CCC"
という風にすればできるはずですよ。
AAAとCCCのところはMMLデータです。
「:」+「数字」でトラック番号を指定できます(最大8つまで)
この例だと1行以上入力できないのでBGMSETDがおすすめです。

複数のBGMを同時に再生する場合はまず
BGMPLAY 0,BGM番号1
BGMPLAY 1,BGM番号2

などとすればいいはずです。

48道産子の初心者:2012/10/12(金) 15:33:13 ID:Y4jr5J4c
>>42
解決しました。ありがとうございます。

>>47
BGMSETDはどのように使えば良いのでしょうか?

49名無しさん:2012/10/12(金) 18:25:39 ID:U06Xtsr2
>>48
BGMSETD 曲番号,@ラベル
で、そのラベルのある所からMMLデータを入力したDATA文を読み込んで
指定した曲番号に登録します。
最後に「DATA 0」を忘れないように。

曲番号は128〜255までで指定してください。

たとえばこのような書き方です↓
BGMSETD 128,@MML1
BGMPLAY 0,128
@MML1
DATA"MMLデータ
DATA 0

基本的にBGMはBGMSETDしておく方が使いやすいかな。

50名無しさん:2012/10/13(土) 14:43:16 ID:BspwhoyY
>>44

忘れてました
有り難うございます

51名無しさん:2012/10/17(水) 06:59:04 ID:H6RAqyVk
BGMPLAYでMMLを書く時、
複数の行に分けて書く場合はどうすればいいですか?

52名無しさん:2012/10/17(水) 12:43:35 ID:U06Xtsr2
BGMSETD使うとか

A$="MML文字列1"
B$="MML文字列2"
C$="MML文字列3"
BGMPLAY A$,B$,C$
みたいにするとか?

53名無しさん:2012/10/20(土) 23:29:47 ID:qYwRxfAE
CHREDで製作し、SPU0に保存したスプライト(?)はどのようにすれば読み込んで使うことができるのでしょうか?

54名無しさん:2012/10/21(日) 03:20:46 ID:g5sv8cWA
load "spu0:ファイル名"で読み込んだ後、
spset 0,キャラ番号,0,0,0,0
spofs 0,100,100
とすれば、座標100,100の位置に指定したキャラ番号で16×16のスプライトが表示されるはず。
キャラ番号を”0”にするとchred上の一番左上キャラが指定されます。

55ブラアン:2012/10/21(日) 10:20:17 ID:ndNC4pbU
横スクロールアクションゲームを作ろうとしていますが
どうしたらキャラをジャンプさせることが出来ますか?

56RND128:2012/10/21(日) 10:43:46 ID:eWu7lQR.
>>55
大体こんな感じ?

ACLS:CLEAR:SC=130
SPSET 0,130,0,0,0,1
SPANIM 0,2,8:JF=1
@LOOP
VSYNC 1
B=BUTTON()
IF !!(B AND 16)AND !JF THEN MV=-7:JF=1:BEEP 8
MV=(MV+0.3)*JF
PY=PY+MV
IF B AND 4 THEN PX=PX-4:SC=132
IF B AND 8 THEN PX=PX+4:SC=128
IF PX<-16 THEN PX=256
IF PX>256 THEN PX=-16
IF PY>176 THEN PY=176:JF=0:BEEP 9
SPCHR 0.SC
SPOFS 0,PX,PY
GOTO@LOOP

57ブラアン:2012/10/21(日) 15:26:14 ID:UH4K8Ljg
56
ありがとうございます!
これで作れそうです。

58ブラアン:2012/10/21(日) 16:07:01 ID:UH4K8Ljg
>>56
あれ、ジャンプしないんですが。

59ブラアン:2012/10/21(日) 16:16:59 ID:UH4K8Ljg
>>58
あ、できた。
連コメすいません。

60道産子の初心者:2012/10/26(金) 15:03:40 ID:Y4jr5J4c
>>49
DATA文はどのようにすれば良いのでしょうか?

61名無しさん:2012/10/26(金) 17:03:09 ID:U06Xtsr2
>>60
普通にプチコンのMMLを書けばいいだけですよ。
詳しくは説明書の10.サウンド関係の表のMMLコマンドを見てください。
DATA文を複数行書けば長い曲も登録できます。
あと
DATA 0
を最後に書くのを忘れずに。

62名無しさん:2012/10/27(土) 19:26:38 ID:q4bxpT6M
プログラム行数がかなり多くなってきた時に、パソコンで印刷してデバッグできればなぁと思ったんですが。
プリントアウトして確認したりしてる方、いませんか?
もし上手い方法などあれば教えて下さい。

63名無しさん:2012/10/27(土) 21:45:20 ID:wYelCPPs
>>62
パソコンの非公式ツールだけど
ptcファイルをテキストに変換してくれるのがある
それを使えば印刷できる

64名無しさん:2012/10/30(火) 13:16:00 ID:PV1PfbpU
>>63
画像だけでなくテキストにも変換できるツールを作成した方がいらっしゃるんですね。
これで何とか机上で確認できそうです。
ありがとうございました。

65道産子の初心者:2012/10/31(水) 16:12:46 ID:Y4jr5J4c
>>47-49-61
ありがとうございました。僕もまだまだ初心者か…orz

66<削除>:<削除>
<削除>

67<削除>:<削除>
<削除>

69名無しさん:2012/11/22(木) 15:51:10 ID:hUVrJbQM
グラフィックのちらつきについての質問です

N=166 '表示がちらつく適当な四角の個数
@LOOP
VSYNC 1
GPAGE 0,1,0
FOR J=0 TO N-1
GFILL J*3,J*3,J*3+1,J*3+1
NEXT
GPAGE 0,1,1
GOTO @LOOP

上記のようなプログラムを作ったのですが、Nの値が大きくなると表示がちらついてしまいます
ちらつきを防ぎつつより多くの四角を表示したいのですが…
そのためにはVSYNCの引数を大きくする以外に方法はないのでしょうか?
また、自分は>>21の方ではありませんが、>>22の方の書かれた説明の解釈はこのプログラムで正しいのでしょうか?

70名無しさん:2012/11/23(金) 01:35:15 ID:wYelCPPs
違うかも

例えば

GPAGE 0,1,0

描画する

GPAGE 0,0,1

描画する

GPAGE 0,1,0


の繰り返し

71分からず屋:2012/11/23(金) 23:51:06 ID:zJXtbMS.
CHREDにて、作ったキャラの保存の仕方がよくわかりません。(メニューすら開けない) 
どなたか回答お願い致します。

72分からず屋:2012/11/24(土) 00:17:40 ID:zJXtbMS.
度々すみません。71は間違いです。
CHREDにて、作ったキャラの保存の仕方が分かりません。ファイルモードへの切り替え方も分かりません。
どなたか回答お願い致します。

73名無しさん:2012/11/24(土) 02:07:31 ID:wYelCPPs
どこがわからないのか不明
ファイルモードって?

74名無しさん:2012/11/24(土) 02:09:18 ID:wYelCPPs
>>71-72
って総合スレでも質問した上にそちらでは自己解決したと書いてますね

75分からず屋:2012/11/24(土) 07:31:08 ID:zJXtbMS.
73,74さん、ありがとうございました。
この件に関しましては自己解決いたしました。自分の説明の仕方がおかしなところは大変失礼致しました。

76鉄士:2012/12/03(月) 15:00:13 ID:84aNlcPc
質問です。RIGHT$ LEFT$を使えば桁合わせができるらしいのですが、
その合わせるやり方がいまいちです・・・(-_-;)。
テスト用に↓書いてみました。

ACLS:CLEAR
HIGHSCORE=18
HS$=STR$(HIGHSCORE)
HS$=RIGHT$(HS$,4)
PRINT HS$

この場合に、 0018と表記させるにはどうすればいいでしょうか?

77麿:2012/12/03(月) 17:55:44 ID:RVTTyKOY
HS$に"000"を追加すれば、一応はできる
HS$=RIGHT$("000"+HS$,4)とかね
ただ、これだと負の数の時とか大きな数の時とか困る

78名無しさん:2012/12/03(月) 19:50:42 ID:U06Xtsr2
N=桁揃えしたい桁数
S$=STR$(数値)
A$=LEFT$("0"*N,N-LEN(S$))+S$
とかか

79鉄士:2012/12/03(月) 20:00:46 ID:lh8KdX/2
>>77-78 いいですね!ありがとうございます。

80天郷思音 ◆vCvQmsUz9g:2012/12/07(金) 18:00:40 ID:Zm4uFqX6
>>78
A$="0"*(N-LEN(S$))+S$
ってした方が短くなるよ。

81こうやま:2012/12/09(日) 01:52:13 ID:JH19E.oU
 もっと簡単に

IF HIGHSCORE>999 THEN ? "0";
IF HIGHSCORE>99 THEN ? "0";
? HIGHSCORE>;

 という方法もあります。PRINTでも文字列代入でも考えは同じです。

82りぶりゅ:2012/12/12(水) 08:52:23 ID:pc5t.B2M
プチコンのプレイ画像はどうやって撮るのですか。もう一台の3dsでとるしかない?

83名無しさん:2012/12/13(木) 21:48:17 ID:QlmkduVk
カメラで撮ればいい。
つまり捕れればDSiでも3DSでもデジカメでも携帯でもいい。

84りぶりゅ:2012/12/15(土) 11:08:32 ID:pc5t.B2M
そうですね。ありがとうございます

85YHY:2012/12/17(月) 21:47:42 ID:J5b5DdiY
あ。こうやまさんがいらっしゃいますね。
KYMTREKについてお聞きしたいのですが、よろしいでしょうか?

質問なのですが、E(座標:0,7)からK(座標:3,0)に対し、コース6.429で光子魚雷を撃つと
外れてしまいます。
コースの算出方法は、座標:0,0(コース6.0)から座標:7,0(コース7.0)へは、右に7マス
移動するので、1マス辺りの移動量0.143を算出し、それを3マス分増やす事で求めました。

これは、自分の計算方法が間違っているのでしょうか?
それともプログラム側の仕様なのでしょうか?

後者であるのならば、プログラムの何処を修正すれば精度(?)を上げる事が出来るのでしょうか。
ご返答頂ければ幸いです。

86こうやま:2012/12/18(火) 20:35:01 ID:M/jh0KMQ
YHYさん

 えーと、少々お待ちください。こちらも計算と文章をちゃんとしないと
返答できないので、一週間ほどお待ちいただけますか。
あとメールアドレス、mixi、ツイッター、FACEBOOKのいずれかのIDを
教えて頂けると、やりとりが円滑になるので助かります。

87YHY:2012/12/19(水) 07:58:09 ID:J5b5DdiY
>一週間ほどお待ちいただけますか。
ご返答、ありがとうございます。全然OKです。
先日投稿したプログラムに適用出来れば良いなーと思っていただけなので。
むしろ、お手数をおかけしてしまい申し訳無いです。
あと、ID関係については家族・友人以外に教えないようにしていますので、出来ません。
ご容赦頂ければ幸いです。

88こうやま:2012/12/20(木) 00:58:13 ID:M/jh0KMQ
 えーとスタートレックゲームの基本、およびプログラム中におけるコースの
求め方をどれだけ理解しているかで、回答が違ってしまうんですが、とりあ
えずこのコメントから行きます。
文章を読むと、もしかしてYHYさんはスタートレックのコース計算を

「最初の座標と目的地の座標を求め
 縦方向か横方向どちらかから加減乗除で求める」

 と思われていますか?ではなくて

「周囲を360度制か、小数点込み0〜9未満どちらかで入力し、この値をラジ
 アン(半周でπ、全周でπx2になる)に再計算して、三角関数COS,SINで
 縦横の移動分を求める」

 という方法を使います。もし前者のまま覚えているとしたら認識ミスです。
後者を理解しているなら…私の認識ミスとゆーか、私が質問に意図をまだ正確
に汲み取れていません。ゴメンナサイ(汗)
とりあえずこの返事にコメントして下さい。必要な事を続けて質問します。

 また#85の座標と角度で簡単なテストプログラム(8x8のマス移動)を作って
動かしてみましたが、目的地座標がX=2.8強となり、3には届きません。
YHYさんの計算方法間違い、または6.429が細かすぎる事による誤差(プチコン
のバグでなくゲームのバグ)と考えられます。
計算に使う円周率は、実数で"3.14159265"を使っています。

 テストプログラムは希望されるなら、リスト写真かQRを掲載します。

89YHY:2012/12/20(木) 07:50:20 ID:J5b5DdiY
「入力されたRとWSから、WS1あたりの移動量VX・VYを求め、その値をSX・SYにプラスし、
計算後の移動先S(X,Y)に何も無ければ、再度VX・VYをプラスする。
これをWSが0になるか、移動先が8X8のエリアからはみ出すか、移動先に障害物がある
まで繰り返す」
という感じで捉えているので、多分後者の方で理解出来ているのでは無いかと思います。
お手数をおかけしますが、引き続き説明をお願いします。

>テストプログラムは希望されるなら、リスト写真かQRを掲載します。
是非、お願い致します。

90こうやま:2012/12/20(木) 15:48:46 ID:M/jh0KMQ
 にゃるほろ。恐らくこうなると思っていましたが、そのテストプログラム
のQRを載せます。実行して画面を見た後、リストを研究して下さい。
百聞は一見にしかずで、説明不要でしょう。
http://www1.odn.ne.jp/beni/petitcom/climb/qr01.gif

 なおこのアドレスとQR画像ファイルですが、近い将来掲載予定の
新作ゲームのアドレスを間借りしているので、しばらくはこのまま
残りますが、新作ゲームがアップされるとこのQRも消えます。
ご了承ください(実はWikiへの引っ越しも考えてたりして…)

91YHY:2012/12/20(木) 19:52:07 ID:J5b5DdiY
ありがとうございます。早速頂きました。
今、ちょっと別件で立て込んでいるので(投稿2日目で新機能追加しようとか、正気か…)
後日ゆっくり研究させて頂きたいと思います。
また何かありましたら、その時はよろしくお願い致します。

追伸:新作ゲーム楽しみにしています。

92名無しさん:2013/01/13(日) 02:06:40 ID:Iika6cv6
もっのすごい初心者なんですが
INPUTってかならず文末に?が表示されるんですか?
表示しない方法がしりたいのですが…

93:2013/01/13(日) 16:41:18 ID:bBe4DEEI
LINPUT使えばでないですよ「?」
LINPUT A$

94名無しさん:2013/01/13(日) 23:35:12 ID:Iika6cv6
93>>
ありがとうございます!
もう一つだけ質問したいんですが
たとえば 123 という3桁の数字から
2桁目だけの 2 という数字だけを返したい場合は
どうすればいいでしょうか
いろいろ試して見たりしたんですが
結局わからず詰まっています。

95名無しさん:2013/01/14(月) 10:25:24 ID:IPeHeB1A
>>94
VAL(MID$(STR$(123),2,1))
でどうかな?

96名無しさん:2013/01/14(月) 11:27:25 ID:JUnbbvLQ
>>94
0OR(123%100)/10

9795:2013/01/14(月) 13:26:26 ID:IPeHeB1A
すまん
VAL(MID$(STR$(123),1,1))
だった。

>>96
の方が短くまとまってるね・・・

98名無しさん:2013/01/14(月) 15:18:16 ID:Iika6cv6
>>96さん
>>97さん
ありがとうございます! >>96のほうが使いやすそうなのでこっちを使わさせて
もらいます。 >>97さんもありがとうございました。

99名無しさん:2013/01/20(日) 13:04:04 ID:aeNdmF8g
はじめて質問させていただきます。
BASICは初めてなので、お教え頂けるのであればできるだけ分かりやすくお願いします。

質問です。
RPGをつくったのですがSCUを背景として使っていたので沢山あり、
MAP1ではSCU:01とSCU:11を読み込むといった形ですので、MAPのぶんSCUが増えていってしまいます。
パッケージ型というのも試してみたのですが、01と11しかまとめられませんでした。

どうにかまとめる方法はございませんでしょうか?
よろしくお願いします。

100名無しさん:2013/01/27(日) 21:40:48 ID:hpuA6zL6
scuをロードしてから、BGREAD()読み込んでデータ文にしてプログラムに埋め込むというのが一番無難ですね。

CLEAR
DIM BGDATA(64*64,4)
LOAD"SCU0U:***"
BGPAGE 0
FOR I=0 TO 64*64-1
BGREAD(0,I%32,I/32),CHR,PAL,H,V
BGDATA(I,0)=CHR
BGDATA(I,1)=PAL
BGDATA(I,2)=H
BGDATA(I,3)=V
NEXT
これでチップデータを受け取ってあとはKEY$とかに書きだしてプログラムに書き込めばおk

101道産子の初心者:2013/01/30(水) 07:51:58 ID:Y4jr5J4c
INPUTで、文字数や文字種が・・・だったら・・・する、的なことって出来ますか?

102ウイング:2013/01/30(水) 14:52:56 ID:Z9wHmIOQ
data文でマップ表示って具体的にはどんな仕組みになっているのでしょうか

103名無しさん:2013/01/31(木) 21:51:21 ID:hpuA6zL6
>>101
いまいち質問の趣旨がわかりませんがこういうことでしょうか?

INPUTでは文字列を受け取るだけでその他の処理は関数などで行う。

INPUT A$で文字を受け付ける。
MOJISUU=LEN(A$)でA$(INPUTで受け取った文字列が格納されている変数)の文字数

SUUCHI=VAL(A$)でA$が数値ならその値、そうでなければ0が入る
これをIFとかですればおk。

例)もし文字数が8文字以上ならそれ以降を切り捨てる。
INPUT A$
IF LEN(A$)>8 THEN A$=LEFT$(A$,8)

104道産子の初心者:2013/01/31(木) 21:59:46 ID:Y4jr5J4c
>>103
ありがとうございます!

105名無しさん:2013/01/31(木) 22:08:54 ID:hpuA6zL6
>>102
簡単な2DRPGの場合
数文字単位で1チップごとの属性を決めます。

例えば、草原=0、土=1、岩=2、壁=3と決め、
壁壁壁壁壁壁壁壁
壁土土土土土土壁
壁土岩岩土岩土壁
壁土土草草土土壁
壁土草草草草土壁
壁草草草草草草壁
壁壁壁壁壁壁壁壁
このようなマップを作るとします。すると、データ文では、先ほど決めたルールにそって入力していきます。
DATA 33333333
DATA 31111113
DATA 31221213
DATA 31100113
DATA 31000013
DATA 30000003
DATA 33333333
こうなります。
次に、READ命令でDATA文の内容を受け取ります。
DIM MAPDATA$(7)
FOR I=0 TO 6
READ MAPDATA$(I)
NEXT
これで変数にマップデータが入りました。
次にX座標、Y座標の指定した所のデータを読み取ってみます。
X座標は文字列の位置(30110103)のX番目の文字=MID$関数で取り出し。
Y座標はお分かりの通り変数MAPDATA$(Y←これです。)
つまり、
D$=MID$(MAPDATA$(Y),X,1)
これでD$に指定座標の情報が入ります。
あとはこれでBG敷いたりします。
実際にはこんな単純ではありませんが・・・

106nao sato:2013/02/01(金) 21:05:17 ID:fC02mwWs
LOADする時実行中に変数で開けないかな?

107名無しさん:2013/02/02(土) 11:34:41 ID:alZpQLsQ
R$="PRG"
L$="SAMPLE1"
LOAD R$+":"+L$と言う意味?

108名無しさん:2013/02/06(水) 20:16:11 ID:ch2uA5vg
プログラムを投稿しようと思いqrコード変換ツールを使い変換してそれを一括保存しようとしたらwebに問題があるためページを開き直しましたと表示されて保存できません
どうすれば保存できますか?

109:2013/02/07(木) 18:55:30 ID:bBe4DEEI
スクリーンショットで撮るのが一番楽だと思うな

110名無しさん:2013/02/10(日) 11:43:10 ID:ch2uA5vg
>>109
ありがとうございます
さっそく試してみます

111名無しさん:2013/02/15(金) 14:21:53 ID:WlXdzung
下画面にグラフィック面とGPUTCHRを使ってスプライトを表示したいのですが、GPAGE 1を使っても表示できません。
VISIBLE 1,0,1,1,1,1 も使っていて、上画面への描写は問題なくできます。
公式サイトの3行プログラムの頭にGPAGE 1とVISIBLE 1,0,1,1,1,1を追加してテストもしてみましたが、ダメでした。
GAME6やDRWEDでは問題なく下画面のグラフィック面が使えるので、何が原因かわかりません。
どなたか、できるだけわかりやすい下画面のグラフィック面を使うプログラムのサンプルを見せてもらえないでしょうか。

112名無しさん:2013/02/15(金) 14:57:46 ID:eotW/ifA
>>111
バグか仕様かは分かりませんがVISIBLEのパネルの項目を0にすると
下画面のスプライト、グラフィック面も表示されなくなってしまいます(BG面と背景色は表示される)
VISIBLEを使わずにPNLTYPE"OFF"を使ってみてください。

113名無しさん:2013/02/15(金) 18:15:09 ID:WlXdzung
>>112
表示できました!ありがとうございます!
説明書にも書いてないあたり、バグなのでしょうか。

114名無しさん:2013/02/16(土) 19:41:16 ID:NhMqUmyY
グラフィック命令?で
縦に潰れた曲線を
人間が丸を書くときのように
描くにはどうすればいいですか?

115名無しさん:2013/02/17(日) 21:04:25 ID:hpuA6zL6
>>114
楕円って言うことですかね?
楕円なら:http://wiki.hosiken.jp/petc/?Sample
それとも普通に曲線ですか?
ベジェ曲線なら:http://wiki.hosiken.jp/petc/?Toukou%2F%A5%D9%A5%B8%A5%A7%B6%CA%C0%FE%A4%F2%C9%BD%BC%A8%A4%B9%A4%EB%A4%C0%A4%B1%A4%CE%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0
どちらもルーチン内にウェイトを入れればゆっくり描画しますよ。

116名無しさん:2013/02/17(日) 21:48:07 ID:NhMqUmyY
115
解決しました
ありがとうございました

117道産子の初心者:2013/02/19(火) 17:30:29 ID:Y4jr5J4c
LINPUTとAPPENDの掛け合わせがうまくいきません・・・。DSOSAP(任意の二文字)でAPPENDしたいのですが、

LINPUT"(文字列)";A$
APPEND"DSOSAP"+A;

と書いて実行するとIllegal function callのエラーが出ます。

118いったん:2013/02/19(火) 20:35:49 ID:hpuA6zL6
一つ目:
Aじゃなくて A$ですよね・・・
2つ目:
「;」はPRINT命令で文字列や変数を続ける時に使う、よって変数操作や他のメソッドを使うときは意味ない、と言うかエラーになります。
こっからはアドバイス。
3つ目:
A$を入力させるまではいいですが、もしユーザーがアルファベットとアンダースコア以外のものを入力したり、2文字以上入力したときにはエラーになってしまう。なのでエラーチェックをするルーチンを入れると良い。

A$=LEFT$(A$,2)
ERR=FALSE
FOR I=0 TO 1
IF MID$(A$,I,1)<"A" AND MID$(A$,I,1)<"Z" THEN ERR=TRUE
NEXT
IF ERR THEN A$="":BEEP 2

みたいな感じで。
最後ですが、やはりプログラミングで上達するには自分でいろいろ試行錯誤するのがいちばんです。なので、すぐに質問せず、自分でなぜエラーになるのか考えてみましょう。

119いったん:2013/02/19(火) 20:39:11 ID:hpuA6zL6
>>118
ごめんなさい。違いました。
誤)
IF MID$(A$,I,1)<"A" AND MID$(A$,I,1)<"Z" THEN ERR=TRUE
正)
IF MID$(A$,I,1)<"A" AND MID$(A$,I,1)>"Z" THEN ERR=TRUE

120otya:2013/02/20(水) 01:02:41 ID:alZpQLsQ
そもそもAPPENDは実行モード専用なので使えないかと。
INPUT A$
CLS
LOCATE 0,3
?"APPEND"CHR$(34)"DSOSAP"A$
STOP
とすれば
BREAK in 5
OK
          
APPEND"DSOSAPxx
になりエンターを押すことでAPPENDと言う事は可能。

121otya:2013/02/20(水) 01:10:32 ID:alZpQLsQ
CLS
INPUT A$
LOCATE 0,2
?"APPEND"CHR$(34)A$
LOCATE 0,0
STOP
でした。

122道産子の初心者:2013/02/20(水) 15:44:58 ID:Y4jr5J4c
>>118-119
ありがとうございます。

123プチコン初心者:2013/02/25(月) 15:31:06 ID:tEvfTVvg
文字だけでマップをスクロールしながら動く見下ろし型のアクションゲームを作ってて
どうやら描画するときの処理落ちでバグってしまいます
裏面に描画してそれを表面に写すみたいなことはできないんでしょうか?

124:2013/02/25(月) 15:57:25 ID:bBe4DEEI
どんなバグ?
というか、文字だけでやるのか。

125名無しさん:2013/02/25(月) 17:34:05 ID:tEvfTVvg
http://www1.axfc.net/uploader/so/2807638
遅くなったけどプログラムのQRコードです
初心者でスパゲティコードになってますが

126いったん:2013/02/25(月) 20:33:03 ID:hpuA6zL6
>>125
ではまずバグ修正の方からしていきます。
このバクの最大の要因はプレイヤーの描画にあります。
56行目のプレイヤーの表示ですが、このままだとプレイヤーが横に32以上行くと確実に表示できなくなりますね。これを直しましょう。
ここからは私が考えた方法です。思っていたのと違うかもしれませんがその辺のとこよろしくお願いします。
私はプレイヤーを端に行かない限り中央にに固定させるという方法にしました。ドラクエ風ですね。
21行目
M_X=16:M_Y=12
21,22,23,24行目のIF文後ろにそれぞれ
M_X=P_X-CAMERA_MLX
M_X=P_X-CAMERA_MRX
M_Y=P_Y-CAMERA_MUY
M_Y=P_Y-CAMERA_MDY
を追加し、
56行目P_X,P_YをM_X,M_Yに変えましょう。
一応これで直ったかと思います。
ここからアドバイスです。
ボタン入力待ちの時は画面を更新する必要はないのでボタンが押された時にフラグを立ててその時だけ表示するようにしましょう。
プレイヤーが表示のたびにチラチラしてしまうのでスプライトにするか、もしくは@BのFORループ内にIFで埋め込むようにするといいでしょう。
うまくできているので頑張ってください!

127名無しさん:2013/02/25(月) 21:25:35 ID:tEvfTVvg
>>126
おおっ普通に移動できてる
こういうのを思ってました!
本当にありがとうございます

128いったん:2013/03/02(土) 14:38:16 ID:hpuA6zL6
TCHST、TCHX、TCHYのシステム変数は更新周期が1フレームなのでしょうか?
初代と挙動が違う気がするのですが。

129<削除>:<削除>
<削除>

130たかさん:2013/03/07(木) 20:36:36 ID:xs/FmBA.
コンテストのプログラム、スプライトを使っているのですが、
スプライト同士を衝突したとき衝突判定を出す方法を教えてください。
(OFコーナーより)

131<削除>:<削除>
<削除>

132ブラアン:2013/03/09(土) 22:17:03 ID:pMpZNWxY
>>105
すいません。その仕組みのサンプルを作って頂けますか?
まだ分からないところがあるので……
>>102の人とは別人です。

133名無しさん:2013/03/11(月) 16:08:19 ID:ENDSji2c
旧公式サイトの投稿プログラムにデータ文を使ったやつがいくつかあるはず。説明入りのプログラムもあるので多分役に立つはず。

134<削除>:<削除>
<削除>

135道産子の初心者:2013/03/17(日) 19:27:28 ID:Y4jr5J4c
MEMとプログラムの掛け合いがよく分かりません。誰か説明していただけないでしょうか?

136 ◆QoQoQoz60Y:2013/03/17(日) 20:49:28 ID:JUnbbvLQ
>>135
http://ww5.tiki.ne.jp/~ochame/petitcom/tips/save.htm

137道産子の初心者:2013/03/17(日) 21:09:00 ID:Y4jr5J4c
>>136
ありがとうございます。

138<削除>:<削除>
<削除>

139catman:2013/03/22(金) 18:29:08 ID:gj1wL7WU
VISIBLEってなんですか?

140 ◆QoQoQoz60Y:2013/03/22(金) 21:45:17 ID:JUnbbvLQ
>>139
日本語に訳せば「目に見えるもの」
コンソールやスプライトやGRPやBGなどのどれを可視化するのかという設定を行う命令。
標準ではすべて可視化された状態なので見えたら困るものだけを0に設定するとよい。

141catman:2013/03/22(金) 22:10:36 ID:gj1wL7WU
>>140
ありがとうございます。

142suma:2013/03/26(火) 13:27:15 ID:ch2uA5vg
今画面にPRINT命令でたくさんの文字を表示するプログラムをつくっているんですが
文字がちらついてよく見えません
どうしたらちらつかなくなりますか?
教えてくださいお願いします

143名無しさん:2013/03/26(火) 18:01:04 ID:venckzHs
キャラクター(spu)を初期化する命令ってありますか?

144 ◆QoQoQoz60Y:2013/03/26(火) 18:33:49 ID:JUnbbvLQ
>>142
文字消去にCLSを使わない
1フレーム以内に表示を行う

>>143
CHRINIT "SPU0" でバンク0を初期化できる
SPUをすべて初期化するならばFOR〜NEXTを使い
バンク0〜バンク7を初期化すればよい

145名無しさん:2013/03/26(火) 19:01:33 ID:1BUnCwVU
公式のQRコード変換ツールって、スマホからでは利用できないんでしょうかね?
Flashplayerを入れて、最初のページは出ますが、変換をタップすると、playerが停止します。

146SUMA:2013/03/26(火) 20:03:48 ID:ch2uA5vg
>>144ありがとうございます
さっそく試してみます

147名無しさん:2013/03/26(火) 23:23:37 ID:venckzHs
>>144 ありがとうございます。

148<削除>:<削除>
<削除>

149いぬまろ:2013/03/28(木) 20:44:36 ID:tG0JS18k
>>130

遅くなってすまん

SPCOLで設定してSPHITをすればおk

150apoi:2013/03/29(金) 19:35:58 ID:4SI9qRrA
MMLについて質問です。
四分音符は長さはL4、三連符は四分音符に対して1/3だからL12、
三連符一つの三連符、つまり四分音符を9等分した長さはL12に対して1/3だからL36だと考えました。
ところがそうするとわずかですがズレが生じます。
三連符の三連符の音の長さはLいくつにすればいいのでしょうか?

151一般人:2013/03/30(土) 15:13:04 ID:X//xAbqM
アナログ時計の時針について質問です
アナログ時計を作っているのですが秒針分針はできたのですが
時針は午後1時(13)になると止まってしまいます。
この13時を1時に変換できないでしょうか?
まだ改善点は色々ありますがお願いします
以下時針サンプル
GPAGE 0
CLS
@LOOP
GCLS
A = VAL(MID$(TIME$,0,2))
H = 30*A
H = RAD(H) ここで13を渡してしまってOUT OF RANGE
X = 100*COS(H)
Y = 100*SIN(H)
GLINE 100,100,X+50,Y+50,4
WAIT 1
GOTO @LOOP

152いったん:2013/03/31(日) 00:05:46 ID:no6fVRqg
>>150
バグかどうかは分からないですが、Lの値を大きくするとズレが生じるみたいです。
私も5連符とかで結構苦戦しました。テンポを早くするなどして対応してみてください。

153いったん:2013/03/31(日) 00:11:01 ID:no6fVRqg
>>151
6行目
H = 30*(A%12)
でおk
一応改善点。知ってるかもしれませんが
TMREAD(TIME$),H,M,S で時間を受け取れます。

154apoi:2013/03/31(日) 19:10:38 ID:4SI9qRrA
>>152
回答ありがとうございます。プチコン側の不具合のようなのですね。
9連符は装飾音符用なのでとりあえずは32分音符か64分音符で代用しようと思います。

155一般人:2013/03/31(日) 23:46:05 ID:X//xAbqM
>>153
回答ありがとうございます
うまく動作するようになりました。
TMREADは忘れてました・・・^^;

156一般人:2013/03/31(日) 23:57:38 ID:X//xAbqM
重ねて悪いのですがこの状態だと
90度針の位置が違って横向き用になってしまうのですが
どうすればいいのでしょうか

角度を90引くとRADが0~360にしか対応していなく
このプログラムはほかの言語のやつを見まねて作ったので
よくわからないところが多いです

157 ◆QoQoQoz60Y:2013/04/01(月) 01:52:39 ID:JUnbbvLQ
>>156
角度をA度とするとRAD((A+270)%360)で90度マイナスしたことになる。
もしくはSIN(A-90)→-COS(A)、COS(A-90)→SIN(A)に置き換えてもいい。

158E.T:2013/04/03(水) 13:18:33 ID:8RO4zsqM
BGREADってどう使うの?
例えばキャラがブロックにぶつかると反応するとか??

159いったん:2013/04/03(水) 21:45:50 ID:no6fVRqg
>>158
BG面においてるチップの状態を受け取る。キャラ番号、パレット番号、反転など
多分E.Tさんが言うキャラとはスプライトのことだと思いますがスプライトには全く干渉しません。
スプライトとBGは別物だと思ってください。

160いったん:2013/04/03(水) 21:49:49 ID:no6fVRqg
>>158
別の板で言ってたキャラの当たり判定ですが、前述したとおりスプライト同士ならできます(SPHIT関数)が、BGにあたったかは自分でプログラムを組むしかないです。
IF X>BLOCKX AND X<=BLOCKX+15 AND Y>BLOCKY AND Y<=BLOCKY+15 THEN
みたいな感じで。

161いぬまろ:2013/04/04(木) 06:22:20 ID:tG0JS18k
>>160

別にBGREAD(スプライトの座標/8)でいいのでは?

162E.T:2013/04/04(木) 12:46:46 ID:CKA.7llE
実際にやっていますができません!

163いったん:2013/04/04(木) 13:35:04 ID:no6fVRqg
>>162
qrコードうpしてくれたら対応できるかも。

164E.T:2013/04/04(木) 14:48:04 ID:EBRtOB7E
すいません。PC故障中でWIIUからやっています・・・

165E.T:2013/04/04(木) 14:49:18 ID:EBRtOB7E
もしかしたらそちらでサンプルをつくってもらえばこちらでやってわかるかもしれません。

166E.T:2013/04/04(木) 14:54:25 ID:EBRtOB7E
ちなみに
キャラ=スプライト
壁 =BG
です。

167一般人:2013/04/04(木) 19:09:05 ID:X//xAbqM
>>157
回答ありがとうございます
これでやっと普通の置時計として使えます(返信遅れてすいません)

168いぬまろ:2013/04/04(木) 21:43:46 ID:tG0JS18k
>>162

自分がやってるのは

BGREAD(レイヤー,スプライトのX座標/8,スプライトのY座標/8),C,H,P,L

IF C==ブロックのキャラ番号 THEN 〜

169いったん:2013/04/04(木) 22:00:04 ID:no6fVRqg
>>165
べっ・・・べつにあんたのためにサンプル作ったんじゃないんだからねっ!

わかりづらいかも。いぬまろさんの実践的な感じで(少し違うけど)。
http://www1.m.jcnnet.jp/hurasa/hp/img/BGSAMPLE.png

170いぬまろ:2013/04/04(木) 22:24:04 ID:tG0JS18k
>>169

だいたいそんな感じです

ありがとうございますm(_ _)m

171E.T:2013/04/05(金) 10:48:39 ID:5UTs3ZM.
>>165
ありがとうございます
やっとわかったような気がします…?
きがするです…

172E.T:2013/04/05(金) 11:43:48 ID:5UTs3ZM.
http://gazou.yakiuchi.com/
こんなのを作ったんですけど次のことがわかりません
敵の表示:敵を表示させるとドットが消えてしまう
敵の移動:RNDでやると変な動き

上のリンクは敵なしです
どうすれば敵を表示・移動できますか?

173いったん:2013/04/05(金) 17:20:33 ID:no6fVRqg
>>172
なんかQRページからだと見えないですよ。自力で見たけど。
パックマンですね分かります。

敵アルゴリズムは向きを決めて進むのが基本。壁があったら曲がるとか、左右に道があればそっちに曲がるとかプログラムでつければまともに動くようになります
まあランダム任せは良くないですね。
あとドットが消えることですが、敵がドットをまたぐときにフラグを立てておいて通過したあとにフラグがあればドットを書きなおすという方法でいいと思います。

サンプル?そんくらい自分で作りなさいよ!他人に頼って何が得になるわけ?
まあ・・・でも、せっかくサンプル作ったんだし・・・
そんなに見たいならみせてやらなくもないわよ。
qr置いておくから勝手に見れば?
http://www1.m.jcnnet.jp/hurasa/hp/img/MAZESAMPLE.png

174E.T:2013/04/05(金) 19:35:39 ID:/5Coqq7I
>>173
ありがとうございます。
分かるようになりました!

175初心者:2013/04/06(土) 11:00:35 ID:arPg4cGQ
BGREADの使い方がわかりません
>>165を見てみましたがまったくわかりませんです。
僕の場合
BGREAD(1,X/8,Y/8),C,H,D,L
でやっていますが芝生とブロックのBGがありPRINTで値を見ていると
なぜか芝生にいるのにぶろっこの値になっています。Cの値です。
ちなみにX,Yはスプライト(プレイヤー)の座標です。

176いったん:2013/04/06(土) 15:16:46 ID:no6fVRqg
>>175
qrうpしてくれると対応できるかもしれないです。
暫定的に言うと16*16の大きさのキャラの場合
SPHOME 管理番号,8,8にするor
BGREAD(1,(X+8)/8,(ryとかでできるかも?

177初心者:2013/04/06(土) 18:59:00 ID:arPg4cGQ
>>176
http://gazou.yakiuchi.com/damedayo.png
QRうpしました。
まったくわかりません

178初心者:2013/04/06(土) 19:08:46 ID:arPg4cGQ
>>177
すいません
なんかわからないけどサーバー側のほうでなんかエラー403が起こっています
http://gazou.yakiuchi.com/ror.png
こちらにもう一枚用意しました

179初心者:2013/04/06(土) 19:15:08 ID:arPg4cGQ
連コメすいません
またエラー403なったみたいです
どうしてでしょう?

180初心者:2013/04/06(土) 19:22:16 ID:arPg4cGQ
連コメすいません
こちらではどうですか?
http://gazou.yakiuchi.com/puti.htm
なんかまた403でそう・・・
コメ投稿前は大丈夫なのに

181 ◆IGEMrmvKLI:2013/04/06(土) 19:34:05 ID:RrMc/..Y
こちらの環境では177以外は見れました

182初心者:2013/04/06(土) 19:44:35 ID:arPg4cGQ
>>181
そうですか!

183初心者:2013/04/06(土) 19:45:33 ID:arPg4cGQ
あ、すいません
時間の問題でした…

184いったん:2013/04/06(土) 20:31:46 ID:no6fVRqg
出来ればスクリーンの方もうpしていただけますか?
これだけだとなんとも・・・

185いったん:2013/04/06(土) 20:40:06 ID:no6fVRqg
>>177
どうしたいのかよくわからないのですが、
1,移動系ルーチンのBGREADを削除
2,変数を見るのところにBGREAD(レイヤ,PX/8-1,PY/8-1),C
でいいですかね?

186初心者:2013/04/06(土) 20:42:17 ID:LfxdWkEA
あ、すいません
でもスクリーンは適当なんで
壁がキャラ番号782なので適当に書いてください

187いったん:2013/04/06(土) 20:57:30 ID:no6fVRqg
これでいい?
http://www1.m.jcnnet.jp/hurasa/hp/img/Pikumin.png

188初心者:2013/04/07(日) 09:08:34 ID:YVs9In42
>>187
自分でも作れるようになり仕組みもわかるようになりました
ありがとうございます

189初心者:2013/04/07(日) 15:17:25 ID:HnOvR36g
なんかここ最近質問多くてすいません
文字での自動迷路作成方法はできるのですが
BGのやり方がわかりません
ゲームではなく迷路を作成するだけのプログラムはどうしたらいいですか?
BGは壁が721,722,753,754
床が131,132,163,164です。
いろんな迷路が自動で作成され大きさはなるべく大きいほうがいいです

190 ◆IGEMrmvKLI:2013/04/07(日) 17:01:04 ID:RrMc/..Y
>>189公式に迷路製作プログラムがある。

191E.T:2013/04/07(日) 18:02:04 ID:HnOvR36g
>>190
ありがとうございます

192yuy@:2013/04/08(月) 22:19:50 ID:0NZvIRWQ
こんばんは。
ここだと質問できるので、早速質問です。
プチコンのスナップショットを作るプログラムはどうやって作るんですか?
特にスプライトの回転拡大のアルゴリズムがわかりません!
それがわかれば早速取り掛かろうと思います!

193初心者:2013/04/09(火) 13:54:07 ID:gULkyh52
こんにちは
ちょっとまたわからないことが出たので質問します
http://wiki.hosiken.jp/petc/?Toukou%2F%BC%EA%BD%F1%A4%AD%C6%FE%CE%CF%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0
みたいに手書き入力はどうするんですか?
数字の機能だけでいいです。
自分で作ろうとしましたが仕組みが全く分かりません

194初心者:2013/04/09(火) 14:00:24 ID:gULkyh52
また質問ですが
ブロック式ではなく壁式迷路(初めからあるやつ)みたいなのは
どうすればいいですか?

195いったん:2013/04/09(火) 19:30:03 ID:no6fVRqg
>>192
GPUTCHRでは回転、拡大(0〜200%)は無理なのでプログラムでどうにかするしかないですね。
1ドットずつ中心からの距離、角度を三角関数使って
回転→角度を足す
拡大→×n%する
で、サイン関数で位置出せばなんとかなると思います。
回転・拡大が必要ないなら
http://wiki.hosiken.jp/petc/?cmd=read&amp;page=Toukou%2F%B4%CA%B0%D7%A5%B9%A5%AF%A5%EA%A1%BC%A5%F3%A5%B7%A5%E7%A5%C3%A5%C8%A5%AB%A5%E1%A5%E9&amp;word=%A5%B9%A5%AF%A5%EA%A1%BC%A5%F3%A5%B7%A5%E7%A5%C3%A5%C8%A5%AB%A5%E1%A5%E9

>>193
どうやら線で区切っている9つのマスの移動やタッチなどを読み取っているようです。
0は離れている時ですね。
例)中央の上から下に引くと、
2580となります。
数字だけでしたらこちらのプログラムのほうが多少わかりやすいかと思います
http://wiki.hosiken.jp/petc/?cmd=read&amp;page=Toukou%2F%A5%A4%A5%F3%A5%C1%A5%AD%BC%EA%BD%F1%A4%AD%C6%FE%CE%CF&amp;word=%A5%A4%A5%F3%A5%C1%A5%AD%BC%EA%BD%F1%A4%AD

>>194
はじめからあるということはデータ文ということでしょうか?
データ文なら上下左右の壁を2進数で管理するとか、ですかね。
上だけ開いてる→&b1000
自動生成なら素晴らしいページを書いてくださっている方がいますのでリンクを貼っておきます。
http://www5d.biglobe.ne.jp/%257estssk/maze/make.html

196初心者:2013/04/10(水) 07:07:17 ID:WH9ZD.ts
>>194
初めからあるというのはGAME何とかのことです。
すいませんGAMEの後忘れちゃいました

197yuy@:2013/04/11(木) 19:50:56 ID:0NZvIRWQ
>>195
ありがとうございます。
しかしわあい@さんの作品だと拡大/回転を多用するゲームには
向いていないので自分で作ります トホホ・・・。

198yuy@:2013/04/11(木) 19:59:22 ID:0NZvIRWQ
>>197 の続き
直に描くと枠を描くところまではいいのだが
GPAINTで指定した座標と色がかぶるとうまく塗れないからなあ。
さてどうしましょう

199初心者:2013/04/11(木) 20:50:42 ID:KOnMZaAA
壁式(GAME2)のように迷路を作成するにはどうすればいいですか?
http://wiki.hosiken.jp/petc/?Toukou%2F%CA%C9%BC%B0%CC%C2%CF%A9%A5%B2%A1%BC%A5%E0
こんな感じのです。

200いったん:2013/04/11(木) 21:45:41 ID:no6fVRqg
>>198
スプライトの情報は反転・色・幅高さが読み取れないのでやっぱりGRPに写すのは厳しいですね。
写真をとるのが一番早いけど・・・

>>199
コテハンつけるなら他人と被らないようにしましょう。
その2つのゲームはデータ文で地図を定義していますね。
GAME2をロードしてLIST @MAP1 としてプログラムリストを見るとわかると思います。
このサンプルプログラムはかなりわかりやすいと思いますので、どうやっているか参考になりますよ。

201初心者:2013/04/12(金) 16:22:40 ID:CiuBaUoY
>>200なるほどわかりました!

202初心者:2013/04/13(土) 13:19:09 ID:nSl9VyhA
質問です。
プチコンで逃走●風の鬼ごっこ的なゲームを作ることはできないでしょうか?
条件としては
プレイヤーが逃げる
鬼は自動で見つけたら追跡(常に追跡じゃない)
壁がある(文字がBG)

203yuy@:2013/04/13(土) 19:15:37 ID:0NZvIRWQ
>>200
写真だとなー。ぼやけたりするからなー。うまいとり方はありますか?

204いったん:2013/04/13(土) 19:49:46 ID:no6fVRqg
>>203
カメラにMFの機能があればボヤけないと思います。
ないならできるだけ明るい色の画面で、輝度を最大にして撮るといいと思います。あとはカメラを近づかせすぎないとか。

>>202
できます。
壁や鬼は配列変数で管理すると良いです。
まずは1画面だけのスクロール無しで作ってみて、少しづつ機能を足していくといいかも。
公式プログラムや投稿プログラムにたくさん手助けとなるものがあるので探してみてください。

205yuy@:2013/04/13(土) 20:27:58 ID:0NZvIRWQ
>>204
うーむ
ぼやけはそれで解決するのだが
写真で困るのは光沢だなあ…
部屋暗くして取ったことがある。
写真が解決したら動画だ。
ぼやけがひどい動画もしばしば見られるようになってからは
どうやって撮るんだよと思うことがあります
ノイズは諦めた方がいいのかなあ…
続きはチャットで!

206初心者:2013/04/14(日) 09:18:33 ID:5by4A10w
>>204
一応ATANの使い方はわかるので自動追跡はできると思いますが
例えば左端にプレイヤーがいてその右下にブロックがあるとします
そして追跡するとブロックが邪魔で移動しません(あたり判定で)

それとどうなったら追跡開始とかはどうしたらいいですか?

207初心者:2013/04/20(土) 17:48:46 ID:3GKitPlI
>>206
Yahoo知恵袋でも聞いてできそうになりました

208アスパラガス:2013/04/27(土) 22:01:41 ID:a4b4pKsw
プチコン始めて2週間程度の者ですが
CHREDで作った自作キャラをプログラムを作る方で表示することってできますか
スプライトの表示にSPSET命令を使うところまではわかりました

209道産子の初心者:2013/04/28(日) 11:18:34 ID:Y4jr5J4c
IF 〜 THEN命令で、条件式を複数設けることは出来ますか?

210いぬまろ:2013/04/28(日) 11:55:00 ID:nYSUiRsk
>>208

LOAD "CHR:保存した名前"

これでできます

>>209

ANDを使ったらできます

211道産子の初心者:2013/04/28(日) 19:22:49 ID:Y4jr5J4c
>>210
IF 条件式1 AND 条件式2 THEN 命令
で出来ました。ありがとうございます。

212人生オワタ\(^o^)/:2013/04/28(日) 20:06:03 ID:2IcduFIk
どうやったら作品を改造できるのか教えてください

213アスパラガス:2013/04/28(日) 22:25:19 ID:a4b4pKsw
CHRSETという命令とSPSETという命令は
どう使い分ければいいですか

214いぬまろ:2013/04/28(日) 23:12:45 ID:nYSUiRsk
>>13

CHRSETはSPSETで使うキャラのグラフィックを作る命令です

215いぬまろ:2013/04/28(日) 23:13:54 ID:nYSUiRsk
ミス
>>213です

216アスパラガス:2013/04/29(月) 21:02:18 ID:a4b4pKsw
LOAD "CHR:保存した名前"
をやるとエラーが出ますが・・・

217名無しさん:2013/04/29(月) 22:27:10 ID:8ozx3/pM
CHRはあくまでも種類でリソースではありません。
スプライトを指定する場合はSPU0n

218アスパラガス:2013/04/30(火) 19:17:46 ID:a4b4pKsw
CPUOn・・・

219 ◆IGEMrmvKLI:2013/04/30(火) 21:54:26 ID:8ozx3/pM
SPU0

220ブラァン:2013/05/01(水) 07:58:56 ID:B67QEPQk
DATA” モクジ    ”
DATA” ”
・・・
READ PRI$
とするとout of read というエラーが出ます。どうしたら解決しますか?

221いったん:2013/05/02(木) 23:00:39 ID:awI8lLWE
>>220
DATA文の先頭にラベル付けて
RESTORE @ラベル すればいいと思います。

222アスパラガス:2013/05/04(土) 23:31:41 ID:a4b4pKsw
スプライトの管理番号は0から99までの
100通りですがスプライトは画面上に100個までしか表示できませんか
それ以上できるとしたらどうやればいいですか

223ブラック:2013/05/06(月) 21:16:58 ID:hZ1bN/6Q
公式サイトのリバーシあるじゃないですか、それのcomの考え方、置き方を教えて下さい。あとどうやったらcomを強く出来ますか?よろしくお願いします。

224いったん:2013/05/07(火) 19:22:53 ID:awI8lLWE
>>222
できません。さらに、サイズ変更、回転は32個しか出来ません。
おそらくハードの限界でしょう。
>>223
置けるとこをすべて考えてどれだけひっくり返せるかというのに加え、場所ごとに重み付けがされているようです。
例えば、四隅の周りにはなるべく置かないようにする、といったように。
あと62行目ですが、HKは取れる個数なので/HKのほうが強くなる気がします。
他に、1手読みだけでなくその次のプレイヤーの順番の時も考慮に入れると強くなるかもしれません。・・・遅くなりますが。

225アスパラガス:2013/05/07(火) 21:31:06 ID:a4b4pKsw
サンプルのシューティングゲームでは
敵の設定をしているラベルは1つなのに
画面上にあのぐるぐる回る敵は何匹も出てきます
あれはどうやっているんですか?
質問の意図がおかしかったらすみません

226名無しさん:2013/05/07(火) 23:56:45 ID:xB5Y.w7k
>>225

・質問者も回答者も気持ちよく話を締められるように、解決したら一言お礼をお願いします。
 (質問者からの返答がなく、解決したのかもよく分からない状態になるのは良くないことです)


解決したならを一言お礼をしないと不愉快だと思います

227ブラック:2013/05/08(水) 20:50:00 ID:hZ1bN/6Q
いったんさんありがとうございます!
参考になりました。

228いったん:2013/05/08(水) 22:16:21 ID:awI8lLWE
>>225
それは敵の情報を変数で管理しているためです。
移動の仕組みは同じですからね。
変数で管理すれば複数のルーチンを一つにまとめて見やすくする事ができます。

229アスパラガス:2013/05/08(水) 23:08:08 ID:a4b4pKsw
変数で管理するにはどういった命令をつかいますか
移動に使われるのは普通にSPOFSでいいですか
ながったるく質問を繰り返して本当にすみません

230いったん:2013/05/09(木) 21:09:37 ID:awI8lLWE
>>229
どういった命令と言われても・・・
配列変数を使うんですよ。こんなかんじで。

FOR I=0 TO 9
操作。
SPOFS I,X(I),Y(I)
NEXT
参考:GAME4 237〜264行

231アスパラガス:2013/05/09(木) 22:52:04 ID:a4b4pKsw
素人のわかりにくい質問に(うんざりするほど自覚している)
丁寧に答えてくださりありがとうございます

232もろこし:2013/05/12(日) 18:37:44 ID:hZ1bN/6Q
↑のほうのブラックさんといったんさんの会話で
>>他に、1手読みだけでなくその次のプレイヤーの順番の時も考慮に入れると強くなるかもしれません。・・・遅くなりますが。
ってあるじゃないですか、僕初心者なのでよくわかりません・・・orz
具体的にどのようにすれば良いのですか?
あと重くなるとは処理落ちのことですか?
ほんとにすいません教えてください。
お願いします。

233もろこし:2013/05/12(日) 19:17:14 ID:hZ1bN/6Q
連投すいません
ブラックさんとおなじIDなのは
近所に住んでてネットポイントを使わさせて貰っててかつ
ブラックさんもプチコンMK2をもっていたからです。

234フェレップ:2013/05/12(日) 20:31:47 ID:WqgAiMjM
初めまして、超初心者です。
だいたい、変数などは初心者講座を見て理解しました。しかしIF(?)についていまいちわかりません…。
どなたか詳しく説明してくださる方おられませんか?
すいませんm(_ _)mよろしくお願いします。

235もろこし:2013/05/12(日) 21:17:05 ID:hZ1bN/6Q
>>234
僕の説明でわかるかな?
説明下手だから・・・

簡単な例として
IF A==1 THEN BEEP ELSE BEEP 3
IFはもし Aは変数 THEN は Aが1ならば
のならばの部分 BEEP はAが1ならばBEEP、
ELSE=違ったら 〜
1つの文にまとめると
もし変数Aが1ならば BEEP 違ったら BEEP3

みたいな感じですw
わかりにくくてごめんねw

236もろこし:2013/05/12(日) 21:31:26 ID:hZ1bN/6Q
連投すいません

>>234
補足
IF A==・・・
を覚えたら
IF A<=10 THEN PRINT A ELSE BEEP
これは
もし変数Aが10より小さかったら変数Aを表示それ以外だったらBEEP
です。
IF A>=1 THEN PRINT A ELSE BEEP
これは
もし変数Aが1より大きかったら変数Aを表示それ以外だったらBEEP
です。
ほかにも
IF A!=1 THEN BEEP ELSE PRINT"ヘンスウAノカズハ1!”
もし変数Aが1以外だったらBEEP 1だったらPRINT〜です。
!はプチコンでは真偽反転という意味があります。
まぁこれを理解できたら覚えましょう(殴
僕から言えることは以上です。

237フェレップ:2013/05/12(日) 22:07:10 ID:WqgAiMjM
ありがとうございますっ!m(_ _)m
一応理解しましたっ
あとは覚えるのみ…ですねっ
私、頑張りますっ*
本当にありがとうございましたっ

238もろこし:2013/05/13(月) 16:29:32 ID:hZ1bN/6Q
>>234
いいえ、お役に立てればなによりです(´・ω・`)

239もろこし:2013/05/14(火) 17:55:40 ID:hZ1bN/6Q
すいません。
DIM (変数)
で宣言がどうとか初心者講座でやってたんですけど、宣言するとどのようないいことがあるのでしょうか。ただの変数とは何が違うのでしょうか。
変数名を変数に使える便利な変数的なことを言ってたんですが、結局なんなんですか。
例などを上げて教えてくれると幸いです。

240もろこし:2013/05/14(火) 18:56:16 ID:hZ1bN/6Q
>>239
初心者講座見たらわかりました(殴
あと 例えばA$に
”コンニチハ サヨウナラ”
と入れてメルビル様の団子が食べたいのゲームのように左から順に表示させるには
どうしたら良いですか?なんかSTR$みたいなのを使えと言われたのですがよくわからなくて・・・
教えていただけたら幸いです。

241 ◆IGEMrmvKLI:2013/05/14(火) 20:01:18 ID:8ozx3/pM
MES$="コンニチハ サヨウナラ"
FOR I=0 TO LEN(MES$)
M$=MID$(MES$,I,1)
PRINT M$;
NEXT
STR$は関係ないです

242 ◆IGEMrmvKLI:2013/05/14(火) 20:01:49 ID:8ozx3/pM
訂正
MES$="コンニチハ サヨウナラ"
FOR I=0 TO LEN(MES$)-1
M$=MID$(MES$,I,1)
PRINT M$;
NEXT

243もろこし:2013/05/17(金) 17:00:35 ID:hZ1bN/6Q
>>231
ありがとうございます!
おかげで簡単なRPGっぽいゲームが作れるー!

244もろこし:2013/05/18(土) 16:28:56 ID:hZ1bN/6Q
なんかブラックさんが適当にやってたらできたと言っている円周率190桁位求める
PRG。
ACLS:CLEAR
C=999
DIM A(C)
F=100
FOR V=0TO 32*6−2
E=D%F
D=E
FOR B=C-1 TO 1STEP -1G=B*2-1D=D*B+F*(A(B)+!P*20)A(B)=D%G
D=0OR(D/G)NEXT
P=0OR E+D/f?"0"*8(P<!10);P;
C=C-9
NEXT
WAIT 100
らしいです。
errorってもブラックに言ってくださいw

245名無しさん:2013/05/18(土) 19:49:21 ID:8ozx3/pM
>>244ここは質問スレッドですよ。

246名無しさん:2013/05/19(日) 17:42:07 ID:venckzHs
SAVE"TEST","0011","0001"ってセーブできないんですか?

247いったん:2013/05/19(日) 19:26:38 ID:awI8lLWE
>>246
SAVEの書式はSAVE ファイル名[,パッケージパラメータ文字列]
ですので、2つ以上のパラメータは指定出来ません。

248もろこし:2013/05/19(日) 19:38:16 ID:hZ1bN/6Q
>>245
すいません。ミスりましたw

249名無しさん:2013/05/19(日) 22:22:43 ID:venckzHs
>>247
ありがとうございます。

250名無しさん:2013/05/24(金) 19:18:52 ID:uT5TqsCg
スプライトとBGの当たり判定ってどうやりますか?

251いぬまろ:2013/05/25(土) 22:07:14 ID:xB5Y.w7k
>>250

過去ログ参照しろ

252名無しさん:2013/05/26(日) 08:05:13 ID:8ozx3/pM
>>160
くらいしか無かったけど...

253いぬまろ:2013/05/26(日) 10:53:23 ID:xB5Y.w7k
>>169があるだろ

254名無しさん:2013/05/26(日) 15:46:11 ID:Z9wHmIOQ
なんでそんなにいぬまろさんは怒ってるんですか

255いぬまろ:2013/05/26(日) 16:29:35 ID:xB5Y.w7k
>>254

怒っては無いけど過去ログくらい見て欲しいだけ

256cmk、:2013/05/26(日) 23:51:21 ID:7d2L0ItU
こんばんは
文字列変数の中の文字数を調べるにはどうしたらいいですか?

257cmk、:2013/05/26(日) 23:53:13 ID:7d2L0ItU
誰かいますか?

258cmk、:2013/05/26(日) 23:53:56 ID:7d2L0ItU
文字列変数の中の文字数を調べるにはどうしたらいいですか?

259名無しさん:2013/05/27(月) 13:46:04 ID:8ozx3/pM
>>257
ここはチャットじゃありませんよ。
A$="ABC"
?LEN(A$)
これでいいです

260cmk、:2013/05/28(火) 01:56:43 ID:7d2L0ItU
>>259
ありがとうございます。

261アスパラガス:2013/05/28(火) 22:31:31 ID:a4b4pKsw
自分で作ったスプライトを
表示するにはどうすればいいですか

262cmk、:2013/05/29(水) 10:47:31 ID:7d2L0ItU
ここのページhttp://ww5.tiki.ne.jp/~ochame/petitcom/p004.htmにのっているプログラムが動きません。
なぜでしょうか?
VISIBLE ,1,,,,1
PNLTYPE "OFF"
GPAGE 1
@LOOP
 GCLS
 X=RND(256)
 Y=RND(192)
 GCIRCLE X,Y,10
 VSYNC 20
 A=TCHX-X
 B=TXHY-Y
 IF A*A+B*B>100THEN @LOOP
BEEP
END

263名無しさん:2013/05/29(水) 12:06:03 ID:8ozx3/pM
>>262
せめて何のエラーかを

264cmk、:2013/05/29(水) 13:01:08 ID:7d2L0ItU
>>263
下画面真っ黒になってなにも表示されません。

265名無しさん:2013/05/29(水) 14:37:01 ID:zGoLdvj2
>>264
元の方もだけどGCIRCLEの描画色の指定がされてないね
GCIRCLE X,Y,10,15 でどう?

266cmk、:2013/05/29(水) 15:46:17 ID:7d2L0ItU
できました! ありがとうございます!

267cmk、:2013/05/29(水) 23:19:58 ID:7d2L0ItU
A=INSTR(12A,A) と入力すると、
Syntax error (1,INSTR) がでます。
どうしたらいいんですか?

268名無しさん:2013/05/29(水) 23:29:54 ID:8ozx3/pM
>>267
どうしたらって何がやりたいんですか.
12Aという数値?か変数は無効ですよ

269cmk、:2013/05/30(木) 00:12:59 ID:7d2L0ItU
>>268
A=INSTR(12A,A)
? A
と入力して RUNすれば
2 となるはずなのに Syntax error (1,INSTR) がでるということです。

270名無しさん:2013/05/30(木) 06:31:40 ID:awI8lLWE
>>269
文字列はダブルクォーテーションで囲まないといけないです。
INSTR("12A","A")

271cmk、:2013/05/30(木) 16:33:36 ID:7d2L0ItU
>>270
できました!ありがとうございます!

272ありふれた:2013/06/01(土) 15:42:38 ID:3AQHNZkI
今度の、プチコンに、ブラウザ機能は、付くんでしょうか。

273名無しさん:2013/06/01(土) 16:09:50 ID:03cnA4D6
今度の、プチコンに、MEMEDは、付くんでしょうか。

274名無しさん:2013/06/02(日) 13:53:45 ID:awI8lLWE
>>272
ハードの関係で無理でしょう。というよりブラウザは別にあるので必要ないかと。
>>273
わかりませんが、MEMEDならまとめwikiにすでに投稿されています

275デイダラ:2013/06/05(水) 23:42:47 ID:a4b4pKsw
CHRETとかいう(違ったかも)もともと入っていたソフトでスプライトを編集したのですが自作プログラムでそれを
表示するにはどうすればいいですか
仮にキャラ番号が1、パレット番号1、管理番号1で
保存したときの名前がABCだったときのプログラムをつくってみてください

276いったん:2013/06/06(木) 20:29:49 ID:awI8lLWE
>>275
LOAD"SPU0:ABC" (キャラをロードする)
SPSET 1,1,1,0,0,0 (スプライト活動開始)
SPOFS 1,120,88,0 (中央座標に移動)

277道産子:2013/06/07(金) 12:43:59 ID:Y4jr5J4c
スプライトの表示優先順位はどのように定義すればいいのでしょうか?

278道産子:2013/06/07(金) 13:06:33 ID:Y4jr5J4c
>>277
自己解決しました。すみません。

279デイダラ:2013/06/09(日) 23:39:18 ID:a4b4pKsw
どうもありがとうございますもう一つお聞きしたいことがあるのですが
LOADした時の音や画面が切り替わるのを無くすブログラムはありますか

280名無しさん:2013/06/10(月) 12:31:28 ID:OFGp677w
画面に関しては説明書のLOADを、音に関してはシステム予約語を見るといいよ

281プチコン初心者:2013/06/16(日) 01:05:38 ID:XDQG8Ov6
INPUTがわからないのですが、INPUT ”(メッセージ)”;(変数)とあったら変数という箱にメッセージを入れるという認識でいいでしょうか?

282ひろ:2013/06/16(日) 13:13:53 ID:BS5VohZI
279>>>SYSBEEP=FALSEにすればいいのでは?
戻すにはSYSBEEP=TRUEです。

283いったん:2013/06/16(日) 16:40:53 ID:awI8lLWE
>>281
変数に入れるのはメッセージではなくユーザーが入力した文字列ないし数値です。実際にやってみるとわかると思います。

284プチコン初心者:2013/06/16(日) 17:02:12 ID:XDQG8Ov6
>>283 なるほど。ご回答ありがとうございます。

285cmk、:2013/06/23(日) 00:08:41 ID:xooU88bo
HTMLでいう 「クライアント・イメージマップ」 みたいなことがしたいのですが、
どうすればいいのでしょうか?

286cmk、:2013/06/23(日) 00:09:54 ID:xooU88bo
↑↑↑下画面でタッチしたいんです。

287cmk、:2013/06/23(日) 00:40:52 ID:xooU88bo
↑↑↑無かったことのしてください。

下画面に表示したスプライトのタッチの判定をするにはどうすればいいですか?

288イン:2013/06/24(月) 18:10:00 ID:AtJBnkPE
質問です。
3DSのインターネットプラウザや、Wiiのインターネットチャンネルで、プログラムをQRコード化することはできますか?あと、SDカードも持っていません。

289いったん:2013/06/24(月) 22:28:19 ID:3hZ4khrs
>>287
スプライトの座標をSPREAD(番号),X,Yで受け取ってタッチ座標と照らし合わせる、
もしくは、タッチした座標に透明なスプライト(あらかじめ定義したもの)を置いてSPHIT関数で受け取る
というのはどうでしょうか?
>>288
できますが、ぶっちゃけ結構めんどくさいです。
http://www2.u-netsurf.ne.jp/~ozawa/petitcom/petiteditor.html
でプログラムリストを手打ちすればQRが生成されます。が、画像ファイルとして保存できないのでカメラ等で撮影するということになります。
出来ればSDカードを購入してみてはどうですか?2〜4GB程度なら1000円以下で入手出来ます。それを使えばパソコンを地区センターや図書館でちょこっと借りて、公式サイトからPTC-QRに変換する、という手もあります。

290イン:2013/06/25(火) 17:17:37 ID:AtJBnkPE
↑ありがとうございます!父親のパソコンを借りて、やってみるかぁw

291cmk、:2013/06/26(水) 04:34:52 ID:xooU88bo
>>289
「タッチした座標に透明なスプライトをおいて判定」をしてみたのですがうまくいきません。
具体的にどういうプログラムを書けばいいのでしょうか?

292いったん:2013/06/26(水) 18:26:20 ID:3hZ4khrs
>>291
SPHIT命令を使う。参考→
http://ux.getuploader.com/petitcom_mkII/download/113/SPTOUCH.zip

293道産子:2013/06/27(木) 22:47:14 ID:Y4jr5J4c
ここでいうことかわかりませんが、
プチコン公式サイトのPCフォントをHTMLで使うにはどうすればいいですか?

294名無しさん:2013/06/28(金) 22:49:38 ID:zftHkfjs
単純に表示させるだけなら<font face="プチコン">AA</font>で出来ます。
まとめwikiや公式サイトのようにフォントが無くても表示させるにはCSSを使えばよいかと
@font-face {
font-family: 'petitcomfont';
src: url('PETC.eot');
}

@font-face {
font-family: 'petitcomfont';
src: url('PETC.ttf') format("truetype");
}

295イン:2013/06/29(土) 17:15:24 ID:AtJBnkPE
質問です。
荒しに、投稿プログラムのページを削除されたのですが、直す方法はありますか?教えていただければ嬉しいです。

296いったん:2013/06/29(土) 17:40:20 ID:3hZ4khrs
http://wiki.hosiken.jp/petc/?RecentDeleted
このページに行き、復元したいページ名の右にある?をクリック。
編集の画面が出るので右下にあるフロッピーディスクの小さいをアイコンクリック。
バックアップ一覧が出るのでその中で(直前の状態に戻したければ)一番下の項目のソースをクリック。
ソースをコピペして作りなおす。
って感じです。
色々消されているのでまとめて直しておきました。

297プチコンまとめWiki管理人★:2013/06/30(日) 01:27:30 ID:???
>>293
サンプル置いておきます。
※フォントデータの著作権はスマイルブームにあります。
それ以外のcssとhtmlは自由に使ってください。
http://wiki.hosiken.jp/static/petc/smilebasic-html.zip

>>296
代わりにご回答頂きありがとうございます。

298.EXE:2013/06/30(日) 21:03:39 ID:venckzHs
下画面に自分で作ったSPUが映りません。どうすれば写せますか?

299名無しさん:2013/07/01(月) 09:52:39 ID:V/IV.iFE
>>298
下画面にSPUは使えません。SPSを自己責任でご利用ください。

300いったん:2013/07/01(月) 13:24:08 ID:3hZ4khrs
>>298
SPS:FILENAMEでLOADすればいいのでは?

301道産子:2013/07/01(月) 21:01:56 ID:Y4jr5J4c
>>294
ご回答ありがとうございます。

>>297
ZIPまで用意してくださり本当にありがとうございます。

302.EXE:2013/07/01(月) 21:05:13 ID:venckzHs
>>299 >>230
ありがとうございます

303名無しさん:2013/07/04(木) 16:54:16 ID:sW/PbG3U
MMLでノートシフトみたいなことできないのでしょうか
変ホ長調とか作りづらくて仕方ない

304いったん:2013/07/04(木) 17:59:23 ID:3hZ4khrs
>>303
今のところMMLにはありませんね。ハ長調とかヘ長調で諦めるか頑張って入力するかないですね。
mml入力ソフトみたいなのが公開されていると楽なのですが。
SDカードに入ってるMIDI再生とかできたら嬉しいですけどね。

305名無しさん:2013/07/07(日) 11:29:16 ID:sW/PbG3U
>>304
なるべく調号を減らして地道に書くしかないようですね
ありがとうございました

306_Q9:2013/07/11(木) 21:15:15 ID:axZI/JPY
PX=6
@1
VSYNC 1
CLS
LOCATE 5,PX
PRINT "■"
IF BUTTON(2)==1 THEN PX=PX-1
GOTO @1

としたとき、ボタン入力から■の表示位置が変わるまでにフレーム単位の遅延はあるのでしょうか?

307いったん:2013/07/11(木) 21:22:22 ID:3hZ4khrs
>>306
ボタン入力の後にVSYNC 1があるので最大1フレーム遅延しますね。

308_Q9:2013/07/11(木) 21:37:01 ID:axZI/JPY
>>307
ありがとうございました。

309cmk、:2013/07/13(土) 20:57:21 ID:xooU88bo
@LOOP
GPSET TCHX,TCHY,15
GOTO @LOOP
としてRUNして早く描くと速度遅くて線が途切れたりしまいますが何か対処法ありませんか?

310cmk、:2013/07/13(土) 21:04:30 ID:xooU88bo
>>305
MIDlファイルをマビノギ用MMLに変換できるツール
http://kiyuyume.gusoku.net/garakuta/midimabiml.html
マビノギ用MMLをプチコン用に変換するプログラム
http://wiki.hosiken.jp/petc/?cmd=read&amp;page=Toukou%2F%A5%DE%A5%D3%A5%CE%A5%AE%CD%D1MML%A4%F2%CA%D1%B4%B9&amp;word=MML
の2つを使えばいいんじゃない?

311cmk、:2013/07/14(日) 01:05:00 ID:xooU88bo
A$="22212221221222221"
I=INSTR(A$,"1")
の時、全ての1の位置を取得するにはどうしたらいいですか?

312名無しさん:2013/07/14(日) 11:51:46 ID:8ozx3/pM
INSTRの開始位置を使えばいいのでは?
I=-1
A$="22212221221222221"
@LOOP
I=INSTR(I+1,A$,"1")
IF I>-1THEN ?I:GOTO@LOOP

313名無しさん:2013/07/14(日) 15:16:33 ID:oWVLdaQo
>>309
PSETがだめならLINEを使えばいいじゃない
ちなみにTCHX、TCHYの更新は1フレーム毎なので、そのように書いても精度は上がりません。

314キク:2013/07/17(水) 20:09:47 ID:zQ16ZORM
こんにちは
プチコンを買ったばかりで、CLSしか知らない初心者です
僕は将棋プログラムが欲しいのですが難しいらしく、今ではとても打てません
そこで、皆様の中の上級者の方に作っていただきたいのですが誰か作ってくださる方はいらっしゃらないでしょうか
どうかお返事よろしくお願い致します

315名無しさん:2013/07/18(木) 16:27:19 ID:aTEMvpPI
>>314
自分で何か簡単なゲームを作ってみたら?

316イン:2013/07/18(木) 19:56:24 ID:AtJBnkPE
質問です。
一つのMEMファイルに複数のMEM$を保存することはできますか?
また、複数保存したものを、分けて読み込むこともできますか?

317プチコンまとめWiki管理人★:2013/07/18(木) 20:51:55 ID:???
>>314
将棋の指し手をプログラムで考えさせるには、すごい量の先読みが必要で
定石のデータもたくさん必要なはずなので、プチコンで作るのは無理じゃないかと思います。
少なくとも、頼まれてちょいちょいと作れるような規模ではないです。プチコンでは間に合わなさそうですし、
パソコン向けだったとしても、相当研究している人じゃないとまともな対局相手は作れないと思われます。

>>316
できないです。ひとつのMEM$で1ファイルです。
1ファイルにまとめたい場合は、下画面にグラフィックとしてデータを書いてGRPに保存などの方法が使われてます。

318名無しさん:2013/07/18(木) 21:20:46 ID:JUnbbvLQ
>>316
1つのMEMリソースには256文字分記録できるので合計256文字以内ならば可能。
ただし、結合したものを分割できる形で保存する必要がある。
同じ文字数ならば桁揃えをして結合したものを保存すればいいけど
文字数が異なるのならばそれぞれのデータの文字数の情報も保存しておかないと
分割ができない。

319猫姫:2013/07/19(金) 01:43:52 ID:ZQgt3Ykg
>>316
>>317 >>318 をまとめると、
たとえば、
MEM$="○○○○○○○○○○□□□□□□□□□□"
とすると、
A$=LEFT$(MEM$,10):B$=RIGHT$(MEM$,10)
で、
A$=="○○○○○○○○○○"
B$=="□□□□□□□□□□"
と分割できる。
ただし、10文字なら、必ず10文字にしないと、引き抜く文字がずれちゃうので注意。
もう1つヒントをいえば、
スペースも、一文字です。
頑張ってください。

320イン:2013/07/19(金) 07:36:13 ID:AtJBnkPE
317,318,319
ありがとうございます!

321キク:2013/07/19(金) 20:30:43 ID:zQ16ZORM
>>315,317 さん
お返事ありがとうございます

322猫姫:2013/07/20(土) 03:00:04 ID:gFRBf6FY
>>314
とりあえずは、将棋を指すプログラムからでしょうか。
1、先手後手共に操作する
2、棋譜を保存し、リプレイする。
みたいな、棋譜管理プログラムならいけそうですが、思考ルーチンを組むのは簡単にはいきませんよ。

話しはがらっとかわりますが、
ファミコンの初代の森田将棋って、スペック的にはプチコンの圧勝ですよね。
どういうふうに作ってあるのか、やたら興味深いです。

323名無しさん:2013/07/20(土) 08:34:28 ID:.cByJvYQ
なんかGPAGE使ってダブルバッファリングしようとしたらすごく重くなったんですがどうすればいいんでしょうか

324名無しさん:2013/07/20(土) 09:25:12 ID:8ozx3/pM
プログラム見ない限り何とも
GCOPY使ったのなら1フレームかかるので遅くなって当然

325名無しさん:2013/07/20(土) 10:50:10 ID:5sioP06g
>>324
回答ありがとうございます
GCOPY使わずに表示するページと描画するページを反転させるようにしたらだいぶ軽くなりました

326かず:2013/07/26(金) 12:27:06 ID:pytyAimE
>>314
自分で両方動かすのは、できそうです。
駒1の変数、駒2の変数が重なったらみたいな。
とられたら-1にするとか。
DS1台で2人交互でやるってのもOKですよ。
今言ったのは作れるかな・・・。と思います。
それから、参考に。
プチコン初心者講座
http://smileboom.com/special/ptcm2/co_konnichiwa/p01.php
僕もこれで、覚えました。

蘇るBASICプログラミング プチコン公式活用テクニック
という本もありますよ。書店で取り寄せてください。
Amazonは出品者からしかないので。

327名無しさん:2013/08/04(日) 16:14:28 ID:MJExEvqc
プチコン公式サイトのプログラムリストの打ち上げ花火を打ち込みましたが18行のエラーでで実行できません。見直しましたが間違えはありませんでした。どういうことなのでしょうか

328いったん:2013/08/04(日) 17:59:14 ID:3hZ4khrs
>>327
とりあえずエラー内容を教えてほしいです。
Syntax error→やはり書き間違いです
Subscript out of range→6,7行目を確認してください
Undefined label→ラベル名が間違っています。18行目および25 44 56 66 86 94 114 119行目のラベルを確認してください

329kouchan8:2013/08/22(木) 18:20:33 ID:hQyHL9fA
pcのカーソル(やじるしー!)みたいに、方向キーで矢印を上下左右に移動させるにはどんなプログラムを書けばいいですか??

330かずえもん:2013/08/22(木) 20:08:34 ID:8LCntMZo
>>329
方向キーとは、十字キーのことですね。
矢印は、キーボードにある、「↑」のことですよね。
これでどうでしょう。

ACLS:CLEAR:SYSBEEP=0
BGMSTOP:TALKSTOP
@LOOP
VSYNC 1
LOCATE X,Y:?"↑"
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y-Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
IF X<0 THEN X=0
IF X>31 THEN X=31
IF Y<0 THEN Y=0
IF Y>23 THEN Y=23
LOCATE X,Y:?"↑"
GOTO @LOOP

間違ってるかもしれません。
ストップはつけてないので、SELECTで
ストップしてください。

長文失礼しました。

331いぬまろ:2013/08/22(木) 23:47:26 ID:xB5Y.w7k
>>330
まず8行目=抜けてますよ
あと↑の残像が残りますよ

332かずえもん:2013/08/23(金) 08:17:29 ID:8LCntMZo
>>331
ご指摘ありがとうございます。
ACLS:CLEAR:SYSBEEP=0
BGMSTOP:TALKSTOP
@LOOP
VSYNC 1
LOCATE X,Y:?" "
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y-Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
IF X<0 THEN X=0
IF X>31 THEN X=31
IF Y<0 THEN Y=0
IF Y>23 THEN Y=23
LOCATE X,Y:?"↑"
GOTO @LOOP

こうですね。
で、 「まず8行目=抜けてますよ」 とは?
僕も初心者なので、よくわかりません。

333いぬまろ:2013/08/23(金) 13:02:41 ID:tWYZV0.s
Y-Y+1
-じゃあ無くて=にしないとエラーってことです

あと
5行目のLOCATE X,Y:?""は
14行目に移動した方がいいですよ

334非、群馬県民:2013/09/10(火) 23:28:12 ID:CNZMZgSU
<質問> DIM命令で文字変数(名前違うかも、A$みたいなやつ)にはどうしたらいいですか。

335名無しさん:2013/09/10(火) 23:50:35 ID:ZrhADAEQ
>>334
これ?

CLEAR:V=10
DIM A$(V)

あと、文字列変数ね

336名無しさん:2013/09/14(土) 22:25:13 ID:eKehnk/w
フォントを変えて下画面にPNLSTRで表示してもフォントが変わってないんだけど・・・

337Mr.J:2013/09/15(日) 01:32:46 ID:ZrhADAEQ
>>337
これ?

BGPAGE 1:LOAD "BGF:(名前)"

Back Ground Fontだったけ?
間違ってたらスマソ

338Mr.J:2013/09/15(日) 01:34:56 ID:ZrhADAEQ
>>337
うわ、間違えた>>336だった

339Ricky:2013/09/22(日) 17:29:24 ID:XxBGeuZo
すいません。質問です。
マリオカートのような擬似3dカーレースの作り方が
わかりません!!!
グラフィック面で道路とかの表示や進ませ方とかが
よくわかりません!!!
どなたかわかる方わかる方教えてください!!!!!

340かずえもん:2013/09/24(火) 16:18:22 ID:SnXXdHQY
>>339
うーん・・・・・。

まあ、簡単に言ってしまえば、これですよね。
http://wiki.hosiken.jp/petc/?cmd=read&amp;page=Toukou%2F3D_CAR_RACE_Ver2.0&amp;word=3D

341名無しさん:2013/09/24(火) 19:17:20 ID:oam7AIUk
>>339
擬似3Dカーレースってドライバー視点のゲームの事じゃ
だったらここがhttp://ww5.tiki.ne.jp/~ochame/petitcom/p006.htm

342Ricky:2013/09/24(火) 20:39:04 ID:XxBGeuZo
>>340
>>341
ありがとうございます!
すいません…もう一つ質問なんですが、
マリオのゲームのように、BGをスクロール
しながらのBGとSPとの当たり判定の仕方がわかりません。
固定画面の時なら、BGとSPとの当たり判定はできます。
(横に壁があればそれ以上進めない や、地面が
 あれば、それ以上落ない)などです。
でも、それがスクロールするとなると、どうすればいいのかがわかりません
すいません。どなたかわかる方!教えてください!!!
お願い致します!!!!!

343名無しさん:2013/09/24(火) 21:35:39 ID:8QEU8oPs
最近プチコン始めたばかりのプログラム初心者です。
まずSPSET でスプライトを表示させSPANIMでアニメ、
buttonでキー設定、SPCHRでキャラ変更で一応キャラクターを上下左右
移動できるところまでできました。

質問です。
キャラクターを左端から右端へ移動する際、画面の中央に差し掛かった時
キャラクターが消えてしまうのです。直ぐに左ボタンを押せば
すぐにキャラクターがあらわれるのですが、なぜ消えてしまうのかがわかりません。
下へ移動しても同じです。途中で消えてしまいます。

どうかご回答をよろしくおねがいします。

344Ricky:2013/09/24(火) 21:58:12 ID:XxBGeuZo
>>343
かければでいいんで、プログラムをここでかいてくれませんか?
もしかしたらだけどお力になれるかもしれないので。

345名無しさん:2013/09/24(火) 22:22:55 ID:8QEU8oPs
CLS
SPSET 0,64,0,0,0,0
SPANIM 0,4,15
@LOOP
SPCHR 0,64,0,0,0,0
SPHOME 0,X,Y
B=BUTTON()
IF B==1 THEN P=76:Y=Y+2
IF B==2 THEN P=68:Y=Y-2
:
:
WAIT 2
GOTO @LOOP

こんな感じです。よろしくおねがいします。

346名無しさん:2013/09/24(火) 22:47:59 ID:ZrhADAEQ
>>343,345
SPHOME使っていませんか?
こちらを試してみてください

ACLS:CLEAR
SPSET 0,60,2,0,0,1
SPSET 1,61,2,0,0,1

@LOOP
VSYNC 1:GCLS
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y=Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
SPHOME 0,-X,-Y
SPOFS 0,X,Y;16
GOTO @LOOP

水が入ってる瓶の方がSPHOME
空の方がSPOFSです

347Ricky:2013/09/24(火) 22:57:23 ID:XxBGeuZo
>>345
CLS
SPSET 0、64、0、0、0、0
SPANIM 0、4、15
X=0:Y=0
@LOOP
SPCHR 0、64、0、0、0、0
SPOFS 0、X、Y
B=BUTTON()
IF B==1 THEN P=76:Y=Y-1
IF B==2 THEN P=68:Y=Y+1
WAIT 1
GOTO @LOOP

でいけます。
SPHOMEじゃなくて、SPOFSをつかってください。

348名無しさん:2013/09/24(火) 23:12:39 ID:8QEU8oPs
346さん、Rickyさんおかげさまでできました。
ありがとうございます!
助かりました!

349Ricky:2013/09/25(水) 18:57:57 ID:XxBGeuZo
>>348
お役にたてて嬉しいです!

350名無しでした:2013/09/25(水) 23:05:01 ID:tKr.fKuE
プチコン初心者です。
Web に書いてあった物を応用して スプライトキャラを使いBG に当たり判定をつけるところまでは出来ましたが、BGの大きさが2×2になるとBGの端の方がキャラと

351名無しでした:2013/09/25(水) 23:06:46 ID:tKr.fKuE
↑誤押しすいません

352名無しでした:2013/09/25(水) 23:09:23 ID:tKr.fKuE
めり込んでしまいます。なのでどうか完全にぶつからないようにする対処法をお願いします
説明下手ですいません

353いったん:2013/09/28(土) 22:50:09 ID:gIAMbAZk
>>352
qrかソースうpしてくれないとよくわかんないです。

354ガンダム:2013/09/29(日) 00:39:05 ID:gAYJaNS.
プチコンのことがほとんど分かりません。分かるのは、PRINT、変数、文字変数、inpt、GOTOです。おしえてください

355ガンダム:2013/09/29(日) 00:40:45 ID:gAYJaNS.
inpt間違いました。inputでした。たぶん

356おか3:2013/09/29(日) 02:17:50 ID:gAYJaNS.
FOR〜NEXT、ビット演算、スプライトのつかいかたをおしえてください

357Ricky:2013/09/29(日) 11:15:01 ID:rPySbMPo
グラディウスの作り方を教えてください!
2つ質問がございます。
①オプションの動き
②BGのやり方
です。①の質問は、自分についてくる
あの動きのやり方がしりたいです。
②の質問は、BGのスクロールと、そのBGに
当たるとHPが減るというのをやりたいです。
どちらかでもわかる方、教えてください!!!
お願い致します!!!!!

358名無しでした:2013/09/29(日) 11:40:05 ID:tKr.fKuE
>>352
WAIT 1
PB=BUTTON()
IF (PB AND 1) AND ATU!=1 THEN PY=PY-1:PMUKI=30
IF (PB AND 2) AND ATS!=1 THEN PY=PY+1:PMUKI=26
IF (PB AND 4) AND ATH!=1 THEN PX=PX-1:PMUKI=28
IF (PB AND 8) AND ATM!=1 THEN PX=PX+1:PMUKI=24
S=S+1
IF S>10 THEN PMUKI=PMUKI+1
IF S==20 THEN S=0
SPSET 0,PMUKI,2,0,0,2,16,16
SPOFS 0,PX,PY
PMUKI=PMUKI-PMUKI%2

ATU=0:ATS=0:ATH=0:ATM=0:ATAI=0
FOR ATAY=0 TO 2
FOR ATAX=0 TO 2
IF ATAX==0 AND ATAY==0 THEN @ATASK
IF ATAX==2 AND ATAY==2 THEN @ATASK
IF ATAX==2 AND ATAY==0 THEN @ATASK
IF ATAX==0 AND ATAY==2 THEN @ATASK
IF ATAX==1 AND ATAY==1 THEN @ATASK
ATAI=ATAI+1
PATX(ATAI)=FLOOR(PX/8)+ATAX
PATY(ATAI)=FLOOR(PY/8)+ATAY
BGREAD(1,PATX(ATAI),PATY(ATAI)),CHR(ATAI),PAL,H,V
IF CHR(1)!=72 AND CHR(1)!=73 AND CHR(1)!=105 AND CHR(1)!=104 THEN ATU=1
IF CHR(2)!=72 AND CHR(2)!=73 AND CHR(2)!=105 AND CHR(2)!=104 THEN ATH=1
IF CHR(3)!=72 AND CHR(3)!=73 AND CHR(3)!=105 AND CHR(3)!=104 THEN ATM=1
IF CHR(4)!=72 AND CHR(4)!=73 AND CHR(4)!=105 AND CHR(4)!=104 THEN ATS=1
@ATASK
NEXT ATAX
NEXT ATAY

BG面も必要でしたら書きます 回答よろしくお願いします
長文失礼いたしました

359いったん:2013/09/29(日) 16:13:06 ID:gIAMbAZk
>>358
手っ取り早いのはataxとatayのループを-1から3にするのがいいと思います
>>355
公式サイトから初心者講座に行きましょう
>>356
forループとビット演算は初心者講座へ
スプライトは
http://ww5.tiki.ne.jp/~ochame/petitcom/p002.htm

360おか3:2013/09/29(日) 17:30:09 ID:gAYJaNS.
いったんさん

ありがとうございます

361名無しでした:2013/09/29(日) 19:13:42 ID:tKr.fKuE
いったんさん回答ありがとうございます
ぴったりくっついた際に止まるにはどうしたらいいでしょうか?
めんどくさいなら返事なしで結構です

362初心者:2013/10/01(火) 18:36:22 ID:QiGTZbxI
初心者講座を読んでもINPUT文がわからなかったので誰か教えてくださいませんか?
あと、INPUT文はこういう時に使う、など例文を挙げて説明してくださるとうれしいです。
それと、例文を挙げてこのINPUT文はこういう意味だよと解説してくださるとうれしいです。
頼みごとばかり言って申し訳ないですorzよろしくお願いします。

363名無しさん:2013/10/01(火) 20:29:02 ID:ZrhADAEQ
>>362
初めてやる時やハイスコアの名前入力
セーブ・ロードするファイルの名前
パスワードっぽいものetc...


INPUT"スウジ";A

INPUT "モジ";A$

INPUT"スウジトモジノコンゴウ";A,B$

364Ricky:2013/10/01(火) 21:22:08 ID:rPySbMPo
マリオカートのような、グラフィック面を使った
擬似3dレースゲームの作り方を教えてください!!!
どなたかわかる方、教えてください!!!お願い致します!!!!!

365初心者:2013/10/01(火) 21:30:05 ID:tH5DDFzQ
>>363 すいません。わからないです。。。

366いったん:2013/10/01(火) 22:07:15 ID:gIAMbAZk

>>357
①自分の座標を変数にとっておいて後で取り出す。
②スクロールは付属プログラムを見るとわかると思います。判定はBGREADを使う。参考になればどうぞhttp://www1.m.jcnnet.jp/hurasa/hp/img/Pikumin.png

>>364
http://smileboom.com/special/ptcm2/co_contest/1st.php
ここのPETIT RUN mkIIなんかは随分参考になるかと思います。
>>365
実際にやってみるとわかると思います。
INPUT命令は変数という箱に入力した文字、数字を入れるっていうイメージ。
たとえば、
INPUT"アナタノナマエハ?";A$
と入れると、実行画面に「アナタノナマエハ?」と表示されます。
そこに適当な文字を入れてEnterしたあと。
PRINT A$
とするとさっき入れた文字が出てきます。はい終わり。初心者講座読んでも実際に試してみないとわかんないと思います。

367初心者:2013/10/01(火) 22:51:59 ID:QiGTZbxI
>>366 いったんさん!!すごくわかりやすかったです!!
ご回答ありがとうございました!!!

368Ricky:2013/10/11(金) 20:09:32 ID:eA8oz3Mg
質問です!
http://plaza.rakuten.co.jp/route21/5006/
http://plaza.rakuten.co.jp/route21/diary/201203270001/
↑のように、オプション(オレンジ色の、自機を追尾してくるやつ)
を動かすやり方が分かりません。
なにをどうすれば自機のあとを追っかけてくれるのでしょうか?
プログラムリストを見てみても、何がどうなっているのかわかりません。
なので、どなたか分かる方、オプションの動かし方を教えてください!
どうかよろしくお願いいたします!!!!!

369いったん:2013/10/13(日) 23:43:53 ID:2NPOLURE
OP又はOP$という変数に座標を格納して後で取り出しているようです。
座標はXY座標を別々にCHR$しているみたいです。

これでもわからなかったらググるといいと思います。「グラディウス オプション アルゴリズム」とかで。

370Ricky:2013/10/14(月) 11:03:23 ID:eA8oz3Mg
>>369
分かりません…
できたら、できたらでいいんで、
サンプル的なプログラムをかいてください!!!
お願い致します。

371Ricky:2013/10/14(月) 11:22:50 ID:eA8oz3Mg
>>369
分かりません…
できたら、できたらでいいので、
サンプル的なプログラムを
書いてください!!!お願い致します。

372いったん:2013/10/16(水) 14:18:22 ID:2NPOLURE
http://plaza.rakuten.co.jp/route21/5006/の解説で。
自分の座標はSPX(MID0)、SPY(MID0)というのに入っている。
自分が動くたびに今の座標をCHR$(座標)で圧縮してOP$(0)OP$(1)に格納する。(181,182行目)
オプションは過去の自分の座標をたどるように動けばいいのでOP$に格納しているの座標を取り出す。(187,188行目)
OP$には座標が文字列として入っているので欲しいところの文字をMID$で取り出し、さらにASC()で数値に変換する。

373名無しさん:2013/10/19(土) 03:28:25 ID:mbS1ZqXs
>>368
>>368
オプションって自分の後を常についてきますよね。
ついてくるということは、常に○秒前に自機がいた位置にいるってことです。
じゃあ、○秒前の自機の位置をプログラムから常に調べるには?
…自機の位置を○秒分だけ、常に覚えとかないといけないです。

自分の座標の変数が JIKIX,JIKIY で、2秒分(60フレーム*3秒=120フレーム)ぐらいの座標を覚させましょう。
ZAHYOMAX=120 : ZAPOS=0
DIM MAEX(ZAHYOMAX),MAEY(ZAHYOMAX)
と宣言して、XとYの前の値を覚えておく配列変数を120個分用意します。これに順番に座標を入れていきます。
今これの何個目を使っているかを覚えておくカウンターとして ZAPOS という変数を使います。

十字キーで自機のXとY座標を動かす処理をしてから

MAEX(ZAPOS)=JIKIX : MAEY(ZAPOS)=JIKIY   ' 自機の座標を覚えされる
ZAPOS=ZAPOS+1   ' 何個目を使うかのカウンタを進める
IF ZAPOS>=ZAHYOMAX THEN ZAPOS=0   ' 最後まで使った場合はまた1個目から使う

とやると、
MAEX(ZAPOS-1),MAEY(ZAPOS-1)に1フレーム(1/60秒)前の座標が
MAEX(ZAPOS-2),MAEY(ZAPOS-2)に2フレーム(2/60秒)前の座標が… というふうに
前の座標を覚えておけるようになります。
ただし、配列変数は120個しか用意していないので、120個目まで使い切ったら
また1個目から使いまわすようにします。【★】の部分

ひとつめのオプションが1秒(60フレーム)遅れてついてくるなら、
OPPOS=ZAPOS-60 ' 最後に座標を覚えた場所から60個前
IF OPPOS<0 THEN OPPOS=OPPOS+ZAHYOMAX ' ただし1個目より前になった場合は一番後ろから数えなおす
という計算で、MAEX(OPPOS),MAEY(OPPOS) から1秒前に自機がいた座標を取ることができます。

オプションを3つ置きたい場合は、上の計算を繰り返し使って、
・0.5秒前(30フレーム)
・1.0秒前(60フレーム)
・1.5秒前(90フレーム)
のように一定間隔前に自機がいた座標を取れば、オプションがついて行く動きの完成です。
座標を覚えおく秒数を増やしたい場合は ZAHYOMAX の値を増やしてください。

変数って何? 配列って? ぜんぜんわからない、という場合はオプションの動きを作る以前の問題なので、
公式サイトの初心者向け講座をもう一度読んできてください。

374Ricky:2013/10/19(土) 14:48:16 ID:XunW4X3Y
>>372
>>373
ありがとうございます!!!!!
おかげさまでわかりました!!!
助かりました!!!!!
教えてくださってありがとうございました!!!!!!!!!!

375おか:2013/10/22(火) 18:27:43 ID:FohJbT6k
スプライトのアニメ表示方法を教えてください。spanm命令をいれたのになりませんでした。

376いぬまろ:2013/10/22(火) 19:52:17 ID:xB5Y.w7k
>>375
SPSETしましたか?
しているならプログラムリストを見せてくれたら分かるかも知れません

377おか:2013/10/22(火) 20:07:00 ID:FohJbT6k
いぬまろさんプログラムリスト↓↓
ACLS
PX=110
PY=90
B=64
@LOOP
VISIBLE1,1,1,1,1,1
SPSET 1,B,2,0,0,0
SPANM 1,4,20,0
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
:
ここは移動のプログラムリスト
:
VSYNC 1
GOTO @LOOP

378いぬまろ:2013/10/23(水) 07:31:01 ID:xB5Y.w7k
>>377
毎ループSPSETとSPANIMを実行しているので1枚目のアニメしか表示されませんので
SPSETとSPANIMをループ外で実行してください(5.6行目

379おか:2013/10/23(水) 22:53:30 ID:FohJbT6k
>>378
したけど、移動が出来なくなった。プログラムリストできればみせてください

380名無しさん:2013/10/24(木) 13:03:03 ID:GMUlcAz.
実質 @LOOP を3段下げるだけだから移動できなくなるってのは無いと思うんだけどな

381いぬまろ:2013/10/24(木) 15:40:00 ID:xB5Y.w7k
>>379
これでいけるはずですけど…

ACLS
PX=110
PY=90
B=64
VISIBLE1,1,1,1,1,1
SPSET 1,B,2,0,0,0
SPANM 1,4,20,0
@LOOP
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
:
ここは移動のプログラムリスト
:
VSYNC 1
GOTO @LOOP

382Ricky:2013/10/24(木) 19:02:29 ID:XunW4X3Y
質問です。
シューティングゲームを作ろうと思っていて、
処理落ちを防ぐために自機や敵の弾などを、補間移動
させようと思っているのですが、どうやればよいでしょうか。
教えてください!お願い致します!!!

383おか:2013/10/26(土) 18:49:42 ID:FohJbT6k
>>381
すいません全部のプログラムリスト
ACLS
PX=110
PY=90
B=64
VISIBLE 1,1,1,1,1,1,
SPSET 1,64,2,0,0,0
SPANM 1,4,20,0
@LOOP
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
IF A==1 THEN PY=PY-1
IF A==2 THEN PY=PY+1
IF A==9 THEN PY=PY-1:PX=PX-1
IF A==5 THEN PY=PY+1:PX=PX-1
IF A==10 THEN PY=PY-1:PX=PX+1
IF A==6 THEN PY=PY+1:PX=PX+1
IF A==8 THEN B=64
IF A==4 THEN B=72
IF A==1 THEN B=76
IF A==2 THEN B=68
VSYNC 1
GOTO @LOOP

これは直したんですが向きを変えるプログラムを入れているんですが向きが変わりません。どうしたらいいですか?。

384いったん:2013/10/26(土) 21:41:23 ID:2NPOLURE
B反映する命令無いから向き変わらないのは当たり前でしょ。
B変えるIF文の後にSPCHR 1,Bって入れればいいよ。
あと IF A==9,5,10,6のところは消して代わりにIF A==4,8,1,2のところを
IF A AND 4,8,1,2にするといいよ。下の向きを変えるところも同様。

385Ricky:2013/11/07(木) 21:52:48 ID:kKJKodko
質問です。
シューティングゲームとかで、自機や敵が出す弾を、
SPOFSで補間移動させるやり方を教えてください。
どなたか分かる方、回答お願い致します!!!

386おか:2013/11/13(水) 22:57:21 ID:iC80yMGM
TALKでイントネーションとかいうひと?みたいなのがあってどうやってかえればいいか(イントネーション)をおしえてください。説明書には@H数値のどうのこうのとかかいてあったけどわかりません。教えて下さい

387Ricky:2013/11/16(土) 19:34:00 ID:kKJKodko
>>386
TALk命令では、例えば
TALK”アイウエオ”
と打てば「アイウエオ」と話します。
イントネーションの変更は、@H 数値で変更でき、
@H0=標準語
@H1=ギャル風
@H2=外人風
@H3=関西弁風
となっています。
なので、例えば
TALK”@H3アイウエオ”
と打てば、関西弁風に「アイウエオ」と
話すというわけです。

388おか:2013/11/20(水) 22:49:01 ID:iC80yMGM
>>387
ありがとうございます!おかげでよくわかりました!
質問です。
リソースファイルの種類のMEM(メモリー)
はなんのデータをほぞんするんですか?いまRPGゲームを作っていてそれのやくにたてたらいいなって思って質問しました!回答お願いします

389名無しさん:2013/11/21(木) 04:51:58 ID:mj8/.FRk
>>388
256文字までの文字列を保存できます。
ただ、仲間が複数いたりステータスの項目が多い場合は、
グラフィック(GRP)を使うことを推奨します。
ちなみにグラフィックの場合は256x192x256=12582912バイト(12メガバイト)と、
データのサイズこそ大きいですが1枚で大量のデータを保存できます。

390名無しさん:2013/11/21(木) 05:29:47 ID:mj8/.FRk
訂正。
グラフィック面のデータ容量は49164バイトです。
しかし、実質12582912バイト分のデータを保存できるのは変わりありません。

391名無しさん:2013/11/21(木) 06:25:50 ID:mj8/.FRk
さらに訂正。
12582912"バイト"ではなく12582912"ビット"でした。
それでも256*192=49152文字分のデータが保存できます。

392名無しさん:2013/11/21(木) 07:12:23 ID:mj8/.FRk
さらにさらに訂正。
12582912ビットは計算ミスです。

……なんかメルビルさんと同じ計算ミスをしてるなぁ。
スレを汚して申し訳ない。

393名無しさん:2013/11/22(金) 13:05:13 ID:pscspFq.
>385
今更ですが
SPOFS 管理番号,x,y,補完時間なので
補完時間は一定(長め)にして
移動先をかなり遠めに設定すればいいと思います。
当たり判定はSPHITで取得できるので普通にこれでいいと思います。
動きを止める時は補完時間を0にしてSPOFSすると止まります。

394Ricky:2013/11/23(土) 21:18:48 ID:kKJKodko
>>393
助かりました!
ありがとうございました!

395おか:2013/11/26(火) 17:54:29 ID:iC80yMGM
>>393
どうしたらMEMファイルに文字列をほぞんできるんですか?

396名無しさん:2013/11/26(火) 20:25:37 ID:zDNIZ14U
>>393
MEMファイル自体が文字列なので代入するだけで保存はできます
VAR$="STRING"
MEM$=VAR$
?MEM$
SAVE"MEM:TEST"'保存
MEM$=""'消去
LOAD"MEM:TEST",0'読込
?MEM$

397<削除>:<削除>
<削除>

398Ricky:2013/12/04(水) 16:02:25 ID:kKJKodko
質問です。
付属の”GAME4”にでてくる敵の、
ホーミングミサイルとか、つぼの敵のように、
その敵の向きを自機に向かせるのって、
どうやったらできるのでしょうか。教えてください!
お願い致します。

399名無しさん:2013/12/04(水) 19:30:02 ID:4DRCLOs2
>>398
ATAN(目標Y-始点Y,目標X-始点X)で方向受け取れるよ。

400Ricky:2013/12/05(木) 20:51:23 ID:2v/jR0PI
>>399
ありがとうございます!でも出来ません…SPANGLEとかで、
敵の向きを自機の方向に向かせるために、
どのようなプログラムを組めばいいのかが分かりません。
なので、できれば教えていただきたいです。
お願い致します。

401名無しさん:2013/12/06(金) 00:17:42 ID:JZQ7oQfk
>>400
SPANGLEは角度が必要でATANはラジアン値が返るので
SPANGLE ...DEG(ATAN(目標Y-始点Y,目標X-始点X))とかでは

402Ricky:2013/12/08(日) 15:24:30 ID:kKJKodko
>>401
出来ました!
今まで教えてくださってありがとうございました!!!

403ヨッキ:2013/12/27(金) 18:31:37 ID:XGIK/ZTk
質問ですが、編集モードを作らないで作品を完成させることは出来ますか?

404ヨッキ:2013/12/27(金) 18:37:00 ID:XGIK/ZTk
質問ですが、プログラムを作ったあとの終わらせ方がわかりません。初心者なので、出来るだけ分かりやすくお願いします。

405ヨッキ:2013/12/27(金) 19:01:06 ID:XGIK/ZTk
期待しない方がいいかもしれませんが、たぶんですけど、INPUTは、「"」で囲まれたところを質問文にすることだと思います。(間違っていたらごめんなさい!)
例 (使い方)
INPUT "アナタノ ナマエヲ オシエテクダサイ" ; NAME$
(Aボタンを押す)↓
アナタノ ナマエヲ オシエテクダサイ
(という風に表示されると思います
そしたら、質問に答えてください。)

アナタノ ナマエヲ オシエテクダサイ
(名前を入力)タカノ ススム
(と言う風に質問に答えてください)

アナタノ ナマエヲ オシエテクダサイ
タカノ ススム
OK

(OKと表示されたらOKです。(多分))

406ヨッキ:2013/12/27(金) 20:29:23 ID:XGIK/ZTk
ある「サンプルプログラム集」を見つけて やってみたい と思って、実際にやって見たところ、1行で入りきれない部分があったのですが、Aボタンを押すと、エラーが表示されてしまいます。
どうしたら全部を入れることが出来ますか?
初心者なので、できるだけ分かりやすく教えてください。
(例)
個人情報を抽出
01. INPUT "アナタノ ナマエハ" ; NAME$
02. INPUT "オトシハ イクツデスカ" ; AGE
PRINT "アナタノ ナマエハ " ; NAME$ ; " テ( ")
と、( )の中がはみ出してしまいます。

407名無しさん:2013/12/28(土) 17:48:15 ID:er8fyo6w
>>406
なぜ一行に収めたいのですか?普通にサンプル通りに改行すれば普通に動くはずです。
もし一行にするなら命令の間にコロン「:」を入れる必要があります

408Ricky:2014/01/05(日) 09:22:40 ID:kKJKodko
質問です。
シューティングゲームで、
敵が自機に向けて出す弾を3方向とかに
したいんですが、どうすればできますか?
分かる方、どうか教えてください!お願い致します。

↓こんな感じで
              敵

           ↓  ↓  ↓
          
          弾   弾   弾

              自

409名無しさん:2014/01/05(日) 12:11:50 ID:CYoXanEU
>>408
単発の自機狙い弾が撃てるのなら、あとは角度を変えて発射するだけです。

410Ricky:2014/01/05(日) 14:35:00 ID:kKJKodko
>>409
あ、色々やったら出来ました!!!
ありがとうございました!!!!!

411Ricky:2014/01/09(木) 17:46:57 ID:kKJKodko
質問です。
↓動画
http://www.youtube.com/watch?v=qejgzFgFKdA&amp;feature=youtu.be
↓QRコード
http://www8.plala.or.jp/enuou/petitcom/menu3.html#gra1

↑なんですけど、このゲームのように、自分でBGでマップを作って
スクロールさせるやり方を教えてください!!!お願い致します。
自分の場合、作ってスクロールさせてもBGが途切れたり一周したり
してしまいます。なので、分かる方は、どうか教えてください
お願い致します。

412名無しさん:2014/01/10(金) 12:53:08 ID:WTHQUPTc
BGは64x64のサイズなので64以上のサイズは再び0に書き直す必要があります。64まで作ったらまた0に戻るようにしましょう。
スクロールは補完移動だと座標0に戻る時にぐるっと回ってしまうので保管時間は0にしましょう

413タマゴさん:2014/01/11(土) 13:56:53 ID:p6jjJFnQ
BGがスクロールしているとき、見えない部分を書き換えていけばいいんじゃない?

@MAINLOOP

IF SCX%8>BGX%8 THEN GOSUB @BGWRITE
SCX=BGX

BGX=BGX+1
BGOFS 0,BGX,0
VSYNC 1
GOTO @MAINLOOP

こんな感じに

414YoM:2014/01/12(日) 11:59:15 ID:ZI9hp1uE
プチコンでRPGをつくりたく、
SPSETで、CHREDでつくった自作スプライトを表示したいのですが、
調べてみても中々分かりませんので、教えて頂けませんか。
例文で示して頂けると有難いです。

415名無しのプチコン:2014/01/13(月) 12:13:39 ID:gd.MUO8Y
ホッケーが作りたいんですが、どうやったら壁で跳ね返らせられるのですか?

416YoM:2014/01/16(木) 22:35:35 ID:JsEpu10g
414についてですが、自分で解決できました。
ありがとうございました。

417名無しさん:2014/01/23(木) 21:02:04 ID:27T7ik1U
ACLS

X=123
Y=95
TX=RND(255)
TY=RND(191)
TA=RND(360)

SPSET 0,0,0,0,0,0
SPSET 1,0,0,0,0,0
SPHOME 0,8,8
SPHOME 1,8,8
SPOFS 0,X,Y
SPOFS 1,TX,TY

@A
VSYNC 1
IF BUTTON() AND 1 THEN Y=Y−2
IF BUTTON() AND 2 THEN Y=Y+2
IF BUTTON() AND 4 THEN X=X−2
IF BUTTON() AND 8 THEN X=X+2
R=DEG(ATAN(Y−TY,X−TX))
IF TA<R THEN TA=TA+4
IF TA>R THEN TA=TA−4
IF TA<0 THEN TA=360
IF TA>360 THEN TA=0
TX=TX+COS(RAD(TA))*2
TY=TY+SIN(RAD(TA))*2
SPANGLE 1,TA
SPOFS 0,X,Y
SPOFS 1,TX,TY
LOCATE 0,0:PRINT FLOOR(TA)”     ”
LOCATE 0,1:PRINT FLOOR(R)”     ”
GOTO @A

これでSPRITE1がSPRITE0を追跡するようにしたいんですが、SPRITE1がSPRITE0よりもYが大きいとSPRITE1が回ってばっかりで追跡してこなくなるんです、どうすれば直せます?

418名無しさん:2014/01/24(金) 01:33:16 ID:CYoXanEU
>>417
たしかATANが返す値は -π 〜 π じゃなかったかな。
DEGを噛ませたら -180 〜 180 になります。
リストを打ち込んではいないので動作確認はしていませんが・・・

419暁(>>417):2014/01/24(金) 15:35:28 ID:27T7ik1U
うーんひとまず何処を訂正したり付けたしすると良いかとか教えてほしいです

420名無しさん:2014/01/24(金) 21:25:32 ID:JUnbbvLQ
TAの範囲 0〜360
Rの範囲 -180〜180

ちゃんと範囲を揃えないと正しい判定は行えない

421:2014/01/24(金) 23:43:40 ID:YzwPXaTk
>>420
IF R<0 THEN R=R+360
してみたが意味なかった、くそぅ何処を修正すればいいのか

422名無しさん:2014/01/25(土) 11:57:23 ID:XZ4mTL1A
>>421
この場合ならIFは不要でR=R+180では?

423名無しさん:2014/01/25(土) 12:15:41 ID:lFSBzV7A
>>421
そのIFをATANの次ぐらいに入れれば、少なくとも挙動は変わるはずだか、
そして、「何処を」って言ったら旋回方向を決めてる
IF TA<R、IF TA>R 
しかないわけで…
そして、値の範囲をそろえればそれだけでうまくいくってものでもない
(例:目標物を1時方向に発見!自機は11時方向を向いている。左旋回だ!?)
だからTAとRの差を求めそれを正規化(想定する範囲に収めること)し、
どっちに回ればいいかを判定する必要がある。

この前、まめちしきに書いたんだけど外積使うと楽だよ

424名無しさん:2014/01/25(土) 14:23:56 ID:JUnbbvLQ
>>421
範囲を揃えたらもう自キャラの方向と敵キャラの進行方向が
範囲内の上限と下限にまたがっている場合に追尾できないという点を
改善する必要がある。
これはRとTAの角度差の絶対値が180度以上の場合に敵キャラの
進行方向を逆にするだけでいい。

425:2014/01/25(土) 15:38:09 ID://Vcaxvc
>>422
それだとなんか追尾しないで逃げていってしまう
>>423
>>424
「そのIFをATANの次ぐらいに入れれば、少なくとも挙動は変わるはずだか」
うん、確かに変わったけどなんか今度はSPRITE1がSPRITE0の左側に居ると逃げていくんだよねえ
俺高校生じゃないからさ、よくわからないっていうかなんていうか・・・ごめん
もうどうすればいいのか・・・わかんねえ

426423:2014/01/25(土) 17:04:28 ID:lFSBzV7A
つまりR{-180〜180}とTA{0〜360}の差を求める(-TA{-360〜0})
R-TA{-540〜180}
これを正規化する。まず値をプラスにしちゃう
R-TA+720{180〜900}
これを0〜360に収める。Dとしよう
D=(R-TA+720)%360
このDがあと何度右に曲がればPLAYER機の方を向くかになる。
これが180より小さければ右旋回すればいいが、
180より大きいなら左旋回する必要がある。

427名無しさん:2014/01/25(土) 18:50:05 ID:JUnbbvLQ
>>425
TAとRの範囲を揃えた場合にはRの値を求めた後に
IF ABS(TA-R)>180 THEN K=-4 ELSE K=4
を入れてTA=TA+4、TA=TA-4をTA=TA+K、TA=TA+Kに
変更すればいい。

428名無しさん:2014/01/25(土) 18:51:58 ID:JUnbbvLQ
↑訂正 TA=TA+K、TA=TA+K ではなく TA=TA+K、TA=TA-K

429:2014/01/25(土) 19:07:21 ID:YzwPXaTk
>>426
できたあああ!!ありがとう!!なぜこういう原理になったが知らんがなんにも考えないでとりあえずこれでゲーム作るよ!まじありがとう!
>>427
やり方が違ったのか知らんけどそれじゃできなかった、ごめん

皆本当にありがとナs・・・じゃなくてありがとう!!

430名無しさん:2014/01/25(土) 19:17:57 ID:JUnbbvLQ
>>427の原理は>>426と同じだけど
範囲を揃えることで正規化せず単純に差分を求めるだけで済む分だけ
理解をするのが簡単になっている。

431:2014/01/25(土) 23:34:37 ID:YzwPXaTk
え、えと、ごめん?なさい

432YoM:2014/01/26(日) 00:22:49 ID:wp61rHv6
ACLS
LOAD"SPU0:スプライト名"
LOAD"COL1:パレット名"
SPSET 0,0,0,0,0,0,32,32

↑のようにして画面にキャラを表示させているのですが、
プログラムを実行するときにいちいち確認ダイアログを表示させたくありません。
どういった命令を加えるとよいのでしょうか。
もしくは、別のよりよい命令があるようならば教えて頂きたいです。

433名無しさん:2014/01/26(日) 07:35:39 ID:.JtICb96
>>432
LOAD命令の引数にfalseを追加するとダイアログが消せます。
ついでにSYSBEEP=FALSEと入れればピーガー音もなくなります

434YoM:2014/01/26(日) 09:52:45 ID:wp61rHv6
>>433
出来ました。ありがとうございます。

435初心者:2014/01/26(日) 14:48:37 ID:kttrSivQ
下画面に変数を表示するにはどうしたらいいですか?

436ヨッキ:2014/01/27(月) 22:10:30 ID:XGIK/ZTk
またまた、質問です。
あるプログラムの変数をSAVEしたいのですが・・・
SAVEの仕方が分かりません
超超ド初心者なので、出来るだけ詳しくお願いします。
出来れば、例もつけてくれると嬉しいのですが・・・
サンプルもご用意でk(蹴
失礼しました。

437名無しさん:2014/01/31(金) 15:35:52 ID:XTL1auBA
>>436
http://wiki.hosiken.jp/petc/?FAQ#ge80793c

438Ricky:2014/02/06(木) 17:29:38 ID:kKJKodko
質問です。
64×64ドット以上のマップを、BGで書きたいのですが(DATA文等で)
どうすればできるのでしょうか。分かる方教えてください。

439名無しさん:2014/02/09(日) 15:54:33 ID:OcC0RsXo
スプライト使ったアクションゲーム作りたいんですが
キャラクターをジャンプさせるにはどのようなプログラム
を組めばよいですか?
一回ジャンプさせてみたけど、ジャンプさせてる時BGとの座標がずれて
BGREADを使っても地面にめり込んでしまいます
お助けをおぉぉ

440名無しさん:2014/02/10(月) 07:56:10 ID:FgW2VLVQ
>>438
DATA文で普通に64x64以上で定義しておきBGPUTで表示画面の一回り外を常に更新させれば良いと思います。そうすればあたかも大きいマップのように見えるはずです。(BGの仕様的にはループしていても)

>>439
ジャンプの座標の計算は鉛直投射でググると出ます。キャラの変数を座標+加速度にしましょう。
地面のあたり判定は座標の小数点以下を繰り上げor繰り下げすればいいと思います。プログラム見てないので良くわかりませんが。

441名無しさん:2014/02/10(月) 20:05:36 ID:OcC0RsXo
439です
またまたすみせん
僕のプログラムはメインループのたびに
初速度に加速度をたしてそれで出たものをたしています
A=初速度 B=加速度 C=速度

C=A
@LOOP
Y=Y+C
SPOFS 0,X,Y
BX=FLOOR(X/8)
BY=FLOOR(Y/8)
BGREAD (0,BX,BY+2),C(1),P,H,V
BGREAD (0,BX+1,BY+2),C(2),P,H,V
IF C(1)!=0 OR C(2)!=0 THEN とまれぇぇ!!(実際はRETURNです)
C=C+B
WAIT 1
GOTO @LOOP

加速度=重力という認識でよろしいんですよね
実際はサブルーチンで行っているんですが
こんな感じなんですが
ここはこうだった方がいいなどあったらお願いします

442名無しさん:2014/02/10(月) 20:08:14 ID:OcC0RsXo
連コメすみせん
C(1)やC(2)は速度とは別としてください

443名無しさん:2014/02/10(月) 20:59:18 ID:.JtICb96
>>440の者です
Y=Y+CとSPOFSを当たり判定の後ろに持って行ってはどうでしょうか?そうすれば「移動しても地面にめり込まなければ下がる」という風になるかと。
その代わりBGREADのところをBGREAD(0,BX,BY+2+C/8)(以下略)
あとIFの後に座標を修正する文を入れたほうがいいかもしれません。
違ったらすみません。

444名無しさん:2014/02/10(月) 21:40:21 ID:OcC0RsXo
おお!!ありがとうございます!!

445Ricky:2014/02/11(火) 12:56:26 ID:kKJKodko
>>440
すいません。
438ですが、例えばどのようにプログラミングすれば良いのでしょうか。
DATA文のマップの表示は、以下のようにして表示しています。

CLEAR:ACLS
RESTORE @MAP
@MAP
FOR Y=0 TO 23
READ A$
FOR X=0 TO 31
B$=MID$(A$,X,1)
C=0
IF B$=="0" THEN C=0
IF B$=="1" THEN C=782
BGPUT 0,X,Y,C,2,0,0
NEXT
NEXT
'次のDATA文は、横32文字、縦24文字のものです。
DATA"11111111111111111111111111111111"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11000000000000000000000000000011"
DATA"11111111111111111111111111111111"

です。長くてスイマセン…
できれば教えていただきたいです。
よろしくお願い致します。

446名無しさん:2014/02/11(火) 22:20:10 ID:.JtICb96
>>445
サンプルを置きました。→http://ux.getuploader.com/petitcom_mkII/download/118/bgscr.PNG
上記のプログラムでは変数(map)にマップの状態を保存して移動する時にまわりの状態をBGに書き込んでいます。

447Ricky:2014/02/12(水) 16:36:02 ID:kKJKodko
>>446
おおおおおおお!!!!!
嬉しいです!
マジでありがとうございました!!!!!

448名無しさん:2014/02/17(月) 18:44:56 ID:v.mJVWFs
SPRITキャラをなめらかに
ジャンプさせるにはどうしたらいいですか?

449Ricky:2014/02/19(水) 16:27:50 ID:kKJKodko
>>448

1)ACLS:CLEAR
2)
3)SPSET 0,64,2,0,0,0
4)PX=100
5)PY=100
6)JP=0
7)JS=0
8)SPOFS 0,PX,PY
9)
10)GFILL 0,115,225,191,5
11)
12)@LOOP
13)B=BUTTON(2)
14)IF (B AND 16)==16 THEN JP=1:JS=6
15)IF JP==1 THEN GOSUB @JP
16)SPOFS 0,PX,PY
17)WAIT 1
18)GOTO @LOOP
19)
20)@JP
21)PY=PY-1
22)JS=JS-0.3
23)IF PY>100 THEN JP=0:PY=100
24)RETURN

これでどうでしょうか?
ちなみに1画面です(笑)
ジャンプの高さや速さを変えたい時は、
14行目の最後のJS=数 ってところをいらったり
22行目のJS=JS-数 ってところをいらったりしたら
いいですよ〜。役にたてたら嬉しいです!

450名無しさん:2014/02/24(月) 12:45:44 ID:1sNhFi5Y
>>449
そのプログラムだと、JSの値がスプライトの座標PYに影響を与えていないから
上に飛んでいったまま、地面に下りてこないよ

21)PY=PY-1

21)PY=PY-JS
と変更すると、ちゃんとジャンプになる

451Ricky:2014/02/24(月) 18:28:06 ID:kKJKodko
>>450
間違えました
報告ありがとうございました!

452Ricky:2014/02/27(木) 19:15:49 ID:kKJKodko
質問です。
http://6407.teacup.com/ochame/bbs/3711
http://ww5.tiki.ne.jp/~ochame/petitcom/polygon.htm
↑とかのポリゴンの表示の仕方を見ましたが、よく分かりません。
できれば、もう少しわかりやすく説明していただける方は
おられるでしょうか。ポリゴンの表示の仕方が知りたいです。
どなたか分かる方、ご回答宜しくお願い致します。

453名無しさん:2014/02/27(木) 23:43:11 ID:JUnbbvLQ
>>452
三角関数と行列とベクトルから説明しないといけないな。
ちなみにこれらは理解している?

454Ricky:2014/02/28(金) 20:36:09 ID:kKJKodko
>>453
すいません
理解してません…

455名無しさん:2014/02/28(金) 23:07:11 ID:JUnbbvLQ
>>454
それならば三角関数も行列もベクトルも使わずに説明する。
一番基本となるのは三角形1枚のポリゴンなので
その1枚のポリゴンの頂点のX座標、Y座標、Z座標をあらかじめ決めておく。
3Dポリゴン表示はどこから見ているのかというカメラの位置を設定する必要がある。
カメラの位置は計算しやすいように原点となる座標(0,0,0)に設置する。
カメラの向きは計算しやすいようにZ軸の正の向きに固定する。
すると三角形ポリゴンの各頂点のプチコンの画面上に表示する座標は
各頂点のZ座標で割るだけで良くなる。
http://ww5.tiki.ne.jp/~ochame/petitcom/tips/routine.htm#3d_screen
あとは表示してい3点を結んでそれを塗りつぶせば三角形1枚ポリゴンの描画完了。

ACLS:CLEAR
X(0)=15:Y(0)=20:Z(0)=10
X(1)=25:Y(0)=-20:Z(0)=10
X(3)=-20:Y(0)=30:Z(0)=10
FOR I=0TO 2
  SX(I)=128+X(I)/Z(I)*10
  SX(Y)=96-Y(I)/Z(I)*10
NEXT
GLINE SX(0),SY(0),SX(1),SY(1),2
GLINE SX(1),SY(1),SX(2),SY(2),2
GLINE SX(2),SY(2),SX(0),SY(0),2
GPAINT (SX(0)+SX(1)+SX(2))/3,(SY(0)+SY(1)+SY(2))/3,2

最初に設定している3点の座標を適当に弄れば表示されるポリゴンの形や大きさが変わる。
ただし、このプログラムでは処理の都合上Zの値は0より大きな数で無ければならない。
リンク先のポリゴン表示プログラムでは設定座標は回転の中心を(0,0,0)に設定して
カメラの位置は操作で変えられるようになっている。

複数のポリゴンを表示する場合は各ポリゴンの頂点座標をすべて設定してやれば可能になる。
ただし、それを回転させるには三角関数と行列が必須になるし、ポリゴンの裏表の判断や
陰影を付けるためにはベクトルが必須になる。

456名無しさん:2014/03/01(土) 13:15:28 ID:JUnbbvLQ
>>455のリストは1カ所タイプミスしてた

SX(Y)=96-Y(I)/Z(I)*10 は SY(I)=96-Y(I)/Z(I)*10

457名無しさん:2014/03/02(日) 11:11:17 ID:JUnbbvLQ
いや1カ所ではなかったw
最初に設定している座標における配列の添え字も間違いだらけで正しくはこう。
X(0)=15:Y(0)=20:Z(0)=10
X(1)=25:Y(1)=-20:Z(1)=10
X(2)=-20:Y(2)=30:Z(2)=10

コピペでリストを書きながら適当に作ったプログラムであることがバレバレだ

458Ricky:2014/03/02(日) 15:27:57 ID:kKJKodko
>>457
ありごとうございます!!!
ポリゴン使いこなせるように頑張ります!!!!!

459Ricky:2014/03/10(月) 15:55:50 ID:kKJKodko
質問です。
mmlで、psgの音を5チャンネル以上だすと、
なぜか音が欠けたりでなくなったりしてしまいます。
これを改善させることはできますでしょうか。
どなたか分かる方、ご回答を宜しくお願い致します。

460名無しさん:2014/03/10(月) 23:41:12 ID:IC2jmB2c
>>459
残念ながら仕様です。
参考↓
http://smileboom.com/special/ptcm2/media/appendix120411.png
使い方によってはエンベロープなどの設定を変えると改善する場合があります。ですが基本的にpsgは余裕を持って4,5チャンネルで動かすべきでしょう。

461Ricky:2014/03/11(火) 17:14:05 ID:kKJKodko
>>460
そうなんですか…
もっと使えたらいいですよね。
ありがとうございました!

462@0918nobita:2014/03/26(水) 11:20:52 ID:8UOrrdjY
LOADでセーブデータ"MEM:DORA1"を読み込んだあと、
そのセーブデータがなかったならこっち、
あったならこっち、と、IF文で条件分岐させるには、どんな文にすればいいですか?

463名無しさん:2014/03/26(水) 23:25:36 ID:jkORaBhk
>>462
ファイル系命令の実行結果は、システム変数の『RESULT』に入るので、それを参照する
RESULTに入る値は『失敗:FALSE、成功:TRUE、中止:CANCEL』なので、
以下のようにすればいい

LOAD "MEM:DORA1"
IF RESULT==TRUE THEN 読み込みが成功した場合の処理
IF RESULT==FALSE THEN 読み込みが失敗した場合の処理

464名無しさん:2014/03/27(木) 10:14:13 ID:8UOrrdjY
DATA "A","B","C"
DATA "D","E","F"
このあとに、PRINT命令でBのみを表示するには、どのように記述すればいいですか?

465@0918nobita:2014/03/29(土) 07:59:11 ID:8UOrrdjY
INPUT文で入力された文章の中に、「この単語があったら@LOOPへ、
なかったなら@LOOP2へ」みたいなIF文は、どう記述すればいいですか?

INPUT A$
IF 〇〇〇〇 THEN GOTO @LOOP ELSE GOTO @LOOP2

こんなかんじ?で、〇〇〇〇の部分がわかりません…

466名無しさん:2014/03/29(土) 12:10:05 ID:jkORaBhk
>>465
INSTRを使え
使い方はマニュアルを読め
というか、質問する前にマニュアルを読んだ方が早いと思うぞ

467@0918nobita:2014/03/30(日) 00:08:30 ID:8UOrrdjY
>>466
ありがとうございます

468@0918nobita:2014/04/03(木) 07:54:58 ID:8UOrrdjY
GRPでセーブする方法を教えて下さい。
または、それを書いてあるページを教えて下さい。

469名無しさん:2014/04/03(木) 11:19:29 ID:wgKI2VG6
>>468
単に画像として保存するなら
SAVE"GRP0:FILENAME"
GRPの後の数字で保存するページを指定できる、詳しくは説明書読め

470コモサイ:2014/04/03(木) 13:56:05 ID:CNZMZgSU
カラーパレット(?)を自分で作るにはどうしたらいいでしょうか?

471コモサイ:2014/04/03(木) 14:13:00 ID:CNZMZgSU
自己解決しました。

472@0918nobita:2014/04/04(金) 10:59:32 ID:8UOrrdjY
説明書見ながらINSTR命令使ってみてるんですが、
INSTR("コンニチハ" , A$)
と記述すると、A$に"コ"でも戻り値が0になってしまいます。
"コンニチハ"に全部の文字が合ってないと0にならないようにするには
どうすればいいですか????

473@0918nobita:2014/04/04(金) 11:00:56 ID:8UOrrdjY
3行目→と入力するとA$に"コ"を代入しても戻り値が0になってしまいます。

474Ferrari:2014/04/04(金) 12:26:18 ID:kKJKodko
質問です。
擬似3dレースゲームの作り方を教えてください!
①コースの作り方(DATA文や、自作したGRPデータを読み込んだり)
②コースの進ませ方(前進のしかたが知りたいです。)
この2つのことを教えていただきたいです。また、いろんなサイトを見ましたが、
よくわからないので、できればここで教えていただきたいです。
宜しくお願い致します。

475名無しさん:2014/04/04(金) 13:05:03 ID:cRXUv98g
>>472
普通に正しい挙動です。INSTR関数あくまでも「検索」関数なので完全一致にしたいなら普通に演算子を使うべきです。
A$=="コンニチハ"

476最近ハマったプチコん野郎:2014/04/04(金) 13:11:55 ID:qPoSmOqo
»472
僕がおもうに
IF命令をつかうのはどうでしょう
僕はどんなプログラムを書きたいかが分かりません
参考になったのであれば
是非参考にしてください
長文失礼いたしました

477名無しさん:2014/04/04(金) 13:14:27 ID:cRXUv98g
>>474
単に3dレースと言われても・・・
下の解説やリストを見ればある程度わかるのではないかと
http://wiki.hosiken.jp/petc/?cmd=read&amp;page=Toukou%2FRAYCAST%20MAZE&amp;word=3d
というかこれでわからないなら基礎知識が足りないと思います。

478名無しさん:2014/04/04(金) 19:17:20 ID:JUnbbvLQ
>>474
疑似3Dレースゲームと一口でいってもファミコンのレースゲームのように
コースが一次元的なゲームとスーファミのマリオカートのようにコースが
二次元的なゲームとでは作り方が全然違う。
簡単なのは前者の方。

479Ferrari:2014/04/04(金) 20:09:16 ID:2v/jR0PI
>>478
マリカのような、コースがつながってる(?)やつです。

480名無しさん:2014/04/04(金) 20:30:24 ID:JUnbbvLQ
>>479
それならば三角関数を使ってGRPで用意したコースを回転させる必要があるな。
ちなみに簡単な方(>>478の前者)の疑似3Dレースゲームは作ることはできるの?

481Ferrari:2014/04/04(金) 21:44:21 ID:kKJKodko
>>480
無理です…。
でも、道路表示させたりカーブを作ったりすることはできます…。

482名無しさん:2014/04/04(金) 22:03:27 ID:JUnbbvLQ
>>481
前者の一次元的コースは単純に距離に応じて拡大処理をするだけなので
簡単だけど後者の二次元的コースはそれに回転が加わるため前者が
作れないと後者は作れない。
まずは、その表示できる道路を使って前者のゲームを作るところから始めよう。

483Ferrari:2014/04/04(金) 22:07:01 ID:kKJKodko
>>482
宜しくお願い致します!!!

484名無しさん:2014/04/04(金) 22:40:39 ID:JUnbbvLQ
>>483
一次元的なコースのレースゲームならば>>474の①のコースデータは
直線、右カーブ、左カーブを示すデータを用意するだけだし
②の前進の仕方はコース表示を徐々に拡大するだけなのでどこで
躓いているのか分からない。
現時点で作っているプログラムリストもしくはQRコードを用意しないと
これ以上の助言は難しい。

485Ferrari:2014/04/04(金) 23:37:04 ID:kKJKodko
>>484
ええと↓こんな感じで作っています。(でも前進の仕方が分かりません…)

CLEAR:ACLS
L=100
R=0
V=0
P=0.95
TK=0
@LOOP
GPAGE 0,N,2-N:N=2-N
C=128
W=200
GCLS 224
GFILL 0,Y,255,255,10
Z=5
J=J+1
WZ=W:VZ=V
Y=191
FOR I=0 TO L-1 STEP 2
GFILL C+W+VZ,Y,C-W+VZ,Y-Z*2,13
GFILL C+W/1.1+VZ,Y,C+W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/1.1+VZ,Y,C-W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/18+VZ,Y,C+W/18+VZ,Y-Z*2,15-(J%12<6)*2
C=C+R:Y=Y-Z:VZ=VZ*P:W=W*P:Z=Z*P:J=J+1:Y=Y-TK
NEXT
'WAIT 1
K=BUTTON()
IF K AND 1 THEN TK=TK+0.1
IF K AND 2 THEN TK=TK-0.1
IF K AND 4 THEN V=V+5
IF K AND 8 THEN V=V-5
IF K AND 16THEN R=R+0.1
IF K AND 32THEN R=R-0.1
GOTO @LOOP

486名無しさん:2014/04/05(土) 20:13:10 ID:JUnbbvLQ
>>485
前進処理はできているのであとはブレーキとアクセルの搭載だな。
そしてコースデータを用意してそれを元に表示して
自車と敵車の動きを付ければ一応ゲームとしては成立するかな。

487Ferrari:2014/04/05(土) 21:00:54 ID:2v/jR0PI
>>486
前進ってできてるんですか!?
J=J+1 っていうところで、車線とかの模様をスクロールさせているだけで、
(スクロールしない状態は、初めのJ=J+1 ってところを、J=0とすればなります)
前進させてるように見えますが、実際には道は静止している状態です。

488名無しさん:2014/04/05(土) 22:42:01 ID:JUnbbvLQ
>>487
疑似3Dなんだから前進しているように見えているだけでOK。
そのスクロール速度を変えれば自車の速度を表現できる。

489Ferrari:2014/04/06(日) 10:38:22 ID:kKJKodko
>>488
そうなんですか!
拡大とかしなくていいんですか。
で、アクセルとブレーキは… 7行目のループから書いていきます。
あと、新しく追加したとこは、(NEW!!!)ってしときます。
変えたとこは(変更!!!) ってしときます!

@LOOP
GPAGE 0,N,2-N:N=2-N
(NEW!!!)CLS
C=128
W=200
GCLS 224
GFILL 0,Y,255,255,10
Z=5
(変更!!!)J=0
(NEW!!!)LOCATE 25,0
(NEW!!!)PRINT FLOOR(JJJ*40);"km/h"
(NEW!!!)IF JJJ<0 THEN JJJ=0
(NEW!!!)JJ=JJ+JJJ
(NEW!!!)J=J+JJ
WZ=W:VZ=V
Y=191
FOR I=0 TO L-1 STEP 2
GFILL C+W+VZ,Y,C-W+VZ,Y-Z*2,13
GFILL C+W/1.1+VZ,Y,C+W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/1.1+VZ,Y,C-W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/18+VZ,Y,C+W/18+VZ,Y-Z*2,15-(J%12<6)*2
C=C+R:Y=Y-Z:VZ=VZ*P:W=W*P:Z=Z*P:J=J+1:Y=Y-TK
NEXT
'WAIT 1
K=BUTTON()
IF K AND 1 THEN TK=TK+0.1
IF K AND 2 THEN TK=TK-0.1
IF K AND 4 THEN V=V+5
IF K AND 8 THEN V=V-5
(NEW!!!)IF (K AND 16)==16 AND JJJ<3 THEN JJJ=JJJ+0.05
(NEW!!!)IF (K AND 16)==16 AND JJJ>3 AND JJJ<7 THEN JJJ=JJJ+0.005
(NEW!!!)IF (K AND 16)!=16 AND JJJ>0 THEN JJJ=JJJ-0.05
(NEW!!!)IF (K AND 32)==32 AND JJJ>0 THEN JJJ=JJJ-0.1
(変更!!!)IF K AND 512THEN R=R+0.1
(変更!!!)IF K AND 256THEN R=R-0.1
GOTO @LOOP

これで、アクセルとブレーキは完璧だと思います!

490名無しさん:2014/04/06(日) 21:43:57 ID:pkxZZf7w
>>489
そのリストだと初期設定からL=100とP=0.95が無くなっているので道路が表示されない。
疑似3Dの拡大については道路の表示ができている時点で道路に関しては
拡大表示を行っているため問題ない。
障害物や敵車はその道路の拡大率に合わせて拡大すればいい。

カーブに関してはカーブの大きさと速度に応じて曲がっている向きと逆方向に
自車を移動させるとカーブを曲がっている感じが出ると思う。

491Ferrari:2014/04/06(日) 23:12:01 ID:kKJKodko
>>490
よし!もうこっち系のレースゲームは作れるようになったと思います!
ありがとうございました!!!!!

492コンプチ:2014/04/08(火) 13:29:33 ID:Dc31ON7c
あー3DSからやっているからプログラムをQR化できない。
3DSでできるやつあるっちゃあるが面倒なんだよなぁ…
プログラム文を直接打ち込まずに3DSか携帯でできるQRコード化ツールってありますかね?

493名無しさん:2014/04/09(水) 07:12:50 ID:RFJ19OZ2
>>492
androidを使ってるならchred on androidという素敵なツールがあります。SDカードにPTCファイル移してどうぞ。ガラケーは無理。
ゴリ押し的な方法でプログラム上でqrコード化できる物ならありますが・・・http://wiki.hosiken.jp/petc/?Toukou%2F%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A4%CE%A5%A8%A5%AF%A5%B9%A5%DD%A1%BC%A5%C8
注意:上のプログラムはテキストに変換するから3DSじゃ読み取れないです。
まあリストを公開して誰かにqr化してもらうのも手ですが。

494コンプチ:2014/04/09(水) 14:24:37 ID:Dc31ON7c
>>493
わざわざありがとうございます^^

495Porsche:2014/04/09(水) 18:35:21 ID:kKJKodko
質問です。
擬似3dのレースで、道路をGRPとかで読み込んだ道路じゃなくて、
ポリゴンで作った道路でやることはできますか?

496コンプチ:2014/04/09(水) 21:26:58 ID:Dc31ON7c
またまた質問です。
>>493様の紹介してくれたものが上手くできなかったのでリストを公開してQR化してもらう事にしましたが、簡単にリストを書く方法ってありますかね?
本当にケチいですね。すみません。

497名無しさん:2014/04/09(水) 22:49:35 ID:JUnbbvLQ
>>495
プチコンでポリゴン表示プログラムを作った人はいるけど
最高でも1秒間に200ポリゴンくらいしか表示できない。
https://www.youtube.com/watch?v=4OkGjWAIGt8

レースゲームのコースを普通に造ったらどんな単純なコースでも
数千ポリゴンくらいになってしまうので0.01fpsも出ないと思うぞw
いくらプチコンが速いといってもGPUを使わずにポリゴンゲームを
作れるほどの速度はない。

498名無しさん:2014/04/09(水) 23:55:48 ID:mPlW.CrA
>>496
3dsだけでは無理ですね。もうそれなら図書館などの公共施設でパソコンを借りるのが一番手っ取り早いでしょう。まあ初代プチコンではみんながんばって打ち込みしていたのですが。

499コンプチ:2014/04/10(木) 06:39:04 ID:Dc31ON7c
>>498
そうですよね。ありがとうございます。
まぁなんとか公共施設のPCで頑張りますか。

500Porsche:2014/04/10(木) 18:31:37 ID:kKJKodko
>>497
回答ありがとうございます!!!
そうなんですか…もし作れるなら、3号が出てからにします。

501Mr.K:2014/04/25(金) 21:44:38 ID:IIPHlAmE
BGの使い方が分かりません、誰か教えてください。

502ななし:2014/04/29(火) 00:26:11 ID:3zmaoLz2
自分で作ったキャラクタはどうやって表示するのでしょうか


>>501
どこかでみおぼえのあるお名前・・・

503Mr.K:2014/04/29(火) 19:13:40 ID:IIPHlAmE
502
どこかのスレでお会いしました?

504名無しさん:2014/04/29(火) 19:31:21 ID:3zmaoLz2
画像を16進数に直すにはどうしたらよいのでしょうか・・・。
訊いてばかりで申し訳ありません。


>>503 いえ、スレではないのですが・・・これ以上はスレチになると思うので別の所で確認します(:-_-)

505名無しさん:2014/04/29(火) 23:43:25 ID:mPlW.CrA
>>501
BGはグラフィックと同じように背景に役割をする。ただし8x8単位でしか置けない、大きさが512px×512pxありスクロールできるなどの特徴がある。BGPUT命令でチップを配置することができ、BGOFSでスクロールさせることができる。
>>502
自分で作ったCHRをLOAD"BGU0:***"(又はSPU0)で読み込むとBGU0(SPU0)に読み込んだキャラがセットされる。あとはBGPUTなりSPSETなり使えばいい。
>>504
A=GSPOIT(X,Y)で色番号を受け取る。あとはAをHEX$で16変数にしてやればいい。
長文申し訳ない。

506Mr.K:2014/04/30(水) 20:26:20 ID:IIPHlAmE
505
ご回答ありがとうございます。
BGの使い方はわかりました。
どうやったらBGを大きくすることが
できますか?
長文すみません

507名無しさん:2014/04/30(水) 23:58:59 ID:mPlW.CrA
>>506
BG自体を大きくすることは基本無理。キャラクタ自体を大きく作ればいいけど、頻繁にするならスプライト使った方が幸せになれるよ。

508Mr.K:2014/05/01(木) 21:09:13 ID:IIPHlAmE
507
ご回答ありがとうございます。
これでBGのことがわかりました。

509名無しさん:2014/05/02(金) 21:01:40 ID:3zmaoLz2
>>505 ご回答ありがとうございました。
試行錯誤しながら頑張ります!

510BMW:2014/05/03(土) 23:19:54 ID:kKJKodko
プチコンmk2の質問です。
卓球のゲームを作ろうと思っています。
ですが、ボールの跳ね返り処理とかが、
どうやったらできるのかがわかりません。
どなたか分かる方、回答お願いいたします。
*ボールはSPRITEでします

5110918nobita:2014/05/05(月) 07:51:22 ID:8UOrrdjY
タッチされた、またはタッチされている座標をTCHXとTCHYで取得するのはなんとなくわかりますが、ループの中にIF文でそのふたつのシステム変数の範囲を指定して他のラベルにGOTOで移動させると、実行したときにIF文で指定した範囲以外でもタッチに反応してラベルを移動してしまいます。どうすれば、タッチされて反応する座標を指定出来ますか。

512名無しさん:2014/05/06(火) 12:35:53 ID:JUnbbvLQ
>>510
どういったゲームを作りたいかにもよるけど真上から見たゲームならば
大昔のテニスゲームやブロック崩しのパドルと同じような感じでいいのでは?
ラケットの中央に当たれば真ん前に跳ね返り、ラケットの端にいくほど左右の
移動量を大きくすればそれっぽくなると思う。
真横から見たゲームならばボールの動きはアクションゲームのジャンプと同じ。
横方向は等速運動なので1フレームごとにX座標は固定の値を加算して縦方向は
等加速度運動で重力の分だけ1フレームごとにY座標は固定値ではなく重力分を
減算していくといい。
床に跳ねたボールは速度が若干減速しY座標方向の移動量は反転する。

真横から見た跳ね返りのサンプルプログラム

ACLS
SPSET 0,251,0,0,0,0
X=0:Y=20
VX=0.5:VY=-1
G=0.05:K=0.85
@LOOP
 SPOFS 0.251,0,0,0,0
 X=X+VX
 Y=Y+VY
 VY=VY-G
 IF Y>176 THEN VX=VX*K:VY=-VY*K
 VSYNC 1
@LOOP

VXはX方向速度、VYはY方向速度、Gは重力加速度、Kは反発係数


>>511
状況がよく分からないけどTCHXやTCHYはタッチしてないときも前回取得した値を
保持しているのでTCHSTと併用しないと正しい判定はできないと思う。

513名無しさん:2014/05/06(火) 12:40:35 ID:JUnbbvLQ
>>512
サンプルプログラムのリストの最後の行の「@LOOP」は「GOTO @LOOP」の間違い。
これはサンプルだから無限ループになっているけど実際のゲームでは
速度が一定以下になったらボールが止まったと判断させる必要がある。

5140918nobita:2014/05/06(火) 20:50:00 ID:8UOrrdjY
512>>
サブルーチンでTCHSTを使うと成功しました!ありがとうございました

5150918nobita:2014/05/06(火) 20:51:18 ID:8UOrrdjY
>>512
サブルーチンでTCHSTを使うと成功しました!ありがとうございました

516名無しさん:2014/05/07(水) 20:01:58 ID:3zmaoLz2
RPGなどのように進みたい方向へ向きを変え、進んでいる間動きがあるようにしたいのですが、どのようにすればよいのでしょうか・・・。

分かりづらいと思いますが、回答よろしくお願い致します。

517@0918nobita:2014/05/07(水) 23:11:29 ID:8UOrrdjY
GPAGE 0,2と入力するとエラー起こすんですが、公式のページを見ても
文法上は間違ってんさそうなんですが…
そもそも描画ページと表示ページの違いってなんですか?
そしてなぜこれでエラーを起こすのですか?
(Missing operand (47,GPAGE)と表示されます)

518名無しさん:2014/05/08(木) 12:52:50 ID:JUnbbvLQ
>>517
GPAGEで描画ページを指定する場合には引数が3つ必要なのでGPAGE 0,2では引数不足。
あと表示ページと描画ページは別のもの。
表示ページはプチコン内部の0〜3の4ページのうち実際に画面上に表示するページを
指定するのに対して、描画ページは単に描くだけのページとなっている。
画面上に表示されてない描画ページに時間を掛けて描画した後に
表示ページと切り替えることでちらつき無しで表示が可能になる。
GRPの描画は重いためこの切り替えを使った「ダブルバッファリング」は必要不可欠。

519名無しさん:2014/05/09(金) 08:02:33 ID:k6zCjpAM
>>516
補完移動か1ドットずつにキャラや背景を動かせば滑らかになります。4方向のキャラ(例えば、SPU1など)があるので使い分ければ向きを変えることもできます。
>>517
GPAGEで描画ページを指定する時は引数は3つでないといけません。
プチコンmkiiではグラフィックのページが4枚あるのですが、表示するページは上と下の2枚しかないのでGPAGE a,b,cで「aページ(上下どちらか)にcページ(実際の4枚のうちのいずれか)を表示して、命令ではbページ(こちらも4枚のうちのいずれか)に描画する。」といった指定になります。

520名無しさん:2014/05/09(金) 21:45:10 ID:3zmaoLz2
>>519 分かりづらかったですね・・・。申し訳ありませんでした。
えーと、描写は問題ないのですが、プログラムと結びつけるのができません・・・。

例:上ボタンで上を向く絵が表示、上方向へ進む

521@0918nobita:2014/05/09(金) 21:53:43 ID:8UOrrdjY
>>518
>>519
ありがとうございます!

522名無しさん:2014/05/09(金) 23:28:02 ID:4dPIXPsU
>>520
とりあえず基本的なものなら
BTN:ボタン、X:x座標、y:Y座標
BTN=BUTTON()
IF BTN AND 1 THEN Y=Y-8:SPCHR 管理番号,キャラ番号(上向きの絵)
IF BTN AND 2 THEN Y=Y+8:SPCHR 番号,下向き
・・・・
BGOFS 0,X,Y,10
こんなかんじですね。当然これだけでは動かないので参考程度に。

523名無しさん:2014/05/11(日) 08:48:07 ID:3zmaoLz2
>>522さん、ありがとうございます!

524@0918nobita:2014/05/11(日) 15:25:17 ID:8UOrrdjY
タッチ操作のプログラムを作っているのですが、

0001 @LOOP
0002 IF TCHST==TRUE THEN GOTO @LOOP2
0003 GOTO @LOOP
0004
0005 @LOOP2
0006 IF 10<TCHX<60 AND 10<TCHY<60 THEN GOTO @A
0007 RETURN
0008
0009 @A
0010 PRINT "タッチ!"
0011RETURN

こう入力して実行すると、
[suntax error(6,IF)]と表示されます。
エラーを起こさないためにはどこを直せばいいですか?

525@0918nobita:2014/05/11(日) 15:27:06 ID:8UOrrdjY
1行目のGOTOは間違いです、正しくはGOSUBです。

526ゆうあし:2014/05/11(日) 16:35:28 ID:M8rtDSZY
>>524
IF 10<TCHX<60 AND 10<TCHY<60 THEN GOTO @Aを
IF ((10<TCHX) AND (TCHX<60)) AND ((10<TCHY) AND (TCHY<60)) THEN GOSUB @A
にしたら直るかもね

527名無しさん:2014/05/11(日) 19:37:38 ID:lFSBzV7A
>>524
1行目が間違いってのは2行目のことだとして、
6行目は目的の動作ではないだろうけどエラーにはならない
だからどっかタイポしてここに書くときは直っちゃったんだろう
(Oと0を打ち間違えたり、数値の前にスペースを入れないで識別子がくっついたり、THENがTHANになっちゃったり)
で、したかったことは>>526なんだろうけれど、別に括弧を増やす必要もGOTOをGOSUBにする必要もないから

528ゆうあし:2014/05/11(日) 20:47:28 ID:LKGa.ShY
括弧は無駄だとは思ったがこっちの方が理解しやすいかと思った。
GOSUBは単純なミスですな

529名無しさん:2014/05/22(木) 10:08:39 ID:Gda3xqa.
>527
”10<TCHX<60”がエラーにならないのは”10<TCHX”の比較演算結果を
その次に記述した”<60”でさらに比較演算してるからですね。
比較演算の結果は0か1なんでこの場合は必ず1になりますね。

530@0918nobita:2014/06/07(土) 16:23:25 ID:UcuH9SVk
新しく、OSもどきを作っているのですが、
マウスポインタを常に表示するにはスプライトか、グラフィックのどちらを
使えばいいですか?

また、今グラフィックでやってみてるんですが、
マウスポインタの座標が変更になった時に、変更する前のポインタと
重なっておかしくなってしまいます。どうすれば、マウスポインタを表示しながら、
ほかのグラフィック命令と併用できますか?

531名無しさん:2014/06/09(月) 13:09:20 ID:hh11yexA
>>530
ポインタなどの移動するオブジェクトはグラフィック描画の遅いプチコンにおいてはスプライトが最善策でしょう。グラフィックを使う場合はマウスを除いた画面にその都度マウスを描画する必要がありますね。

532kazuemon:2014/06/10(火) 08:14:18 ID:OpHF9tBk
>>530
531さんと同じく、スプライトをお勧めします。
ぼくも現在いろいろとOSもどきを作成していますが、
スプライトですと、
SPOFS 0,TCHX,TCHYだけですみますが、グラフィックだと
複雑になってしまうと思います。

533プチラー:2014/06/16(月) 15:48:19 ID:goliT0Wk
プチコンではループを抜けるBREAKのような命令ってありますか?
マニュアルでは見当たらないのですが

534名無しさん:2014/06/16(月) 19:27:57 ID:mPlW.CrA
>>533
命令ではありませんが擬似的には可能です。
A=0
FOR I=0 TO 4
A=A+1
IF A=1 THEN I=4:NEXT:FOR I=1 TO 0
A=A+1
NEXT I
NEXTの直後に即抜けるループを作ることで本当のNEXTまで飛ばしています。

535プチラー:2014/06/17(火) 19:44:36 ID:hErrnv/.
>534
う〜ん
そのプログラムはよくわかりません^^;

536名無しさん:2014/06/21(土) 15:37:18 ID:6IhlIW9M
>>535
A=0
FOR I=0 TO 4
A=A+1
IF A==1 THEN I=4:GOTO @BREAK
A=A+1
@BREAK
NEXT I
IをTOで指定された数にしてラベルでNEXTまで飛ばしています。

537プチラー:2014/06/21(土) 17:52:23 ID:.8ZcAvqM
>536
そうですね
Iを最後の数にすることで対処できるかなと僕も思いました
もうひとつ疑問なんですが
READ命令があるならWRITE命令のようなものはないのかなと困ってます(><)

5383DSマニア:2014/06/21(土) 20:19:49 ID:wgfgRHE.
SCREDを自分のプログラムに打ち込む方法がわかりません。誰か教えてください。

539名無しさん:2014/06/22(日) 14:26:12 ID:DkR5mMOk
SPANIMってメインループの前で使うんですね
ちょっとわかりにくかったです

5403DSマニア:2014/06/22(日) 16:31:26 ID:wgfgRHE.
539 そうですね

541名無しさん:2014/06/23(月) 13:09:53 ID:o8jxriK6
プチコンってDATAでもったデータは読み込みだけで書き込みできないのなら
落ちゲーなんかには使えないですね

542旅人Dast:2014/06/23(月) 20:37:48 ID:8NCAUaGQ
QRコード変換ツールの使い方が分かりません。
正確に言えば、SDカードをパソコンにさしてみたのですが、どこにプログラムが保存されてるかわかりません。
どこに保存されている、なんと言うファイルを[開く]とすればいいのでしょうか?
下手な説明ですみません

543Autoexec:2014/06/23(月) 21:30:31 ID:OOV0jWKc
>>542

SDカードへ書き出し時に、DSに表示されています。
もう一度書き出して、ご確認ください。

544名無しさん:2014/06/24(火) 16:54:30 ID:InzRqyFc
何が間違っているときに”Out of memory (114, GOSUB)”って出るんですか?

僕は今、ターン式のPvPバトルゲームを作ろうとしていて、
キャラセレクト画面で2プレイヤー分のスプライトを選べるようになっているんです。
その画面で、LかRボタンを押すと十個あるスプライトの中から自分のを選べて、
しかも十字ボタンを押すとP1からP2へのスプライトセレクトに行き来できる仕組みを作りたいんです。
キャラセレクトの仕組み、P1からP2への行き来の仕組みもできているんですが、
なぜかそれを組み合わせるとP2のキャラセレクトのサブルーチンのところで上記のようなエラーが出ます。
どうすればいいのでしょう?
もし情報不足であるなら後で足します。
まだ駆け出しなのでわかりやすいようにお願いします。

545Autoexec:2014/06/24(火) 20:58:38 ID:DM95en4k
>>544
returnをしていますか?

546名無しさん:2014/06/24(火) 21:06:32 ID:4dPIXPsU
>>538
SPSET命令でキャラを表示させることが出来ますよ。保存したキャラをLOAD”SPU0:###”で読み込んで使いましょう。取説のスプライト命令を見ると詳しくわかるかもしれません。
>>539
補足ですが、その命令の直後にアニメーションを始めるのでメインループの途中でもスピードを変えたり出来ます。
>>541
DATA文はリードオンリーの情報を扱う(例えばテ●リスで言うとブロックのパターン)ので落ちゲーなど情報が刻々と変化する時は変数やGRP、MEMなどの書き込みできるリソースを使えばいいでしょう。落ちゲーはこのwikiにたくさんありますよ?
>>544
このエラーはSmileBasicのメモリが足りてない場合に出るエラーです。具体的に言うとFORループやGOSUBなどは命令の行番号を記録しておくためにメモリに一時的に書込みしていますが、プログラムの不備などでループを終わらせないとループが重なっていってメモリ領域を圧迫し、エラーになるというわけです。プログラムリストを見返してGOSUBにRETURNがあるか、FORループにNEXTがあるか確認してみてください。

547名無しさん:2014/06/25(水) 04:46:26 ID:InzRqyFc
>>545
はい、リターンはしています。しかもP1と全く同じのはずなのに、なぜかP2だけエラーが出ます。

>>546
ありがとうございます。しかしリターンもしているし、FORは使っていないので違うと思います。
ウーム、方針を変えるべきか〜。

548名無しさん:2014/06/25(水) 07:14:00 ID:oD303SgI
>>546
DATA命令について質問した者ですが
GRP、MEMなどを使うといってもやり方はどうするんですか?

549名無しさん:2014/06/26(木) 07:03:04 ID:pFX9IyRQ
>>547
returnをしていても無限ループになっていたら意味がないかと
GOTO@MAIN
@SUB
'RETURN
@MAIN
GOSUB@SUB
GOTO@MAIN
でもOut of memoryになりますが、
@SUB
GOSUB@SUB
RETURN
でもなります。

5503DSマニア:2014/06/26(木) 19:16:19 ID:wgfgRHE.
>>546
それをしてもキャラが読み込めません
どうしてでしょうか?教えてください
キャラの保存の仕方がおかしいのでしょうか?

551名無しさん:2014/06/27(金) 16:51:20 ID:InzRqyFc
>>549
ありがとうございました!
多分これが原因です。
おかげさまで動くようになりました。
後からいろいろ足していたもので、
多分途中から入り組んでしまったのでしょう。
本当に助かりました!

5523DSマニア:2014/06/27(金) 22:38:56 ID:wgfgRHE.
読み込みはできましたがどうやってつかうのでしょうか?

5533DSマニア:2014/06/27(金) 22:49:41 ID:wgfgRHE.
読み込みはできましたがどうやってつかうのでしょうか?(SCREDの

554名無しさん:2014/06/28(土) 11:37:08 ID:PP5AXFd6
GRP、MEMなんてのは単なるファイルのカテゴリーですよね
DATAのデータが読み専ってのはガッカリ…
IF文の改行すらもできないし、3号じゃなくてmkⅡのアップグレード望みたいよ

555名無しさん:2014/06/28(土) 17:16:30 ID:6IhlIW9M
>>554
DATAの使用法を勘違いしているだけでは?

556QESA(Autoexec):2014/06/28(土) 20:23:02 ID:DM95en4k
>>554
If分の改行もforで代用できますよ。


if a<2 {
s=s+1
gpest s,a,15
}

for i=1 to a<2
s=s+1
gpest s,a,15
next

この2つのプログラムの動作はほぼ同一です。
DATAの代わりにGPRとMEMを使うのも代用ですね。

557名無しさん:2014/07/04(金) 19:47:15 ID:D4jceuvM
>>556
また変わったプログラムですねぇ
それはおいといて
GPRとMEMを使えというのはやり方がわからないんですよ

558ゆうあし:2014/07/05(土) 12:45:50 ID:OfrUzm2g
memはMEM$に文字を読み書きするリソースです。
GRPはグラフィック面からGSPOITにより色の番号を得てそれを文字番号に使う方法もあるリソースです。
http://wiki.hosiken.jp/petc/?Toukou%2FGRP%A5%EA%A5%BD%A1%BC%A5%B9%A4%F2%BB%C8%A4%C3%A4%BF%CA%B8%BB%FA%A4%CE%B5%AD%CF%BF

559名無しさん:2014/07/07(月) 20:32:36 ID:ZdyfBh.g
>>557
このサイトが参考になると思う
ochameclub.web.fc2.com/petitcom/tips/save.htm

560名無しさん:2014/08/26(火) 09:42:17 ID:/kTuIkLY
5個の数字の入った変数(桁は不規則)をMEM$に保存しようと思っているのですが数値を文字にして保存出来ましたがそれを取り出す方法はわかりません。誰か教えてください。

561名無しさん:2014/08/26(火) 13:55:01 ID:K17I3QVw
まず、その、5つの数字をMEM$に保存する部分のプログラムを見せてくださいね。
取り出す方も、「こんなプログラムを書いてみたが失敗した」があれば、なお良いです。

562名無しさん:2014/08/26(火) 19:54:14 ID:/kTuIkLY
>>561
セーブは
(変数内の数字は仮です。)
A=1
B=10
C=100
D=1000
E=10000
A$=STR$(A)
B$=STR$(B)
C$=STR$(C)
D$=STR$(D)
E$=STR$(E)
MEM$=A$+"/"+B$+"/"+C$+"/"+D$+"/"+E$+"/"
です。
ロードはMID$を使おうとしましたが数値が不規則なのでどう取り出せばいいかわからなくて無理でした。

563名無しさん:2014/08/26(火) 22:05:44 ID:K17I3QVw
このページの「区切りを入れて記録する方法」の箇所を参照してください。
ttp://ochameclub.web.fc2.com/petitcom/tips/save.htm
簡単に解説すると、
INSTR命令で数値の区切りに使った文字の位置を得て、
それを元にMID$()命令に与える範囲を決定すれば良いです。
参照先では配列変数を使っていますが、A-Eの変数名を使うなら
変数ごとに5回、そういう処理を書けば良いです。

564名無しさん:2014/08/26(火) 23:30:13 ID:/kTuIkLY
>>563
ありがとうございます。
INSTR命令ってのがあったんですね。
がんばってみます。

565@0918nobita:2014/11/08(土) 16:44:54 ID:hIK.sEuE
指定した範囲に直角三角形/2等辺三角形/ひし形/円/楕円/文字を
追加したり、透明度を指定して塗りつぶしができるGRPリソース編集ソフトを
開発中ですが、フリーハンドの線の描画に手間取ってます。ほかの画像編集ソフトでは
可能ですが、しくみがよくわからりません。途切れ途切れではなく、滑らかな途切れのない線を
書けるようにしたいです。

566名無しさん:2014/11/08(土) 22:01:39 ID:Lb/Jfqu2
直前のタッチ位置と現在のタッチ位置の間に線を描くだけじゃないの?
@LOOP
OLDX=TCHX
OLDY=TCHY
VSYNC 1
GLINE OLDX,OLDY,TCHX,TCHY,2
GOTO @LOOP
みたいな。

567天郷思音 ◆vCvQmsUz9g:2014/11/09(日) 11:18:06 ID:i0TzrNEk
>>566
VSYNCのかわりに「1回離してもう1回タッチされるのを待つ」処理にしたほうがいいのかな。

568名無しさん:2014/11/19(水) 19:42:18 ID:uBbCCfzU
本体のカメラで撮った写真を表示して色々と遊んでみたいのですが、
どうすれば写真のフォルダーを指定したり、読み込んで表示できるんでしょうか?
立体で撮った写真を表示することってできるんでしょうか?

569名無しさん:2014/11/19(水) 21:27:23 ID:gHJGyJ/k
プチコン3号の質問です。
MAPエディタで作成したら "DAT:ファイル名"と出たのですが、ここからどうしたら
作成したMAPを画面に表示できますか? マニュアルには 配列に読み込ませる とありますが具体的
どのような命令文を使えばよいのでしょうか? MK-2では"LOAD"SCU0:ファイル名"で簡単だったので
プチコン3号では思うようにできず戸惑っています。
どうかよろしくお願いします。

570名無しさん:2014/11/20(木) 00:52:42 ID:gHJGyJ/k
自己解決しました。失礼しました。

571ゆきゆき:2014/11/22(土) 09:46:44 ID:m/tLE69E
スプリットとスプリット当たり判定ができないんだよね
どうやったらできるんだろ?

572名無しさん:2014/11/22(土) 13:27:31 ID:Lb/Jfqu2
「スプライト」な。
SPCOLを指定してやらんといかんのじゃないか

mk2はデフォルトの「グループ」が255だったのに対し
3号は「マスク」のデフォルト値が0に変わった
そんな印象なんだが、どうか

573名無しさん:2014/11/22(土) 17:54:11 ID:c9Aplhbo
プチコン3号からプログラムを始めた初心者です。
公式サイトの初心者講座にある
CLEAR:DIM APPLE(1)
APPLE(0)=56
PRINT "リンゴ";APPLE(0);"コ"
が何回やってもsyntax errorになります。ひととおり初心者講座を読んでBASIC解説サイトをいくつか見てみたのですが、エラーの原因が全くわかりません。
なんかもう心が折れそうなので誰か解決方法教えてくださいお願いします

574名無しさん:2014/11/22(土) 18:24:57 ID:6lBTFLAY
3号からDIMは( )じゃなくて[ ]になった

575名無しさん:2014/11/22(土) 18:54:16 ID:FSFNYj0Q
>>574
なん...だと...。まさかそんなに単純な原因だったなんて...orz

ありがとうございました。本当に助かりました。

576名無しさん:2014/11/22(土) 23:51:14 ID:zu43iMb.
>>569私も同じことで苦戦しているのですが、どうすればいいのですか?

577名無しさん:2014/11/23(日) 06:06:27 ID:Lb/Jfqu2
>>576,569
https://twitter.com/notohoho/status/535086519308926976

578名無しさん:2014/11/23(日) 11:20:18 ID:zu43iMb.
>>577ありがとうございます

579名無しさん:2014/11/23(日) 13:57:22 ID:zu43iMb.
>>577やったか!?と思ったけどできませんでした。
LOADSUB というのでシンタックスエラーが出てしまいます。
どうやったらできますか?

580名無しさん:2014/11/23(日) 16:16:47 ID:CL0nFoyE
プログラムを覚えるにはどこのサイトをみたらいいでしょうか

581僕もプログラムのサイト教えてください:2014/11/23(日) 18:31:46 ID:peouqp2Q
p

582名無しさん:2014/11/24(月) 00:14:28 ID:m30W0Za2
PAINTのとこにあるG0とG1っていうのは
「ここにオリジナルの素材とか描いてくれよな!」
って領域なんですか?
真実を知るまで怖くて手が出せません・・・

583名無しさん:2014/11/24(月) 06:45:41 ID:Lb/Jfqu2
>>579
https://miiverse.nintendo.net/posts/AYIHAAAEAADcU5Qx7Es57Q

>>582
その認識でも、だいたい合っています。
厳密な事は、後でもっとプチコン3号を
深く理解できるようになってからで構わないでしょう。

584名無しさん:2014/11/24(月) 11:53:31 ID:m30W0Za2
>>583

ありがとうございます!

585名無しさん:2014/11/24(月) 17:51:27 ID:zu43iMb.
ありがとうございます

586名無しさん:2014/11/25(火) 09:11:40 ID:CL0nFoyE
BASICっていろいろ種類がありますが
どれを覚えたらプチコンでゲームを作れますか?
SmallBASICでもいいんでしょうか

587天郷思音 ◆vCvQmsUz9g:2014/11/25(火) 11:29:59 ID:AZewKph.
>>586
やはりプチコンを買うのがベター。
VBAじゃないBASICならある程度通じるところがあるけど、やっぱりそれぞれでクセ(差異)があるから、別のBASICからはじめるのはおすすめではない。

588名無しさん:2014/11/25(火) 12:59:17 ID:CL0nFoyE
なるほど、わかりました。
ありがとうございます。

589名無しさん:2014/11/25(火) 23:28:10 ID:lA1Ywyl6
プチコン3号に内蔵してある電子取扱説明書の場所(起動する場所)がわからないのですがどこにあるのですか?
教えてください

590名無しさん:2014/11/25(火) 23:32:10 ID:zu43iMb.
自己解決しました。すみませんでした

591名無しさん:2014/11/27(木) 22:48:24 ID:DWKD9vFc
自分が作った画像を使ったゲームを他人に公開したいときって、
フォルダを新しく作って、そのフォルダの中だけでGRPを保存したりプログラムを組んだりして、
最終的にフォルダごとアップロードして公開って感じですか?

592名無しさん:2014/11/28(金) 20:13:40 ID:peouqp2Q
マイクラみたいなゲーム誰か作ってくれませんか
そしたらgtavそっくりのゲームの公開キーをその人だけに教えます
Facebookで友達になって公開キーを教えてください
僕も公開キーを教えます♪( ´▽`)お互い得していいと思いませんか?
誰か返事ください!!待ってます

593名無しさん:2014/12/04(木) 07:49:03 ID:DwncXLFw
スマイルツール内のMAPでつくったBGデータのロードの仕方がわかりません。

DIM A%[65796]
LOAD"DAT:MAP1",A%
BGLOAD 0,0,0,50,50,A%

MAPのソースを参考にしたこれでうまくいかないのですが、考え方として正しくないのでしょうか、、、。

594名無しさん:2014/12/04(木) 22:30:56 ID:Lb/Jfqu2
>>593
>>583

595593:2014/12/04(木) 23:43:45 ID:9YUCYSvE
>594
ありがとうございます。
既に話題に出てたのですね。
BGで検索かけたため、見逃してしまってました・・・。

596名無しさん:2014/12/05(金) 16:06:49 ID:6.OZwkjY
PUTCENTER(13,-256,"もじ")
DEF PUTCENTER(Y,Z,S$)
LOCATE (50-LEN(S$))/2,Y,Z
PRINT S$;
END

これで1行目にSyntax errorが出ました。
なぜですか?

597名無しさん:2014/12/05(金) 17:42:16 ID:Lb/Jfqu2
DEFの時に()を使うタイプのユーザー関数の作り方は、
必ず戻り値がなくてはいけないことになっています。

一行目で、
ユーザー関数PUTCENTERは戻り値を返すはずなのに、
その戻り値を活用したり受け取る方法が指示されてないのでエラーになります。

一行目を解決しても、ユーザー関数PUTCENTERは実際には
必要な戻り値を返す行為をしないので別のエラーになります。

戻り値が無いユーザー関数を作りたい場合は
()を使わないDEFの書き方をしてください。
ちなみに、その場合はユーザー関数とは呼ばず
「ユーザー命令」と呼び方が変わるようです。混同しても通じると思いますけど。

598名無しさん:2014/12/05(金) 18:11:39 ID:6.OZwkjY
>>597
PUTCENTER 13,-256,"もじ"
DEF PUTCENTER Y,Z,S$
LOCATE (50-LEN(S$))/2,Y,Z
PRINT S$;
END

()を外したら実行出来ました!
ありがとうございました!

599名無しさん:2014/12/07(日) 00:25:33 ID:3MmUzRb6
GCIRCLEの開始角終了角を使って円をだんだん描いていくっていうのをmk2でしていたのですが、
今回それがなくなったみたいで…代用する方法何かないでしょうか?
GCIRCLEで描画したものにぴったり合わさり、
かつ、だんだん円が描画されるように描画していきたいです。
GPSETをサインコサインで描いていく方法ではGCIRCLEにぴったり合わさらなかったので…。

600名無しさん:2014/12/07(日) 01:12:14 ID:Lb/Jfqu2
とりあえず、
自前で GCIRCLEで描画したものにぴったり合わさる 円を描く方法は
ttp://fussy.web.fc2.com/algo/algo2-1.htm
このページで紹介されている方法(最下部)でできましたよ

すぐ上には、少しの工夫で円弧も描ける、と説明されているので
その工夫ができればなんとかなるかな・・・?

あとは、ご自身で工夫なさるか、他の方のアドバイスを待つか、
GCIRCLEを使うのを諦めて全て自前で円を描くようにするか、でしょうか。

601名無しさん:2014/12/07(日) 02:03:48 ID:3MmUzRb6
>>600
回答ありがとうございます!
す、すごい…
これを改良して使っていきたいと思います!

602hill x2:2014/12/07(日) 09:00:16 ID:3PdlWGXc
え〜と、1~20と1~6のルーレットを同時に使えるようしてほしいです。ちなみに、クトゥルフTRPGに使おうと思っています。

603名無しさん:2014/12/07(日) 13:07:19 ID:Lb/Jfqu2
現状の、「どちらか1つしか同時に使えていない」状態の
ルーレットのソースコードを見せてください。
改善点がアドバイスしやすくなります。

604名無しさん:2014/12/09(火) 11:27:57 ID:v1lfoElo
下画面に四角いボタンをいくつか表示して
そこをタッチすると何か動作する(音が出るとか色が変わるとか)
というプログラムを作ってるんだけど
@MAIN
TOUCH OUT T,X,Y
IF X<50 AND X>90 AND Y<50 AND Y>90 THEN @SUB1
GOTO @MAIN
@SUB1
(他の命令)
GOTO @MAIN

あほな自分なりに考えてこのようにしたけど
タッチしても何も起こらない(エラーもでない)。
なにか考え方間違ってますか?
もっと巧みなやり方もあるんだろうけど
とりあえずこのやり方の間違いを教えてもらえるとうれしいです。

605604:2014/12/09(火) 11:41:47 ID:v1lfoElo
604の書き込みは不等号の向きがぜんぶ逆でした。

で、いま確認のためにRUNしたら普通に動きました。
昨夜,半徹夜でやってたのでぼけてたのかもしれません。
すみませんでした。

606604:2014/12/09(火) 11:57:13 ID:v1lfoElo
というわけで質問を少し変更させてもらいます。
どこをタッチしたか判定する際に、ボタンをシンプルな四角とかにして
IF X>50 AND X<90 AND Y>50 AND Y<90 THEN @SUB1
とやるくらいしか自分には思いつかないのですが
もっと複雑な形のボタンとか、移動するスプライトをボタンがわりにするとかのときには
この方法では限界がありそうです。
これに関連する命令とかってないでしょうか。

607名無しさん:2014/12/09(火) 17:14:14 ID:Lb/Jfqu2
プログラムですから、それを実現する方法は様々あり、どれが正解という事はありません。

「複雑な形の当たり判定」を実現するために、座標などいろいろ計算してもよいですが、
当たり判定の形の図形を描いておいて、タッチした位置で GSPOIT し、
読み取った色を元に判断する、という方法もあります。

「移動するスプライトを当たり判定」にするためには、
タッチした位置で SPHITRC する方法が一般的だと思いますが、

スプライトを管理するために座標などの変数を既に用意しているなら
それを使ってもいいし、
SPOFS OUT で座標、SPDEF OUT で縦横の幅、SPSCALE OUT で拡大率を
それぞれ得て計算してもいいです。

608名無しさん:2014/12/14(日) 16:30:51 ID:yBRr2aKo
迷路を作ろうと思ってるのですがBGの壁にスプライトが進めないようにしたいのですがどうしたらいいですか?頑張ってみたのですが全然できませんでした

609名無しさん:2014/12/14(日) 20:18:38 ID:yBRr2aKo
プチコン3号です

610名無しさん:2014/12/14(日) 20:49:09 ID:yBRr2aKo
BGGET命令を見つけました。それで判定はできるんですが真ん中に行かないと反応しませんし右と左のどちらからぶつかったら右側でそれ以上動けないなどにしたいのでまだ未解決です。

611名無しさん:2014/12/14(日) 20:51:51 ID:yBRr2aKo
あっもちろん左からだったら左側で上側からだったら上側で下側からだったら下側でそれ以上進めないというようにしたいです。連コメ及び長文失礼しました。

612名無しさん:2014/12/15(月) 01:48:50 ID:Lb/Jfqu2
キャラクターを実際に進ませる前に
これから進みたい方向の位置に対してBGGETしてみて
壁が無い時だけ進ませる(壁がある時は進む処理をキャンセルする)
ようにすれば良いでしょう。

もっと詳細に具体的に書き方を知りたい場合は、
現在のあなたのプログラムを見せていただければ
どこに何をどう書き加えたりすれば良いかアドバイスできると思います。

613名無しさん:2014/12/15(月) 17:19:41 ID:yBRr2aKo
>>612 回答ありがとうございます。ヘルプとにらめっこして頑張ります。

614名無しさん:2014/12/15(月) 22:27:41 ID:kSVD2mj6
プチコンってSD内の画像を表示したり加工したりできますか?

615614:2014/12/16(火) 17:51:27 ID:IIu/N8N.
解決しました

616名無しさん:2014/12/16(火) 20:52:03 ID:StfxjRhA
3号です。
セレクト、スタートボタンによる強制終了を回避したいのですが…
皆さまのお力をお貸しくだしゃい。
ちなみに用途はログイン失敗のペナルティタイムです。

617名無しさん:2014/12/16(火) 21:45:08 ID:Lb/Jfqu2
スタートボタン・セレクトボタンを
無効化したりすることはできません

618616:2014/12/17(水) 04:20:58 ID:StfxjRhA
なんと…
ありがとうございました。

619616:2014/12/19(金) 19:23:32 ID:StfxjRhA
連投すみません。
20面ダイスをふるプログラムを書こうとしたのですが、
一度走らせると大量の結果が吐き出されます。
FOR〜NEXTを入れてもまるでダメ。
このままだとパラノイアをプレイするのに幸福ではありません!
何卒お力添えをお願いします。
以下プログラムです。
@DICE
B=BUTTON(2)
IF B=16 THEN GOTO @RAMDOM
IF B!=16 THEN GOTO @DICE
@RAMDOM
D=RND(21)
IF D=0 THEN GOTO @RAMDOM
PRINT D
GOTO @DICE

620616:2014/12/19(金) 19:28:07 ID:StfxjRhA
BUTTON=(2)
はAボタンに対応させています。

621名無しさん:2014/12/19(金) 19:51:35 ID:MRvMr2eo
2行目を、こう書き換えてください。
VSYNC:B=BUTTON(2)
(行頭に「VSYNC:」を書き加える)

3行目と7行目、イコール記号を2つ続けて書いてください。

622616:2014/12/19(金) 20:45:31 ID:StfxjRhA
ありがとうございます!
もっと勉強しないとですね…

623名無しさん:2014/12/22(月) 18:29:47 ID:Oa1mEr3s
mkIIからMMLと簡易的なプログラムしか作っていない者なのですが、
BASICについての参考書や一から上達していけるように書かれているサイト等はありますか…?

624名無しさん:2014/12/25(木) 15:15:32 ID:MRvMr2eo
なかなか回答が付かないことが答えになってしまっていますが・・・
ttp://damedamepg3q.web.fc2.com/pet3Sta_sp1.html
このページなんて良いんじゃないでしょうか。

人は1度上達してしまうと、全く完璧に未経験だった頃の事は思い出せなくなるので
(えっ、自分だけ?)
そういう人向けにと最大限心がけても、全然相手に届かない
的外れなことになってしまいがちで、悩みの種です。

なので、あなたが今から挑戦すること、それを通じて理解した事を
全部書き留めて、後で解説にまとめて下されば良質な資料になると思うのですが・・・
「当時の自分は、なんでこんな単純で簡単な事が理解できなかったんだろう
恥ずかしい!」と思って手を加えずにはいられなくて
結局、出来上がった物は相手に届かない物になってしまいがち・・・
ああ!もどかしい!

もしも、それを逆に言うとするなら、最初から
中級者向け以上とかの解説を必死に読み解く方がタメになる、と
言える要素も無くはないのかも知れません、みたいな風にまで考えちゃったりして

625名無しさん:2015/01/05(月) 18:10:42 ID:gHJGyJ/k
プチコン3号になってから、mk2みたいにSPHITSPの使い方が出来なくなりました。

例えば、スプライト1と2の衝突判定を取る場合、どんなプログラムを書き出せばいいのでしょうか?
よろしくお願いします。
具体的に教えて頂けると助かります。

626名無しさん:2015/01/05(月) 21:18:53 ID:fbKmMLdo
>>625
3号のSPHITSP命令も、mk2と同じ書式で使えるよ
ただ、3号の場合、SPCOL命令で明示的に衝突判定用の矩形を設定しないとダメなだけだよ

627名無しさん:2015/01/06(火) 07:07:24 ID:gHJGyJ/k
>>626
できましたありがとうございました。
予め設定する必要があったんですね。

628S:2015/01/06(火) 16:56:23 ID:Yb76.5Bs
SPの辺り判定の付け方を教えてください。

629S:2015/01/06(火) 17:12:05 ID:Yb76.5Bs
訂正 当たり判定の範囲の付け方

630名無しさん:2015/01/07(水) 09:19:39 ID:nmGARjiU
SPCOL 管理番号, 始点X,Y, 幅, 高さ
  始点X,Y  SPHOMEを原点(0,0)とした相対座標

631torui:2015/01/08(木) 17:38:30 ID:U5gGr2mE
初心者です。
数値を割って余りを取得する命令はありますか?

632torui:2015/01/08(木) 17:41:39 ID:U5gGr2mE
因みにプチコン3号です^^;

633名無しさん:2015/01/08(木) 20:08:58 ID:tb/ihDgA
数値 MOD 割る数

634名無しさん:2015/01/10(土) 11:09:44 ID:Olyi/qts
Wikipediaの「DETUNEの音楽ソフトとのリンク」欄を誰か書いて下されると助かるのですが。
KORGシリーズのプチコン3号対応次第ではKORG M01Dを買おうと思っているので。
来週から「新春 コルグ シンセサイザー半額祭り」なのでどうしようかと。

635名無しさん:2015/01/13(火) 04:33:03 ID:nmGARjiU
まだ何も発表されてないです。
予定であって、現時点では未実装ですね。

636 ◆5/xbu3/CgA:2015/01/14(水) 23:27:34 ID:1GsTmC4M
変数配列についての質問です。
ttp://smileboom.com/special/ptcm2/co_konnichiwa/p06.php
↑に書いてある通りに、
0001 CLEAR:DIM APPLE(32)
0002 FOR DAY=1 TO 31
0003 READ APPLE(DAY)
0004 PRINT DAY;”ニチメ リンコ゛”;APPLE(DAY);”コ”
0005 NEXT
0006 DATA 56,32,71,40,64,73,61,10,45,80
0007 DATA 25,71,63,54,98,23,14,66,58,47
0008 DATA 94,36,31,26,45,71,24,76,66,58,46
と打って、RUNしたのですが、どうしてもsyntax error in 0:1と表示されてしまいます。
これは何が原因なのでしょうか?教えてください

637名無しさん:2015/01/15(木) 17:21:44 ID:Vwe1ISgE
>>636
使っているのはプチコンのmk2と3号のどちらですか?
3号であれば、変数配列の指定に『()』は使えなくなったので、『[]』で指定する必要があるよ。
また、『CLEAR』命令もDirectモード専用になったので削除してね。

なので、1行目は『CLEAR:DIM APPLE(32)』は『DIM APPLE[32]』のみとし、
3〜4行目の『APPLE(DAY)』も『APPLE[DAY]』と修正すればいいよ。

638 ◆5/xbu3/CgA:2015/01/15(木) 23:17:27 ID:1GsTmC4M
>>637
その方法で解決することができました。
ありがとうございます。

639名無しさん:2015/01/26(月) 12:05:02 ID:PqHvrS2c
3D梨さんの高圧縮?プログラムの使い方がわかる人教えてください

640名無しさん:2015/01/26(月) 19:43:26 ID:nmGARjiU
http://wiki.hosiken.jp/petc3gou/?Toukou%2F%B9%E2%B0%B5%BD%CC%A1%A9%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0
プチコン3号 公開キー
KA3QF3Q4

L=|L とか 0=1 とか意味不明な記述が含まれていて
まともなプログラムではないので、そもそも正常に動きません。
仮に好意的に考えるとすれば
製作途中の未完成なファイルを間違って公開されてるんじゃないですかね

641名無しさん:2015/01/27(火) 05:49:27 ID:dDnUEEXA
3DS本体のAボタンやB、X、Yボタンなどを押すことで命令を実行できるようにしたいのですが、
どのような命令を使えば、各ボタンを使用できるようになるのでしょうか・・?

また、その命令を入れればINPUT入力時のように、
指定のボタンを押すまでプログラムの進行はストップしてくれるのでしょうか?

642名無しさん:2015/01/27(火) 13:02:05 ID:JARy.T.I
ABXYボタンを扱うには BUTTON() 命令を使います。
詳しくは[?]ボタンのHELP機能など各種説明をどうぞ。
BUTTON命令は、実行された時のボタンの状態を扱い、
即座に次の命令へ移ります。なのでボタン入力待ちをしたければ
その他の命令を組み合わせる必要があります。

よくある考え方としては、
「Aボタンを押していない間は、
 Aボタンを押しているかどうかの判定を無限に繰り返す」
という方式があります。

また、INPUT命令の入力待ちでは、AボタンはENTERキーとしても扱われるので
それを利用してAボタン待ちとして使う事も可能ですし、
DIALOG命令では、OKボタンやはい/いいえ等をボタン操作で
決める事もできるので、それを利用する事もできるでしょう。

643名無しさん:2015/01/28(水) 07:38:59 ID:dDnUEEXA
>>642
教えてくださってありがとうございます。
いろいろ工夫しながらやってみたいと思います。

644名無しさん:2015/02/01(日) 17:37:36 ID:LBJmdGMM
スマイルツールで作ったWAVEのDATファイルをMMLに使用するにはどうすれば良いですか?

645名無しさん:2015/02/02(月) 08:10:56 ID:nmGARjiU

DIM WAV[0]
LOAD "DAT:ファイル名",WAV
WAVSETA 225,127,127,127,127,WAV
BGMPLAY "@225CDEFG"

数値配列を用意し、
スマイルツールで保存した波形データを数値配列に読み込む。
WAVSETA命令で数値配列を楽器の音色として登録し、
登録した音色番号を使用するMMLを鳴らす。

という手順で行います。

646名無しさん:2015/02/02(月) 17:46:40 ID:EV5K.0TM
ありがとうございます

647yuuki:2015/02/04(水) 18:12:18 ID:RT6winTw
僕は、はじめてから、1ヶ月ほどたっているんですけど、まだ SPSET や BGMPLAY ○○ 等しかわかりません。
ゲームを作るにはまだまだなのですが、キャラクター(スプライト)をスライドパッドで動かす方法を教えてください。
STIC OUT まではわかるのですが、そのあとのXとかYとかX=X+1等がわかりません。
教えてください(∵)

648名無しさん:2015/02/04(水) 23:44:37 ID:nmGARjiU
では、1歩ずつ順に考えてみましょうね。

準備として、あなたが既に使い方が分かっているSPSET命令を使って、
スプライトを表示させてみましょう。

ACLS
SPSET 0,27

これだけ書いたプログラムを実行させると、画面左上にラッパが表示されて
すぐプログラムが終わりますね。
さて、『スプライトを動かす』のが目標なわけですが、
「動く」って、どういうことでしょうか?
たぶん『今の位置よりも少し離れた位置に変わる』と言えると思います。
そのために、まずはラッパを「別の位置に変えて」みましょう。
さっきの次の行に

SPOFS 0,100,100

と書き足して実行すると、ラッパの位置が左上から変わります。
『スプライトの位置を扱う命令は、SPOFS』だと分かりましたね。

ここまでを詳しく見てみましょう。
ACLSは、スプライトも含めて画面表示を初期化する命令です。
SPSET に続いて書かれている数字のゼロは、スプライトの管理番号で、
その後の27はラッパの見た目を指す番号です。
「0番のスプライトを、ラッパの見た目にして、使い始めるよ」という命令です。
(*出席番号ゼロ番の友達を呼んで、ラッパのお面をかぶせましょう!)

SPOFS に続く3つの数字の1つ目はスプライトの管理番号で、
残り2つは横の位置と縦の位置を指示しています。
(*出席番号ゼロ番君に、教室のすみっこから横に100センチ、縦に100センチの
場所まで瞬間移動してもらいましょう!)

649名無しさん:2015/02/04(水) 23:45:08 ID:nmGARjiU
ここまでで、とりあえずスプライトの位置を変えることができました。
次に、「今の位置よりも少し離れた位置」の部分を考えてみましょう。
そのためには、最初にラッパの「今の位置」を知らないといけませんよね。

 SPOFS 0 OUT X,Y

このように書きます。さっきと書き方が変わって「OUT」が特徴的ですね。
数字のゼロはスプライトの管理番号です。
そしてSPOFSはスプライトの位置を扱うための命令だったので、
「OUT」があるこの書き方をすると、管理番号ゼロ番のスプライトの
位置を知らせてください、という命令になるのです。
もちろん、この書き方をした時は、スプライトの位置は変わりませんよ。

続いて「X」と「Y」と書いた箇所です。これは『変数』です。
数字の代わりに使える物で、"数"字を"変"えることができる物です。
SPOFS OUT 命令は、XとYという名前の変数の数値を、位置の数値に書き換えます。
(*出席番号ゼロ番君に、XカードとYカードという名前の、2枚のカードを渡して、
Xカードには、今あなたは、教室のすみっこから横に何センチの場所にいますか?
Yカードには、今あなたは、教室のすみっこから縦に何センチの場所にいますか?
を書いてもらいましょう!)

650名無しさん:2015/02/04(水) 23:46:08 ID:nmGARjiU
さて「今の位置」が済んだので、次は「よりも少し離れた」を考えましょう。

 X=X+1

あなたが、知りたいと例に出していたこの書き方です。
「X=」とは、「変数Xの数値を書き換えますよ」という意味です。
数値を、何に書き換えるのかは、それに続く「X+1」の部分です。

スプライト番号0が100,100の位置にいた時、
さっきのSPOFS OUT 命令の効果で、変数Xの数値は100に書き換えられていましたね。
変数Xは、今は100という数値と同じことになっています。
なので、「X+1」は 今は『100+1』と同じ意味になります。100に1を足すと101。
変数Xの数値は、101に書き換えられることになります。

さっきまで100と同じ意味だった変数Xは、今は101という意味になりました。
つまり結果を見ると「X=X+1」という書き方は、『変数Xを1増やす』ということです。
(*書いてもらったXカードの数値に1を足して、Xカードの数を書き換えましょう!)

651名無しさん:2015/02/04(水) 23:46:56 ID:nmGARjiU
変数Xは、スプライトの位置の数値のことでした。
その数値が、ちょっとだけ変わりました。これが「よりも少し離れた」です。
続いて、最後の「位置に変わる」です。もう分かっているかも知れませんね。

 SPOFS 0,X,Y

スプライト0番の位置を、変数Xと変数Yの数値の位置に変えます。
これまでのプログラムの結果、変数Xの数値は101になっていました。
これは、元のスプライト0番の横の位置が100だったので、それより1だけ多い数です。
変数Yは、元のスプライト0番の縦の位置の100になったまま、変化させていません。
つまり、今のこの命令は、
 SPOFS 0,101,100
と同じことで、スプライト0番の位置を、横101、縦100の位置に移動させる命令になるのです。
(*出席番号ゼロ番君に2枚のカードを渡して、書かれてる数字の位置に移動してもらおう!)

652名無しさん:2015/02/04(水) 23:48:18 ID:nmGARjiU
これで『今の位置よりも少し離れた位置に変わる』は出来ましたが、
ここまでのプログラムを実行しても、たった1だけ移動するだけなので、見ても分かりません。
そこで、プログラム全体をこんな風にしてみましょう。

ACLS
SPSET 0,27
SPOFS 0,100,100
@LOOP        '←追加した行
 SPOFS 0 OUT X,Y
 X=X+1
 SPOFS 0,X,Y
 WAIT        '←追加した行
GOTO @LOOP      '←追加した行

追加したうちの「@LOOP」は目印で、読書で言えばしおりです。
「GOTO @LOOP」は、「@LOOPという目印に行け」という意味で、
普通は上から順にしか進めないプログラムを実行する順番を、変える命令です。
そして「WAIT」は、普通は目にも止まらぬ速さで実行されてしまうプログラムを、
人間が目で見て確認しやすいようにゆっくりさせるための命令です。

このプログラムを実行すると、@LOOP と GOTO @LOOP の命令の作用で、
さっき書いた『今の位置よりも少し離れた位置に変わる』プログラムが
何度も何度も繰り返し実行されるので、ラッパが動いて見えます。

プログラムは終わり無く無限に続くので、
スタートボタンを押してプログラムを中断させましょう。

653名無しさん:2015/02/04(水) 23:49:29 ID:nmGARjiU
さてさて、ここまでで『スプライトを動かす』ことは出来ました。
次は『スライドパッドで』動かすという部分ですね。

では、「SPOFS 0 OUT X,Y」と「X=X+1」の間に、次のプログラムを書き加えてください。

 STICK OUT X,Y
 PRINT X

プログラムを実行すると、画面左側に数字のゼロが並びませんか?
そのままスライドパッドをぐりぐり動かしてみましょう。
スライドパッドの動きに合わせて画面の数字が変わりましたよね。

あなたが「分かる」と言った STICK OUT 命令ですね。一応、簡単に説明すると
変数の数値を、スライドパッドを動かした位置を示す数値に書き換える命令です。
「PRINT X」で、変数Xの現在の数値を画面に表示させています。

654名無しさん:2015/02/04(水) 23:51:03 ID:JARy.T.I
ところで、ラッパの位置が画面の左上に変わっていますよね?
なぜだか分かるでしょうか。
「SPOFS 0 OUT X,Y」の命令で変数XとYがスプライトの位置に書き換わるわけですが、
追加した「STICK OUT X,Y」の命令で、同じ変数XとYがまた書き換わってしまったからです。
スプライトの位置とスライドパッドの位置は、それぞれ別の変数を使うようにしましょう。
そのためには、変数の名前を変えます。名前は何でもいいのですが、
ここでは例として、スプライトの位置の変数名はXとYのままで
スライドパッドの位置の変数名は「SX」と「SY」に変えることにします。

 STICK OUT SX,SY

「PRINT X」は消してもいいです。
このあとは、スライドパッドの状態を、変数SXとSYの数値がどうなっているかを
見て判断することで、その判断の結果として、スプライトをどの方向に動かすかを
決める、というプログラムを作っていくことになります。
「判断するプログラム」とは何か。それはズバリ『IF』命令なのですが・・・。

655名無しさん:2015/02/04(水) 23:54:07 ID:nmGARjiU
実は、そんな事をしなくても「X=X+1」の部分を

 X=X+SX

こう書き換えるだけでも、これでスプライトがスライドパッドで動いちゃいました。
これじゃ動かないと思ってたのに。意外だ。
あなたの質問の、「スプライトをスライドパッドで動かす」は、これで解決できちゃいましたね。
なので、とりあえずここまでのプログラム全体を書いて、一区切りとします。

ACLS
SPSET 0,27
SPOFS 0,100,100
@LOOP
 SPOFS 0 OUT X,Y
 STICK OUT SX,SY
 X=X+SX
 SPOFS 0,X,Y
 WAIT
GOTO @LOOP

ここから先は、あなた自身で、「縦(上下)に動かすにはどうするか」や
「名前だけ出てきたIFとは何なのか」について、挑戦してみる事をお勧めします。
どうしても行き詰ったらまた質問してみれば良いのではないでしょうか。
(絶対に必ずお答えします!と約束はできませんが・・・)がんばってください。

656yuuki:2015/02/05(木) 11:25:34 ID:RT6winTw
ありがとうございました。
色々やったらできました。
詳しく説明してもらえて、とても嬉しいです。
僕は、ミーバースもやっていますが、ミーバースだとあまり答えてもらえないので、嬉しかったです。
あと、僕は3Dのシューティングゲームを作りたいのですが、戦闘機などで戦うのでななく、人と人が、銃で戦う感じのを、作りたいのですが、銃のスプライトが無いので、スマイルツールからペイントで、書きたいんですけど、書いたあとに Y ボタンでセーブとかできますけど、そのかいたやつを画面に、表示する方法を教えてください。
お願いします

657名無しさん:2015/02/05(木) 18:39:48 ID:nmGARjiU
イチゴを銃に書き換えた場合
LOAD "GRP4:ファイル名"
SPSET 0,0

658yuuki:2015/02/05(木) 18:47:32 ID:RT6winTw
ありがとうございました。

659名無しさん:2015/02/08(日) 17:33:34 ID:dDnUEEXA
将棋盤のように人間を真上から見下ろしたようなイメージのゲームを作っています。
キャラクターである人間の視野角を設定したいと考えました。
人間として表示させているスプライトの座標を中心に、この範囲は見えてますよ、
という目安になるラインを引きたいのですが、
始めたばかりで下図のようなラインを引くにはどうすれば良いか分からず悩んでいます。

●             ●
 ●           ●
  ●         ●
   ●       ●
    ●     ●
     ●   ●
      ● ●
       ◎←中心(スプライトの画像)

RAD命令辺りで角度を出して、座標を中心にGLINEで引けばいいのか..?
とも考えたのですが...
何か良い方法はあるのでしょうか?

660名無しさん:2015/02/08(日) 19:20:03 ID:nmGARjiU
ACLS
SPSET 0,127+2048
SPOFS 0,200,120
FOR I=1 TO 2
 SPSET I,1194
 SPSCALE I,0.25,100
 SPROT I,(I AND 1)*90
 SPLINK I,0
NEXT
@LOOP
 VSYNC
 IF BUTTON(2)==16 THEN
  SPROT 0 OUT R
  FOR I=0 TO 2
   SPANIM I,"R",-60,R+360+(I AND 1)*90,0
  NEXT
  SPSTART
 ENDIF
 IF BUTTON(0)==0 THEN SPSTOP
GOTO @LOOP

Aボタンを押すと回転します。

661名無しさん:2015/02/09(月) 05:10:17 ID:dDnUEEXA
>>660
ありがとうございます。
ヘルプを見ながら、
この命令で何故こうなっているのかを理解して応用したいと思います。

662名無しさん:2015/02/09(月) 07:10:44 ID:nmGARjiU
バグがあったので、そのまま応用して使うのは止めておいてください。
(角度の数値が累積してエラーになる)

『もちろんグラフィックを使う方法もありますが、
 スプライトのみを使って表現する方法もありますよ』

というだけの意味の返答だった、と考えてください。
最適な方法なんて、ゲーム毎、場面毎、作る人毎によって違いますから。

一時期、ミーバースで、スプライトの諸機能を使って
数学(特にラジアン角度?)を使わずに角度を扱おう!
みたいな挑戦があって。それの影響を受けてます。
確かに360度の角度の考え方だけで済みますね。

スプライト機能の持つ当たり判定各命令を駆使すれば
ここから画面上の点を割り出してGLINE描画に使う、
なんてこともできそうです。

663名無しの厨房:2015/02/09(月) 20:51:59 ID:3XUkIQmg
最近プチコン3号をはじめた者ですが、自分で作ったスプライトを読み込み、
ゲームで使用する方法が分かりません。スマイルツールで読み込む方法ではないです。
どなたか教えて下さいませんでしょうか。

664名無しさん:2015/02/10(火) 00:57:01 ID:JEubZI..
>>663 >>657

665名無しさん:2015/02/10(火) 06:09:58 ID:dDnUEEXA
>>662
了解しました。
私がプチコンというか、プログラムを始めて2カ月のド素人なもので、
教えて頂いたコードを見たときの正直な気持ちが、
「やべ・・・コレわかるかな^^;」でしたw
角度を決めて直線を引くだけでも色々な方法があるのですね。

私の考えているゲームの画面は動画ではなく紙芝居のような場面ごとの静止画なので、
座標から、角度と直線、直線を引く方向で表示できるような
シンプルな命令を入れる方法があれば、そっちも教えて頂きたいです

666名無しの厨房:2015/02/10(火) 19:37:46 ID:3XUkIQmg
見落としてました…orz解決しました。ありがとうございます。

667名無しさん:2015/02/11(水) 04:39:56 ID:MNK4RpLw
>>665
私、角度な数学は苦手でして(^p^)
なので、(この場所で他に回答してくれる人が居ないようなら)
ミーバースに行った方が、よりあなたに合う回答が得られると思います。

668名無しさん:2015/02/11(水) 05:06:02 ID:MNK4RpLw
でも、たとえば・・・

「FOR I=0 TO 360」みたいな書き方/方法を使って、点だけで円を描く方法って、
検索でもいっぱい出てくるじゃないですか。
あれって、中心の座標と、そこから360度の方式の角度での座標が得られるわけだから、
中心から その座標までGLINEを引けばいいってことですよね。

主人公が向いている方角が180度の方角で、見える範囲が左右45度だとしたら、
180-45度と180+45度の角度の座標を得て、それぞれGLINEすればいいんじゃないかな。

・・・たぶん考え方は合ってると思う。

669名無しさん:2015/02/12(木) 19:30:19 ID:Vwe1ISgE
>>665
考え方は >>668
> 主人公が向いている方角が180度の方角で、見える範囲が左右45度だとしたら、
> 180-45度と180+45度の角度の座標を得て、それぞれGLINEすればいいんじゃないかな。
であっているので、プログラムを書きました
アナログスティックで移動、LRボタンで左右回転
あとは、三角関数を勉強してください

ACLS:GPRIO 8
VAR X=200,Y=120 '中心座標
VAR R=0     '見ている角度(上が 0度)
VAR S=45     '視野角
VAR DX1=0,DY1=0,DX2=0,DY2=0
VAR L=60

SPSET 0,0,0,16,16,1
SPHOME 0,8,8
SPOFS 0,X,Y

@LOOP
STICK OUT SX,SY
INC X,SX*4:INC Y,-SY*4

B=BUTTON(0)
IF B AND 256 THEN DEC R,4   'L BUTTON
IF B AND 512 THEN INC R,4   'R BUTTON

DX1=SIN(RAD(180-R+S))*L
DY1=COS(RAD(180-R+S))*L
DX2=SIN(RAD(180-R-S))*L
DY2=COS(RAD(180-R-S))*L

SPOFS 0,X,Y
SPROT 0,R
GCLS
GLINE X,Y,X+DX1,Y+DY1,RGB(255,255,255)
GLINE X,Y,X+DX2,Y+DY2,RGB(255,255,255)

VSYNC 1
GOTO @LOOP

670名無しさん:2015/02/13(金) 05:48:02 ID:dDnUEEXA
>>669
コードまで書いていただいて感謝です。

>>668 の方と同じ方でしょうか?別の方でしょうか?

>>668でのコメントをもとに色々と試行錯誤しているところでした。
今回書いてもらったコードはかなり理想に近い形になっていますので、
勉強して応用したいと思います。

>>668
>>669
本当にありがとうございました!

671名無しさん:2015/02/13(金) 17:58:06 ID:Vwe1ISgE
>>670
>>669だけど、>>668の人とは別人だよ

672らりゆ:2015/02/21(土) 19:46:59 ID:rV43r662
プログラミングのやり方がわからない

673名無しさん:2015/02/21(土) 20:28:48 ID:MNK4RpLw
>>672
お好きなところを読んでどうぞ。
ochameclub.web.fc2.com/petitcom3/lecture/
d.hatena.ne.jp/n_shuyo/20150115/1421292568
plaza.rakuten.co.jp/route21/diary/201501120000/
www.white.umic.jp/pc/2014/12/20-100000.html
damedamepg3q.web.fc2.com/pet3Sta_sp1.html
smileboom.com/special/ptcm3/e-manual/24.php

674名無しさん:2015/02/22(日) 01:48:01 ID:hv5dodh6
smileツールで作ったBG画面(RPGのフィールドマップ等)を実際のプログラムでロードして表示するにはどうすればいいのでしょうか

675名無しさん:2015/02/22(日) 06:08:55 ID:MNK4RpLw
>>674 
https://miiverse.nintendo.net/posts/AYIHAAAEAAAFVHwjp7olng
https://miiverse.nintendo.net/posts/AYIHAAAEAADcU5Qx7Es57Q

676EUROBEAT:2015/02/24(火) 19:31:03 ID:VcNJgNDM
今一画面アクションを作っています。B=BUTTON()を使いました。
プログラムを実行してB=BUTTON()がある所でボタンを押したら
「STACK OVERFROW」のエラーが出ました。
このエラーが起きる原因はなんでしょうか?
また、どのような方法で出ないようにできますか?

677名無しさん:2015/02/24(火) 22:21:49 ID:MNK4RpLw
Stack Overflow(スタックオーバーフロー)
「スタック」とは・・・この場合「戻る場所を覚えておくための容量」
と説明して良いと思います。「オーバーフロー」は「溢れる」と。

GOSUB や DEF を呼び出すと、後で RETURN や END で戻ってくるために
呼び出した場所を覚えておかなければなりません。
その記録のために使う場所がスタックです。

そして、GOSUB を呼び出した時に RETURN する前に別の GOSUB や DEF を
呼び出すことも出来ますよね。そんな時は、スタックに次々と
戻る場所を追加で記録していきます。

ニンテンドー3DSも、どんなコンピューターでも、記録できる容量には
限界があり、「これ以上、スタックには記録できないよ!」となった時に
スタックオーバーフローのエラーを出して、知らせます。

以上が、質問の「このエラーが起きる原因」です。
次の質問の「どのような方法で出ないように」ですが、これは

GOSUB で呼び出された先で、RETURN しないままに GOTO で戻るような
プログラムを書いてしまっていないかを確認すると良いと思います。

次のような例が、
スタックオーバーフローのエラーを出すプログラムのよくある書き方です。
@A
GOSUB @B
@B
GOTO @A

678EUROBEAT:2015/02/25(水) 10:51:33 ID:CYGsPm6I
なるほど。
解決しましたありがとうございます!

679piyo:2015/03/01(日) 12:06:29 ID:/48Jel1A
電子書籍つくりたいんですけど、初心者なので全くわかりません。
だから、本の内容以外誰かプログラムを書いてくれませんか?
わがまま言ってスミマセン、、

680名無しさん:2015/03/02(月) 07:29:34 ID:MNK4RpLw
>>679
『PBR(Petit Book Reader)』
第二回プチコン大喜利、プロ生ちゃん特別賞受賞作品
http://www2.u-netsurf.ne.jp/~ozawa/petitcom/
http://smileboom.com/special/ptcm2/co_contest/2nd.php

681ピット:2015/03/06(金) 00:22:06 ID:cO.em93Q
MMLのミュージックと同期の取り方を知っている方いましたら教えてください。

例えば、
BGMPLAY "ABCDEFG"
と入力したときに、"D"が鳴らされるタイミングで敵が現れる。
等の処理を行いたいと思っています。

682名無しさん:2015/03/06(金) 05:05:25 ID:MNK4RpLw
BGMSET 128,"ABCDEFG"
BGMSET 129,"RRR"
BGMPLAY 0,128
BGMPLAY 1,129
@LOOP
IF BGMCHK(2)==FALSE THEN GOTO @A
GOTO @LOOP
@A
PRINT "てきが あらわれた!"

何も音が鳴らないMMLを同時に再生させて
再生が途切れるタイミングを検出する方法です。

「MML内部変数」という仕組みを使う方法もあり、
そっちの方が柔軟に対応できそうですが、
MML内部変数にはバグがあるとのことで
プチコンが更新されるまでは使わない方が良いと思います。

最初に書いた方法ならプチコンが更新されても
そのまま使い続けられるでしょうし、
バグが修正された後でもMML内部変数を使う前に
ちゃんとプチコンのバージョンを確認するような
プログラムが書けると良いですね。

683名無しさん:2015/03/06(金) 05:06:30 ID:MNK4RpLw
間違えた。「BGMCHK(2)」は
BGMCHK(1) が正しいです。

684ピット:2015/03/06(金) 20:04:36 ID:cO.em93Q
>>682
回答ありがとうございます。

BGMの並列実行なんてできたんですね。
BGMPLAYの説明に「MMLによる再生はトラック0で行われる」
と記載があったのでてっきりできないものかと思っていました。
BGMSET 129,"R"
IF BGMCHK(1)==FALSE THEN
COUNT = COUNT + 1
BGMPLAY 1,129
ENDIF
で、あとはカウント値を参照することでいろいろ応用できそうです。

また、「MML内部変数」のヒント教示も感謝です。
プログラムとしては内部変数を使うのがもっとも簡単そうなので、
ちょっとの間同期は(T.B.Dとして)あきらめておいて、
修正を待ってみたいと思います。

待ちきれなくなったら、>>682さんに紹介いただいた休符使用と、BGM並列実行
考えて見たいと思います。ありがとうございましたす。

685名無しさん:2015/03/07(土) 12:54:51 ID:MNK4RpLw
おそらくBGMCHKは1/60秒の精度でしか判定できません。
そしてBGMPLAYも1/60秒の精度でしか発効されないと思います。
それに対しMMLは、
テンポの値と音の長さによっては、それ以上の精度になります。
さらに、仕様によっては
音色の余韻の減衰にかかる時間などがBGMCHKの判定に影響しそうです。
(この場合は休符だけなので無関係でしょうけど)

684で書かれた例では、演奏の拍数を数えているようですが、
前述の精度の影響で誤差が溜まり
タイミングがズレることになると思います。

演奏開始時のMAINCNTと現在のMAINCNT
そして別途用意したMMLのテンポの値を使って、
自前で現在の拍数を計算する方が良いと思います。

それでも「60フレームが厳密な1秒ではない」仕様が
計算に誤差を生む原因になってしまいそうですが・・・

・・・ま、バグ修正を待った方が簡単確実ですね

686名無しさん:2015/03/07(土) 12:57:35 ID:MNK4RpLw
MICPOSを使えば
MAINCNTの持つ誤差の問題は回避できそうかな?

687名無しさん:2015/03/07(土) 14:25:40 ID:cO.em93Q
>>685
BGMPLAY関数同士でも16ミリ秒も誤差があるんですね。
うーん・・・誤差はあんまり考えて無かったです。
たしかに音が鳴り止んでから再実行するまでに誤差があるはずで、
カウントする方法では無理がありそうですね。

MICPOSをつかって時間指定する場合は"Txxx"や"Lxxx"
への対応が鬼化しそうですね。。。

いずれにしても、「待ち!」が得策ですね

688名無しさん:2015/03/08(日) 02:45:36 ID:8G3rZAdc
今、RPGっぽいゲームを作ろうとしているのですが、スプライトの移動とアニメーションがうまくいきません。

@LOOP
B=BUTTON()
IF (B AND1)==1 THEN
  Y=Y-16
  SPANIM 管理番号,3,データ配列,0
ENDIF
GOTO @LOOP

上への移動を例として、わたしがやりたいことを要約すると

1.上を押している間、アニメーションの最初のコマがループしてアニメーションが止まっているように見えるので、それをなくしたい。
2.移動時に線形補完を入れて、ドラクエ等のような1マス移動時の滑らかさを出したい。

この2つを作るにはどうしたらいいでしょうか。

689名無しさん:2015/03/08(日) 08:26:28 ID:MNK4RpLw
1つ目は、
SPANIM命令を繰り返し実行しているのが原因ですので、
そうならないように工夫します。
この場合だと、BUTTON(1)を使用してボタンを押した時に一度だけ
SPANIM命令が実行されるようにするのはどうですか。

2つ目については、
「ドラクエ風の移動」だとスプライトの移動と言うよりは
BGの移動が主になると思いますので、BGANIM命令を使えばいいでしょう。
使い方はSPANIM命令と似ていますので調べてみてくださいね。
処理の流れとしては、たとえばBGANIMで1マス分スクロールさせて
BGCHK命令を使いスクロールが終わるまでは
次のスクロール処理をさせないようにするのはどうですか。

690名無しさん:2015/03/08(日) 15:20:22 ID:MNK4RpLw
ちょっと試してみたら「完璧に不自然にならないように」
ボタンに応じて足踏みアニメーションさせるのは
BUTTON(2)とSPANIMだけでは難しそう?ですね・・・

取り繕う為に細かなフラグ管理とか書き加えるくらいなら
いっそ自前でMAINCNT見ながら毎フレームSPCHRした方が
気が楽になりそうと言うか。
ファミコン版ドラクエは10フレームに1度しかボタン入力を
受け付けなかったと聞いたけどその気持ちが分かると言うか。(関係無いか)

ま、不自然さが残ってもSPANIMで済ませて
とっとと次に進んだ方が勉強には良さそうですね。

(逆に、それが難しいと感じた自分の方が勉強が足りない可能性

691688:2015/03/09(月) 01:41:08 ID:8G3rZAdc
>>689
>>690
お二方、ご解答ありがとうございます。
おかげさまで解決しました。
四方向移動だけだとスプライトのアニメが斜め入力で少し変になってしまいますが、こちらは自力でなんとかしてみようと思います。
プログラム始めて三日の初心者ですので、まだまだわからない所が出てくると思いますが、そのときはまたよろしくお願いします。

692名無しさん:2015/03/14(土) 01:47:15 ID:iglswvzo
これってどうあがいても9999行にプログラムが入らなかったら諦めるしかない?

693名無しさん:2015/03/14(土) 03:10:31 ID:MNK4RpLw
プチコン3号は99万9999行まで可能で
(電子説明書30ページ、なぜか0行目を含むことになってるけど)
また、その行数を超えても大丈夫だと言うことです。
(ttps://twitter.com/notohoho/status/543366543698968576 )
ただし、行数とは別に全体の文字数制限はあるみたいです。
(4百万文字くらい?1文字2バイトで8メガバイトの制限かも。)
(ちなみにファイルサイズはUTF-8形式なので条件によって数え方が変わるらしい)
そして、それが4スロットあります。

プチコンmkIIでは最大行数は9999で、
1行は100文字までの制限があり、スロットもありません。
さらに、行数と1行の文字数の他に全体での文字数制限もあったと思います。
しかし複数のプログラムファイルをEXECなどで相互に使用し
制限を回避している人もいましたよ。

694名無しさん:2015/03/14(土) 04:23:22 ID:iglswvzo
なるほどね
詳しくありがとう

695名無しさん:2015/03/14(土) 13:08:58 ID:MNK4RpLw
プチコン3号、1スロットあたり
100万文字が限界だったらしいですね。
1文字2バイトが4スロットで8メガバイトか。
メインメモリが8メガあるのにソースコードが
スロット全部合わせてやっとメインメモリと同じというのは、
物足りなく感じますね

696名無しさん:2015/03/15(日) 00:51:01 ID:iglswvzo
ゲームに使うBGMとかドット絵とかを自作したいときはwikiに投稿してあるそれ用のプログラムを使えばいいの?かな?

697名無しさん:2015/03/15(日) 02:14:55 ID:MNK4RpLw
はい、基本的にそれで良いと思います。
作曲用のプログラムは、MMLとして保存する機能があるものを
選んで使うと良いでしょう。
そうでないとゲームのBGMとして使う時に使いにくくなります。

698名無しさん:2015/03/15(日) 02:41:38 ID:KYTo.FJI
またまたありがとう
投稿プログラムとかQR漁ってみる

699名無しさん:2015/03/15(日) 12:29:58 ID:akAEgO3.
下画面で使えるノートpcのタッチパッド見たいなのを作りたいんですがいまいちわかりません。
なので初心者でもわかるように解説してくれませんか?
Miiverseだとあまり詳しく書いてもらえないので・・・

700名無しさん:2015/03/15(日) 15:30:21 ID:MNK4RpLw
タッチパッドの動作の基本的な部分を細かく単純化して文章で書きながら
あらためて考えてみるという所から始めてみるのはいかがですか。
考えがまとまりやすくなって分かりやすくなると思いますよ。

タッチパッドは、指で触り、そのあと触り続けながら移動させると
画面上のマウスカーソルが動く、という動作をするものですよね。

最初に「指で触る」。
→触った瞬間だけはマウスカーソルは動かないということだな。

「触り続けながら移動させる」
→どのくらい移動させたかが重要になりそう。
→そのためには、触り始めた位置を記録しておいて現在位置と比較する必要がありそう?
→触り続けているかどうかの判断も重要そう。

「画面上のマウスカーソルが動く」
→最初に、マウスカーソルを別に用意しておく必要があるよね。
→マウスカーソルがどの場所にあっても、動き始めはその位置からになる。
→触り始めた時にマウスカーソルがある位置が重要になるのかも?
→ついでに、画面外に出ちゃわないようにするのももちろん重要だよね。

こんな風に考えてみました。参考にしてみてください。
これを踏まえて、プログラムにするにはどうするか、考えてみましょう。

701名無しさん:2015/03/15(日) 15:31:11 ID:MNK4RpLw
ACLS '画面初期化
XSCREEN 3 '下画面のキーボードを消す
GPAGE 0,4 'マウスカーソル的な画像を用意ここから
GFILL 0,0,15,15,0
GTRI 0,0,0,12,8,8
GLINE 0,0,7,15 'ここまで
SPSET 0,0 'マウスカーソルをスプライトとして表示

@LOOP
VSYNC
OTX=TX:OTY=TY 'タッチ移動量を知るための比較用に、前にタッチした位置を覚えておく。OldTouchX/Y
TOUCH OUT STTM,TX,TY '現在のタッチ位置を知る
IF STTM==0 THEN GOTO @LOOP 'タッチしてない時は何もしない
IF STTM==1 THEN OTX=TX:OTY=TY 'タッチした瞬間だけは移動させない処理
SPOFS 0 OUT X,Y 'マウスカーソルの現在位置を知る
X=X+TX-OTX 'タッチ移動量分だけ変数X/Yを変化ざる
Y=Y+TY-OTY
IF X<0 THEN X=0 'マウスカーソルが画面外に行きそうなのを矯正する処理ここから
IF X>399 THEN X=399
IF Y<0 THEN Y=0
IF Y>239 THEN Y=239 'ここまで
SPOFS 0,X,Y '結果を元にマウスカーソルの位置を設定する
GOTO @LOOP

考えながら、少しずつ入力しながら、実行してテストしながら
プログラムを作った結果、こうなりました。

その結果、書き出しておいたうちの
「触り始めた位置を記録」と「触り始めた時にマウスカーソルがある位置」は
考えすぎだったり、あるいは不要だったことがわかりました。

702名無しさん:2015/03/15(日) 15:35:12 ID:MNK4RpLw
さて、これで一応マウスカーソルは動くのですが、快適には使えないように感じませんか。
それは、なぜなのでしょうか。考えてみると、
本物のタッチパッドは、指を早く動かすとマウスカーソルはもっと大きく動きませんか。
なるほど!本物はそんな工夫をしていたんだなぁと、改めて気づいた気分です。

今のプログラムは単純にタッチ移動量をそのまま使っているので、
何かしら工夫して、数値をそれっぽく加工してあげると良さそうですよね。
次はそこを、自分で考えてやってみてはどうでしょう。

また、先のプログラムにも、説明のために冗長なところがあったりするので
プログラムの流れを見ながら、もっと無駄がなく効率的に動作させるには
どう書けばいいか、とか頭の体操に考えてみるのもいいかも知れませんね。
書き写しミスあればご容赦ください

703名無しさん:2015/03/15(日) 16:03:23 ID:akAEgO3.
なるほど、そういうことか。
わかりやすいかいせつどうもありがとうございました

704名無しさん:2015/03/19(木) 15:14:22 ID:daMam8RI
ホント初心者的な質問なんですが、
NEXTの使い方が良く分かりません。
誰か教えてくださる方よろしくお願いします。

705名無しさん:2015/03/19(木) 18:18:55 ID:MNK4RpLw
NEXT の意味を日本語で解説すると、
「ここまでを、繰り返してください」という意味だと説明できると思います。

NEXTは、FORの対になる命令です。
このように、何かの対になる命令というのは他にもあって、

IF の対が ENDIF
WHILE の対が WEND
REPEAT の対が UNTIL
などの組み合わせがあります。

これらを日本語で例えるとするならば、
様々なカッコみたいなものと考えるのはいかがでしょうか。
"【"の記号を見たら、次に"】"の記号が出てくるまでは
ひとまとまり、みたいに考えますよね。
その途中に"』"の記号が出てきても、
最初の"【"の対になる記号とは違うから、まだ区切りではないと思いますよね。

ですから、最初に出てくる命令と、その対になる命令がある場合は、
2つをセットで覚えると良いでしょう。

FOR命令は、「FOR」の文字に続いて、どれだけ繰り返すのか、などの
繰り返すための条件を指定して書きます。
そして、繰り返したい命令をいくつでも書いて、
「ここに書いたまでの命令を、繰り返すんですよ」という
目印のように書くのが、NEXTです。

706名無しさん:2015/03/20(金) 12:06:36 ID:xZF8KTkw
>>704が気になったので、試しに
GOTO @JP
FOR I=0 TO 10
@JP
NEXT
て書いてみたらエラーにならなかった

普通はエラーになるんだがなぁ

707706:2015/03/20(金) 12:23:55 ID:xZF8KTkw
更にいろいろ試してみた
GOTO @JP
PRINT "START"
FOR I=0 TO 2
PRINT "FOR";
@JP
PRINT "JP";I
NEXT

結果↓
JP0
FORJP1
FORJP2

GOTO @JP
PRINT "START"
FOR I=0 TO -2 '←ループを殺してみた
PRINT "FOR";
@JP
PRINT "JP";I
NEXT

結果↓
JP0


これバグじゃないか?

708名無しさん:2015/03/20(金) 14:43:45 ID:MNK4RpLw
プチコン3号は、中間コードのような仕組みで動いており、
実行前にソースコードから変換されます。
その過程でFOR命令は IF/INC/GOTO の組み合わせに再構築されているのではないか
と推測している方がいらっしゃいました。
GOTOでFORループ内部へ飛び込んでも、逆に飛び出してもエラーになりません。

709706:2015/03/20(金) 15:46:05 ID:xZF8KTkw
てことは

FOR I=0 TO 10 STEP 2
NEXT



I=0                        'FORの初期化相当
@LOOP                     'NEXTのジャンプ先
IF I<=10 THEN I=I+2 ELSE @LOOPEND 'FORのループ実体
GOTO @LOOP                 'NEXTの本体
@LOOPEND                  'FORの終了先

は等価ということ?インデントが崩れてたらごめんなさい

710709:2015/03/20(金) 16:05:42 ID:xZF8KTkw
ああ、更にごめんなさい
解釈されるかどうかだわ

711名無しの厨房:2015/03/20(金) 19:08:46 ID:3XUkIQmg
XSCREEN4を使わずにスプライトかBGを上画面と下画面に同時に表示させる方法はありますか?

712名無しさん:2015/03/20(金) 20:36:51 ID:daMam8RI
705>>分かり易いご返答ありがとうございました。

713名無しさん:2015/03/21(土) 05:07:55 ID:MNK4RpLw
>>709
そう推測されています。


>>711
XSCREEN 2または3で、上下画面が繋がったような動作をさせるには
そういう風に見えるように工夫してプログラムを作る必要があります。

上下画面共に同じ内容のスプライトやBGを用意するなどが必要になるので
XSCREEN 4よりも使えるスプライト数や重ねられるBG枚数が減ったと
感じることになると思います。

714名無しさん:2015/03/23(月) 08:07:37 ID:K6FrvEHw
BGANIMの"XY"の線形補完を連続使用したときの挙動、おかしくないですか?
バージョンは「プチコン3号 v3.1.0」です。
何かご存知の方いましたら教えてください。

----------------------詳細-----------------------
>>689 さんのコメを参考に
十字キー上下左右でマップ移動できるようなコードを作ったんですが、
何度か移動していると、BGの座標が時々ぶっとぶのです。。。
これといって、こったつくりにはしてないので、
コーディングミスの可能性は低いかなぁとおもっているんですが。。。

サンプルプログラム公開ID(KK34PRP)
該当記述→10行目
BGANIM 1,0,-15,BGX,BGY

715名無しさん:2015/03/23(月) 18:40:09 ID:MNK4RpLw
プチコン3号のバグっぽいですね。
「極めて頻繁にBGANIM命令を発行すると、瞬間的にBGの位置がリセットされる」っぽいです。
公式に報告を出しておきました。

あなたのプログラムの場合、とりあえずこの症状を回避するには、
9行目に「VSYNC」と書いてください。
(もし、それでも解消できなければ、要再調査...)

716名無しさん:2015/03/23(月) 19:29:33 ID:K6FrvEHw
>>715さん
回答ありがとうございます。(いつも回答ご苦労様です。)
いずれ、同期を取るためにVSYNCは使用しようと思っていました。
解決策の提示から、公式への報告までご丁寧にありがとうございます。

717sora_suke:2015/03/24(火) 08:46:59 ID:qw98NVmA
アクションゲームでブロックに乗ったとき、下、横から当たった時の
処理がうまく作れませんちなみにブロックはBGで表示させるタイプです

718名無しさん:2015/03/24(火) 16:33:49 ID:MNK4RpLw
現時点の、処理がうまく作れていない状態のプログラムを示して
(文字で書き写す、写真をどこかに上げてURLを貼る、公開キーを出すなど)
その上で質問してくださった方が回答しやすいですので
どうぞご検討ください。

719名無しさん:2015/03/25(水) 00:08:19 ID:MNK4RpLw
他には、こんな方法もあります。

音声を使ってプチコンからPCへ転送する仕組みが作られて公開されていたはずなので、
それを探して使用し、PCからプログラムのソースコードを投稿する。

パソコンが無く、携帯電話やスマートフォンしかなくても、
プログラムをQRコードに変換してプチコンの画面上に表示するプログラムもあるので、
その方法で転送し、携帯電話機からソースコードを投稿する。

・・・うん、やっぱり初心者向けの方法じゃないな。

720mikan:2015/03/27(金) 15:48:31 ID:fK1UWblk
今三号のサンプルプログラムGAME5VSを触って 攻撃のビープ音のあとに 少し時間差で実際に剣の攻撃が行われるように改造を行いたいのですが 276行目に WAIT 24 という風に付け足すと 目的の音のあとに攻撃が行われるという動作にはなるのですが 画面全体が止まってしまうためカクカクした動きになってしまいます 次に VSNYC 24 としてみたり FOR NEXT で空ループをはさんでみたりしても やはり画面全体が止まってしまってうまく行きません。 スプライトのアニメを表示する行を挟んでみたら そのアニメが終わるまで 攻撃のアニメが動かないかなと試してもみたのですが 実際には 挟んでみたアニメが途中で止まるような感じになり これもうまく行きませんでした。
勉強不足で申し訳ないのですが 画面全体の動きを止めることなく 特定のイベントの動作のタイミングを制御するよい方法があるなら教えていただけると嬉しいです。

721名無しさん:2015/03/27(金) 21:49:16 ID:MNK4RpLw
他の人が作った高度なプログラムを読み解くのは、大変な労力が要るものです。
だからこそ勉強になる面があります。見てみましょう。

まず、あなたが言った276行目の付近は、
(262行)@PUNCH というサブルーチンの中だというのは分かりますか。
(263)最初に変数PCHを見ていますね。ひとまず(270)ENDIFまで読み飛ばす
(272)次にDMGを見ています。
変数名から察するに、ダメージを食らっている動作の最中なのかどうかを
見ているものと思われます。食らいモーション中は攻撃できないようにする処理だろう
(273)変数BTを見ています。変数名と、ANDを使うことと、32という数値の使い方から
ボタン操作を見ていると推測できます。Bボタンを押してなければRETURN
(274)変数PCHを操作しています。最初の条件に出てきた変数ですね。
同じサブルーチン内で判定に使う変数をセットする・・・この変数は重要そうです。
(275)音を鳴らし
(276)スプライトを変える。
この行を無効(コメントアウト)にして実行してみると、人間が腕を振りません。
人間の見た目だけを操作していて、剣の操作はしていないようです。
(261)このルーチンは攻撃に関する処理のはずなのに、剣を操作していない。
これは重要なポイントになりそうですね。

(264)変数PCHで判断されるIFの中身を見てみます。
(265)変数Xを設定しています。ここを無効にすると攻撃の時に
一歩踏み込む動作をしなくなります。同時に攻撃終了時に戻る動作も。なるほど。
(266)スプライトの見た目を変える。無効にしてみると人物が
攻撃モーションのまま戻らなくなります。見た目を戻す処理ですね。
(276)で変えた見た目を、この行で戻すまでがセットのようです。
(267)PCHを減らしています。
(268)PCHの値を整えています。
PCHで判断されるIFの中で、PCHを変更しています。
(269)RETURNですから、この@PUNCHサブルーチン自体を戻らせています。ENDIFを待たずに。
変数PCHで判断したIFの中に入ると、これ以降の他の処理をせずに
@PUNCHサブルーチンが終わるのですね。

722名無しさん:2015/03/27(金) 21:50:30 ID:MNK4RpLw
プチコンでは、0がFALSEで0以外がTRUEの扱いになるのは知っていますか。
PCHは減らされて、ゼロ未満にならないようになっています。
(274)でPCHに設定されていたPCHMAXを虫眼鏡マークのボタンから検索してみると、
(92)数値は9に設定され、他に書き換わることは無いようです。

PCHは9から始まり、(263)のIFをTRUE扱いになり、(267)で1ずつ減り、(269)他の処理はしない。
0になると(263)でIFを通らなくなり、他の処理をする。
こういう動きをしていそうだ、ということが分かってきましたね。

このことから、変数PCHはタイマー的な役割も兼ねたフラグの変数だと分かります。
質問には「よい方法を」とありましたが、これがその答えとなります。

時間を決めて、何かをさせたい場合。この場合は「動作を止める」という動作をさせたいわけですが、

●1、その時間を計るための変数を用意して、
●2、その数値を変化させ、
●3、数値が範囲内にある場合だけ、
●4、特別な処理を行う。(攻撃の処理を行わせずに戻るという処理をさせる、など)

こういう手順で動作させることが、ご質問の「よい方法」だと思います。

723名無しさん:2015/03/27(金) 21:51:23 ID:MNK4RpLw
さて、では実際に考えてみましょう。
(274)を無効にしてみると、剣が前に出ず、攻撃できなくなりました。
変数PCHに値を設定させることが、攻撃が出ることに繋がるのですね。
この動作を遅らせるようなプログラムにしてみましょう。

●1、時間を計るための変数として、「PCHWAIT」を使用することにします。
「PCH=PCHMAX」の替わりに「PCHWAIT=24」をおきます。
●2、変数PCHWAITを変化させるために、
「@PUNCH」の下に処理を書き加えていきます。
変数PCHWAITの数値は、例にならって減らすようにしましょう。「PCHWAIT=PCHWAIT-1」
●3、変数PCHWAITの数値が範囲内にあるかどうかを判断するために、
これまた例にならって、「IF PCHWAIT THEN」とENDIFで囲います。
例にならうなら、ついでに「IF PCHWAIT<0 THEN PCHWAIT=0」も書きます。
このへんはコピー&ペーストを利用して書き換えてもいいですね。
●4、この場合に行う「特別な処理」とは、
『変数PCHに値を設定する』こと、ですね。
「IF PCHWAIT==0 THEN PCH=PCHMAX」

最後に、これまた例にならってRETURNを入れて、出来上がりです。
でも、実際に実行して試してみると、何かおかしいです。
人物が攻撃モーションのまま戻らなかったりもします。
なぜでしょう。分かりますか。

724名無しさん:2015/03/27(金) 21:52:23 ID:nsfMp0Nc
人物の攻撃モーションの見た目を設定する命令は、見てきましたよね。
それをもう一度見てみると、変えるスプライト番号の指定は「変数N」になっています。
変数で指定している理由とは・・・。
このサブルーチンは、実は、人間が操作するキャラクターの制御と、
コンピューターが操作するキャラクターの制御を、同時にやっていたんですね。
さっき用意したPCHWAIT変数は1つしか無いのに、両方のキャラクターの制御の時に
弄くられてしまっていたので、変なことになってしまったのです。

でも、元々あった変数「PCH」の書き方をなるべく手本にして書いたのに、
なぜPCHは大丈夫だったのでしょうか。
「PCH」を検索して変数の行方を探ってみると、180行目付近でSPVAR命令との関連が見えてきます。
スプライトが個別に持っている変数と入れ替えて一時的に受け皿のように使うための
変数だったのです。

またまた例にならって、さっき作ったPCHWAIT変数も、同じような扱いになるように
すれば良さそうですね。
考えてみてください。

725名無しさん:2015/03/27(金) 21:53:26 ID:MNK4RpLw
考え方のヒントを出します。SPVAR命令のヘルプを読むことと、
ここで使われている、先頭の文字がVの変数の役割を、変数名で検索して探って考えてみましょう。

さて、それで上手く動きますが、細かいことで言えば、まだあるかも知れません。
ボタンを押すとすぐに人物が攻撃動作の絵になり、剣の動きだけが遅れる感じですが、
攻撃動作の絵自体も遅らせたいとか。
あるいは、攻撃待ちの間にもジャンプや移動ができるのは、自分が思ってるのと違うとか。

しかし、ここまで出来れば、きっとあとは、大きな苦労はしないでできますよね。
他の人の作ったプログラムを見るのにも、少しは慣れたことでしょうし。

726mikan:2015/03/27(金) 23:39:14 ID:fK1UWblk
お忙しい中、わかりやすく丁寧な解説を本当にありがとうございます!
先生の一行一行の解説が本当に宝の言葉に感じます。これだけの示唆に富むありがたい文章を、わざわざご回答いただき本当に感謝の気持ちで胸がいっぱいになりました。
勉強不足でプチコンで0以外がtrueになることも理解していませんでした。動作の確認を予測するために、わざと行をコメントアウトの状態にしてプログラムを確認する方法があることに、目から鱗がおちる思いがしました。今までは数字を大きくしたり小さくしたり変更して、その数字の役割みたいなものを予想していました。自分で触っていたプログラムはこんな感じになっていました(キーKK8NDZM) どうしてこのように タイミングを変更したプログラムを作りたいと思ったかと申しますと ハドソンさまの作られたゲームのシステムの中で 盾の操作がとても楽しいゲームがあったのです。参考動画https://www.youtube.com/watch?v=JYSxdJYwTy0&amp;feature=youtube_gdata_player
そんな盾の楽しいゲームの防御?を再現できたらと思ってサンプルを触っていたのでした! 今は音のあとに攻撃が遅れて動作するようにして 防御を任意に行えるような形を目指しているのですが 行く行くは 攻撃前にモーションのかわりになんらかのエフェクトを追加して そのタイミングにうまくボタンを押したら 防御ができるような シューティングゲームのボムのプログラムを研究して 少しの瞬間だけ攻撃を防げる盾のような動きをするスプライトを追加できるように 先生に解説していただいた文章を研究して頑張りたいと思います!
本当に本当に丁寧な解説ありがとうございます。

727名無しさん:2015/03/28(土) 00:13:52 ID:K6FrvEHw
だれかオラに知恵をかしてくれ!

[やりたい事]
可読性の高いデコーダーを作りたい

[背景]
プチコン3号ではCASEやSWITCH文に相当する命令が無く、
IF,ELSEで記述する場合、ネストが恐ろしいことになってしまい、
コードの可読性が落ちてしまいます。
バージョン310からELSEIFが使えるようになったので
以下のようにコーディングをしてみましたが、
ELSEIF(?)THENの後は改行を入れなければ
構文解析がうまくいかないようです(カッコの対応付けがおかしい?)。
----------ダメなコード例----------
IF (A==1)THEN ANS=XXX
ELSEIF(A==2)THEN ANS=YYY
ELSEIF(A==3)THEN ANS=ZZZ
ELSE ANS=0
ENDIF
------------------------------

自分の尺度で語って恐縮なんですが、
改行を入れてと1条件のデコードを2行にするのはNGで
1行1条件のデコードを行いたいというのがあります。
また、ELSEIFを使用しないで、IFを使用した以下のようなコードもNGです。
理由は条件分岐の実行回数が増えるため、
プログラムが重くなってしまうからです。。。
----------重いコード例----------
RESULT=0
IF (A==1)THEN RESULT=XXX
IF (A==2)THEN RESULT=YYY
IF (A==3)THEN RESULT=ZZZ
------------------------------

いい案が思いついた方、よろしくお願いします。

728名無しさん:2015/03/28(土) 04:33:21 ID:hbYUR6ZU
>>727
気になって調べた。マニュアルと先達は偉大
-----------------
ON A GOTO @END,@a1,@a2,@a3
@a1 ANS=XXX:GOTO @END
@a2 ANS=YYY:GOTO @END
@a3 ANS=ZZZ:GOTO @END
@END

729名無しさん:2015/03/28(土) 08:31:32 ID:MNK4RpLw
>>726
「ゼロ以外はTRUEになる」のは、厳密に正確ではない部分もあると思いますので、
もし期待と違う動作をした時には疑ってみてください。

一部をコメントアウトにして動作確認してみる方法も、
数字を変えて動作確認してみる方法も、どちらも大切ですね。
たとえば「SPCHR N,略」という命令があったとしたら、
「SPCHR N+100,」と書き換えて試してみるとか、
「N=100:SPCHR N,」とか。色々な書き方で試してみると、
理解が深まることもあると思います。

挙げられていたゲームは知らないので、動画を見ても説明を読んでも
いまいちピンと来なかったのですが、
また何か質問があれば答えられる事もあるかも知れません。
(今回の、ヒントもらったけど分かりませんでした!とかでも)
さらに要素を追加すると、今回の部分が邪魔になってくるかも知れませんし、
SPVERを使う今の方法だと、これ以上の機能の追加は厳しそうなので
他の方法にする必要も出てきそうですね。

・・・他の人が作った高度なプログラムは、読み解くのも大変なら
高度な改造を施すのは、もっと大変な面があります。
「うん、一通りある程度、勉強になったな!」と思ったら、そこで切り上げて
自分で最初から作った方が簡単かも知れませんよ、というのもアドバイスです。

730名無しさん:2015/03/28(土) 08:32:41 ID:MNK4RpLw
>>727
「ELSEIF THENで改行が無いと」とおっしゃっているのは、
プチコン3号の構文解析の仕様のせいだと思います。

「ダメなコード例」を順番に見てみると、
1行目のIF THEN は、THENの後が空白ではなく命令が書かれているので、
ブロック型のIF文の書き方ではないと判断されていると思います。
その次のうちにIF文は終わり、と判断されてしまった後で、
2行目で、IF文が無いのに急にELSEIFが出てきて、ダメだと言われます。
THEN(とELSE)の後に何も書かれないまま改行になるかどうか、が
プチコン3号の構文解析がブロックとみなすかどうかの条件だと思います。

判断に使いたい条件が==(完全一致)だけならば、
>>728 のような方法で良いと思います。
プチコン3号では、ラベルと同じ行に命令を書けるようになったので、
ある程度スッキリ書けますね。

こんな工夫した書き方もあります。
REPEAT IF !CHKLABEL("@CASE_"+STR$(A)) GOTO @DEFAULT ELSE GOTO "@CASE_"+STR$(A)
  @CASE_1:  ANS=XXX  BREAK
  @CASE_2:  '2の場合は3と同じ結果にする例
  @CASE_3:  ANS=ZZZ  BREAK
  @DEFAULT:  ANS=0
UNTIL 1
見た目優先の書き方ですね、処理が軽いかどうかは分かりません。
また、もっと柔軟な条件式を使いたい場合は、
こんなような書き方ではきっと無理だと思います。

731名無しさん:2015/03/28(土) 09:00:13 ID:MNK4RpLw
確かプチコンmkIIの時は、ラベル名をいっぱい書き連ねたON GOTOよりも
GOTO "@"+STR$() の方が早かったと思います。
ただし3号では中間言語化されてる方式にと、条件が大きく変わってますよね。
速度を比べてみるのもいいかも知れません。

732名無しさん:2015/03/28(土) 10:49:30 ID:K6FrvEHw
>>728
まずはありがとうございます。確かに格段に見やすく、且つ処理が軽そうです。
ただ・・・気になるのは、ラベル(センシティビティリスト相当)を2回書くというところですね。
ラベル列挙の場合その行が長くなってしまって後々ラベルが
100個 200個・・・って多くなったときにコーディングミスしてしまいそうです。

>>730
かなり最適解に近づいたと思います。
「REPEAT BREAK UNTIL文」を「GOTO @END」にしても動きそうですね。
また、自分がBASIC言語あんまり触ってなくてビックリしてるだけかもしれませんが、
ラベルってこんなにふんだんに使うものなんでしょうか。。?

>>731
mk2つかった事なかったんですが、インタプリタだったんですね。

他にもこんな風に描くともっとスッキリしてて、且つ処理も軽そう!
っていうのがあったらヨロシクおねがします。

733名無しさん:2015/03/28(土) 11:53:51 ID:MNK4RpLw
ラベルをふんだんに使うと言うか、
プチコン3号でswitch的な書き方をする時に、ラベルを多く使う以外に適当な方法が無い
ってのが正しいんじゃないかなーと。
(と言うかC言語でもcaseはラベル扱いだった気が)

プチコン3号でも呼び名だけは「インタプリタ」となってますね。
ま、細かい事はどうでもいいんでしょう、普通は無理に区別する必要が無いことですし。

そんなわけで、「様々な書き方を試してみた結果
 IF文を泥臭く書いた方が早かった!」ということもあり得るので、
本当に速さを気にするなら、つど速度比較のテストをお勧めします。

734名無しさん:2015/03/28(土) 14:01:18 ID:K6FrvEHw
>>733
やっぱそういう言語仕様なんですね。。
私がソフトウェアに疎い人間なんでカルチャーショックだっただけかも。。。
(本職ではverilogやVHDL,といったHDLという言語を使ってます。
verilogのCASE文では直値が列挙される形になっているので違和感を覚えてました。)

735名無しさん:2015/03/29(日) 00:24:00 ID:hbYUR6ZU
100万ループしてみたので報告
--------------------
テスト内容
ループごとに乱数に対応した文字を追加していくプログラム。乱数は0-3と150-153の2種類で試した。
ループ回数は100万回
対象はON(0-3)、IF(0-3)(150-153)、CHKLABEL(0-3)(150-153)、ON+DEF(IF)(150-153)の6パターン
ON(150-153)は現実的じゃないので、代わりにON+DEF手法で調べた
ON+DEFとは外部関数CHKNUMでONで調べる乱数を0-3に修正する方法

処理時間はMAINCNTの差で計測
MAINCNTは実行からのフレーム数を数えるシステム変数(fromマニュアル)
環境は旧3DS、テスト回数は1。
--------------------
結果
処理抜きループ:389
ON:746(0-3)
IF:1055(0-3)1128(150-153)
ON+DEF(IF):2139(150-153)
>>730CHKLABELそのまま:4646
>>730CHKLABEL修正:3397(0-3)
>>730CHKLABEL修正:3784(150-153)
------------------------
単純なONは高速。IFの半分程度の時間で終わった。文字列検索は時間がかかるようだ
しかし任意の数を想定した(150-153)の場合IFが最も速度が早くなった
ON+DEFを使った変換はスタックが増えるせいか6倍程度時間が掛かった
一時文字列(>>730の"@"+STR$)をあらかじめ文字列変数に代入するよう修正すると早くなった
その場合処理時間はONの9倍程度掛かり、文字列が増えると時間も伸びた

ONは条件さえ整えれば高速に動作する。任意の条件だと速度が落ちる
IFは汎用性が高く処理速度も良好。しかし保守は大変
CHKLABELは保守が楽だが相応に処理速度は遅い(IFの5倍)ラベルの文字列が長くなるとより遅くなる

736名無しさん:2015/03/29(日) 00:24:42 ID:hbYUR6ZU
使用したコード
--------------------
@START
RTIME=MAINCNT
TIME=0
TEXT$=""
WHILE TIME<1000000
INC TIME
処理
WEND
PRINT MAINCNT-RTIME
---------------------
処理内容(ON〜GOTOの場合)
I=RND(4,4)
ON I GOTO @0,@1,@2,@3
@0:INC TEXT$+"X":GOTO @END
@1:INC TEXT$+"Y":GOTO @END
@2:INC TEXT$+"A":GOTO @END
@3:INC TEXT$+"B":GOTO @END
@END
----------------------
ON+DEFに使用した外部関数CHKNUM
DEF CHKNUM(NUM)
IF NUM==150 THEN RETURN 0
IF NUM==151 THEN RETURN 1
IF NUM==152 THEN RETURN 2
IF NUM==153 THEN RETURN 3
END

737名無しさん:2015/03/30(月) 00:40:17 ID:MNK4RpLw
「デコーダーを作りたい」という部分がピンと来ていないままなのですが、
仮に、例にあるような、「特定の数値(A)が別の特定の数値(ANS)に対応する」
というだけだとしたら、配列を使うのが、多分これが一番早いと思います。

DIM TBL[ length ]
TBL[1]=XXX
TBL[2]=YYY
TBL[3]=ZZZ
IF A<LEN(TBL) THEN ANS=TBL[A] ELSE ANS=0
配列へのセットは、DATAで書いてREADで行ってもいいし。

でも、こんな単純なデータ置換じゃないからこそ、
switch文をという事だったんでしょうけど。とにかく思いついたので言ってみました。

テストの結果だと、文字列演算がネックの1つになっている印象ですかね。
プチコン3号では文字列の扱いは、内部では配列の管理と共通する部分が
あるような感じだったので、そのあたりを意識すると何か改善のヒントに繋がるかも?
そんな意味では「INC TEXT$+"ほげ"」を連発するようなプログラムの、
流れとか構造自体を何か変えることができれば良いかも知れないですけどね。

738:2015/03/30(月) 17:47:00 ID:TpJ2jeE.
すみません。なぜかセーブが出来なくなってしまいました。セーブ方法は、
save"[名前].txt"です。昨日はこれでできたんですが・・・。
エラーはIllegal function call(SAVE)です。「関数の呼び方が間違っている」です。
これであってるんでしょうか?違ったら返信してください。

739:2015/03/30(月) 17:55:14 ID:TpJ2jeE.
あ、文字数少なくしたらできました。

740名無しさん:2015/03/30(月) 20:51:36 ID:K6FrvEHw
>>735->>736
CHKNUMの使いどころが微妙にわかっていないのでアレですが、
ON+DEFの場合、CHKNUMの中でIFの実行が乱発されるので重くなってるとかないですか?
ON+GOTOは普通に早そうです。。。

>>737
それですわ!ついに解にたどり着いた感。
なるほど。配列の引数をそのまま使って、
それぞれの引数に応じた値を格納しておけばよかったんですねー。
これでIFを連呼する必要なくなりました!

741名無しさん:2015/03/30(月) 21:19:53 ID:K6FrvEHw
>>738
SAVEでエラーでると、すごいこまりますよね。
データ保存したいのにエラーで最初から実行しなおし・・・。
コード汚いですが、以下のようなプログラムでエラー回避しています。

INPUT "ファイルメイ:",FILENAME$
UNKNOWN_STR=0
FOR I=0 TO LEN(FILENAME$)-1
CHKSTR$=MID$(FILENAME$,I,1) '1文字だけ取り出して
SCODE = ASC(CHKSTR$) 'アスキーコードに変換して
IF( (SCODE==45) OR
(SCODE==46) OR
(SCODE>=48 AND SCODE<=57 ) OR
(SCODE>=64 AND SCODE<=90 ) OR
(SCODE==95) OR
(SCODE>=97 AND SCODE<=122) )THEN
'OKの場合の処理(必要なし?)
 ELSE
'NGの場合の処理
PRINT "NG →" + CHKSTR$
UNKNOWN_STR=1
ENDIF
NEXT

IF(LEN(FILENAME$)==0 OR LEN(FILENAME$)>14 OR UNKNOWN_STR==1)THEN
'ファイル名が不正な場合の処理
ELSE
SAVE "TXT:"+FILENAME$, TXTDATA$
ENDIF

742名無しさん:2015/03/31(火) 04:52:46 ID:MNK4RpLw
>>740
なんと本当に数値の対応(だけ)だったのですか。
まさかとは思ったが念のため言ってよかった。。。
「CHKNUMの中でIFの実行が乱発」と言うか、そのCHKNUMの使い方だったら
単純に150を引き算すればいいだけでは・・・と思ってしまうので、
後は、テストコードではなく実際に目的の動作をするプログラムと
実際に扱いたいデータを使って、動作テストや速度テストをやるといいと思います。
これ以上の細かいアドバイスをする場合は、
こっちも、それらを知らないと答えにくいと思います。

743名無しさん:2015/03/31(火) 08:15:57 ID:Iv/KyL5Y
>>740
問題解決したようでよかったです。
なのであとは蛇足になりますが
CHKNUMは処理内部のONに
ON CHKNUM(I) GOTO @0,@1,@2,@3
といった感じで使用しました。
質問については
確かに重くはなりますが、適合すればすぐRETURNしているのでIFで総当たりするよりは処理時間は若干短くなると思います。ELSEIFを使うようなものです。
IFの2倍以上時間が掛かったのはIFとONで実質2回比較しているのに加えて、DEF関数を呼び出す時間のせいですね。
DEFは100万回呼び出して定数値返すだけで750フレーム掛かったので
今回のテストの条件ではDEFの影響の方が大きかったと思います。

744名無しさん:2015/04/02(木) 21:50:55 ID:K6FrvEHw
[ローカル通信での同期について]
リアルタイムにPVPをするようなプログラムの場合、
親機と子機で格納されるデータが異なってしまいます。
おそらく、ローカル通信による情報の取りこぼし結果
ではないかとおもっていますが、うまく同期をとる方法、
ご存知の方いましたらよろしくおねがいします。
-----------------------------
[バージョン] プチコン3号v3.1.0
[サンプル公開ID] VK23QJ4P
-----------------------------
余談ですが、「みんなで守ってナイト」という市販のゲームでも
同様の現象が起きてしまうのを思い出しました。
プチコンうんぬんというより、3DSの仕様なのかも。と思っています。

745名無しさん:2015/04/03(金) 03:38:03 ID:VcJS5JHY
試してみましたが、動きにズレなど特に起こりませんでしたよ。
確実に症状が出る条件や操作方法などありませんか?

746名無しさん:2015/04/03(金) 18:05:04 ID:K6FrvEHw
>>745
確実に症状が出る条件を突き止めるのは難しいですが、
ふたりで1〜2戦しているとほぼ確実に出てしまいます。
上下左右に十字キーをおしつつYボタン操作、Bボタン操作。
等と、常に何かのボタンを絶えず押し続けているような状態。
が一番近いかと思います。

症状として最もわかりやすいシチュエーションとして、
片方は勝利し、ゲーム終了しているのに
もう片方は、まだゲーム終了していない状態になってしまう
ということが挙げられます。
(座標のズレやHPの表示ではわずかの差であるため、
なかなかわかりにくいです。)

747名無しさん:2015/04/03(金) 22:54:17 ID:jOwmrvXY
なるほど手元でも発症しました。
こんな検証コードを書いてみました。

ACLS
BGFILL 0,0,0,24,1,1
SPSET 0,0
MPSTART 2,"HOGE"
@LOOP
VSYNC
B=BUTTON(0,0)
IF B AND 4 THEN DEC X,20
IF B AND 8 THEN INC X,20
SPOFS 0,X,0
GOTO @LOOP

十字ボタン左右でイチゴを左右に動かすだけですが、
位置がズレたり、また位置が合ったり。
注目点は、毎フレームSPOFSを、変数Xの値に基づいて行っているので、
イチゴの位置のズレは、変数の値がズレている事を指すという点です。

これ自体は、プチコン上でのプログラムからでは、
どうしようもない事なのでしょうが、
機械語で動いている、プチコンのシステム側では、
これ以上の工夫はできないのでしょうか。難しい事だろうとは想像できますが、
バグだらけの有様見てると、これもバグかも知れないし。
公式サイトから意見を送ってみても良いと思います。

748名無しさん:2015/04/03(金) 22:56:27 ID:jOwmrvXY
次に、送信側に「MPSET 0,X」を書き加えて、
受信側はBUTTONとINC/DECを無効にした上で「X=MPGET(0,0)」としてみました。
これは、当然ながら、イチゴの位置は一致しました。
そして、受信側のイチゴの動きがカクカクになったのも想定内ですが、
送信側のイチゴの動きも少し鈍くなったように感じました。気のせい?

そこで、これらの問題点を解決する試みとして、
送信側は「B=BUTTON()」としました。
通信上のボタン情報ではなくて、直に手元側のボタン情報を取得することで、
送信側のイチゴの動きの鈍さが改善されたような気がします。

受信側では、「B=BUTTON(0,0)」とINC/DECをそのまま復活させ、
ボタン情報を受け取るようにした上で、
「IF B==0 THEN X=MPGET(0,0)」と書き加えました。
ボタン情報を参照することで、動き出しの素早さや、動き途中のなめらかさを
確保した上で、ボタンを離している時はMPGETで正確な値を得る、
両方の方式の良いところを得ようという作戦です。

これによって、目標だった、動きのなめらかさと変数の値の正確性の点は成功しました。
新たに、受信側のイチゴがときたま一瞬だけ瞬間移動してしまう問題が出ましたが、
この解決方法は・・・どうしたもんでしょう。分かりません。

749名無しさん:2015/04/03(金) 22:59:05 ID:jOwmrvXY
ともかく、通信では、ボタンやスティックといった入力の情報は
全面的には信用せず、参考程度に留めておいて、
重要な判断は、きちんと数値でやりとりして決めた方が良いでしょうね。
さらに、その数値のやりとりも、遅延というのが問題になりそうですね。

たとえば、ほとんど全部の処理を親機だけがやる、とか。
親機は、各子機のボタン状態を取得して、キャラを動かし、当たり判定をして、
子機に結果を通知する。
子機は、通知された結果を元に、キャラを指示通りの位置に表示させるなど
画面を作る。子機はローカルのボタン情報を、キャラの動き出しの反応など
補助の目的だけに使い、当たり判定には口を出さない。など。

・・・なんだか難しいプログラムになっちゃいそうな予感がします!
「ラグ 軽減 プログラムテクニック」とか、それっぽいキーワードで検索して
出てきたページには、『美しくごまかす』と書かれていましたが
(ttp://www.accessgames.co.jp/news/nws_cedec2011_2.html )
その美しいごまかし方を教えて欲しい・・・。
もう少し色んなキーワードで検索してみてもいいかも知れませんね。

サンプルには通信対戦のプログラムは入ってませんでしたっけ。
過去に、ゲームショウだかで展示された対戦格闘ゲームのサンプルを写した動画では
動きがカクカクでした。きっとMPSETだけで確実性を重視していたのでしょうね。
 → youtu.be/wyJyUSDn04E
「子機はローカルのボタン情報を補助の目的に使って、美しくごまかす」
の部分を省くと、きっとこんな風な見た目のゲームになるんだと思います。

750名無しさん:2015/04/03(金) 23:12:36 ID:jOwmrvXY
MPSET/MPGETは整数値のみで、小数点のある数値はダメとのことなので、
注意してくださいね。

751名無しさん:2015/04/03(金) 23:36:39 ID:K6FrvEHw
>>747さんのサンプルコードを併記して公式に報告おくっておきました。

ズレるものはズレるということで・・・しかたないとして。
MPGETという便利そうな関数があるようなので、
ちょっとこの辺使って、親機からデータ引っ張ってこれないか検討してみます。

752名無しさん:2015/04/04(土) 00:00:05 ID:K6FrvEHw
と・・・更新してみたら大量のレスが、読んでから対応考えまふ

753名無しさん:2015/04/04(土) 00:57:31 ID:K6FrvEHw
なるほど。。。参考になります。

とりあえず以下の処理で乗り越えて見ようと思います。
・各自の端末が処理をする。
・ずれは一定かんかくで親機からMPSET,MPGETでとってくる。

MPSET,MPGETは9個までしか変数をもてない点から
変数を送る手立ては何か工夫が必要ですね。

754ヨッキ:2015/04/09(木) 19:06:45 ID:XGIK/ZTk
437のヨッキです。
お礼するの忘れていました。
申し訳ございませんでした。
そして、ありがとうございました。

755名無しさん:2015/04/20(月) 18:33:29 ID:StfxjRhA
3号を使ってシューティングゲームを組みたいと思っていますが、組んでみたところ、
・スケートもびっくりの止まらなさ。
・自機が安地どころか画面外。
・て言うか弾撃たないとシューティングゲームじゃない。
と、問題山積。
プログラムを乗せますので、すごいプログラマの皆様に問題点を指摘、改善策をご指南頂きたいです。

@PLAYING
B=BUTTON(1)
IF B==1 THEN
PCY=PCY-0.5
SPANIM 0,0,-180,PCX,PCY,1
SPSWOW 0
ENDIF
IF B==2 THENPCY=PCY+0.5
SPANIM 0,0,-180,PCX,PCY,1
SPSWOW 0
ENDIF
IF B==4 THEN
PCX=PCX-0.5
SPANIM 0,0,-180,PCX,PCY,1
SPSWOW 0
ENDIF
IF B==8 THEN
PCX=PCX+0.5
SPANIM 0,0,-180,PCX,PCY,1
SPSWOW 0
ENDIF
IF B==256 THEN
SPSWOW 1
SPOFS 0 OUT PCX,PCY
WT=PCY-479
SPANIM 1,0,-30,PCX,WT,3
SPSTART 1
ENDIF
GOTO @PLAYING

0は自機、1は弾です。
PCXとPCYは自機の座標です。
PCYに-479しているのはXSCREEN 4を使って弾が直進するようにするためです。

是非、よろしくお願いいたします。

756名無しさん:2015/04/20(月) 20:22:35 ID:zEjBTUmw
とりあえず「SPSWOW」ではないです。

●なぜ移動が止まらないのか。
3秒間、移動し続けるようにプログラムされているからです。
「SPANIM 0,0,-180,PCX,PCY,1」
の「-180」の意味は、「移動に180フレームかける」という意味になります。
1秒は60フレームなので、180フレームは3秒間です。
▼止まるようにするには
止めるための条件を、例えば「ボタンを離した時」とした場合、
ボタンを離したことを検知して、移動を止めるプログラムを書き加えたり、
現在の「ボタンを押した瞬間、3秒間の移動を開始する」という仕様を止めて
「ボタンを押している間だけ移動させる」というプログラムに
大幅に書き換える。などが考えられます。

●なぜ画面外に移動するのか。
画面外に行かないようにするプログラムが作られていないからです。
何でもかんでも、面倒を見てやるプログラムを作る必要があるんです。
▼画面外に行かないようにするには
まず、スプライト番号0番の自機の位置を知ることから始まります。
たとえば「SPOFS 0 OUT X,Y」と書いたとして、
変数XとYの中身が、自機の位置を指す数値になります。
XSCREEN 4の場合、画面の範囲は、横が0〜319、縦が0〜479です。
変数Xは自機の横の位置、変数Yは縦の位置になっているので、
この数値を0や319の数値と比較するなどして、
「画面外に出て行ってしまっているのか、あるいは出て行ってしまいそうな状況か」
を判断します。そして必要に応じて、「画面の範囲内に押し戻す」ようにすると、
結果として自機は画面の範囲外に行かなくなります。

●なぜ弾が撃てないのか。
発射を「開始する位置」を指定していないからです。
発射ボタンを押すと、弾は現在の位置から移動するようになっています。
▼弾の発射が自機から開始するようするには
弾のスプライトに対して移動させる命令を出す前に、
SPOFS命令を使い、弾の位置を自機と同じ位置や近くの位置に移動させましょう。
あるいは、SPANIM命令自体に、移動する先の位置だけでなく
移動が始まる位置も設定する方法もあります。

757味たむ:2015/05/01(金) 11:59:43 ID:AWRgwqv6
はじめまして、プチコン初心者なんですが、プログラムを学ぶのにおすすめの本やサイトはありませんか?
mkⅡの初心者講座を見てみたのですが、3号には無い命令なども出てきて頭がこんがらがってしまいまして…(^_^;)

758名無しさん:2015/05/02(土) 23:00:07 ID:OcC0RsXo
もともと入っていたマップを作るプログラムのマップ保存と読み込みの
仕組みを教えてください。

759名無しさん:2015/05/02(土) 23:03:14 ID:OcC0RsXo
マークIIのようにマップ用のリソースはないのでしょうか

760名無しさん:2015/05/03(日) 03:32:29 ID:2Y9uFsiU
>>757
そうですね。違うプログラム言語、あるいは 違いがあるプログラム言語の
情報を参考にするには、前提として、何が違うポイントなのかを理解していたり
プログラムの知識全般をある程度知っていたりする必要があると思います。
なので、そうではない場合は、『プチコン3号を解説している』ものを
選んで探したり読むようにすると良いと思います。

その場合で言いますと、
質問の「おすすめの本」は、プチコン3号の公式ガイドブックが
最初に挙げられると思います。この掲示板の下に広告が出ているので
そこをクリックしても良いのではないでしょうか。
↓こちらでためし読みができるようです。
ttp://smileboom.com/special/ptcm3/nindori/2015/03/post.php

それ以外の書籍では、ゲーム情報雑誌「ニンテンドードリーム」や、
プログラム雑誌「日経ソフトウェア」の中で、
プチコン3号の情報やプログラム講座が載っているそうです。
プチコン3号公式サイトのトップページ最下部に、
まとまって紹介されているようですよ。
紙媒体だと、これくらいでしょうか。

次の質問の「おすすめのサイト」は、
公式サイトで、2つの初心者講座を見ることができます。
ttp://smileboom.com/special/ptcm3/beginner/
ttp://smileboom.com/special/ptcm3/nindori/lecturer/
どちらも、今はまだ内容がスカスカですが、のんびり待っても良ければ、
それでもいいかも知れません。

2番目のアドレスの方は、毎週更新する予定だそうですよ。
内容は前述の公式ガイドブックの内容と同じになるみたいです。
本を買わなくても済むかも?
↓こちらも合わせて読むと良いかもしれません
ttp://smileboom.com/special/ptcm3/nindori/2015/03/20151.php

公式が行っている以外のサイトについては、
「プチコン3号 講座」などのキーワードで検索すると良いと思います。
また、この掲示板では過去にあった同様の質問への回答として
>>673  などが寄せられているようですので、参考にしてみてはいかがでしょう。

761名無しさん:2015/05/03(日) 03:37:13 ID:2Y9uFsiU
>>758,759
プチコン3号のファイルは、テキストファイルとバイナリファイルの
2種類しか無いことになっています。画像を保存したファイルも
BGを保存したファイルも、バイナリファイルだという点では同じです。

SYS/SBMAP のプログラムでは、2種類の形式で、作ったマップを
保存することができるようになっていて、
読み込みは、そのうち1種類の形式だけでできるようです。

このプログラムで作られるマップは、

●レイヤー0からレイヤー3までの、4枚のマップを重ねて
作るようになっていますので、4つ分のデータがあることになります。

●さらに、マップ部品の種類毎に、当たり判定などの用途に
応用して使えるような情報を、レイヤー毎に持っています。

それらをふまえて、

保存する形式の1種類目は、
これらのデータを1つのファイルにまとめた形式です。
読み込みができるのは、この形式ですね。
あらかじめ決められた順番でデータが並んでいます。
それについて詳しく知りたい場合は、SYS/SBMAP のプログラムの
中身を読み解いて調べたり、あるいはネット検索で
誰かがどこかで解説したのを見つけられるかもしれません。
(ミーバースで見かけたような?)

もう1つの形式は、
マップ部品の並び順だけを、レイヤー毎に別のファイルにして記録したものです。
ですから、ファイルが4つで1組になっており、
「当たり判定などに使える情報」は含まれていません。
質問にあった「マークIIのようなマップ用のリソース」に近いものと言えます。
この形式のファイルの使い方は、次のようにします。

BGSCREEN 0,64,64  ’BGの広さを調整します
DIM D[64*64]  ’ファイルを読み込む用の配列変数を用意します
LOAD "DAT:MAP_????_L0",D  ’配列変数にファイルを読み込みます
BGLOAD 0,D  ’配列変数の内容をBGにセットします

762味たむ:2015/05/05(火) 12:29:27 ID:AWRgwqv6
>>760
ありがとうございました。これらを参考に勉強してみます。

763名無しさん:2015/05/10(日) 09:50:28 ID:OcC0RsXo
760さんありがとうございます!!
てっきりマップの画像のまま保存するかと思っていました
BGASVEでちがうものに変えてからそれをセーブするのですね

764素人:2015/05/30(土) 13:33:06 ID:CbHczVgk
こんにちは、初心者です!
公式プログラム集のMAZER byこあ/co.aさんのプログラムの最初の6行の
迷路を作っている部分の解釈ですが、横(X)、縦(Y)で30:23でブロック
をおいて迷路ができてますが、数式が複雑で、よくわかりません!
 最初の縦(Y)0行目は、横(X)に一つ目のLOCATEでブロックを一つとばしで
置いて、二つ目のLOCATEで横(X)、縦(Y)で数式で1つとばしで空いてある場所に
ブロックを置いてあるのは、わかりました。
次の縦(Y)からのブロック置いていくプログラム(数式)がよくわかりません!
できれば、わかりやすく、教えてください!

765名無しさん:2015/05/30(土) 19:37:38 ID:Xfsjq2nQ
初代プチコン用のwebページの物ですね?
http://smileboom.com/special/petitcom/pochette-mazer.html

「ブロック置いていくプログラム(数式)」を教えて欲しいという質問ですね。
このプログラムの中でブロックを置く部分と言えば、
  LOCATE X+P%2,Y-(P-1)%2
の部分ですね。
変数Pの値が重要そうなのが、見て分かりますね。
では、変数Pに値を設定している、「P=」な式を見てみると、
  P=I%176<15
  P=P+R*(P<1)
この2つがありますね。これがご質問の要になるに違いありません。

上の式の意味を見てみましょう。
0から190まで1ずつ増える値のIを、176で割った余りの値が、
15未満ならば1、そうでなければ0。という意味ですね。
この式では、変数Pは、0か1の値になります。

この式で決め打ちされている、176と15という数値の意味が気になりますよね。
試しに(プチコン3号で)、
  FOR I=0 TO 190:?I MOD 176<15;:NEXT
を実行してみると、最初と最後が1の連続になり、間に0の連続がある並びになりました。
このことから、この式の意味は、
『迷路の最上段または最下段を作る時は、変数Pの値は1』だろうと読み解きました。

最上段と最下段は、ただの壁で、通路が作られてはいけないという特徴があります。
これは、変数Pの値が1の時は迷路の生成が起こらないように
作られていると考えられますね。

766名無しさん:2015/05/30(土) 19:39:16 ID:Xfsjq2nQ
次に、下の式を見てみましょう。
この式には、変数Rが登場するので、Rに値を設定する式から見たいですが、

その前に、「(P<1)」という部分が気になります。
Pの値は0か1の2種類だけでした。そのPの値が1未満、つまり0かどうかを見ています。
Pの値が0ならば式が成り立ち1に、Pの値が1ならば0になりますね。
つまりこの部分は、『Pの値を反転させている』と解釈できます。
初代プチコンには、論理反転演算子「!」が無かったのですね。

そして、それをRと掛け算しています。
0を掛け算すると、Rの値が何であろうが0になり、
1の場合はRの値がそのまま適用される。すなわちここまでの意味は、
『Pの値が1ならば、Rの値は無効にする。0ならば、Rはそのまま有効にする。』
という意味になりますね。ちょうどIFの条件判断のような動作をさせているのです。
Rはその変数名からランダムつまり迷路生成のキモなのでしょうし、
さっき言った、変数Pの値によって迷路の生成が起こらないようにしている
という動作の部分がここなのでしょうね。

さて では その 有効と無効を切り替えられるRの値について見ましょう。
  R=(RND(2+(Y<3)+L)-L)*(X%30>0)
新たに変数Lが登場しました。これは
  L=X<3
とされていて、Xの値が3未満、つまり0か1か2の時だけ1になります。
Xの値が小さい時だけ・・・? これって、左端の壁かどうかを判別するのと
関係があるのでしょうか。よく見ると、「(X%30>0)」という部分もあり、
迷路全体の広さは横30ブロックですから、これは右端の壁の判別なのかも。
そうなると、「(Y<3)」の部分も気になりますね。

767名無しさん:2015/05/30(土) 19:40:04 ID:Xfsjq2nQ
ここまで書いて力尽きました。ごめんなさい。気力が続きませんでした・・・
ほんのわずかでも参考になれば幸いです。
後日にでも続きが書け・・・ればいいんですけど

768素人:2015/05/31(日) 22:58:23 ID:m0n609bE
765(名無し)さん、わかりやすい解説ありがとうございました。
もう一度、今回の解説を参考にして、プログラムを調べたいと
思いました!大変参考になりました!

769名無しさん:2015/06/03(水) 09:46:28 ID:AWRgwqv6
セーブ時の保存先は必ずデフォルトのフォルダになるのですか?
SAVE命令を使ってセーブするとき、デフォルトで設定してある標準のプロジェクト以外の別のプロジェクトへ保存させることはできませんか?

770名無しさん:2015/06/03(水) 11:21:24 ID:9ITdlX1M
SAVE命令時に、現在のプロジェクトとは別の
ファイル保存先のプロジェクトを指定することが可能なのは
プログラムがスマイルツールとして実行されている時だけだと思います。

PROJECT命令のヘルプの2ページ目も参考にしてみてください。
とても分かり難いですけど・・・。

要するにプログラムが実行されている時の「現在のプロジェクト」だけを
意識すればいいってことだと思います。
「作品を見る」からだと自動的に切り替えてから実行してるよ、とか。

後は、とりあえずファイルは保存しておいて、後でコピーと削除するとか、
ファンクションキーにPROJECT命令を含む一連の操作の命令を登録して
手間を減らすとか。
ちなみに直接ファイルを複製するのは、プチコン3号のメニューから
手動でのみ許されている操作です。
プログラムで行うには、変数やグラフィックページを介して
間接的に行うしかないでしょう。

771アルカリでんちマン:2015/06/07(日) 19:58:10 ID:hTBb9xQA
三角関数について、猿でも分かるくらいで教えてください。

772アルカリでんちマン:2015/06/09(火) 21:40:01 ID:hTBb9xQA
『SIN=COS+4 としたら、COSを9にすると勝手にSINに13が入る』って予想で正しいでしょうか?

773名無しさん:2015/06/10(水) 15:54:11 ID:AWRgwqv6
>>770さん
ありがとうございました。

774素人:2015/06/12(金) 16:42:26 ID:m0n609bE
768の続きになりますが、宜しくお願いします!

プチコン、プログラムリスト集のMAZER byこあ/co.aさんのプログラムで、
6行目のFOR I=0 TO 2 から 13行目、I=X/57+Y/42:NEXTの解釈なんですが、

最初、I=0 で始まり、X=29の座標になりX/57=0.5087と同じくYの値が、Y=21
にY/42=0.5になり合わさる(足し算)でI=1.009になりNEXTで6行目のFORに
戻り繰り返し(たぶん整数でI=1が代入される)考えでいいと思うんですが、
また、その後、13行目に進み、I=X/57+Y/42:NEXTですが、FOR I=1 と
ここの計算式、この場合I=1.009が合わさり、I=2.009になるのでしょうか?
実際、プログラムI=X/57+Y/42:NEXT:PRINT Iで2.009と表示されプログラム
終了していますが、I=1 か I=2 でFOR文が繰り返しされ13行目のNEXTの前
のI=X+57/+Y/42:NEXTでまた、I=1.009 FOR I=1 か I=2 に戻され13行目の
NEXTの一歩前でまた、I=1.009にな戻されると自分は、解釈してしまうんですが
どうでしょうか?また、プログラム FOR I=O TO 2を3にすると、プログラム
終了しないんですが説明できる方宜しくお願いします!

775名無しさん:2015/06/14(日) 05:41:47 ID:JVIZrV9Y
初代プチコンでは、数値は「32ビット固定小数」でした。
ですから、『たぶん整数でI=1が代入される』ということが
間違っているのですね。小数点以下の値も有効なのです。

おっしゃる通り、『X=29の座標になりX/57=0.5087と
同じくYの値が、Y=21にY/42=0.5になり
合わさる(足し算)でI=1.009に』なります。

そして、NEXTによりFORに戻ると、
省略されたSTEPにより、変数Iに1が加算されます。
その結果が「I=2.009」になります。

TOで指定された数値2よりも0.009だけ大きくなったので、
FORはループの継続をやめ、NEXTの次へ実行が移ります。

776素人:2015/06/15(月) 13:00:09 ID:m0n609bE
774、素人です!775、名無しさん!
大変、ありがたい解説ありがとうございました!

FOR〜NEXT文の使い方、と理屈がこのプログラムでよくわかりました!

自分なりに確認してみました!

1 CLS
2 FOR I=1 TO 10 STEP 2
3 PRINT I
4 NEXT:'PRINT I

そのままRUNと4行目PRINT文実行で目視確認できました!

777ひかり:2015/06/29(月) 18:27:19 ID:/48Jel1A
プチコン3号で電子書籍的なもの(第三回プチコン大喜利の社長賞の「P6姉さんと読書」的なのの、もっと
簡単バージョン。)が作りたいんです!
全くわからんのですが…
ヒントをください!

778名無しさん:2015/07/02(木) 17:03:38 ID:kpdlEBG2
プチコン3号で電子書籍リーダーを作って公開なさっている方が
いらっしゃいますので紹介しておきます。
http://d.hatena.ne.jp/gust_notch/20150326

もし「そうじゃない!」と思われたなら、どこが どう そうじゃないと感じたのか、
もう少し詳しく質問を書いてくだされば答えやすくなると思います。

779名無しさん:2015/07/17(金) 10:57:30 ID:/h8R2fJM
自作したプログラムを使うにはどうすればいいですか?

780名無しさん:2015/07/19(日) 02:02:56 ID:7aHZ34uE
「使う」とは、どういうことを指していますか?
トップメニューの「作品を見る」からプログラムは実行できます。

781名無しさん:2015/07/21(火) 21:40:42 ID:WcMZkQlI
アクションゲームで地面やブロックのBGの当たり判定ってどうやるんですか??
具体的に教えてください

782名無しさん:2015/07/22(水) 12:37:49 ID:7aHZ34uE
もしかして、あなたが質問したいのは、
当たり判定の事だけではなくてアクションゲームの基礎全般のプログラム手法
ではありませんか?

↓このページに丁寧に解説してくださっている方がいらっしゃいます。
https://miiverse.nintendo.net/posts/AYIHAAAEAAA5VHwZFPOzCA

さて、質問の「BGの当たり判定」の事だけで言うと、

プチコン3号では、BGGET命令を使う方法がよく使われます。
BGGET命令は、座標を指定して、特定の位置のBGの状態を取得する命令です。
ピクセル単位の画面上の座標値をそのまま使うこともできるので、
例えばスプライトで表示した主人公の足元のBG、なども簡単に取得できます。

サンプルゲームのジャンプくん(SYS/GAME3JUMP)でも使われている方法では、
BGレイヤーを1枚、当たり判定専用に使用し、
見た目に関係なくゼロ番以外のBGキャラクターがあるかどうかという
簡単な判断で当たり判定ができるようにしています。

もちろん、ゼロかどうかだけではなくて
特定のキャラクター番号であるかどうかを判別すれば、
壊せるブロックかどうかを判断するような事もできるでしょう。

783キジトラ:2015/08/19(水) 11:27:17 ID:pgalHUr6
今横スクロールシューティングを作っているのですが、横スクロールと弾を射つコマンドや方法が分かりません。
どうすれば出来ますか?

784名無しさん:2015/08/20(木) 03:58:33 ID:fq./BWcc
横スクロールシューティングで横スクロールするのは、
背景ですよね。
背景をBGでつくり、BGANIM命令を与えるのが良いと思います。
弾を射つには、
1.ボタンが押されるのを待ち構えるプログラムを作る。
2.弾のスプライトを用意する。
3.弾のスプライトを、自機と同じ位置に移動させる。
4.弾のスプライトにSPANIM命令を与える。
のようにするのが良いと思います。
以下に、ごく基本的なサンプルプログラムを書きます。
ACLS
BGSCREEN 0,1092,15
FOR I=0 TO 200
 BGPUT 0,RND(1092),RND(15),754  ←BGで星空の背景
NEXT
BGANIM 0,"XY",-9000,17472,0  ←背景をゆっくり横移動
SPSET 0,3481  ←自機のスプライトを用意
SPOFS 0,50,100
@LOOP
 B=BUTTON(2)
 IF B AND #A THEN  ←Aボタンが押された事を検出したら
  SPSET 1,1344  ←弾のスプライトを用意
  SPROT 1,90
  SPOFS 0 OUT X,Y  ←自機の位置を得る
  SPOFS 1,X,Y  ←弾の位置を、自機と同じ位置に
  SPANIM 1,"XY",-70,X+500,Y  ←弾をゆっくり横移動
  BEEP 67
 ENDIF
 VSYNC
GOTO @LOOP
書き写しミスあれば許して。
各命令の細かい意味や書き方は「?」で調べてください。
どうしても分からなければまた質問してください。

785名無しさん:2015/08/25(火) 18:17:47 ID:/h8R2fJM
圧縮ツールの作る手順、作り方を教えてください

786名無しさん:2015/08/27(木) 15:13:22 ID:fq./BWcc
ファイル容量を圧縮するなら、プチコンが扱うファイルと、その中身の形式について
調査と理解をすることが、最初の手順ですね。
圧縮したいデータの種類と、それらに適した圧縮方法を考えたり探したりするのが
次の手順だと思います。
自分で考える場合でも、考え方のヒントなどにするために、
インターネットで検索したり図書館で調べたり
データ圧縮の基本的な考え方やプログラム例などを見て理解しておいた方がいいでしょう。
そこまでできれば、あとはプチコンのプログラムとして、それを作り上げます。
このような手順で作ればよいと思います。

787名無しさん:2015/09/03(木) 20:35:31 ID:U4uCfM12
敵を5匹、1匹ずつランダムで動かして自機が触ったら消える用にしたいの
ですがうまくいきません、関係ない敵が止まってしまいます。
どうしたらよろしいのでしょうか?
ACLS
SPSET 100,496
SPCOL 100
DIM X[5]
DIM Y[5]
DIM ED[5]
FOR I=0 TO 4
X[I]=192
Y[I]=112
ED[I]=0
SPSET 0+I,1060
SPOFS 0+I,192,112
SPCOL 0+I
NEXT
@LOOP
GOSUB @MY
GOSUB @TEKI
VSYNC 1
GOTO @LOOP
@MY
B=BUTTON( )
IF B AND 1 THEN PY=PY-1
IF B AND 2 THEN PY=PY+1
IF B AND 4 THEN PX=PX-1
IF B AND 8 THEN PX=PX+1
SPOFS 100,PX,PY
RETURN
@TEKI
FOR I=0 TO 4
IF ED[I]==-1 THEN RETURN
R=RND(4)
IF R==0 THEN VX=0:VY=-4
IF R==1 THEN VX=0:VY=4
IF R==2 THEN VX=-4VY=0
IF R==3 THEN VX=4:VY=0
X[I]=X[I]+VX:Y[I]=Y[I]+VY
SPANIM 0+I,"XY",-16,X[I],Y[I]
IF SPHITSP(100,0+I) THEN GOSUB @ED
NEXT
RETURN
@ED
BEEP 12
ED[I]=-1
SPCLR 0+I
RETURN
GOTO @LOOP

788名無しさん:2015/09/06(日) 12:28:09 ID:fq./BWcc
●原因の箇所
 30行目、「IF ED[I]==-1 THEN RETURN」の行がマズイです。
●結論/解決方法
 RETURN を「CONTINUE」に書き換えましょう。

●解説
この付近のプログラムの動作を、順に見ていきましょう。
「GOSUB @TEKI」の命令で、ラベル@TEKIの行から実行されます。

「FOR I=0 TO 4」で、変数Iの値が、ゼロから始まり4まで1づつ増加しながら
次の行以降のプログラムが繰り返し実行されます。

「IF ED[I]==-1」では、順に
ED[0]の内容が-1なのかどうか、
ED[1]の内容が-1なのかどうか、
ED[2]の内容が-1なのかどうか、・・・を判断されます。

変数Iがゼロの時、つまりED[0]が-1だった場合を考えてみます。
「THEN RETURN」の命令によって、
GOSUBで呼ばれた位置に実行が戻ります。

その先では、「GOTO @LOOP」でループされ、「GOSUB @TEKI」で
再び変数Iがゼロから順に、ED[0]1の内容が-1なので戻り・・・。

変数Iの値がゼロよりも増えないままのループになってしまいました。
「RETURN」命令によって、サブルーチンごと戻ってしまうのが問題です。

「CONTINUE」命令を使うと、それ以降の、FORでループさせる予定の命令を
1度スキップさせることができます。
そして変数Iの値が増えて、FORループが続けられます。

789めがちゃ:2015/09/06(日) 13:59:08 ID:ho3fE5pQ
全くの初心者です。
書籍「プチコン公式活用テクニック」で、
プログラム4-02 スプライトを拡大縮小・回転させるのを、
三角関数を使って、回転軸が中心に変ったように見せかけるテクニックがわかりません。

GCLS
GCIRCLE 128,96,20,15
PNLTYPE "OFF"
SPPAGE 0
SPCLR
X=128:Y=100:PAT=68:PAL=2
SPSET 0,PAT,PAL,0,0,0
SPANIM 0,4,30
@MAIN
D=TCHX
S=TCHY
CLS
①A=RAD((D+225))%360)
②R=8*S/100*SQR(2)
X1=COS(A)*R
Y1=SIN(A)*R
SPANGELE 0,D
SPSCALE 0,S
SPOFS 0,X+X1,Y+Y1
VSYNC 1
GOTO @MAIN

①と②の計算式の意味がわかりません。
①計算処理をする事で、円内からはみだす事なく、
スプライトが回転する事はわかりました。この計算式をしないで、
A=RAD(D)とすると、はみだしてしまいます。
回転角度が135度の時、0度としてXの移動量を計算しているようですが、
なぜ135度なのか意味がわかりません。
スプライトの中心のX座標は135である事が関係しているのかと思い、
表示座標位置を変え、①の式も、変更した位置にあわせたものに修正しましたが、
やはり、スプライトの表示位置に関係なく
この計算式の((D+225))%360)が必要でした。
また、②の計算ですが、
タッチ画面の中央を押した時のYの100座標が拡大率100%としているのは
わかるんですが、8×ルート2の意味がわかりません。
スプライトの長さが16ドットなので、8がでてきたんでしょうか?
すいません、ながながと。わかる方教えてください。

790名無しさん:2015/09/06(日) 16:05:31 ID:U4uCfM12
>>788さん、うまく動きました!ありがとうございます!助かりました!

791名無しさん:2015/09/07(月) 12:57:26 ID:fq./BWcc
>>789
その本は、初代プチコンについて書かれています。
現在は初代プチコンを入手することはできません。
プチコンmkIIが近いですが、プチコンmkIIには
スプライトの回転軸を変えられる命令「SPHOME」が
用意されるようになりましたので、
そのテクニックを使う必要はありません。

さて質問について、私は三角関数は分からないので正しく答えられないと思いますが、

スプライト画像の中心の位置は、
スプライトの左上にある原点から見て、右斜め下45度にあたりますよね。
初代プチコンはスプライトのサイズは必ず16*16ドットでしたから、
縦横比が違う場合などを考慮する必要はありませんし。

そして、三角関数を使って円を描くよくあるプログラムの動作を見てみた時に、
三角関数の角度は通常の(?)角度と90度ズレているのは、なんとなく思っていまして。

その2つの角度を足して、90度+45度=135度だと思うんですけど、
・・・どうですかね? A(^^;

スプライトの大きさが16ドットだから8という数値が出てくるのか、
という部分については、それで正しいと思います。・・・きっとたぶん。

792めがちゃ:2015/09/07(月) 13:52:38 ID:ho3fE5pQ
>>791さん
135度については、なんとなくわかったような気がします。
ありがとうございます。
プチコンのスプライトの座標位置は、左上隅で、その位置辺りを
円の中心座標にし、角度、拡大率に応じて、x、y座標を修正し、あたかも、
スプライトが、スプライトの左隅座標 128,100に常に表示されるよう修正する為に、
①と②のプログラムが必要だったんですね。
確かに、「SPHOME 0,8,8」文を加えると、簡単にスプライトの中心で回転して、
x、y座標のめんどくさい修正が必要なくなりました!ありがとうございます。
ただ、円の中心座標が128,96なので、
スプライトの表示座標も128,100ではなく、128,96にした方が、
円内の調度中心でスプライトが回転するんですが、
これも、初代プチコンの仕様の関係上なんでしょうか・・・
これは、独り言です。

793めがちゃ:2015/09/07(月) 13:57:11 ID:ho3fE5pQ
>>792
スプライトが、スプライトの左隅座標 128,100に常に表示されるよう
↑間違い、
スプライトの中心がスプライトの左隅座標 128,100に常に表示されるよう
です。

794名無しさん:2015/09/08(火) 18:59:59 ID:fq./BWcc
三角関数が分からないなりに自分勝手に考えを続けてみています。
FOR I=0 TO 360
 X=100+COS(RAD(I))*50
 Y=100+SIN(RAD(I))*50
NEXT
↑これは、よくある三角関数を使って円を描くプログラムで、
変数Iの値が、われわれ人間が普段よく使う角度の値として、
ゼロ度から360度まで1度毎に点を打つ、というものですが、

普通、人間がゼロ度から1周、円を描こうと思ったら、
アナログ時計の12時の位置から描き始めますよね。
人間の感覚では「角度がゼロ イコール 12時」ですが、

このプログラムにWAITを入れて観察すると、
描き始められるのは3時の方向からです。
三角関数で角度を扱う時、90度ズレている印象の理由は、これです。
12時から描き始めるようにするには、
「FOR I=0-90 TO 360-90」と、90度ズラしてやることになります。

3時の方向がゼロ度になっていて、時計回りに角度の値が増える。
この事を踏まえて、>>789でいくつか出た数値を当てはめて考えてみると、

「225度」という数値は、スプライトの中心から見て、
左上にある原点の方角、ということに気づきました。
さっきのプログラムで225度を描かせてみると、左上の方角を指します。

SPANGLE命令でゼロ度、つまり傾き無しを指定したい時に、
225度、つまり左上の方角に対しての計算をして欲しいようにするために、
225という数値を決め打ちしていたんだと思います。

795名無しさん:2015/09/08(火) 19:04:13 ID:fq./BWcc
8という数値は、16ドットの半分、8ドットのことで、
「SQR(2)」は、正方形の対角線の長さを計算することに関係があるのだと
google先生が示してくれたので、8*8ドット分の斜めの距離に関することなのでしょう。
これを合わせると、

『中心から見て、原点(角度ゼロの場合は左上)への、角度と距離』を
求める計算式だと言える。
こう結論付けて良いと思います。・・・どうでしょうかね? A(^^;;;

そして「描いた円とスプライトの中心が微妙にズレているのは何故か?」
という疑問ですが、

(1)、とくに理由は無い。あくまでサンプルだから、だいたいで良いだろう。
(2)、人物の足元が円周に触れるようにした。
このあたりを考えてみました。
しかし、このプログラムは「回転軸を中心にする」のが目的なので、
2の理由は無理があります。やはり1か、あるいは
別の目的で作ったプログラムを流用した結果ゴミが残ったとか、
typoや校正ミス/印刷ミスの類なんじゃないでしょうか。
『だって、プチコンの書籍だし。』
↑これで通ってしまう状況・・・。編集者は反省が足りない。

このプログラムの意図を考えると、変数XとYで指定した位置に、
スプライトの中心が来るようにしているはずなので、
「左隅座標に表示される」というのは、ちょっと違うように感じますよ。
でも、使う言葉のチョイスが違っただけで、意図や言いたいことは
違ってないと思うので、問題ないですよね。

796名無しさん:2015/09/08(火) 19:15:18 ID:fq./BWcc
ぎゃあ最初のプログラムでGPSET忘れた

797名無しさん:2015/09/12(土) 23:03:00 ID:OcC0RsXo
初心者です。
アクションゲームを作りたいのですが、BGのデザインをこだわりたくてマリオのはてなブロックみたいに定義番号を変えるアニメーションは実現可能ですか?
可能ならやり方を教えていただけると幸いです。

798名無しさん:2015/09/17(木) 12:49:34 ID:kD3qX4NU
実現可能です。
最もよく使われるであろう方法は、
「グラフィックページ側を書き換える」方法です。
この方法の利点は2つあり、
画面上にはてなブロックがいくつ存在していようとも
1つの処理だけでアニメーションできることと、
当たり判定としてBGタイルの番号を利用している時に
それがコロコロ変わらないのということです。

以下は、特定のBGタイルが
アニメーションパターンとして「ABC」を表示する例を挙げます。

BGPUT 0,9,9,1 'BGタイル定義番号1番を表示
A=1 'アニメーションパターン位置の変数
@LOOP
 GPAGE 0,5 'BGタイル用グラフィックページを操作
 GCOPY A*16,32,A*16+15,47,16,0,1 'BGタイル定義番号1番の画像を書き換える
 INC A
 IF A>3 THEN A=1
 WAIT 15
GOTO @LOOP

799名無しさん:2015/09/17(木) 15:17:44 ID:OcC0RsXo
http://jbbs.shitaraba.net/bbs/lite/read.cgi/computer/43199/1345877567/798ぬおーー!!!
ありがとうございます!
2ヶ月文の悩みを解決しました。
僕が考えていたことはそのブロックをおいた座標を記録してそこにいちいちBGputすることだったのでそんな簡単なやり方があるだなんて感動しました!
ありがとうございます!

800名無しさん:2015/09/17(木) 15:18:30 ID:OcC0RsXo
http://jbbs.shitaraba.net/bbs/lite/read.cgi/computer/43199/1345877567/798ぬおーー!!!
ありがとうございます!
2ヶ月文の悩みを解決しました。
僕が考えていたことはそのブロックをおいた座標を記録してそこにいちいちBGputすることだったのでそんな簡単なやり方があるだなんて感動しました!
ありがとうございます!

801名無しさん:2015/09/22(火) 00:46:19 ID:kAQHhSO2
武器を振って攻撃するアクションゲームを作っています。
武器のスプライトの中心を柄の方にして、SPANIMで回転させて振っているように見せています。
当たりをつける段になって、SPCOLの設定が回転についてこないことを知り、途方にくれています。
どなたか、SPCOLが回転についてくるようになる方法、または当たりのつけ方の参考になるものを教えてください。
よろしくお願いします。

802名無しさん:2015/09/22(火) 20:52:26 ID:dJGoKMHI
https://miiverse.nintendo.net/posts/AYIHAAAEAADHVHhljo9Opw
↑これが参考になると思います。

・・・と言うか、私の考えでは、
当たり判定が厳密に剣の軌跡に沿って発生する必要は無いと思います。
剣が移動する円弧の見た目よりも広い範囲の
四角形型の当たり判定でいいじゃん、て。
当たり判定がスプライトの回転の影響を受け ない ことを
逆に利用したテクニックと言えなくもない? かも。

当然、「それこそが、このゲームのキモなんだよ!」と言う場合もあるでしょうけどね。
↓こんな動作サンプルも作ってみました。

SPSET 0,2244 '武器のスプライト
SPSCALE 0,4,4
SPOFS 0,50,99

FOR I=1 TO 3
 SPSET I,2347 '武器の当たり判定用スプライト。32番など透明の画像で使う。
 SPCOL I
 SPLINK I,0
 SPOFS I,0,-I*4
NEXT

SPSET 5,0 '試し切りスプライト
SPCOL 5
SPOFS 5,80,80

@LOOP
 VSYNC
 IF BUTTON(2)==#A && !SPCHK(0) THEN
  SPANIM 0,"R",-10,90,-10,0
 ENDIF
 IF SPHITSP(5)!=-1 THEN BEEP
GOTO @LOOP

803名無しさん:2015/09/22(火) 22:45:27 ID:kAQHhSO2
>>802
おおお、サンプルを使わせてもらえば解決しそうです。
これで先に進めます。
どうもありがとうございました!

804名無しさん:2015/09/23(水) 14:01:13 ID:OcC0RsXo
BGSCREEN命令でレイヤー2や3を指定したときに
out of range(範囲外の数値を指定した
が出ます。しかし、他のプログラムでBGSCREEN命令でレイヤー2や3を指定したら、errorは起こりませんでした。
BGのレイヤー2や3を指定すると範囲外の数値になる条件を教えて下さい。

805名無しさん:2015/09/24(木) 00:14:15 ID:dJGoKMHI
XSCREEN で上画面と下画面にあるBGレイヤーの数を変更しているからでしょう。
下画面のBGレイヤー番号もゼロ番から始まるのですが、
上下画面 関係なく0から3までの通し番号だと勘違いしている人を見かけます。

XSCREEN 2,c,2
DISPLAY 0
BGSCREEN 0,w,h
BGSCREEN 1,w,h
DISPLAY 1
BGSCREEN 2,w,h
BGSCREEN 3,w,h

↑勘違いの例
最後の2行はそれぞれレイヤー0番と1番を指定しないといけません。

(BGSCREENで幅や高さゼロ指定できないんだ、知らなかった)

806名無しさん:2015/09/24(木) 07:01:55 ID:OcC0RsXo
ありがとうございます!
解決しました!
番号を0から3まで上下共通と勘違いしていました。

807YUUKI:2015/09/28(月) 17:52:01 ID:XQK4O8Co
上から見た視点の運転シュミレーションゲームを作ってますが。

前後移動は出来ましたが、右折、左折が出来ません。
どなたか、教えてください。

808名無しさん:2015/09/28(月) 18:28:21 ID:dJGoKMHI
BGを回転させるということですか?
説明が短すぎて、目標がイメージしづらいですね。

より適切なアドバイスをするために、
前後移動まで出来ている、いまのプログラムを見せてもらえれば
良いと思うのですが、いかがですか。

809YUUKI:2015/09/28(月) 18:49:01 ID:XQK4O8Co
プログラムを写すのはちょっと、長くって、大変なので、出来るだけ説明します。

車(スプライト)を操作するんですが、Aボタンが押されたら、変数Yの値を引いて
Bボタンが押されたら変数Yの値を足して

SPOFS 1,x,y

という感じです。

それとも、公開キーをのせた方が良いですか?

810名無しさん:2015/09/28(月) 20:23:52 ID:dJGoKMHI
「運転シミュレーション」と言うからには、
右折や左折と言っても
90度カクッと曲がるようなものではないと思います。
その場合は、車の動きを、

「速度と角度」という考え方をすると良いと思います。

アクセルを踏むと速度が増え、
ハンドルを回すと角度が変わる。

作るプログラムとしては、例えば、
Aボタンを押している間だけ、速度の変数が増加して(上限あり)
速度がゼロより多い場合だけ、
角度の変数が、スライドパッドの左右に応じて変化する。
そして、角度に従った方向に、速度に従った分だけ移動する、
というような手順になると思います。

「角度と速度」と言うと・・・、
三角関数を使うことを最初に思い浮かべます。
三角関数を使ってみてはいかがですか。

参考になるかどうか、
http://dam edam epg3q.web.fc2.com/pettitcom3_1g.html
↑タイトル画面ではBGを回転させずスプライトを回転させる、
ゲーム本編ではBGを回転させてスプライトは回転させない、という
2種類の表現方法がどちらも含まれて居ます。

811名無しさん:2015/09/28(月) 20:24:51 ID:dJGoKMHI
NGワードが含まれていると言われてしまったので、
URLは修正してください。

812YUUKI:2015/09/28(月) 21:03:40 ID:XQK4O8Co
すいません。

三角関数はよくわかりません。

もう少し分かりやすくお願いします。

何度もすいません

813名無しさん:2015/09/28(月) 21:25:08 ID:dJGoKMHI
BGは動かないままスプライトだけが動くもの、っぽかったので、
最適なサンプルとして、

100円ショップにも売ってるような、
有線のラジコンおもちゃを再現した
プチコン3号のプログラムがあったので

紹介しようと思って探し回ったが、どうしても見つからない。
仕方が無いので次点として、
https://miiverse.nintendo.net/posts/AYIHAAAEAAASVZKbJYEz9A
↑これを紹介しておきます。
これもちゃんと参考になりますので。

814未来人A(\⌒∀⌒/):2015/10/03(土) 15:43:05 ID:z5FNY/nU
今、パチンコゲームを作ってるのですが、玉の動きを再現するのが難しいです。

玉が釘に当たったときに、どんな風に玉を動かせばいいと思いますか?

815YUUKI:2015/10/03(土) 15:44:58 ID:z5FNY/nU
皆さん、ありがとうございました。

無事、動かすことが出来ました

816名無しさん:2015/10/04(日) 05:12:43 ID:VtMwAtH2
>>814
プチコンmkIIでパチンコを作った方がいらっしゃいますので、
それを参考になさってみてはいかがでしょう。
http://wiki.hosiken.jp/petc/?Toukou%2FPACHICOM!

もしプチコンmkIIを持っていなくてもPCがあるなら
http://micutil.com/ptcutilities/top.html
このソフトを使用してQRコードからソースコードを見れます。

817YUUKI:2015/10/04(日) 15:14:54 ID:z5FNY/nU
すいません。

PCもmkllも持っていません。

818名無しさん:2015/10/05(月) 17:48:49 ID:VtMwAtH2
「CHRED on Android」というアプリで
QRコードからソースコードが読めるらしいですよ。

>>815で解決済みだったようですから、いまさらですね

819きりん:2015/10/10(土) 02:13:55 ID:D1UGPntE
hspをやっていたので、基本はだいたいおさえているとおもいます。
プチコンにきょうみをもち、
いまこうして制作しているわけですが、フラッピーバードみたいなのを作ってみようとおもい、ジャンプのシステムや、スプライト、bg、スクロールなどと、ヘルプや説明書をたよりにして、だいぶ形になってはきたのですが、
さて、そろそろ敵作るかと思ったときつまずきました。
ステージごとに敵の情報読み込んだら楽だなと思ったんですが、どうすればいいのでしょう?
サブルーチン使ってそれからどうすれば?
移動はしないつもりなので、二次元配列使おうと思ったのですが、代入のしかたがよくわかりませんし、もし、それよりもよい方法があるなら、教えてください。
あと、スプライトのアニメもよくわかりません。

820名無しさん:2015/10/10(土) 12:25:15 ID:VtMwAtH2
「フラッピーバード」とやらを知らない人でも回答しやすいように、
もう少し質問の内容を分かりやすく書いて欲しいと思っています。

具体的に、敵の何について、つまづいているのですか?

821きりん:2015/10/10(土) 22:03:11 ID:D1UGPntE
今のところ、『かわさなければいけない迫ってくる壁』は、一列に配置するとき、乱数でどこかに穴を開けているのですが、

■←みたいな状態。




でも、難易度があがってきたら、

□■□□□□□
■□□□■□■
□□□■□□□
■■■□□□■

これだけじゃ、まったくどんな感じかわからないと思うので、一応見せられるようにはなったものを投稿しておきます。

みたいな感じにしたいんですが、
皆さんは、こういう敵の情報(位置、たまの発射間隔とか)はどのように扱っているかが知りたいのです。

822名無しさん:2015/10/11(日) 00:03:07 ID:VtMwAtH2
「投稿しておきます。」が、どこに投稿されたのか分からなかったので
質問の要点を想像で補って答えます。違うと思えば追加で質問してください。

■強制スクロールゲームで、敵の出現する位置の管理方法。
最初から入っているサンプルゲームの GAME4SHOOTER では、
プログラムの末尾に DATA として、
文字列化した地形データと共に、敵の出現位置も混ぜて記載しています。
また、GAME3JUMP では、BGの地形データを記録した DAT ファイルの中で、
やはり地形データに混ぜて、敵の出現位置を記録しています。

■敵の種類毎に、放つ弾の種類を変えるなどの個性を付ける方法。
GAME4SHOOTER では、400行目以降あたりで、
それぞれの敵や敵の放った弾の、動き方や行動をプログラムで書いています。
これを呼び出すのは、368行目でスプライトの内部変数から取得した数値を元に
375行目でJMPTBL$[]にあらかじめ用意しておいたラベル名でGOSUBしています。
つまり、敵やミサイルのスプライトを作成する時に、スプライトの内部変数に
敵の個性ごとに付けた番号を記録しておき、あとでその数値を利用して
それぞれの個性を表現するためのプログラムを、呼び出し分けています。

823きりん:2015/10/12(月) 21:13:23 ID:D1UGPntE
そうなんですね。
でも、そうなると大変になってなかなかrpgやシューティングにはてがでません。
あ、ちなみに投稿プログラムのぺーじのjumpbirdって言うやつです。
mapがいるとなると、急にめんどくさくなり、挫折しちゃうんですが、それだけの熱意がないなら作るな!っていうことなんですね。
勉強になりました。
今度は作ってるときにあらためて質問させてもらうかもしれませんが、
その時はお願いします。

824名無しさん:2015/10/13(火) 00:51:28 ID:VtMwAtH2
もしかして、狭い洞窟を進むみたいな感じにしたかったのかな。
だんだん道幅が狭くなっていく自動車ゲームとか よくあるけど、
それを応用すれば、
プログラムで自動生成する方式でも出来そうですけどね。
ま、それはまた質問された時ですね。

825名無しさん:2015/10/13(火) 23:36:02 ID:OcC0RsXo
似たような質問があったのですが僕にはそしゃくが不可能でした。
アクションゲームでbgをスクロールさせて特定の位置に来たら敵が現れるみたいなの作りたいです。
長めのステージにしたいので文字列であまりやりたくないのですが、よい方法を教えて下さい。

826名無しさん:2015/10/14(水) 23:56:28 ID:VtMwAtH2
最初から入っているサンプルの GAME3JUMP のプログラムでは、
文字列ではなくBGデータの中に、敵の情報を埋め込んでいるので、
それを利用して、敵の出現する位置と敵の種類を決めています。

681行目から、BGを全マス検査して、
684行目で、敵を示す特定のデータかどうか判別して
685行目で敵の出現用変数に登録しています。
BGをスクロールさせる時に、370行目からの処理で、
その変数を確認し、敵を出現させています。
(このプログラム、敵のスプライトの消去はしてないんだな・・・)

要点は、BGのスクロールの位置と、敵が出現するための位置の
2つを、敵を出現させる条件に使うということですね。

その他の方法としては、
強制スクロールなら、経過時間を使ってもいいですね。
でも大抵の場合、BGもスクロールさせているでしょうから
それを使っても同じですけど。

827名無しさん:2015/10/15(木) 21:15:21 ID:OcC0RsXo
ありがとうございます
横着してbgのスクリーンのマスをすべてチェックするという発想はありませんでした

828匿名:2015/10/19(月) 11:35:35 ID:g8GEB.wg
パチンコゲームを作ってるのですが、玉を50個とか、たくさんつかいたいです。

SPCOLやSPHITSPなど50こ分もやると大変です。

何かいい方法はありませんか?


いい方法はありませんか?

829名無しさん:2015/10/22(木) 12:27:36 ID:VtMwAtH2
「大変」が何を指しているのかにもよると思います。

SPCOLはSPSET直後に各1回やるだけだと思うのですが、
毎フレーム、角度ごとにSPCOLして当たり判定、とかしているのでしょうか。

処理が重いことを言っているのなら、
ソースコードを晒して、習熟者から改善案が来ることを期待する、とかかな。

830プチコン歴1年なのに初心者:2015/10/24(土) 00:33:33 ID:UGEbzZw2
シューティング作ってますが、常にスプライトが動くようにアニメーションの設定がしたいのですが分かりません…

831名無しさん:2015/10/24(土) 02:54:14 ID:VtMwAtH2
とりあえずSPANIMの最後に,0を書けば動かし続けられますが。
SPSET 0,0
SPANIM 0,"XY",-99,99,99,-99,0,0,0
それではできない動きをさせたいのですか。

832名無しさん:2015/10/26(月) 19:58:33 ID:OcC0RsXo
MMLで楽譜の始まりにあるキーとか調とか言うものの定めかたを詳しく教えて下さい

833あまさとしおん ◆vCvQmsUz9g:2015/10/26(月) 20:57:53 ID:m6Uo1s2g
>>832
定める必要はないのではないなぁ
すでに打ち込んだものを高くしたり低くしたい、という意味なら@Dで±200セント程度まで動かせるよ

834あまさとしおん ◆vCvQmsUz9g:2015/10/26(月) 21:01:41 ID:m6Uo1s2g
楽譜の最初に「ミ」のところにシャープがついてたとすると、

こんな感じ
CE#DFE#DDE#

それぞれの「ミ」にシャープを付ければいいだけ

さっきの書き込み、誤って最初の文が2重否定になってるけど「定める必要はないのでは」っていう意味です。

835名無しさん:2015/10/27(火) 17:52:31 ID:OcC0RsXo
ありがとうございます
では#が2つ最初についていたら@Dを何にすればいいですか?

836プチ:2015/10/27(火) 18:31:22 ID:g8GEB.wg
プチコンでメダルゲームを作っています。(メダルを投入してメダルを落とすゲーム)

上から見た感じの視点なのですが、メダルにメダルが当たったときや、メダルに壁が当たったときの動きはどのようにすれば良いですか?

837名無しさん:2015/10/28(水) 13:47:28 ID:VtMwAtH2
そういうメダルゲームの性格上、四角形しか設定できないSPCOLでやるのは
ゲームとして我慢できないほど不自然になるだろうと思うので、
https://miiverse.nintendo.net/posts/AYIHAAAEAADHVHhljo9Opw
↑これを使うなどして、円形の当たり判定を自前で行うようにするのが第一歩だと思います。

当たり判定の問題は解決済みだよ、質問中の「動き」に当たり判定は含まれていないよ、
という場合は、そのあたりの説明を書き加えて質問を続けてくださると良いと思います。

838名無しさん:2015/10/29(木) 18:19:13 ID:OcC0RsXo
MMLについてです
ありがとうございます解決しました

839名無しさん:2015/11/01(日) 15:49:47 ID:OcC0RsXo
疑似3Dゲームを作るに当たって視点からの距離と見える大きさは反比例するのですが、円を表現する際には楕円形のようになります。では、正確な計算をするにはどうやればよいですか?

840名無しさん:2015/11/01(日) 21:51:05 ID:0rZ7/vJU
>>839
正方形(見た目は台形)に内接する円(見た目は楕円)を描けばいいだけでは?
つまり、パースがついた正方形が描ければパースのついた円は描けるってこと。

841名無しさん:2015/11/02(月) 19:41:14 ID:OcC0RsXo
ありがとうございます。しかし、横長の楕円を横線で区切ったとするとその区切られてできた2つは対称になるとは思えないのですが…

842名無しさん:2015/11/02(月) 20:13:55 ID:0rZ7/vJU
>>841
なぜ、対象になるように分割してしまうの?

ちゃんと正方形(見た目は台形)に内接する円(見た目は楕円)を描いてみて。
そしてそれに区切り線を実際に入れてみれば言っている意味が分かると思う。

843名無しさん:2015/11/02(月) 21:57:07 ID:OcC0RsXo
ありがとうございます。
やってみます

844名無しさん:2015/11/02(月) 21:59:16 ID:OcC0RsXo
今頃すみません
文が間違っていました
×対称になるとは思えないですが
○対称になってしまうと思いますが

845名無しさん:2015/11/10(火) 20:38:42 ID:tabn7mZk
http://www.geocities.jp/obono_kun/storage/petitcom_util/ptcm3_qpsk.html の使い方が全く分かりません。
txtファイル(UTF-8,UTF-16)でやってもpngファイルでやってもプチコンの方で内容が表示されません。
誰か助けてください。

846名無しさん:2015/11/18(水) 23:23:49 ID:tZdnOVW6
サウンドに関する質問です。
現在シューティングゲームを作っているのですが、
mmlで作成した効果音と、同様にmmlで作ったbgmを一緒に鳴らすにはどうしたら良いのでしょう?

847名無しさん:2015/11/20(金) 07:37:15 ID:FRQ2BnCA
>>845
そのツールの使用はあきらめて、同種の別のツールを使うと良いと思います。
絶対にそのツールを使わなければならない理由があれば別ですが・・・無いですよね

>>846
BGMPLAY命令で「トラック番号」に別の数値を指定すれば良いと思います。

@ONGAKU
DATA "音楽のMML"
DATA 0
@KOUKAON
DATA "効果音のMML"
DATA 0
BGMSETD 128,@ONGAKU
BGMSETD 200,@KOUKAON
BGMPLAY 1,128 '音楽を鳴らす
BGMPLAY 2,200 '効果音も鳴らす

848名無しさん:2015/11/20(金) 20:58:55 ID:twvYpPAQ
>>847
すみません。
分かると思いますが、当然あるんです。

849名無しさん:2015/11/21(土) 11:58:45 ID:pJsFjZ1Y
w

850nacla:2015/11/28(土) 16:37:03 ID:bU3HEYbI
すみません。衝突判定について質問です。
変数=SPHITSP(管理番号,相手管理番号)で変数には何が入るですか?

851名無しさん:2015/11/28(土) 17:55:15 ID:FRQ2BnCA
>>848
ふーむ、全く想像つかないです。

>>850
「戻り FALSE=衝突なし、TRUE=衝突」
と書かれていますよ。

852nacla:2015/11/28(土) 19:01:58 ID:bU3HEYbI
あざす!

853名無しさん:2015/11/29(日) 14:13:20 ID:bU3HEYbI
SPCOLの範囲指定で、幅と高さとは何ですか?

854名無しさん:2015/11/30(月) 07:22:34 ID:twvYpPAQ
http://myu314.org/studyroom/product/pisend2/ は再生できないし

855名無しさん:2015/12/01(火) 20:32:14 ID:FRQ2BnCA
>>853
「判定領域の幅と高さ」と説明されています。
□□□□□□□□
□□□□□□□□
□□□■■■■□
□□□■■■■□
□□□■■■■□
□□□□□□□□
全体の大きさが8x6ピクセルのスプライトがあったとして、
その画像のうちの、やや右下の一部分だけを(上図■の部分)
スプライトの当たり判定命令に反応させたい場合は、
SPCOL i,3,2,4,3
のように書きます。
後ろの2つの数字が、■の部分が、横に4つ、縦に3つの大きさの範囲だ
ということを指しています。
(※書式では省略できないとなっている引数も省略できるみたいです?)
逆に、幅と高さの数値を大きくすると
見た目の表示よりもずっと広い範囲に当たり判定の領域がある
スプライトなんてのも作れます。

もしかして、このような質問が出るのは、
範囲の「左上と右下の位置を指定する」タイプの命令と、
範囲の「左上の位置と幅と高さを指定する」タイプの命令があって
統一されていないと感じて混乱してしまうのかもしれませんね。


>>854
そのページ内で紹介されている、別のツールを使ってみてはいかがですか。

そもそも、音を使ってデータを転送するツール類は、基本的に
「分かる人だけ使ってくれ。分からない人は諦めろ。」という性質があります。
超簡単にできるようになると、任天堂から潰されるかも、と心配するからです。

自分には、公開されているツールがどれも使えなかった、という場合には、
あるいは、自分でツールを作ってしまった方が早いかも知れませんね。
そうすれば確実に、自分が使いこなせるツールが出来上がりますよ。

856名無しさん:2015/12/27(日) 18:52:32 ID:OcC0RsXo
立方体の疑似3Dのようなものを描きたいのですが奥行きの長さの計算方法を誰かお願いします

857名無しさん:2016/01/06(水) 18:12:09 ID:7hKCAkBE
これから、PCでやってて、面白かったけど、PCが古くてガクガクになって出来ないゲームをプチコンに移植したいのですが、わからないことがあるたんびに質問すると、思うので、返事をしていただけると、嬉しいです。

858名無しさん:2016/01/10(日) 12:35:23 ID:qoVZ2tUo
プチコン&プログラム初心者です(^^;)

簡単なテキスト型対戦ゲームを作りたくて、各キャラクターの攻撃力、防御力というイメージの変数を設定しようとしているんですが、

キャラクター1
KOUGEKI=100
BOUGYO=80

キャラクター2
KOUGEKI=90
BOUGYO=70

KEKKA=KOUGEKI-BOUGYO


…あれ?これじゃキャラクター1とキャラクター2のKOUGEKIとBOUGYOの変数の名前がかぶっちゃってる…

キャラクター1
KOUGEKI1=100
BOUGYO1=90

キャラクター2
KOUGEKI2=90
BOUGYO2=70

みたいにしなくちゃ、変数の差別化がはかれないのか…


でもこれじゃキャラクターの数が増えると

キャラクター211
KOUGEKI211=89
BOUGYO211=76


キャラクター1とキャラクター211の対戦
KOUGEKI1-BOUGYO211

キャラクター53とキャラクター572の対戦
KOUGEKI53-BOUGYO572

とか、めんどくさいことになってきそう。


どれだけキャラクターが増えても、キャラクターごとの変数を記録して、対戦させるたびに記録を呼び出して、どの計算も

KOUGEKI-BOUGYO

でまとめられないかな…


と、思ったんですが…そういう方法ってありますか?

うまく伝わるかなぁ…

859名無しさん:2016/01/10(日) 23:17:17 ID:KU4.qz9Y
今すぐヤレる出会い系ランキング
http://urx.mobi/qgJu

860名無しさん:2016/01/13(水) 01:21:53 ID:gW1Zusqo
夜分に失礼します。
BGを用いたラスター処理は可能なのでしょか。
可能ならどのようなフローチャートになりますか。

861名無しさん:2016/01/13(水) 01:26:52 ID:gW1Zusqo
>>858
配列変数を使用してみてはいかがでしょうか。
配列変数を用いればfor文等を駆使することである程度変数をコントロールできるので便利です。

862858:2016/01/13(水) 07:44:51 ID:qoVZ2tUo
>>861

回答ありがとうございます。

回答がもらえるまでの間に自分なりに調べて配列変数のDIMやVARといった命令が、突破口になるかもしれないというところには行き着いたのですが、

現状は『その使い方はどうするんだろう?』というところで止まっています
( ̄〜 ̄;)

配列変数を宣言…?

KOUGEKI1=90
KOUGEKI2=80

のように指定するには…?


命令があることがわかっても使い方がわからないとダメですね(^^;)


使い方の例などを教えてもらえるとうれしいです。

863Extra:2016/01/23(土) 09:01:04 ID:jRYQHqCo
画面内のスプライトが1つだけになったらゲーム終了見たいなことはできますか?

864だれかさん:2016/02/01(月) 18:11:58 ID:18DaNJiM
あの…プチコンでAI…つまり人工知能は作れるのでしょうか…出来ればプログラム教えて下さい

865名無しさん:2016/02/14(日) 18:02:28 ID:F9m7NQ5.
人工知能?
あなたが思ってる定義によりますね。
やれと言われたことに対して、何かやるとプログラムさせたのは、人工知能か?と言われれば。かんけいないとはいいがたいし

学習するプログラムなんて、将棋ですらスーパーコンピューター使ってんのに、ロボットにのせるとなると、何年後の話ってなるし…
そういうことです。プチコンで作った人工知能をどうしたいのかによる。
シリてきなおしゃべりプログラムを作るとか。

人工知能っていう言葉はとても幅広いので、そこらへんはwikiでみて!みたいな感じです。

不可能はないと思いますよ

866名無しさん:2016/02/14(日) 18:11:02 ID:F9m7NQ5.
ドラクエみたいなマップの表示についてです。(RPGの背景です。)
マップ作成ツールなどは、標準でもついておりますが、それを読み込んだとして、
山のチップが前にあるから前には進めない
みたいな判断は出来ないと思っていますが、あってますか?

その場合は、どうすれば良いのでしょうか?
また別に配列変数に0や1いれて、0は行ける場所だから進める。みたいなことを

867名無しさん:2016/02/14(日) 18:13:29 ID:F9m7NQ5.
ドラクエみたいなマップの表示についてです。(RPGの背景です。)
マップ作成ツールなどは、標準でもついておりますが、それを読み込んだとして、
山のチップが前にあるから前には進めない
みたいな判断は出来ないと思っていますが、あってますか?

その場合は、どうすれば良いのでしょうか?
また別に配列変数に0や1いれて、0は行ける場所だから進める。みたいなことをやっていくのでしょうか?
それとも、自分でマップエディターから作らなければいけないのでしょうか?
(置いたチップを判断して、配列変数に組み込むみたいな)
いい方法があれば教えてください!

868名無しさん:2016/03/12(土) 12:25:18 ID:1O7z83/.
ナンプレの解答プログラムについて

別サイトで紹介されている公開キーでダウンロードしてみましたが起動されませんでした。
ファイル名:FKN_NUMPLE
容量:33072(本体)+1828(セーブデータ)=34900
公開キー:WKDYN334
中身を見てもどこが原因かわかりません。
どなたかわかる方いらっしゃいますか?

869名無しさん:2016/03/12(土) 22:32:01 ID:NTLsHFLw
GLINEの命令をGPSETで再現しようと思ったのですがどうにも一致しません
どなたかどこが間違っているのか教えてください

SX=10:SY=50
GX=380:GY=200

A=(GY-SY)/(GX-SX)
B=SY-A*SX

FOR X=SX TO GX
Y=A*X+B
GPSET X,Y,#WHITE
NEXT

GLINE SX,SY,GX,GY,#RED

870名無しさん:2016/03/12(土) 22:44:13 ID:NTLsHFLw
>>867
BGGET命令なら指定した座標に設置されているBGの番号がわかるので
番号が山のものなら進めない、道のものなら
進めるみたいにすればいいんじゃないでしょうか

871名無しさん:2016/03/14(月) 19:19:07 ID:UmB/XXIw
ナンプレの件
1121行目をSPCHRじゃなくSPSETにして次の行に
SPOFS SUBX+SUBY*9,TCH_PXY(SUBX)+5,TCH_PXY(SUBY)+5 を追加でどうでしょう?

872名無しさん:2016/03/15(火) 00:13:58 ID:qo4LuNY6
>>871
起動しました!
本当にありがとうございます。見ておられる方がいらっしゃらないと思ってたのでとても助かりました。

873名無しさん:2016/03/15(火) 05:06:55 ID:hsej5goA
社畜嫌いなワイが、仕事効率化して定時帰り実践した結果wwwwwwwww
http://bit.ly/1R5Aroe

874名無しさん:2016/03/18(金) 14:13:50 ID:7B2H3Ggc
今RPGを作っていますがBGとスプライトの当たり判定が上手くいきません。
スプライトが中心で背景を動かすパターンです。
今は
CX=FLOOR((スプライトのX座標+BGのX座標)/16)
CY=FLOOR((スプライトのY座標+BGのY座標)/16)
CH=BGGET(0,CX,CY)

みたいな感じでやっていますが上手くいきません。上に当たって上の移動量が0の時,横方向に移動出来ない等です。
分かる方教えてください。

875名無しさん:2016/03/18(金) 14:15:16 ID:7B2H3Ggc
今RPGを作っていますがBGとスプライトの当たり判定が上手くいきません。
スプライトが中心で背景を動かすパターンです。
今は
CX=FLOOR((スプライトのX座標+BGのX座標)/16)
CY=FLOOR((スプライトのY座標+BGのY座標)/16)
CH=BGGET(0,CX,CY)

みたいな感じでやっていますが上手くいきません。上に当たって上の移動量が0の時,横方向に移動出来ない等です。
分かる方教えてください。

876名無しさん:2016/03/18(金) 22:42:24 ID:UmB/XXIw
情報が少ないのでなんとも言えないですが進行方向の数値が入らないからなのでは?

877名無しさん:2016/03/20(日) 13:40:43 ID:zNDP5G8c
【画像あり】カキ(生食用)をフライにして食った結果wwww
http://bit.ly/1R5Abpa

878名無しさん:2016/03/21(月) 16:55:57 ID:hw6fYFhM
アクションゲームを作りたいんですが
プレイヤー(SP)とブロック(BG)の衝突がうまくいきません

毎ループ、プレイヤーの四隅の座標でBGGETを
使ってプレイヤーとブロックが重なっているかどうか調べているんですが
そのあとにどうプレイヤーの座標を
ブロックと接触する位置に移動させればいいか
わかりません
どうすればいいんでしょうか

879名無しさん:2016/03/21(月) 20:02:10 ID:UmB/XXIw
SPの位置+移動量でBGGETして障害物があれば移動量を0にすればいいのではないかと思います

880名無しさん:2016/03/21(月) 20:32:07 ID:hw6fYFhM
>>879
それだと移動量が1を越えるとプレイヤーとブロックの間に
入り込めない隙間が発生してしまうんです

プレイヤーとブロックが重なったときに
プレイヤーを押し出してブロックと密着
させられるようにしたいです

881名無しさん:2016/03/24(木) 18:40:23 ID:UmB/XXIw
繰り返し処理でやってみるとか
ちょっとサンプル作ってみました。SPJ3ND

882名無しさん:2016/03/25(金) 11:25:59 ID:Dct/03r.
RPGを作っているのですが自分のキャラが他のキャラにあたった時どうしても重なってしまいます
ドラクエやポケモンのように4方向どこからでもキャラクター同士が重なり合わないようにするにはどうすればよいでしょうか?

現時点では自分のキャラが他のキャラに当たる→そのまますり抜けるといったところです

883名無しさん:2016/03/25(金) 17:37:45 ID:UmB/XXIw
詳しい内容が分からないので思いつくことを書きます。

SPHITSPで衝突時に移動量をマイナスする。
全キャラの座標が自分の移動先にいるかを調べる。
キャラのいる場所に画像ないBGなどを配置してBGGETで調べる。

いま思いつくのはこれくらいです。

884名無しさん:2016/03/25(金) 18:06:57 ID:Dct/03r.
>>883
うまくいきました!SPHITSPでうまくいきました!

885名無しさん:2016/03/25(金) 18:11:44 ID:Dct/03r.
すみませんうまく行ったと思ったのですが上方向以外から進むと挙動がおかしくなります
全キャラの座標が自分の移動先にいるかを調べる。
キャラのいる場所に画像ないBGなどを配置してBGGETで調べる。
この2つだとどちらのほうが簡単でしょうか?

886名無しさん:2016/03/25(金) 18:35:26 ID:UmB/XXIw
実際に打ったわけではないので予想ですが

移動が1ドット単位ならキャラの座標を調べる
移動が16ドット単位ならBGの配置

が良いのではないでしょうか

887名無しさん:2016/03/25(金) 18:59:07 ID:Dct/03r.
多分1ドットのほうになります。キャラ座標を調べて移動しないようにするには
どう打てばよいでしょうか

888名無しさん:2016/03/25(金) 22:01:59 ID:UmB/XXIw
ちょっと粗いですがサンプル作りました。
DXXP34D

889名無しさん:2016/03/25(金) 22:21:20 ID:Dct/03r.
サンプルまで作ってくださりありがとうございます!

890名無しさん:2016/03/26(土) 01:27:26 ID:qBTpAIys
ワイ、友達に借りたPCをwin10にしてしまう
http://bit.ly/1R5AhgJ

891名無しさん:2016/03/26(土) 07:54:31 ID:Dct/03r.
スプライトで描画したキャラクターにAで話しかけるにはどうしたら良いでしょうか?

892名無しさん:2016/03/26(土) 08:23:15 ID:UmB/XXIw
移動時の判定を応用して、向いている方向の指定範囲内に居る場合に反応させればいいのではないでしょうか

893名無しさん:2016/03/26(土) 09:50:23 ID:Dct/03r.
ちとやってみます!

894名無しさん:2016/03/26(土) 10:29:07 ID:Dct/03r.
うーんやってみましたがうまく行きません...

895名無しさん:2016/03/26(土) 12:21:12 ID:UmB/XXIw
前回のサンプルに追加しました。
7328EXZF

896名無しさん:2016/03/26(土) 12:23:27 ID:Dct/03r.
わざわざ作ってくださったのですか!
感謝です!

897名無しさん:2016/03/27(日) 14:44:53 ID:Dct/03r.
BGに当たり判定をつけるにはどうすればいいでしょうか?
BGGETなどを使うのですか?よくわかんないです....。

898名無しさん:2016/03/27(日) 21:46:46 ID:UmB/XXIw
SPJ3ND
上のほうでも出しましたが、スプライト移動時のBGとの衝突サンプルです

899名無しさん:2016/03/28(月) 07:43:11 ID:Dct/03r.
BGの当たり判定までありがとうございます...!

900名無しさん:2016/03/29(火) 07:00:06 ID:Dct/03r.
特定の障害物にだけ当たると場所移動させるには、どうすればいいですか?

901名無しさん:2016/03/30(水) 18:58:45 ID:UmB/XXIw
スプライト表示の岩とかを押すっていう意味かな?

それともワープして自分が場所移動ってことかな?

905143 ◆aKB.iGjaO.:2016/04/16(土) 20:41:49 ID:dHZTaD76
質問です。プチコンの電子書籍って需要ありますか?返答お願いします。

906名無しさん:2016/04/16(土) 23:32:25 ID:UmB/XXIw
電子書籍は見たこと無いけど完成したら一度見てみようかな?

907ゆうき:2016/05/18(水) 17:59:19 ID:3NlfpdHg
助けてください。

久しぶりに起動してメダルプッシャーゲームを作ろうと思い、とりあえずスロットは出来たんですが、肝心の台が動いてコインを投入するとコインが押し出されてコインが落ちるという仕組みが出来ません。

出来れば、斜め上から見た視点にしたいのですがどうすれば良いのでしょうか?

教えてくださいませ

910143 ◆aKB.iGjaO.:2016/05/21(土) 18:23:34 ID:7htxd/bk
906>>すいません。挫折しましたorz

911さとき:2016/05/22(日) 06:57:44 ID:dl9tGZV6
すいませんが、コメントが打てないらしいです。626mhtが

912PGN:2016/05/24(火) 06:35:19 ID:dl9tGZV6
いつもありがとうございます。管理人さん。

頑張ってください。

913PGN:2016/05/24(火) 06:36:01 ID:dl9tGZV6
管理人っていつも何してる?

914Kensew:2016/10/23(日) 17:55:48 ID:F2vZrwKU
...

921Kensew:2016/11/06(日) 20:47:52 ID:QsADVqxc
3Dゲームってつくれますか?つくりたいんですが...

922名無しさん:2017/01/28(土) 15:59:13 ID:C2dvjbhE
IF B AND 16 THEN GOTO @����

@����
IF B AND 16 THEN GOTO @������
というプログラムを書くと、Aを押した時に@����ではなく@������に飛びます。
Aの入力が重複してるとミーバースで指摘されたのですが、治し方がわかりません
どうすればいいでしょうか

ミーバースで言われたのは、REPET:VSYNC:UNTIL !BUTTON()と書けと言われましたができませんでした

923名無しさん:2017/02/13(月) 19:28:19 ID:YsIyzpRA
IF B AND 16 THEN GOTO @������の
16の所を、Aボタン以外の数字に対応させれば良いかと。

924侍大将:2017/03/13(月) 08:30:20 ID:qthoZhYI
信オン(オンライン予定ではない。)見たいなゲームを作りたいのですが、プログラムの作り方が解らず仕舞いです。(大体の流れはイメージ出来てますが、プログラムに置き換えられず……)
(作りたいのは、RPGです。)

925侍大将:2017/03/14(火) 18:31:50 ID:qthoZhYI
>>1
プログラミング方法が分からないってだけで、貴方達は無視するんですね。
このソフトも、コーエーやソニーと一緒で見下す社員しか居ないんですね。

926名無しさん:2017/04/27(木) 07:19:05 ID:imEFnajc
>>925 一日程度返信来ないだけで文句言うな。

927iz猫:2017/05/19(金) 21:09:04 ID:/9Cq4e4I
rpgを作っているんですがセレクト画面を表示する方法が分かりません(泣)

928名無しさん:2017/06/22(木) 22:03:41 ID:OcC0RsXo
プチコン3号、bigについての質問です。
mmlについて、楽譜の一番左の#が4つあるホ長調などは、一つ一つの音に#をつけるしかないですか?それとも1つの命令によって表現できますか?

929名無しさん:2017/07/17(月) 23:27:40 ID:fh2glfWY
プチコン3号の「公開キーのプログラム」の中にあった「readme.txt」を読むにはどうしたらよいのでしょうか。

930名無しさん:2017/07/17(月) 23:31:44 ID:fh2glfWY
プチコン3号の公開キーでダウンロードしたファイルの中の「readme.txt」は、どうすれば読めるようになるのか教えてください。
プログラムの実行だと、smilebasicでsyntax errorになってしまいます。

931名無しさん:2017/07/18(火) 14:51:05 ID:oEkWuiBY
どのプログラムだろう?

932名無しさん:2017/08/19(土) 10:21:27 ID:uKq69sMw
>>930 エディタで見ればいいんじゃね?

933名無しさん:2017/08/24(木) 17:01:26 ID:uKq69sMw
>>928
”おんつく”を使えばいちいち変調を直打ちしなくて済むよ。
MMLのインポートも変調もできるよ。

934名無しさん:2017/08/25(金) 13:44:34 ID:sIpgb/iM
今格闘ゲームを作ろうとしてるんですがhpのゲージの表示がうまくできません どなたか教えてください

935名無しさん:2017/08/25(金) 13:45:10 ID:sIpgb/iM
今格闘ゲームを作ろうとしてるんですがhpのゲージの表示がうまくできません どなたか教えてください

936名無しさん:2017/08/25(金) 22:07:05 ID:uKq69sMw
>>934-935
gfillかspriteをつかってゲージ的にするのが簡単だと思うよ。hpで色なり幅なりを変えて。

937名無しさん:2017/12/09(土) 09:12:08 ID:O4dcAEOw
ループ前に、spのアニメーションを設定したんですけど、ループの中で、spchrを使って、定義番号を変えてまた命令を使ったら元の番号に戻したときspanim
が適用されません。改善方法ってありますか。

938名無しさん:2018/07/16(月) 16:09:07 ID:j0aNFNEA
http://pr4.work/g/kiyo

939名無しさん:2021/01/29(金) 20:57:07 ID:iS/TkkzA
ステージデータを別ファイルにしたいのですが、
1. 配列の中身をDATファイルとして保存する方法
2. テキストデータをPRGで読み込んでパースする方法
3. その他
どれが一般的なんでしょうか


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板