私はプログラミングを独学で勉強しており、素人ながら日常生活や仕事で使うための簡単なプログラムを書いています。近頃、もっと綺麗で制御しやすいコードを書けるようになりたい、と思うようになり、オブジェクト指向プログラミング(OOP)に興味を持ちました。手探りながら、classやオブジェクトを作って制御することを意識しながらプログラミングしています。
しかし、手探りの上、周りにプログミングをやる人が全くおらず、OOPにおける一般的な作法が分からなかったり、自分のやっている実装のどこが悪く、どこから直せばよいか、などが分からず、困っています。
そこで、先ほど、JavaScriptでRPGゲームのプログラムを作ることを想定して、ゲームに出てくるclassやオブジェクトのひな型のようなものを書いてみました。
完全に即席な上、省略ばかりでほんの導入部分を書いただけですが、クラスの設計や実装の考え方について、コメントをいただけないでしょうか?
コードは以下になります。
ご回答よろしくお願い致します。
javascript
1//map_listゲームのマップデータが入ったオブジェクト 2const map_list = { 3 //key:場所の名前,value:マップの座標 4 //0:何もない空間,1:壁、2:出口,3:人間 5 "村の自宅": [ 6 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 7 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 8 [1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 9 [1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1], 10 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 11 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 12 ], 13 "自宅の外の村全体": [ 14 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 15 [1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], 16 [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], 17 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2], 18 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1], 19 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 20 ], 21 "魔王の城": [ 22 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 23 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 24 [1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1], 25 [1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1], 26 [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 27 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 28 ] 29 //以下同様 30} 31 32class Game { 33 constructor() { 34 /* Gameクラスの各プロパティ */ 35 //現在のゲームモード: 0:フィールドモード、1:バトルモード、2:ミニゲームモード 36 this.mode = 0; 37 38 //フィールドモードオブジェクト 39 this.fieldMode = { 40 41 //プレイヤーがいる場所を格納する変数(初期値は村の自宅) 42 this.place = "村の自宅", 43 //プレイヤーがどこにいるかを示す座標(初期値は村の自宅の左片隅の(1,1)座標) 44 this.site = map_list["村の自宅"][1][1], 45 46 //プレイヤーの持ち物(初期値は木の枝1コと美味しいアメ3コ) 47 this.belongings = new Map([ 48 ["木の枝": 1], 49 ["美味しいアメ": 3] 50 ]), 51 52 setup(_saveData) { 53 //セーブデータをもとにゲームをセットアップ 54 this.place = _saveData.fieldMode.place; //場所情報をロード 55 this.site = _saveData.fieldMode.site; //位置情報をロード 56 this.belongings = _saveData.fieldMode.belongings; //持ち物をロード 57 //以下同様 58 }, 59 60 start(){ 61 //マップの画像や操作画面を作成する処理 62 } 63 64 } 65 66 67 this.battleMode = { 68 //バトルモードでのゲームのオブジェクトを記述 69 setup(_saveData) { 70 //セーブデータをもとにゲームをセットアップ 71 }, 72 start(){ 73 //操作画面を作成する処理 74 } 75 76 }; 77 this.miniGameMode = { 78 //ミニゲームでのゲームのオブジェクトを記述 79 setup(_saveData) { 80 //セーブデータをもとにゲームをセットアップ 81 }, 82 start(){ 83 //マップの画像や操作画面を作成する処理 84 } 85 86 }; 87 } 88 89 start() { 90 const saveData = this.load();//セーブデータを読み込む 91 92 if (saveData) { 93 this.fieldMode.setup(saveData); 94 this.battleMode.setup(saveData); 95 this.miniGameMode.setup(saveData); 96 console.log(`おかえりなさい!`); 97 98 //ゲーム開始時はフィールドモードからスタート 99 this.filedMode.start(); 100 101 } else { 102 console.log(`はじめまして!ゲームの世界にようこそ!`); 103 104 //ゲーム開始時はフィールドモードからスタート 105 this.filedMode.start(); 106 } 107 108 } 109 110 //セーブデータを作り、JSONファイルとして出力 111 save() { 112 //セーブの処理 113 } 114 115 //ブラウザ上のHTML要素にドラッグ&ドロップされたセーブデータのJSONファイルを読み込み、パースして返す関数 116 load(){ 117 let saveData;//セーブデータをパースする変数 118 //なんらかの処理 119 120 return saveData; 121 } 122 123 124} 125 126 127 128 129//make instant 130const myGame = new Game(); 131//game start 132myGame.start();
回答3件
あなたの回答
tips
プレビュー