日記 2013年  9月分

2013/09/28(土)

3ds 出張で名古屋に行き、荷物が多い中、Nintendo 3DS は持っていきました。
 パソコンは1kg以下だとしても重いので、よっぽど長期の出張でない限りは持っていくのは難しいです。
 で、結局ゲームをプレイというのは、どうもそんなにはやらず、ゲームを作るほうに動く感じがする。ホテルで暇な時間は、Nintendo DSi ware の「プチコンmk2」でプログラミングをしていた。
 同ソフトには最初から、画像や音楽がゲーム素材として入っています。
 BASICの画面から BGMPLAY 23 とすれば23番目のBGMが鳴るのですが、その入力が面倒なので、素材のビューワーを作りました。

gamen 十字ボタンの ↑ ↓ で素材のカテゴリ(メニューの項目)を変更し、十字ボタンの ← → で表示したい素材の番号を変更する…といった感じで、音楽、効果音、マップチップを試すことができます。

 マップチップは選択すると、下画面のタッチで画面に配置できるので、マップを試しに作ってみることができます。
 作成したマップを保存する機能(項目"com"の0番でAボタン)、保存したマップをロード(同じく1番でAボタン)する機能、も作り始めましたが、ビューワーとしては不要な機能だと後から気づきました。その辺の機能はちょっと大がかりになってしまい、保存は作ったのにロードは作り途中になっていて利用できません。


【ソースコード解説とダウンロード】

 私がホテルで作ったこのプログラムのダウンロードは以下のようにしてください。

QR

 まず、お手元の Nintendo DSi ware「プチコンmk2」を起動して、
最初に表示されるホームメニューから、

ファイルの管理 QRコード読み込み

を実行し、カメラで上図のQRコードを読み込んでください。
次に最初のホームメニューに戻り、

作品を見るPRG:SOUNDTES

を選んで実行してください。
 素材をいろいろ試せますよ!
 「BGM」を鳴らしながら「SOUND」も鳴らすとゲームをしているみたいだ!
 さらに「CHIP」は33番を選び、「PAL」(パレット)を3番にして下画面にRPGの草原をしきつめ、「SOUND」を鳴らせば、ゲームづくりのインスピレーション(創造力)がわくぞ。あたっ!
 プログラムもQRコードでダウンロードの時代になりました。すごいですね!! あろっ

(備考1 項目の「PAL」は説明していませんがパレットのことで、"3"が良い)
(備考2 項目の「CHIP」で選べるマップチップは1024個あるデータの内の最初の256個だけになっています。この辺もプログラミング途中…)
(備考3 あと、プチコンの素材には「スプライト」もありますが、これもこのビューアーではまだ試せません。この辺もプログラミング途中ということに。まだまだですね…)


 下記にソースコードを掲載します。
 BASICですが、配列を使ってオブジェクト指向に似せています。
 ソースコード中の こういう文字 はこのホームページで追加したコメントです。

Nintendo DSi ware「プチコンmkII」 BASICプログラム "SOUNDTES"
'MAIN
GOSUB @INIT
GOSUB @START
@TH
GOSUB @RUN:GOTO @TH Javaっぽい感じにしました


@INIT
CLEAR
DIM MAPM(16,12) DIMは配列の宣言です。仕様で2次元配列までしか作れません
DIM MAPP(16,12)
CLS
Y=0
PNLFLG=0 PNLFLGは下画面のキーボードパネルのオンオフのフラグです
SCALE=2
'   COL,    MAX, ' で始まる行はコメントです
'C
'S
'M
'P
'E
NOWCOL=0
GETMAX=1
ITEMC=0 ITEMC,S,M,P,Eがメニューの各項目で各素材カテゴリにあたる
ITEMS=1
ITEMM=2
ITEMP=3
ITEME=4
ITEMMAX=5
ATTRMAX=2

'DIM OBJ(ITEMMAX,ATTRMAX)
'DIM OBJ2(4,2)

FOR ITEM=0 TO ITEMMAX-1
OBJ(ITEM,NOWCOL)=0  これは擬似的なオブジェクト。itemc.setNowcol(0) って感じ。
NEXT ITEM

OBJ(ITEMC,GETMAX)=30 後でitemc.getMax()で値を得られる擬似アクセサメソッド
OBJ(ITEMS,GETMAX)=70
OBJ(ITEMM,GETMAX)=1024
OBJ(ITEMP,GETMAX)=16
OBJ(ITEME,GETMAX)=2


ARWMAX=ITEMMAX

FOR I=0 TO ARWMAX-1
ARW$(I)=" "
NEXT I


RETURN 以上がinit()


@START

PNLUPD=1

RETURN


@RUN このrun()を永遠に繰り返す

GOSUB @DRAW
GOSUB @PAINT

VSYNC 1

IF TCHST THEN GOSUB @TOUCH タッチされたらタッチの処理へ

KEYDN=BUTTON(1) 押されたキーを取得して次で処理

下記は switch KEYDN { case:0; ... break; case:1; ... break; ...} をやってる
ON KEYDN GOSUB @D,@UE,@SI,@D,@HI,@D,@D,@D,@MI,@D,@D,@D,@D,@D,@D,@D,@PA
GOTO @ENDKEYDN
@UE 上ボタン 上の項目へ
IF Y>0 THEN Y=Y-1
RETURN
@SI 下ボタン 下の項目へ
IF Y<ARWMAX-1 THEN Y=Y+1 ARWはArrow(人差指マーク)の略
RETURN
@MI 右ボタン その項目の値を増やす
ITEM=Y
IF OBJ(ITEM,NOWCOL)<OBJ(ITEM,GETMAX)-1 THEN OBJ(ITEM,NOWCOL)=OBJ(ITEM,NOWCOL)+1
RETURN
@HI 左ボタン その項目の値を減らす
ITEM=Y
IF OBJ(ITEM,NOWCOL)>0 THEN OBJ(ITEM,NOWCOL)=OBJ(ITEM,NOWCOL)-1
RETURN
@PA PAは Press A button の略。 その項目をその値で実行
ITEM=Y
VALUE=OBJ(ITEM,NOWCOL)
IF ITEM==ITEMC THEN BGMPLAY VALUE
IF ITEM==ITEMS THEN BEEP VALUE
IF ITEM==ITEME AND VALUE==0 THEN GOSUB @SAVEMAP
IF ITEM==ITEME AND VALUE==1 THEN GOSUB @LOADMAP
RETURN
@D default: のつもり
@ENDKEYDN ここまでswitch

RETURN run()は以上


@DRAW

項目をゆびさす人差指マークについて。 ※絵文字なので→に置き換えました
FOR I=0 TO ARWMAX-1
IF I==Y THEN ARW$(I)=" " ELSE ARW$(I)=" "
NEXT I

RETURN


@PAINT

ソフトウェアキーボードオンオフ なんとなくpaint()に入れた
IF !PNLUPD GOTO @SKIP1
IF PNLFLG THEN PNLTYPE "KYA" ELSE PNLTYPE "OFF"
@SKIP1

人差指マーク表示
FOR I=0 TO ARWMAX-1
LOCATE 0,I:PRINT ARW$(I)
NEXT I

メニュー項目表示
LOCATE 1,0:PRINT "BGM"
LOCATE 1,1:PRINT "SOUND"
LOCATE 1,2:PRINT "CHIP"
LOCATE 1,3:PRINT "PAL"
LOCATE 1,4:PRINT "COM"

メニュー各項目の現在の値を表示
FOR ITEM=0 TO ITEMMAX-1
LOCATE 10,ITEM
PRINT OBJ(ITEM,NOWCOL)
NEXT ITEM

選択中のマップチップを表示
GPAGE 0
GPUTCHR 0,50,"BGU0",OBJ(ITEMM,NOWCOL),OBJ(ITEMP,NOWCOL),SCALE

下画面にてマップを描画
GPAGE 1
IF 1 GOTO @SKIP2
FOR MY=0 TO 12-1
FOR MX=0 TO 16-1
CHIP=MAPM(MX,MY)
PAL=MAPP(MX,MY)
GPUTCHR MX*8*SCALE,MY*8*SCALE,"BGU0",CHIP,PAL,SCALE
NEXT MX:NEXT MY
@SKIP2

RETURN


タッチ処理
@TOUCH

下画面のパネル(ソフトウェアキーボード)のオンオフ機能
IF TCHX>255-16 AND TCHY<32 THEN PNLUPD=1:PNLFLG=!PNLFLG:RETURN

タッチされた場所にマップチップを描画 draw()でやってないのがあやしい
GPAGE 1
MX=FLOOR(TCHX/(8*SCALE))
MY=FLOOR(TCHY/(8*SCALE))
CHIP=OBJ(ITEMM,NOWCOL)
PAL=OBJ(ITEMP,NOWCOL)
MAPM(MX,MY)=CHIP
MAPP(MX,MY)=PAL
GPUTCHR MX*8*SCALE,MY*8*SCALE,"BGU0",CHIP,PAL,SCALE

RETURN


マップ保存ルーチン(ちょっとあやしいできばえ)
@SAVEMAP
CNT=0
MAPMSTR$=""
MAPPSTR$=""
FOR MY=0 TO 12-1
FOR MX=0 TO 16-1
MAPMSTR$=MAPMSTR$+STR$(MAPM(MX,MY))+","
MAPPSTR$=MAPPSTR$+STR$(MAPP(MX,MY))+","
NEXT MX

IF !((MY+1)%3==0) THEN GOTO @SKIP3
LOCATE 0,3+FLOOR((MY+1)/3)*4
PRINT MY;":";LEN(MAPMSTR$);":";MAPMSTR$
MEM$=MAPMSTR$
SAVE "MEM:MAPM"+STR$(CNT)
MEM$=MAPPSTR$
SAVE "MEM:MAPP"+STR$(CNT)
CNT=CNT+1
MAPMSTR$=""
MAPPSTR$=""

@SKIP3
NEXT MY
RETURN


マップロードルーチン(途中)
@LOADMAP
FOR MY=0 TO 12-1
FOR MX=0 TO 16-1
CHIP=3
PAL=3
GPUTCHR MX*8*SCALE,MY*8*SCALE,"BGU0",CHIP,PAL,SCALE
NEXT MX
NEXT MY
RETUR

…ってな感じで、
dazoi

how2make? その素材どうやってつくるの?
「プチコンmk2」のソースコードのテキスト どうやってホームページに掲載するの?
Nintendo DSの「プチコンmk2」を起動して
ホームメニューファイルの管理SDメモリーカード書き込み<そのプログラム名>
でSDカードに書き込む。
保存先が表示されるので、メモしたりして覚えておく。
Nintendo DSの中のSDカードを取り出し、パソコンで保存先のフォルダを開く。
*.PTCというファイルがあるので、テキストエディタで開く。
(メモ帳で開くと、改行がなくなってしまうので、他の「秀丸」などのテキストエディタが良い)
最初のほうだけ読み込み不能な文字があることと、プログラム中に入力した絵文字が読み込み不能な文字になっている以外は、普通のテキストなので、コピーしてホームページなどで使えます。


2013/09/14(土)

1
2
3
▲オープニングムービー
 Nintendo3DSの「モンスターハンター4」を購入しました。
 (ダウンロード版/カプコン/CERO C 15才以上/裸眼3D映像)

 ちょっとやってみたんだけど、面白い気がした。
 ただし、ワイルドな世界なので、凶暴な肉食の怪物をハンティングする一方、温和な草食動物を血しぶきを上げさせて刃で切り倒し、その肉を はいで、焼いて、食べるという描写も当たり前のように行われる。それを行わないと生きていけないという世界だ。
 現代も普通に大好きと言いながら、スーパーで売っている肉を食べている。見えないところで、どんなふうにか知らないけど、育てれば愛情豊かな動物になるところを、さばいて精肉しているのだ。
 それを表にあらわして描写するかしないかの違い、知るか知らないでいるかの違いかなと思う。
 しかし、温和な動物をおもてだってさばいていたら、人類は蛮族になるだろう。
 ゲーム内では魚釣りもできる。温和な草食動物をさばくのはダメと感じて、魚をさばくのはダメと感じないのはなんでだろう。
 コミュニケーションを取れる、感情豊かで高度な動物ほど、仲間(同胞)に近いからかな。
 裸眼3Dの世界はすばらしい。ゲーム機の画面の中に奥行きがある。
 自分の2つの目玉は横一列に並んでいる。画面の横方向と2つの目玉の並びを平行に保たないと、まともに立体視できない。また、目玉が画面に近すぎてもダメ、遠すぎてもダメ。画面からやや左右にずらしてもダメ。一番良いポジションを見つけて画面を見る必要がある。
 本体の3Dスイッチを切ると、いつもの2Dのゲーム画面になる。3Dとくらべて非常に自然な落ち着いた画面だと感じる。その代り当然立体感はなくなる。

立体感は
 
アニメ

なくなる。


2013/09/08(日)

chattering電子回路の「チャタリング」についてまとめました。
電子回路でスイッチを使うと「チャタリング」という問題が発生します。
これについて少し深いところまで調べてみました。
一応だれでも読めるような文面になっています。

chataこれ、誰だかわかりますか?
チャラ男じゃないです。
チャタリングの「チャタ男」です。
もう~スイッチがチャタチャタしちゃって、
さんきゅうべぇでぃーっす。
SW1がうまく動かなうぃ~ねぇ~☆

リンクはこの画像の作図画面にしました。
Excelで描けるんでぃ~っす。

チャラ男らしいわるっぽそうな感じにしたかったんだけど、優しそうな顔になっちゃいましてさんきゅうべぇでぃーっす。
同じ顔にするのは難しい。


2013/09/01(日)

私は現在38才。もうすぐ39歳。
10才ぐらいのときのことを思うと、そんなに遠い昔ではない気がする。

9/1 日曜日は電験三種の資格試験に出かけました。
朝の9:00試験開始で、夕方17:10試験終了。
長い!! 丸一日かけて4科目の試験実施。
試験終了のころには精気を吸われたように疲れていました。

ついでに言えば、この4科目というのは、
電気の「理論」  回路とか法則とか。
電気の「電力」  水力発電とか。
電気の「機械」  電動機とか。
電気の「法規」  電気の法律とか。
"電動機" とかは、一般にはほとんどなじみのない、地味な内容ですけど、意外と面白そうなんです。

帰宅時に車の中から向こうの空に稲妻がたくさん走っているのが見えました。
稲妻の話なので、背景は暗くして、文字を稲妻カラーにしたいと思います。
電流というものはプラスからマイナスへ流れます。
ただし、電流をもう少し詳しく見ると、電流を形作る電子は実は電流とは逆の、マイナスからプラスへ流れています。
電流の流れは、観念的に、プラスからマイナスへ流れるもの、としていて、
実際は、電子としてはマイナスからプラスへ、実は流れていますよ、と分けて考えることになっています。

稲妻を見ると、天から地へ向かって、上から下へ流れているのが目で見て取れます。
ぴかっと光って流れるモノが、電子だとすれば、最初の話の電子の流れ方(電子はマイナスからプラスへ流れる)を適用すると、天がマイナスで、地がプラス、ということになります。
ここで「グランド」や「アース」というものを考えると、グランドやアースはマイナスと同じと思って良いはずです。グランドもアースも地上を意味している言葉なので、地上がマイナスということになると思います。
なんかおかしいですね、稲妻で電子は地上へ向かって流れ落ちているように見えています。地上はグランドなのでマイナスです。マイナスへ向かって流れたと言えます。でも「電子はプラスのほうへ流れる」と言われている。。どう考えればいいのかな?
こう考えよう。天に大きな乾電池があると考えて、乾電池のおしり(マイナス側)が地上に向けられている。
その乾電池のマイナス側から稲妻が走り、地上(グランド)へ落ちていく。。。。うーん、わからない。。。。

稲妻の謎は解けなかった。








ページ制作 homepage6047


ページの上端へ (もくじ開く)