トップページgamedev
332コメント288KB

1人でゲームが作れるように修行します。2

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2010/05/04(火) 00:44:29ID:HN0quC1A
がんばりましょう。

前スレ
1人でゲームが作れるように修行します。
http://pc11.2ch.net/test/read.cgi/gamedev/1006284805/
00028872010/05/04(火) 01:08:51ID:IyaaQmWj
>>1

0003STG2010/05/04(火) 04:14:17ID:aMHPCYYt
>>1
(・ω・ )乙 これはポニテうんたら

立てようと思ったら立ってた
前スレって2001年からあったんだな
00048872010/05/04(火) 14:26:38ID:IyaaQmWj
レイアウト情報の手打ちがしんどいのでinkscapeで作れるようにした。
アニメーションデータは結局手打ちなんで、それほど効率的にはならないんだけど
レイアウトだけでもwysiwygができると違う。

ステータス画面を作ろうと思いステータスを考えていた。
他のゲームを調べてみるとFFTとか女神転生3とかは防御力がなかったり
物理攻撃も斬り・打撃・突きみたいなものに別れていたり色々と奥が深い。
もうそろそろ戦闘システムを考えないといけない時期に来た。

名前が887だとスレが変わったからまぎらわしいなぁ…
どうしよう。
0005SGGK ◆6pZCoAtaxk 2010/05/05(水) 00:28:41ID:cHnb9MOr
>>1
乙〜!!

思いつく方法は、やっぱり名前付けるかコテハンにするかといったところでしょうか。

進捗はプログラムのファイルをコピーして、名前のバージョンの数字を1つ上げて保存のみ…orz
が…頑張ります〜。
0006名前は開発中のものです。2010/05/05(水) 17:11:20ID:zqw2r7FZ
俺もつい最近ゲーム作りを始めた
0007SGGK ◆6pZCoAtaxk 2010/05/06(木) 00:35:45ID:3I0cpMiE
>>6
お互い頑張りましょ〜!
自分は進捗止まりそうですが、細々とでもやっていくつもりです。

前スレで書いてた小目標、「選手の守備範囲にボールが入ったときにだけ選手がボールを追うようにする」は
ちょっと止めておいて、この前実装した、「前半から結果表示までの流れ」を遷移図のような感じで表現できないかを
試してみる予定。大雑把な遷移図は以前書いてアップした事があったけど、その後の実装は全く別な感じになったので
一度見直してみて、今後の作業の参考になればと思ったから。
0008名前は開発中のものです。2010/05/06(木) 02:12:39ID:eUAJiIs7
ゲ製板の過疎は洒落にならないね
最近製作スレはVIPに移動したりしてるし・・・

スレが簡単に落ちないのはいいことだけど
0009名前は開発中のものです。2010/05/06(木) 02:45:12ID:JbTMIa/N
ローカルルール的に、何もない0の状態からスレ建てして新規企画を立ち上げるわけにはいかないからね、この板
そのせいもあるかと。
0010名前は開発中のものです。2010/05/06(木) 07:15:06ID:SMYLunWk
>>1
乙です。

前のスレでクォータービューは描画だけで重いと言っていました。どうも僕です。

DXライブラリの仕様を調べていると描画範囲の外はクリッピングとか言う処理がなされて描画自体されないと聞いていて
確かに画像を描画範囲から出すとFPSは安定したので、納得していたんですが
CPUはあんまり減りませんでした。気づきませんでした。

そこで画面の表示範囲外はDrawGraphを行わないような処理を加えると、かなりぬるぬる動きました。
色々遠回りしたけど結局これだけでそこそこ実用に耐えられそうな性能を発揮したのでこれでなんとかなりそうです。

また、チップを組み合わせたブロックを生成して一つの画像として表示するような仕組みを作って利用すればさらに軽量化できそうです。

外部から参照するファイルというか、文字列って何かと難しそうですけどマップエディタを作れたら作ります。

せっかくなんで今回のテストプログラムを置いておきます。
ゲ製板のアップローダが過疎でなんか逆に恥ずかしいんですけど
ttp://gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0101zip.html
迷ったあげくおソースもついてます。これでもまじめに書いたんです。

FPSがふらふらするのは仕様です。けどこのままでいいのかなぁ・・・
0011名前は開発中のものです。2010/05/06(木) 21:02:02ID:eUAJiIs7
俺もCとDXライブラリ使ってる
横スクアクション作ってるけど、重力設定とかややこしいな
00128872010/05/06(木) 22:31:58ID:HGB4ep5J
OpenOffice.org CalcのExcel 2003 XMLでのエクスポートがバグってる。
しかも結構重要な機能。=1+2が保存できない。
あきらめるかと思って、データ打ち込むのにフリーで楽そうなのないかなあと探していたら
Google Docsを見つけた。しかも、どんなファイルでもアップロードできるみたい。
ソースコードは今 http://github.com/happana/srpg で管理してるけど
データ管理をどうしようかと思っていたので丁度いいかもしれない。
ただ、google アカウント作るのが面倒だなあ。
0013SGGK ◆6pZCoAtaxk 2010/05/06(木) 22:32:34ID:GlB3Y70A
>>8
同意です。数か月書きこまなくてもスレが落ちないのが救いです。
>>9
確かに。新企画ってなんだか難しそうなイメージあります。
>>10
動き見れました。チップがスムーズにスクロール出来てました〜。
>>11
自分もDXライブラリです。重力っぽい動きにはサッカーゲームでもいつか挑戦してみたいです。

今日は>7での作業を少しだけ。持続力が無くて少しずつの作業になってしまってます。
ソースもちょっと考えてみます。
0014名前は開発中のものです。2010/05/07(金) 13:42:02ID:ZZNz05BZ
一人でがんばるならスレたてないでずっとひとりでやれよ
00158872010/05/07(金) 16:53:14ID:3Ul87uT/
積読してたGame Programming Gemsを久々に見てみたら結構役立つ情報があった。
1だけ持ってるんだけど、今はいくつまで出てるんだろう。7?
参考になるけど全部買うのは無理だ…
0016名前は開発中のものです。2010/05/07(金) 19:50:35ID:eeBXJ7GH
>>15
洋書でもいいなら
Best of Game Programming Gems
0017SGGK ◆6pZCoAtaxk 2010/05/08(土) 00:04:29ID:lZFiwz/w
>>12
Google Docs、ググってみました。エクセルで書いた遷移図を共有するような使い方も出来るような雰囲気。
>>14
アンカー付全レスでプログラムが進んでないと、そう思われてしまうかもしれないけど、やる気維持に役立てています〜。
>>15、16
Gems、難しそうで立ち読みすらしなかったけど今度見てみようかな…。

ソースの件、以前は付けてたけど過去に指摘があって付けなくなってました。
でもたまにはという事で先日upしたSGGK019のときのソースを載せておきます。
清書しようかと思ったけど、そのままの状態でアップしてます…。
ttp://gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0102zip.html
0018SGGK ◆6pZCoAtaxk 2010/05/08(土) 00:41:02ID:HtkhpRQD
…という事で自分もちょっと考え直して、プログラムに少し進捗があったら書きこむみたいな感じで
不定期登場、レスもその時のタイミングに応じて書いたり書かなかったり…みたいになるかもしれないです。
でももちろん全部見てますのでよろしくです〜。では…。

>7の作業は今日も終わらず…。
00198872010/05/08(土) 01:19:28ID:Qe4xM2Bu
やばい、完全に行き詰った。
戦闘時のコマンド実行の実装の仕方が思いつかない…
色々とごちゃごちゃになってきたんで、戦闘部分だけCUI版とかで別プログラムを一から書いてみようかな。
一番大事な部分なのに…振り出しに戻った…
00208872010/05/08(土) 06:43:31ID:Qe4xM2Bu
ttp://github.com/happana/tatara
戦闘システム実装練習用に新たにプロジェクトを作った。
こっちはグラフィックは文字だけになる予定。
ある程度目処が立ったらSRPGと統合する。
0021名前は開発中のものです。2010/05/09(日) 23:11:16ID:aiTWM3+o
皆さんは今のプログラミングレベルに到達するまでどれくらいの時間かかりましたか?
0022名前は開発中のものです。2010/05/10(月) 00:27:01ID:rQgi2tSO
どうも、クォータビューのマップエディタを作ろうにも何から手をつけていいかわからない僕です。

887先生とSGGK先生のおソースを拝見しました。

あらゆる書籍を持たず完全独学なんで非常に参考になります。
僕がやたらレベルが低いので理解にまでは至りませんけども

別のスクリプト組み込んだりとかクラスオブジェクトを使いこなしたりとかは雲の上の話です。


書籍とか形のある知識を持ってないとこういう得た情報をどこにしまったか忘れてしまうんで
サーバを使わないローカルで動く超個人的wikiみたいなのがあったらいいな

と思ってたらありますね。世界は広いっす。
たくさんあったけれど「ひとりwiki」がまさしくこのスレにぴったりな名前なんで
これで最終的にはゲーム製作の虎の穴として書籍になってウハウハ


マップチップのひし形部分とマウスの当たり判定をとりあえず実装するために
クリックボタンのクラスを作りました。
これを継承して例えばスタートボタンにしたり
マップエディタでクリックでチップを置いたり
そういう方法で正解なのかしら?クラスはよくわかりません。

>>21
ロベールのC++教室という有名なサイトを見ながら
1週間でC言語のポインタまで理解したつもりでしたが半年たっても使いこなせないです。
00238872010/05/10(月) 01:31:44ID:9myjIzu+
>>21
Cから始めて大体分かったなと思うまで1年
その後C++に移行しつつ
- STL, template 周り
- Windows API
- オブジェクト指向
同時並行な感じで1,2年。
これから後はあんまり成長してない気がする。
プログラム勉強しだして8年くらい。
0024名前は開発中のものです。2010/05/10(月) 01:40:23ID:OawYtSG+
何歳ですか?
00258872010/05/10(月) 01:48:23ID:9myjIzu+
アラサー。
多分このスレ一番の年寄りだろう。
0026STG2010/05/10(月) 01:54:52ID:ruVit98w
>>21
・最初にRPGツクール5を高校時代に
・社会に出てからRPGツクール2000へ
・ツクール投げてHSPを半年使う
・HSP投げてC++を勉強〜二年で今に至る

ポインタやクラスあたりはもう無くてはならない存在。STLも超基本にだけ触れた程度かな
クラスは構造体の延長みたいな感じで使ってる。
0027STG2010/05/10(月) 01:57:58ID:ruVit98w
連投になるけど21歳
0028名前は開発中のものです。2010/05/10(月) 21:39:11ID:V6qtfDQ7
本も買わずに他人のソース参考とか思いっきり他者依存じゃねえかw
00298872010/05/10(月) 23:22:22ID:9myjIzu+
>>16
そんな本が出てたんですね。調べてみます。

>>22
先生とかめっそうも無い。
ポインタは最初の1歩で1ヶ月くらい悩んだような気がする。
1. 値渡しとポインタ渡しの使い分け。(これが分かるまで1ヶ月くらいかかった)
2. 配列&ポインタ、構造体&ポインタの理解。
3. 双方向リンクが作れるようになる。
くらいの段階を踏んでだんだんと理解していったような気がする。

2とか分かってくると a[1] は *(a + 1) のシンタックスシュガーみたいなもんだから
a[1] == *(a + 1) == *(1 + a) == 1[a] で 1[a] とかでもコンパイルできることが面白かったりするんですよね。

>>28
個人的には意見交換とか参考にするのはOKだと思うんですけどね。
一緒に作りませんか?みたいなのはスレ違いな気がしますけど。
0030SGGK ◆6pZCoAtaxk 2010/05/11(火) 00:44:39ID:3ZUxXN6n
ソースのUPもこのスレでは意見交換みたいな雰囲気だし、同じくOK〜!と思います。
それにソースを解読できるのって凄いと思います。(自分は解読とか全然出来ないし)

時間については2007年の8月頃にこの板の某スレに書き込んだのをきっかけに開始。
14歳のC++本のサンプルを改造するために最低限の知識をCとC++の文法書で調べただけで、
プログラミングにあまり詳しくないので、いつどうなるかわからない状況でバグを取ってます。
00318872010/05/11(火) 03:09:27ID:ecU8F6rN
ソースコードの整理とか設計をするついでに Google Docs でドキュメントを書いている。
武器やアイテムの仕様やプログラムの設計ことも書いている。
なかなか使いやすくていい感じ。

エクスポートも出来るので PDF でアクター周りの設計を書いたものをアップしてみる。

ttp://gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0103pdf.html

ここらへんの設計。
ttp://github.com/happana/srpg/tree/master/srpg/

プログラムが進まなくてもドキュメントを書いていると進んだ気になる!不思議!
0032名前は開発中のものです。2010/05/12(水) 01:21:16ID:H213asAR
工学図書(株)の「これでわかった C言語ポインタの活用」
という本がポインタ理解に役立った
書籍や技術サイトじゃ個別の疑問は解決し切れないので
直接指導してくれる人がいるのが最善だけれども
0033名前は開発中のものです。2010/05/12(水) 05:47:51ID:nteqJ1cd
おはようございます。クォータービューに対応したマップエディタを作ってます。僕です。

>>29
1はそこそこ程度に使えるようになりましたけど
2. 配列&ポインタ、構造体&ポインタの理解。
3. 双方向リンクが作れるようになる。
ここからですね。
構造体は毎回エラーの壁を越えられないんで避けてます。さらにポインタまで考えるともう・・・


すでにD&Dが出来るクラスを作ってしまいましたが、
思い切って1度構造体でデータを作って動作を妄想しながらクラスにすべき物としない物とに分ける手法を考えて実践してみました。
データ主体という言葉を愚直に捉えた発想なんですけど悩みすぎて気づいたら朝チュンです。

当たり前ですが座標を持つものは座標をデータとして持っていないといけないわけで座標を構造体にして
そこから肉付けして画像データ構造体や範囲データ構造体を追加して
それらを用途別に組み合わせた物が「実体を得し者」、オブジェクトとして活躍する仕組みなんですけど

妄想しながらデータを作っている段階で
別のオブジェクトの座標や種類みたいなのを取得するような動作や
オブジェクトを動的に配列に格納できないとうまく動かないみたいで
どうやらここで高レベルなポインタの出番のようです。さらに多分コンテナみたいなのも使わないとダメっぽいです。
でもこれで思い通りの操作になればマップエディタどころかちょっとしたファイラすら作れそうな勢いです。嘘です。

朝チュンまでして詰むのは悔しいので一旦開発はストップしてポインタのおさらいとSTLをまじめに学ぶことにします。
00348872010/05/13(木) 13:42:13ID:ml734QBW
簡単な状態遷移って switch でやることが多いと思うんだけど
決まった順序で遷移する状態を switch でやると流れが分かりにくい。

int state;
switch(state) {
case IN: in(); break;
case LOOP: loop(); break;
case OUT: out(); break;
}

IN->LOOP->OUT の順番は決まってる。

in();
while(is_loop()) {
  loop();
}
out();

みたいに書けないかなと思っていたらこんなの見つけた。
ttp://f3.aaa.livedoor.jp/~gsyoku/index.php?[[Fiber]]#content:3

機能をゴリゴリ削って使うところだけ自分なりに実装してみた。
ttp://github.com/happana/srpg/blob/master/srpg/base/flow.hpp
ttp://github.com/happana/srpg/blob/master/srpg/scene/battlescene.cpp#L36
0035名前は開発中のものです。2010/05/14(金) 23:53:56ID:aIk67VKF
C言語習いたての俺がSRPG制作に挑戦してみる。

・・・って企画たててよかったのか?
00368872010/05/15(土) 11:08:05ID:D0Xi8/Su
>>35
企画ってのが何のことを言ってるのか分かりませんが、
がんばりましょう!
0037352010/05/15(土) 16:31:45ID:XqTbv+Zz
うん。なんか勘違いしてたorz

さて、AVD×SRPGな感じで作っていきますよっと。
何すればいいかよくわからんがスクリプトエンジンを作ればいいのかね?

ちびちび作っていくのでよろしく。
00388872010/05/15(土) 17:55:24ID:D0Xi8/Su
>>16さんが教えてくれた本が届いた。

プレイヤーと敵のダメージ、死にモーションを作った。
あと1ヶ月くらいで「たたかう」を選んで殴りあえる位までは出来そうな気がしてきた。
00398872010/05/15(土) 23:32:48ID:D0Xi8/Su
P0がE0に攻撃。P1がE1にスキルAで攻撃。みたいな各コマンドを
貯めて後で順番に実行するって仕組みを作っているんだけど
実行する段階で対象がすでに死んでいた場合の対象の再検索とか結構面倒。
後、敵のAIをどうしよう・・・Luaとかのスクリプトを使うのが一般的なんだろうか。
00408872010/05/16(日) 15:55:40ID:Mo8dO9rd
ttp://github.com/happana/srpg/downloads
SRPG version 0.0.12

戦闘のコマンド実行とダメージ処理の追加。
全員、自動で「たたかう」を選んで実行するだけです。
細々としたところでモーションの追加とか武器の追加とか。

これから、コマンド選択UI、ゲームオーバー処理とかを作る。
0041SGGK ◆6pZCoAtaxk 2010/05/17(月) 23:22:34ID:RpiuCETK
>>34,>>40
戦闘シーン確認出来ました〜。
サッカーゲームの遷移も前半→ハーフタイム→後半は一方通行で似ているかもしれないので、参考にしてみようと思います。
>>35
ど〜ぞよろしく〜!

こちらは進捗が思い通りにならなくて、これはもしかするとソースをUpして
なんとなくホッとしてしまったからかもしれない…と自己分析していた矢先に来月の15日頃予定で転勤が決まりそうな感じ。
もしかすると最低でもこの前後1カ月ぐらいは落ち着かないと思うので進捗が無いかもしれない予感。
0042SGGK ◆6pZCoAtaxk 2010/05/19(水) 00:20:03ID:+kD8rOAe
次の日になって自分の書き込みを見るとなんだか赤面な感じ。
別にフェードアウトするフラグでは無いので…(汗)。
一応>>7をやって頭の整理をするところまではやらねば〜!。
00438872010/05/23(日) 02:17:27ID:ne7zja47
ttp://github.com/happana/srpg/downloads
SRPG version 0.0.13

バトル時のコマンド選択など追加。後ダメージも武器の値を使うようにした。
カメラの制御が難しい。

なんかモチベーションが下がってきて駄目な感じになってきた。
0044名前は開発中のものです。2010/05/23(日) 21:58:24ID:VDqMKVb3
>>43
RPGな気もするが、動作はちゃんとできている。
まだ製作序盤だと思うが、クリア、全滅があると面白いと思う。
洞窟にゴール地点を作ったり、敵を強くしたり。
00458872010/05/23(日) 23:27:33ID:ne7zja47
>>44
ごめん。SRPGって書いてるけどRPGなんだ。
SimpleなRPGってことでSRPGにしたら、シミュレーションRPGとかぶっちゃったんだ。

分かった。全滅とか作ってみる。
ちょっと敵も増やしてみようかな。
意見もらえてモチベーション上がった。ありがとう。
0046SGGK ◆6pZCoAtaxk 2010/07/14(水) 23:35:58ID:E0crx8nl
久しぶりに書き込み。
887氏、もしかして開発中止だろうか。
再開して戻って来れるように、こちらの進捗0でも何か書いてみる。
自分の方は2か月の空白を作ってしまい、>>42で辞めないと言ったものの、開発続行はやはり怪しい。
とりあえず、>>42>>7で言った頭の整理は時間が掛かりすぎるので中止。
ゲームのメインの部分で前半、後半で同じような内容が書かれてあり、
長すぎてわかりにくい感じがするので、少し改善できないか考えてみる予定。
0047SGGK ◆6pZCoAtaxk 2010/07/15(木) 22:11:02ID:K2yOe2RI
や…やめた。>>46で言ったソース改善も中止〜!
バグが出てるわけでもないし、わかりにくくてもなんとかソースを読むこともできるから、
整理に時間をかける程でもないなと思った。
とりあえずこのままにして、前スレで言っていた以下の目標をやってみる。

>967 :SGGK ◆6pZCoAtaxk [sage]:2010/04/27(火) 23:03:19 ID:puWvjObW
>次の小目標は、
>今まですべての選手が一斉にボールを追いかけていたのをやめて、
>FWは前1/3、MFは中1/3、DFは後ろ1/3の範囲にボールがある時だけ
>ボールを追いかけるようにプログラムを直す。
>…にしてみる予定。
0048SGGK ◆6pZCoAtaxk 2010/07/19(月) 23:53:37ID:Enn47Jg4
ということで、取り組んでみたものの案の定うまくいかない…orz
まず、メインループの中にある選手の移動関数について。
移動関数の中で今が前半か後半かを判断する変数を使えるようにしたいけど、
いまのままではおそらく使えないと予想。
現在のプログラムは、選手関係の変数や関数をひとまとめにしたクラスの
オブジェクトをゲーム処理を主とした関数内に作ってあり、そのオブジェクトのメンバ関数で選手移動処理をするようになってるので、
ゲーム処理を主とした関数で定義した変数を認識させるにはたぶんその変数のアドレスを渡さなければいけないと思い、
とりあえず、
1.選手関係の変数や関数をひとまとめにしたクラスを宣言してるヘッダファイルに「前半か後半かを判断する変数」を
定義してる別のヘッダファイルを加える。
2.選手関係の変数や関数をひとまとめにしたクラスを宣言してるヘッダファイルの中の
選手移動処理の関数の引数に「前半か後半かを判断する変数」を追加する。
3.選手移動処理の関数の定義がfieldplayercontrol.cppの中にあるので、
これにも同様に「前半か後半かを判断する変数」を追加する。

ここまで書けば関数の中身を後回しにしてもコンパイラは通るはずだと思い、
コンパイルするとエラー。

error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。

運よくバグは取れたけど、詳細は進まない作業の代わりにネタおよび自分の作業メモとして少しずつ書く予定。
てっきり、また全角の空白をどこかに入れてしまったのかと思ったが、そうではなかった。
知ってれば一瞬なのに何時間か掛かってしまい、これがプログラムのしんどいところ。
0049STG2010/07/21(水) 20:04:43ID:jGZViznh
もうサッカーの人しかいないのかな(ヽ´ω`)

ゲーム仕様でどうしても2Dでは実現しづらい部分が出てきたので3Dに移行。
サンプルプログラムで大体どんな感じに組めばいいかはわかったのでモデル製作の勉強開始。
モデリングソフト高すぎワロタ…のでBlenderを使うことに。
0050SGGK ◆6pZCoAtaxk 2010/07/22(木) 00:32:00ID:umEPonN6
>>49
こんばんは!。見ている人がいるからには、諦めずにもう少し頑張ってみようと思います。
自分もいつかは3Dをやりたいと思っているので、Blenderの事は記憶に留めておきます。

>48のバグは、最初「error C2146: 構文エラー : ';' が、識別子 の前に必要です。」で検索したところ、
その中で、「変数宣言の位置によってエラーになったりならなかったり ...」という言葉が目に付き、
ソースを見たところ、ヘッダファイルの左端の縦棒が太く表示されていて何かここに問題のあるしるしなのかと思い、
考えてみると、今回、選手の移動関数の引数として読み込ませたいと思っている変数は、

enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};

で、これはsoccergame.hで宣言されてて、しかし、選手の移動関数は
fieldplayercontrol.hで宣言されているので、ならば、fieldplayercontrol.hの上の行に
#include "soccergame.h"をいれてやればいいのではと思ってそうした。
しかし、先ほどのMATCHSTATEはクラスなどの外側に記述してあるので、コンパイルしたら、
soccergame.hと#include "soccergame.h"したfieldplayercontrol.hとで重複してしまうのではと思い、
#include "soccergame.h"を消したら、コンパイルできた!…という話。
0051SGGK ◆6pZCoAtaxk 2010/07/22(木) 22:16:41ID:lTzR4XWC
>>47(前スレ>967)の目標完了。珍しく予想以上に早く出来た。
ソースはifとswitchの組み合わせなので長文になってしまっているのが相変わらずの難点。

次の目標は、出来れば走ったり、ジャンプをさせたりとかいろいろ思いつくけど、

選手それぞれの近くにライフゲージを表示させて、ライフが少しずつ減り、0になったら
選手が停止する

に挑戦。
0052名前は開発中のものです。2010/07/23(金) 02:53:39ID:C4gQhbld
>>50
つまり・・・どういうことだってばよ

いやすまん、偶然スレ覗いたら気になったんでちょっと質問させて欲しい
enum A{};
enum A{};

void main{}

例えばこう書くと、VisualC++では「error C2011: 'A' : 'enum' 型の再定義」っていうエラーになるんだけど
>>50の下6行で言いたいのは、こういう事とは違うの?
0053SGGK ◆6pZCoAtaxk 2010/07/25(日) 12:32:50ID:p6Ls+avh
> >>50の下6行で言いたいのは、こういう事とは違うの?
そうです。その通りです。
「選手移動処理の関数」に「前半か後半かを判断する変数」つまり
enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};
を引数として持たせたい。
でも、この「前半か後半かを判断する変数」の宣言は、soccergame.hにあり、「選手移動処理の関数」の宣言はfieldplayercontrol.hにあるので、
fieldplayercontrol.hの中でsoccergame.hを#includeしなければ、引数として認識できないかなと思った。
でもそうするとfieldplayercontrol.hとsoccergame.hの両方に
enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};
があるので、コンパイルしたときに
enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};
enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};
void main{}
と2重になるので、
C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。
というエラーが出てるのかと思った。
0054SGGK ◆6pZCoAtaxk 2010/07/25(日) 12:35:16ID:p6Ls+avh
しかし、>>52氏の指摘が気になり、試しにfieldplayercontrol.hに
enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};
だけを直接書きこんでみると、
error C2011: 'MATCHSTATE' : 'enum' 型の再定義
というエラーが出た。
自分が思っていたバグの原因は間違いで、
>>50
>#include "soccergame.h"を消したら、コンパイルできた!
ときのコンパイルできた理由はほかにあるらしく、
しかもenum MATCHSTATE{略};は問題なく認識されていたらしい…orz
>>52←指摘ありがとうございます!)
0055SGGK ◆6pZCoAtaxk 2010/07/25(日) 14:01:28ID:p6Ls+avh
「error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。」というエラーメッセージが出る原因について調査。
#include "soccergame.h"で発生したバグだから、そのsoccergame.hの中に';' が抜けてるところがあるのかと思ったが、良く見たけど見つからない。
他のヘッダーファイルに#include "soccergame.h"をやってコンパイルすると、
「error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。」
が出る。"soccergame.h"に何かあるのか…。
もしかするとヘッダーファイル2重読み込み防止(いわゆるインクルードガード)の書き方が
"soccergame.h"だけ何かの作業でずれたか消えたかしてたか?と見てみたがなんともない。
ためしに「ヘッダファイル 2重読み込み」で検索するとやっぱりこれといったのが無く、しかし、
その中に「ヘッダーファイルは慎重に扱わないと危険です」という言葉が目に付き、
クリックすると内容が難しすぎて解らなかったけど、雰囲気的に「循環参照」というのが気になる。
0056SGGK ◆6pZCoAtaxk 2010/07/25(日) 14:03:02ID:p6Ls+avh
自分のソースを見てみる。
fieldplayercontrol.h に soccergame.h をインクルードしたときを考えてみる。
soccergame.h は #include "fieldplayercontrol.h" してるので、
お互いがお互いをインクルードしあってる。
念のため、soccergame.h がインクルードしてないヘッダーファイルにsoccergame.hをインクルードしてみる。
これなら循環じゃないから、バグが出ないはずだと思ったが、
バグが出る場合と出ない場合がある。
バグが出ないと予想したのにバグが出たヘッダーファイルは、もしかするとsoccergame.hのインクルードしたヘッダーファイルからまたヘッダーファイルが呼ばれてて…のような感じで呼ばれていたのかもしれないが、調べきれず。
さらに
error C2146: 構文エラー : ';' が、識別子 の前に必要です。  ヘッダーファイル 循環参照
で検索してみると、掲示板関係ばかり引っかかるけど、どうも循環参照が原因の可能性が高い。
「ヘッダーファイル内でのインクルードはできるだけ避けたい。」という書き込みもあるし。
仮に循環参照が原因として何故、「error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。」というメッセージになるのかわからないけど、
とりあえずヘッダーファイルをインクルードしているうちに循環参照になっていたのが原因の可能性が一番高いと考えて、
>>51の課題挑戦を再開。
0057名前は開発中のものです。2010/07/25(日) 16:05:50ID:7RX0IWHa
('A`)
0058名前は開発中のものです。2010/07/25(日) 16:13:03ID:Vl6SpnXH
ふむふむ


まずヘッダーの重複読み込みを気にしているようだけど、「#pragma once」は記述している?
ちなみにマクロを使って同じ事も出来る
ttp://www.geocities.co.jp/SiliconValley/6071/technic/16.html


そして「error C2146: 構文エラー : ';' が、識別子〜」は、行数を特定しにくいエラーの一つだけど
これを発見するには、デバッグの基本技の一つ「コメントアウト」が有効

例えば、以下のように4つの関数があったとする
void A(){}
void B(){}
void C(){}
void D(){}

このCとDをコメントアウトしてコンパイル
void A(){}
void B(){}
/*
void C(){}
void D(){}
*/
これでC2146エラーが消えたようならCかD、残るようならAかBに絞り込める
消えた場合Cだけコメントアウトすれば、特定の関数まで絞り込める

この方法を使えば、例えば500行のソースが書かれている場合
その約半分250行くらいから下をコメントアウト、さらにその半分、さらにその半分・・・と機械的に絞り込む事が出来る
0059名前は開発中のものです。2010/07/25(日) 16:24:34ID:vN3nsQ+l
インクルードガードでggrks
0060名前は開発中のものです。2010/07/25(日) 20:13:54ID:bN26srjK
>>59
>>52
インクルードガード関係ない可能性が高い
0061SGGK ◆6pZCoAtaxk 2010/07/26(月) 22:44:04ID:HmEvw+7E
>>57>>58>>59>>60
たぶんまだ正解ではないんだろうなという雰囲気が伝わってきたので、再考。
まず、>>58氏の#pragma onceを試して、もう一度soccergame.hをfieldplayercontrol.hにインクルードしてみたがやはり同じバグが発生。
でも、#pragma onceなら1行で、しかも同じ書き方でインクルードガードできるから便利。(感謝!、絞り込みも活用します。)
次に昨日書いた循環参照について。
soccergame.hをfieldplayercontrol.hにインクルードした時、soccergame.hの中では、FieldPlayerControlクラス型の実体を定義してるけど、
fieldplayercontrol.hの中でSoccerGameクラス型の実体を定義してはいないから、循環参照ではなかったかもしれないという気がしてきた。
お互いをインクルードしあってるだけでは循環参照に必ずしもなるとはいえないかもしれない。自信はないけど。
そこで、soccergame.hをfieldplayercontrol.hにインクルードした時のfieldplayercontrol.hの中身はどうなっているのかソースにして追いかけてみようとふと思った。
ひとつ気になった。
soccergame.hはその中で#include"fieldplayercontrol.h" してるので、soccergame.hをfieldplayercontrol.hにインクルードしたら、
fieldplayercontrol.h の中で #include"fieldplayercontrol.h"されるのだろうか?
なぜなら、もともとのfieldplayercontrol.hは、#include"fieldplayercontrol.h"なんてしてないから、インクルードガードされないんじゃないかなと思ったので。
0062SGGK ◆6pZCoAtaxk 2010/07/26(月) 23:01:02ID:HmEvw+7E
そこで、「ヘッダファイルに同じヘッダファイルをインクルードできるか」のようなキーワードで何度か検索。

「ヘッダファイルは、自分とは別のヘッダファイルを #include でインクルードできるので、(略)」 という記述があったので、

それ前提でソースをエクセルに張って考えてみたら、自分としては今までで一番正解に近そうな答えが出た。
soccergame.hをfieldplayercontrol.hにインクルードしたときにsoccergame.hの中にある#include"fieldplayercontrol.h"がキャンセルされていたら、
soccergame.hからインクルードした部分の処理を進めているときは、まだFieldPlayerControlクラス型が宣言されてないから、
soccergame.hからインクルードした部分にFieldPlayerControl fieldplayercnt;
と書いても、
「error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。」
というエラーが出る…というのが答えかもしれない。

一応、エクセル→jpgでうp
ttp://gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0129.jpg
0063STG2010/07/28(水) 04:37:11ID:ttdS5Bl4
3Dの勉強が楽しい
忘れていたわくわく感があふれてくるっ
知らない用語がどんどん出てくるこの冒険感っ

練習ソフトクリーム
http://www.dotup.org/uploda/www.dotup.org1057678.jpg
0064SGGK ◆6pZCoAtaxk 2010/07/28(水) 23:06:54ID:6+SmVQnU
3D、色々な事が出来そうですね。
自分もサッカーゲームの3D化を目指して開発を急ぎたいです。

>>51の課題に挑戦。
ソースはまだ書いてないけど、選手クラスにライフ値を記録するためのメンバ変数を追加して、
選手の描画関数を実行するときに選手の座標を基準にDXライブラリの四角形描画関数を2回使重ね書きして実現できないかなと脳内設計。
ライフ値をソースのどこでどのくらい減らせばいいのかを検討中。
0065SGGK ◆6pZCoAtaxk 2010/08/03(火) 22:32:31ID:nPEW7e3n
>>51の課題が終了。
ライフ値は、各選手が移動関数を実行した直後に少しずつ減らすようにしておき、
「 現時点のライフ値/最大ライフ値xライフゲージ最大長さ 」を計算して長方形をその長さで描画する。
減り具合は完全ではないけど、今は調整する予定なし。

次の目標

●共通(ゴールキーパー以外)
(実装済)歩く Z+マウス操作
   1 走る X+マウス操作
   2 進行方向固定 Shiftキー
   3 特殊技術(ボールが頭上ならヘディング、足元ならダイビングヘッド) Spaceバー
●ボールキープ時
   4 ジャンプ(タックル避けにもなる) C
   5 ロングパス 左クリック
   6 ショートパス 右クリック
   7 シュート 左右同時クリック
   8 パス/シュートは,押す長さで強さを調整
●非ボールキープ時
   9 タックル 左クリック
  10 カット 右クリック

これらの内6個でも実装できれば上出来と考えて挑戦する予定。
期限を決めてやるのは無理そうな感じ…orz
0066STG2010/08/28(土) 03:50:26ID:gP4FgSvi
そして誰もいなくなった

Blenderの仕様でいろいろ不都合が出てきたのでメタセコイアにのりかえ中
0067SGGK ◆6pZCoAtaxk 2010/08/29(日) 22:43:31ID:HGm0TpTI
>>66
アクセス規制が続いていて、実は現在も書き込めない状態でご無沙汰してました。
メタセコイアはフリー版あるらしいので、ドットが不得意な自分もいつかは触ってみたいソフトです。


3〜4週間の2chアクセス規制が頻繁にあり過ぎて製作活動ペースが落ちてくるので(言い訳)、
運営の思う壷かもしれないけど、試しにp2とやらで今日から1年間だけ書き込めるようにしてみた。

肝心の進捗の方は思わしくなく、>65の目標をみると、今のゲーム画面は視点がおかしいので悩む。
フィールドは真上から見てるのに、選手は真横から見た絵になっている。
蹴ったボールをいずれは曲線を描くようにしたいけど、この画面ではそれを表現するのが難しい事に気づく。
そしてボールの座標は(x,y)だけでは足りなくて(x、y、z)にしておかなければな後々不便な事になるような気がしてきた。

これはベクトルの表現を取り入れたプログラムに書き直しておいた方がいいかなと思い始めたところ、
偶然手元に「14歳からはじめるわくわくC言語プログラミング教室VS2008編」という本があり、
運よくこれの第3章がベクトルの説明をしていたので、読んでみることにした。
もう少しで読み終わるけど、解り辛い…。
0068SGGK ◆6pZCoAtaxk 2010/08/30(月) 23:32:27ID:0WWGfdkP
昨日の書き込みを見て、思う壺という言い方が紛らわしい表現になりそうなので消したくなってきた。(赤面)
書き込み規制の原因は荒らしをする人にあるわけだから。

とりあえず3章だけを読み終えた。
明日も時間が出来ればベクトルを取り入れたプログラムに書きなおしてみる予定。
0069SGGK ◆6pZCoAtaxk 2010/08/31(火) 23:49:31ID:5x9cPfBx
ソースをコピーして数字を一個上げた名前に変更してから作業を始めようとしたけど早速悩む。
参考にした本はCで書いてるので、C++でオブジェクトを複数種類作っているようなプログラムにどうすれば使えるか思いつかない。
とりあえず、「C++、移動、クラス、ベクトル」で検索してみたけど、いまひとつ。
C++には、例えば ベクトル+ベクトルの結果がベクトルになるような意味を持てるように
 + の意味を定義しなおす機能があるようなので、これかなと思ったけど、あまりにも内容が難しいので、諦める。
次に考えたのは、例えば vector3.h のような名前でヘッダーファイルを作り、その中に

struct Vector3{
float x,y; //とりあえずz無し
};

と書いておいて、ベクトルの必要なクラスの定義があるヘッダーファイルに #include "vector3.h" すれば外部の関数扱いになってすべてのクラスから使えるんじゃないかなと思った。
確認のために#include "vector3.h"したあるクラスの定義の中で、
Vector3 POSITION_XY={1,1};
としてみたらエラーになるので真っ青になる。(他にもう方法が思いつかないから)
しかし、
Vector3 POSITION_XY;
と書き直したら、コンパイラが通った。
クラスの定義の中では初期値を書けないのをすっかり忘れていた。
思い出せたのは運が良かった。
0070SGGK ◆6pZCoAtaxk 2010/09/02(木) 23:42:53ID:N3a4x6pe
とりあえずベクトル関係の変数と関数を宣言したヘッダーファイル、vector3.hと
それらの変数や関数を定義したファイル、vector3.cppを作成してみた。
とは言うものの、中身は変数を3つ持つ構造体とその構造体の型を持つ変数を引数にもつ関数で
関数は、

ベクトル=ベクトル+ベクトル
微小時間後の位置を示すベクトル=現在の位置を示すベクトル+微小時間xその時点での速度を表すベクトル

の2式だけ。
この微小時間がいわゆるフレームタイムであり、今までのプログラムだと
メインループ関数の中で、DXライブラリのScreenFlip()関数を30回ループしてその平均を
フレームタイムとしてる。ScreenFlip()関数は画面のリフレッシュレートとやらと同期して動くらしいので
そういうやり方でフレームタイムが計算できるらしい。
でも、これだとメインループ関数の外側で宣言・定義されてる微小時間後の位置を示すベクトルを計算するための
関数に必要な微小時間(フレームタイム)が読み取れないと予想。
とりあえず、30回ループする部分を関数にして、vector3.h、vector3.cppで宣言・定義して、
その30回ループする部分を関数にしたのをメインループで呼び出してなんとかできないかと思ったところで終了。
0071名前は開発中のものです。2010/09/04(土) 10:45:00ID:BWH+wHQ4
>>69
> + の意味を定義しなおす機能があるようなので、これかなと思ったけど、あまりにも内容が難しいので、諦める。

class Vector3{
public:
float x;

Vector3(){}
Vector3(float x_) : x(x_){}
Vector3 operator+(Vector3 &obj){
return Vector3(x + obj.x);
}
};

class A{
public:
A(float x) : vec(x){}
Vector3 vec;
};

void main(){
A a(1),b(2);
a.vec = a.vec + b.vec;
cout << a.vec.x << endl;
}

こういう事?
operator+はその性質上、returnで新しいクラスを作る必要があるから処理速度の面で微妙
俺だったら使わない
0072SGGK ◆6pZCoAtaxk 2010/09/05(日) 00:15:21ID:t7yjfHHg
>>71
す…凄いです。そうです!そのoperatorがなんとかというそれでした。
まだ自分は答えを見ても何がわからないかもわからない初心レベルですが感謝します。
処理速度が微妙であるとのコメントを参考にして、なんとか>70のやり方(C言語風?)でやれるよう頑張ってみます。
0073SGGK ◆6pZCoAtaxk 2010/09/05(日) 23:38:53ID:glSoiJ6G
>>70の下から4行に書いたやり方は諦める事にした。
vector3.hにfloat frametime=0;と書いてコンパイルすると
frametimeは既に定義されてると言う内容のエラーが続々発生。
これは、vector3.hがいろんなcppファイルのヘッダーファイルにインクルードされてるからだろうと予想。
float frametime;と書き直しても同じ結果。初期化の有無は関係なかった様子。
vector3.hの中でfloat frametime;と書いておき、他のcppファイルでframetimeを使いたい場合には、
そのcppファイルのヘッダーファイルでなく、cppファイルの上の方の行でextern float frametime;と書いたら直った。
たぶんこれでframetimeは外部変数扱いになってどこからでも使える変数になったかなと思うけど、
ベクトル計算の関数定義の中で使おうと考えているframetimeの値が外部変数として渡すやり方だと
なんとなく後々の問題になりそうなので、ベクトル計算用関数の引数を増やして、その引数に値経由でframetimeを渡せないかと考えて終了。
そして、frametimeの外部変数化も中止。(あまり進まず。)
■ このスレッドは過去ログ倉庫に格納されています