Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
12 3 4 5 6 7 8 9 10 11 12 13
次のページ(過去)
返信[12]
親投稿
Q.プチコンでベーシックおぼえて役に立ちますか? A.役に立ちます。 80年代や90年代のパソコンでBASICでプログラム覚えた人は、ゲーム系やプログラムのお仕事してる人が多いです。 BASICはBASIC言語を勉強するだけじゃなく、他の言語でも使える「プログラムの作り方」も勉強できるので、お手ごろな開発環境(プチコン以外でもHSPやJavaScriptなどなど)があるなら、まずはなにかプログラムを作ってみて見るのがいいかも。 ちなみにBASICに出てくるIF判定、FOR繰り返し、文字操作、数学計算などは他のどの言語でもでてきます。 プチコンはゲームつくるために向いているので、ゲームを作ってみたいならまずはプチコンでBASICを覚えるのがいいかも。
1そうだね
プレイ済み
返信[11]
親投稿
初心者向けとしてまとめるならこんな感じ? ・DEFは関数定義で、関数とは何かを渡して計算結果を返す ・DEFの中はプライベート空間なので、変数宣言しても外部には影響しない ・DEFの中でグローバル変数は参照できる、ただし変数名はプライベート変数が優先される ・DEFでの計算結果は必ず返すこと、OUTであってもRETURNであっても ・DEFの中からDEFの外のラベル参照はしちゃいけない ・DEFに渡す値、返す値の型(整数、実数、文字列)はちゃんと意識すること、呼び方を間違えると予期しない動きをするのでちゃんと型を守ること GOSUBと何が違うの?と言われると、どっちも同じようなことができるけど、GOSUBが関数の考えがなかった昔からのなごりで、DEFの方がRND()とかと同じような呼び方が作れていろいろ楽。 ※厳密にはいろいろ細かいことあったりするけど、使う側の概念としてはこんな感じ?
0そうだね
プレイ済み
返信[4]
親投稿
いろいろプログラム勉強しながらだと思うので、それで動いていればそれが今は正解ですよ。 もっとプログラムなれてきたらGOTOじゃなくてWHILEとWEND、REPEATとUNTILでループして、GOTOをあんまり使わないようにすると、あとから見たときにプログラムが見やすくなるかも。 (GOTOだらけになると、プログラム追いかけるのも大変だし、気づかないところでバグを入れてしまったりすることがあるので)
0そうだね
プレイ済み
返信[2]
親投稿
「もういちどやる?」のあとのBUTTON命令ではプログラムは一時停止しないので、BUTTON命令とIFの判定で無限ループするようにすると動くかも。 プログラムでボタンの入力を待つ場合は基本的には無限ループの中でBUTTON関数でボタンの状態を取って処理をふりわけるようにします。 (プチコンで作られたゲームも無限ループ中にキャラ動かしたりして、ゲームオーバー条件になったら無限ループからぬけるようなつくりが多いです)
0そうだね
プレイ済み
返信[3]
親投稿
wikipediaの例だと 文字列 DAEBCBACBBBC は12文字でプチコンだと1文字16bitなので192bit これをハフマン符号化すると それぞれの文字の数から A=110, B=0, C=10, D=1110, E=1111 とハフマンツリーを作って、これを元の文字列にあてはめて 1110 110 1111 0 10 0 110 10 0 0 0 10 となって 25bit ハフマンツリーも一緒にデータとして持っておかないと元の文字列に変換できないので、符号化した25bitのデータと一緒に保存しておく必要があります(どのように保存するかはプログラムやデータ形式次第) おもいっきりバイト単位(8bit)のビット操作なので、プチコンだとビット操作はできてもバイト単位が扱いづらいので、ちょっといろいろ大変なのです。(整数型32bitに4バイト(4x8bit)持つのが一般的)
1そうだね
プレイ済み
返信[2]
親投稿
(MIKIさんのコードちゃんとみれてないので説明だけ) ハフマン符号化のアルゴリズムそのものはwikipediaにあるとおりで、 補足するなら「文章中に出てくる回数が多い文字(プチコンの1文字=16bit固定(UTF-16))を、可変ビット(文字の種類によって1bitから数bitに変化)に割り当てて、最初の文章より短くする」な感じです。 同じ文字が沢山繰り返されて1文字16bit使ってる文章があれば、その文字が1bitや2bitになればデータ量が少なくなるので圧縮できるという感じです。 可変bitに変換された結果は2進数のバイナリデータでしかなくて、 これを元の文章に戻すために、どの可変bitがどの文字に対応しているかの一覧をツリーにしたのがハフマンツリー 文字も画像データ1ドットも16bitや32bitのデータなので、同じように画像をハフマン符号化すると圧縮できるという仕組みです。
1そうだね
プレイ済み
返信[18]
親投稿
訂正と補足。 × 右3シフトするとは8で掛け算するのと同じなので ○ 左3シフトするとは8で掛け算するのと同じなので 右にNシフトは2のN乗で割り算 左にNシフトは2のN乗で掛け算になります AND は2進数でビット演算した結果、どちらも 1であるところが有効になります。 &HFFF8F8F8 AND &H00FF0000 が &H00F80000 になるのは &HFFF8F8F8 が2進数で 1111 1111 1111 1000 1111 1000 1111 1000 &H00FF0000 が2進数で 0000 0000 1111 1111 0000 0000 0000 0000 &H00F80000 が2進数で 0000 0000 1111 1000 0000 0000 0000 0000 で、どちらも 1 であるところが残ります。
1そうだね
プレイ済み
返信[17]
親投稿
BACKCOLORは単一の色を設定してるので、プチコン内部メモリに持っていて、それをOUT で返しているように推測してます。 SPCOLORも設定する色をプチコン内部で持っていて、プチコン内部で計算された結果が3DS画面に書かれているように推測してます。 GSPOITの説明にあるように「内部で色変換を経由するため描画時と同じ数値が返らない可能性があります」とあるので、 あんまり8の倍数とか細かいことは気にせずに、「同じじゃないことがある」「基本的にRGB関数の32bitで色を扱う」と思っていればそれでいいかもしれません。 どうしても本当に厳密に色8bitで管理したければ画面サイズ854x480分の配列を用意して配列に色を書いて、それを画面に書く方法があります、が当然それだけの更新は時間がかかるので重たいです 全部理解して各5bit(0~32)で色を管理してしまうのも方法かもしれません
1そうだね
プレイ済み
返信[16]
親投稿
ちなみに32bit(RGB=8bit)と16bit(RGB=5bit)の色が混在している理由。 実際の3DSで表示している色は16bitなのです。 (GSAVE/GLOAD/FONTDEFあたりが16bit定義です) プチコンの命令として色を指定するところはすべて32bitで指定するようになっていますが、これはプチコンが仕様としてそういうふうにしてます。 実際はプチコン内部で32bitを16bitに変換して3DSの画面に表示していて、 GSPOIT は 3DSの画面から取得した16bitの色をプチコン内部で32bitに変換されて返されます。 なので、どうがんばっても3DSの画面から取得したRGB=5bitしか取れないのです。 8bitなのに5bitしかなくて、3bit足りないので、左3シフトした値で表現されます 右3シフトするとは8で掛け算するのと同じなので、必ず8の倍数になります。
1そうだね
プレイ済み
返信[15]
親投稿
ちなみに考え方としては「32bitの値」などビットで表記されていたら、10進数ではなく16進数で考えるといいです。 そして16進数は2進数に簡単に置き換えでき、2進数は16進数に簡単に置き換えできます。 さらにWiiUや3DSなどの機械は2進数が基本で動作しているので「ビット操作」などで検索してみるといいかもしれません。 (色コードの00FF0000部分が赤、というのもプチコン内部でその部分を赤と判断してるからです)
1そうだね
プレイ済み
返信[14]
親投稿
ここで2進数で計算するとうまい具合にいきます。 &h00FF0000 は2進数で 0000 0000 1111 1111 0000 0000 0000 0000 です &h000000FF は2進数で 0000 0000 0000 0000 0000 0000 1111 1111 です 1 が全体的に右に16個ずれています。 なので「右に16シフト」するので、シフト命令を使って &h00FF0000 >> 16 となります。 全部まとめるとこうなります R = (C AND &H00FF0000) >> 16 緑は 0000FF00 で 右8シフト、青も同じように 000000FFで右0シフト(しなくていい)で計算できます。 色を計算してる公開キーのプログラムで似たようなことをしている人は多いので参考にしてみてください。
1そうだね
プレイ済み
返信[13]
親投稿
-460552 となっていて、HEX$してなさそうだったので16進数変換すると FFF8F8F8 となりました。 まず、10進数も2進数も16進数も、値が10進数で「-460552」であることは変わらなくて、 -460552を16進数で表記すると FFF8F8F8 となります。 この値のうち、16進数で 00FF0000 の部分が赤の色になるので、この部分を取り出そうとすると -460552 AND &h00FF0000 とすれば赤の部分の色がとりだせます、がプログラムでこれを &hFF として解釈したいので、&h00FF0000 を &h000000FF に計算しなおす必要があります。
1そうだね
プレイ済み
返信[18]
親投稿
ちなみに音ゲープレイ中に画面で動いてるものは全部プログラムが必要なので、ノートの動き、コンボ表示、曲がプレイ中の何秒目かのバー、ノートを叩いたときに消えるエフェクトなどなど、ほんとにたくさん考えないとなのです。 マルチタッチはできないけど、Wiiリモコンにつなげてるクラシックコントローラを改造して16個のボタンが横並びなコントローラを作ればチュウニズムっぽいこともできるかも。 今のバージョンだとプログラム実行中にUSBキーボードのキー入力情報がとれないけどそのうちとれるようになるので(INKEY$が動かない問題)、USBキーボード自体をコントローラだと思えばそれらしくできたりするので、そういったアイデアもプログラムの考えるうちだったりします。
0そうだね
プレイ済み
返信[17]
親投稿
本気で作るならこんな感じ(ちなみにIIDXとDDRはプレイしてます) ・どんな風にノート(音楽にあわせて判定ラインで叩く・触る系全部の意味)を画面に表示するかを考える(ゲームの設計) ・音楽をMML(プチコンで音楽を鳴らす言語)で作成する、自分で作るか誰かに作ってもらう(MP3やWAVは使えない) ・MMLに書かれたBPMからノートを動かす速度を計算する方法を考える ・ゲーム設計どおりと、BPMにあわせた速度でノートを移動させる方法を考える ・入力方法(ボタン、タッチ)がノートとタイミングによって点数やゲージを計算する方法を考える ・プレイ画面と選曲画面のBGを作成する ・曲一覧からプレイする曲を選択する選曲画面をプログラムする。 ・ゲームプレイ中の動作をプログラムする もっともっと考えることはいっぱいあるけど、思った以上にいっぱい考えていっぱいプログラム作れば音ゲーも作れますよ。
0そうだね
プレイ済み
返信[8]
親投稿
Q.プログラムってなに? A.命令表に定義されている命令を組み合わせて思い描いた動きを組み立てることです。 すごくおおざっぱなイメージ ・遊戯王で、コンボであれ発動したら次はこれ発動して、相手がカウンターしたらこれ発動するって流れ、デッキ構築もあわせてプログラムに近い感じ。 ・ピタゴラ装置を用意された積み木セットで組み立てる感じ。 すなわち、できることがきまってる部品をいろいろ組み合わせると、1つのコンボや、1つのピタゴラ装置ができる、これがプログラム。 なのでまずはプチコンの命令が単独でどんなことができるかを調べ、どのように組み立てるかをいろんな人の例を見て知ると、命令を組み合わせてどんなことができるかがわかるようになります。 何かを作りたいのであれば、それがどんな命令の組み合わせでできるかを考えていくことになります。
5そうだね
プレイ済み
返信[3]
親投稿
すでにWiiUに接続できるUSBキーボードがあるならWiiUをオススメ。 WiiUが自分のものじゃない(兄弟が使ってて使えない時がある)なら3DS版をオススメかな。 ゲームと違って、画面をずっと開いて考えたりすることが多いから、ちょっと中断してあとで再開ってすると、中断前の考えが飛んだりして勉強しづらいってのもあるにはあるので、できればずっとプチコンをさわれる状態がおすすめ。 WiiUをずっと使える環境があるならプログラムの勉強もいろんな意味でやりやすいWiiU(大画面でプログラムがみやすい、世界標準であるパソコンのキーボードが使える) どこでもプログラムがしたいとか、自宅の外でプログラムすること(学校とか部活とかプチコン持ってる友達の家とかプログラム詳しい人が集まる場所とか)があるなら3DSかなぁ。
2そうだね
プレイ済み
返信[7]
親投稿
10進数の数字でだすとわけわからなくなるので、HEX$(C) で16進数で表示するとちょっとわかりやすくなるかもです。 C=GSPOIT(X,Y) して、? HEX$(C) が たとえば FF0078A8 となったら FFが透明・不透明情報で 00が赤色で 78が緑色で A8が青色の値です 16進数の数字が2桁で8ビット(2進数で8桁)を表現しています。 プチコンでは基本的に色の情報は各8ビットとした32ビットの数値(ARGB 各8ビットの色コード)で管理してるけど、RGBREAD を使えばあんまり意識しなくても大丈夫かもです。(RGBREAD命令があるので公式ではそっちを推奨してるはず) ちなみにカラーを白黒変換するのは「白黒変換 アルゴリズム」あたりで検索するといろいろ方法があります(プチコンの命令1つで簡単にはできない)
1そうだね
プレイ済み
返信[4]
親投稿
(行数制限で修正してたら一部コメントおかしいけどキニシナイ) 書き込みするときに文字を1文字ずつASC()命令でDAT形式用(文字コード)に変換して 読み込むときはCHR$()命令でDAT形式用(文字コード)から文字に変換してます。 そのうちプチコンBIGが更新されて、こんなことしなくても済むようになるので、どうしてもTXT形式で今すぐ保存したいってことじゃなければ更新まで待つのがいいかもだけど、いつになるかわからないのがね。 (この変換処理をDEF定義にしてみるのも勉強にもなったり)
2そうだね
プレイ済み
返信[3]
親投稿
DATは平気でTXT 形式での保存がプチコンBIGではできないみたいなので、公式サイトで↓のような対応方法がのっていたりします。 文字をバイナリ形式に自分で変換して保存して、読み込むときはバイナリ形式から文字に自分で変換する方法です。(行数制限なので一部コード変更) ・書き込み(XTをDATへ変換 A$="ABCDEあいうえお" :L=LEN(A$): DIM O[L] FOR I=0 TO L-1 C$=MID$(A$,I,1): O[I]=ASC(C$) NEXT SAVE "DAT:TEST",O ・読み込み:DATをTXT変換 DIM P[1]: LOAD "DAT:TEST",P : M=LEN(P): B$="" FOR J=0 TO M-1 B$=B$+CHR$(P[J]) NEXT ? B$
2そうだね
プレイ済み
返信[3]
親投稿
すでに回答があるとおりの原因でエラーが起きているので、ループ変数名をサブルーチンごと変更するか、ロジック的にそれぞれのサブルーチンで本当にループが必要か(呼出時点のMOB変数の値をサブルーチン先で使いまわせないか、FORをぬけたあとでも呼べるか)を検討するといいかもです。 ちなみに39行目の IF THEN のあとに NEXTがあって、41行目にもNEXTがあるので、 一応これでも動いてるかもしれないですが、FORとNEXTは1対1にしておいたほうが、コードが入り組んだときの思わぬ原因不明バグに陥るのを防げたりします。 ながれからこんな感じになるかなと。 FOR CHKMOBCNT=0 TO 90 IF xx THEN MOBX[xx]=xxx IF xx THEN S[CHKMOBCNT]=1 ELSE GOSUB @MOB1VSCPU1 ENDIF NEXT
0そうだね
プレイ済み