C言語何でも質問掲示板


必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   再入力の処理   
     ・[33859] pooka 
     ・[33860] ほのか 
   DXライブラリの導入   
   シューティングを途中 ....   
     ・[33806] チルチル 
     ・[33808] kazuoni 
     ・[33830] BEMANI 
     ・[33832] Mikan 
     ・[33838] dic 
   VC++ で BCC のGREP の ....   
     ・[33834] Ma 
   C言語の順次演算処理に ....   
     ・[33630] kazuoni 
     ・[33635] たかぎ 
     ・[33794] TKOZ 
     ・[33799] 初級者 
     ・[33803] 初心者 
   char型配列?   
     ・[33689] 御津凪 
     ・[33690] Mist 
     ・[33692] チルチル 
     ・[33693] 御津凪 
     ・[33695] Mist 
     ・[33696] たかぎ 
     ・[33700] チルチル 
     ・[33712] toyo 
     ・[33750] チルチル 
     ・[33758] toyo 
     ・[33797] チルチル 
   無題   
     ・[33787] kazuoni 
     ・[337861244563555] 超初心者 
   ファイルの上書き…?   
     ・[33762] tkmakwins15 
     ・[33763] kazuoni 
     ・[33764] kazuoni 
     ・[33766] ほのか 
     ・[33767] non 
     ・[33769] ほのか 
     ・[33770] non 
     ・[33771] pooka 
     ・[33773] ほのか 
     ・[33774] non 
     ・[33775] pooka 
     ・[33776] ほのか 
     ・[33778] pooka 
     ・[33781] ほのか 
   ”error LNK2001: 外部 ....   
     ・[33720] 御津凪 
     ・[33721] Mist 
     ・[33753] hal 
     ・[33754] さが 
     ・[33755] hal 
     ・[33759] hal 
   プロジェクトメンバー ....   
     ・[33713] たいちう 
     ・[33715] Ma 
     ・[33718] 御津凪 
     ・[33722] Mist 
     ・[33725] Ma 
     ・[33726] Ma 
     ・[33728] Mikan 
     ・[33729] 御津凪 
     ・[33730] Ma 
     ・[33733] toyo 
     ・[33734] 御津凪 
     ・[33735] バグ 
     ・[33736] Ma 
     ・[33737] やそ 
     ・[33752] Ma 
   半角→全角   
     ・[33731] ouh 
     ・[33751] 研修生 
   ファイルの読み込み   
     ・[33642] box 
     ・[33648] non 
     ・[33664] ほのか 
     ・[33671] non 
     ・[33672] ほのか 
     ・[33675] box 
     ・[33676] ほのか 
     ・[33685] non 
     ・[33714] ほのか 
     ・[33738] non 
     ・[33739] ほのか 
     ・[33740] non 
     ・[33742] ほのか 
     ・[33743] pooka 
     ・[33746] ほのか 
     ・[33748] pooka 
     ・[33749] ほのか 
   自機と敵の当たり判定 ....   
     ・[33660] Justy 
     ・[33705] Huzzy 
     ・[33747] pooka 
   描画した文字を消すに ....   
     ・[33716] Mist 
     ・[33724] やっくん 
     ・[33727] Mist 
     ・[33732] kazuoni 
     ・[33744] やっくん 
     ・[33745] やっくん 
   EOF   
     ・[33669] 研修生 
     ・[33670] GPGA 
     ・[33673] 研修生 
     ・[33679] たかぎ 
     ・[33687] non 
     ・[33741] GPGA 
   正規表現   
   参照とポインタ   
     ・[33682] Blue 
     ・[33683] 大工 
     ・[33684] Blue 
     ・[33686] Blue 
     ・[33694] 大工 
     ・[33697] たかぎ 
     ・[33708] Blue 
   typedefテンプレート   
     ・[33578] tkmakwins15 
     ・[33585] たかぎ 
     ・[33593] kazuoni 
     ・[33663] Justy 
     ・[33707] kazuoni 
   ダンジョンフィールド   
     ・[33615] kazuoni 
     ・[33621] 和金 
     ・[33631] kazuoni 
     ・[33634] 和金 
     ・[33691] 和金 
   class定数を定義したい ....   
     ・[33667] Blue 
     ・[33674] ABC 
     ・[33677] 御津凪 
     ・[33678] たかぎ 
     ・[33680] ABC 
   敵が追ってくるプログ ....   
     ・[33633] 和金 
     ・[33643] MNS 
     ・[33662] Justy 
   横スクロールアクショ ....   
     ・[33629] GPGA 
     ・[33661] けんたろうちゃん 
   敵キャラの動き(円状 ....   
     ・[33638] すずめ 
     ・[33655] Huzzy 
     ・[33659] すずめ 
   ぷよぷ○的なゲーム作 ....   
     ・[33576] kazuoni 
     ・[33579] ひよこ 
     ・[33580] さが 
     ・[33581] さが 
     ・[33583] kazuoni 
     ・[33584] ひよこ 
     ・[33589] さが 
     ・[33590] ひよこ 
     ・[33591] さが 
     ・[33594] kazuoni 
     ・[33597] さが 
     ・[33613] Dixq (管理人) 
     ・[33622] さが 
     ・[33627] さが 
     ・[33651] ひよこ 
     ・[33652] さが 
     ・[33657] ひよこ 
     ・[33658] さが 
   4次元配列の動的確保   
     ・[33647] box 
     ・[33649] はね 
     ・[33650] はね 
     ・[33653] Justy 
   リンゴの落ちゲー   
     ・[33350] Justy 
     ・[33401] marijji 
     ・[33402] Mist 
     ・[33403] marijji 
     ・[33407] Justy 
     ・[33637] marijji 
     ・[33645] ひよこ 
   ファイル分割について   
     ・[33495] dic 
     ・[33497] y 
     ・[33498] dic 
     ・[33505] Justy 
     ・[33525] y 
     ・[33532] dic 
     ・[33640] y 
     ・[33644] pooka 
   雑誌掲載などの宣伝 ( ....   
     ・[33036] situmon 
     ・[33042] こめかみ 
     ・[33043] Dixq (管理人) 
     ・[33045] conio 
     ・[33046] situmon 
     ・[33048] situmon 
     ・[33055] Dixq (管理人) 
     ・[33058] さが 
     ・[33121] こめかみ 
     ・[33238] Dixq (管理人) 
     ・[33327] こめかみ 
     ・[33331] やっくん 
     ・[33628] toyo 
   if break   
     ・[33567] MNS 
     ・[33569] box 
     ・[33599] situmon 
     ・[33602] kazuoni 
     ・[33612] マウス 
     ・[33617] situmon 
     ・[33618] かなで 
     ・[33619] kazuoni 
     ・[33625] situmon 
   プロジェクト   
     ・[33611] pooka 
     ・[33614] イタマエ 
   出来た後の実行ファイ ....   
     ・[33586] s-rush 
     ・[33587] yu 
     ・[33609] junta 
   「extern int a;」 と ....   
     ・[33439] kazuoni 
     ・[33442] たかぎ 
     ・[33588] ABC 
   デバック関数   
     ・[33562] たいちう 
     ・[33563] tkmakwins15 
     ・[33564] tkmakwins15 
     ・[33570] Justy 
     ・[33572] tkmakwins15 
     ・[33574] レスト 
     ・[33577] tkmakwins15 
   【龍神録】当たり判定 ....   
     ・[33507] Justy 
     ・[33571] hal 
   敵の出現時について   
     ・[33552] yu 
     ・[33559] pic 
     ・[33560] yu 
     ・[33561] pic 
   DXライブラリについて   
     ・[33558] Mist 
   L*a*b変換について   
     ・[33544] box 
     ・[33547] packls 
     ・[33549] box 
     ・[33551] box 
     ・[33554] pcckls 
   ロジックを研究してい ....   
     ・[33475] kazuoni 
     ・[33482] デジキャメ 
     ・[33519] toyo 
     ・[33521] kazuoni 
     ・[33528] デジキャメ 
     ・[33553] たいちう 
   イテレータとdeleteに ....   
     ・[33522] MNS 
     ・[33530] 山崎 
   開放についてですが// ....   
     ・[33524] ぼく 
     ・[33527] チルチル 
   リプレイ保存の方法   
     ・[32529] SooA 
     ・[32532] 匿名 
     ・[32548] Justy 
     ・[32551] 匿名 
     ・[32552] Justy 
     ・[32574] 匿名 
     ・[32594] Justy 
     ・[32595] 匿名 
     ・[32598] Justy 
     ・[32635] 匿名 
     ・[32678] 匿名 
     ・[32681] Justy 
     ・[32683] Justy 
     ・[32684] 匿名 
     ・[32687] Justy 
     ・[32691] 匿名 
     ・[32702] チルチル 
     ・[32708] Dixq (管理人) 
     ・[32712] チルチル 
     ・[32720] Justy 
     ・[32723] チルチル 
     ・[32725] Justy 
     ・[32732] チルチル 
     ・[32734] Justy 
     ・[32735] チルチル 
     ・[32752] チルチル 
     ・[32770] Justy 
     ・[32772] めいらる 
     ・[32774] SooA 
     ・[32777] めいらる 
     ・[32779] SooA 
     ・[32788] めいらる 
     ・[32792] チルチル 
     ・[32796] Justy 
     ・[32799] チルチル 
     ・[32810] BEMANI 
     ・[32832] さが 
     ・[32834] Justy 
     ・[32840] さが 
     ・[32849] SooA 
     ・[32869] さが 
     ・[32871] チルチル 
     ・[32878] Justy 
     ・[32888] めいらる 
     ・[32916] チルチル 
     ・[32922] Justy 
     ・[32928] さが 
     ・[33057] チルチル 
     ・[33072] チルチル 
     ・[33073] SooA 
     ・[33074] SooA 
     ・[33075] SooA 
     ・[33077] チルチル 
     ・[33082] チルチル 
     ・[33090] SooA 
     ・[33095] チルチル 
     ・[33111] kazuoni 
     ・[33118] Justy 
     ・[33141] チルチル 
     ・[33180] チルチル 
     ・[33222] チルチル 
     ・[33223] さが 
     ・[33228] チルチル 
     ・[33241] チルチル 
     ・[33264] チルチル 
     ・[33284] SooA 
     ・[33319] チルチル 
     ・[33462] チルチル 
     ・[33526] チルチル 

Name: ほのか  ..かけだし(2,426ポイント)   Date: 2009/05/22(金) 13:23   No:33856       
Title: 再入力の処理    
お世話になっております。

住所登録プログラムを作成しているのですが、性別入力時に2文字以上入力された場合に再入力する処理と、1か2以外を入力された場合に再入力する処理を入れたいのですが


do{
    printf("性別を入力してください(1:男性/2:女性)>>>");
    scanf("%s",temp.sei);

    /* 最大文字数を超えた場合再入力 */
    if(strlen(temp.sei)>=SEI){
      printf("---文字数超過---\n\n");
      continue;
      }else
      if(strcmp(temp.sei,dansei)!=0 && strcmp(temp.sei,jyosei)!=0){
        printf("1か2を入力してください\n");
        continue;
      }
      puts("");
      }
}while(strlen(temp.sei)>=SEI);



上記のようにすると「1か2を入力してください」と表示された後、再入力ではなく次の処理に飛んでしまいます。
どのようにすれば再入力の処理ができますか??;


413ポイント を手に入れた。


Name: pooka  ..入門者(3,822ポイント)   Date: 2009/05/22(金) 14:10   No:33859     
Title: Re:再入力の処理    
{}の対応関係がおかしいと思うので確認してみてください。

以前と同じなら#define SEI 2となっていると思いますが、
scanf("%s",temp.sei);
で例えば3と入力した場合strlen(temp.sei)の値は1になります。
この場合、continueをしても
while(strlen(temp.sei) >= SEI)
の条件を満たさずループを抜けて次の処理にいってると思います。
そのあたりに注意して変更してみてください。


66ポイント を手に入れた。

Name: ほのか  ..入門者(2,528ポイント)   Date: 2009/05/22(金) 14:18   No:33860 解決!     
Title: Re:再入力の処理    
回答ありがとうございます^^
最後のwhileの部分を
}while(strlen(temp.sei)>=SEI || strcmp(temp.sei,dansei)!=0 && strcmp(temp.sei,jyosei)!=0);
に変えたらきちんと再入力できるようになりました!

ありがとうございました^^


102ポイント を手に入れた。



Name: kouseki  ..ぴよぴよ(374ポイント)   Date: 2009/05/22(金) 11:24   No:33842 解決!       
Title: DXライブラリの導入    
はじめまして。
初めて書き込みさせていただきます。

こちらのHPのゲームプログラムの館、DXライブラリの入手の項目の箇所でサンプルを表示する項目があるのですが、エラーがでてしまいうまく表示できません。

d:\アプリケーション\dxライブラリ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(2) : fatal error C1083: include ファイルを開けません。'GL/glut.h': No such file or directory
1>ビルドログは "file://d:\アプリケーション\DXライブラリ\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\BuildLog.htm" に保存されました。
1>DxLib_VC2005用 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
と表示がされます。

導入編の点はできました。
OSは ビスタ VC2008の無料のやつを使用してます。
知識は最近C言語の「はじめてのC言語」という本を一通りやったとこで、初心者になります。

よろしくお願いします。



すいません><自己解決しました。


374ポイント を手に入れた。




Name: dic  ..上級者(21,474ポイント)   Date: 2009/05/21(木) 21:35   No:33804       
Title: シューティングを途中まで作成したので    
途中まで作成したので公開してみます
感想はあまりないかもしれないですが
妙な動作をしないかチェックしてくれると助かります

ダウンロード先は
http://www1.axfc.net/uploader/He/so/226931 で
キーワードは tabako です

自分の感想としては弾数がちょっと多いのと
敵が固いくらいでしょうか
他の方の意見を聞かせてもらいたいです


161ポイント を手に入れた。


Name: チルチル  ..中級者(14,672ポイント)   Date: 2009/05/21(木) 22:04   No:33806     
Title: Re:シューティングを途中まで作成したので    
@起動時にフルスクリーンかウインドウか選べるようにしては?

A圧縮する時にフォルダにまとめては?

Bジャンルは何ですか?

Cキャラ選択のやり方が分かりません

D途中と言う事は理解していますが背景を付けては?

Eショットのスピードが遅いです

F敵の固さは許容範囲

G被弾時の処理が無い

Hログ出力はどうなっていますか?

I素材がシューティングに不向きに見える

J素材の雰囲気を統一しては?

K弾幕シューティングをやった後ですから弾は多くないと思います

L自機、敵の画像をアニメーションさせては?

Mアルファブレンドは使っていますか?

N「Zを押して下さい」とかを表示した方がいいと思います


219ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(86,219ポイント)   Date: 2009/05/21(木) 22:55   No:33808     
Title: Re:シューティングを途中まで作成したので    
個人的には、素材は好きですが、
これって無断配布しても大丈夫なやつですか?^^;
自作ならいいと思いますが、自作でないならまずい気がします。

不具合は起動して一度非アクティブにして、
上にアプリを重ね、再度shootingをアクティブにすると
画面が他のアプリにくっつく

です。(vista , Core 2 Duo)
うまく説明ができないので、イメージUPしておきます。
原因はよく分かりませんが。。


122ポイント を手に入れた。

Name: BEMANI  ..プログラマー(30,111ポイント)   Date: 2009/05/22(金) 02:14   No:33830     
Title: Re:シューティングを途中まで作成したので    
妙な動作をしないかチェックして欲しいという事なので、こちらでも動作チェックをしてみました。
自分が見つけたものを挙げておきます。


kazuoniさんと同じ症状を確認しました。
クライアント領域だけが常に最前面に表示されている感じです。
また、ウインドウを閉じた時、画面(絵)が残ったままゲームが終了します。


ウインドウが非アクティブでもキーボード入力を受け付けているようです。
アクティブ時のみキーボードの入力を取るように変更してみては如何でしょうか。


dicさんがお作りになったアプリケーションを起動後、
フルスクリーンのアプリケーションを立ち上げると画面が真っ白になりました。
恐らくデバイスロストが起きているかと思われます。


見つけたのはこれくらいでしょうか。
参考になれば幸いです。
dicさん制作頑張って下さい^^


236ポイント を落としてしまった。

Name: Mikan [URL]  ..中級者(9,337ポイント)   Date: 2009/05/22(金) 03:52   No:33832     
Title: Re:シューティングを途中まで作成したので    
音とエフェクトがマッチしていて、私は好きでしたw

シューティングゲームとしては、作りかけの範囲内だと思いますが、
爽快感が非常にあり、ストレス解消になりましたよv( ̄Д ̄)v

弾に当たってもしなないので、5分ほど熱中して敵を殺しまくってましたw

参考にならないコメントですみませんw

なんだか、これはこれで楽しい作品だったと思うので色々考えさせられました^^


167ポイント を手に入れた。

Name: dic  ..上級者(21,803ポイント)   Date: 2009/05/22(金) 08:57   No:33838 解決!     
Title: Re:シューティングを途中まで作成したので    
色々な方からの感想ありがとうございます
試作品で、不愉快に感じた方もいらっしゃるかもしれませんので、すいません

グラフィッカー募集と同時に並行してプログラム作成してるもので、グラフィックは仮りです

kazuoniさんの現象をこちらでも確認しました
チェックありがとうございます
原因は非アクティブ時にも、描画を続けていたところでした
ちょっとの工夫で対応できました

ウィンドウが残ったまま終了する問題も対応できました
原因はウィンドウのメッセージを正確に処理してなかったです
こちらも対応できました

デバイスロストは、ちょっと私の力およばずで、現在のところ仕様となってます
シューティングしながら他のゲームはしないだろうという見方です


Mikan さんありがとうございます
私としては弾幕ゲーですが、よけることよりも、敵を倒すことに爽快感があるゲームにしたいと
思ってました
十分参考になりました

当たったら体力が減っていくようにするのですが、これも私の力不足で
簡素で、単純で、バグの少ないプログラムを目指しているので、追加などの変更に
私の頭がおいついていない状態で、精進したいと思ってます

感想、意見 ありがとうございました


329ポイント を手に入れた。



Name: Ma  ..初心者(8,160ポイント)   Date: 2009/05/22(金) 07:30   No:33833       
Title: VC++ で BCC のGREP のような機能は?    
最近、BCC Developer から VC++ に移動したものですが、
BCC Developer で愛用していた GREP 機能 (プロジェクト全体から検索する)
に似た機能を VC++ で見つけることができませんでした。

プロジェクト全体から、検索する文字列が該当するものをすべてリストして、
そのリストをクリックしたらそのファイルへ移動するような、
そんな機能が VC++ にあるようでしたら、教えてください。


102ポイント を手に入れた。


Name: Ma  ..初心者(8,160ポイント)   Date: 2009/05/22(金) 07:58   No:33834 解決!     
Title: Re:VC++ で BCC のGREP のような機能は?    
すいません。自己解決しました。
シンボルの検索でできました。




Name: 初心者  ..プログラマー(32,404ポイント)   Date: 2009/05/18(月) 02:26   No:33623       
Title: C言語の順次演算処理について    
次の問題をdouble型でプログラミングの方法を教えてください。お願いします。
最初なのにすみません。
[1] x=8、y=7、z=6として、x、y、zの積を求めよ。
[2] 298秒は何分何秒かを求めよ。
[3] 底辺=15.63cm、高さ2.84cmの三角形の面積を求めよ。
[4] a=10.23、b=3.64、c=1.23として、(a+b)/cを求めよ。
[5] a=3.5、b=2.9、c=5.1として(a+b+c)/(c−b−a)を求めよ。
[6] x=3.2としてx3を求めよ。
[7] x=1.3、y=5.6、z=3.8としてx・y・zを求めよ。
[8] 半径15.8mの円の面積を求めよ。
[9] 半径10.5mの円の円周長を求めよ。
[10] 円周が100mの円の半径を求めよ。
[11] x=100、y=200、z=300として、(x+y)/zを求めよ。
[12] 整数x=3、実数y=3としてx5とY5を求めよ。
[13] 円周率piと変数s、rをdouble型で宣言し、pi=3.14159、y=123456782を代入して円の面積sを求めよ。
[14] 変数a、b、cをlong型で宣言し、a=123、b=45678を代入してc=a*bを求めよ。
[15] 変数a、xをlong型で宣言し、x=2、a=x18の値を表示せよ。
[16] 半径15の円の面積を求め、S=○○○と表示せよ。ただし、小数点以下5桁とする。
[17] 円周長が20pの円の半径を求めよ。ただし、小数点以下3桁とし、R=○○○cmと表示せよ。
[18] a=30、b=4を代入して、a/bの剰余を求めよ。
[19] a=70、b=15として、a/bの剰余とbとの積を求めよ
[20] a=5、b=2、c=3、d=4として、(a+b)*d/(d−b)を求めよ。



126ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(85,376ポイント)   Date: 2009/05/18(月) 13:19   No:33630     
Title: Re:C言語の順次演算処理について    
とりあえず、規約を熟読してください。
また、C言語入門ページをみれば、ほとんど(すべて)解決できるはずです。


51ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(101,153ポイント)   Date: 2009/05/18(月) 14:48   No:33635     
Title: Re:C言語の順次演算処理について    
> 次の問題をdouble型でプログラミングの方法を教えてください。

外部入力等によらずに結果が決まるものは、実行時ではなくコンパイル時までに値を決定できるようにプログラミングします。
可能であれば、元の式の原型をとどめる形でコーディングするのが望ましいですが、無理な場合(累乗等)は手作業で計算し、元の式はコメントとして残す等の方法を採りましょう。

具体的には、最初の問題であれば、
const double result = 8 * 7 * 6;



あるいは、x, y, zという名前を反映するのであれば、
#define x 8

#define y 7
#define z 6
const double result = x * y * z;


とすればよいでしょう。
ただし、マクロの使用はデメリットも多いので、十分注意してください。


242ポイント を手に入れた。

Name: TKOZ  ..上級者(23,571ポイント)   Date: 2009/05/21(木) 19:06   No:33794     
Title: Re:C言語の順次演算処理について    
298秒が何分何秒かは、

#include<stdio.h>
#include<math.h>

int main(void)
{
double num=298;

double fun,byou;

fun=floor(num/60.0);
byou=(int)num%60;

printf("298秒は%01.0f分%01.0f秒です。\n",fun,byou);

return 0;
}

で出来ます。
floor()は、math.hをインクルードする必要があります。


138ポイント を手に入れた。

Name: 初級者  ..初心者(6,635ポイント)   Date: 2009/05/21(木) 19:56   No:33799     
Title: Re:C言語の順次演算処理について    
間違えたので消します。

31ポイント を手に入れた。

Name: 初心者  ..プログラマー(32,413ポイント)   Date: 2009/05/21(木) 21:19   No:33803 解決!     
Title: Re:C言語の順次演算処理について    
皆様、ありがとうございました。

9ポイント を手に入れた。



Name: チルチル  ..中級者(13,453ポイント)   Date: 2009/05/19(火) 17:40   No:33688       
Title: char型配列?    
なんかchar型配列に文字列を格納する時は
文字数+1個要素を確保しないといけないって
聞いたんですけど、なぜ1個多く確保する必要があるんですか?


23ポイント を手に入れた。


Name: 御津凪 [URL]  ..比類無きプログラマー(87,697ポイント)   Date: 2009/05/19(火) 17:53   No:33689     
Title: Re:char型配列?    
C/C++ では文字列の終端を、ヌル文字('\0')で判断するためです。

strlen 等の関数では、以下のような処理を行って文字列の長さを判別しています。
size_t strlen( const char *s ){

size_t r = 0;
while(s[r] != '\0') ++r;
return r;
}


ヌル文字も一文字として扱うので、文字数に1個足した要素分確保する必要がある、ということです。
なので、C/C++ のどの文字列も、文字列の最後にヌル文字があります。
(例外はありますが)


135ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(61,026ポイント)   Date: 2009/05/19(火) 17:55   No:33690     
Title: Re:char型配列?    
最後に終端コード'\0'をセットするためです。
printf等の関数は文字列の終わりを'\0'で判断するため、'\0'がないと正しく表示されません。
また、sprintfなどで配列に文字列をセットする場合、'\0'が最後に付けられるので+1しておかないとバッファオーバーランになりメモリ破壊の原因になります。


131ポイント を手に入れた。

Name: チルチル  ..中級者(13,592ポイント)   Date: 2009/05/19(火) 19:12   No:33692     
Title: Re:char型配列?    
そうなんですか・・

私は要素数8個のchar型配列に
文字入力関数で8文字入力して
結果がおかしくなったので

要素数を10個にして
その配列の中身を要素数8個の
別の配列にfor文でコピーする処理
を行っていましたが

これが例外って事でしょうか?
見た感じ文字出力関数では正常に
表示されていますが
文字出力関数は終端を判断しなくて良いと言う事でしょうか?


139ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(87,877ポイント)   Date: 2009/05/19(火) 19:31   No:33693     
Title: Re:char型配列?    
> 見た感じ文字出力関数では正常に
> 表示されていますが
> 文字出力関数は終端を判断しなくて良いと言う事でしょうか?

文字出力関数も含め、全ての文字列を扱う関数では、終端(ヌル)文字がないといけません。
見た目正常に表示されていても、終端文字が無ければ
バッファオーバーランにより、文字列の後ろにゴミ文字が発生したり、予期しない動作を引き起こす可能性もあります。

実際、関数に文字列(ポインタ)だけを渡された時、文字列の長さを関数側から判断できるのは
終端文字を探し、その文字までの長さしかありません。

> これが例外って事でしょうか?

例外というのは、終端文字が無くても文字列の長さが判断できる場合(必ず4文字の文字列のデータなど)です。


180ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(61,358ポイント)   Date: 2009/05/19(火) 19:36   No:33695     
Title: Re:char型配列?    
> 文字出力関数は終端を判断しなくて良いと言う事でしょうか?

文字出力関数とは具体的に何を指していますか?

使用する関数によっては終端コードはなくても動作させることはできます。
例えば

char str[8] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };

として

printf("%s\n", str);

とした場合は終端コードがないので正しく動作しません。
str[7]の次のメモリが偶然'\0'であれば正しく表示されますが、あくまでも偶然です。

for (int i = 0; i < 8; i++) {
putchar(str[i]);
}
putchar('\n');

このように一文字ずつ表示して文字列の終わりを自前で判断するのであれば終端コードは無くても正常に動作させることはできます。


2倍のポイントを手に入れた! 332ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(101,386ポイント)   Date: 2009/05/19(火) 19:46   No:33696     
Title: Re:char型配列?    
C++では、終端のナル文字は常に必要というわけではありません。
例えば、std::basic_stringが保持する文字列の末尾には、ナル文字が格納されているとは限りません。
また、アルゴリズム関数も、先頭位置と終端(の次の)位置を指定することになりますので、ナル文字は必須ではありません。


122ポイント を手に入れた。

Name: チルチル  ..中級者(13,656ポイント)   Date: 2009/05/19(火) 20:37   No:33700     
Title: Re:char型配列?    
やっぱりヌル文字を入れた方がいいのかな・・

描画はDrawFormatString関数

REPLAY[i].Nameを%8sで描画しています

Nameは構造体のメンバで要素数8個のchar型配列です

そういえばたまに表示がおかしくなる時が・・


64ポイント を手に入れた。

Name: toyo  ..プログラマー(34,074ポイント)   Date: 2009/05/20(水) 07:24   No:33712     
Title: Re:char型配列?    
%8sだと文字列終端は必要ですよ
これは8文字未満のときに空白文字を8文字分まで追加するという意味で8文字以上の場合はそのまま出力されます
8文字まで表示の場合は精度をあらわすピリオドをつけましょう
%.8sなら8文字以上の場合終端文字はいりません


29ポイント を手に入れた。

Name: チルチル  ..中級者(14,189ポイント)   Date: 2009/05/20(水) 17:32   No:33750     
Title: Re:char型配列?    
あれ?これは文字列ですが
普通これは小数点以下の精度では?

ヌル文字付けた方がよさそうですね
今までは8文字以上はありえないし
0で初期化してるから大丈夫だったのかな・・


75ポイント を手に入れた。

Name: toyo  ..プログラマー(34,358ポイント)   Date: 2009/05/21(木) 07:26   No:33758     
Title: Re:char型配列?    
ピリオドは小数だけの意味ではありませんよ

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
char* str = "ABCDEFG";
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 )
{
return -1;
}
DrawFormatString(10, 10, GetColor(255, 255, 255), "%4s", str);
DrawFormatString(10, 30, GetColor(255, 255, 255), "%.4s", str);
DrawFormatString(10, 50, GetColor(255, 255, 255), "%10s", str);
DrawFormatString(10, 70, GetColor(255, 255, 255), "%10.4s", str);

WaitKey() ;
DxLib_End() ;
return 0 ;
}

を実行すると画像のようになります


211ポイント を手に入れた。

Name: チルチル  ..中級者(14,214ポイント)   Date: 2009/05/21(木) 19:37   No:33797 解決!     
Title: Re:char型配列?    
あ〜なるほど、こう言う使い方もあるんですね。

どうもありがとうございました。


25ポイント を手に入れた。



Name: 超初心者  ..入門者(4,398ポイント)   Date: 2009/05/21(木) 15:37   No:33786       
Title: 無題    
こんにちは。
スペースインベーダーを作っているんですが・・・
インベーダーの敵の移動処理がよく分からないので質問しました・・・
よかったらアドバイスお願いします!


65ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(86,054ポイント)   Date: 2009/05/21(木) 16:34   No:33787     
Title: Re:無題    
どんな動きを実装したいのかよく分かりませんが・・・
とりあえず自分の知っているインベーダーは敵が右に左にと動くやつなので、
その動きを。

っといってもそんな複雑に考えなくてもよくて、
とりあえず敵を動かすのは数十ループに一回と自分で決めます。
敵集団で、現在生きている敵で一番左、一番右にいる敵を随時更新していきます。
その敵が行動範囲限界まで来たら、一列前に移動し、
敵の動く方向を切り替えます。(右→左 左→右)

パッと考えただけですけど、これで一応実装できそうかと。
あとは敵の速さとかは、例えば敵がある一定のラインを超えたら
現在のスピード×1.25とかすれば調節できそうです。

このスレは過去ログに残るので、
題名は分かりやすい名前を付けたほうが良いと思います。


176ポイント を手に入れた。

Name: 超初心者   Date: 2009/06/10(水) 01:05   No:337861244563555 解決!     
Title: Re:無題    
ごめんなさい・・・。
お礼が遅くなってしまいました・・・。
なんとか敵を動かすことができました!
ありがとうございます!




Name: ほのか  ..かけだし(1,538ポイント)   Date: 2009/05/21(木) 09:47   No:33761       
Title: ファイルの上書き…?    
お世話になっております。

住所登録プラグラムを作成中なのですが、住所等をファイルに書き込みしプログラムを終了したあと、もう一度プログラムを起動した時は住所登録者が表示されるのですが、その後またプログラムを終了し、もう一度起動すると登録者が表示されない、というか登録したデータが消えてしまっています;
どうやったら何度繰り返しても消えないようになるのでしょうか…?

ソースは添付にて失礼いたします。


134ポイント を手に入れた。


Name: tkmakwins15  ..比類無きプログラマー(96,581ポイント)   Date: 2009/05/21(木) 10:03   No:33762     
Title: Re:ファイルの上書き…?    
write関数で、fopenを"w"で呼び出してますが、これは、同名ファイルがあれば削除して、新たに空っぽのファイルを作るという意味です。

41ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,865ポイント)   Date: 2009/05/21(木) 10:09   No:33763     
Title: Re:ファイルの上書き…?    
データが消えるのではなくて、
なにもないデータを上書きしているのが原因かと。
ファイル書き込みのモードが"w"になっているので、
ファイルポインタをファイルの先頭に指定しています。

モードを"a"にしてみてください


62ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,878ポイント)   Date: 2009/05/21(木) 10:10   No:33764     
Title: Re:ファイルの上書き…?    
・・・被りました^^;

13ポイント を手に入れた。

Name: ほのか  ..かけだし(1,617ポイント)   Date: 2009/05/21(木) 10:25   No:33766     
Title: Re:ファイルの上書き…?    
回答ありがとうございます^^
モードを"a"にしてみたら消えなくなったのですが、終了し再度起動すると住所登録者が勝手に増えてしまいます…;
これは途中のプログラムが原因でしょうか??;


79ポイント を手に入れた。

Name: non  ..熟練のプログラマー(41,709ポイント)   Date: 2009/05/21(木) 10:42   No:33767     
Title: Re:ファイルの上書き…?    
"w"で間違っていません。
上書きするのだから、アペンドモードにする必要はありません。

問題点1
fgets(filedata,1024,fp)!=NULL
ですが、fgetsは改行文字も配列に格納します。
改行文字を取り除かないと、2回目からおかしくなるはずです。

問題点2
性別は1か2でデータを持っているはずです。それなら、保存するデータも
1か2を保存しなくてはいけません。



117ポイント を手に入れた。

Name: ほのか  ..かけだし(1,691ポイント)   Date: 2009/05/21(木) 10:59   No:33769     
Title: Re:ファイルの上書き…?    
回答ありがとうございます。

改行文字を取り除くには、ファイル書き込み関数の改行を消すだけで良いのでしょうか…?;
課題での指定は1か2で性別を判定し、表示は"男性"または"女性"としなければならないのですが、そのようにする方法はありませんでしょうか??;


74ポイント を手に入れた。

Name: non  ..熟練のプログラマー(42,078ポイント)   Date: 2009/05/21(木) 11:04   No:33770     
Title: Re:ファイルの上書き…?    
試しに
読み込みを
while(fscanf(fp,"%s",filedata)!=EOF){
に変えてみてください。

それからwriteの関数を

void write(Jusyoroku *data,int cnt,char *path){

FILE *fp;
int i;
char dansei[2] = "1";
char jyosei[2] = "2";

if((fp = fopen(path,"w"))==NULL){
printf("File Open ERROR\n");
exit(1);
}

//fprintf(fp,"\n");

for(i=0;i<cnt;i++){
fprintf(fp,"%s\n",data[i].name);
fprintf(fp,"%s\n",data[i].yubin);
fprintf(fp,"%s\n",data[i].add);
fprintf(fp,"%s\n",data[i].tel);
fprintf(fp,"%s\n",data[i].sei);
/*
if(strcmp(data[i].sei,dansei)==0){
fprintf(fp,"性別: 男性\n");
}else
if(strcmp(data[i].sei,jyosei)==0){
fprintf(fp,"性別: 女性\n");
}
*/
fprintf(fp,"\n");
}

fclose(fp);


}

にしてみてください。
結果をしらせてください。


369ポイント を手に入れた。

Name: pooka  ..入門者(3,632ポイント)   Date: 2009/05/21(木) 11:10   No:33771     
Title: Re:ファイルの上書き…?    
改行文字について
filedataの先頭から'\n'を探索してそれを'\0'に置き換えるというかんじで

char *s;
s = strchr(filedata,'\n');
if(s != NULL)
filedata[s-filedata] = '\0';

これを

while(fgets(filedata,1024,fp)!=NULL){
if(strcmp(filedata,"\n")==0){
continue;
}
//ここに書く



181ポイント を手に入れた。

Name: ほのか  ..かけだし(1,849ポイント)   Date: 2009/05/21(木) 11:24   No:33773     
Title: Re:ファイルの上書き…?    
回答ありがとうございます。
non様、pooka様どちらのもやってみましたが、無事に消えずに何度も読み書きできるようになりました^^
しかし、何故か性別のところで「1」を入力しても一度プログラムを終了しまた起動したときに照会すると性別のところが「女性」になってしまいます;


2倍のポイントを手に入れた! 158ポイント を手に入れた。

Name: non  ..熟練のプログラマー(42,109ポイント)   Date: 2009/05/21(木) 11:38   No:33774     
Title: Re:ファイルの上書き…?    
そんなはずはないですが・・・
保存されているファイルをエディタで開いて確認してください。
2になってますか?


31ポイント を手に入れた。

Name: pooka  ..入門者(3,709ポイント)   Date: 2009/05/21(木) 11:39   No:33775     
Title: Re:ファイルの上書き…?    
添付したファイルを実行するとどうなりますか?
あと確認なんですが
>表示は"男性"または"女性"としなければならない
これはプログラムを実行したときですか?
それとも書き込んだファイルですか?


77ポイント を手に入れた。

Name: ほのか  ..かけだし(1,984ポイント)   Date: 2009/05/21(木) 11:51   No:33776     
Title: Re:ファイルの上書き…?    
回答ありがとうございます。
pooka様が添付してくださったファイルを実行してみたら、きちんとできました^^
ありがとうございました!

性別の表示ですが、課題のプリントに詳しいことが書かれていないのでよくわからないのですがおそらく新規登録の入力時以外は全て"男性"または"女性"と表示させるのだと思います…;


135ポイント を手に入れた。

Name: pooka  ..入門者(3,756ポイント)   Date: 2009/05/21(木) 12:10   No:33778     
Title: Re:ファイルの上書き…?    
プログラムを実行したときに"男性"または"女性"と表示すればいいだけなら
nonさんも書かれてますがファイルに1か2を書いて、それを読み込んだほうがいいと思います。


47ポイント を手に入れた。

Name: ほのか  ..かけだし(2,013ポイント)   Date: 2009/05/21(木) 13:10   No:33781 解決!     
Title: Re:ファイルの上書き…?    
ありがとうございます!
今後担当の方に聞いてみて、修正するかしないか決めたいと思います^^


29ポイント を手に入れた。



Name: hal  ..かけだし(1,034ポイント)   Date: 2009/05/20(水) 09:34   No:33717       
Title: ”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
こんにちは。いつもこちらのサイトにはお世話になっています。
龍神録のプログラムを基にして、シューティングゲームを制作しているのですが、
GV.h内に

GLOBAL int img_item[3][3];
GLOBAL int img_point_item[3][3];
GLOBAL int point_item_t point_item[POINT_ITEM_MAX];
という配列を定義したところ、


calc.obj : error LNK2001: 外部シンボル ""struct point_item_t * point_item" (?point_item@@3PAUpoint_item_t@@A)" は未解決です。
ini.obj : error LNK2001: 外部シンボル ""struct point_item_t * point_item" (?point_item@@3PAUpoint_item_t@@A)" は未解決です。
out.obj : error LNK2001: 外部シンボル ""struct point_item_t * point_item" (?point_item@@3PAUpoint_item_t@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct point_item_t * point_item" (?point_item@@3PAUpoint_item_t@@A)" は未解決です。
load.obj : error LNK2001: 外部シンボル ""int (* img_item)[3]" (?img_item@@3PAY02HA)" は未解決です。
graph.obj : error LNK2019: 未解決の外部シンボル "int (* img_item)[3]" (?img_item@@3PAY02HA) が関数 "void __cdecl graph_point_item(void)" (?graph_point_item@@YAXXZ) で参照されました。
load.obj : error LNK2001: 外部シンボル ""int (* img_point_item)[3]" (?img_point_item@@3PAY02HA)" は未解決です。
D:\stg\project\pla.pla\Debug\PlaPla.exe : fatal error LNK1120: 外部参照 3 が未解決です。


というエラーが出るようになりました。
何度も解決を試みたのですが、他の配列(GLOBAL enemy_t enemy[ENEMY_MAX]; など)と何が違うのか、何が原因なのかさっぱり分かりません。
どなたか分かる方がおられましたら、ご教授お願いします。



693ポイント を手に入れた。


Name: 御津凪 [URL]  ..比類無きプログラマー(88,196ポイント)   Date: 2009/05/20(水) 10:12   No:33720     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
「外部シンボル **** は未解決です。」
という類のエラーは、 **** に書かれているものが定義されていない(or 実体がない)というものです。
上記の場合だと、ちょうど追加した3つの変数の実体がいないのが原因です。

あと、
GLOBAL int point_item_t point_item[POINT_ITEM_MAX]; 



の、"int"は不要だと思います。
(これが原因?)


107ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(61,448ポイント)   Date: 2009/05/20(水) 10:15   No:33721     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
※間違い回答だったので削除

31ポイント を手に入れた。

Name: hal  ..ぴよぴよ(792ポイント)   Date: 2009/05/20(水) 19:50   No:33753     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
すみません
intは書き間違いで
GLOBAL point_item_t point_item[POINT_ITEM_MAX];
でした。

御津凪さん、アドバイスありがとうございました。
アドバイスを参考に再度調べてみたところ、
原因の一つは、画像をロードする為の配列img_item[3][3]、img_point_item[3][3]の長さと
格納する画像の数が合っていなかったことだったようです。
img_item[3][2]、img_point_item[2][2]とすると

load.obj : error LNK2001: 外部シンボル ""int (* img_item)[3]" (?img_item@@3PAY02HA)" は未解決です。

のエラーは消えました

しかし未だ7つのエラーが残った状態でまた解決できていません


242ポイント を落としてしまった。

Name: さが  ..入門者(4,774ポイント)   Date: 2009/05/20(水) 20:18   No:33754     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
struct point_item_t * point_item と書いてありますが
もしcalc や iniファイルで struct と書いているなら削除してみてください。


56ポイント を手に入れた。

Name: hal  ..ぴよぴよ(830ポイント)   Date: 2009/05/20(水) 20:25   No:33755     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
>さがさん
ご意見ありがとうございます
calc.cpp ini.cpp内共に探してみましたが、structと書いた部分はありませんでした。


38ポイント を手に入れた。

Name: hal  ..ぴよぴよ(902ポイント)   Date: 2009/05/21(木) 08:42   No:33759 解決!     
Title: Re:”error LNK2001: 外部シンボル〜 は未解決です。”というエラーについて    
解決しました。
プロジェクトファイルと同じフォルダに入っているDebugを一旦削除するとエラーが出なくなりました。
回答してくださった方々ありがとうございました。


72ポイント を手に入れた。



Name: Ma  ..初心者(7,369ポイント)   Date: 2009/05/20(水) 06:59   No:33711       
Title: プロジェクトメンバー集め    
C言語の質問ではなくて恐縮ですが、メンバー集めについて質問です。

ゲームプロジェクトを進める際に、皆さんはグループで開発するなら、
どうやって人集めをしていますか?

リアトモでは見つからないので、インターネットで協力者を探そうと思っています。
今回の場合は、ライターを探そうと思っているのですが、
このようなときに、みなさんが使うウェブページなどありましたら、教えてください。

開発用ページや、公開ページもすでに用意できているのですが、
やはり、開設したばかりのHPで募集をしたとしても、到底メンバーが見つかるわけがありません。

(過去ログに同等の質問がありましたら、よかったら教えてください。)

アドバイスお願いします。


189ポイント を手に入れた。


Name: たいちう  ..プログラマー(28,526ポイント)   Date: 2009/05/20(水) 08:57   No:33713     
Title: Re:プロジェクトメンバー集め    
とりあえずサイトへのリンクをここに貼ってはいかがかと。

19ポイント を手に入れた。

Name: Ma  ..初心者(7,421ポイント)   Date: 2009/05/20(水) 09:33   No:33715     
Title: Re:プロジェクトメンバー集め    
>たいろう 様
やはり、そうですね。


シエル・ソルシエールズ
http://cielsorciere.web.fc2.com/index.html


52ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(88,089ポイント)   Date: 2009/05/20(水) 10:04   No:33718     
Title: Re:プロジェクトメンバー集め    
あえてこちら側の掲示板に書いておきます。

開発状況や活動スケジュールについて比較的明確に記載されていて、
参加する側にとっては現状がわかる分、参加しやすいかと思います。

ただ、現在デバッガ担当はいるのでしょうか?
この規模くらいなら問題は無いとは思いますが、機能面(ステージエディタ周り)からして
デバッガ担当は必要なんじゃないかと思います。

シナリオライターとしては私は不向き(時間的にないため)ですが、
アシスタントプログラマ程度ならちょろっと出来ますよ。

# 調べてはいませんが、総合募集サイトみたいなのがあってもおかしくないような気がしますね。


212ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(61,515ポイント)   Date: 2009/05/20(水) 10:26   No:33722     
Title: Re:プロジェクトメンバー集め    
2chスレ、玉石混交だけど見てる人は多いと思います。
無償ソフト専用スレなので、有償ソフト作る場合はダメです。

http://pc11.2ch.net/test/read.cgi/gamedev/1222009320/l50


67ポイント を手に入れた。

Name: Ma  ..初心者(7,711ポイント)   Date: 2009/05/20(水) 10:31   No:33725     
Title: Re:プロジェクトメンバー集め    
>御津凪 様
>ただ、現在デバッガ担当はいるのでしょうか?
今はいません。
つい最近までリアトモ とやろうと思っていたのですが、
彼の熱気はすぐにどっかへ行ってしまったようです…


>アシスタントプログラマ程度ならちょろっと出来ますよ。
すごくありがたいお申し出ありがとうございます!
今は、メインのゲームの方を優先して、ステージエディタは後回しにしているため、
そこまでたどり着けるか分かりません。
ですが、ステージエディタに限らず、サポートしてくださるようなら、本当にありがたい限りです。

是非とも、お願いしたいですが、ネットでの共同制作というのは、
一度もやったことがなく、少し戸惑っています。

私が問題を抱えた時に、臨時的に助けを求める形でよいのでしょうか?


290ポイント を手に入れた。

Name: Ma  ..初心者(7,759ポイント)   Date: 2009/05/20(水) 10:40   No:33726     
Title: Re:プロジェクトメンバー集め    
>Mist 様
ありがとうございます。
ブックマークにいれておきます。
投稿するかは、しばらく考えて準備を整えてからにします。


48ポイント を手に入れた。

Name: Mikan [URL]  ..中級者(9,170ポイント)   Date: 2009/05/20(水) 10:49   No:33728     
Title: Re:プロジェクトメンバー集め    
mixiで、集めるコミュニティがあったような気がします。

利用されてみてはどうでしょうか?


39ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(88,318ポイント)   Date: 2009/05/20(水) 10:50   No:33729     
Title: Re:プロジェクトメンバー集め    
> 私が問題を抱えた時に、臨時的に助けを求める形でよいのでしょうか?

私もそのほうがいいと思います。
しかし、いざその時にプログラムコードを見ても時間がかかるので、
事前に現状のコードを見させてもらうとありがたいです。

共同作業の場合は、日ごろ定期的にデータをやり取りをするような作業は必要でしょう。


では、連絡等をメールで送っておきたいと思いますが、
トップページの Contact のメルアドでOKですか?


122ポイント を手に入れた。

Name: Ma  ..初心者(7,927ポイント)   Date: 2009/05/20(水) 11:15   No:33730     
Title: Re:プロジェクトメンバー集め    
>MIXI
mixi のアカウントは持っていませんし、取れない状況です。
その手は断念せざるを得ません。



>では、連絡等をメールで送っておきたいと思いますが、
>トップページの Contact のメルアドでOKですか?

はい。そこでOKです。
これから、どうぞよろしくお願いいたします。
今後の連絡手段は、またメールで連絡いたします。


168ポイント を手に入れた。

Name: toyo  ..プログラマー(34,147ポイント)   Date: 2009/05/20(水) 11:47   No:33733     
Title: Re:プロジェクトメンバー集め    
複数での開発ならSubversion等のバージョン管理ソフトを使うのが便利ですよ(1人での開発でも便利です)
オープンソースでやるならSourceforgeに申し込むと無料でサーバ貸してくれます(私も何個かプロジェクト作ってます)


73ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(88,423ポイント)   Date: 2009/05/20(水) 12:06   No:33734     
Title: Re:プロジェクトメンバー集め    
私もローカルで使用してますが、非オープンかつ複数人の開発の場合は専用サーバを借りるか、
自宅サーバを準備する必要があります。
(準備が面倒なのであえて言わないでいました)

一応海外には無料のSVNサーバがあるみたいですね。


105ポイント を手に入れた。

Name: バグ  ..ハッカー(159,739ポイント)   Date: 2009/05/20(水) 12:37   No:33735     
Title: Re:プロジェクトメンバー集め    
mixiの紹介状を送りましょうか?

2倍のポイントを手に入れた! 32ポイント を手に入れた。

Name: Ma  ..初心者(7,993ポイント)   Date: 2009/05/20(水) 12:58   No:33736     
Title: Re:プロジェクトメンバー集め    
>サーバー等
私には、さっぱりの世界ですが、
今日からすこしずづ調べてみます。
まずはSubversionについて調べてきます。

追記:違う言語を学んでいる気分です…


>mixiの紹介状を送りましょうか?
いえ、携帯のアドレスがないので登録できないのです・・・。


66ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(88,076ポイント)   Date: 2009/05/20(水) 13:10   No:33737     
Title: Re:プロジェクトメンバー集め    
http://www2.ocn.ne.jp/~katokiti/

こちらのサイトはいかがでしょう?
人材募集もありますよ。


31ポイント を落としてしまった。

Name: Ma  ..初心者(8,058ポイント)   Date: 2009/05/20(水) 19:18   No:33752 解決!     
Title: Re:プロジェクトメンバー集め    
>やそ様
おぉ!ありがとうございます!
これだけ、集まればなんとかなりそうです。
ではさっそく募集してみます。

皆様ご協力ありがとうございました!


65ポイント を手に入れた。



Name: 研修生  ..初心者(7,040ポイント)   Date: 2009/05/20(水) 10:26   No:33723       
Title: 半角→全角    
半角文字から全角文字への変換するプログラムが全く思いつかないのですがどのように方法がありますか?
ライブラリとかでないでしょうか?VC++6.0です。


74ポイント を手に入れた。


Name: ouh  ..入門者(3,881ポイント)   Date: 2009/05/20(水) 11:32   No:33731     
Title: Re:半角→全角    
API の LCMapString() を使うという手があります。
他にも探せばいろいろあると思います。
自作するという方法もありますけど、めんどくさいですよ。


53ポイント を手に入れた。

Name: 研修生  ..初心者(7,060ポイント)   Date: 2009/05/20(水) 17:35   No:33751 解決!     
Title: Re:半角→全角    
そうですか。ありがとうございました。

20ポイント を手に入れた。



Name: ほのか  ..かけだし(1,016ポイント)   Date: 2009/05/18(月) 17:12   No:33639       
Title: ファイルの読み込み    
お世話になっております。

添付ファイルを参照していただきたいのですが、ファイルへの書き込みはできるようになりましたが、読み込みがうまくいきません;
どうしたらきちんと読み込みできますでしょうか??
読み込みの方も新しく関数を作った方が良いのでしょうか?


73ポイント を手に入れた。


Name: box  ..ハッカー(140,166ポイント)   Date: 2009/05/18(月) 17:54   No:33642     
Title: Re:ファイルの読み込み    
読込みがどのようにうまくいかないかを、具体的に書いていただけますか?
プログラムを実行したときに、何かエラーメッセージが出るのですか?


20ポイント を手に入れた。

Name: non  ..熟練のプログラマー(40,923ポイント)   Date: 2009/05/18(月) 20:53   No:33648     
Title: Re:ファイルの読み込み    
ファイルの読み込みをしている部分はどこですか?
ざっとみたけど、見つからないのですが。

それより、前にも言ったようにmain文をwhile(1)で回して、終了をexitするのは
やめましょうよ。

case 9:で終了フラグを立てるようにして、(例えば end_flg=1)
while(!end_flg)にするとかです。

それに、mainでfopenしたとき、オープンできないときはreturnしているので
elseを書く必要はありません。


198ポイント を手に入れた。

Name: ほのか  ..かけだし(1,088ポイント)   Date: 2009/05/19(火) 09:56   No:33664     
Title: Re:ファイルの読み込み    
回答ありがとうございます。
ファイルの読み込みは、main関数のwhile文の前で行うつもりです。
while(1)などの部分は修正させていただきます。ご指摘ありがとうございます。


72ポイント を手に入れた。

Name: non  ..熟練のプログラマー(40,853ポイント)   Date: 2009/05/19(火) 12:09   No:33671     
Title: Re:ファイルの読み込み    
>ファイルの読み込みは、main関数のwhile文の前で行うつもりです。

行うつもりで、まだ作っていないなら、動かないのは当然ですね。

>読み込みの方も新しく関数を作った方が良いのでしょうか?
fopenのところから含めて関数にする方がわかりやすいと思います。



70ポイント を落としてしまった。

Name: ほのか  ..かけだし(1,108ポイント)   Date: 2009/05/19(火) 13:08   No:33672     
Title: Re:ファイルの読み込み    
作ってみましたが上手くいかなかったため消したものをUPしたのです…

20ポイント を手に入れた。

Name: box  ..ハッカー(140,228ポイント)   Date: 2009/05/19(火) 14:14   No:33675     
Title: Re:ファイルの読み込み    
> 作ってみましたが上手くいかなかったため消したものをUPしたのです…

その、うまくいかない部分を見せる方が、
「ここをこうすればうまくいく」という
具体的な回答が届きやすいと思います。


34ポイント を手に入れた。

Name: ほのか  ..かけだし(1,136ポイント)   Date: 2009/05/19(火) 14:21   No:33676     
Title: Re:ファイルの読み込み    
while (fgets(s, 256, fp) != NULL) {
   printf("%s", s);
.
.
.
}

上記のような感じにしましたが、実行してみても何も表示されないまたは(NULL)と表示されます。


28ポイント を手に入れた。

Name: non  ..熟練のプログラマー(40,952ポイント)   Date: 2009/05/19(火) 17:06   No:33685     
Title: Re:ファイルの読み込み    
そこだけみてもわかりません。
面倒でも、すべてを入力したプログラムをアップしてください。

なお、writeの関数ですが、
fprintf(fp,"氏名: %s\n",data[i].name);
のように、"氏名:"の部分はファイルに出力しない方がいいですね。
実際のデータのみにした方がいいです。


99ポイント を手に入れた。

Name: ほのか  ..かけだし(1,186ポイント)   Date: 2009/05/20(水) 09:16   No:33714     
Title: Re:ファイルの読み込み    
ファイルを新しくUPしました。
読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;


50ポイント を手に入れた。

Name: non  ..熟練のプログラマー(41,148ポイント)   Date: 2009/05/20(水) 13:45   No:33738     
Title: Re:ファイルの読み込み    
確認ですが、

> while(fgets(filedata,1024,fp)!=NULL){
> printf("%s",filedata);
> }

ここで、読み込んだデータは画面に出力されていますか?

>読み込んではいるようなのですが、「■■住所登録者■■」のところで表示されない・一度プログラムを終了するとデータが消えているなど、上手くいきません…;

この文章を読むと、上のデータは出力されていると思えます。
次に、「■■住所登録者■■」のところで表示されないというのは、filedataに読み込んだデータを
Jusyoroku data[20];に代入していないから、あたりまえでしょう。
一度プログラムを終了するとデータが消えているのは、同じ名前で書き込みのためにオープンしたから
これも当然でしょう。







263ポイント を手に入れた。

Name: ほのか  ..かけだし(1,194ポイント)   Date: 2009/05/20(水) 13:59   No:33739     
Title: Re:ファイルの読み込み    
読み込んだデータは画面に出力されています。
Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?
同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;


8ポイント を手に入れた。

Name: non  ..熟練のプログラマー(41,375ポイント)   Date: 2009/05/20(水) 14:30   No:33740     
Title: Re:ファイルの読み込み    
>Jusyoroku data[20];に代入するのは登録者表示の関数内でしょうか…?

このwhile内ですね。
> while(fgets(filedata,1024,fp)!=NULL){
> printf("%s",filedata);
> }



>同じ名前でオープンすると消えてしまうのでしたら、どのようにしたら消えないようにできるのでしょうか;

データが正しく格納されるようになったら上書きしても大丈夫でしょう。
または、保存する前に名前を再度入力できるようにするとか?(別名保存)

それに、fcloseしてくださいね。
開けたままにしておくのはマナー違反


227ポイント を手に入れた。

Name: ほのか  ..かけだし(1,270ポイント)   Date: 2009/05/20(水) 14:52   No:33742     
Title: Re:ファイルの読み込み    
回答ありがとうございます。
Jusyoroku data[20];に代入するにはどのようにしたら良いのでしょうか…
data = filedata;とかでは駄目だったのでよくわかりません;


76ポイント を手に入れた。

Name: pooka  ..入門者(3,093ポイント)   Date: 2009/05/20(水) 15:21   No:33743     
Title: Re:ファイルの読み込み    
こんな感じでどうでしょうか?

int count = 0;

while(fgets(filedata,1024,fp) != NULL){
if(strcmp(filedata,"\n") == 0)
continue;
switch(count%5){ //5は氏名、郵便番号、住所、電話番号、性別の5個
case 0:
strcpy(data[cnt].name,filedata);
break;
case 1:
strcpy(data[cnt].yubin,filedata);
break;

//あと同じように

}
if(++count%5 == 0)
++cnt;
}

fgetsで読み込んだfiledataには改行文字も含まれているので、別途処理が必要になるかもしれません。


2倍のポイントを手に入れた! 460ポイント を手に入れた。

Name: ほのか  ..かけだし(1,405ポイント)   Date: 2009/05/20(水) 15:53   No:33746     
Title: Re:ファイルの読み込み    
回答ありがとうございます。
表示されるようになりました^^ありがとうございます。

しかし、改行をどうやったら消せるのかわかりません;
それと、性別のところをどうやったら表示させられるでしょうか?;
今のままだと何も表示されません;

新しくファイルを添付させていただきます。


135ポイント を手に入れた。

Name: pooka  ..入門者(3,451ポイント)   Date: 2009/05/20(水) 16:02   No:33748     
Title: Re:ファイルの読み込み    
今から出かけるので性別だけ

if(strcmp(filedata,"男性\n") == 0)
strcpy(data[i].sei,"1");
else
strcpy(data[i].sei,"2");

書き込むときに「性別:」を書いてない、また改行文字を削除していないと仮定しています。


102ポイント を手に入れた。

Name: ほのか  ..かけだし(1,404ポイント)   Date: 2009/05/20(水) 16:17   No:33749 解決!     
Title: Re:ファイルの読み込み    
ありがとうございます!
これからソースを修正してみます^^
改行の部分も自分でまた色々と試してみます!
でもわからない可能性が高いのでまた質問させていただくと思います;


1ポイント を落としてしまった。



Name: Huzzy  ..かけだし(2,160ポイント)   Date: 2009/05/18(月) 23:25   No:33656       
Title: 自機と敵の当たり判定について    
只今、龍神録様のコードを応用して横STGを
製作中です。

一難さってまた一難です;;

敵キャラと自機との当たり判定を加えたい
龍神録のソースにもあるout.cppを変更して
行おうと頑張っているのですが、中々
うまく回ってくれません;;

そして下記のクリックしても飛ばない
エラーメッセージ×11がどうにも消えません;;
(そのまま貼り付けで申し訳ありません)

判る方が居られましたら、ご教授ください。
お願いします。


1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_packet_iskeyframe が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_header が関数 "int __cdecl TheoraDecode_ReadHeader(struct tagDECODE_THEORA *)" (?TheoraDecode_ReadHeader@@YAHPAUtagDECODE_THEORA@@@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_YUVout が関数 "unsigned long __stdcall TheoraDecode_Thread(void *)" (?TheoraDecode_Thread@@YGKPAX@Z) で参照されました。

1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_packetin が関数 "int __cdecl _TheoraDecode_IncToFrame(int,int)" (?_TheoraDecode_IncToFrame@@YAHHH@Z) で参照されました。

1>D:\c++\mikudius\miku3\Debug\miku3.exe : fatal error LNK1120: 外部参照 10 が未解決です。








931ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(356,809ポイント)   Date: 2009/05/19(火) 00:20   No:33660     
Title: Re:自機と敵の当たり判定について    
 こちらは参考になりますか?

C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=33334&page=&id=dixq&rln=33645


59ポイント を手に入れた。

Name: Huzzy  ..入門者(2,620ポイント)   Date: 2009/05/19(火) 22:19   No:33705     
Title: Re:自機と敵の当たり判定について    
Justyさんのおかげで、先ほどの
エラーがやっと消えてくれました。

これでやっと本来の当たり判定の質問に戻る事が出来す;;

改めて、下記の※1を※2の様に
変更してみたのですが、?の部分と
後どの部分を変更すれば良いのでしょうか?

※1 敵と自機ショットが当たったかどうかを判定する
int out_judge_cshot(int i,int s){
if(cshot[i].cnt>0){//ショットの軌道が1度でも計算されていたら
if(out_judge(cshot[i].x,cshot[i].y,enemy[s].x,enemy[s].y,
cshot_range[cshot[i].knd],enemy_range[enemy[s].knd],
cshot[i].spd,cshot[i].angle)){
return 1;
}
}
return 0;
}

※2 敵と自機の当たり判定
int out_judge_enemy_ch(int i,int s){
if(???????.cnt>0){
if(out_judge(ch.x,ch.y,enemy[s].x,enemy[s].y,
CRANGE,enemy_range[enemy[s].knd],???????.spd,????????.angle)){
return 1;
}
}
return 0;
}

如何なものでしょうか?


460ポイント を手に入れた。

Name: pooka  ..入門者(3,349ポイント)   Date: 2009/05/20(水) 15:54   No:33747     
Title: Re:自機と敵の当たり判定について    
自分はこんな感じでやりました。
おかしな部分があるかもしれないので、あくまでも参考程度に…
あとout_main関数にenemy_and_ch();を加えてください。

//敵と自機との処理
void enemy_and_ch(){
int i;
double r;
if(ch.flag == 0){
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag == 1){
r = (ch.x-enemy[i].x-FIELD_X)*(ch.x-enemy[i].x-FIELD_X)+(ch.y-enemy[i].y-FIELD_Y)*(ch.y-enemy[i].y-FIELD_Y);
if((enemy_range[enemy[i].knd]+CRANGE)*(enemy_range[enemy[i].knd]+CRANGE)>r){
enemy[i].flag = 0;
enter_del_effect(i);
if(ch.flag==0 && ch.mutekicnt==0){//ステータスが通常で、無敵じゃなかったら
ch.flag =2; //1:喰らいボム受付中 2:死んで浮き上がり中
ch.cnt =0;
se_flag[6]=1;
return;
}
}
}
}
}
}


256ポイント を手に入れた。



Name: やっくん  ..かけだし(1,606ポイント)   Date: 2009/05/20(水) 01:01   No:33710       
Title: 描画した文字を消すには?    
DXライブラリでDrawString関数を使い描画した文字を消したいのですが、
効率の良い方法がわかりません。
今は他の画像を上から被せて無理やり消してます。

それに加えて、、、

画像を複数読み込んだものを消す時に、
一部を消したいのですが、
消すことができません。

この二つを解決するヒントを教えてもらえないですか?


106ポイント を手に入れた。


Name: Mist  ..熟練のプログラマー(61,417ポイント)   Date: 2009/05/20(水) 09:33   No:33716     
Title: Re:描画した文字を消すには?    
> DXライブラリでDrawString関数を使い描画した文字を消したいのですが、
> 効率の良い方法がわかりません。
> 今は他の画像を上から被せて無理やり消してます。

それが一般的かと思います。

> 画像を複数読み込んだものを消す時に、
> 一部を消したいのですが、
> 消すことができません。

消すというのはメモリから画像データを消すということですか?
リファレンスに以下の関数があります。

宣言 int DeleteGraph( int GrHandle ) ;

概略 指定のグラフィックをメモリ上から削除する


59ポイント を手に入れた。

Name: やっくん  ..かけだし(1,505ポイント)   Date: 2009/05/20(水) 10:28   No:33724     
Title: Re:描画した文字を消すには?    
解答ありがとうございます。

描画した文字を消すには、
やはりそうするしかないのですか・・・・


画面上の画像を消すと言う前に疑問なのですが、
画像を画像の上に描画したら古い画像のデータは消えてしまいますか?
それとも上から描画した画像をどうにか消すことができたら古いものが現れますか?
その辺りがよくわかりません。


101ポイント を落としてしまった。

Name: Mist  ..熟練のプログラマー(61,524ポイント)   Date: 2009/05/20(水) 10:49   No:33727     
Title: Re:描画した文字を消すには?    
> 画像を画像の上に描画したら古い画像のデータは消えてしまいますか?

はい。
Aという画像を描画した後に、同じところにBという画像を描画した場合AのデータはBのデータで上書きされて無くなるので、Aをもう一度表示するにはもう一度Aを画面に描画するしかありません。


9ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,803ポイント)   Date: 2009/05/20(水) 11:38   No:33732     
Title: Re:描画した文字を消すには?    
確かに描写された文字を消すには画像やDrawBox等で隠すと消えます。

また、
SetDrawScreen(DX_SCREEN_BACK)
ClearDrawScreen()
ScreenFlip()
を組み合わせることによって、
前ループでDX_SCREEN_BACKに描写したものを消し、
現ループで裏描写→表描写できるので、
前ループでDrawString()と記述してある行を通っていたが、
現ループではその行を通っていないなら、画面上から文字は消えます。(文字を描写しない)
これも一応文字を消すの題意を満たしているかなと思うのですが・・・
文字を消すっというよりも、文字を描写しないっと表現するほうが適切ですかね。
これは、ゲームプログラミングの館にも採用されています。


289ポイント を手に入れた。

Name: やっくん  ..かけだし(1,600ポイント)   Date: 2009/05/20(水) 15:37   No:33744     
Title: Re:描画した文字を消すには?    
Mistさん
答えていただきありがとうございます。
これでどうにか前に進めそうです(^^)

kazuoniさん
解答ありがとうございます。
それらの関数は使ってたのですが・・・
館の方も一通り目を通してたのにも関わらず、
知識不足で自分の作る物に応用できると気づきませんでした。
参考になりました♪



95ポイント を手に入れた。

Name: やっくん  ..かけだし(1,619ポイント)   Date: 2009/05/20(水) 15:38   No:33745 解決!     
Title: Re:描画した文字を消すには?    
解決を付け忘れてたので、解決マークを付けます。

19ポイント を手に入れた。



Name: 研修生  ..初心者(6,885ポイント)   Date: 2009/05/19(火) 10:02   No:33665       
Title: EOF    

int main()
{
int c, lastc = EOF;
while((c = getchar()) != EOF){
if(c != ' '){
putchar(c);
}


else if(lastc != ' '){
putchar(c);
}

lastc = c;
}

return 0;
}


このプログラムは以前質問した2個以上の空白を1つにするというプログラムの解答サンプルですが
判らない所はlastcの初期値のことです。初期値が空白で文字列が○aaのように最初に空白があった場合
その空白は表示されません。また今回は空白が2個以上あった場合 ですが文字列が2個以上あった場合
の一般的な初期値は何にするのが妥当か?という論議がありました。

私としてはも対象の文字以外ならなんでもいいんじゃ・・という意見もだしましたが一般的ではないと
退けられました。結局答えは EOF だったのですが、whileの条件があるからそうかなと思っていましたが
それでもないようです。何故初期値に EOFが良いのか理由わかる方いますか?


434ポイント を手に入れた。


Name: 研修生  ..初心者(6,896ポイント)   Date: 2009/05/19(火) 11:45   No:33669 解決!     
Title: Re:EOF    
自己解決しました

11ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(61,272ポイント)   Date: 2009/05/19(火) 11:52   No:33670     
Title: Re:EOF    
参考までに聞きたいのですが、どのように自己解決しました?

私個人としては、このプログラムはlastcの初期値が' 'のときに正常に動かなくなるので
' '以外であるならば何でもよいと考えます。
従って、初期化は

int lastc = !' ';

とします。


112ポイント を手に入れた。

Name: 研修生  ..初心者(6,966ポイント)   Date: 2009/05/19(火) 13:24   No:33673     
Title: Re:EOF    
私もそんなもの臨機応変にかえれば・・と思うんですけどね。
今回の論題は空白ではなく文字列であったら?というものでした。
もし2個以上の文字'a'を1つにするとき初期値を'a'とするのはNGです。同様にa~zまで言えます。
すると一般的に定義するのはどれが適当か という論題でした。
結論はEOFが最も適した値でその理由はEOFは0〜255以外の値であるから
ということでした。


70ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(101,264ポイント)   Date: 2009/05/19(火) 14:47   No:33679     
Title: Re:EOF    
> 私もそんなもの臨機応変にかえれば・・と思うんですけどね。

具体的にどんな値にするかはともかく、同様のケースでは常に同じようにコーディングするという一貫性は大切です。


35ポイント を手に入れた。

Name: non  ..熟練のプログラマー(40,885ポイント)   Date: 2009/05/19(火) 17:19   No:33687     
Title: Re:EOF    
>結論はEOFが最も適した値でその理由はEOFは0〜255以外の値であるから
ということでした。

0ではいけないのでしょうか?
私なら lastc = '\0' と書くかもしれない


67ポイント を落としてしまった。

Name: GPGA  ..熟練のプログラマー(61,281ポイント)   Date: 2009/05/20(水) 14:52   No:33741     
Title: Re:EOF    
回答、ありがとうございました。

9ポイント を手に入れた。



Name: yuz  ..ぴよぴよ(32ポイント)   Date: 2009/05/20(水) 10:08   No:33719       
Title: 正規表現    
いつもお世話になっています。

今回は正規表現がよくわからないのですが、
どなたかご教授お願いします。

表したい正規表現が、
文字長は50で、
0-9、a-z、!、?、$、[、]が使用可能で、
先頭は$$、!!はだめ、
[]で囲まれるのもだめ、

というものです。

宜しくお願いします。
(C言語なのでregex.hの、regcomp、regexec、regfreeを使用します)


32ポイント を手に入れた。




Name: 大工  ..プログラマー(33,908ポイント)   Date: 2009/05/19(火) 16:38   No:33681 解決!       
Title: 参照とポインタ    
引数の定義の仕方で良く分からない仕様だったので質問させてください

参照で関数funcを定義した場合,

_vec[i].retest()

と定義出来ますが,

ポインタで定義した場合,

_vec[i].retest()
_vec[i]->retest()

2パターンで書いてもエラーが出ました.

'->'のパターン
$ g++ -o test test.cpp
test.cpp: In function ‘void func(std::vector<TEST, std::allocator<TEST> >*)’:
test.cpp:33: error: base operand of ‘->’ has non-pointer type ‘std::vector<TEST, std::allocator<TEST> >’

'.'のパターン
$ g++ -o test test.cpp
test.cpp: In function ‘void func(std::vector<TEST, std::allocator<TEST> >*)’:
test.cpp:33: error: ‘class std::vector<TEST, std::allocator<TEST> >’ has no member named ‘retest’

呼び方に大きな違いがあるとは思うのですが,参照とポインタの違いを良く分かっていないのが現状です.
詳しい方,よろしくお願いします.

*参照*

#include<iostream>
#include<vector>

class TEST {

private:
int test;

public:
TEST(int i) : test(i * 10) {}
int retest() {return test;}

};

void func(std::vector<TEST>&);

int main(void) {

std::vector<TEST> vec;

for(int i = 0; i < 10; i++) vec.push_back(TEST(i));

std::cout << "main" << std::endl;
for(int i = 0; i < 10; i++) std::cout << vec[i].retest() << std::endl;

func(vec);

return 0;
}

void func(std::vector<TEST>& _vec) {

for(int i = 0; i < 10; i++) std::cout << _vec[i].retest() << std::endl;

}


*ポインタ*


#include<iostream>
#include<vector>

class TEST {

private:
int test;

public:
TEST(int i) : test(i * 10) {}
int retest() {return test;}

};

void func(std::vector<TEST>*);

int main(void) {

std::vector<TEST> vec;

for(int i = 0; i < 10; i++) vec.push_back(TEST(i));

std::cout << "main" << std::endl;
for(int i = 0; i < 10; i++) std::cout << vec[i].retest() << std::endl;

func(&vec);

return 0;
}

void func(std::vector<TEST>* _vec) {

for(int i = 0; i < 10; i++) std::cout << _vec[i].retest() << std::endl;

}


318ポイント を手に入れた。


Name: Blue  ..中級者(10,194ポイント)   Date: 2009/05/19(火) 16:52   No:33682     
Title: Re:参照とポインタ    
>_vec[i].retest()
(*_vec)[i].retest();
では?


24ポイント を手に入れた。

Name: 大工  ..プログラマー(33,922ポイント)   Date: 2009/05/19(火) 16:54   No:33683     
Title: Re:参照とポインタ    
あ,あれ・・・通りました・・・

なんで・・・


14ポイント を手に入れた。

Name: Blue  ..中級者(10,401ポイント)   Date: 2009/05/19(火) 17:03   No:33684     
Title: Re:参照とポインタ    
ポインタなんだからoperator [] がないわけで、
実態にしてoperator [] を呼ぶようにする。

atメソッドでもoperator [] と同じことができるので書き換えると

std::vector<std::string> v;

v.push_back("hoge");

//std::cout << v[0].c_str() << std::endl;
std::cout << v.at(0).c_str() << std::endl;

std::vector<std::string>* p = &v;

//std::cout << (*v)[0].c_str() << std::endl;
std::cout << p->at(0).c_str() << std::endl;


という感じ。


207ポイント を手に入れた。

Name: Blue  ..中級者(10,418ポイント)   Date: 2009/05/19(火) 17:13   No:33686     
Title: Re:参照とポインタ    
ちなみにこんなのもできる。


//std::cout << v[0].c_str() << std::endl;
std::cout << v.operator [](0).c_str() << std::endl;

//std::cout << (*v)[0].c_str() << std::endl;
std::cout << p->operator [](0).c_str() << std::endl;


17ポイント を手に入れた。

Name: 大工  ..プログラマー(33,926ポイント)   Date: 2009/05/19(火) 19:31   No:33694     
Title: Re:参照とポインタ    
ふむふむ...

[]このオペーレーターだけで実体化してるものだと思っていました....

ありがとうございました.


4ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(101,521ポイント)   Date: 2009/05/19(火) 19:55   No:33697     
Title: Re:参照とポインタ    
> ポインタなんだからoperator [] がないわけで、

いや、ポインタに対して添え字演算子を使うと、組み込みの[]とみなされてしまいます。

つまり、_vec[i]とすると、*(_vec + i)の扱いになります。
結果として、式そのものはstd::vector<TEST>型の左辺値に評価されるわけですが、まったく的外れのアドレスの存在しないオブジェクトを触ってしまいます。


135ポイント を手に入れた。

Name: Blue  ..中級者(10,345ポイント)   Date: 2009/05/19(火) 23:40   No:33708     
Title: Re:参照とポインタ    
>いや、ポインタに対して添え字演算子を使うと、組み込みの[]とみなされてしまいます。
ですね。

std::vector<TEST>のoperator[]ではなくなる

としておくべきでした。


73ポイント を落としてしまった。



Name: kazuoni [URL]  ..比類無きプログラマー(84,573ポイント)   Date: 2009/05/17(日) 14:03   No:33573       
Title: typedefテンプレート    
お邪魔します。
以下に記述するtypedefを用いた構造体にテンプレートを使用したいのですが、
コンパイルエラーを避けるためには
どのように記述するのが一番なんでしょうか?

msdn コンパイラ エラー C2823
ttp://msdn.microsoft.com/ja-jp/library/w191kaf4.aspx

コードを引用したのを以下に示します。
template<class T>

typedef struct x {
T i; // C2823 can't use T, specify data type and delete template
int i; // OK
} x1;

よろしくお願いします。


146ポイント を手に入れた。


Name: tkmakwins15  ..比類無きプログラマー(96,540ポイント)   Date: 2009/05/17(日) 14:26   No:33578     
Title: Re:typedefテンプレート    
typedefを削除してください。

7ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(100,911ポイント)   Date: 2009/05/17(日) 15:23   No:33585     
Title: Re:typedefテンプレート    
typedefを削除するだけではだめです。
結局何をしたいかによって、どう修正するかが変わってきます。


2倍のポイントを手に入れた! 52ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(84,932ポイント)   Date: 2009/05/17(日) 17:18   No:33593     
Title: Re:typedefテンプレート    
tkさん、たかぎさん、ご回答ありがとございます。

行列を制御するクラスを作っていて、
そのクラスで行列の要素を構造体のメンバとして、持たせます。
そこで、要素の型をクラスオブジェクト宣言時に指定したかったんです。
すると、構造体にもテンプレートが必要になって、質問したような問題に躓きました。

別にメンバを構造体にしなくてもいいじゃないかってなるんですけど、
行列の乗算を行う関数で使うために、要素がまとまっている構造体をm1,m2として、
mamul(m1,m2)としたかったので、構造体が必要になってます。


151ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(357,234ポイント)   Date: 2009/05/19(火) 01:12   No:33663     
Title: Re:typedefテンプレート    

>どのように記述するのが一番なんでしょうか?

 普通に

template<class T>
struct X
{
    T val;
};

 でいいと思います。


 typedefを使うなら

    typedef X<int> int_X;
    typedef X<float> float_X;

こういう風に型を決めて使えばいいかと。


174ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,514ポイント)   Date: 2009/05/19(火) 23:28   No:33707 解決!     
Title: Re:typedefテンプレート    
Justyさん、ご回答ありがとうございました。

いろいろ考えていて、なぜtypedefをつけるのかっと
よく考えていたら、必要のない構造で組むことができました。
浅はかな質問で大変申し訳ありませんでした。

今回はこれで解決とさせていただきます。

次回もよろしくお願いします。


102ポイント を手に入れた。



Name: 和金  ..ぴよぴよ(307ポイント)   Date: 2009/05/17(日) 20:01   No:33610       
Title: ダンジョンフィールド    
おそらくはじめまして。ここの掲示板はよく覗かせてもらってます。
風来のシレンのような、いわゆるローグ系と言われるゲームのダンジョンマップを作成するプログラムを書きました。
売ってる本を見てみると、フィールドをまずいくつかに分割して、その中で部屋を一つ作ったり作らなかったり、という方法をとっていて、案外ランダム性が薄いように感じました。
このプログラムで作れるダンジョンフィールドは、できるだけランダム性を残したものになってます。
その分、なんじゃこりゃ的なフィールドを作ることもしばしばです。

ダンジョンゲームを作るつもりでいましたが、これが書けた時点で満足してしまいました(^^;

あんまり経験もないので不具合等、あるかと思いますが、気に入っていただいたらご自由に使ってやって下さい。

アドバイス等、ございましたらよろしくお願いします。


307ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(85,256ポイント)   Date: 2009/05/17(日) 21:12   No:33615     
Title: Re:ダンジョンフィールド    
ツール作るのが大好きなんで、さっそくDLしてみました。

これはなかなか使えそうですねw
ただ、使う側として、

・部屋の数は自分で指定したい時がある
・部屋の最小サイズを自分で指定したい時がある

があります。ここを実装するともっと応用がきくのではないかと思います。


あと、これをC++で書くとインターフェース部、実行部と
分けることができるので、もう少し管理しやすくなるかと思います。
また、解放忘れも防げます。

・・・面白いから、これとDXライブラリ使ってゲーム作ってみようかなって
思っちゃいました^^;
もしかしたら勝手に使いやすいように変えていってしまうかもしれないですが・・・。


制作お疲れ様でした!!


132ポイント を手に入れた。

Name: 和金  ..ぴよぴよ(488ポイント)   Date: 2009/05/17(日) 22:49   No:33621     
Title: Re:ダンジョンフィールド    

 部屋の最小サイズ、部屋の数を指定できるようにしました。
 今回はコンソールから最大フィールドサイズ、最大部屋数、最小部屋サイズ(、部屋の数)を与えて実行する形にしました。


>kazuoniさん
さっそくありがとうございます!
部屋の最小サイズは簡単にいじれるので、指定できるようにしますね。
部屋の数は、力技でなんとかしました(^^;

あんまり触ったことがないですが、確かにオブジェクト指向の方が関数などの管理はしやすそうですね。入り組んでくると、把握し直すだけで一苦労です(^^;

>作ってみようかなって
思っていただけただけでも嬉しいです(^^)
通路の探索などけっこう泥臭くやってるんでお見苦しいかとは思いますが、改良などもぜひどうぞ!


181ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,412ポイント)   Date: 2009/05/18(月) 13:29   No:33631     
Title: Re:ダンジョンフィールド    
ええっと、詳しく見てないので原因が分かりませんが、
起動直後に何もせず終了してしまいますが、仕様ですか?


追記
あ、コマンド引数なんですね^^;
了解しました。


36ポイント を手に入れた。

Name: 和金  ..ぴよぴよ(630ポイント)   Date: 2009/05/18(月) 14:24   No:33634     
Title: Re:ダンジョンフィールド    
です(^^;

COMを徘徊させる場合に、部屋や通路の出入り口の位置が必要になるんですが、その情報も構造体に入れといたほうがいいかもしれませんね。


72ポイント を手に入れた。

Name: 和金  ..ぴよぴよ(696ポイント)   Date: 2009/05/19(火) 18:13   No:33691     
Title: Re:ダンジョンフィールド    
すみません。ミスの報告です。
DUNGEON_FIELD構造体のwalk_countが正しい通路の数になってませんでした。
正しくは、walk_countからroom_countを引いた値です。
今ちょっと直せないので、報告までです。


66ポイント を手に入れた。



Name: ABC  ..かけだし(1,080ポイント)   Date: 2009/05/19(火) 10:29   No:33666       
Title: class定数を定義したいですが    

いつもお世話になっております

例えば、
class ABC
{
static const x = 100; // OK

static const y[] = {100,200,300}; // コンパイラエラー:{ が関数外に存在する。 云々


}

今回ちょうど配列(y[])のような定数シリーズを定義したいんで、どうすればいいのでしょうか


どうぞ宜しくお願いします。


134ポイント を手に入れた。


Name: Blue  ..中級者(10,170ポイント)   Date: 2009/05/19(火) 10:31   No:33667     
Title: Re:class定数を定義したいですが    
ヘッダは宣言のみにしてcppに定義を書いてみてはどうでしょうか?

ちなみに型名はちゃんと宣言しましょう。


30ポイント を落としてしまった。

Name: ABC  ..かけだし(1,225ポイント)   Date: 2009/05/19(火) 13:51   No:33674     
Title: Re:class定数を定義したいですが    
ご返答ありがとうございます。

書き直しますと下記のようになりますが

class ABC
{
private:

static const int x = 100; // OK

static const int y[] = {100,200,300}; // コンパイラエラー:{ が関数外に存在する。 云々


}

現象は変わりません。

なぜ xはOK, y[]はだめでしょうか。
実現方法ありますか

宜しくお願いいたします






145ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(87,562ポイント)   Date: 2009/05/19(火) 14:33   No:33677     
Title: Re:class定数を定義したいですが    
Blue さんの通り、クラスの static メンバ変数はクラス定義の外(.cpp ファイル内)で初期化を行うのが普通です。
クラス内で初期化を行っている時、そのクラスが複数のソースからインクルードされている場合はリンカエラーが出ます。
(重複したシンボル名とか云々)

また、

> static const int y[] = {100,200,300}; // コンパイラエラー:{ が関数外に存在する。 云々

これがコンパイルエラーなのは、単にクラス内で配列を初期化できないから(仕様?)です。

クラス内の static メンバ変数の正しい初期化の仕方は以下のようになります。
// ヘッダファイル内

class ABC
{
private:
static const int x;
static const int y[];
// ↑宣言のみ
};

// cpp ソースファイル内(上記のヘッダをインクルードすること)
const int ABC::x = 100;
const int ABC::y[] = {100,200,300};
// ↑ static は不要



ちなみに、配列を使わないクラス定数(かつ整数)なら enum を使用することで
初期化部分を別にする必要はなくなります。


251ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(101,229ポイント)   Date: 2009/05/19(火) 14:41   No:33678     
Title: Re:class定数を定義したいですが    
> ちなみに、配列を使わないクラス定数(かつ整数)なら enum を使用することで
> 初期化部分を別にする必要はなくなります。

いわゆるenumハックという手法ですが、それは標準準拠度の処理系への対策です。
まともなコンパイラであれば、const修飾子が付いた汎整数型の静的メンバ変数は、クラス定義の際に初期化子を指定することができます。


76ポイント を手に入れた。

Name: ABC  ..かけだし(1,351ポイント)   Date: 2009/05/19(火) 15:34   No:33680     
Title: Re:class定数を定義したいですが    
御津凪 さま、たかぎ さま

ご教授ありがとうございます。

やりかたはよく分かりました。

いま MS VC++ 2008 を使っています。

御津凪 さまが書かれました:
> そのクラスが複数のソースからインクルードされている場合はリンカエラーが出ます。
意味はよく分かりました。正しいと思います。

ただ、これだと、classというスコープの意義がなくなったような感じですね。

現にメンバー関数もクラスの中に定義していて、クラスが複数のソースからインクルードされていますが
関数の再定義エラーは出ませんでした。

なぜか、MS VC++ はメンバー関数と静的なメンバー変数に違う論理で取り扱われているようですね。


たかぎ さまが書かれました:
> const修飾子が付いた汎整数型の静的メンバ変数は、クラス定義の際に初期化子を指定することができます。

JAVA言語はこうなっています。
こうならないのはC++の仕様のせいか、それとも特定のC++のコンパイラーのせいでしょうか。





126ポイント を手に入れた。



Name: チリチリ  ..ぴよぴよ(49ポイント)   Date: 2009/05/18(月) 14:10   No:33632       
Title: 敵が追ってくるプログラム    
敵がプレイヤーを追ってくるようなプログラムは
どのように書けばよいでしょうか?

画面はボンバーマン風のゲームです


49ポイント を手に入れた。


Name: 和金  ..ぴよぴよ(558ポイント)   Date: 2009/05/18(月) 14:20   No:33633     
Title: Re:敵が追ってくるプログラム    
プレイヤーの位置と敵の位置との差分を取ればいいと思います。

(敵の位置)+(プレイヤーと敵との位置の差分)=(プレイヤーの位置)

なので、プレイヤーを追うことになります。


70ポイント を手に入れた。

Name: MNS  ..初心者(8,352ポイント)   Date: 2009/05/18(月) 17:55   No:33643     
Title: Re:敵が追ってくるプログラム    
ボンバーマン風ということは、マップがマスで区切られているのでしょうか?
それでかつ障害物があるということですよね?
私は詳しくは知らないのですが、
そういう場合はA*(エースター)アルゴリズムを使用すると良いと思います。


14ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(357,060ポイント)   Date: 2009/05/19(火) 00:51   No:33662     
Title: Re:敵が追ってくるプログラム    
 ボンバーマン風で、ただプレイヤーを追うだけなら、MNSさんも書かれている通り
A*などの経路探索を行ってプレイヤーを追うのが一番綺麗かと思います。

 ただし、ゲームがボンバーマンのように壁を破壊して進むことができるのなら、
破壊しないで進めるルートより、破壊できる壁を壊して進んだ方が早いこともあるので、
破壊できる壁の移動コスト値を適切に調整して、破壊してからプレイヤーの方に
向かうようにする必要があるかもしれません。

 でも、そんな鬼のように追っ掛けてくる敵は遊ぶ方も大変なので、
単純にプレイヤーの方に向かってその場その場で壁を適度に避けたり破壊したりしつつ
進むようなものでも十分かもしれませんね。


251ポイント を手に入れた。



Name: けんたろうちゃん  ..入門者(4,116ポイント)   Date: 2009/05/18(月) 04:11   No:33624       
Title: 横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて    
横スクロールタイプの2Dアクションゲームを製作していますが、題名のアルゴリズムが思いつかず質問させてもらいます。
マリオ(3以降)やロックマンでは、進行上にいた敵が消滅しても、逆方向に戻ると復活しますよね。
この再現方法について教えてもらいたいです。
現在、画面上の敵の管理をSTLのlistで実現しており、新しい敵の出現は、そのlistに敵オブジェクトを投入という感じでやっています
ステージごとの敵の発生ポイントをtxtやcsvファイルに記録して、そこから読み出しで行おうと思っています
イメージとしては
敵1、座標(x,y)で
敵1、座標(x,y)で
敵2、座標(x,y)で
・・・・・・
のような感じです
これを上のようなことが可能なようにしたいのですが、うまい方法が思いつきません・・・
どなたか、教えてもらえませんか?

今、自分が考えている方法として、敵の発生について全てフラグを用意し、
敵A(座標(x、y)で発生)が消滅したら敵A(座標(x、y)で発生)を画面スクロールによる発生をONにする、といったものを考えています
しかし、これを綺麗にまとめることができない状態です・・・

非常にわかりにくい説明ですいません
一応簡単な図もつけておきました


404ポイント を手に入れた。


Name: GPGA  ..熟練のプログラマー(61,160ポイント)   Date: 2009/05/18(月) 12:12   No:33629     
Title: Re:横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて    

1.敵キャラクターそれぞれに固有のIDを付ける
2.敵の発生位置に達した時に、その敵のIDが既に発生しているかどうかを確認する。
3.発生していれば何もせず、発生していなければ発生させる。

以下プログラム


#include <vector>
#include <list>
#include <algorithm>

// 敵出現データ
struct EnemyAppearance {
int type; // 敵のタイプ
int x; // 敵の出現X座標
};
std::vector<EnemyAppearance> g_EnemyAppearance; // csvファイルから読み込む

// 敵のデータ
struct EnemyData {
int id; // 固有ID
int type; // 敵のタイプ
・・・ // その他データ
};
std::list<EnemyData> g_EnemyData; // ゲーム内の敵情報

int g_nScrollX, g_nScrollXBack; // 現在のスクロール座標と、1フレーム前のスクロール座標

// IDサーチ用のクラス
class CheckAppearance {
int id_;
public :
CheckAppearance(int id) : id_(id){}
bool operator ()(EnemyData data) {
return data.id == id_;
}
};

// 敵の出現チェック
void EnemyAppearanceCheck() {
// g_EnemyAppearanceは、csvからデータを読み込んだものとする
// 固有IDはg_EnemyAppearanceのインデックスを使用する
for (unsigned int i = 0; i < g_EnemyAppearance.size(); ++i) {
if (g_EnemyAppearance[i].x <= g_nScrollX &&
g_EnemyAppearance[i].x >= g_nScrollXBack) {
// 敵出現領域に入った場合
std::list<EnemyData>::iterator it;

#if 1
// std::find_ifを使用した場合のIDサーチ
CheckAppearance checkAppearance(i);
it = std::find_if(g_EnemyData.begin(), g_EnemyData.end(), checkAppearance);
#else
// 普通にイテレータを回した場合のIDサーチ
for (it = g_EnemyData.begin(); it != g_EnemyData.end(); ++it) {
if (it->id == i) {
break;
}
}
#endif
if (it == g_EnemyData.end()) {
// 出現位置に入った敵がまだ発生していないので、発生させる
EnemyData data;
data.id = i;
data.type = g_EnemyAppearance[i].type;
g_EnemyData.push_back(data);
}
}
}
}
 


819ポイント を落としてしまった。

Name: けんたろうちゃん  ..入門者(4,149ポイント)   Date: 2009/05/19(火) 00:38   No:33661 解決!     
Title: Re:横スクロールアクションゲームにおける消滅した敵の再出現のアルゴリズムについて    
丁寧にコードつきでありがとうございます
非常に助かりました


33ポイント を手に入れた。



Name: Huzzy  ..かけだし(1,206ポイント)   Date: 2009/05/18(月) 14:52   No:33636       
Title: 敵キャラの動き(円状)について    
只今、龍神録様のコードを応用して横STGを
製作中です。

そこで質問なのですが、龍神録第12章に書かれていたような
敵のコードをどのように弄れば、画面上にて敵キャラが
常に円状にグルグル回っているような軌道を画いてくれるのでしょうか?

因みに下記のものをベースとして考えているのですが、
angを弄っても角度が変わるだけなので何処に
円の計算を入れてよいか判りません;;

//移動パターン7
//停滞してそのまま左上に
void enemy_pattern7(int i){
int t=enemy[i].cnt;
if(t==enemy[i].wait){//登録された停滞時間だけして
int r=cos(enemy[i].ang)< 0 ? -10 : 1;
enemy[i].vx=-cos(enemy[i].ang);//左へ
// enemy[i].vx=0.5;
enemy[i].vy=-0.1;
enemy[i].sp=6+rang(2);
enemy[i].ang=rang(PI/4)-PI*r/5;//上がっていく
enemy[i].muki=2-2*r;//左向き
}
}


判る方が居られましたら、ご教授の程宜しくお願いします。


232ポイント を手に入れた。


Name: すずめ  ..ぴよぴよ(747ポイント)   Date: 2009/05/18(月) 16:51   No:33638     
Title: Re:敵キャラの動き(円状)について    
こんにちは。
私も初心者なので人に教える立場ではないんですが、
敵の行動パターンはしっかり勉強しましたので、
私のできる範囲で回答したいと思います。

//=================================================================
//行動パターン11 左上から下へ 途中で円を1回描いて上へ
//=================================================================

void enemy_pattern11(int i){
int t=enemy[i].cnt;
if(t==0)
enemy[i].vy=3.0f;
if(t>=60 && t<540){
enemy[i].vx=sin(PI*(enemy[i].cnt-60.0f)/160.0f)*2.0f;
enemy[i].vy=sin(PI*(enemy[i].cnt+20.0f)/160.0f)*2.0f;
}
if(t>=540){
enemy[i].vx=0.0f;
enemy[i].vy=-3.0f;
}
}

これはいま参考に作ったんですが、上から降りてきて1回転して
また上へいくパターンです。
if(t>=60 && t=<540) と if(t>=540) の540に320を足すごとに
回転数が1回増えます。
xとyの初期座標は、x=100, y=-20です。
なお、これは縦シューティングようです。
うまくいくといいんですが。


2倍のポイントを手に入れた! 500ポイント を手に入れた。

Name: Huzzy  ..かけだし(1,229ポイント)   Date: 2009/05/18(月) 23:12   No:33655 解決!     
Title: Re:敵キャラの動き(円状)について    
すずめ様のお陰で問題解決出来ました。
有難う御座いました。


23ポイント を手に入れた。

Name: すずめ  ..ぴよぴよ(765ポイント)   Date: 2009/05/19(火) 00:09   No:33659     
Title: Re:敵キャラの動き(円状)について    
役にたてたなら私もうれしいです。


18ポイント を手に入れた。



Name: さが  ..入門者(3,709ポイント)   Date: 2009/05/17(日) 10:06   No:33565       
Title: ぷよぷ○的なゲーム作ってみました    
この掲示板にはいつもお世話になっているsagaです。
ゲーム作ってみたのでお暇がありましたら遊んでみてください。

ぷよぷよ的な何か ver1.12
http://down11.ddo.jp/uploader/download/1242521274.zip/attatch
pass saga

本家との違いは、各キャラに特殊技を持たせたところです。
それにより、2キャラ程チート級の強さになっているので調整が必要なところです。
今は2P対戦のみになってますので2P側が勝手にゲームオーバーになってしまうかもしれません。

キャラ、ぷよのイメージはぽけも○からオマージュしたそうです。
ヴォイスもBGMもSEも入れてないのでかなり寂しいことになってます。


操作性、リプレイ諸々なにか気になったら言って貰えればありがたいです。


171ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(84,708ポイント)   Date: 2009/05/17(日) 14:18   No:33576     
Title: Re:ぷよぷ○的なゲーム作ってみました    
とりあえず、DLして見ました。
が、
>今は2P対戦のみになってますので2P側が勝手にゲームオーバーになってしまうかもしれません。
が理由でほとんど遊べません。。
操作性はやりこんでないので分かりませんが・・・。
最初のボールを選択する際、ちょっと動きが変かな?っと思った程度です。

得点制にして、1Pのみがないとちょっと遊べません。。


135ポイント を手に入れた。

Name: ひよこ  ..プログラマー(31,922ポイント)   Date: 2009/05/17(日) 14:55   No:33579     
Title: Re:ぷよぷ○的なゲーム作ってみました    
操作が難しいです。
キーはWASDZXとIJKLM<で操作ができるといいと思います。
ゲームは操作がよくわからなくて、やっていませんが。


58ポイント を手に入れた。

Name: さが  ..入門者(3,517ポイント)   Date: 2009/05/17(日) 14:57   No:33580     
Title: Re:ぷよぷ○的なゲーム作ってみました    
kazuoniさん。プレイして頂きありがとうございます。

>2P対戦
もともとこのゲームは、ぷよぷよにはまり込んでしまった自分と、友人達との
実力差を埋めるために特殊技とか実装しての対戦を想定していたので、とりあえず2P対戦部を終わらせました。

とこぷよはこれから実装予定です。公開が早かったですかね。。


>ボールの動き
これはちゃんと動かない、なんか引っ掛かった感じのことですかね?
色々迷ったのですが、ウェイトで入力を仕切ってあるのでそのように感じるのだと思います。
ウェイト小さくしてみます。


この様な意見を言ってもらえるとホント助かります。


192ポイント を落としてしまった。

Name: さが  ..入門者(3,567ポイント)   Date: 2009/05/17(日) 15:03   No:33581     
Title: Re:ぷよぷ○的なゲーム作ってみました    
ひよこさん。ありがとうございます。

一応キーコンフィグ機能が付いてるので使ってみてください。
外出ているので詳しく言えませんが、入れ忘れでなければtxtに変更方法が書いてあったと思います。


50ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(84,781ポイント)   Date: 2009/05/17(日) 15:09   No:33583     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>ウェイト

入力があった瞬間は一つ移動

数十ループ入力が続いていたら、
以降キー入力がなくなるまで数ループに一回移動

ってな感じで実装してもいいかもしれません。


73ポイント を手に入れた。

Name: ひよこ  ..プログラマー(31,872ポイント)   Date: 2009/05/17(日) 15:16   No:33584     
Title: Re:ぷよぷ○的なゲーム作ってみました    
キーコンフィグ機能はわかったのですが
キャラの決定って何のキーでしょうか?
説明書に書いてなかったと思います。


50ポイント を落としてしまった。

Name: さが  ..入門者(3,823ポイント)   Date: 2009/05/17(日) 16:25   No:33589     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>kazuoniさん
大体イメージつかめましたんで、取り入れようと思います。
ありがとうございます。

>ひよこさん
すいません。ポーズの入力を書いたときに一緒に書いたと誤認してました。

キャラ選択、レベル選択(ボールの部分)の
決定は 回転キー で
キャンセルは 特殊キー で行うことが出来ます。

またポーズ時の決定はリプレイの都合上ポーズキーで行うようになってます。


背景が無いのは絵師が多忙のためです。
レベル選択からキャラ選択に戻る機構を作ってませんでした。今はゲームを開始してポーズからしか戻れません。


256ポイント を手に入れた。

Name: ひよこ  ..プログラマー(31,783ポイント)   Date: 2009/05/17(日) 16:46   No:33590     
Title: Re:ぷよぷ○的なゲーム作ってみました    
決定キーがわかったので、やってみましたが、
やっぱり1Pのみのモードがほしいと思いました。
後、ぷよが落ちきるまで下キーとか押しながらじゃないとなかなかくっつかないところ
を直してもらえるとうれしいです。


89ポイント を落としてしまった。

Name: さが  ..入門者(4,007ポイント)   Date: 2009/05/17(日) 17:03   No:33591     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>ひよこさん
アドバイスありがとうございます。
>接着
一応本家で調整したつもりだったんですが、もう一度見直してみます。

>1Pモード
即急に実装します。
そしてずっと聞こうと思っていたのですが、1Pモードを追加するとした場合

今ある関数の中でif(1Pモード)~~else〜〜

でやるのか、別の関数・メソッドを作るのか、どちらがいいのでしょう?


184ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,103ポイント)   Date: 2009/05/17(日) 17:24   No:33594     
Title: Re:ぷよぷ○的なゲーム作ってみました    
ゲームのベースはそのままで、フラグを立てるだけでいいのでは?
っというのも、1Pと2Pでは違うのはお邪魔系の出現だけだと思うので、
1Pなら
・ゲーム画面描写位置をずらす
・お邪魔形に関する制御を省いてやる

とするだけで良い気がします。
なので別の関数を作るのではなく、余分な関数を省く
のが良いと思います。

・・・現在の組み方で、一つの関数にいろいろな制御がまとまっていたらこれはできませんが・・・。


171ポイント を手に入れた。

Name: さが  ..入門者(4,118ポイント)   Date: 2009/05/17(日) 17:38   No:33597     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>kazuoniさん
早いお答えありがとうございます。

>お邪魔
そうなりますね。お邪魔の登録を回避することにします。

>描写位置
残念ながら絵師が忙しいため、フレームが作れないのでこのままの配置でいこうと思います。

あとは1Pモードにおいて特殊技は、
デカぷよ以外は一応1P用に出来ますが、無い方向でいこうと思います。


111ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,024,293ポイント)   Date: 2009/05/17(日) 20:51   No:33613     
Title: Re:ぷよぷ○的なゲーム作ってみました    
制作お疲れ様です。
やってみました。確かにぷよ○よっぽいですね^^

私も2Pが勝手にゲームオーバーになってしまうという理由でやり込めませんでしたが、
とこぷよが出来るようになれば面白くなりそうです。

私はBLACKを作ったとき「ぷよん」とした質感を出すのにちょっと苦労しましたが、
DrawModiGraph使って上下比率いじれば割と楽に表現出来ましたので、
落ちる時や消える時、それらを使って何か見栄えのするエフェクトを付けると豪華に見えるようになるかもしれません。

完成楽しみにしています^^


38ポイント を手に入れた。

Name: さが  ..入門者(4,270ポイント)   Date: 2009/05/17(日) 23:34   No:33622     
Title: Re:ぷよぷ○的なゲーム作ってみました    
到底Dixqさんにはおよばない出来ですがなんとかやってます。

>「ぷよん」とした
フィーバー系列のやつですか。
自分は通から入ってそのまま留まってるヘタレプレイヤーで
揺れると一瞬見失ってしまうので、このまま行こうかと思ってます。
二系統用意するのもいいかもしれませんね。

>エフェクト
半年前にアルファ値とか知ったばかりなので、どうにか工夫してみようと思います。


152ポイント を手に入れた。

Name: さが  ..入門者(4,377ポイント)   Date: 2009/05/18(月) 08:18   No:33627     
Title: Re:ぷよぷ○的なゲーム作ってみました    
1Pモード(とこぷよ)を追加しました。
メニューも一時的にですがつけました。醜いのは察してください。。
後は移動時のキー入力方法を変更しました。

http://down11.ddo.jp/uploader/download/1242601890.zip/attatch

エフェクトはまだ実装してません。
あとBGMはあったほうがいいですか?


107ポイント を手に入れた。

Name: ひよこ  ..プログラマー(32,127ポイント)   Date: 2009/05/18(月) 21:44   No:33651     
Title: Re:ぷよぷ○的なゲーム作ってみました    
1Pモード(とこぷよ)ができたということでプレイしてみました。
説明書もちゃんと修正されててよかったです。
それでは本題に
1Pモード(とこぷよ)について
改めてやってみると静かですね・・・・
BGMもほしいんですが効果音もほしいです。
背景もほしいのですが・・・シンプルなものがいいと思います。
後できたら画面は一人用は本家みたいにでっかい画面だったらな
と思いました。

なんかやたらと要望あってすみません。


158ポイント を落としてしまった。

Name: さが  ..入門者(4,643ポイント)   Date: 2009/05/18(月) 22:34   No:33652     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>ひよこさん
プレイありがとうございます。もうどんどん言ってくれればこちらも助かります。

BGMはプレイヤーが音楽ファイルを用意してもらう感じで行こうと思います。
iniファイルで個数を指定してランダムに再生を想定してます。
ファイル名を1.oggなどとしてもらう必要が出てきますが。。

効果音ですか。自分音屋さんではないので、フリーを探そうと思います。
今は仮で横移動を龍神録のグレイズ音使ってますが、これがなかなかいいです。

連鎖ボイスは「pypy」フォルダに「VOICE」フォルダを作って
0_0.wav の様に キャラ_連鎖数 で対応しようかなと思います。
iniファイルで、COMB_VOICE の数を変更することにより、その数以上の連鎖が来た場合に
同じものを再生しようかなと思ってます。

背景は絵師の都合で遅れてます。

一人用なんですが、win版と15thでは大きさ変わってませんでしたけど、ひよこさんはどのバージョンを
ご覧になったのでしょうか。参考にしたいんで教えてもらえればと思います。


266ポイント を手に入れた。

Name: ひよこ  ..プログラマー(32,202ポイント)   Date: 2009/05/18(月) 23:30   No:33657     
Title: Re:ぷよぷ○的なゲーム作ってみました    
15thですね。
自分が作ってほしいってのは、簡単にこんな感じって作ってしまいましたが  すみません。
添付にあるような本家とも違って1Pの画面が少し大きいほうがいいかな〜って
思っただけです。
ほんとに要望多いですね・・・
あくまで参考程度に・・・よろしくおねがいします。


75ポイント を手に入れた。

Name: さが  ..入門者(4,718ポイント)   Date: 2009/05/18(月) 23:54   No:33658     
Title: Re:ぷよぷ○的なゲーム作ってみました    
>ひよこさん
画面いっぱいに広げるってことですね。シフトと倍率だけなので、やってみようと思います。
13行目は、、、完璧ウィンドウ外に行ってしまいますねw


75ポイント を手に入れた。



Name: はね  ..中級者(10,287ポイント)   Date: 2009/05/18(月) 20:24   No:33646       
Title: 4次元配列の動的確保    
タイトルの通りなのですが、4次元配列の各要素を動的に確保したいです。

要素としましてはVolume Frame Y X があります。
VolumeがFrameを含んでおり、Frameの縦横サイズがYXです。
各値はそれぞれ受け取っています。

すべてint型です。

ようするにint Array[Volume][Frame][Y][X]のように各要素の大きさを設定できれば良いです。


一応いろいろ調べ、以下のように作ってみたのですが、
各要素をsizeofで調べると4バイトなど1つしか確保できていないようでした。

どうかご教示ください。


int ****Array = new int ***[Volume];
for(int k=0;k<Volume;k++){
Array[k] = new int**[Frame] ;
for(int j=0;j<=Frame;j++){
Array[k][j] = new int*[y];
for(int i=0;i<=y;i++){
Array[k][j][i] = new int[x];
}
}
}
for(int l=0;l<Volume;l++){
for(int k=0;k<Frame;k++){
for(int j=0;j<y;j++){
delete [] vv[l][k][j];
}
}
}
for(int l=0;l<Volume;l++){
for(int k=0;k<Frame;k++){
delete [] vv[l][k];
}
}
for(int l=0;l<Volume;l++){
delete [] vv[l];
}
delete [] vv;


463ポイント を手に入れた。


Name: box  ..ハッカー(140,194ポイント)   Date: 2009/05/18(月) 20:47   No:33647     
Title: Re:4次元配列の動的確保    

> 各要素をsizeofで調べると4バイトなど1つしか確保できていないようでした。

ということは、提示された断片部分だけでなく、
ひととおり動くコードを書かれたのですね?

sizeofで調べた箇所を含め、書かれたコードの全体を
見せていただけますか?




28ポイント を手に入れた。

Name: はね  ..中級者(10,749ポイント)   Date: 2009/05/18(月) 21:34   No:33649     
Title: Re:4次元配列の動的確保    
box様

申し訳ありませんが、ソースは公開することができないのでかなり省略させて頂きました。
すみません。




void Calc(){
int ****Array = new int ***[Volume];
for(int k=0;k<Volume;k++){
Array[k] = new int**[Frame] ;
for(int j=0;j<Frame;j++){
Array[k][j] = new int*[y];
for(int i=0;i<y;i++)
Array[k][j][i] = new int[x];
}
}

for(int l=minVol;l<maxVol;l++){
for(int k=minFrame;k<=maxFrame;k++){
for(int j=miny;j<=maxy;j++){
for(int i=minx;i<=maxx;i++){
              /*
          ijklで計算
                         ここの4重forはArrayの要素と同じ数だけ回ります。
              */
Array[l][zcounter][ycounter][xcounter] = 計算結果;
xcounter++;
}
ycounter++;
xcounter=0;
}
zcounter++;
ycounter=0;
}
zcounter=0;
}


for(int l=0;l<Volume;l++){
for(int k=0;k<Frame;k++){
for(int j=0;j<y;j++){
delete [] vv[l][k][j];
}
}
}
for(int l=0;l<Volume;l++){
for(int k=0;k<Frame;k++){
delete [] vv[l][k];
}
}
for(int l=0;l<Volume;l++){
delete [] vv[l];
}
delete [] vv;
}



462ポイント を手に入れた。

Name: はね  ..中級者(10,900ポイント)   Date: 2009/05/18(月) 21:38   No:33650     
Title: Re:4次元配列の動的確保    
sizeofが抜けてました。

cout << sizeof(vv) / sizeof(vv[0]) <<endl;
cout << sizeof(vv) / sizeof(vv[0][0]) <<endl;
cout << sizeof(vv) / sizeof(vv[0][0][0]) <<endl;
cout << sizeof(vv) / sizeof(vv[0][0][0][0]) <<endl;

これを

int ****Array = new int ***[Volume];
for(int k=0;k<Volume;k++){
Array[k] = new int**[Frame] ;
for(int j=0;j<Frame;j++){
Array[k][j] = new int*[y];
for(int i=0;i<y;i++)
Array[k][j][i] = new int[x];
}
}


のすぐ下に書きました。


151ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(356,750ポイント)   Date: 2009/05/18(月) 22:45   No:33653     
Title: Re:4次元配列の動的確保    

>各要素をsizeofで調べると4バイトなど1つしか確保できていないようでした

 ポインタに sizeofは……。



>4次元配列の各要素を動的に確保したいです

 これ、4次元配列である必要はありますか?
 せっかく C++なのでもう少しなんとかしましょう。

 単純に考えても、XとYのところは一次元にしておいて、
XとY値を指定してアクセスする関数があれば事足りますし、
Volumeや Frameはクラスにするとか、適当なコンテナを使って typedefしておけば
それぞれに意味を持たせられますし、途中で例外が発生してもメモリリークしません。


#include <vector>
#include <iostream>

class Frame
{
public:
    Frame(int x, int y) : m_X(x), m_Y(y)
    {
        m_Data.assign(x*y, 0);
    }
    
    int get(int x, int y) const        { return m_Data.at(y * m_X + x); }
    void set(int x, int y, int val)    { m_Data.at(y * m_X + x) = val; }
    
private:
    
    int                 m_X, m_Y;
    std::vector<int>    m_Data;
};

typedef std::vector<Frame>     Volume;
typedef std::vector<Volume>    VolumeArray;

int main()
{
    VolumeArray volArray;
    volArray.assign(5, Volume(10, Frame(100, 100)));

    volArray[1][2].set(1, 5, 10);
    std::cout << volArray[1][2].get(1, 5) << std::endl;

    Frame &frame = volArray[1][2];
    std::cout << frame.get(1, 5) << std::endl;
    
    return 0;
}



892ポイント を手に入れた。



Name: marijji  ..ぴよぴよ(12ポイント)   Date: 2009/05/12(火) 01:42   No:33334       
Title: リンゴの落ちゲー    
このサイトにはいつもお世話になっています。とこれで、リンゴの落ちゲーのソースが見てみたいので、もしよろしければアップお願いします。

12ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(352,679ポイント)   Date: 2009/05/12(火) 16:08   No:33350     
Title: Re:リンゴの落ちゲー    
 リンゴ落ちゲーって、

サンプルプログラミングの館
ttp://dixq.net/sm/d2.html

 これのことですか?
 もしそうなら、zipの中に入っています。


77ポイント を手に入れた。

Name: marijji  ..かけだし(1,297ポイント)   Date: 2009/05/13(水) 21:00   No:33401     
Title: Re:リンゴの落ちゲー    
このソースをビルドしたら

DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_packet_iskeyframe が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_header が関数 "int __cdecl TheoraDecode_ReadHeader(struct tagDECODE_THEORA *)" (?TheoraDecode_ReadHeader@@YAHPAUtagDECODE_THEORA@@@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_YUVout が関数 "unsigned long __stdcall TheoraDecode_Thread(void *)" (?TheoraDecode_Thread@@YGKPAX@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_packetin が関数 "int __cdecl _TheoraDecode_IncToFrame(int,int)" (?_TheoraDecode_IncToFrame@@YAHHH@Z) で参照されました。
J:\メテオハンバーガー\Debug\test.exe : fatal error LNK1120: 外部参照 10 が未解決です。
ビルドログは "file://j:\otimono\Debug\BuildLog.htm" に保存されました。
test - エラー 11、警告 0

というエラーが出ます・・・一体どういうことなのかわかりません><
解説できる方いましたらよろしくお願いします。


1,285ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(60,461ポイント)   Date: 2009/05/13(水) 21:14   No:33402     
Title: Re:リンゴの落ちゲー    
どういう環境でビルドしましたか?
VC++2008EEでは警告はありますがビルドはできますよ。


39ポイント を手に入れた。

Name: marijji  ..かけだし(1,322ポイント)   Date: 2009/05/13(水) 21:44   No:33403     
Title: Re:リンゴの落ちゲー    
私もvc2008を使っております・・・警告は0なんですが・・・><


25ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(354,707ポイント)   Date: 2009/05/13(水) 23:49   No:33407     
Title: Re:リンゴの落ちゲー    

>一体どういうことなのかわかりません

 単純に考えて、リンクしているライブラリと、要求しているライブラリのバージョンが
異なるのでしょう。


 ひょっとして、

DXライブラリ置き場 使い方説明
ttp://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html

 のページに従って、VC++ディレクトリのライブラリファイルに最新のDXライブラリの
パス(v2.25とか)を指定していませんか?


 このサンプルプログラムの中にDXライブラリで使用するインクルードファイルも
ライブラリファイルも入っている(v2.24c)のですが、もしそうだとすると
リンク時に異なるバージョンのライブラリをリンクしようとして
失敗した可能性があります。


 とりあえず、その場合の解決策としては2つ。

1 VC++ディレクトリではインクルードやライブラリのパス指定の中からDXライブラリのパス指定を削除し、
ソリューションエクスプローラからDXライブラリ関連を削除した上で
サンプルのプロジェクトのプロパティからリンカの設定のところの追加ライブラリのパス指定のところ
にサンプルプログラムに入っていた方のDXライブラリへのパスを指定する。

2 ゲームのmain.cppの incudeのところを
#include <DxLib.h>
 に修正し、ソリューションエクスプローラからDXライブラリ関連を削除。
(ついでにサンプル側に入っていたDXライブラリのあるディレクトリ libも使わないので
削除してしまってもいいです)

 これでうまくいくかもしれません。


624ポイント を手に入れた。

Name: marijji  ..かけだし(1,210ポイント)   Date: 2009/05/18(月) 16:28   No:33637     
Title: Re:リンゴの落ちゲー    
無事表示することができました。ありがとうございます^^
今度はこのゲームで落ちてくるリンゴを5個取得したらゲーム終了・・・としてみたいのですが・・
終了の関数の書き方がわかりません><
何度も質問すみません・・・


112ポイント を落としてしまった。

Name: ひよこ  ..プログラマー(32,285ポイント)   Date: 2009/05/18(月) 19:25   No:33645     
Title: Re:リンゴの落ちゲー    
プログラムがいきなり終わるといろいろやってる人からは驚いたりするかもしれないので

ループ()
  スイッチ (ゲーム)
 ケース0
  ゲームの処理
 ケース1
  クリア画面を表示
  **キーを押すと終了と表示
  **キーを押すとループを抜ける

みたいな流れで動かすといいと思います。


133ポイント を手に入れた。



Name: y  ..ぴよぴよ(322ポイント)   Date: 2009/05/15(金) 17:01   No:33490       
Title: ファイル分割について    
今までは、一つのファイルで作っていたのですが、長くなりすぎたためここのサイトを参考にして、
ファイル分割をしようとしたのですが、エラーが出て困っています。
ヘッダファイルに問題があるようなのですが、どこが悪いのかわからないため質問させていただきました。

↓がヘッダファイルの中身です

#include "DxLib.h"
#include "math.h"

#ifdef d
#define D exturn
#else
#define d
#define D

#endif


#define PI (3.1415192524)
#define CHAR_HEIGHT (40)
#define CHAR_WIDHT (20)
#define CHIP_SIZE (10)
#define WINDOW_HEIGHT (480)
#define WINDOW_WIDHT (640)
#define MAP_HEIGHT ( WINDOW_HEIGHT / CHIP_SIZE )
#define MAP_WIDHT ( WINDOW_WIDHT / CHIP_SIZE )


typedef struct{
int Gra ;
int Flag ;
double x ;
double y ;
int HP ;
double SpAdd ;
double SpMax ;
double JpAdd ;
double JpMax ;
double DownSP ;
double Move_x ;
double Move_y ;
int SelectWepon [2] ;
} Character_t ;
typedef struct{
int All_Bullet [3][2] ;
int Shot_Time [3][2][20] ;
int Pow [3][2][20] ;
double Speed [3][2][20] ;
int Acc [3][2][20] ;
double Angle [3][2][20] ;
int AimSP [3][2][20] ;
} Wepon_t ;
typedef struct{
int Flag [30] ;
int x[30] ;
int y[30] ;
int Move_x[30] ;
int Move_y[30] ;
int DownSp [30] ;
int Pow [30] ;
int Speed[30] ;
} Bullet_t ;
typedef struct{
int x;
int y;
int WheelRotVol;
unsigned int Button[8];
}Mouse_t;

D char Map[MAP_HEIGHT][MAP_WIDHT] ;
D Mouse_t Mouse;
D int Key[256] ;
D Character_t Player ;
D Character_t Enemy[10] ;
D Wepon_t PlayerWepon[2] ;
D Wepon_t EnemyWepon[10][2] ;
D Bullet_t PlayerBullet ;
D Bullet_t EnemyBullet[10] ;

D void First();
D void FAuto();
D int GetHitKeyStateAll_2(int KeyStateBuf[]) ;
D void EAct () ;
D void Input () ;
D void Move () ;
D int Move_MapHit ( Character_t *C ) ;



465ポイント を落としてしまった。


Name: dic  ..上級者(20,884ポイント)   Date: 2009/05/15(金) 20:12   No:33495     
Title: Re:ファイル分割について    
exturn -> extern ですね

2倍のポイントを手に入れた! 14ポイント を手に入れた。

Name: y  ..ぴよぴよ(395ポイント)   Date: 2009/05/15(金) 21:21   No:33497     
Title: Re:ファイル分割について    
ずっと、extern の ミスに気がつきませんでした…

で、直してみたのですが、エラーが出てしまいました…

情報が少ないような気がするので、一応出ているエラーを貼り付けておきます。



73ポイント を手に入れた。

Name: dic  ..上級者(21,200ポイント)   Date: 2009/05/15(金) 21:54   No:33498     
Title: Re:ファイル分割について    

---------- main.cpp ----------
#include <stdio.h>
#define d
#include "D.h"

void main()
{
Key[0] = 0;

Move();
}

---------- D.cpp ----------
#include "D.h"

void Move()
{
printf( "Move\n" );
}

---------- D.h ----------
#include <stdio.h> // for printf()
#include "math.h"

#ifdef d
#define D extern
#else
#define d
#define D

#endif


D int Key[256] ;

D void Move () ;


で どうでしょうかね

症状としては外部変数externの扱い方がおかしいようですね

注目するのは main.cpp の #define d ですね


316ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(355,006ポイント)   Date: 2009/05/15(金) 23:24   No:33505     
Title: Re:ファイル分割について    
 エラーの下半分から推測するに、コンパイラ・リンカの設定がおかしいように見えます。
 DXライブラリ使用時のプロジェクトの設定を一度確認してみることをお勧めします。


64ポイント を手に入れた。

Name: y  ..ぴよぴよ(604ポイント)   Date: 2009/05/16(土) 15:25   No:33525     
Title: Re:ファイル分割について    
dicさんのところに書かれているのを貼り付けて、ビルドしてみたのですが、

LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\k\My Documents\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

というエラーが出てしまいました。
設定とかも見直してみたもののちゃんと設定しているはずなんですが…


209ポイント を手に入れた。

Name: dic  ..上級者(21,313ポイント)   Date: 2009/05/16(土) 18:14   No:33532     
Title: Re:ファイル分割について    
Win32 Console Application でビルドしないといけないはずだけど
Win32 Application でビルドしてないでしょうか?
ワークスペース(ソリューション)の新規作成からやり直してみてください

(※VC2008はソリューションって言うんでしたっけ?)


113ポイント を手に入れた。

Name: y  ..かけだし(1,396ポイント)   Date: 2009/05/18(月) 17:20   No:33640     
Title: Re:ファイル分割について    
いろいろ簡単なのを作って試行錯誤してみたところ、
Dxライブラリで、エラーが起こっているようなんですけど、設定とか見直しても、
直し方がわかりません。


----main.cpp----

#define IFDEF
#include "setting.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )


{
if( DxLib_Init() == -1 )
{
return -1;
}




test() ;


DxLib_End() ;

return 0 ;
}

----setting.h----

#include "DxLib.h"
#include "math.h"



#ifdef IFDEF

#define DEF extern

#else


#define DEF



#endif


DEF int x ;

DEF void test () ;

----a.cpp----

#include "setting.h"



void test()

{
x = 0 ;

return ;


}

で出るエラーが、

libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
C:\Documents and Settings\All Users\Documents\y.m.b\Debug\y.m.b.exe : fatal error LNK1120: 外部参照 9 が未解決です。

なのですが、どうすればいいのかわかりません。







792ポイント を手に入れた。

Name: pooka  ..入門者(2,633ポイント)   Date: 2009/05/18(月) 18:53   No:33644     
Title: Re:ファイル分割について    
プロジェクトを作成するときにWin32コンソールアプリケーションを選びませんでしたか?
試しにやってみると同じエラーが出ました。
Win32プロジェクトを選んでみてください。


81ポイント を手に入れた。



Name: Dixq (管理人) [URL]  ..ウィザード(1,021,188ポイント)   Date: 2009/05/04(月) 09:29   No:33030       
Title: 雑誌掲載などの宣伝 (雑談トピ)    
皆さん,いつもお世話になっております。最近管理人がご無沙汰で申し訳ないです;

さて,GWですね。
「俺は仕事だ!そんなものはねぇ!」という方がいらっしゃいましたらごめんなさい^^;
私は先週念願の車をゲットしたので(ブログhttp://directxq.blog58.fc2.com/参照)
昨日長野から広島の実家まで走って帰りました^^b
(途中で寄り道もして,計1000キロ)
渋滞はしましたが,楽しみにしていた車に乗れたので全く疲れませんでした^^b
GW中実家の近辺をウロウロしてみようと思います。

----------龍神録雑誌掲載------------

以前IPというパソコン雑誌(2008年11月号),windows100%というパソコン雑誌(2009年1月号)には掲載されましたが,
今回ゲームラボという雑誌に掲載されることになりました。
今回はかなり小さめの掲載ということなのですが,ちょっと宣伝に参りました^^

5月16日発売のゲームラボ6月号だそうです。

書店で見かけたらよければ見てやってください〜♪


265ポイント を手に入れた。


Name: situmon  ..プログラマー(28,158ポイント)   Date: 2009/05/04(月) 14:15   No:33036     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
ゲットしたのですか・・・
車!!よかったですね。
これからはきっとバイクと車どちらも大切になるのでしょうね・・・
あと雑誌は見れないかもしれませんがとにかくおめでとうございます!!


1ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(46,276ポイント)   Date: 2009/05/04(月) 17:30   No:33042     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
ゲ、あの変態エロ雑誌ですか。
東方特集された頃からいつか龍神録も載るんじゃないかと思ってましたけど。
良く許可する気になりましたね。
私は変態だからいいですけど(オイ)
あ。ゲーラボ関係者の方見てたらごめんなさい、褒めてます→変態。
ソワカちゃん特集といいマジGJと言わざるをえないのですが・・・

でもあんまり大っぴらに宣伝しないほうがよくないですかね?
ここは未成年の方も来る掲示板っつーか。

偏見ですが、個人的にwin100やIpより圧倒的にアングラですよ。

でもDSプログラミングとか面白い記事もあって好きな雑誌なのですが・・・


まあいっか。おめでとうございます。またアイシャさんの落書きしましょうか?


車ですかー。ヒキコモリの私は出かける動機がうまく見つからないです。
せっかく車もあって運転もできるんですけどねぇ。運転怖ェー。



330ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,021,699ポイント)   Date: 2009/05/04(月) 18:02   No:33043     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
>>situmonさん

う,実はバイクと車の両方の維持キツイなぁと思っています^^;
車の保険が20万,バイクの保険が10万・・・となると毎年30万消えていく保険に払わないといけませんし,
これからはユーザー車検出来ないので,車検は毎年高い金払って業者に任せなければならない・・。
しかしバイクラブなDixqが果たして手放す決心できるのか微妙なところです^^;

>>こめかみさん

実は高校の時ちょっと読んでいたものの,あれからゲームラボの内容をよく知りません;
今は未成年が見られないような内容を含んでるんです??

最近は東方とかまで掲載されているんですね。
他の二次創作とかも紹介されるのでしょうか・・?

>またアイシャさんの落書きしましょうか?

お〜これは期待です^^

>車ですかー。ヒキコモリの私は出かける動機がうまく見つからないです。
>せっかく車もあって運転もできるんですけどねぇ。運転怖ェー。

そうなのですか〜^^;
私は天気のいい日には家にいられないタチなので,今日も近くの牧場まで走ってきましたよ。
車があるならドライブウェイでも走ってると気持ちいいのでは^^


511ポイント を手に入れた。

Name: conio [URL]  ..中級者(14,608ポイント)   Date: 2009/05/04(月) 19:13   No:33045     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
>>Dixq (管理人)さん
"ゲームラボ"は以前、裏技か何かの特集をしていたときに読んだ事があるのですが、
ちょうど中間あたりに、成人向けの同人ゲームが色々と載っていたような気がします。


74ポイント を手に入れた。

Name: situmon  ..プログラマー(28,562ポイント)   Date: 2009/05/04(月) 19:40   No:33046     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
そうなのですか・・・
バイクラブ・・・なのはブログから伝わってきます。
あと雑誌はあってもやめときます。
たぶん見ちゃいけないと思うんで・・・
こめかみさんとは比べ物にならないと思いますが、
アイシャを白黒ですが書いてみます。


60ポイント を手に入れた。

Name: situmon  ..プログラマー(28,591ポイント)   Date: 2009/05/04(月) 19:55   No:33048     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
なんとなくアイシャを書いてみました。
ほんの2、3分程度で書いたので汚いです。
すいません。


28ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,022,289ポイント)   Date: 2009/05/04(月) 21:16   No:33055     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
>>conioさん

なるほど,そうでしたか。
確かに私が高校の時も若干あったような・・。
まぁ成人コーナーに売ってる本でもないし,その辺読むか読まないかは自己判断でお願いするということで^^;


>>situmonさん

おぉ,アイシャ絵ありがとうございます^^
こんな絵が2〜3分で描けてしまうのですか,素晴らしいですね☆

>バイクラブ・・・なのはブログから伝わってきます。

長野に住んでいながらバイクを手放すとか考えられないので,万一売ったとしても半年以内に再び買うと思います^^;


242ポイント を手に入れた。

Name: さが  ..かけだし(2,227ポイント)   Date: 2009/05/04(月) 21:50   No:33058     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
管理人さんお久しぶりです。
半年程前ぷよぷよ作ると言った者です。

管理人さんの製作された ”ぷよぷ○を目指して作ったゲーム - BLACK” は現在SEGAに許可申請中
となってますが、やはり著作権あたりの問題で公開されてないんですよね?

自分はもともとオープンのつもりで作成していたので、、どうしようかと。
コードも著作権周りに引っかかるのか教えて頂ければと思います。


149ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(47,135ポイント)   Date: 2009/05/06(水) 06:27   No:33121     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
昨日は雨の夜の中、父を乗せて回転寿司屋に出かけましたとさ。やっぱ運転怖ェー。
でもうん、少し慣れてきた。


>こめかみさんとは比べ物にならないと思いますが、

誰かと勘違いしてません?私のは落書きですよラクガキ。

つーわけで、
一度やってみたかったソードマスターパロ龍神録仕様なのですが。
パロとはいえ漫画描くのもスキャンするのも初めてでかなり見難いんですけどコレ。どーしましょ。
添付するんで知恵をお貸しいただけないでしょーか。





鉛筆書き→スキャン→ビットマップ

の手順でファイルを作りました。


希望としてはクッキリはっきり白黒付けたいです。
自分で調べるべきでしょうが今日はもう疲れたのでお休みなさい。
たった三ページでこのエネルギー消費。漫画家って大変だなぁ。


>ちょうど中間あたりに、成人向けの同人ゲームが色々と載っていたような気がします。

んー、それもあるのですが、記事全般毒を持って毒を制す的な感じで、
耐性の無い人はひたすら気味が悪いんじゃないかと思います。
かく言う私も中学生の頃ポケモン改造記事目当てでズルズルと入っていったのですが、
かなり長いこと嫌な感覚が拭えませんでした。


>他の二次創作とかも紹介されるのでしょうか・・?

ニコ動の特選紹介コーナーとか出来ました。
最近は月ごとにテーマを決めて紹介し始めたようで。
テーマに興味があればガッツリ、興味が無ければバッサリできます。


>ぷよぷよ

ぷよぶよと聞くと私はゲームよりディスクステーション思い出します。懐かしい。
現世シリーズ、ジャンプヒーロー、魔道物語。コンパイルどうして潰れてまうン?(T_T)


画像サイズの大きな元画像ファイルです
http://dixq.net/zip/DragonBusterAisya.zip



859ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,024,015ポイント)   Date: 2009/05/09(土) 09:17   No:33238     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
>>さがさん

お久しぶりです。こんにちは^^
BLACKは著作権的な問題で配布していないです。
ただ、著作権というのはゲームシステムにあるものではなく、キャラクタにあるものだと思うので、
そのゲームシステムに特許が出ていなければ同じルールのゲームで公開しても問題は無いのでは無いかと思います。
(ゲームシステムの特許はとりにくいようですが、ダンスダンスレボリューションや各パズルゲームなどは特許を取っているものがあるようです)
その時は、ぷよ○よを連想させるキャラクタではないキャラクタを自分で書く必要がありそうです。

私はぷよ○よが好きであのキャラが好きなので、あのままにしておきたかったため、特にいじりませんでした。
自己満足で作っているものなので、あれで充分かと思っています^^;
さがさんのゲーム期待しています〜☆
(まぁ大企業がフリーで公開しているゲームにいちいち訴訟起こすなんて考えられないですけどね・・。損害賠償は損害が起きていなかったら発生しないでしょうし。・・ってお咎めが無ければやっちゃっていいって考えはダメですけど)


>>こめかみさん

おおぉぉ!
チョコチョコしたネタにめっちゃ笑わせていただきましたw
面白くて何度も読み返しましたよ^^;
続きが非常に気になりますw
そして黒アイシャ!腹黒そうですね〜w
また龍がよわっちぃ・・w

いいな〜こんな絵がかけるとはうらやましいです。
この絵、うちのサーバーにおいてもいいですか?
・・・って既にしてますけど、消した方がよければ連絡下さい^^;
後、薄くて見にくい部分があったので、コントラスト比を大きく変えてみました。
濃すぎますかね・・。

続き期待してますw

>寿司屋

すし屋いいですね、ここは内陸なので、あまり新鮮なすし屋がないようです。
港の近くの海産物センターにいきたいな〜><

>雑誌

確かにグレーな要素で包まれていた記憶がありますね^^;


252ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(47,600ポイント)   Date: 2009/05/11(月) 23:08   No:33327     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
なんという晒しプレイ。
などといまさらモニタの前で、もんどりうっても仕方なし。
ネットに晒すということは、まあそういうことですよねー。

コントラスト比ですか。
勉強になりました、GIMPでも出来るのかなっと。

寿司屋はまあウチも内陸ですが、
回転寿司にはじめからそこまで期待してないというか、
まあ、どうなのでしょう。港の寿司屋はそんなに美味いのですか。



あとはまあ、補足ですが、
"ソードマスターヤマト"って知りませんかね。

おっ、アンサイクロに本家の画像がある。いいのかこれ。

元ネタ
http://images.uncyc.org/ja/6/6b/Yamato.jpg

知らなくても面白かったならそれでいいです。よかったよかった。


>その時は、ぷよ○よを連想させるキャラクタではないキャラクタを自分で書く必要がありそうです。

ゆっくりの生首でパニックボンバーやりたいなーとか最近たまに妄想します。
思いつくネタの量に対して技量とか時間が無過ぎる・・・
少しずつ精進します。千里の道も一歩からですね。


465ポイント を手に入れた。

Name: やっくん  ..かけだし(1,500ポイント)   Date: 2009/05/12(火) 00:37   No:33331     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
管理人さん初めまして
雑誌掲載おめでとうございます^^
一回そのように掲載された雑誌を見てみたいですが、
自分が住んでるような田舎にも売ってるものですかね・・・。

挨拶のついでに、管理人さんに感謝を。
自分は5ヶ月前くらいにこのサイトに出逢いました。

JAVAでゲームを作ろうとサンプルを探してのことです。
いろんなサイトを転々として見て回っていて、
このサイトを偶然見つけました。
検索 ゲームプログラミング 
といれたためでしょうか。
まず最初にこのサイトの画像を見たとき。
「おわっ!すげぇ・・・。」
「個人のプログラミングでこんなものできるのか。」
「ボンバーマンやってみたいなぁ」
と心を打たれて、
これがきっかけになりゲームを、
(趣味で)作ろうと思い始めました。

といってもエンジンが掛かるのは、
今年の4月に入って何ですが、
大学でいよいよC言語の演習が始まったからです。
(JAVAを捨てるわけじゃないですが)
C言語の講義を受ける1日目に思い出したのが、
やはりここの龍神録のことでした。
自分もこのようなの作れたら・・・と。
JAVAを基礎かじってたおかげかC言語の基礎本を
一週間で読み終えました。
(ポインタはまだまだつまづきがちですが^^;)

そこで、
「さぁゲーム作るぞー!」って思ったけれど、
全く作り方がわかりません。
またそこで思い出したのが、
管理人さんの処女作?のRPG話です。
自分は龍神録のようにいきなりHIGHレベルなものを、
真似して作るより、
最初なので1から試行錯誤して楽しみながらCUIRPGを作ることにしました。

何が言いたいの?って言われそうなので、
ここらへんで話を終えます;;
上のような理由で、
管理人さんにとても感謝してます!
なんというかプログラミングの魅力の一部を見せて頂きました。

人生が変わったかわかりませんが、
少なくとも生活に大きな影響を受けてます(笑”
今はゲームプログラミングにはまり、(CUIRPGですが)
大学の講義受けていない時間は全てこれに費してるほどに。
講義受けてるときも暇あれば構成メモとか。
そして睡眠&食事が偏って生活習慣病の予感^^;

これから掲示板でいろいろと質問させてもらうと思いますが、
どうぞよろしくお願いします。
もう挨拶なしに2回利用させてもらいましたが><


770ポイント を手に入れた。

Name: toyo  ..プログラマー(34,045ポイント)   Date: 2009/05/18(月) 12:09   No:33628     
Title: Re:雑誌掲載などの宣伝 (雑談トピ)    
実は私も見本誌を貰ってたりします
記事探しましたが本当にちょっとだけですね


24ポイント を手に入れた。



Name: マウス  ..ぴよぴよ(10ポイント)   Date: 2009/05/17(日) 10:29   No:33566       
Title: if break    
いつも楽しく拝見させてもらっています。
現在はC言語の基礎を学んでいる最中なのですが、以下のものがコンパイルできずに困っています。
breakの位置が悪いらしいのですが、どうしてでしょうか?


#include<stdio.h>
main()
{
int i;
char str1[21],str2[21];
printf("Input:");
scanf("%s",str1);
printf("Input:");
scanf("%s",str2);

for(i = 0;str1[i] != '\0';i++);
if(str1[i] != str2[i]){
printf("not equal\n");
break;
}
printf("equal");
}

コンパイルエラー:エラー E2030 test.cpp 14: break の位置が誤っている(関数 main() )


入力を二回して両方が完全に正しいかどうかを判断する、というプログラムなのですが…。
回答宜しくお願い致します。

[環境など]
OS:WindowsXP
使用:CPad for Borland C++Compiler
知識:まだ文章を表示できるくらい


10ポイント を手に入れた。


Name: MNS  ..初心者(8,338ポイント)   Date: 2009/05/17(日) 10:30   No:33567     
Title: Re:if break    
for(i = 0;str1[i] != '\0';i++);
これのセミコロンを取ってみては?
for文はif文と同じく{}で囲む必要があります。


14ポイント を落としてしまった。

Name: box  ..ハッカー(140,146ポイント)   Date: 2009/05/17(日) 12:31   No:33569     
Title: Re:if break    
コンパイルエラーが修正できたとします。
実行時に問題が起きそうです。

問題1)2つの文字列の内容が異なるとき、
not equal
equal
と出力します。

問題2)最初に入力したstr1の方が長いと、str2の、何が入っているかわからない箇所にアクセスします。
その結果、プログラムがどういう動きをするか、わからなくなります。

他にも何かあるかもしれません。


149ポイント を手に入れた。

Name: situmon  ..プログラマー(30,454ポイント)   Date: 2009/05/17(日) 17:59   No:33599     
Title: Re:if break    
ちょっと本格的にしてみましたが、間違えもあるかもしれませんのでそこはご了承ください。

無限ループです。
#kazuoniさんのいうとおりでしたので消します。少し考えることにします。



271ポイント を落としてしまった。

Name: kazuoni [URL]  ..比類無きプログラマー(85,124ポイント)   Date: 2009/05/17(日) 18:29   No:33602     
Title: Re:if break    
>situmonさん

asdとzsxと入力してみてください。
結果が異なってます。


21ポイント を手に入れた。

Name: マウス  ..ぴよぴよ(258ポイント)   Date: 2009/05/17(日) 20:48   No:33612     
Title: Re:if break    
皆さん、迅速かつ丁寧な対応・回答ありがとうございます。
今日はC言語環境のPCが使えないため、まだ確認できていないのですが皆様からいただいた回答を基に自分でもチャレンジしてみたいと思います。

見の周りにはC言語が分かる方がおらず途方にくれていましたので、本当に助かりました。
また何かあれば宜しくお願い致します。


2倍のポイントを手に入れた! 248ポイント を手に入れた。

Name: situmon  ..プログラマー(31,173ポイント)   Date: 2009/05/17(日) 21:57   No:33617     
Title: Re:if break    
できました!

#include<stdio.h>


void main()
{
int i,j,k;
char str1[21],str2[21];
while(1){

printf("%%%%%%%%%%%%%%\n");
printf("%言葉が同じか判定します。%\n");
printf("%%%%%%%%%%%%%%\n");
printf("Input:");
scanf("%s",str1);
printf("最初に入力した言葉{%s}\n",str1);
printf("Input:");
scanf("%s",str2);
printf("次に入力した言葉{%s}\n",str2);

for(i=0;i<21;){//最初の言葉の文字数を調べる
if(str1[i]!='\0')
i++;
else
break;
}
for(j=0;j<21;){//次の言葉の文字数を調べる
if(str2[j]!='\0')
j++;
else
break;
}


if(i==j){//文字数が同じなので二つの言葉の文字がすべて同じか調べる
for(k=0;k<i;){//調べた言葉の文字の個数が調べる文字の個数と同じになるまで繰り返す。
if(str1[k]==str2[k])//調べた文字が同じなら次の文字へ
k++;
if(str1[k]!=str2[k]){//文字数が同じだが二つの文字が違うものなので違う言葉
printf("二つの言葉は違う言葉です。\n");
printf("****************************\n");
break;
}
if(k==i){//調べる言葉の文字の個数が調べた文字の個数と同じなら同じ言葉
printf("二つの言葉は同じ言葉です。\n");
printf("****************************\n");
}
}
}
else{//文字数が違うので二つは違う言葉
printf("二つの言葉は違う言葉です。\n");
printf("****************************\n");
}

}
}

たぶんこれだと実行結果に間違えがなくなります。
また間違えていたらすいませんがご指摘ください。
またここはこれだけですむからこちらのかきかたがいい!などもおねがいします。

#すいません、調べると調べたのいちおかしかったのでなおしました。


533ポイント を手に入れた。

Name: かなで  ..ぴよぴよ(171ポイント)   Date: 2009/05/17(日) 22:18   No:33618     
Title: Re:if break    
皆さんもお答えの通り


for(i = 0;str1[i] != '\0';i++);
if(str1[i] != str2[i]){
printf("not equal\n");
break;
}
printf("equal");


for(i = 0;str1[i] != '\0';i++);

for(i = 0;str1[i] != '\0';i++){
処理
}

にしてみてください


140ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(85,325ポイント)   Date: 2009/05/17(日) 22:23   No:33619     
Title: Re:if break    
>situmonさん
改善するとすれば、

・文字列のそれぞれの長さを調べる必要がない
・scanfではスペースなどの空白を読み込めない

ですが、ここはトピ主さんにとっては必要のないことですので控えます^^;



69ポイント を手に入れた。

Name: situmon  ..プログラマー(31,278ポイント)   Date: 2009/05/18(月) 06:36   No:33625     
Title: Re:if break    
kazuoniさんのいうように、
>>・文字列のそれぞれの長さを調べる必要がない
確かに必要ないかもしれません、
一応動作はするとおもいますのでもしかえたいのならここをかえるといいかもしれません。
>>・scanfではスペースなどの空白を読み込めない
今回はscanfだったのでそこまでかえるとかなり違ってくるので・・・


105ポイント を手に入れた。



Name: tenr  ..ぴよぴよ(211ポイント)   Date: 2009/05/17(日) 19:18   No:33605       
Title: プロジェクト    
どうも はじめまして、 

龍神録プログラミングの館のページの、
プロジェクト一括ダウンロードというものがあったので、ダウンロードしました、

第○(1~最後まで)章のRyuJin.sln を開こうとすると、 アプリケーションの選択 というフォームがでてきて、 選択項目に(VB2008とVC#2008)という項目があったので、とりあえVB2008で開いてみました、すると何もないすっからかんの状態で開かれました、なんどやっても 何もない状態で開かれます、

VC#の方でも同じように 何もない状態で開かれます、  どうすればいいのでしょうか・・・

ちみなにPCにはVisualStudio2008が入っています、



211ポイント を手に入れた。


Name: pooka  ..入門者(2,552ポイント)   Date: 2009/05/17(日) 20:10   No:33611     
Title: Re:プロジェクト    
ttp://www.play21.jp/board/formz.cgi?action=res&resno=32478&page=&lognum=100&id=dixq&rln=32482
ここを参考にしてみてください。
Visual Studioでも同じことだと思うので。


76ポイント を手に入れた。

Name: イタマエ  ..ぴよぴよ(32ポイント)   Date: 2009/05/17(日) 20:54   No:33614 解決!     
Title: Re:プロジェクト    
できました^^ C++でないといけないみたいですねぇ、

どうもありがとうございました^^


32ポイント を手に入れた。



Name: junta  ..ぴよぴよ(7ポイント)   Date: 2009/05/17(日) 15:08   No:33582       
Title: 出来た後の実行ファイルについて    
はじめまして!いつもこのサイト様に助けていただいてます。
初歩的な質問なのですが、一通りゲームが出来上がったのですが、その後にどうやって「@@.exe」
みたいにゲームが出来るのかわかりません。
というのは、
自分は友人にゲームを配布(プレイ)したいのですが、友人はVC++を持っていないのでデバック出来ません。
なので実行ファイル化(exe)で配布したいのですが、どこのサイト様をみても書いていませんでした。
どうすればexe化できるのか教えてください!(説明下手ですみません)


7ポイント を手に入れた。


Name: s-rush  ..熟練のプログラマー(50,989ポイント)   Date: 2009/05/17(日) 15:31   No:33586     
Title: Re:出来た後の実行ファイルについて    
実行ファイルであれば、Debugファイルの中に入っていませんか?

26ポイント を手に入れた。

Name: yu  ..プログラマー(27,220ポイント)   Date: 2009/05/17(日) 15:33   No:33587     
Title: Re:出来た後の実行ファイルについて    
あまり詳しくないので
何か変なこと言ったらすみません;


debugしてエラーが出なかった時点で生成されているはずですよ。
初期の設定だとslnがあるフォルダにDebugというフォルダがあり、その中にあるはずです。
後はslnがあったところにexeを置いてクリックするだけで実行できます。

しかし、Debugのexeを配布するよりReleaseしたexeを配布したほうが良いです。
詳しくはこちらで↓

http://homepage2.nifty.com/natupaji/DxLib/dxtec.html#M1


206ポイント を手に入れた。

Name: junta  ..ぴよぴよ(115ポイント)   Date: 2009/05/17(日) 19:56   No:33609 解決!     
Title: Re:出来た後の実行ファイルについて    
おふた方様有難うございます!
本当ですね、Debugのなかにexeファイルありました!
あと無事実行も出来ました。
yuさんのやり方でも試した結果無事に出来たので、友人に配布したいと思います!
本当に有難うございました!


108ポイント を手に入れた。



Name: ABC  ..ぴよぴよ(894ポイント)   Date: 2009/05/14(木) 19:40   No:33438       
Title: 「extern int a;」 と 「extern "C" int a;」    
こんにちは

extern int a;

extern "C" int a;

機能上何が違うのでしょうか


ご教授いただければ幸いです。




60ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(84,239ポイント)   Date: 2009/05/14(木) 20:03   No:33439     
Title: Re:「extern int a;」 と 「extern    
このあたりが参考になりますかもしれないです。

C++編(言語解説)
ttp://www.geocities.jp/ky_webid/cpp/language/038.html


42ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(100,803ポイント)   Date: 2009/05/14(木) 21:19   No:33442     
Title: Re:「extern int a;」 と 「extern    
> C++編(言語解説)
> ttp://www.geocities.jp/ky_webid/cpp/language/038.html

ざっと見た感じでは、少なくとも一箇所間違っているようです。
__cplusplusマクロは標準C++で規定されています。


28ポイント を手に入れた。

Name: ABC  ..ぴよぴよ(946ポイント)   Date: 2009/05/17(日) 15:48   No:33588 解決!     
Title: Re:「extern int a;」 と 「extern    
kazuoniさま、 たかぎさま
ありがとうございました

よくわかりました

また宜しくお願い致します




52ポイント を手に入れた。



Name: レスト  ..ぴよぴよ(315ポイント)   Date: 2009/05/17(日) 03:52   No:33556       
Title: デバック関数    
VS2005、WindowsAPI、C++、XPで開発をしています。

DebTextXYという関数を作ったのですが
画面を閉じるときにエラーが出てしまいます。
引数は(X座標、Y座標、表示する変数)です。

また表示されるテキストのdeb_1を動的に変数名に変更したいです。
例の場合 deb = 5 みたいなかんじです。
この処理がとても面倒な場合、
DebTextXY(20,40,str,abc)みたいにしてstrに
直接、deb = という感じに値を書こうかと考えています。



void DebTextXY(int x, int y, int deb){
char str[] = "";
wsprintf(str, TEXT("deb_1 = %d"), deb); // ここ
TextOut(hDC_Wnd, x, y, str, strlen(str));
}

//処理部
char mess[] = "テスト";
int abc = 5;

DebTextXY(20,40,abc);





315ポイント を手に入れた。


Name: たいちう  ..プログラマー(28,507ポイント)   Date: 2009/05/17(日) 09:34   No:33562     
Title: Re:デバック関数    
char str[] = "";

char str[1024];


2倍のポイントを手に入れた! 8ポイント を手に入れた。

Name: tkmakwins15  ..比類無きプログラマー(96,196ポイント)   Date: 2009/05/17(日) 09:50   No:33563     
Title: Re:デバック関数    

void dumDebTextXY(int x, int y, int deb,const TCHAR *name){
char str[1024]={0};
wsprintf(str, TEXT("%s= %d"),name,deb);
TextOut(hDC_Wnd, x, y, str, strlen(str));
}

#define DebTextXY(X,Y,DEB) dumDebTextXY(X,Y,DEB,TEXT(#DEB))

でどうでしょうか?


2倍のポイントを手に入れた! 326ポイント を手に入れた。

Name: tkmakwins15  ..比類無きプログラマー(96,360ポイント)   Date: 2009/05/17(日) 09:57   No:33564     
Title: Re:デバック関数    
>たいちうさん

僕もつられてやっちゃってるんですが、wsprintfに渡すバッファの長さとしては、1024ではなくて、1025を指定したほうがいいです。
参考:
http://msdn.microsoft.com/ja-jp/library/cc364872.aspx
http://support.microsoft.com/kb/77255/ja


2倍のポイントを手に入れた! 164ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(355,423ポイント)   Date: 2009/05/17(日) 13:16   No:33570     
Title: Re:デバック関数    
tkmakwins15さん
>DebTextXY

 TCHAR使うなら、charとか strlenもそれに合わせないと、コンパイルが通らないことがあるのではないでしょうか。


111ポイント を手に入れた。

Name: tkmakwins15  ..比類無きプログラマー(96,473ポイント)   Date: 2009/05/17(日) 13:53   No:33572     
Title: Re:デバック関数    
あっ、そうですね。ということはこうなりますね。

void dumDebTextXY(int x, int y, int deb,const TCHAR *name){
TCHAR str[1024]={0};
wsprintf(str, TEXT("%s= %d"),name,deb);
TextOut(hDC_Wnd, x, y, str, lstrlen(str));
}

#define DebTextXY(X,Y,DEB) dumDebTextXY(X,Y,DEB,TEXT(#DEB))


113ポイント を手に入れた。

Name: レスト  ..ぴよぴよ(422ポイント)   Date: 2009/05/17(日) 14:06   No:33574     
Title: Re:デバック関数    
エラーも消え、できました><
みなさんありがとうございます。
定義文自体は理解しています。
例)#define FONT_MAX 16 は FONT_MAXを16と扱う

ただ#defineのところのTEXT(#DEB)についてよくわからなかったのですが
これはdebという変数を値ではなく変数名を取ってくるみたいな感じでよいのでしょうか?


107ポイント を手に入れた。

Name: tkmakwins15  ..比類無きプログラマー(96,533ポイント)   Date: 2009/05/17(日) 14:25   No:33577     
Title: Re:デバック関数    
#define STRING(S) #S
とすると、マクロの引数のSを文字列リテラルにします。


2倍のポイントを手に入れた! 60ポイント を手に入れた。



Name: hal  ..ぴよぴよ(305ポイント)   Date: 2009/05/14(木) 05:33   No:33409       
Title: 【龍神録】当たり判定について    
はじめまして。STGを作りたいけれど、初心者過ぎてイチから作れないので龍神録PGのサイトにお世話になっているhalという者です。
さっそく質問なんですが、当たり判定の部分(out.cpp)についてです。
自機と敵の当たりを判定する関数が無かったので、自分で作ろうと思ったのですが曖昧にしか理解できてない部分が多すぎてお手あげ状態です。
疑問が多くて、続けて書くとごちゃごちゃするので箇条書きにすると



@ オーバーフロー処理をしている理由がよくわからない

A @の処理内でenemy[s].knd>=ENEMY_RANGE_MAXとしているけれど、敵の種類を増やせばオーバーフローしてしまうから、その場合はどうすればいいのか。単純にENEMY_RANGE_MAXを増やすというのは違うなと思うし・・・

B 敵の当たり判定範囲は四角、自機ショットの当たり判定は線形だと思うのですが、CRANGEは、自機の当たり判定範囲(2.0×2.0)を表現している、という認識であっているのか



この質問にお答えいただいても、また疑問が湧いて訊き返してしまうかもしれませんが・・・
どうかよろしくお願いします。


305ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(355,312ポイント)   Date: 2009/05/16(土) 00:43   No:33507     
Title: Re:【龍神録】当たり判定について    
 このページの話ですか?
ttp://dixq.net/rp/21.html



>オーバーフロー処理をしている理由がよくわからない 。

 万が一異常な値が入っていた場合、直後の処理で配列の外にアクセスしてしまう可能性が
あるから、です。

 kindの型は intなので、本来なら負ではないチェックもしないと片手落ちではありますが。



>敵の種類を増やせばオーバーフローしてしまうから、その場合はどうすればいいのか

 種類が増えたのなら、ENEMY_RANGE_MAXも増やせばいいです。
 もちろんそれに関連する定義(enemy_rangeの初期値とか)も修正が必要になるとは思いますが。



>CRANGEは、自機の当たり判定範囲(2.0×2.0)を表現している、という認識であっているのか

 そんなところです。


306ポイント を手に入れた。

Name: hal  ..ぴよぴよ(341ポイント)   Date: 2009/05/17(日) 13:52   No:33571     
Title: Re:【龍神録】当たり判定について    
>Justyさん
回答ありがとうございます、説明不足な点すみませんでした。
助かります。


36ポイント を手に入れた。



Name: pic  ..ぴよぴよ(276ポイント)   Date: 2009/05/16(土) 22:44   No:33543       
Title: 敵の出現時について    
こんばんは。質問させてもらいます
[龍神録プログラミングの館]を参考に横スクロールのシューティングを作っているC言語初心者です。

stage_countが100になった時に一匹目の敵が出るようにしているのですが、敵が出現する瞬間画面が固まります。自分のPCのスペックが悪いのかと思い、DLしたプロジェクトを使ってみるとそちらは固まりません。

ということは自分のプログラムが悪いのかと思い、DLしたのとプログラミングの館を見ながら比較しているのですが、どこが間違っているのかわからなくて困ってます。

とくに変えたところはなく、変数名を ang→angle, 関数名を bossatan2→BossAtan2,
for (int i = 0;)


int i;

for (i = 0;)


などにしたくらいしかありません。自分の探し方が悪く、見落としがあるのかもしれませんが、何かアドバイスがあるのならお願いします。あと、一匹目出現時だけ固まるだけで、その後は普通に動きます。


276ポイント を手に入れた。


Name: yu  ..プログラマー(26,931ポイント)   Date: 2009/05/17(日) 00:33   No:33552     
Title: Re:敵の出現時について    
以前自分もそんな現象が起きたことがあります。(現に今も起きていますがw)
解決方法は分かっていません・・・。
一度重くなったら後は軽いのですけどね・・・

生成されたexeから起動しても同じ現象が起こりますか?


22ポイント を落としてしまった。

Name: pic  ..ぴよぴよ(313ポイント)   Date: 2009/05/17(日) 08:37   No:33559     
Title: Re:敵の出現時について    
返信ありがとうございます。

exeから起動したらスムーズに動きました。
ということは気にしないでいいのでしょうか?


37ポイント を手に入れた。

Name: yu  ..プログラマー(27,014ポイント)   Date: 2009/05/17(日) 09:29   No:33560     
Title: Re:敵の出現時について    
自分は配布するときになったらexeだからいいかー、と思って
気にしませんでした。
組んだプログラムのバグでは無いと思いますし。

ですが、何か解決方法があるなら私も知りたいです・・・。


83ポイント を手に入れた。

Name: pic  ..ぴよぴよ(357ポイント)   Date: 2009/05/17(日) 09:31   No:33561 解決!     
Title: Re:敵の出現時について    
私も原因が知りたいです。多分自分のプログラムが悪いのだとは思いますが。
気にせず頑張ります。

ありがとうございました


44ポイント を手に入れた。



Name: 素人PG  ..ぴよぴよ(200ポイント)   Date: 2009/05/17(日) 04:04   No:33557       
Title: DXライブラリについて    
最近、DXライブラリをつかっていまして、
一通り使える?ようになりましたので
ソースを見てみたいと考えています。

LoadGraphScreenなどの関数をみたいのですが
どのように見ればよいのかわかりません・・・
F12をおしてみてもexternまでしかたどりつけませんでした・・・

どうか見方をお願いします。
またHPでDXライブラリの各関数のソースがのっているのでしたら
その場所を教えてはいただけないでしょうか?


200ポイント を手に入れた。


Name: Mist  ..熟練のプログラマー(60,895ポイント)   Date: 2009/05/17(日) 07:48   No:33558     
Title: Re:DXライブラリについて    
> またHPでDXライブラリの各関数のソースがのっているのでしたら
> その場所を教えてはいただけないでしょうか?

本家のDXライブラリダウンロードページの下のほうに、DXライブラリのソースをダウンロードできるリンクがあります。
といっても、C++とWindowsプログラミングの知識が少し、Direct Xの知識がかなりないと理解するのは大変ですけどね。


74ポイント を手に入れた。



Name: packls  ..かけだし(1,685ポイント)   Date: 2009/05/16(土) 22:10   No:33541       
Title: L*a*b変換について    
こんにちはpacklsと申します。
今回XYZ値をL*a*b変換するプログラムを作っているのですが、L*a*b変換する際にうまく処理できず苦戦しています。
アドバイスよろしくお願いします。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

//画像データを保存する構造体
typedef struct tagImageData{
unsigned char *data; //各画素の濃度値
unsigned char header[54]; //画像のヘッダ
int width; //画像の横幅
int height; //画像の縦幅
}
ImageData;

//readImage:データの読み込み関数
//第一引数:読み出しファイルのファイルポインタ
//第二引数:読み出しデータの保存変数(ImageData型)

void readImage(FILE *fp, ImageData *img){
//ヘッダ情報を読み込む
fread(img->header, sizeof(unsigned char),54,fp);
//ヘッダから画像の横幅を読み込む
memcpy(&img->width,&img->header[18],4);
//ヘッダから画像の縦幅を読み込む
memcpy(&img->height,&img->header[22],4);

//各画素の濃度値を保存する領域を確保
img->data = (unsigned char *)malloc(sizeof(unsigned char) * img->width * img->height * 3);

//画像データお読み込む
fread(img->data,sizeof(unsigned char),img->width * img->height * 3,fp);
}

//writeImage:データの書き出し関数
//第一引数:書き出しファイルのファイルポインタ
//第二引数:書き出しデータの保存変数(ImageData型)

void writeImage(FILE *fp,ImageData *img){
//ヘッダデータの書き出し
fwrite(img->header, sizeof(unsigned char),54,fp);
//画像データの書き出し
fwrite(img->data,sizeof(unsigned char),img->width*img->height*3,fp);
}

void labImage(ImageData *img,ImageData *limg,ImageData *aimg,ImageData *bimg){
int i,j;
double l,a,b;
unsigned char R,G,B;
double X,Y,Z;
long p;

//X,Y,Zそれぞれの各画素の濃度値を保存する領域を確保

limg->data=(unsigned char *)malloc(sizeof(unsigned char)*img->width*img->height*3);
aimg->data=(unsigned char *)malloc(sizeof(unsigned char)*img->width*img->height*3);
bimg->data=(unsigned char *)malloc(sizeof(unsigned char)*img->width*img->height*3);

//X,Y,Z画像へヘッダ情報、横幅、縦幅の情報をコピーする
limg->width=img->width;
aimg->width=img->width;
bimg->width=img->width;
limg->height=img->height;
aimg->height=img->height;
bimg->height=img->height;

for(i=0;i<54;i++){
limg->header[i]=img->header[i];
aimg->header[i]=img->header[i];
bimg->header[i]=img->header[i];
}

//各画素の濃度値を順番にコピーする
for(j=0;jheight;j++){
for(i=0;iwidth;i++){
p=j*img->width*3+i*3; //元の位置

B=img->data[p]; //青
G=img->data[p+1]; //緑
R=img->data[p+2]; //赤

//XYZ表色系への変換      
X=2.7689*R+1.7517*G+1.1302*B;
Y=1.0000*R+4.5907*G+0.0601*B;
Z=0.0000*R+0.0565*G+5.5943*B;

//L*a*b表色系への変換
if((X/99.09>0.008856) && (Y/100.00>0.008856) && (Z/85.32>0.008856)){
l=116*(pow(Y/100.00,1/3))-16;
a=500*(pow(X/99.09,1/3)-pow(Y/100.00,1/3));
b=200*(pow(Y/100.00,1/3)-pow(Z/85.32,1/3));
}
else{
l=116*(7.787*Y/100.00+16/116)-16;
a=500*(7.787*(X/99.09)+16/116-(7.787*Y/100.00+16/116));
b=200*(7.787*(Y/100.00)+16/116-(7.787*Z/85.32+16/116));
}
limg->data[p]=limg->data[p+1]=limg->data[p+2]=l;
aimg->data[p]=aimg->data[p+1]=aimg->data[p+2]=a;
bimg->data[p]=bimg->data[p+1]=bimg->data[p+2]=b;
}
}
}

int main(void){
FILE *fp;
ImageData inImg;
ImageData lImg, aImg, bImg;
int i,j;

//画像データを開く
if((fp=fopen("lenna.bmp","rb"))==NULL){
printf("file not found!!\n");
exit(1);
}

readImage(fp,&inImg);

fclose(fp);

labImage(&inImg,&lImg,&aImg,&bImg);
//出力画像ファイル(X)を開く
if((fp=fopen("L*-result.bmp","wb"))==NULL){
printf("file not found!!\n");
exit(1);
}

writeImage(fp,&lImg);

//出力画像ファイル(Y)を開く
if((fp=fopen("a*-result.bmp","wb"))==NULL){
printf("file not found!!\n");
exit(1);
}
writeImage(fp,&aImg);

//出力画像ファイル(Z)を開く
if((fp=fopen("b*-result.bmp","wb"))==NULL){
printf("file not found!!\n");
exit(1);
}
writeImage(fp,&bImg);

fclose(fp);

free(inImg.data);
free(lImg.data);
free(aImg.data);
free(bImg.data);
return 0;
}




1,685ポイント を手に入れた。


Name: box  ..ハッカー(139,807ポイント)   Date: 2009/05/16(土) 22:52   No:33544     
Title: Re:L*a*b変換について    

> 今回XYZ値をL*a*b変換するプログラムを作っているのですが、L*a*b変換する際にうまく処理できず苦戦しています。

うまく処理できずに苦戦されている、というのは、

> //各画素の濃度値を順番にコピーする
> for(j=0;jheight;j++){
> for(i=0;iwidth;i++){

ここの2行で出るコンパイルエラーのことですか?




29ポイント を落としてしまった。

Name: packls  ..かけだし(1,779ポイント)   Date: 2009/05/16(土) 23:18   No:33547     
Title: Re:L*a*b変換について    
boxさん回答ありがとうございます。
ソースをペーストする際に->が抜けてしまいました。
正しくは

//各画素の濃度値を順番にコピーする
for(j=0;j<img->height;j++){
  for(i=0;i<img->width;i++){

です。


94ポイント を手に入れた。

Name: box  ..ハッカー(139,945ポイント)   Date: 2009/05/16(土) 23:48   No:33549     
Title: Re:L*a*b変換について    
で、肝心の

>L*a*b変換する際にうまく処理できず苦戦しています。

この内容は、どうなりましたか?
また、テスト用の入力ファイルはありますか?


2倍のポイントを手に入れた! 138ポイント を手に入れた。

Name: box  ..ハッカー(139,997ポイント)   Date: 2009/05/17(日) 00:15   No:33551     
Title: Re:L*a*b変換について    

> if((fp=fopen("L*-result.bmp","wb"))==NULL){

Windowsで開発しているとすると、ファイル名そのものに'*'は使えません。


52ポイント を手に入れた。

Name: pcckls  ..ぴよぴよ(105ポイント)   Date: 2009/05/17(日) 01:11   No:33554     
Title: Re:L*a*b変換について    
ubuntuで開発しています。
コンパイルはうまくいき、出力ファイルもちゃんとできるのですが、正しく出力ファイルの画像が表示されない状態です。
自分が思うにLab変換の部分がひっかかってると思うのですが、どなたか分かりますか?
かなり人任せな感じになってしまったのですが、よろしくお願いします。


105ポイント を手に入れた。



Name: デジキャメ  ..ぴよぴよ(89ポイント)   Date: 2009/05/15(金) 11:01   No:33474       
Title: ロジックを研究していますが・・・    
ロジックを作りたいのですが、
セル表示に悩んでいます。
テキストやWEBでも検索していますが、
いまいち分からない状態です。

言語:C言語

目標・サイズ10×10
  ・時間制限あり
  ・完成したときのみクリアできる



89ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(84,193ポイント)   Date: 2009/05/15(金) 11:31   No:33475     
Title: Re:ロジックを研究していますが・・・    
お絵かきロジックですか?マ○オのピクロス的な?

>セル表示に悩んでいます。
printfでロジックの状態(0:□ 1:■)を表示すればいいのでは?

もう少し具体的な質問のほうが、求めている回答が得られるかも知れません。


92ポイント を手に入れた。

Name: デジキャメ  ..ぴよぴよ(599ポイント)   Date: 2009/05/15(金) 14:34   No:33482     
Title: Re:ロジックを研究していますが・・・    
ご返信ありがとうございます。

マ○オのピOロスなものを研究しています。

作成までの計画は、=>基となるセル(マス)を作成する。
         =>絵を作ってみる。(ご指摘の通り□■および01を使用します)
         =>先画面を裏に格納する。(SetDrawScreen(DX_SCREEN_BACK) 等で表示させない)
         =>マスを、キー入力で(マスの)反転 □⇔■
         =>入力毎にチェックされ、裏の絵と一致したらゲームセット。
           その後はオリジナル版へ発展させる計画です。

ピクロスにとって不可欠な、表ですが    

int PixcellData[ PIXCELL_HEIGHT ][ PIXCELL_WIDTH ] =
{
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0}, //5*5のマスの初期状態
} ;
  
を用いて作成を考えていますが、表のようにできないです。

ほかの方法でないと作成(クリックで反転等)は不可能なのでしょうか?


510ポイント を手に入れた。

Name: toyo  ..プログラマー(34,021ポイント)   Date: 2009/05/16(土) 11:49   No:33519     
Title: Re:ロジックを研究していますが・・・    
DXライブラリで作られているのでしょうか
サンプルを作ってみました

#include "DxLib.h"
#define OFFSET_X (100) // 表示位置
#define OFFSET_Y (100)
#define PIXSIZE (16) // ピクセル1個の大きさ
#define PIXEL_HEIGHT (5) // ピクセルの行数
#define PIXEL_WIDTH (5) // ピクセルの列数

int MyDrawPixel(int x, int y, int color)
{
int col[] = {GetColor(0,255,0), GetColor(0,0,255), GetColor(255,255,255)};
int sx, sy;
if (color < 0 || color > 2)
{
return -1;
}
if (x < 0 || x >= PIXEL_WIDTH)
{
return -2;
}
if (y < 0 || y >= PIXEL_HEIGHT)
{
return -3;
}
sx = OFFSET_X + x * PIXSIZE;
sy = OFFSET_Y + y * PIXSIZE;
DrawBox(sx, sy, sx + PIXSIZE - 1, sy + PIXSIZE - 1, col[color], TRUE);
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// 完成図
int PixelData[ PIXEL_HEIGHT ][ PIXEL_WIDTH ] =
{
{ 1, 1, 1, 1, 1},
{ 0, 0, 1, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 1, 0, 0},
} ;
// 作業用
int WorkData[ PIXEL_HEIGHT ][ PIXEL_WIDTH ] = {0};
int i, j;
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 )
{
return -1;
}
// 初期画面表示
for (i = 0; i < PIXEL_HEIGHT; i++)
{
for (j = 0; j < PIXEL_WIDTH; j++)
{
MyDrawPixel(j, i, 0);
}
}
// マウスカーソルを表示状態にする
SetMouseDispFlag(TRUE);
while(!ProcessMessage())
{
int MouseX, MouseY;
// マウス左クリック
if((GetMouseInput() & MOUSE_INPUT_LEFT))
{
// マウスボタンを放すまで待つ
while (GetMouseInput() & MOUSE_INPUT_LEFT);
// マウスの位置を取得
GetMousePoint(&MouseX, &MouseY);
// マウス座標を配列値に変換
MouseX = (MouseX - OFFSET_X) / PIXSIZE;
MouseY = (MouseY - OFFSET_Y) / PIXSIZE;
// ピクセルの状態を変更
if (MouseX >= 0 && MouseX < PIXEL_WIDTH &&
MouseY >= 0 && MouseY < PIXEL_HEIGHT)
{
WorkData[ MouseY ][ MouseX ]++;
if (WorkData[ MouseY ][ MouseX ] > 2)
{
WorkData[ MouseY ][ MouseX ] = 0;
}
MyDrawPixel(MouseX, MouseY, WorkData[ MouseY ][ MouseX ]);
}
}
// 一定時間待つ
WaitTimer(100);
}
DxLib_End() ;
return 0 ;
}


954ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(84,427ポイント)   Date: 2009/05/16(土) 13:01   No:33521     
Title: Re:ロジックを研究していますが・・・    
toyoさんもサンプルで使っていますが、
DXライブラリでのマウスクリック判定、座標位置取得はそれぞれ
GetMouseInput()
GetMousePoint()

があります。


56ポイント を手に入れた。

Name: デジキャメ  ..ぴよぴよ(600ポイント)   Date: 2009/05/16(土) 15:55   No:33528 解決!     
Title: Re:ロジックを研究していますが・・・    
>toyoさん、 kazuoniさん

丁寧なご回答ありがとうございます。

マス表示の研究の参考にさせて頂きます。


1ポイント を手に入れた。

Name: たいちう  ..プログラマー(28,499ポイント)   Date: 2009/05/17(日) 00:57   No:33553     
Title: Re:ロジックを研究していますが・・・    
解決されたようですし、単なる戯言を。

プログラマにとって、ロジックとはアルゴリズムと同義語とは言えないけど、
それに近いような「論理」「論理学」などの英語の元の意味を連想します。
そこで最初の質問で「ロジックを作りたい」とあり、何のロジックか全く
書いてないあたりで、ぉぃぉぃ、と思ってしまいました。

しかし、パズルに造詣が深いプログラマである私としては、
目標として書かれた「サイズ10×10」「時間制限」「完成」等のキーワードで、
イラストロジックやお絵かきロジック、などを指していると気付きました。

質問の仕方がおかしいだろと思いましたが、指摘する以上の時間が取れず、
黙っていました。質問の不備を指摘するのは簡単ですが、質問の意図を
ほぼ確信できた以上は、できれば有効な回答を添えたいものですので。

放置している間に、ふと「ロジック」でググって見たところ、
なんと件のパズルが1位なんですね。きっとこのようにして言葉は
変わっていくんですね。質問者、ちっとも悪くねーじゃん。

とはいえ、英単語 logic は高校で習うくらいだし、質問者が大学生以上なら
少しは元の意味を考えてほしいかな。


いずれにしても、パズル好きが高じてプログラマになった私としては、
複雑な気分です。


308ポイント を手に入れた。



Name: 山崎  ..初心者(7,140ポイント)   Date: 2009/05/16(土) 11:07   No:33518       
Title: イテレータとdeleteについて    
毎度お世話になっております、山崎です。
イテレータを使ってリストの要素のポインタが指すインスタンスをdeleteしようとしたところ、
出てきたエラーをどうすることもできず皆様のお知恵をお借りしに参りました。
OSはXP,エディタはVisualStudio2008です。

listに格納されたNumberObjectという型のポインタを最初から順番に全て調べ、
NumberObject::DeleteThisがtrueであればそのポインタが指すインスタンスをdeleteし、
listからも削除する、ということを行いたいと思っています。

以下はそのために書いたコードです。
グローバル変数として、他のファイルでlist<NumberObject*> NOM;と宣言してあります。
なお、NumberObject::ObjectMain()はDeleteThisを状況に応じてtrueにする処理です。
listに新しいNumberObjectのポインタを格納する処理は別の場所で行っています。


...
list<NumberObject*>::iterator NOMit=NOM.begin();
while(NOMit!=NOM.end())
{
(*NOMit)->ObjectMain();
if((*NOMit)->DeleteThis==true)
{
delete *NOMit;
NOMit=NOM.erase(NOMit);
}
else
++NOMit;
}
...


このコードを実行したところ、
delete *NOMit;
の行でHEAP CORRUPTION DETECTEDというエラーが発生してしまいました。

イテレータ自体をdeleteしてしまったのかな?と思い、
delete *NOMit;
の行を
NumberObject* NOTemp=*NOMit;
delete NOTemp;
としてみましたが、こちらもエラーでした。

どのようにすれば、イテレータが指すポインタが指すインスタンスをdeleteできるのでしょうか。


503ポイント を手に入れた。


Name: MNS  ..初心者(8,352ポイント)   Date: 2009/05/16(土) 14:32   No:33522     
Title: Re:イテレータとdeleteについて    
あまり関係ないかもしれないですが、
delete してから 要素をeraseするのは順序的によくないのではないでしょうか?

if((*NOMit)->DeleteThis==true)
{
NumberObject* p_tmp = *NOMit;
NOMit=NOM.erase(NOMit);
delete p_tmp;
}

上のように、いったん要素を取り出して、eraseした後にdeleteしてみてはどうでしょう?


32ポイント を手に入れた。

Name: 山崎  ..初心者(7,263ポイント)   Date: 2009/05/16(土) 16:17   No:33530 解決!     
Title: Re:イテレータとdeleteについて    
MNSさん
ご返答誠にありがとうございます。
紹介していただいたコードを実装してみたところ、
メモリリークを起こさず正しく実行しました。
本当にありがとうございます!!

リストから要素を削除する前にdeleteしてはいけないとは知りませんでした。


123ポイント を手に入れた。



Name:  ..ぴよぴよ(27ポイント)   Date: 2009/05/16(土) 15:08   No:33523       
Title: 開放についてですが///    
画像を入れていた変数の開放にはなにを使えばいいのですか?

27ポイント を手に入れた。


Name: ぼく  ..ぴよぴよ(8ポイント)   Date: 2009/05/16(土) 15:08   No:33524     
Title: Re:開放についてですが///    
むずかしいですよねぇ^^

8ポイント を手に入れた。

Name: チルチル  ..中級者(12,341ポイント)   Date: 2009/05/16(土) 15:49   No:33527     
Title: Re:開放についてですが///    
メモリに読み込んだ画像を削除するって事ですか?
使った事は無いですが
DeleteGraph関数で良いと思います、

DeleteGraph( GHandle );

のように使います。


2ポイント を手に入れた。



Name: 匿名  ..上級者(16,202ポイント)   Date: 2009/04/21(火) 21:30   No:32519       
Title: リプレイ保存の方法    
リプレイを保存する処理を作っているんですが
皆さんはどんな方法で保存しているんでしょうか?
参考にしたいので教えてください。

ちなみに私が使っている方法は

i=0;

if( Key[KEY_INPUT_Z]>0 )i+= 1;

if( Key[KEY_INPUT_X]>0 )i+= 2;

if( Key[KEY_INPUT_LSHIFT]>0 )i+= 4;

if( Key[KEY_INPUT_LCONTROL]>0 )i+= 8;

if( Key[KEY_INPUT_UP]>0 )i+=16;

if( Key[KEY_INPUT_RIGHT]>0 )i+=32;

if( Key[KEY_INPUT_DOWN]>0 )i+=64;

if( Key[KEY_INPUT_LEFT]>0 )i+=128;

fputc(i,REPLAY_fp);


で保存して

i=fgetc(fp);

Key[KEY_INPUT_Z]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_X]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_LSHIFT]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_LCONTROL]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_UP]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_RIGHT]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_DOWN]=i%2;

i-=i%2;

i-=i/2;

Key[KEY_INPUT_LEFT]=i%2;


で読み込んでいます

8個のボタンが押されているかを
2進数の各ビットの状態に置き換えて保存しています。
この方法を使っている理由はボタンごとに保存するより
1バイトにまとめた方が容量が8分の1になるからです。

本当の理由は他のファイル操作系関数がまだ使えないからなんですが・・


456ポイント を手に入れた。


Name: SooA [URL]  ..上級者(18,369ポイント)   Date: 2009/04/22(水) 00:25   No:32529     
Title: Re:リプレイ保存の方法    
入力用のカウントを回して、
各キーに変化があった場合にのみ
その変化とカウント値を記録していく
方法もあります。

例)
カウント/キーの変化
1020 Left_Down
1030 X_Down
1052 X_Up
1100 Left_Up


94ポイント を落としてしまった。

Name: 匿名  ..上級者(16,208ポイント)   Date: 2009/04/22(水) 12:44   No:32532     
Title: Re:リプレイ保存の方法    
なるほど〜

6ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(342,545ポイント)   Date: 2009/04/22(水) 22:44   No:32548     
Title: Re:リプレイ保存の方法    
過去ログでも似たような話題をしていたことがあります。

C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=22359&page=&lognum=70&id=dixq&rln=22441


52ポイント を手に入れた。

Name: 匿名  ..上級者(16,020ポイント)   Date: 2009/04/23(木) 00:23   No:32551     
Title: Re:リプレイ保存の方法    
かなり参考になりました。
でもわからない所が二つあったので質問します。

まず

if(leftが押されている) keydat |= (1 << 0); と if(keydata & (1 << 0))

なんですが、ジョイパッドの関数とかでも使われてたと思いますけど、ちょっと意味がわからないんですよね。
見た感じ、指定したビットを立てたり、指定したビットが立っているかを調べる式みたいですが
どうなんでしょうか?
上で書いた式だと無駄が多すぎるので、こんな風にできれば便利なんですが・・

もう一つは

キーの入力状態の変化を保存する

という所ですが、キーが何フレーム目で変化したかはどうやって調べるんですか?


188ポイント を落としてしまった。

Name: Justy  ..伝説なるハッカー(343,041ポイント)   Date: 2009/04/23(木) 01:20   No:32552     
Title: Re:リプレイ保存の方法    

>指定したビットを立てたり、指定したビットが立っているかを調べる式みたいですが
>どうなんでしょうか

 そうです。
 指定したビットと | することでそのビットを立てられますし、
立っているかどうかはそのビットと & すれば調べることができます。

 詳しくは「ビット演算」で検索をかけてみてください。
 いろんなサイトでわかりやすく説明していますので。



>キーが何フレーム目で変化したかはどうやって調べるんですか?

 1フレーム前の押下情報を覚えておきます(どのみち押した瞬間を検知するために
記録しているかと思いますが)。

 で、前のフレームと比較して、押下情報が変化していなければカウンタをインクリメントし、
変化していたらそのカウンタから同じ押下情報だったフレーム数がわかります。

 たとえば押されていたキーが

1 frame 上
2 frame 上
3 frame 上
4 frame 下


だった場合、1フレーム目は最初なので「上」を記録してカウンタ1としておきます。

 2フレーム目は直前のフレームである1フレーム目と比較し、同じなのでカウンタを+1して、2とします。
 3フレーム目は同様に2フレーム目と比較し、やはり同じなのでカウンタを+1して、3とします。

 4フレーム目は3フレーム目と比較すると、「上」から「下」に変化しています。
 ここでカウンタ値である3が何フレーム目で変化したのかを表している、ということになります
 
(カウンタは1に初期化して次のフレームでも同様の処理を行えば続けて同じだったフレーム数を
調べられます)。


496ポイント を手に入れた。

Name: 匿名  ..上級者(16,110ポイント)   Date: 2009/04/23(木) 16:01   No:32574     
Title: Re:リプレイ保存の方法    
調べてみて大体理解したんですが
(1 << 0))はこの場合1ビット目を
指定しているんですか?
つまり00000001を左に0個シフトしてるの・・かな
1は変数じゃないけど同じように使えるんですか?

あとリプレイですが、ちょっとピンとこないんですけど
一番上のSooAさんのやり方みたいな感じですか?


90ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(343,583ポイント)   Date: 2009/04/23(木) 23:34   No:32594     
Title: Re:リプレイ保存の方法    

>つまり00000001を左に0個シフトしてる

y



>1は変数じゃないけど同じように使えるんですか?

 使えます。試してみてください。



>一番上のSooAさんのやり方みたいな感じですか?

 似ていますが、ちょっとだけ違いますね。
 分かりやすくいえば、そのキーの組み合わせで何フレーム押されていたのか(※)を
記録しますので、押されたキーの組み合わせが変化するたびにカウンタは初期化されます。


※ 実際には「そのキーの組み合わせで何フレーム押されいたのか−1」を記録した方が
効率はいいですね。気にならなければどちらでもいいのですが。


382ポイント を手に入れた。

Name: 匿名  ..上級者(16,159ポイント)   Date: 2009/04/24(金) 00:40   No:32595     
Title: Re:リプレイ保存の方法    
わかりました、ちょっとコードを作ってみます。

リプレイですが、つまり押されているボタンの組み合わせが何フレーム維持されたかを記録するって事ですか?


49ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(343,618ポイント)   Date: 2009/04/24(金) 00:53   No:32598     
Title: Re:リプレイ保存の方法    

>何フレーム維持されたかを記録するって事ですか

 そうです。


35ポイント を手に入れた。

Name: 匿名  ..上級者(16,383ポイント)   Date: 2009/04/24(金) 14:40   No:32635     
Title: Re:リプレイ保存の方法    
少しコードを作ってみました

int KEY[8]={KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_LCONTROL,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_LEFT};

i=0;

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )i|=(j << 0);

fputc(i,REPLAY_fp);



i=fgetc(fp);

for(j=0;j<8;j++)Key[ KEY[j] ]=i&(j << 0);


掲示板上でパッと作ったコードなのでちゃんと動くかはわかりませんが
かなり短くなった気がします。
でも保存するときの変数宣言と、その後のi=0;が無駄に見えますね。
何とか省略できないかな・・
あとビットを倒す場合はどうすればいいんでしょうか?


246ポイント を手に入れた。

Name: 匿名  ..上級者(17,268ポイント)   Date: 2009/04/25(土) 00:48   No:32678     
Title: Re:リプレイ保存の方法    
すみません間違えてました・・

int KEY[8]={KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_LCONTROL,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_LEFT};


i=0;

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )i|=(1 << j);

fputc(i,REPLAY_fp);


i=fgetc(REPLAY_fp);

for(j=0;j<8;j++)(i&(1 << j)) ? Key[ KEY[j] ]>=1 : Key[ KEY[j] ]>=0 ;


多分これであってると思います
やっぱり最初の変数宣言が長いですね
なんとか短くならないかな・・
次は・・何フレーム維持されたかを記録する機能と組み合わせてみよう・・かな
あと、ビットを倒すにはどうすればいいんでしょうか?

>>STGとかですと、ボスの出現前に
小康状態になって裏でロードをしそれが終わり次第ボス出現、となるようなケースです。

と書いてあったんですが、ロードしている間は関数から処理が出てきませんから
どのくらい時間がかかったかは関係ないような気がするんですが・・


265ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(343,855ポイント)   Date: 2009/04/25(土) 01:02   No:32681     
Title: Re:リプレイ保存の方法    

>多分これであってると思います

 うーん、fputcの引数はたしかに intですが、int型の数値をそのまま書き出せる
わけじゃないので、うまく動かないかと。

 fgetcも然り。



>(i&(1 << j)) ? Key[ KEY[j] ]>=1 : Key[ KEY[j] ]>=0

 変数 iが正しく押下情報を読み出せた正しい値と仮定して、
?の前のビットが立っているかどうかのチェックはいいのですが、
その後の処理が意味不明になっています。

 ビットが立っていれば、 Key[ KEY[j] ]が 1以上か比較し、
そうでなければ Key[ KEY[j] ]が 0以上であることを比較して
終了してしまっています・・・・・・。


237ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(343,884ポイント)   Date: 2009/04/25(土) 01:17   No:32683     
Title: Re:リプレイ保存の方法    

>と書いてあったんですが、ロードしている間は関数から処理が出てきませんから
>どのくらい時間がかかったかは関係ないような気がするんですが・・

 そういう完了復帰型(読み込み終わるまで処理が停止する)の読み込み方法もありますが、
即時復帰型(読み込みのリクエストを出したら処理がすぐに戻ってきて、
別途処理が終わったかどうか調べてから使う)タイプの読み込み方法もあります。

 この方法を使うとゲーム中であっても、大きなファイルを読み込んでも
処理を止めずに読むことができます。

 某ゲームで、ロード中に別のゲームが遊べるのもこの方法を使っているからです。

 ただ、その場合、読み込みがいつ(何フレームで)終わるかはある程度は予測できますが、
正確な時間は環境次第となりますので、押下情報だけではリプレイすることは
難しくなりますね。


29ポイント を手に入れた。

Name: 匿名  ..上級者(17,980ポイント)   Date: 2009/04/25(土) 01:42   No:32684     
Title: Re:リプレイ保存の方法    
すみません見落としていました
とりあえず結果だけ見るなら
こんな感じですかね。

#include "DxLib.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);SetOutApplicationLogValidFlag( FALSE );
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

FILE *REPLAY_fp;

int i,j;

int KEY[8]={KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_LCONTROL,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_LEFT};

Key[KEY_INPUT_Z]=1;
Key[KEY_INPUT_X]=0;
Key[KEY_INPUT_LSHIFT]=1;
Key[KEY_INPUT_LCONTROL]=0;
Key[KEY_INPUT_UP]=1;
Key[KEY_INPUT_RIGHT]=0;
Key[KEY_INPUT_DOWN]=1;
Key[KEY_INPUT_LEFT]=0;



DrawFormatString( 0 , 0 , GetColor(255,255,255) , "%d %d %d %d %d %d %d %d" , Key[KEY[0]] , Key[KEY[1]] , Key[KEY[2]] , Key[KEY[3]] , Key[KEY[4]] , Key[KEY[5]] , Key[KEY[6]] , Key[KEY[7]] );

REPLAY_fp = fopen("REPLAY.txt", "w");

i=0;

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )i|=(1 << j);

fputc(i,REPLAY_fp);

fclose(REPLAY_fp);



REPLAY_fp = fopen("REPLAY.txt", "r");

i=fgetc(REPLAY_fp);

for(j=0;j<8;j++)(i&(1 << j)) ? Key[ KEY[j] ]=1 : Key[ KEY[j] ]=0 ;

fclose(REPLAY_fp);

DrawFormatString( 0 , 16 , GetColor(255,255,255) , "%d %d %d %d %d %d %d %d" , Key[KEY[0]] , Key[KEY[1]] , Key[KEY[2]] , Key[KEY[3]] , Key[KEY[4]] , Key[KEY[5]] , Key[KEY[6]] , Key[KEY[7]] );



ScreenFlip();

WaitKey();

DxLib_End();
return 0;

}


あとDXライブラリに即時復帰型の関数はありますか?


658ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(344,534ポイント)   Date: 2009/04/25(土) 02:33   No:32687     
Title: Re:リプレイ保存の方法    

>fputcの引数はたしかに intですが、int型の数値をそのまま書き出せる
わけじゃないので、うまく動かないかと

 すみません、ちょっと見落としてました。
 値は 0xffを越えないので fputc/fgetcでも問題なさそうですね。



>あとDXライブラリに即時復帰型の関数はありますか?

 残念ながら、無いようです。
 でも強いて挙げるなら、自前で WinAPIを使ってスレッド(*)を立てて、
ファイルをメモリに読み込んでから、〜FromMem()系の関数を使ってライブラリに登録する
という手はあります。

* ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=WinAPI+%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89&num=50


2倍のポイントを手に入れた! 650ポイント を手に入れた。

Name: 匿名  ..上級者(18,028ポイント)   Date: 2009/04/25(土) 11:47   No:32691     
Title: Re:リプレイ保存の方法    
う〜ん、ちょっと今の実力じゃ無理そうですね・・

あと、ビットを倒すにはどうしたらいいでしょうか?


43ポイント を手に入れた。

Name: チルチル  ..ぴよぴよ(188ポイント)   Date: 2009/04/25(土) 15:03   No:32702     
Title: Re:リプレイ保存の方法    
匿名からチルチルに改名しました

実際にやってみたんですが
ステージ最初とボス出現時に処理が止まるんですよね・・

最終手段としてはSetCreateSoundDataType関数がありますが
あまり使いたくないですね。

龍神録でも同じ事をやっているみたいですが
何で処理が止まらないんだろう?


79ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,016,290ポイント)   Date: 2009/04/25(土) 17:08   No:32708     
Title: Re:リプレイ保存の方法    
あ、その関数ご存知だったんですね。
何故使いたくないのでしょう?


34ポイント を手に入れた。

Name: チルチル  ..ぴよぴよ(973ポイント)   Date: 2009/04/25(土) 19:55   No:32712     
Title: Re:リプレイ保存の方法    
SetCreateSoundDataType関数を使うと
ProcessMessage関数の呼び出し間隔を0.2秒以上空けた場合
再生中の音が途切れるって書いてあるんですよ

最近のPCなら普通にプレイしていれば0.2秒も空かないと思いますが
古いPCでプレイすることもあるかもしれませんし
私自身あまり弾幕シューティングがうまくないので
初心者の人のためにゲームの進行スピードをFPSの値が60,30,15,1ぐらいの単位で
変えられる機能を付けてみようかなと思っているんですが

これを実装した場合0.2秒以上空いてしまうので使えないんですよね。
まあ、この機能を付けると決めたわけではないし
Sleep関数を何回かにわけて間にProcessMessage関数を入れれば問題ないと思いますが
ちょっとうまくやる自信が無くて一歩が踏み出せないんです。

それにSetCreateSoundDataType関数を使っても少しは止まるかもしれないし
その少しがプレイヤーにもわかる長さだったら、あまり意味がなくなってしまうんですよね。


268ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(344,782ポイント)   Date: 2009/04/25(土) 20:54   No:32720     
Title: Re:リプレイ保存の方法    

>あと、ビットを倒すにはどうしたらいいでしょうか?

 倒したいビットの値を ~で反転し、&すれば倒れます。

ビット操作
ttp://www.hiramine.com/programming/c_cpp/bitoperation.html




>進行スピードをFPSの値が60,30,15,1ぐらいの単位で
>変えられる機能を付けてみようかな

 低スペックマシン向けなら話はわかりますが、初心者向けのそういう機能を用意するなら
フレームを落とすのではなくスローモーション・・・移動速度を落とした方がいいです。

 そうしないと、カクついているように見えるだけでなくユーザーの入力に対する
レスポンスも悪くなりゲームとしてかなり微妙なものになってしまいます。


248ポイント を手に入れた。

Name: チルチル  ..かけだし(1,696ポイント)   Date: 2009/04/25(土) 21:25   No:32723     
Title: Re:リプレイ保存の方法    
確かにスローモーションの方がレスポンスが高くなると思いますが
ちょっと難しい気がしますね・・
毎フレームのショットのスピードから背景のスクロールまで遅くするのは
かなり広範囲を変更しないといけませんし
あと、カウンタの増える速度も遅くしないといけませんし・・
何かフレームを落とす以外で一括して遅くする方法はありませんか?


170ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(344,091ポイント)   Date: 2009/04/25(土) 22:22   No:32725     
Title: Re:リプレイ保存の方法    

>何かフレームを落とす以外で一括して遅くする方法はありませんか?

 現状をどう作っているのかにもよりますが、広範囲の修正はどうしても必要になって
しまう気がします。

 一番オーソドックスなのは、各種カウンタを整数から浮動小数点に変更して、
メインシステムの方で毎フレームどれだけ(ゲーム内の仮想)時間が進んだのか
(1秒を 1.0か 60.0とするのが分かりやすいでしょうか)を計算して、
その値を各種カウンタに加算する、というものです。

 スローにしたい場合はシステムの方で進んだ時間を調整すれば、
ゲーム全体を早くしたり遅くしたりできます。

(敵システムの方でそれとは別にスピード係数を持たせて敵のカウンタに
メインシステムの時間×敵のスピード係数をした値を足せば、
メインのスピードに合わせつつ、敵だけさらに遅くしたり速くしたりすることもできます。)


 あるいは浮動小数点でなく整数のままでも、毎フレーム +1でなく +100を基本とし、
これをシステムで管理して、適宜 +50とか +20にしてもいいですね。


 1点問題があるとすれば、何かしらのイベントなどの管理で整数カウンタを ==で
比較していることがあると思いますが、この方法ではそれは使えなくなります
(値が一致せず、飛び越えてしまうことがある)のでそのあたりは修正が必要になります。



 マシンパワーに余裕があるなら、もう1つ簡単な手があります。
 通常ゲームを作るときは更新処理(Update)と描画処理(Draw)を分けていると思いますが、
それを利用して

Update();
Update();
Draw();

 としたとき、普通の状態で動くように調整すれば

Update();
Draw();

 とすれば、半分の速度で動かすことができます。


691ポイント を落としてしまった。

Name: チルチル  ..かけだし(1,923ポイント)   Date: 2009/04/25(土) 23:36   No:32732     
Title: Re:リプレイ保存の方法    
やはり広範囲の修正は必要みたいですね。
とりあえず今は初期に作った手抜き部分を修正中なので、
それが終わったらやってみようかな・・

ところで更新処理と描画処理って具体的にはどういうものでしょうか?

EnemyShot[i].x+=cos(EnemyShot[i].Angle)*EnemyShot[i].Speed;//X方向の移動
EnemyShot[i].y+=sin(EnemyShot[i].Angle)*EnemyShot[i].Speed;//Y方向の移動

とかが更新処理で

DrawRotaGraphF( EnemyShot[i].x , EnemyShot[i].y , 1.0 , PI/2+EnemyShot[i].Angle , EnemyShot[i].Graph , TRUE );//弾を描画

とかが描画処理でしょうか?

だとすると私はこれを同時にやってしまっているので
かなりまずいですね・・


227ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(344,134ポイント)   Date: 2009/04/26(日) 00:11   No:32734     
Title: Re:リプレイ保存の方法    

>とかが更新処理で
>とかが描画処理でしょうか?

 大まかに言えばそんなかんじです。
 更新処理で内部的な処理や描画に必要な情報を計算し、描画処理で実際の描画を行います。

 同時にやってしまっているとなると・・・・・・この方法は使えないですね。


43ポイント を手に入れた。

Name: チルチル  ..かけだし(2,339ポイント)   Date: 2009/04/26(日) 00:17   No:32735     
Title: Re:リプレイ保存の方法    
何か管理人さんのプログラムと合わないな〜
と思ってましたけど、原因の一つはこれみたいですね。
自分でも気づかないうちに通常から大きく外れていたようです・・


2倍のポイントを手に入れた! 122ポイント を手に入れた。

Name: チルチル  ..入門者(3,854ポイント)   Date: 2009/04/26(日) 14:03   No:32752     
Title: Re:リプレイ保存の方法    
今まで気づきませんでしたが私のコードはかなりまずいことになっていますね・・
更新処理と描画処理が複雑に絡み合っています。

登録〜計算〜描画の計算と描画を同じ関数でやってますからね・・

計算と描画の基本の形は全関数同じで

void EnemyShotMove(void){//敵弾の関数



for( i=0;i<MAX;i++ ){//ショットfor文

if( EnemyShot[i].flag>0 ){//フラグが立っていれば

if( EnemyShot[i].Graph!=-1 ){
DrawRotaGraphF( EnemyShot[i].x , EnemyShot[i].y , 1.0 , PI/2+EnemyShot[i].Angle , EnemyShot[i].Graph , TRUE );//弾を描画
}

EnemyShot[i].Graze=PlayerJudge( EnemyShot[i].x , EnemyShot[i].y , EnemyShot[i].Size , EnemyShot[i].Graze );

EnemyShot[i].x+=cos(EnemyShot[i].Angle)*EnemyShot[i].Speed;//X方向の移動
EnemyShot[i].y+=sin(EnemyShot[i].Angle)*EnemyShot[i].Speed;//Y方向の移動

if( EnemyShot[i].x<0 || EnemyShot[i].x>447 || EnemyShot[i].y<0 || EnemyShot[i].y>479 )EnemyShot[i].flag=0;//画面外に出たらフラグを倒す

switch(EnemyShot[i].Pattern){//ショットのスイッチ文



case 0:



break;



}//ショットのスイッチ文

++EnemyShot[i].Count;//カウントを進める

}//フラグが立っていれば

}//ショットfor文



}//敵弾の関数


こんな感じです、
改めて見てみると本当に応用ができない処理になっています。
でも描画は一行ですからそれ以外をfor文で囲ってやればできない事もないですね、
弾のパターンの中で描画する場合は最初の一回だけ描画するようにしておけば行けそうだし・・

ところで押されているボタンの組み合わせが何フレーム維持されたかを記録する処理を作ろうとしたんですが
うまくいきません、誰かサンプルを作っていただけないでしょうか?


786ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(344,657ポイント)   Date: 2009/04/27(月) 02:25   No:32770     
Title: Re:リプレイ保存の方法    

>登録〜計算〜描画の計算と描画を同じ関数でやってますからね・

 分けた方が何かと便利なことがある、というだけで
同じ関数でやってしまっても悪いというわけではないんですけどね。



>サンプルを作っていただけないでしょうか

 まぁそんな簡単に諦めないで、もう少し自力で頑張ってみてください。

 どうしてもうまくいかなければ、どううまくいかなかったのかを説明した方がいいかと。
 状況を整理できますし、書いているうちに気づかなかった解決方法を思いつくかもしれませんよ。


240ポイント を手に入れた。

Name: めいらる  ..入門者(2,731ポイント)   Date: 2009/04/27(月) 06:29   No:32772     
Title: Re:リプレイ保存の方法    
横から失礼しますっ
自分もいつかリプレイを実装しなくてはならないので参考にと覗いてみたのですがなんだかものすごくレベルの高い話が…(^ω^;)

私は毎フレームのキー入力情報を保存する変数配列を用意してコースの進行度カウンターと照らし合わせて記憶、再生を行う仕組みを考えているのですがどうでしょうか?
保存はコースクリア時などにまとめて行うつもりです。
大雑把な流れとしては


通常プレイ時------------------------------

・キー入力を保存する変数を富豪のごとくキーの数だけ用意
(たとえば bool A[10][10000] のように)
           ↑ ↑コースの何フレーム目か
           何ステージ目なのか
ゲームループ{
・キー入力情報を取得し、入力情報変数に入れる
・入力情報をコースカウンターを添字にしたキー変数配列に保存( A[stage][counter]=1 )ボタンAが押されているなら1
・入力情報に従い自機移動処理
・その他弾とか敵とか移動処理
・描画処理
・counter++
}
(コースクリア時とかに変数配列をファイル出力)


リプレイ再生時---------------------------

・コース開始前にそのコースの変数配列にファイルの情報を読み込む

ゲームループ{
・入力情報変数にそのフレームでのキー配列変数の情報をねじこむ
 ( A = A[stage][counter] )
・入力情報に従い自機移動処理
・その他弾とか敵とか移動処理
・描画処理
・counter++
}

…となります。わかりにくくてすみません;





649ポイント を手に入れた。

Name: SooA [URL]  ..上級者(19,557ポイント)   Date: 2009/04/27(月) 07:56   No:32774     
Title: Re:リプレイ保存の方法    
>・入力情報をコースカウンターを添字にしたキー変数配列に保存( A[stage][counter]=1 )ボタンAが押されているなら1
それだとそのフレームに対して一つのキーしか記録されないので
同時押し状態が保存できません。


>・キー入力を保存する変数を富豪のごとくキーの数だけ用意
流石に全ステージのデータを確保するのもアレなので、
入力回数でステージごとに記録・読み込みすれば良いかな。


例えば以下のような感じでデータを記録して、

AutoKeyData[0] = ステージ1の入力回数
AutoKeyData[1] = ステージ2の入力回数
 :
 :

AutoKeyBuff[0].flame = 30 // 入力に変化があったフレーム
AutoKeyBuff[0].key = ビット変換した入力情報
AutoKeyBuff[1].flame = 60 // 入力に変化があったフレーム
AutoKeyBuff[1].key = ビット変換した入力情報
 :
 :

・再生時
入力回数からデータサイズを求めてステージごとに読み込む。

・キー復元
復元用のテーブル(AutoKey[])を用意して、
フレームが一致したら AutoKey[] に
AutoKeyBuff[?][1] から入力状態を復元、
次にフレームが一致するまで AutoKey[] の情報で
キーバッファを書き換える。


460ポイント を手に入れた。

Name: めいらる  ..入門者(3,306ポイント)   Date: 2009/04/27(月) 09:01   No:32777     
Title: Re:リプレイ保存の方法    
SooAさん>
返信ありがとうございます

>同時押し状態が保存できません。
キーの数だけ配列を用意するので(上下左右ABCDの8個の予定)そのあたりの対応は大丈夫です。例としてAのみ書いた形になりましたが説明不足でした。申し訳ありません…

>復元用のテーブル(AutoKey[])を用意して…
…とあるのですが今現在の実装でキーコンフィグの都合上通常時の入力情報も一旦テーブルに置き、それを元に操作しているので再生時にもそのテーブル変数がほとんどそのまま使えると思います。(テーブル=一時的にデータを置いておくスペース という解釈でよろしいでしょうか?)

やはりbool型変数でもゲームとして致命的なレベルのメモリを占有するのでしょうか?今後可能であればコース切り替えはシームレスにする可能性もあるのでまとめて読んで置いておかないとコース切り替え時に止まるかな?と思ったのです。

あと自分はまだビット演算(?)についてほとんど勉強していないのですが推測するに1バイトのサイズの変数で8ボタンの押下情報は記録できますか?それだとしたら記録用の配列がコースにつき一つずつで済みそうなので…
ビットに、「上下左右ABCD」とボタンを割り当てて、そのうち下とBとCが押されている場合、「01000110」と記録するといった感じに…です。

せっかく書いて頂いた例を理解できていないみたいで申し訳ないです


575ポイント を手に入れた。

Name: SooA [URL]  ..上級者(19,777ポイント)   Date: 2009/04/27(月) 10:31   No:32779     
Title: Re:リプレイ保存の方法    
> >復元用のテーブル(AutoKey[])を用意して…
> …とあるのですが今現在の実装でキーコンフィグの都合上通常時の入力情報も一旦テーブルに置き、それを元に操作しているので再生時にもそのテーブル変数がほとんどそのまま使えると思います。(テーブル=一時的にデータを置いておくスペース という解釈でよろしいでしょうか?)

例えば○○フレーム目で入力に変化があり、
AutoKeyBuff[].key から情報を復元したとします、
次のフレームに進んみ、入力に変化が無い場合は
前回フレームと同じデータを使います、
そのためのテーブルですので、
既に用意しているテーブルが
リプレイデータ以外で書き換わらないのであれば
そのまま使えると思います。


> やはりbool型変数でもゲームとして致命的なレベルのメモリを占有するのでしょうか?
致命的とまでは言いませんが、
1ステージだけでもフレーム数分+アルファの確保が必要になり
結構な容量が必要になると思いますよ、消費を抑えられる部分であれば
それに越したことは無いかなと思いました。


> まとめて読んで置いておかないとコース切り替え時に止まるかな?と思ったのです。
プレイ中のラグは問題ありですが、
ステージ切り替え時なら他にも読み込むデータがあるだろうし
許容範囲かなと思います。


> あと自分はまだビット演算(?)についてほとんど勉強していないのですが推測するに1バイトのサイズの変数で8ボタンの押下情報は記録できますか?それだとしたら記録用の配列がコースにつき一つずつで済みそうなので…
> ビットに、「上下左右ABCD」とボタンを割り当てて、そのうち下とBとCが押されている場合、「01000110」と記録するといった感じに…です。

そうです。

1 byteは2進数で表すと 00000000(0)〜11111111(255)のとなります。

詳しくはWeb検索等で調べてもらうとして、
チルチルさん(旧 匿名さん)のソースを
参考にデータを表示するだけのサンプルを
作ってみると良いかと思います。


2倍のポイントを手に入れた! 220ポイント を手に入れた。

Name: めいらる  ..入門者(3,306ポイント)   Date: 2009/04/27(月) 17:57   No:32788     
Title: Re:リプレイ保存の方法    
なるほどなるほど…
参考になります(^ω^)

ビットが0か1かで判断する方法はビットフラグ?とか言う名称でしたっけ…DXライブラリリファレンスで見かけていたので…

とりあえずググってこようと思います!質問に答えていただきありがとうございます&長々と横入り失礼しました〜


Name: チルチル  ..中級者(10,915ポイント)   Date: 2009/04/27(月) 20:12   No:32792     
Title: Re:リプレイ保存の方法    
なんか私が学校に行っていた間に話が終ってしまったようですね・・
話に加われなくてすいません。

めいらるさんまだ見てますか?

int KEY[8]={KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_LCONTROL,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_LEFT};

の宣言により配列でキーを指定できるようにして、

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )i|=(1 << j);

でビットに保存し

for(j=0;j<8;j++)(i&(1 << j)) ? Key[ KEY[j] ]=1 : Key[ KEY[j] ]=0 ;

でビットから変数に読み込んでいます。

今もう一度、押されているボタンの組み合わせが何フレーム維持されたかを記録する処理を作ろうとしています。

よくわからない所は「1フレーム目はどうするか」です。

ところでリプレイの保存ですが、ファイルの新規作成はできますけど
ファイルの削除は多分できませんよね、
だからプレイしている時は画像とか音楽とかを入れているフォルダの中に
ファイルを作って一時的に保存して
「リプレイを保存する」が選択された時に一時ファイルから読み込んで
リプレイフォルダの中にファイルを作成して保存しているんですが
この方法は一般的でしょうか?


422ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(345,863ポイント)   Date: 2009/04/27(月) 22:09   No:32796     
Title: Re:リプレイ保存の方法    

>よくわからない所は「1フレーム目はどうするか」です。

 強制的にカウンタ0で書き込めばいいのではないでしょうか。

 擬似的に処理を書くと

    // 追加フラグ(とりあえず最初は falseで)
    bool add = false;
    
    if(リプレイバッファが空ではない)
    {
        if(リプレイバッファの最後に記録されたデータのキーの値と現フレームで押されたキーの値が異なる
        || リプレイバッファの最後に記録されたデータのカウンタが最大に達している)
        {
            // 追加するフラグを立てる
            add = true;
        }
        else
        {
            リプレイバッファの最後に記録されたデータのカウンタを +1する
        }
    }
    else
    {
        // 要素を追加するフラグを立てる
        add = true;
    }
    
    if(add)
    {
        リプレイバッファにカウンタ0で現在押された値を追加する
    }

こんな感じでしょうか。



>ファイルの新規作成はできますけどファイルの削除は多分できませんよね、

 WinAPIを使えば問題なく可能です。




>だからプレイしている時は画像とか音楽とかを入れているフォルダの中に ファイルを作って
>〜略〜
>リプレイフォルダの中にファイルを作成して保存しているんですが
>この方法は一般的でしょうか?

 普通にリプレイフォルダに適当な名前 "temp.rec"とかで保存しておいて、
「リプレイを保存」されたらリネームすればいいんじゃないでしょうか?

 まぁ、そもそも「リプレイを保存」される前ならファイルに保存しないで
メモリにずっと持っておけばいい、と思いますが(上の擬似的な処理もそれを想定して書いています)。


958ポイント を手に入れた。

Name: チルチル  ..中級者(11,127ポイント)   Date: 2009/04/27(月) 22:37   No:32799     
Title: Re:リプレイ保存の方法    
WinAPIは今の実力ではちょっとむりですね。

メモリにずっと持っておくのはメモリの動的な確保になれていないから
難しいですが、よく考えたらステージのカウントとボスの自爆までの時間を足せば
だいたい何個ぐらい配列が必要かはわかりますね・・

まあ、そんなに気にならないのでとりあえずリプレイを頑張ってみます。


121ポイント を手に入れた。

Name: BEMANI  ..プログラマー(26,975ポイント)   Date: 2009/04/28(火) 17:06   No:32810     
Title: Re:リプレイ保存の方法    
>>チルチルさん
プログラムからのファイル削除でしょうか。
stdio.h に remove(ファイル名)という関数があったような気がします。
WinAPI は DeleteFileがあったと思います。
そんなに難しくないので調べてみればいいと思います。


46ポイント を手に入れた。

Name: さが  ..かけだし(1,126ポイント)   Date: 2009/04/28(火) 23:14   No:32832     
Title: Re:リプレイ保存の方法    
横からすみません。自分も考えてみたので致命的な部分があったら教えてもらいたいです。
一部のpad_tなどは龍神録のものをちょっといじったものです。
memcpy memset は動作をよく分かってないので適当です。

typedef struct{
int time;
bool input[PAD_MAX]//入力の最大個数の配列
}data;
typedef struct{
bool key[PAD_MAX];//パッドのボタンが押されたらtrue、押されなかったらfalse
//一部略
}pad_t;
data buf; //前回のデータ
data temp[10000];//キーの保存
pad_t pad; //pad.keyにプレイ中のキー情報が保存されている
int count; //tempにアクセスするための変数
int num; //待機用カウント変数

//ゲームスタート前に実行
void replay_ini(){
count = 0;
memset(&buf,0,sizeof(data));
memset(&temp,0,sizeof(data)*10000);
}
//pad更新後実行
void replay_stock(bool *p){
buf.time++;
for(int i=0;i<PAD_MAX;i++)
if(buf.input[i] != *(p+i)){ //前回記憶した入力と異なっているか
memcpy(temp[count], buf, sizeof(data)); //tempに保存
memcpy(buf.input,p, sizeof(bool)*PAD_MAX); //現在の入力の状態を保存
count++;
buf.time = 0;
return;
}
}
//ゲーム終了後実行
void replay_save(){
char *name = "replay.dat";
FILE *fp;
if((fp = fopen(name,"w")) == NULL)
printfDx("replay書き込みエラー\n");
else{
fwrite(&count,sizeof(int),1,fp)
fwrite(&temp,sizeof(data),count,fp);
fclose(fp);
}
}
//リプレイ再生のための初期化
void replay_ini2(){
num = 0;
char *name = "DAT/keycon.dat";
FILE *fp;
if((fp = fopen(name,"r")) == NULL)
printfDx("keycon読み込みエラー\n");
else{
fread(&count,sizeof(int),1,fp)
fread(&temp,sizeof(data),count,fp);
fclose(fp);
}
}
//リプレイ再生するためpad.keyのアドレスをpで受け取り、保存した値を代入
//プレイ時のキー入力取得の直後がいいかと
void replaydata_key(bool *p){
num++
if(temp[count].time == num){ //count番目とcount-1番目の入力時間差timeまで待機
memcpy(p, temp[count].input, sizeof(bool)*PAD_MAX);
num = 0;
count++;
}
}

replay_save()の中身は実際自分が使っているものを引っ張って来ましたが、fopen などで警告がでます。
問題なく動いていますが、警告を消すやり方はあるのでしょうか。
メモリ操作、ポインタの部分は自信ありません。


805ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(346,486ポイント)   Date: 2009/04/29(水) 00:23   No:32834     
Title: Re:リプレイ保存の方法    
さがさん
>自分も考えてみたので致命的な部分があったら教えてもらいたいです。

 実行してみたわけじゃないので憶測になりますが、

1 記録時に最後まで記録されない??
 replay_stockでパッドデータをメモリに記録しているようですが、
前回記憶した入力と異なっていた場合、その前回の入力情報を記録していっていますので、
記録をとる最後のフレーム直前でAボタンが押され、そのまま記録終了となった場合
そのAボタンを押した情報が記録されないような感じがします。

2 再生時のカウンタ
 replay_ini2では tempにリプレイデータが、count変数にそのデータ数が入ります。
 となると、replaydata_key()での temp[count]はリプレイデータの外を指していませんか?



>警告を消すやり方はあるのでしょうか

 あるかないか、で言えばあります。
 大抵の場合、コンパイラの納得のできる形で消す方法と、強制的に消してしまう方法と
ありますが、どちらにしても環境やエラーメッセージの内容がわからないと具体的にはわかりません。


458ポイント を手に入れた。

Name: さが  ..かけだし(1,625ポイント)   Date: 2009/04/29(水) 10:32   No:32840     
Title: Re:リプレイ保存の方法    
Justyさん返信ありがとうございます。

>1 記録時に最後まで記録されない??
そうですね、全くもってその通りです。
ゲーム終了時にキー状態を記憶する関数を呼び出す必要がありますね。

>2 再生時のカウンタ
こちらも死んでますね。読み込み後初期化忘れてます。

void replay_ini2(){
num = 0;
count = 0;
char *name = "replay.dat";
FILE *fp;
if((fp = fopen(name,"r")) == NULL)
printfDx("replay読み込みエラー\n");
else{
int n;
fread(&n,sizeof(int),1,fp)
fread(&temp,sizeof(data),n,fp);
fclose(fp);
}
}

警告は
warning C4996: 'sprintf': This function or variable may be unsafe.
Consider using sprintf_s instead. To disable deprecation,
use _CRT_SECURE_NO_WARNINGS. See online help for details.

これと

ローカルで定義されたシンボル _sprintf がフィクション "void __cdecl graph_main(void)"
(?graph_main@@YAXXZ) にインポートされました。

こんなのが fopen なども同様に出ます。


499ポイント を手に入れた。

Name: SooA [URL]  ..上級者(19,915ポイント)   Date: 2009/04/29(水) 12:19   No:32849     
Title: Re:リプレイ保存の方法    
さがさん話をぶったぎって申し訳ありません。

> めいらるさん
シンプルなリプレイサンプルを作りましたので、
良かったら参考にしてみてください。

開発環境
Windows XP
VC++2008(BCCでもたぶん動くと思います)

プログラムは四角い豆腐キャラを動かすだけのものです。
実行すると記録するか再生するかの入力待ちになります。
記録を選択すると500フレームまでのカーソルキーの
監視&記録が始まります。

※記録と再生を選択できるように修正を加えました。


138ポイント を手に入れた。

Name: さが  ..かけだし(1,822ポイント)   Date: 2009/04/29(水) 19:30   No:32869     
Title: Re:リプレイ保存の方法    
>SooAさん
途中で入ってきたのは自分の方なので、気になさらないでください。

最初は気になった程度だったのに気が付いたらリプレイを実装していました。
SooAさん、Justyさんのレスを参考に作ってみました。


pad_t は龍神録のものを使ってます。ただ、持つ値は0or1です。
boolだとキャストする時に怒られるので。しかし容量的に考えたらboolにした方がいいですね。
PAD_MAX は 16 に設定してます。

問題点はどれだけ押されたか(長さ)が出てこないことですね。
自分の作っているものには絡んでこないので大丈夫ですけど。


197ポイント を手に入れた。

Name: チルチル  ..中級者(11,378ポイント)   Date: 2009/04/29(水) 20:31   No:32871     
Title: Re:リプレイ保存の方法    
さがさん、キーがどれだけ押されたかを調べる処理を作る場合は
GetHitKeyStateAll_2関数みたいにリプレイデータが1ならインクリメントするようにしてみてはどうですか?


68ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(346,487ポイント)   Date: 2009/04/29(水) 23:15   No:32878     
Title: Re:リプレイ保存の方法    
さがさん
>warning C4996

 警告文の中にヒントが書いてると思いますが、この掲示板の過去ログとか
"C4996"で検索しても対処方法が出てきますので、
そちらを参考にしてください。

 強制的に消してしまいたい場合は
 
気まぐれソフトハウス » warning C4996
ttp://wind-master.dip.jp/soft-info/item/61

のようにすると消せます。



>シンボル _sprintf がフィクション

 多分コンパイラオプションがおかしいのだとは思いますが。
 リビルドしても直らなければ、コンパイラオプションを見直してください。

リンカ ツールの警告 LNK4217 (C++)
ttp://msdn.microsoft.com/ja-jp/library/aa3se25k(VS.80).aspx


1ポイント を手に入れた。

Name: めいらる  ..入門者(3,687ポイント)   Date: 2009/04/30(木) 06:53   No:32888     
Title: Re:リプレイ保存の方法    
SooAさん>

わざわざサンプルを作っていただいてありがとうございます!
実はまだファイル入出力関係はあまり勉強していなくてよくわからず…
いつかリプレイを実際に実装する時に参考にさせていただきます!


2倍のポイントを手に入れた! 182ポイント を手に入れた。

Name: チルチル  ..中級者(11,604ポイント)   Date: 2009/04/30(木) 19:48   No:32916     
Title: Re:リプレイ保存の方法    
ちょっと学校のレポートを書いていてプログラムができません、
すいませんちょっと待って下さい・・
あと、さがさん&めいらるさん、よかったら話を持たせて下さい・・


65ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(347,568ポイント)   Date: 2009/04/30(木) 21:39   No:32922     
Title: Re:リプレイ保存の方法    
 じゃぁまぁ折角なので、No22407の方法でサンプルを書いてみました。

Uploader
ttp://toku.xdisc.net/tuyu.html
小物(1) 1Mの
nm14140.zip

解凍 pass : u1R51JvcQCTz


 readmeの中にビルド方法と操作方法が書いてあります。
 ソースはちょっと数がありますが、中心になっているのは work.cppで、
記録と再生のコア部分は key_recorder.cppとなります。

 5000フレームくらいガチャガチャとキーを押して保存してみましたが、
2KBもありませんでした。

 結構小さいものですね。


173ポイント を手に入れた。

Name: さが  ..かけだし(1,976ポイント)   Date: 2009/05/01(金) 01:02   No:32928     
Title: Re:リプレイ保存の方法    
返信遅くなりました。

Justyさん指摘ありがとうございます。
最初の方は警告は出なくなりましたが、2番目の方は別のエラーが出てしまうので
手が空いてる時にやろうと思います。


前あげた自分のリプレイモジュールは、2P用に拡張して1Pが1000と2Pが100入力で8KBでした。
まだまだ未熟ですね。


79ポイント を手に入れた。

Name: チルチル  ..中級者(11,653ポイント)   Date: 2009/05/04(月) 21:42   No:33057     
Title: Re:リプレイ保存の方法    
remove関数の使い方は理解しましたが
よく考えたら、データフォルダからリプレイフォルダに
保存しなおす時にステージ情報とかを先頭に加えているので
あまり意味が無かったですね・・


49ポイント を手に入れた。

Name: チルチル  ..中級者(12,034ポイント)   Date: 2009/05/05(火) 12:45   No:33072     
Title: Re:リプレイ保存の方法    
コードを作ってみたのですがうまく動きません、どこか間違っているでしょうか?

unsigned char InputKey,InputCount;//キー入力データ

long i,j,Count;//カウンタ

InputKey=0;//初期化

InputCount=0;//初期化



//ループの中



int KEY[8]={KEY_INPUT_Z,KEY_INPUT_X,KEY_INPUT_LSHIFT,KEY_INPUT_LCONTROL,KEY_INPUT_UP,KEY_INPUT_RIGHT,KEY_INPUT_DOWN,KEY_INPUT_LEFT};



if( Mode!=4 ){//リプレイ再生中でなければリプレイを一時保存

i=0;

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )i|=(1 << j);

if( Count==0 ){

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )InputKey|=(1 << j);

fputc(InputKey,REPLAY_fp);

}

else if( InputKey!=i || InputCount==255 ){

fputc(InputCount,REPLAY_fp);

InputKey=0;

InputCount=0;

for(j=0;j<8;j++)if( Key[ KEY[j] ]>0 )InputKey|=(1 << j);

fputc(InputKey,REPLAY_fp);

}

++InputCount;

}

else{//リプレイ再生中ならリプレイを再生

if( InputCount==0 ){

InputKey=fgetc(REPLAY_fp);

InputCount=fgetc(REPLAY_fp);

}

for(j=0;j<8;j++)(InputKey&(1 << j)) ? Key[ KEY[j] ]=1 : Key[ KEY[j] ]=0 ;

--InputCount;

}




381ポイント を手に入れた。

Name: SooA [URL]  ..上級者(20,061ポイント)   Date: 2009/05/05(火) 14:11   No:33073     
Title: Re:リプレイ保存の方法    
最初の Count=0 の処理でデータを一つ分しか書き込んでいないのに対して
読み込み時は二つ分ずつ読み込んでいます。
更新時の処理ですが InputKey に i と同じ値を入れてるので
InputKey = i ; で良いかと。


98ポイント を手に入れた。

Name: SooA [URL]  ..上級者(20,023ポイント)   Date: 2009/05/05(火) 14:14   No:33074     
Title: Re:リプレイ保存の方法    
Count = 0 時に InputCountが記録されていないという意味です。
一つ分とか訳のわからない書き方してしまったので追記しておきます。@@;


38ポイント を落としてしまった。

Name: SooA [URL]  ..上級者(20,135ポイント)   Date: 2009/05/05(火) 14:30   No:33075     
Title: Re:リプレイ保存の方法    
申し訳ないです、よく見ていませんでした。
データを交互に書き込んでるんですね。
しかし最終的に最初の InputCount分
足りなくなるので対処は必要だと思います。

全体的な処理としてはじっくり見てみたいと思います。


112ポイント を手に入れた。

Name: チルチル  ..中級者(12,084ポイント)   Date: 2009/05/05(火) 16:20   No:33077     
Title: Re:リプレイ保存の方法    
とりあえずファイルの最後に達していたらリプレイを終了するようにしないといけませんね、
しかし、どこが間違っているのだろうか・・


50ポイント を手に入れた。

Name: チルチル  ..中級者(12,323ポイント)   Date: 2009/05/05(火) 18:47   No:33082     
Title: Re:リプレイ保存の方法    
ちょっと実行してみたんですが、作成されたリプレイファイルが途中で改行されているんですよね・・
多分うまく動かない原因はこれですね、前の方法では最後まで行ってから改行されていましたから、
何で改行されてるんだろう?
数値が改行記号に対応して・・ないですよね。

今さらですけど計算部と描画部を分けた方が良かったですね・・
当たり判定の目安を描画する時とかが・・


115ポイント を手に入れた。

Name: SooA [URL]  ..上級者(20,207ポイント)   Date: 2009/05/05(火) 20:49   No:33090     
Title: Re:リプレイ保存の方法    
> 数値が改行記号に対応して・・ないですよね。
改行コードは 0x0d(13) 0x0a(10) ですので
この数値が並べばテキストエディタで開いた場合
改行として認識されます。

InputKey、InputCount共にその数値が出る可能性があるため
改行される可能性は十分あります。


72ポイント を手に入れた。

Name: チルチル  ..中級者(12,518ポイント)   Date: 2009/05/05(火) 21:22   No:33095     
Title: Re:リプレイ保存の方法    
やっぱり改行になりますか・・
あれ〜前は改行が発生しなかったんだけどな〜
しかし改行をfputc/fgetcはどう認識するんでしょうか?
改行してたらストリームも改行してくれれば問題は無いんですが・・
いや、プログラムで開いた場合は改行コードの後も普通に数値が並んでるのかな?


125ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(84,197ポイント)   Date: 2009/05/05(火) 23:48   No:33111     
Title: Re:リプレイ保存の方法    
横から失礼します^^;

っといってもJustyさんへのコメントなんですが。。

RecordKeyをこそっとDLし、大方解析させていただきました^^;
ありがとうございました。
経験されている方のコードは本当に参考になります。。
RecordKeyぐらいの規模かつC++で組まれている
(ちょっとした)ソフトのコードをどんどん見ていきたいですね。。
ただ、ネットで探すと(探し方が甘いかも知れないですけど)規模の大きさが両極端なんですよね。
デザインパターンが使ってあるっと絞るとさらに狭く・・・。
コード見せてください!なんてスレ立てる勇気もないですが^^;


トピ主さんの質問には関係のないレスで申し訳ないです。。
失礼しました。


214ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(350,544ポイント)   Date: 2009/05/06(水) 03:08   No:33118     
Title: Re:リプレイ保存の方法    

>本当に参考になります

 いえいえ、あんなんで良ければ。
 
 細かいところ見ていくと結構粗というか「?」な部分が見つかったりしますが、
そのあたりはサンプルということで……。



>ネットで探すと規模の大きさが両極端なんですよね

 たしかにそういう傾向はあるかもしれませんね。

 でも少し大きめの規模のものは全体を把握するのは大変ですし時間もかかりますが、
あえて全体を見ず細かいところから見てってもいいわけですし、
規模が大きいなりの工夫(ソースの書き方だけでなく、フォルダ・プロジェクトの構成とか)があり、
大抵複数人で書いているのでそれぞれの書き方の違いを見ていったり、と読み解いていくと
得られるものも多いので、それなりに面白いですよ。


333ポイント を手に入れた。

Name: チルチル  ..中級者(12,604ポイント)   Date: 2009/05/06(水) 12:21   No:33141     
Title: Re:リプレイ保存の方法    
う〜ん、改行しないようにリプレイを保存して再生してみたら、
見た感じ正常に再生されました。
やっぱりfputc/fgetcは改行を認識していないのかな?


42ポイント を手に入れた。

Name: チルチル  ..中級者(11,836ポイント)   Date: 2009/05/07(木) 08:22   No:33180     
Title: Re:リプレイ保存の方法    
と言うよりプログラムは改行を認識しているんでしょうか?
一応改行された時の処理とかはあった気がしますが・・


2倍のポイントを手に入れた! 64ポイント を手に入れた。

Name: チルチル  ..中級者(11,858ポイント)   Date: 2009/05/08(金) 20:38   No:33222     
Title: Re:リプレイ保存の方法    
う〜んわからないですね改行・・

7ポイント を手に入れた。

Name: さが  ..入門者(3,418ポイント)   Date: 2009/05/08(金) 22:57   No:33223     
Title: Re:リプレイ保存の方法    
バイナリで保存してはどうですか?
自分はバイナリモードで開かなかったのでバグが出ましたけど、そこに気をつければ大丈夫なはずです。

添付は前あげたものにvectorに改良したものです。2Pのものを1P用にしたので変換ミスがあるかも。
pad_tの指定がありますが、
ReplayRecInit と ReplayLoad 、
ReplayRec と ReplayInput をそれぞれ同じ位置にすれば動作するはずです。

vectorを使うには
vectorをincludeする必要があります。


参考程度にどうぞ


2倍のポイントを手に入れた! 378ポイント を手に入れた。

Name: チルチル  ..中級者(11,896ポイント)   Date: 2009/05/09(土) 01:38   No:33228     
Title: Re:リプレイ保存の方法    
あ〜そう言えばバイナリがありましたね・・

2倍のポイントを手に入れた! 38ポイント を手に入れた。

Name: チルチル  ..中級者(12,055ポイント)   Date: 2009/05/09(土) 16:43   No:33241     
Title: Re:リプレイ保存の方法    
検証してみたのですが、どうも改行は関係ないようですね、
改行のあるテキストファイルも、問題なく読み込んで表示できましたし・・

そもそも上のコードで言うと
13と10はZ,X,LCONTROLとX,LCONTROLの組み合わせになるんですが
リプレイのテストをする時はボムを使わないようにしているので
改行してるのは多分カウントみたいですね・・

むしろ読み込む時に何か間違って読み込んでいるように見えますね・・

怪しいのは(InputKey&(1 << j))の戻り値ですね、
普通戻り値は1か0ですが上の式は戻り値がビットシフトのようです、
for(j=0;j<8;j++)(InputKey&(1 << j)) ? Key[ KEY[j] ]=1 : Key[ KEY[j] ]=0 ;
が正確に実行されているのか心配ですが、式の場合は0以外は1と認識されるから
多分大丈夫だと思うのですが・・


159ポイント を手に入れた。

Name: チルチル  ..中級者(12,064ポイント)   Date: 2009/05/09(土) 23:53   No:33264     
Title: Re:リプレイ保存の方法    
よく考えたら今でも上の式は使っているから大丈夫かも・・

9ポイント を手に入れた。

Name: SooA [URL]  ..上級者(20,525ポイント)   Date: 2009/05/10(日) 22:30   No:33284     
Title: Re:リプレイ保存の方法    
先日から頭痛に悩まされていたのですがやっと完治。
3錠飲むべき薬を1錠で済ませ、しかも一日一回しか
服用しなかったのが敗因?なのか長引いて
こちらの返信遅くなりました><;

問題の方は解決しましたでしょうか?
貼られているソースは部分的なものだと思うのですが、
リプレイ選択時 InputCount を 0 で初期化していますか?
Count = 0 の時の処理で(メインで回してるフレーム数ですよね?)
正しく一回目が読み込まれていない可能性はないでしょうか?


2倍のポイントを手に入れた! 318ポイント を手に入れた。

Name: チルチル  ..中級者(12,169ポイント)   Date: 2009/05/11(月) 20:56   No:33319     
Title: Re:リプレイ保存の方法    
InputCountはループに入る前に初期化しているので大丈夫だと思います、
一回目は多分正しく読み込まれているみたいです、
最初の方は正確に再生されるんですが、3秒経過したあたりで
InputKeyとInputCountの中身がおかしくなります、
そしてデータに改行が無いと結構うまくいったりします・・


105ポイント を手に入れた。

Name: チルチル  ..中級者(12,258ポイント)   Date: 2009/05/15(金) 01:03   No:33462     
Title: Re:リプレイ保存の方法    
そういえば他の関数はストリームの位置が変更されるのだろうか?

27ポイント を手に入れた。

Name: チルチル  ..中級者(12,339ポイント)   Date: 2009/05/16(土) 15:44   No:33526     
Title: Re:リプレイ保存の方法    
そういえばストリームを変更する関数もうまくいかないな・・

28ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +