Sunday, July 24, 2011

プチコンで作成中のもの

プチコンで作成中のゲーム画面。
またもやテトリスですが、前回よりまし?
CHRED2が大活躍。

どこかでみたようなタイトル画面



どこかにありそうなゲーム画面

Friday, July 8, 2011

プチコン高速化4 変数名

  • 変数名は長いと少し遅い。a、bより。0.0004フレームくらい
  • ただし、変数名の長さ5文字は3、4文字より速いかも。cより


a.数字を変数に、セミコロンあり、位置固定(0,0)、変数をPRINT
CLEAR:CLS
A=0
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?A;
NEXT
?MAINCNTL-T
結果:158


b.数字を長い変数名(プチコンは8文字まで)の変数に、セミコロンあり、位置固定(0,0)、変数をPRINT
CLEAR:CLS
ABCDEFGH=0
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?ABCDEFGH;
NEXT
?MAINCNTL-T
結果:162

変数名:ABCDEFG
結果:160

変数名:ABCDEF
結果:161

変数名:ABCDE
結果:160

変数名:ABCD
結果:161

変数名:ABC
結果:159

変数名:AB
結果:159

??
変数名5文字のほうが4文字より速い?
c.でループ増やして検証


c.数字を長い変数名(プチコンは8文字まで)の変数に、セミコロンあり、位置固定(0,0)、変数をPRINT、10万回ループ
変数名:A
結果:1591

変数名:AB
結果:1600

変数名:ABC
結果:1622

変数名:ABCD
結果:1624

変数名:ABCDE
結果:1604

変数名:ABCDEF
結果:1618

変数名:ABCDEFG
結果:1610

変数名:ABCDEFGH
結果:1624

Thursday, July 7, 2011

プチコン高速化3 print

表示関係の続きで、V1.1で時間計測

PRINTでいろいろ

  • 改行すると遅い。dとeより。1つの改行当たり0.0008フレームくらい
  • スクロールがあると非常に遅い。aとb、eとfより。1行スクロールで0.2348フレームくらい
  • ?はPRINTと時間変わらず。fとgより。
  • 変数の表示の方が数値直書きより少し遅い。fとhより。0.0006フレームくらい
  • 配列変数の表示の方が変数より少し遅い。hとiより。0.0007フレームくらい
  • 配列変数2次元の表示の方が配列変数1次元より少し遅い。iとjより。0.0005フレームくらい

前提知識。
実行1回目は微妙に速くなったり遅くなったりするので、2回目以降の時間をみる。
1回目が変わるのはリストを変えてるから?

まず下準備。
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
NEXT
?MAINCNTL-T
結果:19

a.数字直書き、セミコロンなし
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
?0
NEXT
?MAINCNTL-T
結果:2463


b.数字直書き、セミコロンあり
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
?0;
NEXT
?MAINCNTL-T
結果:376


d.数字直書き、セミコロンなし、位置固定(0,0)
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?0
NEXT
?MAINCNTL-T
結果:160


e.数字直書き、セミコロンあり、位置固定(0,0)
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?0;
NEXT
?MAINCNTL-T
結果:152


f.数字直書き、セミコロンあり、位置固定(31,23)
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 31,23
?0;
NEXT
?MAINCNTL-T
結果:2500


g.数字直書き、セミコロンあり、位置固定(0,0)、?をPRINTに
CLEAR:CLS
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
PRINT 0;
NEXT
?MAINCNTL-T
結果:152


h.数字を変数に、セミコロンあり、位置固定(0,0)、変数をPRINT
CLEAR:CLS
A=0
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?A;
NEXT
?MAINCNTL-T
結果:158


i.数字を配列変数に、セミコロンあり、位置固定(0,0)、変数をPRINT
CLEAR:CLS
A(0)=0
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?A(0);
NEXT
?MAINCNTL-T
結果:167


j.数字を配列変数(2次元)に、セミコロンあり、位置固定(0,0)、変数をPRINT
CLEAR:CLS
A(0,0)=0
T=MAINCNTL
FOR I=0 TO 9999
LOCATE 0,0
?A(0,0);
NEXT
?MAINCNTL-T
結果:172

Wednesday, July 6, 2011

プチコン高速化2

いろんなところで書かれていますが、8x8キャラクタの表示の速さは

スプライト > BG > コンソール > グラフィック画面

の順のようです。
条件によっては異なる場合もあります。

全画面を埋めるのであればスプライトよりBGの方がいいですし
256色使いたいのであればグラフィックの方が扱いやすいですし
数字や文字列の表示であればコンソールが使いやすいです。

プログラムの作りにもよりますが、コンソールはLOCATE、PRINTの繰り返しが
重いです。なので文字列としてLOCATE,PRINTの回数を減らして表示してやると速いです。
例えば、
---
FOR I=0 TO 15
FOR J=0 TO 15
LOCATE J,I:PRINT CHR$(I*16+J);
NEXT
NEXT
---
とするよりも、
---
FOR I=0 TO 15
A$=""
FOR J=0 TO 15
A$=A$+CHR$(I);
NEXT
?A$;
NEXT
---
とするほうが、はるかに高速です。

Saturday, July 2, 2011

プチコン高速化1

プチコンV1.1アップデート記念。

プチコンでパネルを非表示にすると、わずかに高速化されます。
---
PNLTYPE "OFF"
---
VSYNC 1の何十分の一程度ですが。

Thursday, April 28, 2011

プチコンで晴れときどき爆弾

むかしむかしMSX・FANという雑誌に載っていた「晴れときどき爆弾」という1画面ゲームをプチコンに移植してみました。とある週末の2〜3時間を使って作ったのですが、作りやすさしか考えてなかったのでリストは長め(プチコンの7画面ほど)になっています。

プレイヤーはうさぎっぽい生き物で、ひたすら降り続ける爆弾を左右に避けるゲームです。よければ避けるほどスコアがあがります。リプレイは上キー。

リストは動画の後半にあります。
爆弾の縦スクロールはスプライトでムリヤリ実現しています。



ほんとはひらがなフォントも作って見た目を全く同じにしたかったのですが、リストの長さとゲーム内容のバランスを考えてとりあえず保留しました。

Monday, April 18, 2011

プチコンでテトリス風ゲーム

テトリス風ゲームをプチコンで作ってみました。



1ミノ毎にLEVELが上がります。
LEVEL 1〜30は落下の待ち時間が減ります。
LEVEL 31〜50はGがあがります(1フレームで1段以上(Gの数だけ)落下する)
LEVEL 50で最高速の20Gになります。

画面左上の数字がFPS値です。
(かん違いでなければ)おおよそ60FPSを維持しているみたいで、プチコン/DSの演算の速さのおかげです。

BGMPLAYではいまいちあうものが見つかりませんでした。自前でBGMを用意してみましたが、プログラムの構造に問題があってBGMがわずかにとぎれることがあり、BGM演奏は呼び出さなくしました。音はいくつかの効果音のみとなっています。
ブロックの落下を止めるとBGMがきれいに流れるのですが。。。

動画のおまけで流れるBGMはゲーム中の演奏はあきらめたものです。
MMLはTSSCPまとめWikiの「Tetris -C-TYPE-」をみて打ち込みました。作った方ありがとうございます。
TSSの仕様で「Tetris -C-TYPE-」の演奏に必要そうな所だけを用意しました。難しい機能(音色とかループとかマクロとか)は実装してないです。
プチコンのBEEPは4オクターブ+1しか表現できないので、泣く泣く高音パートのオクターブを1つ下げ低音パートを1つあげています。一番下をO3Cとすると、O3C〜O7Cが使える範囲となります。

プログラムは900行ほどになってしまいました。
ゲーム本体は700行いかないです。
残り200行ほどはつけようとしてうまくいかなかったBGMルーチンとそのデータです。

作ってて思ったのは、

  • MERGEがほしい〜 ... MERGE "プログラム名"で後ろに追加とか
  • 割り込み命令がほしい ... ON INTERVAL GOSUBとか
  • BEEPをのピッチをもっと広く ...エラー時の音がBEEPで再現できないのはいかがなものか
  • BEEP中の音量とかピッチを変えられると楽しいかも。音声再生方式の問題があるかもしれないですが、そこをなんとか?
です。