このフォーラムでは仕様と実装(実装を引き合いにだす事)を
完全に分離して論じる必要があるんですね。私の"前提"が間違っていました、すみません。
softya (ソフト屋) さんが書きました:
数値なら一般Widnowsの処理系ならint型で4バイトですが、文字列なら4バイトを確実に超えます。
つまり文字列のほうが情報量が多くなる→検索などが遅くなるんです。
あと今持っているアイテムをアイテム番号を格納した数値配列で管理できますので、文字列で管理するよりはるかに楽です。
これはファミコン時代から行われている手法ですね。
softya (ソフト屋) さんが書きました:
テーブルは構造体配列のことですね。
アイテム番号で直接アイテム情報の入った構造体から情報(名前やら値段やらを)を取り出すことが出来ます。
と言っているのですがこれは仕様レベルの話なんでしょうか、それとも実装を引き合いにだしているんでしょうか。
配列や構造体が特定の言語の言語機能とは関係のない理論や概念の類である場合、仕様レベルの話ということになるでしょうか。
私の方も
hjkl さんが書きました:
文字列で管理する場合、連想配列をつかうと思うんですが操作は一緒ですよね。添字が数値か文字列かというだけで。
という発言をしましたがこれも特定の言語機能については言及していないので仕様レベルの話ということでいいでしょうか?
これらが仕様レベルでも実装レベルでもsoftya (ソフト屋)さんと私は同じレベルの話をしている箇所があることがわかります。
そのあとに特定の言語で連想配列を使うためのライブラリを紹介しました。
hjkl さんが書きました:
c++ならstd::mapとかstd::unordered_map(c++11)を使えばいいのでむりにファミコン時代の手法を使う必要はないと思います。
その後softya (ソフト屋)さんが
softya (ソフト屋) さんが書きました:
ゲームだと開発途中でアイテム名とかをよく変更したりアイテム名が仮名だったりするので、名前を変え易くすると言う意識が高いんでenumなどの内部名で管理しているってのはありますね。
C++だとそれこそ使い勝手考えてアイテムをクラスオブジェクトにした方が良いかもしれません。
ただセーブするときにアイテム情報までセーブされてしまうとバランス調整に支障が出るので単にシリアライズされると困るんですよね。なので、やはりアイテム名かアイテム番号が適切になります。
と言うことで、終了ど間際で絶対アイテム名を変更しないならアイテム名でセーブしても良いと思いますが、変更する可能性があるならアイテム名は避けたほうが良いと思います。
enumやクラス等、特定の言語機能(pythonやrubyではenumはありません、C言語を使うことを想定しているんだということでしたら
私の方もC言語で代替可能な話をしています)をまじえて説明をしたのと
ISLeさんが
ISLe さんが書きました:
おなかを壊す「きのこ」と、体力を回復する「きのこ」、見た目で区別できない同名アイテムを作りたくなったらどうしましょう。
さらに、あるスキルを身に付けると前者は「どくきのこ」と表示されるようにしたくなったらどうしましょう。
連番付けておいたなら何の問題もないですね。
と言われたのでenumはstringに、構造体配列を連想配列に置き換えても目的の動作を可能にできるということを
ご理解なさっておられないと思い、私の方も擬似コードをまじえて説明致しました。
これが実装レベルの話とうことになるんでしょうかね。
enum + テーブル版とstring + map版(それぞれenumとstringを数値配列、string配列。テーブルとmapを構造配列と連想配列とするべきでしたね)
をみていただければ一つの仕様に対して複数の実装、又は目的の動作に対して複数の仕様が存在するということがお分かりいただけたでしょうか。
動画や音楽を保存するコーデックにも複数のエンコーダ/デコーダの仕様、それに対する複数の実装が存在するのと同じです。
ゲームのように抽象度の高いメディアの場合、目的の動作にたいする仕様、実装は多岐にわたるとおもわれます。
ソースコード等は一部の先進的な企業や個人が公開するのみなので仕様や実装に関する議論を
アマチュア間(自称ゲーム業界人含む)で行うことは有意義であると考え発言いたしました。またこの掲示板もそのような趣旨が含まれていると考えていました。
「そーゆーとこじゃないよ」というのでしたら"前提"が違いましたね。すみません。
ISLe さんが書きました:わたしのほうも前提が違ってますね。
ここまでわたしは仕様レベルの話をしてて、実装レベルの話はしてなかったのですけどね。
そもそもISLeさんは私の仕様ないし実装にたいしてデスマーチ仕様と決め付けミスリードした発言と
職場上の体験談のような事しか発言していない気がするのですが...。
softya (ソフト屋) さんが書きました:
ここらへんはゲーム専業の人と一般アプリの専業の人では感覚が違うんでしょう。
ゲームデザイン(ゲームプランナー)担当は最後の最後まで名称とかこだわりますから"うかつ"に名前を固定には出来ません。
ただ、個人開発者なら違う感覚で開発しているのもいるかも知れませんが。
ISLe さんが書きました:
何かモノを作るときはコードネームとか仮の名を付けたほうがカッコイイと思うのですよ。
変更に強い仕様だと、開発中にもいろいろ遊べるんですよね。
これは本題とは関係ないんですが
このsoftya (ソフト屋)さんとISLeさんの一連の発言はどういった意図があったんでしょうか。
ゲーム専業と一般アプリ専業や個人開発者の感覚の相違があったとしても実装者のレベルは様々なはずです。
私は誠に勝手ながら間接的な人格攻撃と受けとらせていただきましたが、すくなくとも本題とまったく関係のない話題でしたので
最初はスルー致しましたがやはり言及させていただきます。
「あなた方の環境(職場の人材やローカルルール)」 = 「ゲーム業界の標準ないし常識」というわけではありませんよね。
いや、人格攻撃といった意図はなかったんでしょう。私が勝手にそう受け取っただけです。
ISLe さんが書きました:
実装レベルの話をするなら、プログラムが直接扱うデータを外部データ化する際には番号に変換済みのものにします。
メインプログラムはアルゴリズムがシンプルになるのでバグの混入が少なくなると思われるからです。
内部でデータテーブルを番号で管理するのはアルゴリズムとデータ構造を見直した結果です。
文字列からintにすれば高速化や省メモリになるといった単純な問題ではなく。
softya (ソフト屋)さんが文字列で管理する場合の手法には触れず数値配列の方がはるかに楽と言い切ったように
どうもゲーム業界人様は発言に客観性や具体性がないようですね。
まずメインプログラムとは具体的に何を指しているのでしょうか。
「メインプログラムはアルゴリズムがシンプルになるので..」(!?)とういうのは
外部データ化際の番号への変換をすることで勝手にシンプルになるとうことでしょうか?
すばらしい実装ですね。単にtypoしただけでしたらすみません。
「内部でデータテーブルを番号で管理するのはアルゴリズムとデータ構造を見直した結果」とは
どのような結果だったんでしょうか、他の実装と比較でもしたとうことですか。
単純な問題ではないということなので詳細が気になりますが
NDA等で発言できないようでしたら結構です。
はたしてこれが実装レベルの話なんでしょうか。
自分の意見としましては
主観的な意見であっても尊重されるべきでアイテム番号を数値配列で管理する仕様ないし実装が
とにかくいいんだという場合でも一つの実装として尊重されるべきで
同様にstringの配列で管理することも(もしかしたらenumのない言語でつかえるかもしれない)
「そういう方法もあるんだね、あっそ」ぐらいの尊重はされるべきだと思います。
例えばSQL構文をそなえたデータベースで管理すればセーブファイルの代替としても使え便利かもしれない。
多様な実装が存在するということがご理解いただければ幸です。
あと、仕様と実装に関してすばらしい記事があったので引用させていただきます。
仕様は,あるべき姿である。実装は,実際の
姿である。一つの仕様に対して,複数の実装
がありうる。通常は,仕様が決まってから実
装をするのだが,実装不可能な仕様を決めて
も意味がないので,実装をまったく考えずに
仕様を決めてはいけない。実装が既にあっ
て,そこから,本質的な部分を仕様にすると
いうこともある。それは,けっこうイケテル
方法である。
仕様と実装: H2's Log
最後にご覧になるかわかりませんが Dixq (管理人)さんへ
この「C言語何でも質問掲示板」というフォーラム内コミュニティの
排他性や閉鎖性、副管理人の非中立性についてやんわりとでもフォーラムルールに御記載いただければさいわいです
排他的なのが悪いとも思いませんし多様性は善ですが
新規利用者が困惑することを防げるとおもわれます。
なぜこのような意見をだすかというと、副管理人さんとISLeさんのミスリード(仕様が明確でないのに勝手なデスマーチ仕様と呼ぶ、無視できる又はお互いが歩み寄ることが可能なレベルの差異を前提が違うことにする等)
やトピックと関係のない話題を話す(ギョーカイ人だったらうんたらかんたら)他、ISLeさんにデスマーチ仕様と言われた事に対して意見したところ
softya (ソフト屋) さんが書きました:
ISLeさん的には苦い経験があって、そう仰っているものと思います。
ISLeさんも私もゲームプログラマ(業界)歴が長いので危険なものは基本的に避けるクセが身に付いているので考え方の違いだとご理解ください。
というような謎の回答を副管理人の方からなされました。
古参ユーザを擁護するほうがコミュニティ的にも円滑に運営できるのかもしれませんが
副管理人という立場上、中立的な存在だと勝手に思い込んでいましたのでとても困惑しました。
これらは見過ごされるレベルのことなのでしょうか。私の被害妄想でしたらすみません。
以上です。