サンプルに学ぶ

サンプルプログラムを表示する

Fig.1 プログラムファイル

ウィンドウにて、hello_worldフォルダを開いて下さい。
次に、sourceフォルダを開いて下さい。
アイコンに、".C++"とあるmain.cppというファイルがありますが、これがhello_worldのプログラムの書かれたファイルです。(Fig.1)



Fig.2 プログラムの中身

このmain.cppをダブルクリックして下さい。
Xcodeが立ち上がり、main.cppの内容が表示されます。(Fig.2)
ここで、プログラムの意味を1つ1つ見ていきましょう。

Fig.1 プログラムファイル

ウィンドウにて、hello_worldフォルダを開いて下さい。
次に、sourceフォルダを開いて下さい。
アイコンに、".C++"とあるmain.cppというファイルがありますが、これがhello_worldのプログラムの書かれたファイルです。(Fig.1)



Fig.2 プログラムの中身

このmain.cppをダブルクリックして下さい。
Xcodeが立ち上がり、main.cppの内容が表示されます。(Fig.2)
ここで、プログラムの意味を1つ1つ見ていきましょう。

ページトップへ

プログラムを理解する

#include <nds.h>
#include <stdio.h>
この2行は、外部ファイルの読み込みです。
nds.hとstdio.hという「ヘッダーファイル」を読み込んでいます。
ヘッダーファイルというのは、いろいろな宣言や定義が記述されています。
プログラムが小さいうちはプログラムの中に記述していても良いのですが、プログラムが大きくなると管理が面倒になるため、別ファイルとして保存し、それを読み込むようにするのが常套手段となっています。
別ファイルのため使い回しができるので、多くの恩恵を受けることができるでしょう。
映画「マトリックス」で、ヘリコプターの操縦法をダウンロードするシーンがありましたが、イメージはそんな感じです。
DSソフトを開発するためにはDS用の定義が記述されているnds.hが必要ですし、標準的な入出力命令をはじめとするC言語の基本命令に関する情報が含まれているstdio.hも必要です。
例えば、三角関数など算術演算を行いたい場合は、math.hを読み込むことで使用できます。

volatile int frame = 0;
ここでは、frameという変数を宣言し、その内容を0にしています。
C言語では命令の終わりには";"を付けることになっています。

void Vblank() {
  frame++;
}
いわゆる「割り込み処理」というもので、この処理が行われるたびに変数frameの内容が1増えていきます。

int main(void) {
メインプログラムの開始です。

touchPosition touchXY;
ヘッダーファイルnds.hの恩恵の1つです。
このように記述することで、DSのタッチペン入力が可能となります。

irqSet(IRQ_VBLANK, Vblank);
画面の垂直同期が終了すると呼び出される割り込みです。 VBLANK割り込みは1/60秒毎に発生し、先ほどのframe++の処理をします。

consoleDemoInit();
画面の初期化です。
表示する前に画面をキレイにしています。

iprintf(" Hello DS dev'rs\n");
iprintf(" \x1b[32mwww.devkitpro.org\n");
iprintf(" \x1b[32;1mwww.drunkencoders.com\x1b[39m");
ヘッダーファイルstdio.hの恩恵の1つです。
この3行で3行の文字列を表示します。
\x1b[32mで文字を緑色にすることができます。
背景色の指定も可能ですが、ここでの説明は省きます。
while(1) {
 処理
}
{}で囲まれた処理を繰り返すのですが、どのような条件で繰り返すのかを()内で指定します。
条件は主に数式で記述されるのですが、その数式が成り立つ場合は真、成り立たない場合は偽と表現されます。
数字的に偽は0、真は0以外の値を取ります。
条件が1というのは常に真(非ゼロ)であるため無限ループとなります。

swiWaitForVBlank();
タイミングを計るために必要な処理で、DSの処理速度を減速させます。(垂直同期を待ちます)

touchRead(&touchXY);
この行でタッチスクリーンのタッチ座標を取得します

iprintf("\x1b[10;0HFrame = %d",frame);
\x1b[10;0Hで10行0文字目にカーソルを移動し、"Frame ="を表示し、その後ろに変数frameの内容を整数表示します。

iprintf("\x1b[16;0HTouch x = %04X, %04X\n", touchXY.rawx, touchXY.px);
iprintf("Touch y = %04X, %04X\n", touchXY.rawy, touchXY.py);
\x1b[16;0Hで16行0文字目にカーソルを移動し、"Touch ="を表示し、その後ろに先ほど取得したタッチ座標のX座標を16進数で表示します。
\nがあるので改行され、X座標と同様、Y座標の情報も表示されます。

ざっと、こんな感じです。
次回は、このサンプルプログラム(hello_world)に手を加えていろいろ遊んでみましょう。

ページトップへ

価格.com 自動車保険 一括見積り


DHCオンラインショップ



VeryCardネット電報