ポンクソフト

テンプレートファイルの解説 - C言語とelで様々なゲームを作ろう

前ページ C言語とelで様々なゲームを作ろう TOP 次ページ

目次

  1. C言語とelで様々なゲームを作ろう
  2. Visual C++ .NET での設定
  3. テンプレートファイルの解説
  4. シューティングゲームの作成(チュートリアル)
  5. パックマン的ゲームの作成(チュートリアル)
  6. ブロック崩しの作成
  7. 15パズルの作成
  8. 横スクロールジャンピングゲームの作成
  9. オセロの作成
  10. 神経衰弱の作成
  11. 7ならべの作成
  12. テトリスの作成
  13. ぷよぷよの作成

解説

ソースファイルのひな型となる template.cpp の解説をします。

先頭部分

#include "el.h"
Easy Link Library を読み込んでいる部分です。
#define MAIN_SCREEN 1
el はタイトル画面、ゲームメイン画面、ゲームオーバー画面など、それぞれの画面を分けて管理する手法を取っています。ここではゲームメイン画面の定数を定義しています。
void MainScreen(void);
ゲームメイン画面を処理する関数のプロトタイプです。

メイン関数

プログラムを起動すると、このメイン関数が立ち上がります。メイン関数が終了すると、プログラムも終了します。
int elMain("タイトル");
引数にゲームのタイトルを書くと、ゲームをウインドウ表示した場合にこのタイトルが表示されます。
elWindow(640, 480, FALSE);
デフォルトではゲーム画面はフルスクリーンですが、この関数を書くとウインドウ表示されます。ウインドウのサイズは 640 × 480 ピクセルになります。3番目の引数を TRUE にすると、マウスの動きがウインドウ内に限定されます。
elLoop()
この関数がループをして、実際にアプリケーションが動作します。この中に画面を処理する関数を記述します。
elSetScreen(MAIN_SCREEN, MainScreen());
各画面を処理する関数に画面番号を割り当てます。第1引数に画面番号、第2引数に画面を処理する関数を記述します。
elExitMain();
メイン関数の後処理を行ないます。

ウインドウ生成関数

ウインドウが生成される直前に一度だけ呼び出される関数です。プログラムの初期化などをここで行ないます。
elDraw::Screen(640, 480);
画面の解像度を 640 × 480 ピクセルに設定しています。elWindow を使用する場合は、両方のサイズを統一してください。
elCallScreen(MAIN_SCREEN);
この関数は画面を引数で指定した画面番号に切り替える関数です。ここではゲームメイン画面へ切り替えています。

キーボード関数

void elKeyboard(void)
キーボードイベントを処理する関数です。ゲームの場合はイベントではなく直接キーの値を見に行く場合が多いので、この関数を書き換えることはあまりないと思います。

イベント関数

long elEvent(void)
イベントが発生すると呼ばれる関数です。特別なイベント処理をしたいときにここを使います。

メイン画面

void MainScreen(void)
ゲームのメインとなる部分です。画面番号で指定された画面関数が、ゲーム中は繰り返し呼び出されます。
elDraw::Clear();
画面全体を黒で初期化します。
SHOW(0, 0, "ESCキーで終了");
画面左上にメッセージを表示します。
elDraw::Refresh();
画面をリフレッシュします。実際のゲームでは elDraw::Clear から elDraw::Refresh の間にゲームの描画処理を行ないます。
前ページ C言語とelで様々なゲームを作ろう TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

このページに関するコメントをどうぞ

お名前:


kuv
このプログラムでは、連結判定の時はつながっているぷよごとに結合番号をつけ、消せる場合はelist配列の結合番号と同じ要素番号のところにフラグを立てる、という方法をとっています。
ですが、例えばぷよをわざとつながらないように置いていった場合、結合番号の最大数がelist配列の要素数をオーバーしてしまうのではないでしょうか?
それに対応するにはelist配列の要素数をフィールドの大きさと同じ6*13=78にしなければいけないと思うのですが、30にしているのには何か意図があるのでしょうか?
2017/07/11 14:52

しお
vectorではなくlistを使っているのはなぜなのでしょうか?
2017/05/07 19:06

surach
なぜ弾のX座標が sx = px + 24;で時機の中央になるんですか?
2017/05/05 11:09

何度やってもできないー^^
ファイルが見つかりませんとなるのですが・・・
どうすれば?
2017/01/20 17:23

ww
dxlibは外部から自分で導入するものです。しっかり導入しましたか?
2016/12/26 12:29

ww
IncludePathとLibraryPathはdxライブラリを導入したときのフォルダパスが間違っているため、dxlib.hがあるフォルダパスを設定しなおせば動きます。
2016/12/26 12:28

ww
MTdは、プロジェクトのプロパティの設定項目から変更できる。
Debugモードの設定が、違うようですね↓
2016/12/26 12:26

笑子
実行したところ、白い画面が出てきてしまいます。解決策は、あるのでしょうか?
2016/11/10 23:38


背景を挿入したいのですが,どこにどんな風にプログラムを加えればいいのでしょうか?
2016/09/24 21:44

華仙 学
オセロプログラムに関してです。
Visual Studio 2015を使ってます。このプログラムを打ち込んだところ、「'RuntimeLibrary'の不一致が検出されました。値'MTd_StaticDebug'がMDd_DynamicDebugの値'othello.obj'と一致しません」と出てしまいます。いろいろ調べていますがなかなか解決しません。何か解決策はあるでしょうか?
2016/08/17 21:12

残りを読む »