「ゲームプログラマになる前に覚えておきたい技術」読み始めました
1章の荷物君を作ってみました。かかった時間は1時間10分
#include <iostream> using namespace std; const int STAGE_HEIGHT = 5; const int STAGE_WIDTH = 10; char gameStage[STAGE_HEIGHT][STAGE_WIDTH] = { "########\n", "# .. #\n", "# oo #\n", "# #\n", "########\n" }; char input() { char c; cin >> c; return c; } void moveO(int x, int y) { if(gameStage[y][x]=='.') gameStage[y][x] = 'O'; else gameStage[y][x] = 'o'; } void deleteO(int x, int y) { gameStage[y][x] = ' '; } bool isComplate() { int numO = 0; for(int i=0; i<STAGE_HEIGHT; i++) { for(int j=0; j<STAGE_WIDTH; j++) { if(gameStage[i][j] == 'O') numO++; } } if(numO == 2) return true; else return false; } class PLAYER { public: PLAYER(int xStart = 4, int yStart = 1) { x = xStart; y = yStart; } void moveP(char c) { switch(c) { case 'w': //上 //移動方向に 'o' があり、その先は' 'か'.' if(gameStage[y-1][x]=='o' && gameStage[y-2][x]!='o' && gameStage[y-2][x]!='#') { y--; deleteO(x, y); moveO(x, y-1); } else if(gameStage[y-1][x]==' ' || gameStage[y-1][x]=='.') { y--; } break; case 's': //下 //移動方向に 'o' があり、その先は' 'か'.' if(gameStage[y+1][x]=='o' &&gameStage[y+2][x]!='o' && gameStage[y+2][x]!='#') { y++; deleteO(x, y); moveO(x, y+1); } else if(gameStage[y+1][x]==' ' || gameStage[y+1][x]=='.') { y++; } break; case 'a': //左 //移動方向に 'o' があり、その先は' 'か'.' if(gameStage[y][x-1]=='o' && gameStage[y][x-2]!='o' && gameStage[y][x-2]!='#') { x--; deleteO(x, y); moveO(x-1, y); } else if(gameStage[y][x-1]==' ' || gameStage[y][x-1]=='.') { x--; } break; case 'd': //右 //移動方向に 'o' があり、その先は' 'か'.' if(gameStage[y][x+1]=='o' && gameStage[y][x+2]!='o' && gameStage[y][x+2]!='#') { x++; deleteO(x, y); moveO(x+1, y); } else if(gameStage[y][x+1]==' ' || gameStage[y][x+1]=='.') { x++; } break; default: break; } } void displayP() const { for(int i=0; i<STAGE_HEIGHT; i++) { for(int j=0; j<STAGE_WIDTH; j++) { if(i==y && j==x) { cout << 'p'; } else if(gameStage[i][j] != '\0') { cout << gameStage[i][j]; } } } } private: int x; int y; }; int main() { PLAYER player; player.displayP(); while(true) { char c = input(); player.moveP(c); player.displayP(); if(isComplate() == true) { cout << "Good!"; break; } } //ストッパー while(true); return 0; }
良かった点 : 1時間程度で作成できた、衝突判定と応答が正しく実装されている。
悪かった点 : 拡張性がない。
あとは、STAGEクラスを作って荷物とプレイヤーを管理させると良かったかもしれません。
参考書籍
- 作者: 平山尚(株式会社セガ)
- 出版社/メーカー: 秀和システム
- 発売日: 2008/11/15
- メディア: 単行本
- 購入: 112人 クリック: 3,473回
- この商品を含むブログ (193件) を見る