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

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

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(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板