でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

2013年06月

C/C++ プリプロセッサ大活躍

今日もいいコード書いてますか?

先輩曰く「プリプロセッサは無慈悲だ…」

とまで言わしめる、とくにC++では嫌われ者のプリプロセッサ。まぁ…コンパイル前に名前空間とか無視してコードを書き換える仕組みですからね… 型安全性とかあったもんじゃねぇ。

ですが、プリプロセッサじゃないと出来ない事もあります。

その一つが、「プロジェクト設定をコードに取り込む」

え?何の事だって?それはつまり、こういう事です!
36
このタイトルバーの文字列、実はXcodeのbuild Settingsから自動的にコードに反映されるようになっています。「え?そんな事できるの?」そう!いちいちコードに手を加える事無く、Xcodeのプロジェクト名が自動的に反映されるようになっているのです。

優秀なプログラマほど、手作業でコードを書き換える箇所を減らす!

嫌われ者のプリプロセッサですが…XcodeやVisualStudioの設定をコードに取り込む事ができる簡単な方法もまたプリプロセッサなのであった。


さてどうやるのかといいますと。こんな感じにコードに書きます。
// TIPS:プリプロセッサを文字列として定義する
#define PREPRO_TO_STR(value) PREPRO_STR(value)
#define PREPRO_STR(value)    #value

// 使う時はこんな。 stc::cout << PREPRO_TO_STR(PRODUCT_NAME) << std::endl;

そして、XcodecのBuild Settingsに設定を追加
photo1

するとあら不思議! Xcode のBuild Settings 内の Product Name が出力されるという訳です。

VisualStudioの場合はこんな感じになります。
photo2

これなにげに便利ですよね?すっげー便利!

どんな変数があるのかは、

Xcodeの場合はQuick Help を参照
photo3

VisualStudioの場合はマクロを参照
photo4

アプリ名とか、プロジェクトのパスとか、ビルド情報とか、いろいろと応用できそうですよね。

まだまだ役立つプリプロセッサ(使い過ぎに注意)


ではまた次回!

VisualStudio2012 でデバッグビルドが重たく感じたら試して欲しい事

photo2
みなさんプログラム書いてますか?
(ワアアアアアァァァ…!)

みなさんVisualStudio2012使ってますか?
(ざわざわ… ざわざわ…)

VisualStudio2012、けっこういい感じですよ。C++でコード書いてる生徒たちの悩みの種の1つだった「うっかり全角スペースを入力」も、エディタ画面に直接赤い下線で教えてくれたり、「対応する括弧」もカーソルをあわせればその場でハイライトして教えてくれたりと、かなり賢くなってます。

なのですが…C++で何か作ってて、エフェクトを出したり、いろいろなオブジェクトを生成してループしたりすると、デバッグビルドでの実行速度が一気に重たくなってオロロロロン…。これ、ビルドオプションを2つほど変更するとたぶん…解消されるかも。
photo

なのですが、なぜかこれで動作が不安定になってしまう状況もあって困ってるんですけどね!
う〜ん。なんかアカン事してるんでしょうかね…コレ…(汗)


ではまた次回!

iBooks でも『チュートリアル形式で始めるOpenGL[2D編]』

Dropboxの仕様変更により、ダウンロードデータへのリンクが切れております。
ご不便をおかけして申し訳ありませんが、以下のリンクからダウンロードしてください。

お待たせしました。
ibooks

『チュートリアル形式で始めるOpenGL[2D編]』

iBookstore版も出版されました。「OpenGLの基礎をC++のチュートリアルを通して手取り足取り」教える内容の本です(苦笑)
写真 2013-06-11 14 51 25
iBooksの「スクロールモード」だと、サンプルコードがページ分割されずに読めるので実に快適。とくにiPadは画面も広くて最高。これ、Kindle版にもあるのかな?

ただし、epubの言語を「en」にしとかないと、このスクロールモードの方向がiPadで横になっちゃうのよオロロン…めっちゃ読みづらい…。あと、表示に使われるフォントもなんか変。これ、バグなのか仕様なのか…アップルに問い合わせてみます。

とりあえず「内容は日本語だけどepub的には英語」というアカン状態で出版できてしまった前例を作ってしまったの…か。審査時間はだいたい1週間程度。まあそんなもんだよね。

という訳で、「ゲーム作るんならC++でOpenGLだよね〜」と感じてる人は、

『チュートリアル形式で始めるOpenGL[2D編](Kindle)』
『チュートリアル形式で始めるOpenGL[2D編](iBooks)』

を手に取ってみてください。


ではまた次回!

もしかして emacs こそ電子出版に最適なツールかもしれない

photo
こんにちは!
みなさん今日もバリバリemacs使ってますか?

先日電子書籍として出版した『チュートリアル形式で始めるOpenGL[2D編]』ですが、

emacs + org-mode → html

という流れで原稿を作成しました。

いやほんとこれが異常なほど効率的で、きっと世のemacs使いはこれを使ってバリバリ電子書籍を出版してるに違いない!と思えてしまうほどに惚れ込んでしまいました。

というわけで、アウトラインプロセッサorg-mode。html出力に限った用途での使い方を紹介してみたいと思います。すっげえニッチな記事だね。まあそれはいつもの事か。


org-modeはemacsに標準添付されているのですが、ちとバージョンが古いので、公式サイトから最新版を落としてきましょう。ファイルを解凍したらlispフォルダの中身全部と、contlib/lispフォルダのhtmlize.elを、自分のローカルなlisp置き場に置いて、init.elにはこう書きます。

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
;; 以下はお好みで
(setq org-export-allow-bind-keywords t)
(setq org-export-with-sub-superscripts nil)

はい完了!emacsを再起動すれば、もう最新版のorg-modeが使えるようになっています。

では早速、test.orgを開いて、以下のように打ち込みます。「ほげほげ」とか「ふがふが」が嫌な人は適時文章を流し込んでください。

#+TITLE: org-modeのHTML書き出しテスト

#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="test.css" />

* テスト1
  <<hoge>>
  ほげほげほげほげほげ

** 小見出し1
   ふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふが

** 小見出し2
   強調は前後に空白を入れて「*」で挟む。 *こんな感じです* 文字の装飾は他にもあるので、org-mode同梱のpdfファイルに目を通してみてください。

   空行を入れてから書き始めると、「次の段落」扱いになります。

   + 順序無しリスト1\\
     行末に「\\」で同じ段落内での改行
     - さらに順序無しリスト\\
       ふがふがほげほげふがふがほげほげふがふがほげほげふがふがほげほげ

   + 順序無しリスト2\\
     ふがほげふがほげふがほげふがほげふがほげふがほげ

* テスト2
  ぴよぴよふがふがぴよぴよふがふがぴよぴよふがふがぴよぴよふがふが

** 小見出し1
   見出し(*のついている行)でTABを押すと、見出しを折り畳んだり展開したりもできる!

*** さらに小見出し1
    TABを押していい感じにインデントして書き出します

*** さらに小見出し2
    ちなみに、見出し以外は改行を無視します

    #+CAPTION: テーブルはこんな感じ
    | ほげほげ     | ふがふが         |
    |--------------+------------------|
    | ぴよぴよぴよ | ほげぴよほげぴよ |

   リンクは http://test.org と書いたり、[[http://test.org][リンク]] と書いたりします

** 小見出し2
   コードの挿入は
   
   #+BEGIN_SRC c++

#include <iostrem>

int main() {
  std::cout << "ほげほげ" << std::endl;
  return 0;
}

   #+END_SRC

   こんな感じなのですが、なんとemacsの色分けをそのまま出力してくれる!

** 原稿内でのリンク
   こうやって書くだけ。[[hoge][リンク]] 編集で段落が移動しても問題無し。


打ち終わったら C-c C-e h h と入力。はい!できました!!たったそれだけで同じ場所に test.html が出力されます。素晴らしい!あとは、test.cssを作っていい感じに装飾すれば、もう立派な原稿の出来上がりです。自分がそうした!
17
50
画像の挿入は

file:hoge.png

とだけ書けばよく、テーブルに至っては|(縦棒)と、中の語句を書きながら、適時TABを押してゆけばいい感じに整形してくれて至れり尽くせりです。たいていTABを押したら何とかしてくれるので、もうHTMLでテーブルを作る事はないだろうと思いましたw

org-modeの素晴らしい所は、

・目次を自動で生成してくれる(まさに電子書籍向け!)
・段落丸ごとを前後に移動するのも簡単(M-up、M-down)
・プログラム部分はemacsの色分けそのままで出力してくれる
・テキストファイルなので、他のエディタでも編集できる

などなど、挙げたらきりがありません。自分はとくに、プログラム部分をemacsの色分けと同じにしてくれるのが気に入ってます。

ひとつ前のバージョンですが、有志の方々によるマニュアルの邦訳もありますので、emacs使いの人!お暇な時にでも挑戦してみてはいかがですかな?


ではまた次回!

個人で電子書籍を出版する為に私がした事。

Dropboxの仕様変更により、ダウンロードデータへのリンクが切れております。
ご不便をおかけして申し訳ありませんが、以下のリンクからダウンロードしてください。
ibooks

電子書籍を出版しました。

電子書籍を出版したんです!(大事な事なので二回言いました)


今やインストールされていない端末を探す方が難しいくらいに普及しているグラフィック技術「OpenGL」
CやC++でプログラミングしてやると、柔軟で非常に高速に動作する、まさにゲーム向けな技術なのですが…

なのですが!

C++でOpenGL2.0以降にも対応した参考書がなかなか見つからなかったので書いてみました!まずは2D描画機能に絞った16のチュートリアルを通して、OpenGLの仕組みを学んでみましょうね。という感じの「2D編」です。

あなたがゲーム制作を始めるきっかけになれば。

さて今回も先人たちのネットの情報にたいへんお世話になったので、そのお礼も込めて出版までの流れを自分なりにまとめてみました。もし「オレも出版するぜ!」と考えているあなたの助けになれれば幸いです。あ、私の環境はOSXですのでそのへん考慮して読んでみてください。

あなたが電子書籍で出版するきっかになれば。 


・原稿を用意
今回は、HTML+CSSで原稿を用意。『emacs+org-mode→html』という変態環境ですので詳細は割愛しますが、ごく簡単なタグの使用とcssによる構成と装飾を少し。自分の制作環境では、htmlに書き出す時に目次を自動的に生成してくれるので、
・Kindle版は目次あり
・iBooks版は目次なし
の設定で書き出しました。

・表紙
1500x2000 で作成
KindleはTIFF形式を要求されますよー。

・原稿をepub形式に変換
calibreというアプリを利用。大雑把な使い方はネットを探してみてください。
 
目次はこの設定で変換。
photo1

あと、自分の環境では強制的にh1タグによるタイトルが追加されてしまっていたので、それを除去するようにも設定。
photo2

・Kindle版
  本を右クリックして表示されるメニューから「書籍の調整」を選択
photo3

続いて「書類の分解」を選ぶと、epubとしてパッケージされたファイルの内容がFinderで表示されます。
photo4

そしたら、「content.opf」の内容の一番最後に、目次の情報を追記。

<guide>
  <reference href="目次のhtmlファイル" type="toc" title="Table of Contents"/>
</guide>

「目次のhtmlファイル」には適時目次のhtmlファイルを指定してください。それができたら、「書類の再構成」でepubに再パッケージします。
photo5

これで、Kindle用のepubファイルができました!実機やKindle Previewerなどで確認してみてください。

・iBooks版
フォント指定が有効になるよう、以下の名前のテキストファイルを作ります。
 
com.apple.ibooks.display-options.xml

内容
<?xml version="1.0" encoding="UTF-8"?>
<display_options>
<platform name="*">
<option name="specified-fonts">true</option>
</platform>
</display_options>

これを、書類を分解して、META-INFの中に放り込んで再構成。これでiBooks用のepubファイルができました!iTunesのブックに放り込んで、実機で確認するなりしてみてください。


・epubの正当性をチェック
ファイルを提出する前に、epubcheckを使ってepubの中にエラーが無いかチェックしておきましょう。配布されているファイルはJavaなので、ターミナルから
java -jar epubcheck-3.0.1.jar hoge.epub
こんな感じに実行してください。

・KDPに登録
ポータルはここ〜。クレジットカード必須?だったかな。銀行口座の情報とか登録します。
公式ヘルプが超充実してるのでよく読んでね。

それが済んだら自分の本棚の「新しいタイトルを追加」から先に進み、あとは必要項目を埋めるだけです。
photo6
現在ISBN無しでも出版できてしまうので、あとはアチョーっと提出すればオッケー!
Kindle版は提出後5、6時間でめでたく出版されました。早い。

・iBookstoreの場合
こちらが非常に参考になりました。
もし、AppleIDをiOSやOSXの開発ようアカウントとして使っている場合、そのアカウントは出版用には使えません。なので、新規にAppleIDを作り、さらにiTunesStoreで支払いの登録も行っておいてください。ちなみにGmailの「エイリアス機能」を使えば、新たにメールアドレスを作る必要はなくて

メインアカウント:  hoge@gmail.com
iOS開発アカウント: hoge+ios@gmailcom
出版用アカウント:  hoge+epub@gmailcom

と、「+」の後ろに適当な文字をくっつけたのは、いっけん別のメールアドレスながら、どの宛先に送ったメールも「hoge@gmail.com」に届くというナイスな仕様がございます(今回使ってみた)

んで、登録してiTunesConnectへログイン。KDPと同じく、銀行口座の情報とか諸々登録したら、専用アプリiTunes Producerからepubデータをアップロードして完了です。
photo7
 
iBooks版は現在レビュー中。ドキドキしますね!


オマケ

・EIN取得はこんな感じ
こちらこちらがたいへん参考になりました!

・「フォームW-8BEN」を提出
公式ヘルプに書いてあります〜
 
• 個人 -- 租税条約に基づく軽減税率の適用を求める場合 
• 法人 -- 租税条約に基づく軽減税率の適用を求める場合

この2つの例を見ながら書類を埋めましょう。

法人の場合はこんな感じ。個人の場合は

2 法人または組織のある国名
  空欄
3 受益者の種類
  Individualにチェック
9 私は以下を証明します(該当するものをすべて選択)
  aとbのみチェック

最後、署名者の資格
  オレはSelfと記入

※必ず種類上部の空白に「KDP出版者コード」を記入しておく事!

これをAmazon本社へ郵送。数日後にメールが届く…ハズ(現在進行中)

まあそんな感じで個人が手軽に出版できるなんて、いい時代になったもんです。


ではまた次回! 
記事検索
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『Puzzle & Monarch』
「君主候補となって国作り!! ただし制限時間は90秒。」森を作って道をつないで...あなただけの国を作ってみませんか??
⇒AppStore


『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
QRコード
QRコード
  • ライブドアブログ