ページ 11

プログラムの構造

Posted: 2010年10月04日(月) 13:57
by 電気屋
こんにちは。
私は、C言語(C++)を使い始めて2年とちょっとになります。
ポインタや構造体など基本的な能力をつけてきました。最近では簡単なゲームを作っています。
しかし、いざ作ってみるとどのように作って見ればいいのかわからず、
一様動くプログラムは作れるのですが、友達に見てもらうと「あまりよくない。」と言われてしまいました。
次回までに友達を見返してやりたいと、おもい勉強をしているのですが、何か良いサイトがあれば教えてください

Re:プログラムの構造

Posted: 2010年10月04日(月) 14:10
by Dixq (管理人)
お友達は何を見てよくないと思ったのでしょう?

ゲームの見栄え?
ゲームシステム?
プログラムの設計?
プログラムコード?

それによって変わってくると思います。
今一番解決したいことは何でしょうか。

Re:プログラムの構造

Posted: 2010年10月04日(月) 14:35
by softya
プログラムのどの部分が知りたいかはっきりしないと答えづらいですね。
何のゲームかも分かりませんのでアドバイスしようにも?
まず自分のしたいこと、出来ないこと、問題点を明確にする事から始めて見ませんか?

>一様動くプログラムは作れるのですが、友達に見てもらうと「あまりよくない。」と言われてしまいました。
まず何が良くないのか、自分ではどうすれば良くなると思うのか、どんな点が力量不足な点なのかまとめてみてください。プログラムを見せてもらうのが一番かも知れません。

Re:プログラムの構造

Posted: 2010年10月04日(月) 15:04
by 住所特定反対
国語を勉強すべし

Re:プログラムの構造

Posted: 2010年10月04日(月) 17:42
by 電気屋
そうですね。
まず、自分しか解らない書き方をしてすいませんでした。
現時点で、問題点または知りたいことを書きます。


知識:
基本的な知識(ポインタ・構造体)は習得
ゲームなどの作成経験または参考書はなし。
作成は独学。

今回作成しているもの
・ゲーム⇒シューティングゲーム(四方に打つ)

友達の感想:
・プログラムコードの結合度が高い
・見栄えが悪い
・プログラムとしては動くかもしれないけど、無駄が多いから実行が遅いと思う
・変数の定義の仕方があまりよくない
などなど・・・・

今回知りたいこと:
・基本的なプログラムやcppファイルが1つのしか、作った事がないのでクラスの分け方の解るサイト
・プログラムのヘッダーファイルとcppの使い方
この2つが今の問題点です。


プログラムはあるのですが、大きすぎるのとまだバグなどがあるのでご遠慮させてください。

Re:プログラムの構造

Posted: 2010年10月04日(月) 18:02
by dic
私なりの感想です

>友達の感想:
>・プログラムコードの結合度が高い
市販レベルでないならかまわないと思います
一人で製作している分には問題ないと思います

>・見栄えが悪い
その友達の主観からくるもので、個人の読みやすいコードでいいと思います

>・プログラムとしては動くかもしれないけど、無駄が多いから実行が遅いと思う
これも市販レベルでもないならかまわないと思います
無駄とは使用メモリのことでしょうか、実行速度のことでしょうか
ご自分の環境で十分に動くならかまわないと思います

>・変数の定義の仕方があまりよくない
これもその友達の主観ですね、気にしなくていいです

Re:プログラムの構造

Posted: 2010年10月04日(月) 18:09
by softya
まず、クラスの分け方とファイルの分け方は別の問題ですね。
ファイル分けは、クラス設計がちゃんと出来る様になってからで良いかも知れません。

dicさんの指摘にある通り、多分に友達の主観に左右されますがプロのプログラマになるなら多少は気にすべきだとは思います。ちゃんとカプセル化とか継承とか出来ているのか、ソース見ないとみなさん問題点は指摘し辛いと思いますよ。全部じゃなくても良いので1つ2つクラスを取り出せませんか?

Re:プログラムの構造

Posted: 2010年10月04日(月) 18:21
by Dixq (管理人)
なるほど、主に設計の話のようですね。
効率的な設計方法についてはある程度経験則に頼る必要があるように思います。
また、先人の作ったソフトウェアの設計方法を真似するとかでしょうか。
私も昔思いましたけど、C言語の入門サイトはかなりの数あるけれど、
中級者が参考にするようなソフトの設計についてのサイトってあまり無いんですよね。

C++でのオブジェクト指向設計ついては私は先輩の設計したソフトのコードを読んで勉強しました。
恐らくオープンソースのコードを読んで構造を理解するのが良いのではないかと思います。

または、数をこなす間に効率的な設計方法が解ってくる場合もあるでしょう。
ポインタや構造体をゲームに利用したことが無いということから、今はきっとあまりゲームの作成経験が無いのだと思います。
沢山ゲームを作っていくうちに解る事も多いです。
ゲームの作成経験が無いうちから大規模なゲームのオープンソースを読んでもわけがわからないかもしれませんから、
ある程度理解できる力を付け、何が非効率で、どう改善すべきなのか自分で解るレベルになってからの方がよいかもしれません。

で、オブジェクト指向で設計する時のポイントとしては、
そのオブジェクト名が「物」になっているかどうかを気にしながら設計すると良いかもしれません。

また、コードの結合度が強いという事ですが、再利用性や独立性を気にすると良いと思います。
そのモジュールをファイルごとペタっと他のゲームプログラムに貼りつけて呼ぶだけでもう他のゲームプログラムでも利用できるかどうかそんな汎用性や再利用性があるかどうか気にすると良いと思います。
何もかもそれにあてはまればいいかと言えばそうではないので、その辺は難しい所ですね。

もしグローバル変数を多用したりしている場合は、これが再利用性を低くしてしまっている可能性があります。
UI関連などでシングルトンを使う場合はあるかもしれませんが、なるべくグローバル変数を使わない設計がC++では望ましいと思います。

設計方法については、なかなか難しいと思いますから、詳細なゲームの仕様を記載したうえで、自分がこれがクラスになりそうだと思ったものを列挙してみてはいかがでしょう。
おかしければ何かアドバイスが受けられるかもしれません。

また、投稿できるソースコードであれば、投稿すればアドバイスが受けられるかもしれません。

Re:プログラムの構造

Posted: 2010年10月04日(月) 18:28
by Dixq (管理人)
> dicさん

全て気にしなくてもいいものかどうかは見てみないとわからないのではないでしょうか?
上に挙げられた4つはどれもより良い形へ改善出来そうなものばかりだと思いますし。

> 電気屋さん

見栄えというのはゲームの見栄えでしょうか?
美しいエフェクトであったり、素材のグラフィックであったりすることでしょうか?
これも現在どのような仕様なのかがわからないと答えづらいですね・・。
今どんな仕様なのでしょう?

Re:プログラムの構造

Posted: 2010年10月04日(月) 18:46
by dic
>>Dixqさん
>全て気にしなくてもいいものかどうかは見てみないとわからないのではないでしょうか?
>上に挙げられた4つはどれもより良い形へ改善出来そうなものばかりだと思いますし。
失礼ながら言いますが
プログラムを完成することを目的としているなら気にしなくていいと私は思っています
プログラムの書き方やタブの数などを気にしているようであれば、だんまりします
あくまでも手段であって目的ではないと考えています
まれに、ひどいソースコードを見かけますが、まれにしかありませんし、しかし、そのプログラムは
動くので問題ないと考えています
誰もが見やすくて修正しやすく、再利用しやすい書き方があれば標準化して欲しいです

改善点はあるかもしれないですが、ソースコードを見れない限りはなんともいえないです

見栄えとは個人的感覚に基づきます
画像のように人によって見え方が違うこともあります

Re:プログラムの構造

Posted: 2010年10月04日(月) 19:01
by ISLe
「三ヵ月前の自分は他人」という言葉があります。
他の人が読みやすいコードは結局自分も読みやすいです。

Re:プログラムの構造

Posted: 2010年10月04日(月) 19:03
by ISLe
> 画像のように人によって見え方が違うこともあります

これは「おばあさんにも女の人にも見える絵」ではないのですか?

(追記)
たとえばとても基本的なことですが
HitCheck_MyShip_Enemy
HitCheck_Enemy_MyShip
という二つの関数があったとしたら
わたしはどちらを主体に当たり判定しているか関数名だけで分かるように変えたほうが良いと思います。
どちらにも読めることに価値があるとはとても思えません。
画像

Re:プログラムの構造

Posted: 2010年10月04日(月) 19:16
by softya
>まれに、ひどいソースコードを見かけますが、まれにしかありませんし、しかし、そのプログラムは
>動くので問題ないと考えています

多人数で仕事をしていると読むのが困難なプログラムには出会います。
そのプログラムのデバッグをする事になったりすることも多々あるので、プロであれば出来れば読みやすく関数や変数の意味が推察しやすい命名規則やプログラム構造になっているのが望ましいと私は思います。
決して動けばOKだと思ったことは一度もありません。ひどい目には何度も会いました。

この見解は並行性をたどると思いますので、議論する場合は別のスレッドにさせてください。
それはそれとして「問題だと思う質問者」と「問題だと思う回答者」がいるのは事実なので回答者さんに対しては、「問題だと思う回答者」としての回答を返したいと思います。 画像

Re:プログラムの構造

Posted: 2010年10月04日(月) 19:26
by ISLe
#連投すみません。
最近はプロでない作者のケータイアプリが配布サイトで人気が出て続編や移植が行われるケースも少なくありません。
そういうアプリの制作仕事の依頼を貰ったりするのですが、ソースコードがあんまりにもあんまりで、他のキャリア向けにはほとんど作り直さないと無理、これだけ掛かります。と見積りを出して断られたことが何度もあります。
#依頼を受けたアプリは数年経ったいまだ配布されていません。

すくなくとも質問者さんは意見を求めるために友達に見せたわけですし。
画像

Re:プログラムの構造

Posted: 2010年10月04日(月) 19:28
by Poco
> まれに、ひどいソースコードを見かけますが、まれにしかありませんし、しかし、そのプログラムは
> 動くので問題ないと考えています

これでOKと言えるのは、入門者だけでは?
電気屋さんは、次のステップへ進むために質問しているんですよね?

> 改善点はあるかもしれないですが、ソースコードを見れない限りはなんともいえないです

これには同意します。

> 見栄えとは個人的感覚に基づきます
> 画像のように人によって見え方が違うこともあります

これには、反対。
「分かりやすい作文の書き方」等があるように、プログラムにも
万人に共通する美醜といういうものがあるとは思いませんか?

Re:プログラムの構造

Posted: 2010年10月04日(月) 20:03
by うしお
見やすく、保守しやすく、柔軟性に優れ・・・etc
やはり日々訓練をしてより良いコードを書けるようになりたいですね

設計に関して、自分が非常に参考にしているのをいくつか挙げてみます
参考になれば幸いです

サイト&本 ロベールのC++教室
http://www7b.biglobe.ne.jp/robe/cpphtml/index.html
入門編からクラスの基本など非常に分かりやすくまとめている印象でした

本『Effective C++』スコット・メイヤーズ (著), 小林 健一郎 (翻訳)
出版社: ピアソン・エデュケーション
プログラムとデザインについて数多くのアドバイスがまとめられています

Re:プログラムの構造

Posted: 2010年10月08日(金) 16:36
by 住所特定反対
このすれで落ち込んだのですか?

(管理人が一部記事を修正しました)

Re:プログラムの構造

Posted: 2010年10月12日(火) 14:32
by 電気屋
書き込みが遅れてすみません。
パソコンの調子が悪く修理に出していたので書き込みができませんでした。
今、うしおさんに教えてもらったサイトで勉強しています。
勉強してある程度完成したら、またすれ立てます。