ゲームを作る場合はキャラクターのステータスや、マップ情報を読み込むファイルを使うことがあります。いつもはプロパティリストを使っているのですが、2次元配列の大きめのマップを扱うことになったので、CSV形式のテキストファイル(.txt)を読み込むことにしました。

CCFileUtils *fileUtils = CCFileUtils::sharedFileUtils();
std::string filePath = fileUtils->fullPathForFilename("stage.txt");
unsigned long nSize = 0;
unsigned char* pBuffer = fileUtils->getFileData(filePath.c_str(), "r", &nSize);
CCLog("%s",pBuffer);
delete[] pBuffer;


上記はただテキストファイルを読むこむだけですので以下の例でやってみました。

#include <fstream>

std::string filePath = CCFileUtils::sharedFileUtils()->fullPathForFilename("csv.txt");
ifstream ifs(filePath.c_str());
std::string csvLine;

if(!ifs) return false;
int i=0;
while ( getline(ifs, csvLine) )
{
 istringstream csvStream(csvLine);
 std::string csvCol;

 while ( getline(csvStream, csvCol, ',') )
 {
  if (atoi(csvCol.c_str()) != 0)
  {
   CCLog("%d",atoi(csvCol.c_str()));
  }
 }
}
今後ブログにはソースコードを貼り付けていくと思うので、SyntaxHighlighterというJavascriptのライブラリを導入してみました。これを使うと、下記のようにソースコードを綺麗に表示できるようになります。
#include<stdio.h>
int main(void)
{
     printf("Hello World!!");
     return 0;
}

ざっと他サイトで導入する方法を読んでやってみてましたが、少し時間がかかったので私のしたことについて記述しておきます。

1.  SyntaxHighlighterをダウンロードする

ダウンロードページにアクセスしてClick here to downloadよりダウンロードします。

SyntaxHighlighter

2. サーバにアップロードする

ダウンロードしたフォルダの中身を見ると下記写真のようになっていると思います。

SyntaxHighlighterフォルダ


今回使用するのはscriptsstylesの2つで、これらを自分のサーバにアップロードします。
フォルダの名前は適当に変更して構いません。以下アップロードした例となります。
それぞれ名前をscripts→js、styles→cssと変更しました。

SyntaxHighlighterをサーバにアップロード



3. プラグインを追加する

アメブロにはプラグインの追加という項目があります。
今回はプラグインの追加のフリープラグインを利用しました。

アメブロ(プラグイン)


フリープラグインには禁止タグ等の制限がないようです。
そこで以下のコードを利用しました。(itboyさんの記事を参考にさせて頂きました。)

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>

<script src="http://自分のサーバURL/scripts/shCore.js" type="text/javascript"></script>
<script src="http://自分のサーバURL/scripts/shAutoloader.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
  $("head").append('<link rel="stylesheet" href="http://自分のサーバURL/styles/shThemeDefault.css" type="text/css" />');
  $("head").append('<link rel="stylesheet" href="http://自分のサーバURL/styles/shCore.css" type="text/css" />');
 
  function path() {
    var args = arguments,
    result = [];
 
    for(var i = 0; i < args.length; i++)
      result.push(args[i].replace('@', 'http://自分のサーバURL/scripts/'));
 
    return result
  }
 
  SyntaxHighlighter.autoloader.apply(null, path(
    'applescript            @shBrushAppleScript.js',
    'actionscript3 as3      @shBrushAS3.js',
    'bash shell             @shBrushBash.js',
    'coldfusion cf          @shBrushColdFusion.js',
    'cpp c                  @shBrushCpp.js',
    'c# c-sharp csharp      @shBrushCSharp.js',
    'css                    @shBrushCss.js',
    'delphi pascal          @shBrushDelphi.js',
    'diff patch pas         @shBrushDiff.js',
    'erl erlang             @shBrushErlang.js',
    'groovy                 @shBrushGroovy.js',
    'java                   @shBrushJava.js',
    'jfx javafx             @shBrushJavaFX.js',
    'js jscript javascript  @shBrushJScript.js',
    'perl pl                @shBrushPerl.js',
    'php                    @shBrushPhp.js',
    'text plain             @shBrushPlain.js',
    'py python              @shBrushPython.js',
    'ruby rails ror rb      @shBrushRuby.js',
    'sass scss              @shBrushSass.js',
    'scala                  @shBrushScala.js',
    'sql                    @shBrushSql.js',
    'xml xhtml xslt html    @shBrushXml.js'
  ));
  SyntaxHighlighter.all();
 
});
</script>
追加したコードの1行目と2行目については既に記述している方は必要ありません。記述していなかった方はjquery.comより最新バージョンが提供されているかもしれないので確認してみて下さい。

4.フリープラグインを使用する機能に移動させる

初めてフリープラグインを利用する場合は、フリープラグインが有効になっていません。そこで、写真のようにフリープラグインを使用する機能に移動させる必要があります。

フリープラグインへ移動させる


5.実際に記事を書いてみる

お疲れ様でした!以上でSyntaxHighlighterの設定は完了です。
それでは、実際に記事へソースコードを貼り付けてみます。

#include<stdio.h>
int main(void)
{
     printf("Hello World!!");
     return 0;
}

このようにコードを表示させたい場合は、ソースコードを「pre」タグで囲います。

<pre class="brush: c toolbar: false;" title="こんにちは世界">
#include<stdio.h>
int main(void)
{
     printf("Hello World!!");
     return 0;
}
</pre>

といった感じです。
久しぶりにHSP(Hot Soup Processor)を使ってマップエディタを作ってみました。
しかしながら、HSPを最後に使ったのが3年前でmes命令やpos命令しかはっきり覚えていませんでした

普段はMac OSを使っているのでWindows PCも久しぶりに起動した気がします(動いた
ちなみにこのWindows PCは購入して6年目になるノートPCです。
このWindows PCには、3年前に一度作ったマップエディタがあるはずなので探してみること数分...なんとか見つけることはできたものの、起動してみるとちらつきが酷かったです。

そこで、少しはまともに動くマップエディタを作るために各命令のマニュアルをしばらく眺めていました。最初にHSPを使ったのが7年前なのですができることが色々と変わっており、最近の流行りであるスマートフォン向けのアプリも作れるようになっていてちょっと感動しました。

結果的には至極単純な問題で、昔作ったマップエディタ時代は何も理解していなかったことがはっきり分かりましたね。どうやら、gsel命令、redraw命令あたりの使い方が間違っていたようでした。

今回やりたかったこととしては、2つのウィンドウがあってそれぞれの描画を更新するというシンプルなものです。こんな簡単そうなことでも久しぶりにやろうとすると意外と時間を潰されます。ました。

以下の2つの例を実行してみると、前者だと片方のウィンドウにちらつきが見られることが分かります。後者はちらつきが見られません。このようにHSPでは、コード的にはうまい具合に書けていそうだなーと見えても、期待通りに処理してくれないことがあるのでハマリます...
screen 1,320,480
repeat
  redraw 0
  
  gsel 1
  color 0,0,0
  boxf

  gsel 0
  color 0,0,0
  boxf
  color 50,50,50
  boxf

  gsel 1
  color 128,0,128
  boxf

  redraw 1
 
  await 15
loop
screen 1,320,480
repeat
  redraw 0
  
  gsel 1
  color 0,0,0
  boxf

  gsel 0
  redraw 0
  color 0,0,0
  boxf
  color 50,50,50
  boxf
  redraw 1

  gsel 1
  color 128,0,128
  boxf

  redraw 1
 
  await 15
loop