この講座では、ライブラリとして
SDL
を用います。
このライブラリは、特徴としてWindowsおよびUNIX互換のOSで動くマルチメディ
アライブラリです。 ただ、ライセンスがLGPLであるので、ソースコードなどが
基本的にオープンソースでなければならないです。(詳しいことは、googleなど
でLGPLなどと検索して、LGPLの翻訳文章を読んでみてください)
などを読んでみてください)。
使用する言語は、C言語です。Windowsの環境の方
(多くの方がこれに該当するでしょう)は環境としてVisual C++を対象とします。
UNIXの方は、GCC(+make)を対象とします。
なお、著者はGCCで開発を行っていますので、基本的に、UNIXよりの解説になり
ます。
SDLのインストールの方法を、以下の様に簡単に示しますが
ここ
のサイトなどを参考にしてもよいと思います。
rpm -Uvh ファイル
tar xzvf ファイル名
解凍してできたディレクトリに移動して
./configure
make
make install(rootで)
とすればインストールできます。
#include "SDL.h" /* 全てのSDLアプリケーションで必要です */
#include
int main() {
printf("SDLの初期化をしています。\n");
/* ビデオとオーディオ、それからデフォルトのサブシステムを初期化 */
if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
printf("SDLの初期化ができませんでした: %s.\n", SDL_GetError());
exit(-1);
}
printf("SDLの初期化が完了しました。\n");
printf("SDLを終了しています。\n");
/* 全てのサブシステムをシャットダウンします */
SDL_Quit();
printf("終了します....\n");
exit(0);
}
コンパイルの方法は
メイン関数で
初期化の処理
while(1){
画面の消去
イベントの処理(ボタンが押されたなど)
毎秒の更新処理
描画や、音を再生
時間をつぶす(sleepなどで)
}
このような形になっています。
これで、自発的な活動をするプログラムを作成することができます。
/***************************************************
ビットマップを読み、引数のサーフェスに設定する
*************************************************/
int set_surface_bmp(char *file, SDL_Surface **bmp){
SDL_Surface *surface;
surface = SDL_LoadBMP(file);
if(surface == NULL) {
printf("Can't read file: %s\n", SDL_GetError());
return 1;
}
if(SDL_SetColorKey(surface, SDL_SRCCOLORKEY, SDL_MapRGB(surface->format,255, 0, 0)) < 0)
{
printf("Can't to set color key : %s\n", SDL_GetError());
return 1;
}
*bmp = SDL_DisplayFormat(surface);
if(bmp == NULL) {
printf("can't encoded surface: %s\n", SDL_GetError());
return 1;
}
SDL_FreeSurface(surface);
return 0;
}
このような関数を宣言しておき、以下の様にすることでSDLでは
画面にビットマップを表示することができます。
SDL_Surface *bmp1;
set_surface_bmp("input.bmp",&bmp1);
SDL_BlitSurface(bmp1,NULL,screen,NULL);
SDL_BlitSurfaceの引数はマニュアルでしらべてみるとよいでしょう。
/*******************************************************
メインのイベント処理関数
********************************************************/
void TranscateEvent(SDL_Event * event){
while( SDL_PollEvent( event ) ){
switch( event->type ){
case SDL_VIDEOEXPOSE:
SDL_Flip(screen);
break;
case SDL_QUIT:
printf("アプリケーションを終了します\n");
exit(0);
break;
/* キーが押されたかどうかチェック */
case SDL_KEYDOWN:
event_keydown_transcate(event);
break;
case SDL_KEYUP:
event_keyup_transcate(event);
break;
}
}
}
このような関数を宣言し、イベントを処理します。
while(1){
//イベントの処理
TranscateEvent(&event);
//画面のクリア
SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,255));
//背景の描画
SDL_BlitSurface(background2,NULL,screen,NULL);
SDL_BlitSurface(background,&TEST2,screen,&TEST);
//ボールの描画
DrawBallSurf(sBall,sPlayer);
//自機の描画
DrawPlayerSurf(sPlayer);
////壁の描画
DrawWallSurf();
//画面更新
SDL_Flip(screen);
SDL_Delay(16);
}
これは、ブロック崩しのメインのループですが、描画のところをてきとうに補間
してやれば、すでにゲームプログラムとして、十分でしょう。
コンピュータでネットワークプログラミングをする方には必読ともいえるような 本です。ゲームを作成する上で今後ネットワークはきっても切れない縁ですので 勉強しておいて損はないでしょう
この本は、いわゆるヘネパタ本の翻訳本です。コンピュータアーキテクチャの基 礎が学べます。コンピュータの中身を見てみたいひと向けです。
UNIXプログラミング環境 ISBN: 4871483517この本は、はっきりいって、ゲームプログラミングにはかけらも役に立たないで しょう。ですが、この本の内容自体は素晴らしく、どのようにプログラムは作る べきかというような考え方を身に着けることができるのでおすすめしてみました。 ただ、非常に入手困難らしいので、見付けたらすぐかわないと二度と手に入らな いかもしれません
C言語による最新アルゴリズム事典 ISBN: 4874084141この本は、アルゴリズムの本というより、なんとなく眺めて面白いことが書いて あったら使ってみるというような感じで使う本だと思います。 索引も付いていて、クイックソートしたいときとかには探してソースコードを見 ると言ったような使いかたがお薦めです。面白い、アルゴリズムも載っていたり するので、ゲームのプログラムにもきっと参考になるでしょう。
定本Cプログラマのためのアルゴリズムとデータ構造 ISBN: 4797304952この本は、普通にアルゴリズムとデータ構造を勉強できる本です。
シューティングゲームアルゴリズムマニアックス ISBN: 4797327316お薦めの本の中で唯一ゲームプログラミングの本です。この本はシューティング ゲームのアルゴリズムが大量に載っていて、それをいかに実装すればよいかが詳しく 書かれており、実におもしろい本です。初心者にも十分勧めることができる本で す。
著者: さくらんぼ