DXライブラリPortable v0.5.7 UTF8版 サンプルプログラム UTAUスライドショウNEO
こちらのソースコードは、全角の空白文字も使用しています。
たくさん勉強したい方は、このページを お気に入りに登録しておくといいかもです


main.c
  1. // DXライブラリPortable v0.5.7 UTF8版 サンプルプログラム
  2. // 音楽を鳴らしながら画像を4枚切り替え表示します
  3. // 終了はLトリガー押しです
  4. //
  5. // 制作:猫山猫宗 2012/01/09(月)
  6. //
  7. // これは BSDライセンスとします
  8.  
  9. #include <dxlibp.h>
  10. #include "COLORS.H"
  11.  
  12. #define MAX_GRAPHIC  4 // 使用する画像の枚数(4枚)
  13.  
  14. #define MP3_FILE "BGM.mp3" // BGMで鳴らすMP3
  15.  
  16. #define MP3_EXIST   1 // BGM.mp3 ファイルがある
  17. #define MP3_NOT_EXIST 0 // BGM.mp3 ファイルが無い
  18. /*****************************************************************************
  19. * 関数の登録(「関数」と「サブルーチン」は同じ意味です)
  20. *****************************************************************************/
  21. int initton(void);
  22. void ScreenSettings(void);
  23. int GraphicChecker(void);
  24. void mp3checker(void);
  25. int main(int argc, char *argp[]);
  26. void action(void);
  27. void games(void);
  28. void games_finish(void);
  29. /*****************************************************************************
  30. * グローバル変数
  31. *****************************************************************************/
  32. int Graph_handle[MAX_GRAPHIC+1]; // 画像のハンドル
  33. int mp3_handle;  // 音楽のハンドル
  34. int flag_mp3;   // 音楽ファイルがあれば MP3_EXIST
  35.  
  36. const char *Graph_filename[]={
  37.   "./0001.png",   // 00 ねんぷちデフォ子さん画像
  38.   "./0002.png",   // 01 ねんぷち重音テトさん画像
  39.   "./0003.png",   // 02 ねんぷち桃音モモさん画像
  40.   "./0004.png"    // 03 ねんぷち初音ミクさん画像
  41. };
  42. /*****************************************************************************
  43. * もじゅ〜る・いんふぉ / メインコードはユーザモード
  44. *****************************************************************************/
  45. PSP_MODULE_INFO("SLIDESHOW", PSP_MODULE_USER, 1, 0);
  46. PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
  47. PSP_HEAP_SIZE_KB(16*1024);
  48. PSP_MAIN_THREAD_STACK_SIZE_KB(512);
  49. /*****************************************************************************
  50. * main
  51. *****************************************************************************/
  52. int main(int argc, char *argp[])
  53. {
  54.   int result; // 結果
  55.   
  56.   DxLib_Init(); // DXライブラリPortable初期化
  57.   
  58.   result = initton(); // プログラム初期化
  59.   
  60.   if(result == 0) {
  61.     // 初期化成功(正常時)の時だけ action()関数を実行
  62.     action();
  63.   }
  64.   else {
  65.     // 初期化失敗(エラー時)↓
  66.     DrawBox(0,0,480,272,DXP_COLOR_RED,TRUE); // 赤色画面
  67.     DrawFormatString(0,100,DXP_COLOR_WHITE
  68.             ,"画像を%d枚 読み込めなかったので終了します",result);
  69.     DrawFormatString(0,140,DXP_COLOR_WHITE,"何かボタンを押して下さい");
  70.     ScreenFlip(); // 表示
  71.   
  72.     do  { // 何か押されるまで待つ do 〜 while
  73.       ProcessMessage();
  74.     }while(CheckHitKeyAll() == 0);
  75.   }
  76.   
  77.   DxLib_End();
  78.   return(0);
  79. }
  80.   
  81. /*****************************************************************************
  82. * グラフィック画面の設定などの関数
  83. *****************************************************************************/
  84. void ScreenSettings()
  85. {
  86.   SetDisplayFormat(DXP_FMT_8888);     // 画面のピクセルフォーマットを32Bit色モードに
  87.   SetWaitVSyncFlag(TRUE);         // 画面更新の際、垂直同期待ちをしてから行なう様に
  88.   SetDrawArea(0,0,480,272);        // 描画可能領域を全領域に設定
  89.   SetDrawMode(DX_DRAWMODE_NEAREST);    // 描画モードを高速なNEARESTにセットする
  90.   SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);// 描画の際のブレンドモードを、標準モードに
  91.   SetDrawBright(255,255,255);       // 描画する色の輝度を最大に
  92.   SetGraphMode(480, 272, DXP_FMT_8888);  // フル画面サイズ & 32Bit色モード
  93.   ClearDrawScreen();           // 描画先のグラフィックスをクリアする
  94.   
  95.   ChangeFontType(DX_FONTTYPE_NORMAL);   // エッジ無しノーマル文字にする(IntraFont)
  96. }
  97. /*****************************************************************************
  98. * 画像ファイル・チェッカー関数
  99. *
  100. * この関数は画像を1枚でも読み込めなかった場合プログラムを終了してしまいます
  101. *
  102. *****************************************************************************/
  103. int GraphicChecker()
  104. {
  105.   int i;
  106.   int errors;
  107.   
  108.   errors = 0;
  109.   for(i=0; i<MAX_GRAPHIC; i++) {
  110.     Graph_handle[i] = LoadGraph(Graph_filename[i]);
  111.     DrawBox(0,0,480,272,DXP_COLOR_BLUE,TRUE); // 青色画面
  112.     DrawFormatString(0,100,DXP_COLOR_WHITE,"%d 番目 %s",i,Graph_filename[i]);
  113.     DrawFormatString(0,140,DXP_COLOR_WHITE,"LoadGraph の ハンドル=%d",Graph_handle[i]);
  114.     if(Graph_handle[i] != -1) // 読み込み成功の場合
  115.       DrawFormatString(0,180,XVI_COLOR_YELLOW,"読み込み成功!");
  116.     else {
  117.       DrawFormatString(0,180,DXP_COLOR_RED,"読み込み失敗!");
  118.       ++errors;
  119.     }
  120.     ScreenFlip(); // 表示
  121.     Sleep(800); // 800ミリ秒だけ停止
  122.   }
  123.   
  124.   return( errors ); // エラー数を返り値に(読み込めなかったファイル数)
  125. }
  126.   
  127. /*****************************************************************************
  128. * mp3ファイル・チェッカー関数
  129. * 
  130. *  この関数を呼び出すと、次の変数にmp3音楽の状態が入ります
  131. *  変数名 flag_mp3
  132. *      値:MP3_EXIST・・・・・mp3ファイルが在った場合
  133. *      値:MP3_NOT_EXIST・・・mp3ファイルが無い場合
  134. *****************************************************************************/
  135. void mp3checker()
  136. {
  137.   // まずは 全てのサウンドハンドルを削除します
  138.   InitSoundMem();
  139.   
  140.   // 音楽をメモリに読み込んでから再生するモード
  141.   SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS);
  142.   // ストリーミング再生モード(チョイ読みしながら再生)は "DX_SOUNDDATATYPE_FILE"
  143.   
  144.   
  145.   // 読み込みのメッセージ
  146.   DrawBox(0,0,480,272,DXP_COLOR_GREEN,TRUE); // 緑色画面
  147.   DrawFormatString(60,120,DXP_COLOR_WHITE,"音楽ファイル読み込みます");
  148.   ScreenFlip(); // 表示
  149.   
  150.   // 再生させる音声ファイルを指定します(mp3ファイルを用意してね)
  151.   if((mp3_handle = LoadSoundMem(MP3_FILE)) == -1)
  152.     flag_mp3 = MP3_NOT_EXIST; // ないよ
  153.   else
  154.     flag_mp3 = MP3_EXIST; // あるよ
  155.   
  156.   // パンを中央に設定します
  157.   if(flag_mp3 == MP3_EXIST)
  158.     SetPanSoundMem( 0, mp3_handle);
  159.   
  160.   DrawBox(0,0,480,272,DXP_COLOR_BLACK,TRUE); // 黒色画面
  161.   ScreenFlip(); // 表示
  162. }
  163.   
  164. /*****************************************************************************
  165. * 初期化専門サブルーチン
  166. *****************************************************************************/
  167. int initton(void)
  168. {
  169.   ScreenSettings(); // グラフィック画面の設定など
  170.   
  171.   // エッジ無しノーマル文字にする(IntraFont)
  172.   ChangeFontType(DX_FONTTYPE_NORMAL);
  173.   
  174.   // mp3音楽チェッカー
  175.   mp3checker();
  176.   
  177.   // 画像ファイル・チェッカー関数の返り値を得て、それを返り値として復帰
  178.   return( GraphicChecker() );
  179. }
  180.   
  181. /*****************************************************************************
  182. * アクション・サブルーチン
  183. *****************************************************************************/
  184. void action(void)
  185. {
  186.   games(); // ゲームサブルーチン
  187.   games_finish(); // ゲーム終了サブルーチン
  188. }
  189.   
  190. /*****************************************************************************
  191. * ゲームサブルーチン
  192. *
  193. * まず 音楽再生をして画像を描画(4枚を切り替え表示)繰り返し
  194. *  Lトリガを押すと、この関数から抜ける事が出来ます
  195. *
  196. *****************************************************************************/
  197. void games(void)
  198. {
  199.   int num,waits;
  200.   
  201.   // 音楽ファイルがある場合のみ、ループで音楽再生させる
  202.   if(flag_mp3 == MP3_EXIST)
  203.     PlaySoundMem( mp3_handle, DX_PLAYTYPE_LOOP, TRUE);
  204.   
  205.   num=0;
  206.   while(1) { // 無限ループっぽい
  207.     for(waits=0; waits<60; ++waits) { // 結局、1秒待つ事になります
  208.   
  209.       // 画像描画
  210.       DrawGraph( 0,0,Graph_handle[num],FALSE );
  211.   
  212.       // 音声が出ない場合のメッセージ
  213.       if(flag_mp3 != MP3_EXIST)
  214.         DrawFormatString(300, 190,DXP_COLOR_BLUE,"音声ファイル無いよ〜");
  215.   
  216.       // 「Lトリガー押しで終了」を表示
  217.       DrawFormatString(300, 220,DXP_COLOR_BLACK,"Lトリガー押しで終了");
  218.   
  219.       ScreenFlip(); // 画面表示&垂直同期信号を待つ(1/60秒)
  220.   
  221.       ProcessMessage(); // パッド読み込み本体
  222.       if(GetInputState()==DXP_INPUT_LTRIGGER)
  223.         return; // Lトリガ押されるとループを抜ける
  224.     }
  225.   ++num; // 画像切り替え
  226.   if(num==4) num=0; // numは 0〜3 になる。
  227.   };
  228. }
  229.   
  230. /*****************************************************************************
  231. * ゲーム終了サブルーチン
  232. *
  233. * 使用した画像ハンドルと音声ハンドルを削除します
  234. *
  235. *****************************************************************************/
  236. void games_finish(void)
  237. {
  238.   int num; // インデックス
  239.   
  240.   // 音楽ファイルがある場合のみ、カッコ内を実行
  241.   if(flag_mp3 == MP3_EXIST) {
  242.     // 音楽再生を終え、音楽ハンドルの再生を停止します
  243.     StopSoundMem( mp3_handle );
  244.     // 終わったので、サウンドハンドルを削除します
  245.     DeleteSoundMem( mp3_handle );
  246.   }
  247.   
  248.   // 画像ハンドルを全部削除します
  249.   for(num=0; num<MAX_GRAPHIC; ++num) {
  250.   DeleteGraph(Graph_handle[num]);
  251.   }
  252. }



Makefile
  1. TARGET = SLIDESHOW
  2. OBJS = main.o
  3.  
  4. PSPSDK=$(shell psp-config --pspsdk-path)
  5. INCS = $(PSPSDK)/include $(PSPSDK)/DXP_v0.5.7/include
  6. INCDIR = $(INCS)
  7.  
  8. CFLAGS = -Wall -G0 -O3 -fomit-frame-pointer -mgp32 -mlong32
  9.  
  10. CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
  11. ASFLAGS = $(CFLAGS)
  12.  
  13. PSP_FW_VERSION=300
  14.  
  15. BUILD_PRX = 1
  16. #ENCRYPT = 1
  17.  
  18. LIBDIR = $(PSPSDK)/DXP_v0.5.7/lib
  19. LDFLAGS =
  20. LIBS = $(PSPSDK)/DXP_v0.5.7/lib/dxlibp_UTF8.a
  21. #LIBS = $(PSPSDK)/DXP_v0.5.7/lib/dxlibp.a
  22. LIBS += -lpspgu -lz -lm -lpsprtc -lpspaudio -lpspaudiocodec\
  23.     -lpsputility -lpspvalloc -lpsppower
  24.  
  25. EXTRA_TARGETS  = EBOOT.PBP
  26. PSP_EBOOT_TITLE = UTAU SLIDESHOW DXP
  27. PSP_EBOOT_ICON  = ICON0.png
  28. PSP_EBOOT_ICON1 = NULL
  29. PSP_EBOOT_UNKPNG = NULL
  30. PSP_EBOOT_PIC1  = NULL
  31. PSP_EBOOT_SND0  = NULL
  32.  
  33. PSPSDK=$(shell psp-config --pspsdk-path)
  34. include $(PSPSDK)/lib/build.mak
  35.  
  36. # 以下、任意で(開発しているソースに依存)
  37. main.o     : main.c