C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   経過日時を計算する方 ....   
     ・[57460] シエル 
     ・[57461] DecentLove 
     ・[57462] シエル 
     ・[57464] DecentLove 
     ・[57466] シエル 
     ・[57467] MNS 
     ・[57509] DecentLove 
   "再定義されています" ....   
     ・[57486] fatens 
     ・[57488] X 
     ・[57489] シエル 
     ・[57490] X 
   戦略SLGの占領国の表示 ....   
     ・[57476] Justy 
     ・[57479] jay 
     ・[57480] ビッグバンベーダー 
    【36章】龍神録プログ ....   
     ・[57475] Dixq (管理人) 
     ・[57477] fatens 
     ・[57478] ぽこ 
   STG出来ました   
     ・[57431] Dixq (管理人) 
     ・[57433] ぽこ 
     ・[57434] jay 
     ・[57436] Justy 
     ・[57437] ゆうめ 
     ・[57439] シエル 
     ・[57441] Dixq (管理人) 
     ・[57446] jay 
     ・[57452] ひよこ 
     ・[57457] 白い時空 
     ・[57458] ideyan 
     ・[57473] jay 
   10:敵を表示させてみ ....   
     ・[57465] シエル 
     ・[57468] IDO 
     ・[57469] シエル 
     ・[57471] IDO 
     ・[57472] Dixq (管理人) 
   DXライブラリをコマン ....   
     ・[57450] Justy 
     ・[57451] ネス 
     ・[57453] Justy 
     ・[57454] ネス 
     ・[57456] ネス 
   openGLで   
     ・[57417] たかぎ 
     ・[57455] Sin 
   VisualStudioのサポー ....   
     ・[57413] Justy 
     ・[57440] ねこ 
   Subversionについて   
     ・[57422] 御津凪 
     ・[57435] ゆうめ 
   【要望】龍神録プログ ....   
     ・[57428] Dixq (管理人) 
     ・[57429] ぽこ 
     ・[57432] Dixq (管理人) 
   抽象クラス   
     ・[57419] ぽこ 
     ・[57420] たかぎ 
     ・[57423] シエル 
     ・[57424] ぽこ 
     ・[57425] シエル 
     ・[57426] たかぎ 
     ・[57427] Dixq (管理人) 
   クォータービューの移 ....   
     ・[56964] TKOZ 
     ・[57032] ookami 
     ・[57094] ぽこ 
     ・[57150] TKOZ 
     ・[57171] softya 
     ・[57208] ぽこ 
     ・[57310] ぽこ 
     ・[57334] ぽこ 
     ・[57341] ぽこ 
     ・[57416] TKOZ 
   デストラクタ   
     ・[57408] スキマ妖怪 
     ・[57409] ぽこ 
     ・[57410] 名無し 
     ・[57412] よつどもえ 
     ・[57415] よつどもえ 
   仮想関数の宣言   
     ・[57353] ぽこ 
     ・[57393] よつどもえ 
     ・[57394] ぽこ 
     ・[57398] よつどもえ 
     ・[57399] ぽこ 
     ・[57405] よつどもえ 
     ・[57414] よつどもえ 
   メールサーバーソフト ....   
   非常に下らない質問な ....   
     ・[57364] シエル 
     ・[57366] fatens 
     ・[57368] シエル 
     ・[57371] taketoshi 
     ・[57396] けえぼお 
     ・[57404] fatens 
   【26章】龍神録プログ ....   
     ・[57402] Dixq (管理人) 
     ・[57403] ぽこ 
   社会人の方へ質問です ....   
     ・[57210] toyo 
     ・[57211] 組木紙織 
     ・[57216] たかぎ 
     ・[57237] やっくん 
     ・[57246] dic 
     ・[57263] だいちゃん 
     ・[57268] 御津凪 
     ・[57335] Dixq (管理人) 
     ・[57401] しろ 
   ファイル読み取り→平 ....   
     ・[57387] ぽこ 
     ・[57389] 1EC10XXX 
     ・[57390] ぽこ 
     ・[57391] 1EC10XXX 
     ・[57392] ぽこ 
     ・[57395] 1EC10XXX 
   C++についての質問   
     ・[57356] ぽこ 
     ・[57357] シエル 
     ・[57358] ぽこ 
     ・[57359] シエル 
     ・[57360] ぽこ 
     ・[57362] たかぎ 
     ・[57367] シエル 
     ・[57369] たかぎ 
     ・[57370] シエル 
     ・[57373] softya 
     ・[57374] softya 
     ・[57375] ぽこ 
     ・[57376] softya 
     ・[57377] たかぎ 
     ・[57379] シエル 
     ・[57381] ぽこ 
     ・[57384] シエル 
     ・[57385] ぽこ 
     ・[57386] シエル 
     ・[57388] ぽこ 
   龍神録の#include ".. ....   
     ・[57361] Dixq (管理人) 
     ・[57365] Horison.A 
     ・[57372] Dixq (管理人) 
     ・[57378] Horison.A 
     ・[57380] Dixq (管理人) 
   以前ヒントを教えても ....   
     ・[57199] パコネコ 
     ・[57200] ぽこ 
     ・[57201] パコネコ 
     ・[57202] パコネコ 
     ・[57204] パコネコ 
     ・[57269] だいちゃん 
     ・[57311] 初心者 
     ・[57312] 初心者 
     ・[57317] パコネコ 
     ・[57323] 初心者 
     ・[57327] 初心者 
     ・[57328] パコネコ 
     ・[57329] パコネコ 
     ・[57330] 初心者 
     ・[57331] Dixq (管理人) 
     ・[57332] Dixq (管理人) 
     ・[57333] パコネコ 
     ・[57336] 脱初心者になりたい 
     ・[57337] パコネコ 
     ・[57338] Dixq (管理人) 
     ・[57340] デミチェリス 
     ・[57342] パコネコ 
     ・[57343] デミチェリス 
     ・[57344] パコネコ 
     ・[57345] Dixq (管理人) 
     ・[57346] デミチェリス 
   データ読み込み中にロ ....   
     ・[57027] Justy 
     ・[57029] やっくん 
     ・[57031] シエル 
     ・[57035] 御津凪 
     ・[57037] シエル 
     ・[57038] シエル 
     ・[57339] Justy 
   クイックソートを実装 ....   
     ・[57301] ドラ 
     ・[57321] Dixq (管理人) 
   ムービー   
     ・[57304] amu 
     ・[57306] 御津凪 
     ・[57319] Dixq (管理人) 
   龍神録・・   
     ・[57308] MASSA 
     ・[57309] MASSA 
     ・[57318] Dixq (管理人) 
   (不適切な内容だったの ....   
     ・[57279] パコネコ 
     ・[57280] lbfuvab 
     ・[57282] ookami 
     ・[57283] パコネコ 
     ・[57287] ookami 
     ・[57288] ookami 
     ・[57290] がくせい 
     ・[57291] パコネコ 
     ・[57292] ookami 
     ・[57293] パコネコ 
     ・[57294] ookami 
     ・[57296] パコネコ 
     ・[57297] がくせい 
     ・[57300] dic 
     ・[57315] Dixq (管理人) 
   ブロック崩しの背景   
     ・[57264] だいちゃん 
     ・[57267] ookami 
   ファイルの読み込みに ....   
     ・[57238] パコネコ 
     ・[57240] やっくん 
     ・[57248] パコネコ 
     ・[57265] やっくん 
   C言語 ヒット・アン ....   
     ・[57090] box 
     ・[57091] ぽこ 
     ・[57095] パコネコ 
     ・[57096] ふりすく 
     ・[57097] パコネコ 
     ・[57098] ふ 
     ・[57099] フリスク 
     ・[57100] ぽこ 
     ・[57101] フリスク 
     ・[57102] パコネコ 
     ・[57103] パコネコ 
     ・[57104] フリスク 
     ・[57105] パコネコ 
     ・[57106] ぽこ 
     ・[57107] フリスク 
     ・[57108] パコネコ 
     ・[57109] パコネコ 
     ・[57110] フリスク 
     ・[57111] パコネコ 
     ・[57113] ドラ 
     ・[57114] ISLe 
     ・[57115] パコネコ 
     ・[57117] ISLe 
     ・[57119] パコネコ 
     ・[57120] フリスク 
     ・[57152] フリスク 
     ・[57163] ookami 
     ・[57176] フリスク 
     ・[57178] ドラ 
     ・[57179] パコネコ 
     ・[57182] フリスク 
     ・[57255] だいちゃん 
     ・[57256] パコネコ 
   ファイルを読み込んで ....   
     ・[57218] ルーニー 
     ・[57225] パコネコ 
     ・[57227] ドラ 
     ・[57229] toyo 
     ・[57231] パコネコ 
     ・[57249] ドラ 
     ・[57251] パコネコ 
   文字列を文字(文字列 ....   
     ・[57083] softya 
     ・[57087] ISLe 
     ・[57147] dic 
     ・[57151] フリオ 
     ・[57158] フリオ 
     ・[57159] たかぎ 
     ・[57250] dic 
   マップの当たり判定に ....   
     ・[56836] パコネコ 
     ・[56870] めるぽん 
     ・[56902] パコネコ 
     ・[57148] yamataro 
     ・[57175] wing 
     ・[57188] パコネコ 
     ・[57215] yamataro 
     ・[57219] パコネコ 
     ・[57230] wing 
   「ゲームプログラマー ....   
     ・[57193] ぽこ 
     ・[57197] パコネコ 
     ・[57214] ゆうき 
     ・[57220] パコネコ 
   たびたびすいません   
     ・[57213] シエル 
   たびたび失礼します。   
     ・[57007] パコネコ 
     ・[57009] シエル 
     ・[57012] 黒猫 
     ・[57013] パコネコ 
     ・[57014] シエル 
     ・[57015] 黒猫 
     ・[57017] パコネコ 
     ・[57019] めるぽん 
     ・[57020] ぽこ 
     ・[57022] パコネコ 
     ・[57023] ぽこ 
     ・[57026] パコネコ 
     ・[57030] ISLe 
     ・[57055] パコネコ 
     ・[57068] ぽこ 
     ・[57116] パコネコ 
     ・[57118] ISLe 
     ・[57155] QERA 
     ・[57157] ISLe 
     ・[57166] QERA 
     ・[57177] 黒猫 
     ・[57181] パコネコ 
     ・[57207] ISLe 
   無題   
     ・[57162] シエル 
     ・[57165] ookami 
     ・[57167] シエル 
     ・[57168] sss 
     ・[57170] softya 
     ・[57205] Dixq (管理人) 
   カーブ   
     ・[57127] やっくん 
     ・[57149] TKOZ 
     ・[57194] パコネコ 
   敵の向き   
     ・[57183] パコネコ 
     ・[57184] シエル 
     ・[57185] KEN 
     ・[57186] パコネコ 
     ・[57189] KEN 
     ・[57190] パコネコ 
   イベントログの書き込 ....   
     ・[57174] シエル 
   ソースの評価?添削? ....   
     ・[56851] 白い時空 
     ・[56911] 白 
     ・[56955] 白い時空 
     ・[56956] たいちう 
     ・[56959] 白 
     ・[56962] 白い時空 
     ・[56966] ISLe 
     ・[56967] ISLe 
     ・[56968] たいちう 
     ・[57173] 白 
   シフトJISの判別   
     ・[57160] たかぎ 
     ・[57164] ドラ 
     ・[57172] dom 
   ActiveDirectryの更新 ....   
     ・[57126] ookami 
     ・[57156] 森の白熊 
   OpenGLで文字列のテク ....   
     ・[57144] シエル 
     ・[57153] めるぽん 
   ブロック崩し   
     ・[57136] ookami 
     ・[57137] naohiro19 
     ・[57143] かぶと 
     ・[57145] シエル 
     ・[57146] dic 
   C++でのグローバル変数 ....   
     ・[57046] シエル 
     ・[57053] かぶと 
     ・[57058] softya 
     ・[57071] DVDM 
     ・[57072] かぶと 
     ・[57073] かぶと 
     ・[57074] シエル 
     ・[57075] ぽこ 
     ・[57076] dic 
     ・[57078] かぶと 
     ・[57079] DVDM 
     ・[57080] かぶと 
     ・[57081] シエル 
     ・[57085] DVDM 
     ・[57122] naohiro19 
     ・[57125] かぶと 
     ・[57128] DVDM 
     ・[57141] かぶと 
   すいません(ブロック ....   
   無題   
     ・[57139] シエル 
   リスト構造について   
     ・[56958] へろり 
     ・[56965] ISLe 
     ・[56974] dic 
     ・[56976] カスタム 
     ・[56980] 組木紙織 
     ・[56981] たかぎ 
     ・[56991] へろり 
     ・[56999] ISLe 
     ・[57002] ISLe 
     ・[57003] たかぎ 
     ・[57112] カスタム 
     ・[57123] へろり 
     ・[57131] たかぎ 
   最近、C言語を学び始め ....   
     ・[57039] シエル 
     ・[57042] レン 
     ・[57043] シエル 
     ・[57045] レン 
     ・[57047] レン 
     ・[57048] シエル 
     ・[57049] toyo 
     ・[57050] レン 
     ・[57051] シエル 
     ・[57052] レン 
     ・[57054] シエル 
     ・[57056] softya 
     ・[57060] レン 
     ・[57086] レン 
     ・[57089] ぽこ 
     ・[57093] レン 
   セーブデータを作るに ....   
     ・[57004] Dixq (管理人) 
     ・[57063] カッテーラ 
     ・[57092] Dixq (管理人) 
   入力について   
     ・[57024] ぽこ 
     ・[57025] パコネコ 
     ・[57028] ぽこ 
     ・[57034] バグ 
     ・[57040] シエル 
     ・[57057] パコネコ 
     ・[57059] シエル 
     ・[57061] パコネコ 
     ・[57070] パコネコ 
   文字を書き込めない   
     ・[57065] シエル 
     ・[57066] shiro4ao 
     ・[57067] ぽこ 
     ・[57069] shiro4ao 
   slnファイルが開けませ ....   
     ・[57033] ookami 
     ・[57041] シエル 
     ・[57062] ガウシカ 
   画像部分を真っ白にす ....   
     ・[56982] ぬるぽ 
     ・[56983] 白い時空 
     ・[56989] ぬるぽ 
     ・[56990] シエル 
     ・[56992] へろり 
     ・[56993] 白い時空 
     ・[57018] ぬるぽ 

Name: DecentLove  ..初心者(6,326ポイント)   Date: 2010/07/25(日) 20:15   No:57459       
Title: 経過日時を計算する方法    
お久しぶりです。
今時計作りの一環としてある日付からどのくらい経過したか表示してみたいと思ったのですが、どうしたらいいかわかりません。

例えば、今日は2010年7月25日です。そして、時間が経過して2010年8月25日になったとします。
そして、2010年8月25日現在の時計の画面に「1ヶ月経過」と表示してみたいのです。翌日には「1ヶ月と1日」というふうに…。
今作っている時計に実装するかはわかりませんがこういうことが出来ると面白いものになりそうなので、どなたか教えていただけないでしょうか。

使っているのはVisual C++ 2010
DxLib使用です。
それと、APIのような高度なものはさっぱり理解出来ていません…。

よろしくお願いします。


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


Name: シエル  ..プログラマー(34,344ポイント)   Date: 2010/07/25(日) 20:27   No:57460     
Title: Re:経過日時を計算する方法    
基準となる日付をファイルに保存しておいて、
毎回起動するたびに、そいつを読み込みにいって、現在の日付との差を出して
表示するだけでいいと思いますよ。


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

Name: DecentLove  ..初心者(6,387ポイント)   Date: 2010/07/25(日) 20:42   No:57461     
Title: Re:経過日時を計算する方法    

シエルさん。
>現在の日付との差を出して表示するだけでいいと思いますよ。

しかし、7月25日と8月15日との差って、8-7=1、15-25=-10
で日付の方はうまく計算されませんよね?そうしたらいいのでしょう


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

Name: シエル  ..プログラマー(34,387ポイント)   Date: 2010/07/25(日) 20:51   No:57462     
Title: Re:経過日時を計算する方法    
答えを言おうかと思ったけどやっぱやめます。
ちょっと考えればできますよ。
ググるなりして、ちょっと頑張ってみましょう。


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

Name: DecentLove  ..初心者(6,442ポイント)   Date: 2010/07/25(日) 21:19   No:57464     
Title: Re:経過日時を計算する方法    

う〜ん。いくつかのサイトの解説を見つけて読んでみましたが、さっぱり理解できませんでした。
解説、ソース見たんですけどさっぱり。


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

Name: シエル  ..プログラマー(34,782ポイント)   Date: 2010/07/25(日) 21:49   No:57466     
Title: Re:経過日時を計算する方法    
一ヶ月って何日でしたっけ?
月って30日だったり、31日だったっりしたっけ?
うるう年って何だっけ?


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

Name: MNS  ..プログラマー(38,827ポイント)   Date: 2010/07/25(日) 21:54   No:57467     
Title: Re:経過日時を計算する方法    
自分で計算するのが億劫ならば、標準ライブラリに含まれるヘッダである、
<time.h>の関数群を駆使することによって、経過日時を得ることも可能です。

difftime関数
localtime関数
mktime関数
あたりでしょうか。


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

Name: DecentLove  ..初心者(7,163ポイント)   Date: 2010/07/26(月) 19:03   No:57509 解決!     
Title: Re:経過日時を計算する方法    
閏年を判別するまではいけたんですが…。
別問題が発生して…。
なので、別にトピを作り質問しました。

また、解決し、新たな疑問ができ次第質問させて頂きます。

ありがとうございます。

http://www.play21.jp/board/formz.cgi?action=res&resno=57508&page=&id=dixq&rln=57508


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



Name: X  ..入門者(2,948ポイント)   Date: 2010/07/26(月) 11:07   No:57484       
Title: "再定義されています"というエラーが....    
いつもお世話になってます。Xです。(^0^)

今、キーボードだけでなく、パッドも使えるようにしています。

すると、
 "error C2371: 'ch_t' : 再定義されています。異なる基本型です。"
というエラーが、back_t,music_t....とたくさん出てきます。

環境:WindowsXP HomeEdition
      VisualC++2008ExpressEdition

ソースです-------------------------------------

まず構造体の宣言の関数が入っているstruct.h-----------------------------------------------

#include "../head/define.h"

//主人公に関する構造体
typedef struct{
        int x ,y ,img ,muki ,walking_flag;
}ch_t;

//背景に関する構造体
typedef struct{
        int x,y,img,muki,walking_flag;
}back_t;

//音楽に関する構造体
typedef struct{
        int music;
}music_t;

//タイトルに関する構造体
typedef struct{
        int img ,x, y;
        int menu_img[2], menu_x[2],menu_y[2];
        int arrow_img ,arrow_x ,arrow_y;
}title_t;

//パッドに関する構造体
typedef struct{
        int key[PAD_MAX];
}pad_t;

//コンフィグに関する構造体
typedef struct{
        int left,up,right,down,shot,bom,slow,start,change;
}configpad_t;
---------------------------------------------------------------------------------



で、グローバル関数を定義している、global.hは、------------------------------------------

#ifdef GLOBAL_INSTANCE

#define GLOBAL

#else

#define GLOBAL extern 

#endif


GLOBAL char Key[256]; //GetHitKeyStateAllに使う配列

GLOBAL ch_t ch;
GLOBAL back_t bc;
GLOBAL music_t ms;
GLOBAL configpad_t configpad;


GLOBAL void GetHitPadStateAll(void);
GLOBAL int CheckStatePad(unsigned int Handle);

です。

  何か変なところがあったり、載せて欲しいソースがありましたら、教えてください。(__)

  長くなってしまいました。すみません。 編集済み


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


Name: fatens  ..上級者(16,200ポイント)   Date: 2010/07/26(月) 11:25   No:57486     
Title: Re:    
エラーを正確にコピーしてもらわないと分かりませんが、
おそらく struct.h の #include "../head/define.h" のせいです。


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

Name: X  ..入門者(3,774ポイント)   Date: 2010/07/26(月) 11:38   No:57488     
Title: Re:    
正確には、
------ ビルド開始: プロジェクト: DinosaurX, 構成: Debug Win32 ------
コンパイルしています...
key.cpp
main.cpp
g:\プログラミング\teamx\dinosaurx\head\struct.h(5) : error C2371: 'ch_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(5) : 'ch_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(9) : error C2371: 'back_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(9) : 'back_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(13) : error C2371: 'music_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(13) : 'music_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(20) : error C2371: 'title_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(20) : 'title_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(25) : error C2371: 'pad_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(25) : 'pad_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(30) : error C2371: 'configpad_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(30) : 'configpad_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(5) : error C2371: 'ch_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(5) : 'ch_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(9) : error C2371: 'back_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(9) : 'back_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(13) : error C2371: 'music_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(13) : 'music_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(20) : error C2371: 'title_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(20) : 'title_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(25) : error C2371: 'pad_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(25) : 'pad_t' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\struct.h(30) : error C2371: 'configpad_t' : 再定義されています。異なる基本型です。
        g:\プログラミング\teamx\dinosaurx\head\struct.h(30) : 'configpad_t' の宣言を確認してください。
コードを生成中...
ビルドログは "file://g:\プログラミング\TeamX\DinosaurX\Debug\BuildLog.htm" に保存されました。
DinosaurX - エラー 12、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

です。

define.hについては、いじってみましたが、結果は同じでした。


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

Name: シエル  ..プログラマー(34,726ポイント)   Date: 2010/07/26(月) 11:45   No:57489     
Title: Re:    
struct.hのコードを

#ifndef STRUCT_H
#define STRUCT_H




#endif


で囲めばいいのでは?


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

Name: X  ..入門者(3,825ポイント)   Date: 2010/07/26(月) 11:53   No:57490 解決!     
Title: Re:    
出来ました!!
ありがとうございます!

でも、今度は、リンクのときにエラーが出たので、新しくスレを立てます。


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



Name: ビッグバンベーダー  ..ぴよぴよ(21ポイント)   Date: 2010/07/25(日) 22:31   No:57470       
Title: 戦略SLGの占領国の表示方法について    
今、国取り戦略シミュレーションゲームを作っています。
それぞれ色の違う各国が描いてある地図を表示して、
もし各国の中で自国の占領国がある場合、
その国を、自国と同じ色に表示しようと考えています。

しかしやり方が、
自国色の国が描かれている画像ファイルを、
全国分用意して、もし占領国があったら、
地図画像の上に、その自国色の占領国画像を、
重ねて表示するという方法しかわかりません。

この方法だと、他国の占領国の表示のことを考えると用意する画像ファイルの
量がたいへん多くなってしまいそうです。

他にもっと簡単な方法はないでしょうか。
どうぞよろしくお願い致します。 編集済み


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


Name: Justy  ..伝説なるハッカー(559,093ポイント)   Date: 2010/07/26(月) 00:19   No:57476     
Title: Re:戦略SLGの占領国の表示方法について    
>地図画像の上に、その自国色の占領国画像を、 
>重ねて表示するという方法しかわかりません
 ディフューズカラー(DXライブラリだと輝度)の変更じゃだめですか?
 うまくディフューズカラーの変更だけで済むように作れば、素材は色違いを用意する必要がなくなるので
国の数だけで済みます。


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

Name: jay  ..上級者(18,225ポイント)   Date: 2010/07/26(月) 01:09   No:57479     
Title: Re:戦略SLGの占領国の表示方法について    
DXライブラリならば
 SetDrawBright 
という関数で輝度(RGBの強さ)を調整できます
上手くすればこれでいけるかもしれません

詳細は以下を参照して下さい

http://dixq.net/g/09.html


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

Name: ビッグバンベーダー  ..ぴよぴよ(60ポイント)   Date: 2010/07/26(月) 01:35   No:57480 解決!     
Title: Re:戦略SLGの占領国の表示方法について    
SetDrawBright関数を使って解決しました。
Justyさん、jayさん本当に感謝です。ありがとうございました。 編集済み


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



Name: ぽこ  ..プログラマー(25,930ポイント)   Date: 2010/07/26(月) 00:00   No:57474       
Title: 【36章】龍神録プログラミングの館    
36章でbullet_t構造体に新たなメンバ、 cnt_tillとcnt_sttが追加/利用されています。
このメンバの役割を教えていただけませんか?

具体的に混乱しているのは以下の箇所です。
 ・メンバcnt_tillとメンバtillの違いは?
 ・メンバcnt_sttは何という単語を短縮したものか?

以上、よろしくお願いします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,237,735ポイント)   Date: 2010/07/26(月) 00:18   No:57475     
Title: Re: 【36章】龍神録プログラミングの館    
確か、両方とも深弾幕結界でのみ使っていたと思います。
あの弾幕はいくつも特別な変数が必要だったので、臨時で用意する必要がありました。
他の章で使ってないんですから、番外扱いにすれば良かったですね、ごめんなさい、気にしないで下さい;


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

Name: fatens  ..上級者(16,170ポイント)   Date: 2010/07/26(月) 00:23   No:57477     
Title: Re: 【36章】龍神録プログラミングの館    
tillは、弾が最低限消えない時間だと思います。


cnt_till, cnt_sttについては、36章より、
 「弾が一時停止する時間を設定するcnt_tillや動き出す時間を設定するcnt_sttという変数を
 弾構造体に追加していますが、これは今回しか使わない変数ですので、今回のみ追加しています。」
とのことです。

動き出す時間なので、sttはおそらくstartの略なのではないでしょうか。


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

Name: ぽこ  ..プログラマー(25,956ポイント)   Date: 2010/07/26(月) 00:34   No:57478 解決!     
Title: Re: 【36章】龍神録プログラミングの館    
回答ありがとうございます。
これで解決とさせていただきます。 編集済み


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



Name: jay  ..上級者(17,549ポイント)   Date: 2010/07/25(日) 00:53   No:57430       
Title: STG出来ました    
本当はもっと早く完成させて公開するつもりだったのですけれどね、色々あって当初の予定より一月以上遅れてしまいました(汗)

ともあれ、なんとか完成したので公開します
URL先よりDLして下さい
http://www1.axfc.net/uploader/O/so/130592

キーワード
night


龍神録の館で勉強させてもらいながら制作した弾幕STGです(一応、僕が初めて作ったゲームです)

ゲームは練習用チュートリアルステージ+メインゲーム5ステージ+EXステージ
という構成になっています。

ちなみに素材は龍神録の館で配布されているものを始め、フリーのものを使用しています。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,237,048ポイント)   Date: 2010/07/25(日) 00:57   No:57431     
Title: Re:STG出来ました    
制作お疲れ様です^^

DXライブラリのバージョンはいくつですか?
恐らくver2以前かと思うのですが、windows7ではver3からしか動かないようなので、
DXライブラリを最新バージョンにして配布されてはいかがでしょうか?
うちの環境だと動きません;


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

Name: ぽこ  ..プログラマー(25,794ポイント)   Date: 2010/07/25(日) 01:34   No:57433     
Title: Re:STG出来ました    
4,5分ほどやりましたが、よく出来ていると思います。

んが、「四聖龍神録」って単語がゲーム画面に入っているのはマズイと思いますよ。
実行ファイル名もRyujin.exeですし。


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

Name: jay  ..上級者(17,640ポイント)   Date: 2010/07/25(日) 01:36   No:57434     
Title: Re:STG出来ました    
開発環境におけるDXライブラリのバージョンは分かりません。
というのも、龍神録プログラミングの館で配布されているプロジェクトの開発環境(includeファイル)をそのまま使わせてもらっているので。

DXライブラリを最新バージョンにする方法を教えて下されば、更新して改めて配布します。


ちなみに僕のPC(開発環境)はwindows7です。


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

Name: Justy  ..伝説なるハッカー(558,585ポイント)   Date: 2010/07/25(日) 03:09   No:57436     
Title: Re:STG出来ました    
>DXライブラリのバージョン
 お使いのバージョンは 2.24cのようです。
 
 更新方法は公式サイトから最新版のライブラリをDLしてきて、その中の「プロジェクトに追加すべきファイル_VC用」の中身を
龍神録プロジェクトの includeディレクトリに入れてビルドしなおしてください。

 現在の龍神録の館のプロジェクトを再DLしてもいいですね。今の館の includeディレクトリは
3.x系になっていますので、そのまま includeディレクトリだけを自分のディレクトリにコピーすれば
いいかと。

 あ、ソリューションエクスプローラの方で、もしライブラリが登録されているようでしたら、
そのあたりも修正が必要になるかもしれません。
 ソリューションエクスプローラの「リソースファイル」フィルタの中に DxLib.hや DxLib.libなどの
ファイルが登録されていていませんか?
 もしあればそれらを全て削除し、プロジェクトのプロパティの「リンカ→追加のライブラリディレクトリ」のところに
../includeを入れてください。
 これでビルドが通るはずです。



 あとは……

・ zip内に suoファイルや Log.txtがそのまま入ってます。実行には不要な情報が含まれていますので
消しておいた方がいいです。

・ ゲームを開始して、メニューから最初から始めたりタイトルに戻ったりすると
その度に使用メモリが増えていきます。
 解放されていないメモリがあるようです。

・ exeがデバッグビルドではないですか? もしそうならリリースビルドでの配布をお勧めします。


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

Name: ゆうめ  ..ぴよぴよ(272ポイント)   Date: 2010/07/25(日) 04:03   No:57437     
Title: Re:STG出来ました    
早速ですが、遊ばせていただきました!面白かったです!^^w

ただ、わたし的には本編やExのラスボス手前の雑魚敵が使う
粒弾が見にくかった……(;;

あとExは結構難しかったです
(永が多かった??)
……結界が出るとわ><;

jayさん、お疲れさまでした


P.S.
わたしもWindows7でしたが、問題なく起動しました!


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

Name: シエル  ..プログラマー(34,276ポイント)   Date: 2010/07/25(日) 08:25   No:57439     
Title: Re:STG出来ました    
遊ばせていただきましたが、見た目的にはほとんど龍神録と変わらなかったので、
もう少し自分で作った感を出してほしかったかな〜

まあよく出来ているとは思いますよ。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,237,485ポイント)   Date: 2010/07/25(日) 09:34   No:57441     
Title: Re:STG出来ました    
おや、うちの環境と友人の環境はwindows7でver2が動かないので、動かない物と思っていましたが、別に原因がありそうですね。
まぁ中身がDrectX7ですから、単純にそれだけで動かないってのはおかしいですよね・・。

windows7でver2が動かない原因誰かご存知ですか?

検索しても大した情報が出てこないし、管理人さんに聞いてみようかな・・。
(ちなみにXPModeだと動きます)


フォルダ構成ですが、
実行ファイルはトップにあった方がよくないですか?
館では全ての章で同じデータをシェアする関係上あのようなフォルダ構成になっていますが、ゲームとしてリリースするなら、変えた方が良いのではないかと思います。

また、プロジェクトの名前を変えれば生成される実行ファイル名も変わります。
まぁ作った実行ファイルを後から名前変更すればいいだけですが、
.slnや.vcprojファイルをメモ帳などで開き、「RyuJin」に関するキーワードをご自分のゲーム名に置換すればOKです。
その際、この2つのファイルのファイル名も変更して下さい。

それと、実行ファイルにはアイコンを付けるとゲームらしくなりますよ。
詳しくはこちら
http://homepage2.nifty.com/natupaji/DxLib/dxtec.html#M2

最後にJustyさんが仰っている

> もしそうならリリースビルドでの配布をお勧めします。 

について書かれているリンクを貼っておきますので参考にして下さい。
http://homepage2.nifty.com/natupaji/DxLib/dxtec.html#M1


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

Name: jay  ..上級者(18,012ポイント)   Date: 2010/07/25(日) 13:11   No:57446     
Title: Re:STG出来ました    
プログラムを作ることしか能がない僕は、実行するときの環境等に関して勉強不足だったようですね。

とにかくJustyさんやDixqさんが指摘して下さった点をなんとか修正できるように今から頑張って来ます。
テスト勉強が疎かにならない程度に(汗)
偶然にも明日の二時限目のテストがC言語という・・・。

まずは龍神録の館のプロジェクトのincludeファイルからやってきます。


>シエルさん
その辺りはフレームなど、目で見える範囲を変えるしかなさそうですね。
僕にPCで絵を描く技術は・・・、PaintShopであがいてみます。


>ゆうめさん
粒弾は仕様ですね
事故率は高いですが、ボムを使えばアッサリ通過できるというw

Exは・・・、難しいですよねw
何気に中ボスが使う弾幕は、本家の旧作のExボスが使う弾幕をトレースしたものだったり。

楽しんで下さってありがとうございます。

>ぽこさん
やはりフレームは問題ありのようですね、ご指摘ありがとうございます。



では、これから頑張ってきます。
そういえばゲーム名なんて考えて無かったです・・・。 編集済み


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

Name: ひよこ  ..比類無きプログラマー(86,486ポイント)   Date: 2010/07/25(日) 16:33   No:57452     
Title: Re:STG出来ました    
遊んでみました。
弾幕が難しくて4面でコンティンニューできなくて終わりました。
とても細かい弾がよけづらいと見にくかったです。
ストーリーが欲しいような気がします。
制作お疲れ様でした。


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

Name: 白い時空  ..入門者(3,823ポイント)   Date: 2010/07/25(日) 19:45   No:57457     
Title: Re:STG出来ました    
遊ばせていただきました。
初めて製作したゲームにしてはよく出来ていますね。
本編はクリアしましたが、EXは無理でした。
あと、チュートリアルが名前に似合わず難しい気がします。

やってみた感想ですが、
龍神録を参考にした弾幕STGですが、本家とはバランス調整が違いました。

具体的には
・被弾するとパワーが1.8減少、パワー1.5分のアイテムを落とす。
 つまり被弾しても高パワーで復帰できません。
・ボスが毎回落とすアイテムでもパワーはほぼ増えません。+0.3くらい?

よって、
・ボス戦時にパワーが2.0以上無いと難易度が格段に上がります。パワーが2.0未満になると2.0以上に戻すのはほぼ無理です。
・ボムの価値が低いです。ボス戦時に打つと上記の理由により確実に損します。

jayさんの目指したバランスはこれでいいんでしょうか?
バランスは自分で決めるものなので私からは何とも言えませんが、被弾したときに高パワーで復帰できるようにしてほしいですね。 編集済み


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

Name: ideyan  ..中級者(10,205ポイント)   Date: 2010/07/25(日) 19:57   No:57458     
Title: Re:STG出来ました    
遊んでみました。

今のままだと自分にはちょっと難しいみたいです^^;
もっとうまくなりたいなぁ(笑

細かいことですが
ボス倒したときの
STAGE CREAL → STAGE CLEAR ですよね?


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

Name: jay  ..上級者(18,143ポイント)   Date: 2010/07/25(日) 23:17   No:57473 解決!     
Title: Re:STG出来ました    
みなさんご指摘ありがとうございます。
只今修正のために鋭意作業中です。

テストプレイヤーを引き受けてくれた友人たちはゲームバランスについては文句を言わなかったのですが、バランス修正をする必要もありそうですね。

とりあえず”解決”としまして、近日中に修正版を公開しますね。


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



Name: IDO  ..ぴよぴよ(153ポイント)   Date: 2010/07/25(日) 21:11   No:57463       
Title: 10:敵を表示させてみよう について    
龍神録プログラミング10 敵を表示〜の例文で、

enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%18)/6;

この部分がまるで分かりません
imgっていうのは画像ハンドルではないのか、
そうだとしたら何故向きに3を掛けてそれにカウントを18で割った余りを6で割ったものを
足すのか等数字の意味ややりたいことがまるで分かりません

どなたか解説をお願いします


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


Name: シエル  ..プログラマー(34,738ポイント)   Date: 2010/07/25(日) 21:46   No:57465     
Title: Re:10:敵を表示させてみよう について    
いやらしいヒント

enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%18)/6;

LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);

http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N3

・敵のカウントはどんどん増えていく。
・それを18で割るとあまりも17までどんどん増えていく。
・カウントが18の倍数になったら、あまりがまた0になって、それ以降、またあまりが増えていく。
・それを6で割ると、0〜5までは商が0、6〜11までは1、12〜17までは2になる。

これらを行うとどのような数字が導き出されて、その数字を上記の関数に当てはめてみると
どうなるか、よ〜〜〜〜く考えてみましょう。
 編集済み


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

Name: IDO  ..ぴよぴよ(232ポイント)   Date: 2010/07/25(日) 22:03   No:57468     
Title: Re:10:敵を表示させてみよう について    
根本的な勘違いで、そもそもenemy[i].imgは画像ハンドルではなく、
画像ハンドルはimg_enemy[i][j]の二次元配列で、そのハンドルの
二つ目の画像に代入するためのものがenemy[i].imgで、それを
求めるための計算式、ってことでいいでしょうか・・・?


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

Name: シエル  ..プログラマー(34,683ポイント)   Date: 2010/07/25(日) 22:15   No:57469     
Title: Re:10:敵を表示させてみよう について    
分かってるようで分かってないような気がするので補足。
画像のハンドルが格納された、img_enemy[i][j]の二次元配列があります。
enemy[i].imgはその配列の番号を表しています。

http://dixq.net/rp/4.html
↑この辺も見れば完璧なんじゃないですか?

#DXライブラリにさっぱり詳しくなく、LoadDivGraphの関数も今日知って、さっき調べたばかりなので間違ってたらすいません。


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

Name: IDO  ..ぴよぴよ(262ポイント)   Date: 2010/07/25(日) 22:57   No:57471 解決!     
Title: Re:10:敵を表示させてみよう について    
ん、多分もう大丈夫です
解決しました、多分間違っていても自分で解決できそうです

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


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,237,639ポイント)   Date: 2010/07/25(日) 23:04   No:57472     
Title: Re:10:敵を表示させてみよう について    
画像のループについてはこの辺で紹介しているのでどうぞ
http://dixq.net/g/23.html


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



Name: ネス  ..かけだし(1,011ポイント)   Date: 2010/07/25(日) 13:29   No:57448       
Title: DXライブラリをコマンドラインからコンパイル    


VC++、bccデベロッッパーを使わず、borland c++ compiler 5.5のみを使い、コマンドラインからのコンパイルする方法についての質問です。

bccはデフォルトでインストールし、設定も完了。
問題はここからでして、bccのbinフォルダに「プロジェクトに追加すべきファイル_BCC用」の中身を置いてみましたが、ライブラリをオープンできないとなります。
ちなみに、コンパイルは、bcc32 -tW ファイル名で行いました。


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


Name: Justy  ..伝説なるハッカー(558,936ポイント)   Date: 2010/07/25(日) 15:15   No:57450     
Title: Re:DXライブラリをコマンドラインからコンパイル    
>bccのbinフォルダに「プロジェクトに追加すべきファイル_BCC用」の中身を置いてみましたが
 どこかに binの中に入れろと書いてありましたか?


 とりあえず binに入れたファイル・フォルダは元に戻して下さい。
 その上で。

 例えば「プロジェクトに追加すべきファイル_BCC用」の中身が" D:\Library\DxLib_BCC\v303\Lib "のパスに
あったとして、bcc32のコマンドだけでなんとかしたいのであれば、

>bcc32 -ID:\Library\DxLib_BCC\v303\Lib -LD:\Library\DxLib_BCC\v303\Lib -tW ファイル名

とコンパイラに引数でライブラリのパスをしてみてください。

 或いはいちいちライブラリのパスを指定するのが面倒であればコンパイラの設定時に私用した
bcc32.cfgの -Lと -Iのところのライブラリのパスを追加してもいいでしょう。

-I"D:\Library\borland\bcc55\include"
-L"D:\Library\borland\bcc55\lib"

 ↓
-I"D:\Library\borland\bcc55\include;D:\Library\DxLib_BCC\v303\Lib"
-L"D:\Library\borland\bcc55\lib;D:\Library\DxLib_BCC\v303\Lib"


 これなら
>bcc32 -tW ファイル名

だけでいけると思います。



# もうちょっと慣れてきたらバッチファイル化するとか makefileの書き方を調べて見るといいかもしれません。


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

Name: ネス  ..かけだし(1,438ポイント)   Date: 2010/07/25(日) 16:19   No:57451     
Title: Re:DXライブラリをコマンドラインからコンパイル    


レスありがとうございます。
早速上記の方法を試してみました。
パスについてはクリアしたのですが、以下のようなエラーが出てしまいます。

エラー E2141 D:\Library\DxLib_BCC\v303\Lib\DxDirectX.h 890: 宣言の構文エラー


ソースコードはウィンドウを表示する以下のものです。(サンプルそのまんまです)
それだけにいったい何が次なる問題なのか分かりません。
他のサンプルソースも試してみましたが、間違っていないはずなのに、「ここでは宣言できない」などのエラーが表示されてしまいます。


お手数をおかけしますが、お手すきのときでもお知恵を提供してもらえると助かります。



#include "DxLib.h"
 
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
 
 
        WaitKey() ;             // キーの入力待ち(『WaitKey』を使用) 
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}



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

Name: Justy  ..伝説なるハッカー(558,979ポイント)   Date: 2010/07/25(日) 16:38   No:57453     
Title: Re:DXライブラリをコマンドラインからコンパイル    
 んー、拡張子は何になっていますか?
 もし、.cになっていたら .cppにしてみてください。


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

Name: ネス  ..かけだし(1,540ポイント)   Date: 2010/07/25(日) 17:59   No:57454     
Title: Re:DXライブラリをコマンドラインからコンパイル    


レスありがとうございます。
拡張子.cppにしてみたところ、今度は次のようなエラーが表示されました。

>Fatal: ファイル VORBISFILE_STATIC.LIB が開けません


設定の誤りかと思い調べ直したのですが、.cfgにも環境パスにも見当たりません。
もうちょっと調べ回ってみます。


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

Name: ネス  ..かけだし(1,837ポイント)   Date: 2010/07/25(日) 18:30   No:57456 解決!     
Title: Re:DXライブラリをコマンドラインからコンパイル    


ありがとうございました。解決しました。


> とりあえず binに入れたファイル・フォルダは元に戻して下さい。その上で。 


と、書いてくださっているのに、その先のアドバイスばかりをやっていました。
あれらを残しているとどれだけ影響あるのか分かりませんが、上の作業をしたとたん、正常にコンパイルできました。また、移し忘れているものがあるかもと思い、bcc用をもう一度コピーし直しました。


本当に助かりました。
コンソールアプリしか作ったことがなく、それもまだまだですが、どうにか同じ要領でコンパイルできないかと思っていましたので、今回の解決は今まででいちばん嬉しかった出来事です。
「今までと同じやり方で、ウィンドウが表示されてる!!」
感動しましたし、大変、感謝しております。




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



Name: Sin  ..ぴよぴよ(67ポイント)   Date: 2010/07/24(土) 17:18   No:57400       
Title: openGLで    
openGLでC言語を使用し、次の式を満たす図形を作成したいのですが
どう定義して実際に作成するのかが全くわからず困っています。
よければ教えていただけないでしょうか。

楕円
X=[acosθcosψ,bsinθcosψ,csinψ] (0≦ψ≦π/2, 0≦θ<2π)
Y=[acosθcosψ,bsinθcosψ,csinψ] (-π/2≦ψ≦0, 0≦θ<2π)

お願いします。


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


Name: たかぎ [URL]  ..ハッカー(215,804ポイント)   Date: 2010/07/24(土) 22:34   No:57417     
Title: Re:openGLで    
OpenGLでは楕円を直接描画する機能はないので、楕円上の任意の2点を求めてglVertex2dでも使って線分を描画してください。


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

Name: Sin  ..ぴよぴよ(67ポイント)   Date: 2010/07/25(日) 18:10   No:57455 解決!     
Title: Re:openGLで    
直接描画することはできなかったんですね…。

教わった通りのやり方でもう少し頑張ってみます。




Name: ねこ  ..熟練のプログラマー(53,586ポイント)   Date: 2010/07/24(土) 10:18   No:57351       
Title: VisualStudioのサポートツールについて    
おはようございます。お久しぶりです。

VisualStudio系のコーディング補助ツールについてお聞きしたいです。
先日「VisualAssistX」というツールをお勧めされて使ってみました。
URL:ttp://www.wholetomato.com/

使いこなせたわけではないですが、Intellisenceの補完やclass情報等今までと違った視点で使えて
補助ツール自体に興味を持ちました。

そこで現在VisualStudio( 出来れば2005〜2008くらいで )を使っていて
VS系補助ツールを使ってる方が居らっしゃったら使い勝手、好んでる点等を教えて頂きたいです。

個人的な注目点は
・Intellisence系の補完
・関数・クラスの一覧
・include等を記述している時のローカルフォルダ情報補完
・実行後に落ちた場合の情報補完
・メモリ管理

などです。メモリ管理等はよく「__FILE__, __LINE__」とかdefineで仕込んだりしてるので、
ツール補助でさくっと出来たりしないかなぁ、とか思うことも多いです。
特に注目点に関わらず「このツールだとこういうのが便利だよ!」みたいなのがあれば教えて頂きたいです。

英語系でも問題はありません。日本語・英語どっちかが良いです。
価格は・・・出来れば上限10万以下くらいで。

よろしくお願いします。


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


Name: Justy  ..伝説なるハッカー(558,132ポイント)   Date: 2010/07/24(土) 21:38   No:57413     
Title: Re:VisualStudioのサポートツールについて    
 VS2003の頃いろいろ探したことがあるんですが、費用効果の関係から
 
DPack
http://www.usysware.com/dpack/

Ref++
http://www.softantenna.com/lib/3816/index.html

だけを入れていました。

 ref++は変数名を変えたり選択したところを関数に切り出したりと、まぁそれなりに
使えたツールではあったんですが今はもうないので、うちの 2008には DPackだけが入っています。
 
 DPackはいろいろ情報を表示したり、ソースコードにブックマークを貼ったり、
選択したところを try-catchなどで括ってくれたりするツールです。
 と言ってもコードはいつも別のエディタで書いているので VisualStudioは必然的にビルド・デバッグでしか
使わないので DPackは専らコード行数を調べるときくらいしか使ってないですけどね。

 


>このツールだとこういうのが便利だよ

 実際に使ったことはないのですが、Iリファクタリング関連で
CodeRushは高機能で多数の言語に対応しているので結構便利そうです。

Visual Studioのコーディング支援用拡張機能(コード生成)
http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/

Visual Studio用リファクタリング拡張機能- DevExpress社の Refactor!™ Pro
http://www.devexpress.com/Products/Visual_Studio_Add-in/Refactoring/



>ツール補助でさくっと出来たりしないかなぁ、とか思うことも多いです
 自作してみる、というのもいいかもしれませんよ。

開発環境Visual Studioをカスタマイズせよ! − @IT
http://www.atmarkit.co.jp/fdotnet/special/vsaddinintro01/vsaddinintro01_02.html
方法 : アドインを作成する
http://msdn.microsoft.com/ja-jp/library/80493a3w(VS.80).aspx


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

Name: ねこ  ..熟練のプログラマー(53,957ポイント)   Date: 2010/07/25(日) 08:56   No:57440 解決!     
Title: Re:VisualStudioのサポートツールについて    
おはようございます。

>Justyさん

情報ありがとうございます。
僕もVS2003くらいから探してはいたのですが当時のマシンだと補助ツールまで入れたら
VS自体が重くてやりにくくなりそうだったので敬遠してました。
最近だとVSのほとんどの機能に関して「重い」と感じなくなったのでまた探してみようと思いました。

まず便利そうということでCodeRushから触ってみたいと思います。
触った後また体感等を書き込もうと思います。

<アドイン
なるほど、こういう自作というのも手なのですね。
性格上自作していく方が合ってるかもしれません。
こちらも記事を参考にしつつ触ってみようと思います。
自分好みに作っていける点で下手したらこっちに没頭しないように気をつけないと・・・


ありがとうございました。
ひとまずいくつも同時に触れないと思うのでこのトピックは「解決」とします。


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



Name: ゆうめ  ..ぴよぴよ(95ポイント)   Date: 2010/07/24(土) 23:48   No:57421       
Title: Subversionについて    
「社会人の方へ質問です(雑談です)」のレスの中に、
Subversionを使えば会社と自宅とでできると
あったんで気になったんですけど、
これってサーバーにソースを置いて離れたPCから更新していく
って言うことですよね??

また、用途お金がかかったりしますか?


誰か知っている方や詳しい方がいましたら教えてください><

※ちなみにWindows環境です※


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


Name: 御津凪 [URL]  ..ハッカー(146,762ポイント)   Date: 2010/07/24(土) 23:57   No:57422     
Title: Re:Subversionについて    
個人で小規模のプロジェクトを運用するのであれば、 SVN 無料レンタルサーバーを探せばありますよ。
(逆にその条件でないとちゃんとしたサーバーがない)

ちなみに、ローカルでも可能ですし、応用でオンラインストレージサービスを利用すれば、
会社と自宅で共有することも可能です。

実際、その方法で管理しているリポジトリを持っています。

また、オープンソースプロジェクトを立ち上げるのであれば SourceForge.JP を利用するのがお勧めです。

Windows 環境ならば、TortoiseSVN というシェル統合ツールを利用すると簡単ですよ。


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

Name: ゆうめ  ..ぴよぴよ(117ポイント)   Date: 2010/07/25(日) 02:36   No:57435 解決!     
Title: Re:Subversionについて    
参考になりました!

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


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



Name: ぽこ  ..プログラマー(25,399ポイント)   Date: 2010/07/24(土) 21:03   No:57407       
Title: 【要望】龍神録プログラミングの館第28章    
度々すみません。
第28章に、注意書き追加の要望です。

この章になって、初めて弾の回転という概念が出てきました。
プログラム的には、bullet_t構造体、bullet_info_t構造体にkaitenと
いうメンバが追加されています。

このメンバの追加による修正範囲が広いので、修正箇所に関するアドバイザリを
載せたほうが良いと思います。

ちなみに、修正した範囲は次のとおりです。
 ・弾の描画ルーチン(敵、ボス)。
 ・グローバル変数bullet_infoの初期化ルーチンと呼び出し箇所。

また、メンバkaitenとは関係がない箇所ですが、
 ・画像をロードする箇所。
  b7.pngが9分割から、10分割でロードするようになっている
  (27章から変わっているが、28章で問題になる)。

以上です。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,236,927ポイント)   Date: 2010/07/25(日) 00:37   No:57428     
Title: Re:【要望】龍神録プログラミングの館第28章    
ぽこさん

なるほど、変更した部分があちこちあるのに、変更について述べているのは弾幕の部分しかないのですね。
ご指摘ありがとうございます。
追記しようと思います。

このような記載漏れは結構あるようなので、もし他にもあれば教えて頂ければ幸いです。
もし誰にも情報共有する必要が無いほど些細なミスや誤字などでしたら
よろしければメールなどでも何でも結構です。

ありがとうございますm(_ _)m


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

Name: ぽこ  ..プログラマー(25,737ポイント)   Date: 2010/07/25(日) 00:52   No:57429     
Title: Re:【要望】龍神録プログラミングの館第28章    
んでは、お言葉に甘えてもう何点か。

【30章】
弾管理用構造体bullet_tに新しいメンバeff_detailがいつの間にか追加され、使用されています。
このメンバはこの時点では、この章の弾幕を実現するために使用されていますが、
描画ルーチンの方も変更する必要があります。
この情報も追加しておいたほうが良いと思います。

【31章】
弾画像ハンドラ管理用グローバル変数img_bulletのサイズが、
10→20にいつの間にか増えています(29章の段階で増えていることを確認)。

で、この章で11個目の弾画像b10.pngをロードします。
↑で記述したグローバル変数のサイズが変わったことに気づかない場合、
配列のオーバフローが発生し、素敵な弾幕が出来上がってしまいます。
この情報も追加したほうが良いと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,237,050ポイント)   Date: 2010/07/25(日) 00:58   No:57432     
Title: Re:【要望】龍神録プログラミングの館第28章    
詳細な情報感謝致します!
ありがとうございます^^


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



Name: よつどもえ  ..ぴよぴよ(573ポイント)   Date: 2010/07/24(土) 23:08   No:57418       
Title: 抽象クラス    
(この記事は管理人が復元しました)

度々、申し訳ありませんが、
今度はこのプログラムをコンパイルしたら
//期末課題
#include<iostream>
#include<cstring>

using namespace std;

class AbstractIntArray{ //抽象クラス
public:
       virtual int getElem(size_t index)=0;
       virtual void setElem(size_t index,int value)=0;

       //・・・・・
private:
       //データなし
};

class IntArray:public AbstractIntArray{ //具象クラス
public:
       int getElem(size_t index);
       void setElem(size_t index,int value);
       //・・・
private:
       size_t numElems;
       int *elems;
};

class SparseIntArray:public AbstractIntArray{   //具象クラス
public:
       int getElem(size_t index);
       void setElem(size_t index,int value);
       //・・・
private:
       //たぶんバイナツリーまたは何か普通では考えつかないもの
};
int sum(AbstractIntArray *a){
               int s=0,i;
               for(i=0;i< a ->getSize(); i++){

                       s+=a->getElem(i);
               return s;
       }
}
int main(){
       ::AbstractIntArray *a;
       for(int i=0; i<11; i++){
               a ->setElem(i,i);
       }
       printf(%d,sum(a));
       }

getSize : AbstractIntArray のメンバではありません。
 AbstractIntArray の宣言を確認してください。
が出ました。
getSizeという関数はなんらか定義しなければいけないのでしょうか?
それともそのまま使っていいのでしょうか?
教えてください。


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


Name: ぽこ  ..プログラマー(25,524ポイント)   Date: 2010/07/24(土) 23:22   No:57419     
Title: Re:抽象クラス    
#ああ、これ(ら)って課題だったんですね。
#安易に答え過ぎちゃいましたね。。

現状与えられている情報だけでは、よつどもえさんがやりたいようにやってください、
としか答えようがありません。


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

Name: たかぎ [URL]  ..ハッカー(215,891ポイント)   Date: 2010/07/24(土) 23:23   No:57420     
Title: Re:抽象クラス    
エラーが出るたびに質問していたのではキリがありませんよ。
しっかり勉強しなおして基礎力を固めてください。
その上で、自分でネット検索するなり、マニュアルを読むなりして解決する努力をしましょう。


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

Name: シエル  ..プログラマー(34,168ポイント)   Date: 2010/07/25(日) 00:06   No:57423     
Title: Re:抽象クラス    
ん?この人の投稿が全て消されてる?

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

Name: ぽこ  ..プログラマー(25,559ポイント)   Date: 2010/07/25(日) 00:07   No:57424     
Title: Re:抽象クラス    
なんというか、この時期の風物詩とはいえ、こういう事やられるとホントげんなりしますね。


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

Name: シエル  ..プログラマー(34,211ポイント)   Date: 2010/07/25(日) 00:10   No:57425     
Title: Re:抽象クラス    
ああ。課題ってバレたから、全部消したんですか。
課題であることを隠して、他人に解かせるって最低ですね。


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

Name: たかぎ [URL]  ..ハッカー(215,872ポイント)   Date: 2010/07/25(日) 00:14   No:57426     
Title: Re:抽象クラス    
管理人さんがきっと復活させてくれますよ。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,236,752ポイント)   Date: 2010/07/25(日) 00:33   No:57427     
Title: Re:抽象クラス    
7月と1月にこういうことよくありますね;

> よつどもえさん

自分の都合で記事を消す行為は規約違反になっています。
http://dixq.net/board/board.html#r3

逆の立場だったらどうか考えてみて下さい。
よつどもえさんが、べつに助けてあげる義理も無いのに善意で親身になって誰かに何かを教えてあげたとしましょう。
次の日にそのトピに来ると、そのトピが消されていたらどうでしょうか?
自分の苦労はなんだったんだろうかと、とても残念に思うと思います。

よつどもえさんが次に何か困って質問したくなった時、同じ名前でここに戻ってこれますか?
自分の為にも回答者様に対してもこの行為は良い事ではないのです。

また、消された記事は理由が述べられていない場合、元に戻すことになっています。
何か理由があれば教えて下さい。


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



Name: TKOZ  ..比類無きプログラマー(74,835ポイント)   Date: 2010/07/19(月) 14:51   No:56963       
Title: クォータービューの移動範囲を求め、移動するアルゴリズムについて    
こんにちは、TKOZです。
また、クォータービューで分からない所が出てきました。
それは、移動範囲を求め、表示し、クリックした座標へ移動する処理の事です。
VBのサンプルでKone's D Stationというサイトのサンプルを参考にやっているのですが、
うまくいきません。

とりあえず、プログラム本体とは切り離して、サンプルをとりあえず、クォータービューではなく、
矩形(くけい)のマスで計算し、移植しているのですが、上手くいきません。

具体的には、Timer1_Timer()の処理や、Command1.enableの値をどうするのか分かりません。

Cに移植したソースを載せます。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<time.h>
#include"DxLib.h"
#include<windows.h>

int MX,MY;//キャラ座標
int FPX[7];int FPY[7];int Way;//移動経路座標と移動するマス数
int ImageBG,ImageChara;
Part Parts[9][9];//各地形

void Command1_Click();
void MoveAreaPaint();
class T{
public:
    bool Enabled;//フラグ
    int Interval;
    int NowTime;
    T()
    {
        Enabled=false;
        Interval=0;
        NowTime=0;
    }
    void SetTimer1_Timer()
    {
        NowTime=GetTickCount();    
    }
    int GetTimer1_Timer()
    {
        if(Enabled==true && Interval>0)
        {
            if(GetTickCount()-NowTime>Interval)
            {
                NowTime=GetTickCount();
                Timer1_Timer();
            }
        }
    }
    void Timer1_Timer()
    {
        DrawBox(FPX[Way]*32,FPY[Way]*32,
            FPX[Way]*32+32,FPY[Way]*32+32,GetColor(255,255,0),TRUE);
        Way--;
        if(Way==-1)
        {
            MX=FPX[0];
            MY=FPY[0];
            Way=0;
            Enabled =false;
            MoveAreaPaint();
            Command1_Click();
        }
    }

};

void MoveAreaPaint()
{
    int a,b,c,d;

    for(a=0;a<9;a++)
    {
        for(b=0;b<9;b++)
        {
            DrawRectGraph(a*32,b*32,
                (Parts[a][b].PType/2)*32,(Parts[a][b].PType%2)*32,
                32,32,ImageBG,FALSE,FALSE);
            Parts[a][b].FPointX =0;
            Parts[a][b].FPointY = 0;
            Parts[a][b].LMPoint = 0;
        }
    }

    //メイン判定ルーチン
    Parts[MX][MY].LMPoint = 7;
    for(c=1;c<=7;c++)
    {
        for(a=MX-c;a<=MX+c;a++)
        {
            for(b=(7-abs(MX-a));b<=abs(7-abs(MX-a));b++)
            {
                if( a>=0 && a<10 && b>=0 && b<10)
                {
                    //左側判定
                    if(a>=0)
                    {
                        if(Parts[a][b].MPoint <= Parts[a - 1][b].LMPoint && Parts[a][b].LMPoint <= Parts[a - 1][b].LMPoint - Parts[a][b].MPoint)
                        {
                            Parts[a][b].LMPoint = Parts[a - 1][b].LMPoint - Parts[a][b].MPoint;
                            Parts[a][b].FPointX = -1;
                            Parts[a][b].FPointY = 0;
                        }
                    }
                    //右がわ判定
                    if (a < 9)
                    {
                        if (Parts[a][b].MPoint <= Parts[a + 1][b].LMPoint && Parts[a][b].LMPoint <= Parts[a + 1][b].LMPoint - Parts[a][b].MPoint)
                        {                            
                            Parts[a][b].LMPoint = Parts[a + 1][b].LMPoint - Parts[a][b].MPoint;
                            Parts[a][b].FPointX = 1;
                            Parts[a][b].FPointY = 0;
                        }
                    }
            
                    //上がわ判定
                    if( b >= 0)
                    {
                        if (Parts[a][b].MPoint <= Parts[a][b - 1].LMPoint && Parts[a][b].LMPoint <= Parts[a][b - 1].LMPoint - Parts[a][b].MPoint)
                        {
                            Parts[a][b].LMPoint = Parts[a][b - 1].LMPoint - Parts[a][b].MPoint;
                            Parts[a][b].FPointX = 0;
                            Parts[a][b].FPointY = -1;
                        }
                    }
                    //下がわ判定
                    if (b < 9)
                    {
                        if (Parts[a][b].MPoint <= Parts[a][b + 1].LMPoint && Parts[a][b].LMPoint <= Parts[a][b + 1].LMPoint - Parts[a][b].MPoint)
                        {
                            Parts[a][b].LMPoint = Parts[a][b + 1].LMPoint - Parts[a][b].MPoint;
                            Parts[a][b].FPointX = 0;
                            Parts[a][b].FPointY = 1;
                        }
                    }
                }
            }
        }
    }

    for(a=0;a<9;a++)
    {
        for(b=0;b<9;b++)
        {
            if(Parts[a][b].FPointX!=0 || Parts[a][b].FPointY!=0)
            {
                DrawBox(a*32,b*32,a*32+32,b*32+32,GetColor(255,0,0),FALSE);
            }
        }
    }
    DrawBox(MX*32,MY*32,MX*32+32,MY*32+32,GetColor(255,255,255),TRUE);
}



 編集済み


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


Name: TKOZ  ..比類無きプログラマー(75,917ポイント)   Date: 2010/07/19(月) 14:51   No:56964     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
void Command1_Click()
{
    int a,b,temp;

    for(a=0;a<9;a++)
    {
        for(b=0;b<9;b++)
        {
            temp=rand()%10;
            if(temp<=5) 
            {
                Parts[a][b].PType=0;//平地
                Parts[a][b].MPoint =1;
            }
            else if(temp>5 && temp<=7) 
            {
                Parts[a][b].PType=1;//森
                Parts[a][b].MPoint =2;
            }
            else if(temp>7 && temp<8)
            {
                Parts[a][b].PType =2;//砂漠
                Parts[a][b].MPoint =4;
            }
            else{
                Parts[a][b].PType =3;
                Parts[a][b].MPoint =8;//必要移動力を大きな数にすれば移動不能点になる
            }

        }
    }

    MX=rand()%10;
    MY=rand()%10;
    MoveAreaPaint();
}
T Timer1;
void Init()
{
    srand(time(NULL));
    Command1_Click();
    Timer1.Interval=200;
    ImageBG=LoadGraph("./BG.png");
    if(ImageBG!=-1)
        MessageBox(NULL,"OK!","OK",MB_OK);
    ImageChara=LoadGraph("./Chara.png");
}

void MouseDown(int X,int Y)
{
    if(Timer1.Enabled ==true) return;

    if(Parts[X/32][Y/32].FPointX==0 && Parts[X/32][Y/32].FPointY==0)
        return;

    int a,b,c;

    a=X/32;
    b=Y/32;
    FPX[0]=a;
    FPY[0]=b;
    c=0;

    //逆向きで経路を探す
    do{
        c++;
        a+=Parts[a][b].FPointX;
        b+=Parts[a][b].FPointY;
        FPX[c]=a;
        FPY[c]=b;
    }while(a!=MX && b!=MY);

    Way=c;
    Timer1.Enabled =true;
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode( TRUE );
    SetGraphMode(32*10 ,32*10 ,32 ) ;
    ChangeWindowMode(TRUE) ;
    SetMainWindowText("SLG 移動処理win32") ;
    if(DxLib_Init() == -1 ) return -1;
    SetDrawScreen( DX_SCREEN_BACK );

    Init();

    while(ProcessMessage()==0 && !CheckHitKey(KEY_INPUT_ESCAPE)){
        static int X,Y;
        GetMousePoint(&X,&Y);
        if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
        {
            //ClearDrawScreen();
            MouseDown(X,Y);
            // 押されている
        }
        else if(( GetMouseInput() & MOUSE_INPUT_RIGHT)!=0)
        {
            // 押されていない
            ClearDrawScreen();
            Command1_Click();
        }
        //Timer1.Timer1_Timer();


        ScreenFlip();
    }
    DxLib_End();
    return 0;

}


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

Name: ookami  ..プログラマー(36,246ポイント)   Date: 2010/07/21(水) 09:43   No:57032     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
誰もレスしてないようなので...

もうちょっと補足しないと回答が集まらないと思います。
例えば...
 ・どこが判定部分かよく分かりません。
   「//メイン判定ルーチン」のような気もしますが
   「MoveAreaPaint()」の中だし、ホントにここかなぁ...とか。
   3重forループだけどカウンタ a,b,c の意味が分からない、とか。
 ・各変数の意味がよく分かりません。
   Partの中身とか、
   int FPX[7];int FPY[7];int Way;//移動経路座標と移動するマス数
   の「移動経路座標」というのもよく分かりません。
   「Command1.enableの値をどうするのか分かりません」と言われても、
   その変数をどういうつもりで使うのかが分からなければ、何とも言えません。
   (enableそのものは、VBなら ボタンの有効/無効(灰色表示でクリックできなくする)のフラグです。)
 ・テスト用のコード?
   MX=rand()%10; 
   MY=rand()%10; 
   では、「自分の座標をランダムに移動する」と言うことだと思いますが、
   たぶんテスト用のコードなんですよね。

など、まぁ全体的に分かりにくくてレスが無いんだろうなと。
がんばってくださいw


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

Name: ぽこ  ..上級者(23,596ポイント)   Date: 2010/07/21(水) 23:03   No:57094     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
元のソースは何処にあります?


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

Name: TKOZ  ..比類無きプログラマー(76,235ポイント)   Date: 2010/07/22(木) 16:42   No:57150     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
ここです。
ttp://kone.vis.ne.jp/program/#sample10
(先頭のhを抜いてあります)


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

Name: softya [URL]  ..ハッカー(186,889ポイント)   Date: 2010/07/22(木) 19:45   No:57171     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
参考になりそうなサイトを紹介しておきます。
「シミュレーションゲーム作成工房」
http://www.jyouhoukaiseki.com/
こちらもVB,VBAのサイトです。説明が丁寧なので分かりやすいと思います。


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

Name: ぽこ  ..上級者(23,803ポイント)   Date: 2010/07/23(金) 01:05   No:57208     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
> ここです。
> ttp://kone.vis.ne.jp/program/#sample10
> (先頭のhを抜いてあります)

提示ありがとうございます。
今日の夜に見てみます。


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

Name: ぽこ  ..上級者(24,087ポイント)   Date: 2010/07/23(金) 23:03   No:57310     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
とりあえず、自分なりに直してみました。
元プログラムを動かせなかったので、多分こうだろうなぁと、
想像していますんで、期待と違っていたらすみません。

あと、かなりバギーな作りになっております。

#というのも、TKOZさんの移植プログラムをとVBの元ソース見ながら、
#私が想像で書き直したので、現状、何処に原因があるか絞り込みづらい状況です^^;

まあ、それでも雰囲気はつかめると思います。。

取り敢えず、中間報告ってことで。
#最終報告は期待しないでください。諦めるかもしれないんで。


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

Name: ぽこ  ..上級者(24,161ポイント)   Date: 2010/07/24(土) 00:45   No:57334     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
多分、完成です。

----追記

私が1箇所(2箇所だったかな?)、配列の範囲ミスをしてました。
TKOZさんは1箇所、移動経路検索処理でのdo-while文の継続条件が間違ってました。

----追記2
#質問に答えてなかった。。

 Command1_Click()は単純にマップの初期化と一番最初の表示を行っているだけだったので、
初期化ルーチンInit()に組むこみました。

Timer1_Timer()は、200ミリごとにVBのランタイムから呼ばれ、キャラ移動時に経路を順に表示する処理を行っています。

Timer1_Timer()はVBのランタイムが呼び出すタイミングを図ってくれるのですが、
DXライブラリには(私が知る限り)そういうことができるフレームワークが無いので、
自分でタイミングを図ってTimer1_Timer()が行っている処理を実行する必要があります。

なので、私が提示したソースコードでTimer1_Timer()に該当する関数、GetNextPart()の内部に
カウンタを用意し、一定カウントを超えた場合に実際の処理を行っています。
 編集済み


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

Name: ぽこ  ..上級者(24,210ポイント)   Date: 2010/07/24(土) 01:22   No:57341     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
う〜ん、まだちょっとバギーな感じです。
#いろんな配列の境界を間違っているのがアリアリなんですが。。
大体の方向性は示せていると思うので、申し訳ありませんが、これ以上は修正しません。


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

Name: TKOZ  ..比類無きプログラマー(76,303ポイント)   Date: 2010/07/24(土) 21:51   No:57416     
Title: Re:クォータービューの移動範囲を求め、移動するアルゴリズムについて    
ぽこさんへ

サンプルの動作確認しました。ありがとうございます。
これを基にして、クォータービューに実装していきたいと思います。


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



Name: よつどもえ  ..かけだし(1,007ポイント)   Date: 2010/07/24(土) 20:54   No:57406       
Title: デストラクタ    
(この記事は管理人が復元しました)

もうひとつ質問です。
次のプログラムで
#include<iostream>
#include<cstring>

using namespace std;

class Musician{
public:
       ~Musician();    //非仮想デストラクタ:多様クラスについては推奨されない
       //・・・
};
Musician::~Musician() {cout<<musician being destroyed \n;}

class Trumpeter:public Musician{
public:
       ~Trumpeter();   //これも非仮想デストラクタ
}
Trumpeter::~Trumpeter() {cout<<trumpeter being destroyed \n;}

int main(){
       Trumpeter *pt;
       Musician *pm;

       pt=new Trumpeter;       //TrumpeterはTrumpeterへのポインタにより指されている
       delete pt;      //ok:まずtrumpeter being destroyedをプリント
                               //次にmusician being destroyedをプリント

       pm=new Trumpeter;       //TrumpeterはMusicianへのポインタにより指されている
       delete pm;                      //問題:musician being destroyedだけをプリント
}
をコンパイルしましたが、
Trumpeter::~Trumpeter : デストラクタ には戻り値の型を指定できません。
というエラーが出ました。
授業でやった通りのことを写したんですができません。
どなたか教えてください。


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


Name: スキマ妖怪  ..入門者(2,956ポイント)   Date: 2010/07/24(土) 21:04   No:57408     
Title: Re:デストラクタ    
ケアレスミスでしょうけど。

class Trumpeter:public Musician{ 
// ...


じゃなくて

class Trumpeter:public Musician{ 
// ...
} ;


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

Name: ぽこ  ..プログラマー(25,463ポイント)   Date: 2010/07/24(土) 21:07   No:57409     
Title: Re:デストラクタ    
> 授業でやった通りのことを写したんですができません。

授業でエラーが出ていなかったのなら、写し間違いです。
パッと見、
> class Trumpeter:public Musician{
> public:
>     ~Trumpeter();    //これも非仮想デストラクタ
> }

ここの最後にセミコロン(;)がありませんが、それが原因では?

#前の問題が解決したら、解決ボタン押しておきましょうね。


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

Name: 名無し  ..初心者(5,694ポイント)   Date: 2010/07/24(土) 21:21   No:57410     
Title: Re:デストラクタ    
class Trumpeter:public Musician{
public:
    ~Trumpeter();    //これも非仮想デストラクタ
}

クラスの最後に;セミコロンがない。
最初はよくあることかもしれない。
クラスはヘッダーに宣言をするのをおすすめする。

あと、ここで聞くのもいいけど、C++の本を買って読むことを進めます。


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

Name: よつどもえ  ..かけだし(1,042ポイント)   Date: 2010/07/24(土) 21:37   No:57412     
Title: Re:デストラクタ    
ありがとうございます。

すいません、焦って見落としていました。


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

Name: よつどもえ  ..かけだし(1,042ポイント)   Date: 2010/07/24(土) 21:39   No:57415 解決!     
Title: Re:デストラクタ    
。。

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



Name: よつどもえ  ..ぴよぴよ(378ポイント)   Date: 2010/07/24(土) 10:35   No:57352       
Title: 仮想関数の宣言    
(この記事は管理人が復元しました)

#include<iostream>
using namespace std;

class Musician{
public:
       virtual void play();    //仮想関数
       int experience();       //非仮想関数
       virtual int practice(int how_long);     //仮想関数
};

class BrassMusician:public Musician{
public:
       //play()は宣言されない、Musicianバージョンを継承する
};
class Trumpeter:public BrassMusician{
public:
       virtual void play();    //play()は再宣言される、そのため上書き使用をしなければならない
};      //再宣言のvirtualは任意

void Trumpeter::play() {/*・・・*/}        //これを宣言したため、定義しなければならない

class Musician{
public:
       virtual void setVolume(int value);
};
class Trumpeter:public Musician{
public:
       void setVolume(int long);       //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている
};

int main(){
       Musician *pm=new Trumpeter;
       pm->setVolume(5);       //問題:pmはTrumpeterインスタンスを指しているが、Musician::setVolume()を起動
       delete pm;
}

プログラミングの授業でこのプログラムを通そうとしたのですが、
次のようなコンパイルエラーが出ました。
Musician : class 型の再定義
Musician の宣言を確認してください。
Trumpeter : class 型の再定義
Trumpeter の宣言を確認してください。
 認識できない型 Trumpeter が使われています。
直前のエラーを修復できません。コンパイルを中止します。

ある程度できているソースコードに手を加えてプログラムを完成させるという
授業なのですが、これらのコンパイルエラーがわかりません。
どなたか解答お願いします。


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


Name: ぽこ  ..上級者(24,266ポイント)   Date: 2010/07/24(土) 10:43   No:57353     
Title: Re:仮想関数の宣言    
Musicianというクラスが2つ定義されてますよ。
一つにまとめることはできないのですか?


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

Name: よつどもえ  ..ぴよぴよ(762ポイント)   Date: 2010/07/24(土) 15:56   No:57393     
Title: Re:仮想関数の宣言    
ありがとうございます。
自分でも少しいじってエラーはほとんどなくなりましたが、

#include<iostream>
using namespace std;

class Musician{
public:
    virtual void play();    //仮想関数
    int experience();    //非仮想関数
    virtual int practice(int how_long);    //仮想関数
    virtual void setVolume(int value);
};

class BrassMusician:public Musician{
public:
    //play()は宣言されない、Musicianバージョンを継承する
};
class Trumpeter:public BrassMusician{
public:
    virtual void play();    //play()は再宣言される、そのため上書き使用をしなければならない
};    //再宣言の"virtual"は任意

void Trumpeter::play() {/*・・・*/}    //これを宣言したため、定義しなければならない

public:
    void setVolume(int long);    //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている

/*class Trumpeter:public Musician{
public:
    void setVolume(int long);    //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている
};*/

int main(){
    Musician *pm=new Trumpeter;
    pm->setVolume(5);    //問題:pmはTrumpeterインスタンスを指しているが、Musician::setVolume()を起動
    delete pm;
}

こう直した時に下のpublicの構文エラーが出ます。
public:
    void setVolume(int long);    //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている
どうすれば直るでしょうか?
教えてください。


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

Name: ぽこ  ..プログラマー(25,066ポイント)   Date: 2010/07/24(土) 16:05   No:57394     
Title: Re:仮想関数の宣言    
> こう直した時に下のpublicの構文エラーが出ます。
> public:
>     void setVolume(int long);    //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている
> どうすれば直るでしょうか?

仮引数名にlongは使用できません(C++のキーワードなので)。
Musicianクラスと同じvalueにしてはどうですか?


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

Name: よつどもえ  ..ぴよぴよ(820ポイント)   Date: 2010/07/24(土) 16:42   No:57398     
Title: Re:仮想関数の宣言    
中をvalueに変えてもpublic:の構文エラーが出てしまいます。

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

Name: ぽこ  ..プログラマー(25,177ポイント)   Date: 2010/07/24(土) 16:57   No:57399     
Title: Re:仮想関数の宣言    
> こう直した時に下のpublicの構文エラーが出ます。
> public:
>     void setVolume(int long);    //誤り:Musician::setVolume()を上書きしたいが、パラメータの型が違っている
> どうすれば直るでしょうか?

クラスTrumpeterの定義の中に入れてください。

class Trumpeter:public BrassMusician{ 
/*ここに入れる*/
};


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

Name: よつどもえ  ..ぴよぴよ(868ポイント)   Date: 2010/07/24(土) 20:12   No:57405     
Title: Re:仮想関数の宣言    
すいません、返事が遅れました。

ありがとうございました。
Trumpererのクラス定義に入れたらエラーがなくなりました。


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

Name: よつどもえ  ..かけだし(1,037ポイント)   Date: 2010/07/24(土) 21:39   No:57414 解決!     
Title: Re:仮想関数の宣言    
。。

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



Name: ムンバ  ..中級者(9,631ポイント)   Date: 2010/07/24(土) 21:24   No:57411 解決!       
Title: メールサーバーソフトについて(雑談)    
こんばんは!
散々、ご迷惑&お世話になりながら、ご無沙汰してしまい申し訳御座いませんでした。

また、C(プログラム)の質問では無いので恐縮なのですが
こちらのサイトの掲示板にいらっしゃる方で
メールサーバーソフトについて詳しい方がいらっしゃいましたら、ご意見頂けたらと思います。

最近、パソコンを(BIOSも含め)クリアな状態にして、色々と遊んでいます。
そこで、前回使っていたメールサーバーソフト「Radish3」をダウンロードしようと思い
検索エンジンで探したのですが、本家が見つかりませんでした。
それ以前は、「ArGoSoft Mail Server」というソフト(英語)を使っていました。
両方とも、通常使用している範囲内では特に問題無く動作していました。

↓以前から、参考にしてるサイトや今回検索したサイトです。

http://sakaguch.com/

http://www.kent-web.com/

http://www.asahi-net.or.jp/~ai2h-ykmz/tech/mail_svr.htm

http://mizushima.ne.jp/Windows/Mail/Mail-menu.php

その他、メールサーバーソフトがたくさんあって
どれを使ったら良いのか迷ってしまいました。^^;
OSは、Windows7(Pro 32bit)です。

重視したい点は

1.歴史がある。(昔?から有名で、ヴァージョンアップなど、ちょくちょく更新してる。など)
2.セキュリティ面に強い。(素人なので、可能な限り攻撃を受けたくない。など)
3.英語版しかなくても、日本語で解説されているサイトが多い。(私の様なバカでも設定が解り易い。など)

お勧めのメールサーバーソフトがありましたら、ご紹介頂けないでしょうか?
またまたプログラミングとは無関係で申し訳無いのですが
何卒、宜しくお願い致します。

---編集・追加---
フリーウェアで、お願いします。

自己解決しました。
お騒がせしました。失礼します。 編集済み


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




Name: taketoshi  ..ぴよぴよ(369ポイント)   Date: 2010/07/24(土) 13:10   No:57363       
Title: 非常に下らない質問なのですが    
現在VisualStdio2008でC言語を用いてWINAPIの勉強をしています。

WINAPIの中にWM_PAINTやEM_SETSELなど。各種メッセージコマンドが出てきますが
冒頭についているWMってなんの略なのでしょうか?WindowMessageなのかなと勝手に推測していますが
WINAPIはメッセージが有りすぎて、どれがどのメッセージだか判らず覚えるのに苦労しています。

なんの略なのか教えていただければ理解も進むと思いますので
各種メッセージの略について判る方、お答えお願いします。


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


Name: シエル  ..プログラマー(32,822ポイント)   Date: 2010/07/24(土) 13:23   No:57364     
Title: Re:非常に下らない質問なのですが    
何の略かは私も分かりませんが、勝手にWindowMessageの略だと思ってます。

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

Name: fatens  ..上級者(15,952ポイント)   Date: 2010/07/24(土) 13:30   No:57366     
Title: Re:非常に下らない質問なのですが    
MSDNに、こんな表がありました(英語)。
http://msdn.microsoft.com/en-us/library/ms644927%28v=VS.85%29.aspx


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

Name: シエル  ..プログラマー(33,466ポイント)   Date: 2010/07/24(土) 13:39   No:57368     
Title: Re:非常に下らない質問なのですが    
Window[s]Messageでしたか。。。
まあ、あんまり気にしたことないですけどw


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

Name: taketoshi  ..ぴよぴよ(396ポイント)   Date: 2010/07/24(土) 13:52   No:57371 解決!     
Title: Re:非常に下らない質問なのですが    
おお。この一覧は勉強になります。
EMはエディットコントロールメッセージでしたか・・。なるほど。


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

Name: けえぼお  ..かけだし(2,137ポイント)   Date: 2010/07/24(土) 16:14   No:57396     
Title: Re:非常に下らない質問なのですが    
こんな表があったなんて・・
地味にありがたいです


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

Name: fatens  ..上級者(16,008ポイント)   Date: 2010/07/24(土) 19:13   No:57404     
Title: Re:非常に下らない質問なのですが    
私もこの質問がなければ調べることはなかったと思います。
お役に立てたのならこちらとしても幸いです。


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



Name: ぽこ  ..プログラマー(25,147ポイント)   Date: 2010/07/24(土) 16:26   No:57397       
Title: 【26章】龍神録プログラミングの館    
お世話になっております。
掲題にある箇所での質問です。

この章では、ボスを動かす関数であろうmove_boss_pos()が追加されています。
んが、何処からも呼ばれていません。

どこに挿入するのが妥当でしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,236,522ポイント)   Date: 2010/07/24(土) 18:13   No:57402     
Title: Re:【26章】龍神録プログラミングの館    
まだ26章では使わないようです。
27章から弾幕の話になりますが、そこから使い始めています。
多分27章からは弾幕の話ばかりになるので、26章のうちに必要な関数を揃えておこうとしたんだと思います。

以下27章のH001弾幕の中身一部

void boss_shot_bulletH001(){
#define TM001 60
    int i,k,t=boss_shot.cnt%TM001,t2=boss_shot.cnt;
    static int cnum;
    double angle;
    if(t2==0)
        cnum=0;
    if(t==0){
        boss_shot.base_angle[0]=bossatan2();
        if(cnum%4==3){
            move_boss_pos(40,30,FMX-40,120,60, 60);
        }
    }
・・・・


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

Name: ぽこ  ..プログラマー(25,148ポイント)   Date: 2010/07/24(土) 18:16   No:57403 解決!     
Title: Re:【26章】龍神録プログラミングの館    
回答ありがとうございます。
これで、解決とします。


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



Name: しろ  ..ぴよぴよ(489ポイント)   Date: 2010/07/23(金) 07:31   No:57209       
Title: 社会人の方へ質問です(雑談です)    
社会人の方でプログラマーが本職ではない方へ質問です。

プログラムする時間ってどうやってとってますか?

自分も社会人なのですが、仕事からの帰宅時間が平均10時半過ぎということもあり、なかなか時間がとれません。土日に集中してやるようにはしているのですが……。

皆さんの時間の使い方の秘密など、いろいろと教えてください。平均の睡眠時間など……もちろん学生の方や本職の方の意見なども大歓迎です。よろしくお願いいたします。


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


Name: toyo  ..熟練のプログラマー(54,341ポイント)   Date: 2010/07/23(金) 09:34   No:57210     
Title: Re:社会人の方へ質問です(雑談です)    
お客さんの来ない仕事の合間にチョコチョコとやることが多いですね
ネットのsubversion使うと自宅と職場の両方で簡単に管理できて便利です


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

Name: 組木紙織  ..比類無きプログラマー(90,620ポイント)   Date: 2010/07/23(金) 10:21   No:57211     
Title: Re:社会人の方へ質問です(雑談です)    
学生です。
情報科ではないですけど、昼間はプログラム書くことが多いです。

趣味用のプログラムは帰宅してから(遅くて10半頃)、午前2時までの間の時間に書いてます。
起床は7時ぐらい。


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

Name: たかぎ [URL]  ..ハッカー(215,282ポイント)   Date: 2010/07/23(金) 12:14   No:57216     
Title: Re:社会人の方へ質問です(雑談です)    
ある意味、本職でやっているのにプログラミングの時間がなかなかとれていません。

雑務(人事とか総務とか経理とか)が多く、非常勤講師と執筆の仕事でかなりの時間を持っていかれます。
最近は営業をサボっているのでまだましですが、それでも営業や広報の活動もゼロにはなりません。
その上で、新規開発3件と既存の成果物のメンテナンスをいくつか抱えています。
開発の仕事も、打ち合わせやら、調査やら、管理やらでほとんどの時間を使います。
私はいつプログラミングすればよいのか(プログラミングしなければ、もちろん開発は終わりません)教えて欲しいぐらいです。
# 仕事があるだけましなのですが...


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

Name: やっくん  ..プログラマー(32,336ポイント)   Date: 2010/07/23(金) 15:54   No:57237     
Title: Re:社会人の方へ質問です(雑談です)    
情報科の学生ですが、講義でのプログラムは数えるほどしか組まないです。

プログラム組むときはできるだけまとまった時間が欲しいので、寝る時間を極力削って自分のプログラムを組んでいます。
その分、どこかで寝る時間は確保をしています。
休憩時間や帰宅後など。

プログラマーは多少無理しても体を壊さないための体力作りと食事の栄養バランスが重要かと思い、日々気をつけています(^^;


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

Name: dic  ..比類無きプログラマー(87,769ポイント)   Date: 2010/07/23(金) 16:42   No:57246     
Title: Re:社会人の方へ質問です(雑談です)    
社会人といっていいのか微妙な立場ですが
出勤8時としたら6時ごろに起きて1時間かるくプログラムします
朝なので、とても静かで集中でき、とても効率がいい時間だと自分では思ってます

微妙な社会人なので、たまに暇な時間帯ができるので、その時間帯に
集中してやりますね

ありきたりですが、ダラダラやるのと集中して短時間でやってしまうのでは
効率も違うし、頭にもいいです


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

Name: だいちゃん  ..かけだし(1,021ポイント)   Date: 2010/07/23(金) 17:31   No:57263     
Title: Re:社会人の方へ質問です(雑談です)    
一応本職のものです^^;

現在社内教育訓練という形でjavaの勉強をしております
教育訓練ということで研修とは違うので
学校の授業のように2か月分くらいスケジュールが用意されています
なのでその日の分が終わったらjavaでもCでも自由に作ってます

もちろんjavaの研修を先に進めてもいいんですが
javaはほとんど初心者なので毎朝のミーティングで講義を受けないと
やることがわかんないので無知識で進んで無駄に時間を過ごすよりは
C言語とか自分で煮詰められるものを学習してます

その際に実際にプログラミングすることが多いですが
掲示板サイトを回って困っている人のやつを作ってみることが多いです
この掲示板でもそうですしYahoo知恵袋とか(こういうと失礼ですが知恵袋は質問の質が低いです)

ちなみに今も仕事中です♪笑


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

Name: 御津凪 [URL]  ..ハッカー(146,170ポイント)   Date: 2010/07/23(金) 17:44   No:57268     
Title: Re:社会人の方へ質問です(雑談です)    
> だいちゃん さん
それを言うなら私も「現在仕事中」と書いておきます。(本職ゲームプログラマーです)

現在プロジェクトとして最終段階であり、毎日終電帰り状態です。
そのため、自由にできる趣味の時間もこの期間には1時間もありません。(土日もほとんど仕事で潰れてます)
代わりに仕事の合間(スタンバイ時)に趣味のプログラミングを持ってきてますけどね。

平時では自由な時間が3〜4時間あるので、
他の趣味と一緒にプログラミングしてます。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,333ポイント)   Date: 2010/07/24(土) 00:52   No:57335     
Title: Re:社会人の方へ質問です(雑談です)    
みつなぎさんは忙しそうですね〜;
一緒にツーリングに行く話はいつになるのやら(笑

> しろさん

私は職業がプログラマーなので、このトピックにはふさわしくないかもしれませんが、
私も仕事が終わってからプログラムをよく書いています。

仕事が夜遅くなる事は無いのですが、他の用事でなかなか時間が取れない事が多いです・・;

ずっとゲーム制作ばかりやっていた私ですが、
「既にある知識内で作るゲーム」になってしまっているなと思ったので、最近はしばらく学ぶ事に徹しています。
最近ARに興味があり、OpenCVやARToolKitをはじめとした画像処理で何か面白い事が出来ないか日々考えています。

さしあたりカメラに向かってリアル世界とコンピュータでじゃんけん出来るようになったりはしましたが、
まだ誰得レベルの物しか作れていません。
なかなか画像処理で面白い実用レベルの物を作るのは難しいですね〜^^;

何が言いたいかと言うと、最近はプログラムを書く時間もありますが、専門書や面白そうな研究論文を読んでいる時間も結構あります。
そこで、短時間で、PCを起動するほどは時間が無い・・と言う時はそういう専門書などで知識を蓄えてはいかがでしょう?
面白い研究論文を公開しているところもあるので、そういうのを読むのも刺激になると思います。

自分が詳しくない分野などに手を出すと試行錯誤する時間がかなり多いと思います。
最初実行環境をそろえるだけでも設定方法がよくわからなくて1日つぶれたりなんてこともよくありますし。
ですので、ちょっとした時間に本で知識を蓄えて試行錯誤の無駄な時間を削減するという意味でもありではないかと思います。

毎日帰りが深夜になると、さすがに毎日プログラムを書くのはしんどいでしょうから読み物で代用するという手もあるのではないかと思いました。


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

Name: しろ  ..ぴよぴよ(433ポイント)   Date: 2010/07/24(土) 18:12   No:57401 解決!     
Title: Re:社会人の方へ質問です(雑談です)    
お忙しい中たくさんのご回答いただきありがとうございます。

皆様方いろんなところで時間のやりくりをしてプログラムをしているのですね。
大変参考にさせていただきました。
自分もうまく調整してプログラムの時間を確保したいものです。

投稿して2日目ですので、一応これで解決とさせていただきます。
重ね重ねどうもありがとうございました。


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



Name: 1EC10XXX  ..ぴよぴよ(305ポイント)   Date: 2010/07/24(土) 14:58   No:57383       
Title: ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
失礼いたします。
http://www.play21.jp/board/formz.cgi?action=res&resno=56376&page=&lognum=173&id=dixq&rln=56562
についての質問です。

問題:レポートの得点が記録されたプログラムがある。これからデータを読み取り、平均、標準偏差、最大値、最小値を求めるプログラムを求めなさい。 



ページ中のサンプルプログラムで、プログラムから100個の乱数を発生させるのではなく、 
例えば 
54 
65 
78 
95 
・ 
・ 
・ 
のように特典が記録されたテキストファイルから平均、標準偏差、最大値、最小値を求める方法を教えてください。 
平均の分母の数は100ではなくテキストファイルの行数(=サンプルの数)です。 
どうかよろしくお願いします。


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


Name: ぽこ  ..プログラマー(25,092ポイント)   Date: 2010/07/24(土) 15:20   No:57387     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
ぶっちゃけ言えば、そのリンク先に答えがあります。
疑問点をもう少し掘り下げていただけませんか?


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

Name: 1EC10XXX  ..ぴよぴよ(432ポイント)   Date: 2010/07/24(土) 15:31   No:57389     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
駄文で申し訳ありません。
早い返信、ありがとうございます。

サンプルプログラムでは平均を出すとき、average=sum/100.0という風に総合計値/100を計算しています。
私が質問したいのは、
テキストファイルを乱数を発生させて書き換えないという条件で、与えられたテキストファイル(サンプル数は100とは限らない)にある得点サンプル数をどのように定義すればいいのか、ということです。

お願いします。 編集済み


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

Name: ぽこ  ..プログラマー(25,004ポイント)   Date: 2010/07/24(土) 15:39   No:57390     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
サンプル数を記録する変数を用意し、
テキストファイルからサンプルを一つ読み出すたびに、上記変数を1ずつ増やしていくと、
テキストファイルからの読み込みが終了したときに、上記変数に読み込んだサンプル数が
記録されています。


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

Name: 1EC10XXX  ..ぴよぴよ(502ポイント)   Date: 2010/07/24(土) 15:45   No:57391     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
回答ありがとうございます。
サンプル数を記録する変数を具体的に教えていただけないでしょうか。
手とり足とり申し訳ありませんが、どうぞよろしくお願いします。


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

Name: ぽこ  ..プログラマー(25,036ポイント)   Date: 2010/07/24(土) 15:51   No:57392     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
ソースにはないんで、自分で用意してください。
名前はコンパイルが通るならどんな名前でも結構です。


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

Name: 1EC10XXX  ..ぴよぴよ(532ポイント)   Date: 2010/07/24(土) 16:11   No:57395     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める問題    
分かりました…
がんばってやってみます。
ありがとうございました。


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



Name: シエル  ..プログラマー(32,467ポイント)   Date: 2010/07/24(土) 11:24   No:57354       
Title: C++についての質問    
いつもお世話になっております。シエルです。
C++の良さを知って、C++を勉強中なのですが、c++のクラスについて質問があります。
ネットのサンプルを色々見ていると、
下記のようなAとBのヘッダファイルがあり、Bのヘッダファイルの中に
【class A;】というようなコードがありました。
このコードはBのヘッダファイルにおいて、どのような効果があるのでしょうか?
ご教授お願い致します。
ちなみにBのヘッダファイルではAのヘッダファイルのインクルードは行われておりませんでした。

/////A.h///////////////
class A {
public
 A();
};
///////////////////////


/////B.h////////////////
class B {
public
 B();
};

class A;←こいつのことです!
/////////////////////////


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


Name: ぽこ  ..上級者(24,323ポイント)   Date: 2010/07/24(土) 11:42   No:57356     
Title: Re:C++についての質問    
クラスAのメンバにクラスBを持たせて、
クラスBのメンバにクラスAを持たせて、
かつ
コンパイルが通る、
ソースを書いてみてください。
その時に、class A;という記述の意義が分かります、多分。


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

Name: シエル  ..プログラマー(32,543ポイント)   Date: 2010/07/24(土) 11:49   No:57357     
Title: Re:C++についての質問    
ぽこさん。ありがとうございます。

色々試したみたんですが、
class A;という記述は「AのヘッダファイルのクラスAだけをインクルードしている」
というような意味ということでしょうか?


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

Name: ぽこ  ..上級者(24,388ポイント)   Date: 2010/07/24(土) 11:56   No:57358     
Title: Re:C++についての質問    
コンパイル通せました?

クラスBの中にあるAという識別子がクラスAですよ、っという情報だけを与えています。
クラスAの定義の情報は与えません。

#構造体に関して、同じようなものがC言語でもありますよ。
 編集済み


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

Name: シエル  ..プログラマー(32,802ポイント)   Date: 2010/07/24(土) 12:08   No:57359     
Title: Re:C++についての質問    
コンパイルは通せました。

>クラスBの中にあるaという変数がクラスAですよ、っという情報だけを与えています。 
>クラスAの定義の情報は与えません。

【質問1】
クラスBの中で、
クラス「A」という型が使えるようになるってことですか?

【質問2】
class A;
↑何故こう書くだけで「A.h」というファイルの中のクラスAの情報を見にいけるのでしょうか?
Bのヘッダファイル内ではクラスAの情報は「A.h」の中にあるという情報は与えていませんよね?

【質問3】
なぜ単純にAのヘッダファイルをインクルードせずに、このようなやり方をするのでしょうか?

>#構造体に関して、同じようなものがC言語でもありますよ。

教えていただけるとありがたいです。


質問ばかりですみませんが、よろしくお願いいたします!


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

Name: ぽこ  ..上級者(24,424ポイント)   Date: 2010/07/24(土) 12:20   No:57360     
Title: Re:C++についての質問    
【質問1】 
No。使えません。使うにはクラスAの定義が必要です。

【質問2】 
「見に行っていない」と考えるのが自然です。

【質問3】 
私が先程シエルさんに提示した、相互参照を行う場合に
ヘッダファイルをインクルードすることは、問題の解決になりません。


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

Name: たかぎ [URL]  ..ハッカー(215,562ポイント)   Date: 2010/07/24(土) 12:56   No:57362     
Title: Re:C++についての質問    
class A; のような不完全宣言を行った場合、Aのポインタや参照であれば使うことができます。
しかし、メンバを参照することも、A型のオブジェクトを生成または解体することもできません。


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

Name: シエル  ..プログラマー(33,444ポイント)   Date: 2010/07/24(土) 13:37   No:57367     
Title: Re:C++についての質問    
う〜ん。頭悪いのでよく分からないですね^^;
下記のようなb.cppがあった場合、Aのインスタンスは作成できなくて、そのメンバの関数も
呼べないってことでしょうか?

/////A.h/////////////// 
class A { 
public 
 A();
 void testa();
}; 
/////////////////////// 


/////B.h//////////////// 
class A;

class B {
 A *a;
public 
 B();
 void testb();
};
/////////////////////////

//////B.cpp//////////////
#include "B.h"

void B::testb()
{
  a=new A;
  a.testa();←このような呼び出し方は出来ないということでしょうか?
}
/////////////////////////


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

Name: たかぎ [URL]  ..ハッカー(215,553ポイント)   Date: 2010/07/24(土) 13:44   No:57369     
Title: Re:C++についての質問    
> 下記のようなb.cppがあった場合、Aのインスタンスは作成できなくて、そのメンバの関数も 
> 呼べないってことでしょうか? 

そういうことです。


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

Name: シエル  ..プログラマー(33,481ポイント)   Date: 2010/07/24(土) 13:48   No:57370     
Title: Re:C++についての質問    
う〜ん;
それではclass A;は何の役に立つのでしょうか?
どういうときに使うのでしょうか?


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

Name: softya [URL]  ..ハッカー(187,071ポイント)   Date: 2010/07/24(土) 13:53   No:57373     
Title: Re:C++についての質問    
ヘッダのインクルードに優先順位が必要になったり、お互いにクラスを参照していた場合には問題が起こりますので、それを避ける目的で使います。あと、無闇なヘッダ内のヘッダインクルードを防ぐ効果もありますね。

下記のように書いたときにエラーが出ない方法を色々試してみると分かります。

/////A.h////////////////  
class A
{
public:
    A(void);
    ~A(void);

    B *b;
};

/////B.h////////////////  
class B
{
public:
    B(void);
    ~B(void);

    A *a;
};



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

Name: softya [URL]  ..ハッカー(187,217ポイント)   Date: 2010/07/24(土) 13:55   No:57374     
Title: Re:C++についての質問    
それと

//////B.cpp////////////// 
#include "B.h"
#include "A.h"

void B::testb()
{
  a=new A;
  a.testa();←これならOK
}
/////////////////////////

ためしてみてください。 編集済み


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

Name: ぽこ  ..上級者(24,496ポイント)   Date: 2010/07/24(土) 13:59   No:57375     
Title: Re:C++についての質問    
> それではclass A;は何の役に立つのでしょうか?
> どういうときに使うのでしょうか?

相互参照する2つのクラスをコンパイルできたんですよね?
class A;やclass B;のどちらか、もしくは両方を削除してみれば分かりますよ。


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

Name: softya [URL]  ..ハッカー(187,252ポイント)   Date: 2010/07/24(土) 14:06   No:57376     
Title: Re:C++についての質問    
ぽこさんの件と合わせと補足します。
もし
class A;
class B;
という書き方を知らなかったら、どうやって書きますか?

下記のものに
class A;
class B;
という書き方を使わずにエラーをなくしてみてください。

/////A.h////////////////  
class A
{
public:
    A(void);
    ~A(void);

    B *b;
};

/////B.h////////////////  
class B
{
public:
    B(void);
    ~B(void);

    A *a;
}; 


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

Name: たかぎ [URL]  ..ハッカー(215,750ポイント)   Date: 2010/07/24(土) 14:11   No:57377     
Title: Re:C++についての質問    
> それではclass A;は何の役に立つのでしょうか? 
> どういうときに使うのでしょうか?

相互参照というのはどちらかといえば特殊なケースです。

例えば、<stdio.h>のFILE型を考えてみてください。

class FILE;

FILE* fopen(const char*, const char*);
int fclose(FILE*);
int fgetc(FILE*);
int fputc(int c, FILE*);
int fputs(const char*, FILE*);
char* fgets(char*, int, FILE*);
...

のように、FILE型のメンバにアクセスすることも、FILE型の生成・解体を直接行うこともできないけれども、十分意味のある機能を提供できますよね。

注)実際のFILE型はオブジェクト型でなければならないので、上記のような不完全型では要件を満たしません。


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

Name: シエル  ..プログラマー(33,819ポイント)   Date: 2010/07/24(土) 14:19   No:57379     
Title: Re:C++についての質問    
たかぎさん、softyaさん、ぽこさんありがとうございます!分かったかもしれません!
class A; 
class B;
という書き方を使わずに対応しようとすると、お互いのヘッダファイルをインクルード
しないといけなくなり、お互いにインクルードし続けてしまう状態が発生するということですかね?
だから、相手のクラスのポインタを定義するにはclass A;という書き方をして、Aという識別子が
クラスAであることを表して変数を定義するしかないと。

もしそうだとすると、下記のB.hはA.hをインクルードしていないのに、
class Aと書くだけで、なぜAというクラスの情報がA.hの中にあるということを認識してくれるのでしょうか?
なんか未定義エラーになってもおかしくないような気がするのですが。
コンパイラが勝手に探してくれると思っとけばいいですかね?
/////B.h////////////////  
class A; 

class B { 
 A *a; 
public  
 B(); 
 void testb(); 
}; 
///////////////////////// 


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

Name: ぽこ  ..上級者(24,872ポイント)   Date: 2010/07/24(土) 14:25   No:57381     
Title: Re:C++についての質問    
> もしそうだとすると、下記のB.hはA.hをインクルードしていないのに、
> class Aと書くだけで、なぜAというクラスの情報がA.hの中にあるということを認識してくれるのでしょうか?
> なんか未定義エラーになってもおかしくないような気がするのですが。
> コンパイラが勝手に探してくれると思っとけばいいですかね?

違います。
認識もしませんし、探索もしません。

たかぎさんが
「class A; のような不完全宣言を行った場合、Aのポインタや参照であれば使うことができます。 
しかし、メンバを参照することも、A型のオブジェクトを生成または解体することもできません。」

と書かれていますが、これが「何故できるのか」、「何故できないのか」を
よ〜く考えてください。
出来ないことはクラスの定義に関する情報(ヘッダファイルに記述されている情報)がないから
できないのです。
 編集済み


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

Name: シエル  ..プログラマー(34,145ポイント)   Date: 2010/07/24(土) 14:59   No:57384     
Title: Re:C++についての質問    
よ〜〜〜〜〜〜〜〜く考えました。なんとなく分かりました。ぽこさんありがとうございます。

class A;
↑つまりこう書くと「中身がないクラス」を作ったことになる。つまり不完全なクラス。
でもクラス自体は作れてるから、そのクラスのポインタは使える。
でも最終的には完全な状態のクラスAのメンバを呼び出して使用したいから、
softyaさんが提示してくだった下記コードのようにA.hを取り込むことによって、
クラスAのメンバが完全に定義されたことになり、クラスAのメンバを呼び出して
使用できるようになるというわけですね・・!
合ってますでしょうか?

//////B.cpp//////////////  
#include "B.h" 
#include "A.h" 

void B::testb() 

  a=new A; 
  a.testa();←これならOK 

///////////////////////// 


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

Name: ぽこ  ..プログラマー(25,062ポイント)   Date: 2010/07/24(土) 15:07   No:57385     
Title: Re:C++についての質問    
> class A;
> ↑つまりこう書くと「中身がないクラス」を作ったことになる。つまり不完全なクラス。
> でもクラス自体は作れてるから、そのクラスのポインタは使える。
> でも最終的には完全な状態のクラスAのメンバを呼び出して使用したいから、
> softyaさんが提示してくだった下記コードのようにA.hを取り込むことによって、
> クラスAのメンバが完全に定義されたことになり、クラスAのメンバを呼び出して
> 使用できるようになるというわけですね・・!
> 合ってますでしょうか?

合っています。
コンパイラの気持ちになれば、
「Aってのがクラス名ってのはわかるけどさぁ、Aのメンバがさっぱりわからないから、
 コンストラクタ呼出(生成)やメンバ関数呼び出しを行うコード書かれても、
 それが正しい記述か判断できないよ。」
ってことです。

----追記
ようやくプログラマになれた。
先は長いね。。 編集済み


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

Name: シエル  ..プログラマー(34,155ポイント)   Date: 2010/07/24(土) 15:16   No:57386 解決!     
Title: Re:C++についての質問    
合ってましたか!良かったです!
かなり考えて理解できたので、忘れないと思います。
今回の質問は非常に勉強になりました。

ぽこさん、softyaさん、たかぎさん、暑い中どうもありがとうございました!
本当に助かりました!
これにて解決にさせていただきます!


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

Name: ぽこ  ..プログラマー(25,092ポイント)   Date: 2010/07/24(土) 15:23   No:57388     
Title: Re:C++についての質問    
> ぽこさん、softyaさん、たかぎさん、暑い中どうもありがとうございました!

解決できて何よりです。
ホント暑いですよね。西日が差すから外より暑い。。。




Name: Horison.A  ..ぴよぴよ(89ポイント)   Date: 2010/07/24(土) 11:28   No:57355       
Title: 龍神録の#include "../include/GV.h"の設定    
visual studioの設定に関する質問だと思うんですけど
龍神録projectのソースコードにある
#include "../include/GV.h"
とか
#include "../../../include/DxLib.h"
は何処で設定して、インクルードしているのでしょうか?

前々から気になってたので、探したんですけど見つからなくて。

よろしくお願いします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,236,007ポイント)   Date: 2010/07/24(土) 12:33   No:57361     
Title: Re:龍神録の#include    
> Horison.Aさん

初めまして、こんにちは。

特に設定していませんよ。

「..」は「一つ上の階層へ」を意味します。
「include」はフォルダ名です。
自分が今いる位置からGV.hまでの位置を示しているだけです。

DXライブラリの標準的なVC++の設定はこちらをご覧ください。
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


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

Name: Horison.A  ..ぴよぴよ(387ポイント)   Date: 2010/07/24(土) 13:27   No:57365     
Title: Re:Re:龍神録の#include    
Dixq (管理人)さん、ありがとうございます。
..が「一つ上の階層へ」は初めて聞きました。

でもまだ腑に落ちないんです。
試しに新規project-sample01つくり、
↓の感じのようなディレクトリ構造にして、ビルドしたのですが

出力で
未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
と表示され
「システムでは指定されたファイルが見つかりません」となり、ビルドができません。

///////////////////////////////////////////////////////////////////////////
.../sample01/mydat/include/define.h
.../sample01/mydat/source/main.cpp
のような感じにして、

main.cpp

#include "../include/define.h"
void main(){
}

define.h
#include <stdio.h>

何が悪いのでしょうか?



    


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,236,126ポイント)   Date: 2010/07/24(土) 13:52   No:57372     
Title: Re:龍神録の#include    
Win32アプリケーションのプロジェクトでコンソール用のプログラムを実行しようとしているからではないですか?

DXライブラリのプロジェクトはWin32アプリケーション用のプログラムですが、
void main()から始まるプログラムはコンソールアプリケーションです。

コンソールアプリケーションは作った事ありますか?
もしなければこの辺参考にして下さい。
http://dixq.net/vcpp.html


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

Name: Horison.A  ..ぴよぴよ(472ポイント)   Date: 2010/07/24(土) 14:18   No:57378 解決!     
Title: Re:龍神録の#include    
ご返事ありがとうございます。

void main()はコンソール用なんですか。winアプリはこれが初めてで、気づきませんでした。

作り直してビルドしたら、きちんと通りました。
ありがとうございました。


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

Name: Dixq (管理人)  ..ウィザード(1,236,214ポイント)   Date: 2010/07/24(土) 14:25   No:57380     
Title: Re:龍神録の#include "../include/GV.h"の設定    
大して重要な事では無いですが、C言語には「コンパイルは通るが正しくない」という事がよくあります。
void mainもその一つで、正しくは「int main」なので一応覚えておくと良いかもしれません。


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



Name: 初心者  ..熟練のプログラマー(50,369ポイント)   Date: 2010/07/22(木) 23:03   No:57198       
Title: 以前ヒントを教えてもらったプログラムですが・・    
整数を入力して、小さい順に偶数、2,4,6・・・numと表示するプログラムを作ったのですが、
奇数を入力したときにこのプログラムだと表示しないことがわかりました。
よろしければいじるべき点を教えてください。

#include <stdio.h> 

int main(void)    

    int num,i;   

     i = 2;  

    printf("数値を入力してください:");     
    scanf("%d",&num);     
         
    while(i <= num )     
    {     
        if(num%2 ==0)     
            printf("%d\n",i);    
             
           i = i + 2;   
    }     
         
    return 0;     
}    



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


Name: パコネコ  ..上級者(19,298ポイント)   Date: 2010/07/22(木) 23:09   No:57199     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
>i = i + 2;
これは「i++」で十分です。

それと称号がすごいことなってますね…初心者って名前ダメなんじゃ…?
前来たことあるかもわからないし…名前は決めたほうがいいですよ。

==========
これ書いた意味ないですね。
勘違いしてしまいました。
これならもとのまま
if文削ればいいのに・・・
  編集済み


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

Name: ぽこ  ..上級者(23,788ポイント)   Date: 2010/07/22(木) 23:11   No:57200     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
ここです。

if(num%2 ==0)      
  printf("%d\n",i);     

どういじるかは、考えてください。


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

Name: パコネコ  ..上級者(19,328ポイント)   Date: 2010/07/22(木) 23:11   No:57201     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
ついでにもうひとつ
これ特に指定されてないならfor文のほうが向いてますよ。
指定されてるなら仕方ないけど。


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

Name: パコネコ  ..上級者(19,371ポイント)   Date: 2010/07/22(木) 23:14   No:57202     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
おぉ〜
if文がすごいことになってた…
でも奇跡的にprintf文はあってる…だからうごいたのか…


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

Name: パコネコ  ..上級者(19,391ポイント)   Date: 2010/07/22(木) 23:37   No:57204     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
これfor文なら一行でできそうですね…入力は別ですけど…

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

Name: だいちゃん  ..かけだし(1,386ポイント)   Date: 2010/07/23(金) 17:45   No:57269     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
まだ解決されていないようなので
質問者さんが来てくれると信じて回答

とりあえずこのプログラムって偶数を表示するプログラムですよね?
それで奇数を入力したら表示がされないのでいじるべき点を教えてほしいと

単にいじるべき点を教えてくださいと言われましても
いじるべき点はあるといえばたくさんあるしないといえばありません

理由としては質問者さんがこのコードを書き換えて
どういう結果にしたいのかが私達にはわからないから

こうすればこうなるよ
とか
ここはこう書きかえると見やすいね
とかはいくらでもありますが
それが質問者さんのしたいことではないならば何の意味も持ちません

例えば奇数を入力したとしても2以上で入力した数値よりも小さい偶数を全部表示したいとか
奇数を入力したら偶数を入力してくださいって打ち直させるのかなどなど

とりあえずやりたいことを教えてください
そうなるようにこちらとしては全力でサポートする姿勢です


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

Name: 初心者  ..熟練のプログラマー(50,223ポイント)   Date: 2010/07/23(金) 23:09   No:57311     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
そうですね、だいちゃんさんの言う、
奇数を入力したとしても2以上で入力した数値よりも小さい偶数を全部表示したい 
まさにこれですね^^
たとえば
45と入力して、2,4、6・・・44
46と入力して、2,4,6・・・46
と奇数ででも偶数ででもnumまでの偶数を表示してくれるプログラムです。
ただしforを使わずwhileとifを使わないといけません。
とりあえず今は、ぽこさんとパコネコさんのifいじりをちょっと考えてみます。 編集済み


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

Name: 初心者  ..熟練のプログラマー(50,288ポイント)   Date: 2010/07/23(金) 23:28   No:57312     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
if(num%2 ==0 || num-1%2==0)     
   printf("%d\n",i);  

これの場合、もしnumが3だったとして、num-1%2==0が2になるから、
2と表示されると思ったんですけど、駄目でした;


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

Name: パコネコ  ..上級者(22,108ポイント)   Date: 2010/07/23(金) 23:53   No:57317     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
なんか見当違いな気がします
ヒントとしては
numって値変わりませんよね。

/*
これの場合、もしnumが3だったとして、num-1%2==0が2になるから、 
2と表示されると思ったんですけど、駄目でした;
*/
これについても
num-1%2==0
ではなく
(num-1)%2==0
ではないですか?

確かにその方法でもできると思いますが…本当にnumを判定に使っていいんですね?

>ただしforを使わずwhileとifを使わないといけません。
残念…if文は使わないとだめでしたか。
ちなみに最初のプログラムからif文をなくすときれいにうごきます。
==============
何が言いたいのかというと、そのif文には意味がありません。
だって入力された数値が偶数ならiの値を出力
その条件に奇数の場合も付け加えたと、いう状態です。

つまり偶数でも奇数でもif文の条件を満たしてしまうのです。

ちなみに奇数の条件式?はnum%2==1です。

よ〜く考えてくださいね。




 編集済み


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

Name: 初心者  ..熟練のプログラマー(50,339ポイント)   Date: 2010/07/24(土) 00:08   No:57323     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
!!w
算数と一緒なんですね、かっこをつけない自分に恥ずかしく感じました・・。
if文をなくす、やってみます。


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

Name: 初心者  ..熟練のプログラマー(50,424ポイント)   Date: 2010/07/24(土) 00:19   No:57327 解決!     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
おかげさまでカッコ付、if文なし両方ででました^^
バコネコさんのようにシンプルにやるやり方もあったんですね。
参考になりました。ご協力してくださった方々、本当にありがとうございました。
 編集済み


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

Name: パコネコ  ..上級者(22,125ポイント)   Date: 2010/07/24(土) 00:22   No:57328     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
カッコつきってあれですか?

他の形とかは…


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

Name: パコネコ  ..上級者(22,319ポイント)   Date: 2010/07/24(土) 00:26   No:57329     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
解決付いちゃったので、一つだけ…
あのif文のままではあってもなくてもおんなじです。

if(i%2==0)
と、してほしかったのですが…残念です。
ちなみにこの場合「i++」になります。

もし時間に余裕がありましたら、3の倍数とかにもチャレンジしてみてください。
できればnの倍数ができたら、理解できたと言えるレベルだと思います。

あ、一つじゃなかったですね。すいません…


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

Name: 初心者  ..熟練のプログラマー(50,482ポイント)   Date: 2010/07/24(土) 00:28   No:57330     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
あっそうですね、if文で奇数、偶数両方のことを結局はさしてますね。
カッコ付wすいません、呼び方がわからないもんで・・。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,860ポイント)   Date: 2010/07/24(土) 00:34   No:57331     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
是非for文も覚えると良いので、for文でまず書いてみました。
この課題で重要なのは●●●の部分でしょう。

#include <stdio.h>  

int main(){
    int i, num;
    printf("数値を入力してください:");
    scanf("%d", &num);
    for( i=0; i<=num; i++ ){
        if( ●●● ){
            printf("%d\n",i);
        }
    }
    return 0;      
}
 

青部分を埋めればfor文版は完成です。
forとwhileは全く同じ動きに変換出来ますから、forが出来ればwhileにも出来ます。
さて、パコネコさんも仰っていますが、numは値が変わりませんね。
では、何が今刻一刻と変わっているのでしょう?
何の変数を判定に使わないといけないのでしょう?

もう一度考えてみて下さい。



うちの勝手な決まりなのですが、「初心者」という名前は使用禁止の名前になっています。
何故ならこの名前を使う方が沢山いて、誰が使っているか解らなくなってしまっているからです。
(現にポイント数が5万ポイントを超えています)
もしよければ自分だけの名前を決めて頂ければと思いますのでよろしくお願いします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,887ポイント)   Date: 2010/07/24(土) 00:35   No:57332     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
う・・のんびり書いているうちに話が進んじゃった^^;

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

Name: パコネコ  ..上級者(22,466ポイント)   Date: 2010/07/24(土) 00:37   No:57333     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
このプログラムを自分で理解できたと思うとこまで、できましたか?
(納得いくぐらい)
もしくは似たような問題を解けるぐらいに…
もし不安な部分があるようでしたら、
暇なときでいいので解いてみてください。

さっきのプログラムをいじって、
偶数の場合を2の倍数だとして
自分で入力した値「n」
その値の倍数の数値を出力してください。

これができれば十分です。
===========
あ、すいません
進めちゃいました。

 編集済み


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

Name: 脱初心者になりたい  ..ぴよぴよ(249ポイント)   Date: 2010/07/24(土) 00:59   No:57336     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
初心者です。すいません、そういう規定があるの知らずに使ってました・・。
ただ書いてもらっただけで感謝です、一つじゃなくても。
#include <stdio.h>  

int main(){
    int i, num;
    printf("数値を入力してください:");
    scanf("%d", &num);
    for( i=0; i<=num; i++ ){
        if( i%2==0){
            printf("%d\n",i);
        }
    }
    return 0;      
}
これで表示はされたのですが、自信はないです。
自分なりには、
iが0で、numまでの間、1ずつ増えていき、もし2で割ったあまりが0ならば表示します。
という解釈なのですが、とりあえず3の倍数をいじってみます。
==============
forをwhileに変えるとビルドエラーが出ますね。英語で見るとどちらも間という意味ですけど、
C言語だと若干違うんですね。
あとnの倍数やってみます!! 編集済み


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

Name: パコネコ  ..上級者(22,509ポイント)   Date: 2010/07/24(土) 01:02   No:57337     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
おしい、
いやある意味正解ですけど…細かいとこで言うと「0」も描写されてませんか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,421ポイント)   Date: 2010/07/24(土) 01:07   No:57338     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
すごく個性的な名前ですけど、今後ずっとそれでいいんでしょうか^^;

> 細かいとこで言うと「0」も描写されてませんか?

あ、私のミスですね。
偶数ということだったので、0からにしましたが、問題文からすると、2から始まらないといけないんですね。
まぁ最初にiにセットしている値を変更すればいいだけですね。

しかし、偶数と言えば0も含まれると思いますが、2からでいいんですか?


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

Name: デミチェリス  ..ぴよぴよ(148ポイント)   Date: 2010/07/24(土) 01:22   No:57340     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
すいません、僕のミスです。
管理人さんの仰る、0からで本当はよかったのですが、
せっかく、以前にこの1番上のプログラムを教えてくださった方がいたのに、
それを変えるのはちょっとまずいかなと思ったので、そのまま2から流れで来てしまいました;
   for( i=0; i<=num; i++ ){ 
        if( i%n==0){
たぶんこれでnの倍数がでるようになると思います。


>すごく個性的な名前ですけど、今後ずっとそれでいいんでしょうか^^; 
だめですかwいろんなの考えたのですが、へたれとかゲロとか
まともなのが出てこなくて、、短いほうがいいですね。



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

Name: パコネコ  ..上級者(22,449ポイント)   Date: 2010/07/24(土) 01:26   No:57342     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
あってますね。
おめでとうです。

どうせなら自分で気に入ってるもののほうがいいですよ。
その名前でずっと呼ばれて行くんですから…
=========
逆に自分が気に入れば別に常識の範囲内なら何でもいいと思う。
あと、かぶってなければ… 編集済み


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

Name: デミチェリス  ..ぴよぴよ(172ポイント)   Date: 2010/07/24(土) 01:31   No:57343     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
そうですね、そしたらゲロになるんですが、
当分はデミチェリスでいかせて頂きます。


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

Name: パコネコ  ..上級者(22,465ポイント)   Date: 2010/07/24(土) 01:32   No:57344     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
これからもよろしくお願いします。
「デミチェリス」さん。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,586ポイント)   Date: 2010/07/24(土) 01:34   No:57345     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
なるほど、そうでしたか。よかったです。

>へたれとかゲロとか 

なんでわざわざ^^;
ちなみにへたれさんはいらっしゃいますね。
過去に名前が使われているかどうかはメニューの「昇進状態」で確認出来ます。
数が多いので、検索かけるしかないですね。
それにしても人数多くなりました・・。


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

Name: デミチェリス  ..ぴよぴよ(179ポイント)   Date: 2010/07/24(土) 01:40   No:57346     
Title: Re:以前ヒントを教えてもらったプログラムですが・・    
こちらこそよろしくおねがいします^^
===============
へたれいるんですね・・w若干冗談まじりだったんですけど。 編集済み


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



Name: シエル  ..プログラマー(30,109ポイント)   Date: 2010/07/20(火) 22:48   No:57021       
Title: データ読み込み中にロード画面を出す方法    
いつもお世話になっております。シエルです。


【質問1】
現在DirectXを使ってゲームを作成しているのですが、
ステージ1からステージ2へ行く際に、ステージ1で使用したデータ(画像など)を破棄して、
ステージ2で使用するデータを読み込ませようとしています。

大した時間ではないのですが、そのデータ読み込み中の際にロード中の画面を出したいと
思っています。

ですが、メインループの中に画像読み込みの処理とロード中の画面を出す処理を
書いているので、結局は画像読み込み処理が終わってからロード画面の処理を
呼び出すことになってしまいます。
何とかして画像を読み込ませながら、ロード中の画面を出す方法はないでしょうか?
ロード中の画面処理は別スレッドを作成して、そちらで処理させるしかないでしょうか?

【質問2】
ゲーム中のスクリーンショットを取るために、フロントバッファの内容をサーフェイスに
コピーして、D3DXSaveSurfaceToFileで保存できるようにしているのですが、
サーフェイスにコピーする時とファイルに保存する際にやはり処理が重いせいか一瞬固まって
しまいます。
どうにかして、少しずつ保存しながらメインループの処理を続ける方法はないでしょうか?
こちらもスレッドを作成して対応するしかないですかね?

2つとも同じような質問ですが、よろしくお願い致します。


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


Name: Justy  ..伝説なるハッカー(557,195ポイント)   Date: 2010/07/21(水) 00:48   No:57027     
Title: Re:データ読み込み中にロード画面を出す方法    
>質問1
 私はロードアニメーションがなければメインに書きますけど、アニメーションさせるなら
テクスチャの読み込みをスレッドで処理しています。

 アニメーション有りで全てメインで書くなら、(60fpsとかの)滑らかなアニメーションさえ
諦めれば幾つかテクスチャを読んでは画面を更新する、を繰り返せばいいだけなので
どうとでもなるはずです。


>結局は画像読み込み処理が終わってからロード画面の処理を 呼び出すことになってしまいます。 
 どういう状態なのかよくわかっていないのですが、順番の問題ではないですか?
 メインループの中にそれらを書いたとしても、ロード画面に切り替わってから
読み込み処理すればいいわけで。
 

>質問2
 ファイル出力を伴うのでしょうがないと割り切っていました。
 ただうちの場合一端テクスチャにレンダリングをしてから表示していますので
サーフェイスにコピーする処理はないですね。それでも確かにカクついてます。

 試したことはありませんが多分スレッドにするしかないとは思います。
 とりあえず実際にスレッドにしてみてはどうでしょう?
 あと出力フォーマットも BMPとかあまり複雑な変換がなさそうなのを選ぶとか。

 最悪 D3DXSaveSurfaceToFileを使わず自前でファイルに出力すれば大夫カクつきは
緩和されるんじゃないかな、と思います。


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

Name: やっくん  ..プログラマー(32,033ポイント)   Date: 2010/07/21(水) 00:57   No:57029     
Title: Re:データ読み込み中にロード画面を出す方法    
こんばんは。
質問1ですが、私は少々面倒ですがロード画面をデータの破棄やデータのロードの間に細かく何度も呼び出して実装しています。
(呼ぶたびに少しずつロード画面の描画するものを変更するため、静的変数などで描画する物を覚えさせておきます)

下にお粗末ですが、自分の方法のサンプルを載せます。

//------------------------------------
IniLoadScreen(); // ロード画面に使う変数や画像の初期化

/***** 以下、ロード *****/
int pic1 = LoadGraph("test1.png");
LoadScreen();
int pic2 = LoadGraph("test2.png");
LoadScreen();
int pic3 = LoadGraph("test3.png");
LoadScreen();
int pic4 = LoadGraph("test4.png");
LoadScreen();

//------------------------------------

static int loadPicNo = 0;

IniLoadScreen()
{
  loadPicNo = 0;
  /* その他いろいろ初期化 */
}

void LoadScreen()
{
  if(loadPicNo >= ロード画面の画像枚数) loadPicNo = 0;

  // picLoadハンドルはどこかで用意しているものとして。
  DrawGraph(0, 0, picLoad[loadPicNo], TRUE);
  loadPicNo++;
}

//------------------------------------


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

Name: シエル  ..プログラマー(30,761ポイント)   Date: 2010/07/21(水) 08:47   No:57031     
Title: Re:データ読み込み中にロード画面を出す方法    
>>やっくんさん
ありがとうございます。ソース参考にさせていただきます。

>>Justyさん
いつもありがとうございます。

>>アニメーション有りで全てメインで書くなら、(60fpsとかの)滑らかなアニメーションさえ 
>>諦めれば幾つかテクスチャを読んでは画面を更新する、を繰り返せばいいだけなので 
>>どうとでもなるはずです。 

ロード中の画面もアニメーションになっています。滑らかなアニメーションは諦めたくないです。

  
>>どういう状態なのかよくわかっていないのですが、順番の問題ではないですか? 
>>メインループの中にそれらを書いたとしても、ロード画面に切り替わってから 
>>読み込み処理すればいいわけで。 

ロード中の画面もアニメーションになっており、ロード画面に切り替わってから読み込み処理を
したとしても、読み込みに時間がかかった場合、その時間だけロード中画面のアニメーションが
一瞬止まってしまいます。
市販のゲームはどうやってるんでしょうね。。。


>>試したことはありませんが多分スレッドにするしかないとは思います。 
>>とりあえず実際にスレッドにしてみてはどうでしょう? 

スレッドにすれば、特に止まることは無かったです。こちらはスレッドで対応するしかなさそうですね。

>>あと出力フォーマットも BMPとかあまり複雑な変換がなさそうなのを選ぶとか。 
>>最悪 D3DXSaveSurfaceToFileを使わず自前でファイルに出力すれば大夫カクつきは 
>>緩和されるんじゃないかな、と思います。

自前でファイルに出力ですか…さっぱりやり方がわかりません。
自前で対応するのって、画像の形式をしっかり理解していないと厳しいですよね?
全部データをfwriteで書き込むとかですか?
具体的じゃなくていいので、超簡単に方法を説明していただいてよろしいでしょうか?



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

Name: 御津凪 [URL]  ..ハッカー(145,823ポイント)   Date: 2010/07/21(水) 11:00   No:57035     
Title: Re:データ読み込み中にロード画面を出す方法    
DirectX では、テクスチャなどのロード(バッファへのアクセス)と描画を同時には行えません。

もし無理やり描画とロードをスレッドを使って非同期で行った場合、大体の確率でフルスクリーン状態の時にフリーズします。
(DX10以降対応グラフィックスカード+DirectX10以降ではそれを回避できる機構が備わっている物がありますが)

市販のゲームでも必ずと言っていいほどロードアニメーションにカクつき、あるいは開始・終了のタイミングで
(PCの性能によりますが)少なくとも一瞬は止まっているはずです。
1ループごとに小刻みに分けたり、ロスの少ない形式にして読み込んだりと、何かしらの努力はしていると思われます。

ロード画面の前後(暗転状態など)、画面に変化がないタイミングで一気にカクつく原因のデータを読み込む方法もありますが、
ロード中画面以外でも読み込んでいるという嘘をすることになります。

一番いいのはアニメーションのフレームレートをゲームのフレームレートより小さく(例えば半分に)して、
次回アニメーションが更新されるフレームごとに1データ処理するように分割するのがいいかと思います。
この時、アニメーション描画の方はフレームスキップ方式で処理するようにすると楽です。
(それでも環境・データによってカクつく場合があります。そこらへんは個別に対処する必要があるでしょう)


スクリーンショットの方ですが、
通常ゲーム画面のカラーフォーマットはXRGBの32ビットなので、いったん IDirect3DDevice9::GetFrontBufferData で取得した後、
スレッドを使って BMPのファイルフォーマットに沿って出力すれば簡単に処理できるかと。
ただし IDirect3DDevice9::GetFrontBufferData 関数は重い処理なのでカクつくことがなくなるわけではありません。


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

Name: シエル  ..プログラマー(31,004ポイント)   Date: 2010/07/21(水) 11:16   No:57037     
Title: Re:データ読み込み中にロード画面を出す方法    
御津凪さん。ありがとうございます。

確かに市販のゲームでもたまにロード画面でもカクついてることはありますね。
市販のゲームも小刻みに分けて読み込んだりしてるんですかね。
カクついてるほうが逆に読み込んでる感じが出るかなw

アニメーションの方は、小刻みに読み込むようにして対応してみます。
スクリーンショットの方はスレッドでやったら特に問題が出なかったので、
このまま問題が出なければ、スレッドでやりたいと思います。

この辺で解決にしておきます。

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


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

Name: シエル  ..プログラマー(31,023ポイント)   Date: 2010/07/21(水) 11:17   No:57038 解決!     
Title: Re:データ読み込み中にロード画面を出す方法    
解決し忘れました。すみません。

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

Name: Justy  ..伝説なるハッカー(557,357ポイント)   Date: 2010/07/24(土) 01:18   No:57339     
Title: Re:データ読み込み中にロード画面を出す方法    
 レスが遅くなりました。

 スレッドで画像を生成したり読み込んだりすることはよくあるんですが
今のコードになってからそれが原因で落ちたこと無いですね。
 たまたまなんでしょうかね。

 たしかに同期をとらなければならないところはあるので、スレッドを使っても
普通の PCで 100%完璧に処理落ちをおこさずに処理するのは至難の技かもしれません。
 ものにもよりますがある程度スペックがあるならあまり目立たない程度にまでは
できるんじゃないかと(これが偶然で動いているのでなければ、ですが)。


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



Name: aki  ..かけだし(1,004ポイント)   Date: 2010/07/23(金) 17:20   No:57260       
Title: クイックソートを実装できません。    
はじめましてakiといいます。

クイックソートを作っているんですが、うまくうごきません。
お手数ですが、誰か分かる方教えてください。データを添付できませんでした



#include <stdio.h>
# define N 32768
# define n 99

void myalgo(int data[],int begin,int end){ 

    int kijyun,a,b,c;
    int temp;

    kijyun=data[(begin+end)/2];//真ん中を基準にして大きさを比べていく

    a=begin;
    b=end;

    
    while(1){
        temp=0;
        //基準より大きいものを右に小さいものを左に置く
        while(data[a]<kijyun){
            a++;
        }
        while(data[b]>kijyun){
            b--;
        }

        if(a>=b){
            break;
        }
        
        temp=data[a];
        data[a]=data[b];
        data[b]=temp;
        
        a++;
        b--;

    }

    for(c=0;c<=n;c++){
        printf("%d :",data[c]);        
    }
    printf("\n");
    
    if(begin<a-1){//左側を同様にして並べ直す。要素が一つになるまで
        myalgo(data,begin,a);
    }
    if(b+1<end){//右側を同様にして並べ直す。要素が一つになるまで
        myalgo(data,a+1,end);
    }
    
}
int main(void)
 {
   int value, data[N], i=0, j;
 
   while ((scanf("%d", &value)) != EOF) 
     data[i++] = value;
 
   mtrace();
   myalgo(data,0,n);
   muntrace();
 
   for (j=0; j<i; j++)
     printf("%d\n", data[j]);
 }


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


Name: ドラ  ..中級者(9,971ポイント)   Date: 2010/07/23(金) 20:19   No:57301     
Title: Re:クイックソートを実装できません。    
main()で myalgo() を呼び出しているところがおかしいですね。
myalgo()で間違っているのは赤字の部分だけ・・・かなぁ。
クイックソートって発想法は単純ですが、自分で実装しようとすると意外と難しいですね。
テストできるようにmain()を書いておいたので十分テストして下さいね。
間違ってても私は責任取れませんので・・・

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#define N 100
#define TEST 10

void myalgo(int data[], int begin, int end)
{
    int kijyun,a,b,c; 
    int temp; 

    kijyun=data[(begin+end)/2]; //真ん中を基準にして大きさを比べていく 

    a=begin; 
    b=end; 

    while(1){ 
        temp=0; 
        //基準より大きいものを右に小さいものを左に置く 
        while(data[a]<kijyun){ 
            a++; 
        } 
        while(data[b]>kijyun){ 
            b--; 
        } 

        if(a>=b){ 
            break; 
        } 

        temp=data[a]; 
        data[a]=data[b]; 
        data[b]=temp; 

        a++; 
        b--; 
    } 
    
    //for(c=0;c<=n;c++){ 
    //    printf("%d :",data[c]);         
    //} 
    //printf("\n"); 

    if(begin<a-1){//左側を同様にして並べ直す。要素が一つになるまで 
        //myalgo(data, begin, a); 
        myalgo(data, begin, a-1); 
    } 
    if(b+1<end){//右側を同様にして並べ直す。要素が一つになるまで 
        //myalgo(data, a+1, end); 
        myalgo(data, b+1, end); 
    }
}

void set(int p[])
{
    int i;
    for (i = 0; i < N; i++) p[i] = rand()%100;
}

void print(const char mes[], const int p[])
{
    int i;
    printf("%s\n", mes);
    for (i = 0; i < N; i++) printf("%d,", p[i]);
    putchar('\n');
}

void check(const int p[])
{
    int i;
    for (i = 1; i < N; i++) assert(p[i-1] <= p[i]);
    printf("---- OK -----\n");
    fflush(stdout);
}

int main(void)
{
    int data[N], i;
    
    srand( (unsigned)time(NULL) );
    
    for (i = 0; i < TEST; i++)
    {
        printf("\n【テスト%d回目】\n", i+1);
        set(data);
        print("ソート前", data);
        myalgo(data, 0, N-1);
        print("ソート後", data);
        check(data);
        
        printf("Enterキーを押して下さい。");
        getchar();
    }
    
    return 0;
}


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,353ポイント)   Date: 2010/07/24(土) 00:07   No:57321     
Title: Re:クイックソートを実装できません。    
よければこちらもどうぞ^^

http://dixq.net/sort.html


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



Name: amu  ..ぴよぴよ(74ポイント)   Date: 2010/07/23(金) 20:36   No:57302       
Title: ムービー    
ムービーを表示したその上から違う画像を表示することはできますか?
もし出来るのならサンプルプログラムもお願いします。

簡単な質問でスイマセン。


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


Name: amu  ..ぴよぴよ(266ポイント)   Date: 2010/07/23(金) 21:16   No:57304     
Title: Re:ムービー    
編集キー忘れたのでこちらで追記します。

目的は、シューティングなどの背景をムービーで表現したいと思いまして・・・
重くなるのはわかるのですが実験としてやってみたいと思っています。


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

Name: 御津凪 [URL]  ..ハッカー(146,571ポイント)   Date: 2010/07/23(金) 21:42   No:57306     
Title: Re:ムービー    
技術的に問題ないのであれば「可能」です。

しかし、方法は環境によりますので、下記は期待に添える内容かどうかはわかりません。
(自身でサンプルプログラムを書くのは時間的に無理です)

環境が Windows XP 以降、DirectX9 であれば、DirectShow を利用してムービーを再生・表示しながらムービー以外を描画することができます。
(DXライブラリであれば、リファレンスを熟読すればできるかと思います)

下記に大まかな方法を書いておきます。

・DirectShow のカスタムレンダラを用意する。
・そのカスタムレンダラは、 DirectX9 のテクスチャに転送させる。
・そのテクスチャを背景に描画する

上記ができればムービーをテクスチャ代わりに出来るので、いろいろと自由に扱えるはずです。

なお、上記の方法を行っている処理のサンプルプログラムと解説が下記リンクに掲載されてます。

http://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow001.htm

なお、ムービーの形式やサイズなどのよりますが、再生中は10%程度(あるいはそれ以上)のCPU負荷が掛かります。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,250ポイント)   Date: 2010/07/24(土) 00:04   No:57319     
Title: Re:ムービー    
可能ですし、サンプルプログラムを見るほどの事ではないですよ。

ただ、動画の描画関数の後で画像の描画関数を書けばいいだけです。(合計2行)
書いた順番に描画されるので、後に書いたものが上にきます。

このHPで公開しているゲームAerobeatはまさに動画の上にゲーム画像を描画しています。
(参考)http://www.nicovideo.jp/watch/sm8808750

少し昔までは動画を背景にするなんて考えられませんでしたが、
最近のPCでは割とまともに動きます。
スペックが低いPCで処理落ちする事を覚悟の上であれば採用するのもありかもしれません。


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



Name: MASSA  ..ぴよぴよ(271ポイント)   Date: 2010/07/23(金) 22:56   No:57307       
Title: 龍神録・・    
龍神録プログラミングの支館のサウンドノベルシステムの章で、
実行すると


main.cpp(56) : error C3861: 'calc_option_bb': 識別子が見つかりませんでした
1>RyuJin - エラー 1、警告 4

と表示されてしまうのですが・・・


どうしてでしょうか・・(汗

わかる方、お願いします


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


Name: MASSA  ..ぴよぴよ(286ポイント)   Date: 2010/07/23(金) 23:00   No:57308     
Title: Re:龍神録・・    
問題の行を削除したらOKでした

解決しました m(_ _)m


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

Name: MASSA  ..ぴよぴよ(303ポイント)   Date: 2010/07/23(金) 23:01   No:57309 解決!     
Title: Re:龍神録・・    
すいません・・「解決」マークを付け忘れてました・・・(汗

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,036ポイント)   Date: 2010/07/24(土) 00:00   No:57318     
Title: Re:龍神録・・    
> MASSAさん

支館の方は私が作成しているのではなく、
arrayさん=サウスさんが作っていらっしゃり、
質問掲示板もそちらにありますので、支館の質問はそちらで行って頂いた方が
サウスさんより直接適切な回答が得られるかもしれません。

もちろんどちらで質問して頂いても構いませんけどね。


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



Name: がくせい  ..ぴよぴよ(294ポイント)   Date: 2010/07/23(金) 18:17   No:57278       
Title: (不適切な内容だったので削除しました)    
(不適切な内容だったので管理人が削除しました)

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


Name: パコネコ  ..上級者(21,403ポイント)   Date: 2010/07/23(金) 18:24   No:57279     
Title: Re:バカネコに物申す    
いままで言われなかったからいいかな〜って思ってたけどやっぱまずかったですか…
すいません。
と、もし私に言ってるなら謝りたいと思います。

あと、リアルのニックネームがばれたのがショックです。

>少しはスレ主の気持ちを考えて投稿してね☆
あなたにだけは言われたくなかったです。


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

Name: lbfuvab  ..プログラマー(27,201ポイント)   Date: 2010/07/23(金) 18:24   No:57280     
Title: Re:バカネコに物申す    
そういう事はそのスレ内で言ってください。
新しいスレを立てないで下さい、目障りです


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

Name: ookami  ..プログラマー(36,624ポイント)   Date: 2010/07/23(金) 18:27   No:57282     
Title: Re:バカネコに物申す    
# まぁスルーすべき。

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

Name: パコネコ  ..上級者(21,622ポイント)   Date: 2010/07/23(金) 18:30   No:57283     
Title: Re:バカネコに物申す    
せっかくなのでここで書かせていただきます。


これも質問みたいなものですが…
新しいスレたてて質問すればよかったのでしょうか?
それとも、スレ主さんにOKもらえばよかったでしょうか?
それとも、あきらめるべきだったのでしょうか?

これから、改善するために必要なことなので答えていただいてもよろしいですか?
=========
ookamiさん
忠告聞けずにすいませんでも、
この質問だけでもお願いします。
 編集済み


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

Name: ookami  ..プログラマー(36,704ポイント)   Date: 2010/07/23(金) 18:36   No:57287     
Title: Re:バカネコに物申す    
入れ違いになってしまいましたね。
パコネコさんの書き込みは私から見てレベル低くないです。

で、
# スルーすべき。


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

Name: ookami  ..プログラマー(36,763ポイント)   Date: 2010/07/23(金) 18:41   No:57288     
Title: Re:バカネコに物申す    
あらら。また入れ違いに。
ではついでに私見を述べますが、その質問を「がくせい」さんにすべきでないかと。

> 新しいスレたてて質問すればよかったのでしょうか?
> それとも、スレ主さんにOKもらえばよかったでしょうか?
> それとも、あきらめるべきだったのでしょうか?

話の流れ次第だと思います。
あと、相手によりますね。


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

Name: がくせい  ..ぴよぴよ(452ポイント)   Date: 2010/07/23(金) 18:45   No:57290     
Title: Re:バカネコに物申す    
(不適切な内容だったので管理人が削除しました)

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

Name: パコネコ  ..上級者(21,741ポイント)   Date: 2010/07/23(金) 18:47   No:57291     
Title: Re:バカネコに物申す    
ちなみに「がくせい」さんに質問したつもりだったのですが…
あの文章は#スルーすべきに対してだったのですが…

文章が変になってしまったんですね、すいませんでした。


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

Name: ookami  ..プログラマー(36,851ポイント)   Date: 2010/07/23(金) 18:55   No:57292     
Title: Re:バカネコに物申す    
混線しとる…w

>>ではついでに私見を述べますが、その質問を「がくせい」さんにすべきでないかと。

…あぁ!分かりました。

「その質問を「がくせい」さんにすべきでないと思いますよ、どうせまともな答えは返ってきませんから」

という意味ですw
すいません、変な文章は私でした。


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

Name: パコネコ  ..上級者(21,510ポイント)   Date: 2010/07/23(金) 18:55   No:57293     
Title: Re:バカネコに物申す    

注意されてからは、一度も「ワイ」と書いた覚えなかったのですが?

自分で考えた結果でいいんですか?
ありがとうございます。
相手にもよりますが、特にそのスレ主さんに言われなければ、
今まで通りいかせていただきます。

それと打ち間違えてますよ?
/*
おっと名前間違えてた。 
バカネコ→バカネコ
*/

なれなれしい感じ?許容範囲内と自分では判断してました。
多数の方が嫌がっているのなら、それも気をつけます。

確かにさっきは調子に乗って少しふざけましたが…質問があれですし…

==========
また混線してる…確かに。
この質問は、私に注意してくださった学生さんにすべきだと思います。

===========
もうひとつ書き忘れてました。
今日だけで2回は利用規約確認してましたよ。
暇でしたから…


 編集済み


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

Name: ookami  ..プログラマー(36,988ポイント)   Date: 2010/07/23(金) 19:00   No:57294     
Title: Re:バカネコに物申す    
あぁなるほど。続けて失礼します。

パコネコさんは「ookamiがパコネコさんの書き込みにカチンと来て反論した」ように思ったわけですね。
すいませんw 全くそんなことはないです。

# また入れ違いになって変な事になったりしてw
# では、ほんとにこの辺で失礼します。


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

Name: パコネコ  ..上級者(21,562ポイント)   Date: 2010/07/23(金) 19:04   No:57296     
Title: Re:バカネコに物申す    
ookamiさんへ
違います!!
そんなことないです。
ただ私が途中でookamiさんの名前を出したのでookamiさんに対しての質問だと思われたと、
思ったのです。




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

Name: がくせい  ..ぴよぴよ(491ポイント)   Date: 2010/07/23(金) 19:10   No:57297     
Title: Re:バカネコに物申す    
(不適切な内容だったので管理人が削除しました)

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

Name: dic  ..比類無きプログラマー(88,177ポイント)   Date: 2010/07/23(金) 20:17   No:57300     
Title: Re:バカネコに物申す    
たちの悪い粘着ストーカーに好かれたようです
まじめに相手するほうが損をします
スルー(放置)しておくのがベストです


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,234,847ポイント)   Date: 2010/07/23(金) 23:47   No:57315     
Title: Re:バカネコに物申す    
> パコネコさん

大人の対応をして下さりありがとうございます。
今後言い合いになりそうだったり何か問題があれば、そのトピックへの投稿はやめて私にお伝え下さい。
この掲示板ではそんな事はめったにありませんが、一度いい争いが始まると両者ともキリが無くなる事もありますので、そんな時は何か私が仲介出来ればと思います。

後、新しいトピックをどれ位の区切りで立てたら良いかですが、
基本的に1質問1トピックとしています。
少しでも内容が違う質問をする場合は気軽に別のトピを立てて頂いて構いません。
新着にいくつも同じ方のトピックがあっても全く構いませんので。
見る人が見やすく、過去ログを探す人が探しやすいようにという基準で分けて頂けたらと思いますが、
特に神経質に考えて頂かなくて結構です。

そんなことより気軽に使って頂きたいですし、私自身規約云々を言うのは嫌いな性格です。
使う方が他の方へ配慮する気持ちがあれば、そもそも規約なんて必要ないですし、トラブルも起きないと思いますから^^


> 皆様へ

匿名ではない掲示板では、何か普段人に言いたい事があってもなかなか言えないという部分は確かに短所なのかもしれません。
そんな時は私に出来る対応の仕方があればしますので、メールなどでお伝え下さい。
可能な限り対応したいと思います。


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



Name: サイ  ..かけだし(1,202ポイント)   Date: 2010/07/23(金) 17:22   No:57262       
Title: ブロック崩しの背景    
今、工業高校に通っていて、ブロック崩しの背景が黒いので変えたいんですけど


 '画面とペンの初期化
        PictureGamen.Image = New Bitmap(PictureGamen.Width, PictureGamen.Height)
        g = Graphics.FromImage(PictureGamen.Image)

これを変化させれば、背景の色が変わると思ったんですが、背景のプログラムの記述はbackgroundしかわかりませんがそれだとできないですかね?


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


Name: だいちゃん  ..かけだし(1,058ポイント)   Date: 2010/07/23(金) 17:34   No:57264     
Title: Re:ブロック崩しの背景    
なんで何回も投稿するんですか?
最初の投稿にレスもついてますし
そっちに書けばいいじゃないですか


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

Name: ookami  ..プログラマー(36,610ポイント)   Date: 2010/07/23(金) 17:44   No:57267     
Title: Re:ブロック崩しの背景    
規約は読みましたか?
http://dixq.net/board/board.html


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



Name: t@  ..ぴよぴよ(220ポイント)   Date: 2010/07/23(金) 15:45   No:57235       
Title: ファイルの読み込みについて    
はじめまして。さっそくですが質問させていただきます

1.カードの名前が入ったファイルからデータを読み取って、それを配列に構造体の中の配列に格納したい。

2.
void frW(){//名前ファイル読み込み関数
    fW = FileRead_open( "name\\Wands.txt" );// ファイルを開く
    while( FileRead_eof( fW ) == 0 )// ファイルの終端が来るまで表示する
    {
        FileRead_gets( str, 22, fW );// 一行読み込み
        c.name[0][i] = str[i];//データを格納
        i++;//
     }
    FileRead_close( fW );// ファイルを閉じる
    i = 0;
}
一行ずつ読みこんで、その際に読んだデータをc.nameに格納したいです。

3.c.nameには読み込んだデータだはなく、-125 '・'、-113 '・'のようなデータが入ってしまいます。

4.ファイルから一行ずつでデータを読み込んでc.nameに一つずつ格納したい。

5.学校で習いました。成績は真ん中ぐらいです。

windows Vista Basic
Visual C++ Express Edition
DXライブラリ
を使っています。

読み込んでいるデータファイルも載せます

よろしくお願いします。

追記
全部のソースは長いし、読みづらいと思います;
変数の型を乗せます。

typedef struct{
    char name[5][22];
    int score[7];
    int graph[5][22];
}card;
card c;

int fW,i;
char str[22];

追記
すみません!説明不足でした

カードはタロットで、名前の種類ごとにファイルが用意してあります。
ワンド、カップ、ソード、ペンタクルス、と大アルカナの5種類のファイルがあります。
ここでは一つだけ載せました。
name[5][22]の[5]はカードの種類を表していて、[22]がカードの名前を表しています。
name[0][0]に”ワンドの1”、name[0][1]に”ワンドの2”、name[1][0]に”ソードの1”といったかんじに格納したいです。

すみませんでした

 編集済み


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


Name: パコネコ  ..上級者(20,721ポイント)   Date: 2010/07/23(金) 16:09   No:57238     
Title: Re:ファイルの読み込みについて    
結局DXライブラリはほとんどい変えていない状態なのでいまいち知らないのですが、
>fW = FileRead_open( "name\\Wands.txt" );// ファイルを開く
このオープンも実は知りません。
拡張子?違いますね。え〜と、そうだ、モードとかはないんですか?
読み込みようとか、書き込み用とか?

後は読み込みのときに、”%s”とかないんですか?
fscanf文ぐらいしか知りませんが…getsだからいらないのかな?

あと、
/*
FileRead_gets( str, 22, fW );// 一行読み込み
c.name[0][i] = str[i];//データを格納
*/
一行読み込んで一文字コピー?に見えるのですが。
気のせいでしょうか?
(それとも勘違い?)
しかも少しずつずれてる…
1行目の1文字目
2行目の2文字目?
みたいに?


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

Name: やっくん  ..プログラマー(32,389ポイント)   Date: 2010/07/23(金) 16:14   No:57240     
Title: Re:ファイルの読み込みについて    
それぞれの変数の型がよくわからいので、宜しければ全てのソースコードを上げてもらってもよろしいですか??

<追記>

c.nameが構造体のメンバでしょうか。
そうであれば、文字列コピーにはCの標準関数のstrcpy関数を使うとよろしいですよ。
http://www.bohyoh.com/CandCPP/C/Library/strcpy.html

strcpy(c.name, str); 
のように使います。
構造体の定義や変数宣言が良くわからないのでこれで正しいかわかりませんが。

>パコネコさん
調べてみましたが、DxLibには読み込み用しかなさそうです(^^;
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R19N1 編集済み


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

Name: パコネコ  ..上級者(21,011ポイント)   Date: 2010/07/23(金) 16:46   No:57248     
Title: Re:ファイルの読み込みについて    
て、ことは
>c.name[0][i] = str[i];//データを格納
strcpy(c.name[i],str);
になるんですか?


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

Name: やっくん  ..プログラマー(32,676ポイント)   Date: 2010/07/23(金) 17:37   No:57265     
Title: Re:ファイルの読み込みについて    
>t@さん
ソースコード、載せていただきありがとうございます。

>name[0][0]に”ワンドの1”、name[0][1]に”ワンドの2”、name[1][0]に”ソードの1”といったかんじに格納したいです。
char型には配列の要素1つに半角1文字分しか入れることができません。
↓格納されるイメージとしてはこんな感じです。
[0] = 'w';
[1] = 'a';
[2] = 'n';
[3] = 'd';

ですので、まずは構造体の変数宣言を少し変えてみてみましょう。
char name[5][22]; 

char name[5][14][22]; // [カード種類][数字の種類][文字列格納]
とすると楽です。

[0][0][0]〜[0][0][21]までを用いて"ワンドの1"を格納します。

先程、載せたstrcpy関数ですが使い方はご存知でしょうか?

(補足)
char型の補足。
↓この代入は不可能
char moji[2];
moji[0] = 'あ';
moji[1] = 'い';

理由はchar型1個は1バイト分なので、2バイトで表現される全角文字を格納するには配列要素2つ分使います。



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



Name: フリスク  ..ぴよぴよ(48ポイント)   Date: 2010/07/21(水) 22:00   No:57088       
Title: C言語 ヒット・アンド・ブローについて    
C言語のプログラムでヒット・アンド・ブローをやっていて、わからないところがあったので質問しに来ました

1.四個のアルファベット、AからFから四つ選んでランダムに選択して文字列にする。(選ばれる文字はすべて異なる文字)それをユーザーが当てる
2.ユーザーが入力した文字列と選択した文字列を比較して同じ場合、ヒット、違う場合、ブローとヒントを与える。
3.ユーザーは10回まで回答するチャンスが与えられる。

というプログラムを作成していたところ、アルファべットでなく数字、当たるまで終わらないというプログラムから目的のプログラムになおせません

どなたか教えてください
ソースはこれです
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
int Number[N],In[N];
int i,j,hit,blow;
srand(time(NULL));
for(i=0;i<N;i++){Number[i]=rand()%10;In[i]=0;}
do{
printf("%d桁の数を入力!:",N);
for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break;
In[i]-='0';}
fflush(stdin);hit=0,blow=0;
for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;}
for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) {
blow++;
break;
}}}
for(i=0;i<N;i++) printf("%d-",In[i]);
printf("%dHit,%dBlow\n",hit,blow-hit);
}while(hit!=N);
for(i=0;i<N;i++) printf("%d",Number[i]);
puts("\nComplete!!");
}

補足 今、なおしているんですがfflush(stdin);hit=0,blow=0;
の部分でエラーが出てしまってよくわかりません


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


Name: box  ..ハッカー(156,589ポイント)   Date: 2010/07/21(水) 22:27   No:57090     
Title: Re:C言語 ヒット・アンド・ブローについて    
まずは、ヒット・アンド・ブローのルールを教えてください。
全員がルールを知っているわけではないと思います。

>fflush(stdin);hit=0,blow=0;
>の部分でエラーが出てしまってよくわかりません

何をしたときにどんなエラーが出るのですか?
なお、fflush(stdin);
つまり、標準入力に対するfflush()は動作未定義のはずです。


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

Name: ぽこ  ..上級者(23,584ポイント)   Date: 2010/07/21(水) 22:37   No:57091     
Title: Re:C言語 ヒット・アンド・ブローについて    
えっと、問題を整理したいんですけど、
フリスクさんが提示したソースコードは、
 ・ヒット・アンド・ブローである。
 ・入力する値は数字である。
 ・当たるまで終わらない。
 ・上記仕様では正常に動作している。
という現状で、
ここから
 ・入力する値はアルファベット(A〜F)である(大文字小文字区別するのかな?)。
 ・入力する回数は最大で10回である。
という風に変更したいが、どうしたらいいか分からない、

で合ってます?


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

Name: パコネコ  ..上級者(17,844ポイント)   Date: 2010/07/21(水) 23:11   No:57095     
Title: Re:C言語 ヒット・アンド・ブローについて    
おお〜
数字バージョンなら知ってる…
上のやつ起動できたけどな〜?

>補足 今、なおしているんですがfflush(stdin);hit=0,blow=0;
別に変なとこないけど…「,」とか?でも起動できたし…
でもfflushって意味知らないんですよね…
意味教えてもらってもいいですか?
「組み込み関数:バッファリングデータ書き込み」って書いてたんですけど…使い方(使い道)わからなくて
すいません。勉強のためにお願いします。


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

Name: ふりすく  ..ぴよぴよ(245ポイント)   Date: 2010/07/21(水) 23:18   No:57096     
Title: Re:C言語 ヒット・アンド・ブローについて    
えっと・・ヒット・アンド・ブローとは、パソコンにランダムに四つの文字列を選ばせ、ユーザーが当てるゲームです。
たとえば、パソコンがACDFを選びユーザーがABCDと入力した場合、1ヒット、3ブローと表示されます

エラーというか定義されてませんと出ます・・・


・入力する値はアルファベット(A〜F)である(大文字のみです)。 
 ・入力する回数は最大で10回である。 
という風に変更したいが、どうしたらいいか分からない、 

で合ってます。何日も考えてるんですが全然作れなくて明日か明後日までに作りたいんですが・・よろしくお願いします


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

Name: パコネコ  ..上級者(17,866ポイント)   Date: 2010/07/21(水) 23:21   No:57097     
Title: Re:C言語 ヒット・アンド・ブローについて    
名前間違えてますよ?
平仮名になってしまってます。
名前などを保存する押したら楽ですよ。

それともまさかの別人?


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

Name:  ..ぴよぴよ(29ポイント)   Date: 2010/07/21(水) 23:24   No:57098     
Title: Re:C言語 ヒット・アンド・ブローについて    
fflushは確か二文字目を正確に入力するために必要なものだったような気がします


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

Name: フリスク  ..ぴよぴよ(41ポイント)   Date: 2010/07/21(水) 23:25   No:57099     
Title: Re:C言語 ヒット・アンド・ブローについて    
あっ・・同一人物です

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

Name: ぽこ  ..上級者(23,722ポイント)   Date: 2010/07/21(水) 23:29   No:57100     
Title: Re:C言語 ヒット・アンド・ブローについて    
> たとえば、パソコンがACDFを選びユーザーがABCDと入力した場合、1ヒット、3ブローと表示されます

1ヒット、2ブローですよね?

> ・入力する値はアルファベット(A〜F)である(大文字のみです)。 

簡単な修正で済ますなら、A〜Fを0〜5(1〜6)と見なせば良いです。
これなら、入力する値を変換するだけで行けます(A→1、B→2、…)。

> ・入力する回数は最大で10回である。
試行回数を格納する変数を用意して、do-while文の継続条件(もしくは文中)で試行回数が10回を超えていないかチェックするだけです。


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

Name: フリスク  ..ぴよぴよ(153ポイント)   Date: 2010/07/21(水) 23:36   No:57101     
Title: Re:C言語 ヒット・アンド・ブローについて    
1ヒット、2ブローですね

簡単な修正で済ますなら、A〜Fを0〜5(1〜6)と見なせば良いです。 
これなら、入力する値を変換するだけで行けます(A→1、B→2、…)。 

ってことは最初のプログラムを書きなおすだけじゃできないんですか?

試行回数を格納する変数を用意して、do-while文の継続条件(もしくは文中)で試行回数が10回を超えていないかチェックするだけです

上のプログラムをどう変更すればいいんですか?


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

Name: パコネコ  ..上級者(18,052ポイント)   Date: 2010/07/21(水) 23:52   No:57102     
Title: Re:C言語 ヒット・アンド・ブローについて    
>ってことは最初のプログラムを書きなおすだけじゃできないんですか? 
簡単な修正って書いてるじゃないですか?
if文を使うのが一番わかりやすい・・・でもcharで宣言したもので一旦受け取らないとだめな気がします。
それから変換したらどうでしょうか?




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

Name: パコネコ  ..上級者(18,098ポイント)   Date: 2010/07/21(水) 23:55   No:57103     
Title: Re:C言語 ヒット・アンド・ブローについて    
>}while(hit!=N);
数えるならこの部分に条件をつけ足せばOKだと思います。
たとえば
cnt++;
}while(hit!=N || cnt<10);

のような感じで…  


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

Name: フリスク  ..ぴよぴよ(178ポイント)   Date: 2010/07/21(水) 23:56   No:57104     
Title: Re:C言語 ヒット・アンド・ブローについて    
実はまだまだ初心者に近くてあまり理解が追いつけなくて・・すみません


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

Name: パコネコ  ..上級者(18,086ポイント)   Date: 2010/07/22(木) 00:01   No:57105     
Title: Re:C言語 ヒット・アンド・ブローについて    
>In[i]-='0';
勉強不足でよくわからなかったのですが、
この処理って数字に直してるんですか?
文字コード表覚えてなくて…

=============
こちらこそ勉強不足ですいません 編集済み


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

Name: ぽこ  ..上級者(23,750ポイント)   Date: 2010/07/22(木) 00:05   No:57106     
Title: Re:C言語 ヒット・アンド・ブローについて    
> >In[i]-='0';
> 勉強不足でよくわからなかったのですが、
> この処理って数字に直してるんですか?
> 文字コード表覚えてなくて…

数字を数値に変換しています。
数字'0'〜'9'までは連続していますので、例えば'7'は
'7'-'0'=7となります。 編集済み


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

Name: フリスク  ..ぴよぴよ(202ポイント)   Date: 2010/07/22(木) 00:05   No:57107     
Title: Re:C言語 ヒット・アンド・ブローについて    
確かそうだと・・


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

Name: パコネコ  ..上級者(18,191ポイント)   Date: 2010/07/22(木) 00:10   No:57108     
Title: Re:C言語 ヒット・アンド・ブローについて    
そうですか!
ありがとうございます。
それならA〜Fなども連続してるのでif文使わなくても変換できそうですね。
え〜と、小文字が間に入るんでしたっけ?そしてその前に数字があって…それを数値に変換ですか?
文字コードは難しいですね…夏休み中に覚えなくては…あ、上のは適当です。


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

Name: パコネコ  ..上級者(18,263ポイント)   Date: 2010/07/22(木) 00:17   No:57109     
Title: Re:C言語 ヒット・アンド・ブローについて    
大文字の後に小文字でした…
1〜Aまでは16文字、表では隣になってますね。
'A'-あれ?
16?'DLE'?どっちでしょう?どっちでもないかな?
とりあえずそれから-'0'でできますかね?
===========
あれ?「!」かな?
=======
違いました。
文字コードで16ずらせばいいんですが…あ、わかりました
下に書きます
 編集済み


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

Name: フリスク  ..ぴよぴよ(216ポイント)   Date: 2010/07/22(木) 00:20   No:57110     
Title: Re:C言語 ヒット・アンド・ブローについて    
うーん・・難しい


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

Name: パコネコ  ..上級者(18,307ポイント)   Date: 2010/07/22(木) 00:27   No:57111     
Title: Re:C言語 ヒット・アンド・ブローについて    
数字の’0’を引くってことは、
文字コードの前に数値があるんですよね。
つまり’A’のひとつ前の’@’を引けばいいんですね。
どうでしょう?
自信ありです(^^♪)
============
書き忘れてた…
つまり'A'-'@'=1ってことですよね。
'B'-'@'=2
'C'-'@'=3…

 編集済み


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

Name: ドラ  ..初心者(7,182ポイント)   Date: 2010/07/22(木) 00:29   No:57113     
Title: Re:C言語 ヒット・アンド・ブローについて    
>1.四個のアルファベット、AからFから四つ選んでランダムに選択して文字列にする。
>(選ばれる文字はすべて異なる文字
元のソースコードには重複を回避する処理が存在しませんので、
これについても考える必要がありそうです。


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

Name: ISLe  ..初心者(8,679ポイント)   Date: 2010/07/22(木) 00:30   No:57114     
Title: Re:C言語 ヒット・アンド・ブローについて    
C言語的には'A'〜'Z'(小文字も)は連続している保証がないんですよね。

連続していない文字コードを採用しているプラットフォームもあるのです。
パソコンでお目にかかることはないと思いますけど。


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

Name: パコネコ  ..上級者(18,323ポイント)   Date: 2010/07/22(木) 00:32   No:57115     
Title: Re:C言語 ヒット・アンド・ブローについて    
そーなんですか?
文字コード表見ながらやったのに…


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

Name: ISLe  ..初心者(8,757ポイント)   Date: 2010/07/22(木) 01:11   No:57117     
Title: Re:C言語 ヒット・アンド・ブローについて    
> 文字コード表見ながらやったのに…

アルファベットが連続している前提なら
'A'-'A'+1 → 1
'B'-'A'+1 → 2
'C'-'A'+1 → 3
としたほうが'A'の前が何かとか気にしなくて済みますよ。

プラットフォーム限定と断ってやれば良いですし。


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

Name: パコネコ  ..上級者(18,354ポイント)   Date: 2010/07/22(木) 01:53   No:57119     
Title: Re:C言語 ヒット・アンド・ブローについて    
結局数値を足すことできたんですね。

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

Name: フリスク  ..ぴよぴよ(234ポイント)   Date: 2010/07/22(木) 06:54   No:57120     
Title: Re:C言語 ヒット・アンド・ブローについて    
すみません

寝ちゃってました


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

Name: フリスク  ..ぴよぴよ(271ポイント)   Date: 2010/07/22(木) 17:39   No:57152     
Title: Re:C言語 ヒット・アンド・ブローについて    
やっぱりぜんぜんできません

今日までに作りたいんで協力してくれると助かります


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

Name: ookami  ..プログラマー(36,489ポイント)   Date: 2010/07/22(木) 18:56   No:57163     
Title: Re:C言語 ヒット・アンド・ブローについて    
老婆心ながら一応フリスクさんに言っておきますが、

「どうがんばった結果わからないのか」を書かなければ、切実さは伝わりません。

少なくとも私には伝わってきませんでした。


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

Name: フリスク  ..ぴよぴよ(295ポイント)   Date: 2010/07/22(木) 20:36   No:57176     
Title: Re:C言語 ヒット・アンド・ブローについて    
数値を文字(アルファベット)に変換する方法を調べていたのですが・・理解できないものが多くて


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

Name: ドラ  ..初心者(7,547ポイント)   Date: 2010/07/22(木) 21:21   No:57178     
Title: Re:C言語 ヒット・アンド・ブローについて    
> 数値を文字(アルファベット)に変換する方法
こんな感じでいいのではないですか?
文字列リテラルのn番目の文字を参照しているので、文字コードが
連続しているかどうかなど関係ありません。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int i;
    
    srand((unsigned)time(NULL));
    
    for (i = 0; i < 20; i++)
    {
        printf( "%c ", "ABCDEF"[rand()%6] );
    }
    putchar('\n');
    
    return 0;
}



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

Name: パコネコ  ..上級者(18,504ポイント)   Date: 2010/07/22(木) 21:32   No:57179     
Title: Re:C言語 ヒット・アンド・ブローについて    
そんなことできるんですね。
で、結局アルファベットを数値に変換はできたんですか?
できたんならいいですけど…

数値をアルファベットには「ドラ」さんのでできそうですね。
ドラさん勉強になりました。



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

Name: フリスク  ..ぴよぴよ(309ポイント)   Date: 2010/07/22(木) 21:41   No:57182     
Title: Re:C言語 ヒット・アンド・ブローについて    
いまからやってみます


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

Name: だいちゃん  ..ぴよぴよ(735ポイント)   Date: 2010/07/23(金) 17:06   No:57255     
Title: Re:C言語 ヒット・アンド・ブローについて    
>数値を文字(アルファベット)に変換する方法を調べていたのですが・・理解できないものが多くて 

ならばせめて
調べて見つけた方法をここに転記して

>こういう方法を見つけたんですがどういう処理を行っているのか
>コードを見るだけでは理解できないので教えてください

くらいは書けますよね?


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

Name: パコネコ  ..上級者(21,095ポイント)   Date: 2010/07/23(金) 17:09   No:57256     
Title: Re:C言語 ヒット・アンド・ブローについて    
そういえば
昨日までに作りたかったとか書いてた気が…


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



Name: ルーニー  ..かけだし(2,031ポイント)   Date: 2010/07/23(金) 13:07   No:57217       
Title: ファイルを読み込んで計算    
下の問題に取り組んでいるのですが、計算結果が明らかにおかしな数になっています。おかしいところとその改善法を教えてください。
よろしくお願いします。

問題:レポートの得点が記録されたプログラムがある。これからデータを読み取り、平均、標準偏差、最大値、最小値を求めるプログラムを求めなさい。 

#include <stdio.h>

int main (int argc, const char * argv[]) {
    int max,min,i;
    double average,stdev;
    char line[100],name[100],point[100];
    int sum=0;
    double diff[100];
    double a[100];
    
    FILE*in_file;
    in_file=fopen("/auto_mnt/home1/09nen/1EC09098K/Documents/File1.txt","r");
    if(in_file==NULL){
        return 0;
    }
    
    
    while(fgets(line,100,in_file)!=NULL)    { 
        sscanf(line, "%" "%s" ,name,point);
    }

        for (i=0;i<100;i++) 
        {
            sum+=point[i];
        }
        average=sum/name[i];        
        
        for (i=0;i<100;i++)
        {
            diff[i]=average-point[i];
            
        }
        
        for (i=0;i<100;i++)
        {
            a[i]=pow(diff[i],2);
        }
        
        for (i=0;i<100;i++)
        {
            sum+=a[i];
        }
        
        stdev=sqrt(sum/name[i]);
        
        for (i=0;i<100;i++)
        {    
            if(max<point[i]) max=point[i];
            if(min>point[i]) min=point[i];
        }
        
        
        printf("平均=%f, 標準偏差=%f,最大値=%d,最小値=%d\n",average,stdev,max,min);
      
    
    
fclose(in_file);
    

    return 0;
    }


2倍のポイントを手に入れた! 1,464ポイント を手に入れた。


Name: ルーニー  ..かけだし(2,057ポイント)   Date: 2010/07/23(金) 13:42   No:57218     
Title: Re:ファイルを読み込んで計算    
分母の表し方と変数の使い方がよくわかりません。

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

Name: パコネコ  ..上級者(20,242ポイント)   Date: 2010/07/23(金) 14:52   No:57225     
Title: Re:ファイルを読み込んで計算    
勘違いならごめんなさい。
そして勉強のために教えてください。

>sscanf(line, "%" "%s" ,name,point); 
ここにある"%"ってなんですか?
位置的にはnameと連動しているんですよね。
sscanfは使ったことがないんでわかりませんが、%sとか%cなどは知ってるんですが…あとは%d,%fですね。



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

Name: ドラ  ..中級者(9,085ポイント)   Date: 2010/07/23(金) 14:59   No:57227     
Title: Re:ファイルを読み込んで計算    
とりあえずコメントを入れてみました。

#include <stdio.h> 

int main (int argc, const char * argv[]) { // コマンドライン引数を使ってないのでvoidでいいのでは?
    int max,min,i; 
    double average,stdev; 
    char line[100],name[100],point[100]; // nameはchar型の2次元配列、pointはint型の配列では?
                                         // またline配列の100とpoint配列の100は同じ100でも意味が違います。
                                         // マジックナンバーを使わずマクロにでも置き換えてください。
    int sum=0; 
    double diff[100]; 
    double a[100]; 

    FILE*in_file; 
    
    // 質問するときはファイルのデータも載せた方がいいです。実行できない。
    // 回答者の側でファイルを用意すればできるけど、めんどくさ過ぎる。
    // ついでに、そのファイルを正しく処理できたときの計算結果も載せるとGood!
    in_file=fopen("/auto_mnt/home1/09nen/1EC09098K/Documents/File1.txt","r"); 
    if(in_file==NULL){ 
        return 0; 
    } 


    while(fgets(line,100,in_file)!=NULL)    {  
        sscanf(line, "%" "%s" ,name,point);  // "%" "%s" は "%%s"と同じですが・・・
    } 

    for (i=0;i<100;i++)  // ファイル内のデータは100件に決め打ちしていいのですか?
    { 
        sum+=point[i];  // 現状では文字コードを合計する事になってしまいます。
    } 
    average=sum/name[i];  // 平均を計算するときの分母は人数(データの件数)ですよ。

    for (i=0;i<100;i++) 
    { 
        diff[i]=average-point[i]; 

    } 

    for (i=0;i<100;i++) 
    { 
        a[i]=pow(diff[i],2);  // pow()を使うときは #include <math.h> が必要。
    } 

    for (i=0;i<100;i++) 
    { 
        sum+=a[i];  // sumには平均を計算した時の値が残ったままになっていますが・・・
                    // また、a[i]はdouble型でsumはint型。小数点以下が切り捨てられてしまいます。
    } 

    stdev=sqrt(sum/name[i] );  // 分母は人数(データの件数)ですよ。

    for (i=0;i<100;i++) 
    {     
        if(max<point[i]) max=point[i];  // 未初期化のmax(ゴミ値)をいきなり使用しています。
        if(min>point[i]) min=point[i];  // 未初期化のmin(ゴミ値)をいきなり使用しています。
    } 


    printf("平均=%f, 標準偏差=%f,最大値=%d,最小値=%d\n",average,stdev,max,min); 

    fclose(in_file);

    return 0; 
} 


2倍のポイントを手に入れた! 1,538ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(54,487ポイント)   Date: 2010/07/23(金) 15:05   No:57229     
Title: Re:ファイルを読み込んで計算    
「レポートの得点が記録されたプログラムがある。」
問題はこの通りでしょうか
普通は記録されたファイルでプログラムというのは変ですね
データを読み取るにはそのデータのフォーマットがわからないとどうしようもないです
テキスト形式で名前と得点がコンマ区切りで1データ毎に改行されているとか


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

Name: パコネコ  ..上級者(20,372ポイント)   Date: 2010/07/23(金) 15:09   No:57231     
Title: Re:ファイルを読み込んで計算    
>sscanf(line, "%" "%s" ,name,point);  // "%" "%s" は "%%s"と同じですが・・・
すいません、%%sも知らないのですが…教えていただけないでしょうか?
む、ということは数が合わないからやっぱり別?
ファイルからの読み込みのときに私は一マスあけてます。
でも開けなくてもできましたっけ?
結局「%」って何なんですか〜…ミス?



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

Name: ドラ  ..中級者(9,310ポイント)   Date: 2010/07/23(金) 16:51   No:57249     
Title: Re:ファイルを読み込んで計算    
>パコネコさん

"%" "%s" が "%%s"と同じになるのは空白類文字を挟んで隣接する文字列リテラル同士は
コンパイル時に連結されて1つの文字列リテラルになるからです。

scanf系関数の書式指定文字列の中で%は変換指定を書くときの特別な文字なので
"%%"と2つ続けることで'%'という1文字を表します。

scanf系の書式指定文字列中に出てくる変換指定以外の文字には次のような意味があります。
空白類文字・・・空白類文字が続く限り読み捨てろ。
それ以外・・・・その文字を読み捨てろ。読み込み不一致を起こしたら、
                その文字をストリームに残したままscanf系関数を終了。

つまり"%%s"では、次のような意味になります。
・'%'という文字を読み捨てろ。読み込み不一致ならsscanf終了。
・次に's'という文字を読み捨てろ。読み込み不一致ならsscanf終了。
・おしまい。

結局、変数に何も読み込めていないのです。
ルーニーさんが書き間違っただけだと思いますよ。


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

Name: パコネコ  ..上級者(21,033ポイント)   Date: 2010/07/23(金) 16:53   No:57251     
Title: Re:ファイルを読み込んで計算    
なるほど…ドラさん
わかりやすい、解説ありがとうございました。



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



Name: dic  ..比類無きプログラマー(87,607ポイント)   Date: 2010/07/21(水) 19:30   No:57077       
Title: 文字列を文字(文字列)にする    
タイトルの通りなのですが、char string[80]内にある文字列
abcd%20efgh%20ijklm%20kalkj
というものが代入されているとして
この文字列の %20 を _ に変換したいのですが
str...関数でこのような関数はあるのでしょうか?
自分では見つけれなかったので

なかったら自作するしかないので
あったらその関数を使おうかなと思ってます

str系でなくてもいいです

環境:WindowsXP, Visual C++ 6.0
制限:特になし


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


Name: softya [URL]  ..ハッカー(186,753ポイント)   Date: 2010/07/21(水) 20:58   No:57083     
Title: Re:文字列を文字(文字列)にする    
abcd%20efgh%20ijklm%20kalkj はURLエンコードされている文字列だと思いますが、C言語の標準関数ではURLデコードできる関数は無いですね。ちなみに%20は0x20の事なので半角空白だと思います。

デコード方法の参考。
http://www.kinet.or.jp/hiromin/cgi_introduction/appendix/url_encode.html


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

Name: ISLe  ..初心者(8,609ポイント)   Date: 2010/07/21(水) 21:51   No:57087     
Title: Re:文字列を文字(文字列)にする    
str系で文字列を探すのはstrstrです。

でも%見付けて続く数字を処理するのがよろしいですね。

--追記
質問は変換までできる関数はないかってことでしたね。
正規表現ライブラリとかになってしまいますかね。 編集済み


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

Name: dic  ..比類無きプログラマー(87,839ポイント)   Date: 2010/07/22(木) 15:51   No:57147     
Title: Re:文字列を文字(文字列)にする    
>softyaさん
そうです URLの空白文字が%20になるので、変換できる関数がC/C++にあるのかなぁと思ってたのですが
ないみたいですね
自作も・・・かなり、難しいレベルに入ります(私の少ない知能では)
%だけを_に変換する自作関数を作ります
参考のリンク先サイトは
私の頭では理解が・・・orz
勉強を頑張りたいと思います

>ISLeさん
たしかにstrstrで%のところをヒットさせて処理する・・・って形になるのですが
なかなかアルゴリズムが考えつきません
なので %20 を _20 に変換して、これでよしとしました

正規表現は・・・あつかったことないので、分からないですね
boostとかにあるんでしょうか?
まだ、boostいじってないので良く分かってません
参考本が少なく値段も結構するので、手がでないです

回答ありがとうございました
 編集済み


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

Name: フリオ  ..プログラマー(34,784ポイント)   Date: 2010/07/22(木) 17:34   No:57151     
Title: Re:文字列を文字(文字列)にする    
 
 とりあえず、単純に文字列を置き換えるだけなら、
 
#include <stdio.h>
#include <string.h>

char *replace(char *s1, const char *s2, const char *s3)
{
    size_t l2 = strlen(s2), l3 = strlen(s3);
    
    if(l2){
        char *p;
        
        for(p = s1; p = strstr(p, s2); p += l3){
            memmove(p + l3, p + l2, strlen(p + l2) + 1);
            memcpy(p, s3, l3);
        }
    }
    return s1;
}

int main(void)
{
    char s[128] = "abcd%20efgh%20ijklm%20kalkj";
    
    puts(s);
    puts(replace(s, "%20", "_"));
    puts(replace(s, "", "%20"));
    puts(replace(s, "_", "%20"));
    puts(replace(s, "%20", ""));
    return 0; 
}

 


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

Name: フリオ  ..プログラマー(35,103ポイント)   Date: 2010/07/22(木) 18:47   No:57158     
Title: Re:文字列を文字(文字列)にする    
 
 %**を'\x**'に置き換えるプログラムを考えてみました。
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *func(char *s)
{
    char *p;
    
    for(p = s; p = strchr(p, '%'); ++ p){
        char hex[3], *e;
        int c;
        
        hex[0] = *(p + 1); hex[1] = *(p + 2); hex[2] = '\0';
        c = strtol(hex, &e, 16);
        if(!*e){
            memmove(p + 1, p + 3, strlen(p + 3) + 1);
            *p = c;
        }
    }
    return s;
}

int main(void)
{
    char s[128] = "%61%62%63%64%20%65%66%67%68%20%69%6a%6b%6c%6d%20%6e%6f%70%71";
    
    puts(s);
    puts(func(s));
    return 0; 
}
   一回一回後ろ全部をずらすのは効率が悪いので、たかぎさんのを参考にfuncを書き換えました。
char *func(char *s)
{
    char *p, *q;
    
    for(p = q = s; *p = *q; ++ p, ++ q){
        if(*p == '%'){
            char hex[3], *e;
            int c;
            
            hex[0] = *++ q; hex[1] = *++ q; hex[2] = '\0';
            c = strtol(hex, &e, 16);
            if(!*e) *p = c;
            else q -= 2;
        }
    }
    return s;
}

 編集済み


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

Name: たかぎ [URL]  ..ハッカー(214,983ポイント)   Date: 2010/07/22(木) 18:49   No:57159     
Title: Re:文字列を文字(文字列)にする    
エラーチェックはしていませんが...


#include <stdio.h>
#include <ctype.h>

int main(void)
{
  char string[80] = "abcd%20efgh%20ijklm%20kalkj";
  char *s1, *s2;
  int c;

  for (s1 = s2 = string; (c = *s2) != '\0'; s1++, s2++)
  {
    if (c != '%')
    {
      *s1 = c;
    }
    else
    {
      c = (unsigned char)s2[1];
      *s1 = (isdigit(c) ? (c - '0') : (tolower(c) - 'a' + 10)) << 4;
      c = (unsigned char)s2[2];
      *s1 |= (isdigit(c) ? (c - '0') : (tolower(c) - 'a' + 10));
      s2 += 2;
    }
  }
  *s1 = '\0';
  puts(string);
  return 0;
}

こんな感じでよいのでは?


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

Name: dic  ..比類無きプログラマー(87,838ポイント)   Date: 2010/07/23(金) 16:52   No:57250     
Title: Re:文字列を文字(文字列)にする    
>フリオさん たかぎさん
複雑というか、こみいった処理をこれだけスマートにできるとは・・・
す、すごすぎる

プログラムをマスターすると
このくらいの処理も簡単なのですね
頭のつくりが違いすぎる・・・

助言ありがとうございました


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



Name: yamataro  ..ぴよぴよ(921ポイント)   Date: 2010/07/16(金) 18:51   No:56827       
Title: マップの当たり判定について    
今マリオのようなアクションを作っているのですが、マップの当たり判定がうまくいきません。
ブロックとキャラクターが重なったり、たまにすり抜けたりもします。
マップ判定の部分のコードを簡略化して書くと、

void map_judge(int x,int y,int* flag){
 
   for(int i=0;i<4;i++)
      flag[i] = 0;

   if(map[y / map_ysize + 1][x / map_xsize] == 1){flag[0] = 1;}//下向き
   if(map[y / map_ysize - 1][x / map_xsize] == 1){flag[1] = 1;}//上向き
   if(map[y / map_ysize][x / map_xsize + 1] == 1){flag[2] = 1;}//右向き
   if(map[y / map_ysize][x / map_xsize - 1] == 1){flag[3] = 1;}//左向き

}

※map_xsize,map_ysizeはブロックのサイズです。


こんな感じなんですが、なんか根本的に間違っているような気がします。
間違いがあれば、指摘していただければ幸いです。
よろしくお願いします。


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


Name: パコネコ  ..上級者(16,491ポイント)   Date: 2010/07/16(金) 20:40   No:56836     
Title: Re:マップの当たり判定について    
ジャンプしたりして、4つのブロックの間にキャラクターがいるときは大丈夫ですか?
(勘違いだったらごめんなさい)

==============
右下のブロックとか…
 編集済み


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

Name: めるぽん  ..初心者(5,942ポイント)   Date: 2010/07/17(土) 01:28   No:56870     
Title: Re:マップの当たり判定について    
パコネコさんの言うとおり、間にキャラクターがいるときの問題だと思います。
例えば map_xsize, map_ysize が 20 だったとして、map のデータが
0 0
0 1
となっているとします。このときにキャラの左上座標が (10,10) だったときを考えると、 キャラの幅を考えると見た目は明らかに当たっていると思います。 ただし、実際の map_judge の処理は、x/map_xsize と y/map_ysize が 0 なので map[0][0] の上下左右を見ることになり、 map[1][1] を確認しないため当たったことになりません(範囲外アクセスなのはこの際無視します)。 なのでキャラの(x,y)座標だけでなくキャラの幅も考慮する必要があるのですけど、 当たった方向を考えつつのやるのはめんどそうですねぇ・・・。 まあ例えば
キャラのwidth<=map_xsize && キャラのheight<=map_ysize
なのであれば、キャラの4点だけ見れば十分そうなので、
map_judge(x, y, &flag);
// 補正処理とか
map_judge(x + chara_width - 1, y, &flag);
// 補正処理とか
map_judge(x, y + chara_height - 1, &flag);
// 補正処理とか
map_judge(x + chara_width - 1, y + chara_height - 1, &flag);
// 補正処理とか

って強引に解決しちゃってもいいかもしれませんね。


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

Name: パコネコ  ..上級者(17,103ポイント)   Date: 2010/07/17(土) 20:13   No:56902     
Title: Re:マップの当たり判定について    
結構前に先生に教えてもらった方法ですが、座標を4つに分けるというものでした。
x1=x/xsaizu;
x2=(x+xsaizu-1)/xsaizu;
y1=y/ysaizu;
y2=(y+ysaizu-1)/ysaizu;

みたいに?したら座標がぴったりのときは今までと同じですよね。
4つに分けるなら
x1は左で、x2は右にあるときです。
y1は上で、y2は下にあるとするという感じです。

私は、こういうものを使ってます。



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

Name: yamataro  ..ぴよぴよ(992ポイント)   Date: 2010/07/22(木) 16:30   No:57148     
Title: Re:マップの当たり判定について    
返事が遅れてすいません。
ご回答ありがとうございます。

やっぱり難しいですねえw
座標を4つに分けるというのは、x1,x2,y1,y2を使ってそれぞれの方向に判定する、ということですか?


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

Name: wing  ..中級者(12,331ポイント)   Date: 2010/07/22(木) 20:26   No:57175     
Title: Re:マップの当たり判定について    
yamataroさん、こんばんは。
マップの当たり判定って人によっていろいろあるし、
それを分かるように解説するのはたいへんだと思います。

添付の画像は、私が作った「スーパーマリコ」の
最初のころのサンプルです。
もし要望があれば、ソースやデータをアップします。


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

Name: パコネコ  ..上級者(18,890ポイント)   Date: 2010/07/22(木) 22:06   No:57188     
Title: Re:マップの当たり判定について    
あくまでも方法の一つという感じですかね。

右側にある壁(ブロック)を判定するならこんな感じで
if(map[x2][y1]==1 || map[x2][y2]==1){
 …
}
map[][]==1のときはブロックありです。
その時は移動した分戻すとか…
座標をx=x1*xsaizuにするとかですね。

注意
これは右に移動するときの判定です。
ジャンプとかは、また別です。
書き方はおんなじでもできますが分けないとできません。


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

Name: yamataro  ..かけだし(1,049ポイント)   Date: 2010/07/23(金) 11:59   No:57215     
Title: Re:マップの当たり判定について    
ご回答ありがとうございます。

すみません、パコネコさんの方法で試してみたのですが、どうしてもうまくいきませんでした。
あと、wingさん、ソースを見せてもらえれば幸いです。


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

Name: パコネコ  ..上級者(19,764ポイント)   Date: 2010/07/23(金) 14:20   No:57219     
Title: Re:マップの当たり判定について    
ちなみに、「yamataro」さんの場合だと私とはXとYが逆ですよ。

一応書き方としては
x+=ax;//プレイヤーが横移動
//ここで判定です。
if(0<ax && map[x2][y1]==1 || map[x2][y2]==1)//右移動時
  x=(x2-1)*xsaizu;//壁まで移動?
if(ax<0 && map[x1][y1]==1 || map[x1][y2]==1)//左移動時
  x=(x1+1)*xsaizu;//壁まで移動?

ay++;//自由落下
y+=ay;//ジャンプなどの縦移動
if(0<ay && map[x1][y2]==1 || map[x2][y2]==1){//下移動時
 x=(y2-1)*ysaizu;//地面まで移動?
 ay=0;
}
if(ay<0 && map[x1][y1]==1 || map[x2][y1]==1){//上移動時
 x=(y1+1)*ysaizu;//頭ぶつけます。まで移動?
 ay=0;
}

これでだめなら、相性悪かったということですね。
移動の書き方によってもあたり判定の書き方、書く場所は変わると思いますし…
私も他の人の見てみたいですね。
「wing」さんのソース楽しみにしてます。



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

Name: wing  ..中級者(12,484ポイント)   Date: 2010/07/23(金) 15:05   No:57230     
Title: Re:マップの当たり判定について    
アップします。
http://www1.axfc.net/uploader/Sc/so/136724
キーは7777です。
説明のところに「テストマリコ」と書いてあります。
ファイルサイズは40KBくらいだったんですが、
拡張子がないとアップできなかったのでzipにしました。

新しいプロジェクトを作ってそのフォルダの中にコピー
すればいろいろいじることができると思います。


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



Name: ゆうき  ..入門者(4,425ポイント)   Date: 2010/07/22(木) 22:05   No:57187       
Title: 「ゲームプログラマーとの接し方がわかる」サイト    
以前ここの掲示板で
ゲームプログラマーとの接し方を紹介しているサイトのURLを見た気がします。
そのサイトを探しています。

あらゆる検索エンジンやここの過去ログを当たってみたのですが、あまりキーワードと言えるものを覚えていなくて探し出せていません。


そのサイトの内容は覚えている限りだと


「ゲーム内容のちょっとした仕様変更がプログラマーに及ぼす負担がうんぬん・・・」

というもので、主に「プログラムの仕事の性質をなるべく理解してあげて下さい」といったものでした。

ご存知の方いましたら、よろしくお願いします。





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


Name: ぽこ  ..上級者(23,751ポイント)   Date: 2010/07/22(木) 22:27   No:57193     
Title: Re:「ゲームプログラマーとの接し方がわかる」サイト    
ここですかね?
http://www.geocities.co.jp/HeartLand-Kaede/9677/read.htm


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

Name: パコネコ  ..上級者(19,222ポイント)   Date: 2010/07/22(木) 23:03   No:57197     
Title: Re:「ゲームプログラマーとの接し方がわかる」サイト    
すごく
面白いですね、これ…プログラマー目指してるんで勉強にもなりました。
表現的に何回笑ったか…そして何回うなずいたことか…

これ書いてる人…本とか出してたらほしいですね。
内容にもよりますけど。

ちょっと関係ないこと(板的に)で、すいませんでした。


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

Name: ゆうき  ..入門者(4,518ポイント)   Date: 2010/07/23(金) 11:45   No:57214 解決!     
Title: Re:「ゲームプログラマーとの接し方がわかる」サイト    
>ぽこさん

これです!これです!

ありがとうございます!!。
非常に助かりました^^



>パコネコさん
パコネコさんの文章も
個性的で...すごく
面白いと思います、そう..感じましたよ^^



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

Name: パコネコ  ..上級者(19,987ポイント)   Date: 2010/07/23(金) 14:26   No:57220     
Title: Re:「ゲームプログラマーとの接し方がわかる」サイト    
解決済みだけど一言だけ。
/*
パコネコさんの文章も 
個性的で...すごく 
面白いと思います、そう..感じましたよ^^
*/
そう言ってもらえるとすごくうれしいです。
数系(理系?)だからと言ってはいいわけですが、人に考えてること伝えるの苦手なんですよね…
特に文章にするとなんか変になってしまうんですよね、後から書くことを追加して言っちゃって…
性格を個性的とは学校でもよく聞きますが、文章で言われたのは初めてです。

とにかく、ありがとうございます。



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



Name: サイ  ..かけだし(1,063ポイント)   Date: 2010/07/23(金) 10:41   No:57212       
Title: たびたびすいません    
ブロック崩しでバーを上にも追加したいんですが、上のほうのバーを追加するとどっちかのバーに当たり判定がありません。
変更したプログラム

'バーとの当たり判定を計算
If tamaYosokuY >= 10 And tamaYosokuY < 20 Then
End if 
を追加し、

 '画面への描画
g.FillRectangle(Brushes.Orange, CInt(bar), 10, BAR_HABA, 10)   'バー
を追加したんですがバーは上下に表示されましたがバーの当たり判定がうまくいきません

あと画像データを背景をつけたいんですが、backgroundとかでは無理なんですか?





                    


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


Name: シエル  ..プログラマー(32,148ポイント)   Date: 2010/07/23(金) 10:58   No:57213     
Title: Re:たびたびすいません    
昨日のトピならまだ過去ログにはいってないはずです。
何度も投稿しないでください。 編集済み


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



Name: 黒猫  ..入門者(3,591ポイント)   Date: 2010/07/20(火) 17:33   No:57001       
Title: たびたび失礼します。    
下記ってもう少しスリムにならないですか??
これ以上の仕方がわからないので・・・お願いしまうす。


if((out = fopen("eep_size.txt", "r+")) == NULL){
 printf("ファイルがありません。作成します。\n"); 
 out = fopen("eep_size.txt", "w");
}
else if((out = fopen("eep_size.txt", "r+")) != NULL){
  printf("ファイルが存在します\n");
  printf("上書きしますか? yes/no \n");
  scanf("%3s", answer);
  if(strcmp(answer, "yes") == 0){
    out = fopen("eep_size.txt", "w");
  }
  else{ 
    fclose(in);
    printf("終了します\n");
    exit(0);
   }
}


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


Name: パコネコ  ..上級者(17,200ポイント)   Date: 2010/07/20(火) 19:13   No:57007     
Title: Re:たびたび失礼します。    
if文のカッコを削るとか?
r+じゃなくてwだけでできる気がする…勘違いだったらすいません
wでも新規作成しますよね?




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

Name: シエル  ..プログラマー(29,495ポイント)   Date: 2010/07/20(火) 19:25   No:57009     
Title: Re:たびたび失礼します。    
何がしたいのかよく分かりませんが、
どの辺をスリムにしたいのですか?


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

Name: 黒猫  ..入門者(3,680ポイント)   Date: 2010/07/20(火) 20:57   No:57012     
Title: Re:たびたび失礼します。    
ファイルの中の文字列を検索してtxtに書き込みをするんですが、
任意で入力したtxtが存在すれば「上書き」をするかとか、ないと
きは「新規」にtxtを作成するっていうものを作っています。

上のはその一部で、その部分がもっと簡単にできるとかないかなぁっと思って…。
なかったら良いのですが…。


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

Name: パコネコ  ..上級者(17,295ポイント)   Date: 2010/07/20(火) 21:00   No:57013     
Title: Re:たびたび失礼します。    
wだけだったら新規作成しますか?とかができなくなりますね。
失礼しました。
見やすいまま行数を減らしたいんですか?
それとも、文字数を減らしたいんですか?
もっときれいなやり方はありますか?ってことですか?
(または効率のいい)
どれかだとは、思いますけど…
=============
すいません。投稿がかぶりました。
(タイミングが…)
 編集済み


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

Name: シエル  ..プログラマー(29,533ポイント)   Date: 2010/07/20(火) 21:03   No:57014     
Title: Re:たびたび失礼します。    
最初のfopenの結果をif文の前に変数に代入しといて、
その変数をif文にかけたら少しはすっきりするんじゃないでしょうか。


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

Name: 黒猫  ..入門者(3,715ポイント)   Date: 2010/07/20(火) 21:14   No:57015     
Title: Re:たびたび失礼します。    
そうですねぇ・・・。
あまり長くするのは嫌なので、行数減らして効率の良い方法ですね。


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

Name: パコネコ  ..上級者(17,115ポイント)   Date: 2010/07/20(火) 21:34   No:57017     
Title: Re:たびたび失礼します。    
プログラム面では削れるもしくは書き換えるのはif文の中ぐらいなのでそれ以外の
書き方で行数をへらしてみます。
(少し見ずらくなったらごめんなさい)
/*
printf("ファイルが存在します\n"); 
printf("上書きしますか? yes/no \n"); 
*/

printf("ファイルが存在します\n"
       "上書きしますか?yes/no \n");

行数は変わらないけど…
/*
if(strcmp(answer, "yes") == 0){ 
    out = fopen("eep_size.txt", "w"); 
  } 
  else{ 
*/
赤色削るとか?
結果一行のみ削れた…ダメですね。
================
むしろこれ削れます?
//if((out = fopen("eep_size.txt", "r+")) != NULL)



 編集済み


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

Name: めるぽん  ..初心者(7,108ポイント)   Date: 2010/07/20(火) 22:09   No:57019     
Title: Re:たびたび失礼します。    
とりあえず、
...
fclose(out);
out = NULL; // 上書きしないときは exit してるからこれはいらないかも
printf("ファイルが存在します\n");
...

とするべきかと。まず正しく動かすことが重要です。


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

Name: ぽこ  ..上級者(22,592ポイント)   Date: 2010/07/20(火) 22:12   No:57020     
Title: Re:たびたび失礼します。    
効率がいいかどうか分かりませんが。。。

----
out = fopen("eep_size.txt", "r+");
if( out == NULL ){ 
 printf("ファイルがありません。作成します。\n");  
 out = fopen("eep_size.txt", "w");
} else { 
  printf("ファイルが存在します\n"); 
  printf("上書きしますか? yes/no \n"); 
  scanf("%3s", answer); 
  if(strcmp(answer, "yes") == 0){ 
    /*fclose(out)は要らない?*/
    out = fopen("eep_size.txt", "w"); 
  }
}

if ( out == NULL ){
    fclose(in); 
    printf("終了します\n"); 
    exit(0); 
}

----追記
↓のパコネコさんのご指摘にあるように、
上のソースは間違っています。
 編集済み


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

Name: パコネコ  ..上級者(17,141ポイント)   Date: 2010/07/20(火) 23:51   No:57022     
Title: Re:たびたび失礼します。    
あれ?
YESじゃないときの処理が削られてる…最後のはなんでinを閉じるんですか?
ミス?


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

Name: ぽこ  ..上級者(22,649ポイント)   Date: 2010/07/21(水) 00:07   No:57023     
Title: Re:たびたび失礼します。    
> あれ?
> YESじゃないときの処理が削られてる…最後のはなんでinを閉じるんですか?
> ミス?

ををぅ、ミスですね。
No:57020は忘れてください。

#Yesじゃない時の処理がプログラム終了とは思わなかったので
#読み違えちゃいました。。


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

Name: パコネコ  ..上級者(17,217ポイント)   Date: 2010/07/21(水) 00:44   No:57026     
Title: Re:たびたび失礼します。    
ほとんどあってると思うので、忘れる必要もないような気が・・・
YESじゃないときの処理付け足して
最後にアウトで閉じたら完成なのでは?
いい形にできてると思う。


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

Name: ISLe  ..初心者(8,593ポイント)   Date: 2010/07/21(水) 01:01   No:57030     
Title: Re:たびたび失礼します。    
if ((out = fopen("eep_size.txt", "r")) != NULL) {
    fclose(out);
    printf("ファイルが存在します\n");
    printf("上書きしますか? yes/no \n");
    scanf("%3s", answer);
    if (strcmp(answer, "yes") != 0) {
        fclose(in);
        printf("終了します\n");
        exit(0);
    }
}
else {
    printf("ファイルがありません。作成します。\n");
}
out = fopen("eep_size.txt", "w");

何か足らないですかね。


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

Name: パコネコ  ..上級者(17,240ポイント)   Date: 2010/07/21(水) 14:26   No:57055     
Title: Re:たびたび失礼します。    
fclose(in);
これは?
outなのでは?
あとは…見つかりませんでした。


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

Name: ぽこ  ..上級者(23,025ポイント)   Date: 2010/07/21(水) 18:17   No:57068     
Title: Re:たびたび失礼します。    
> fclose(in);
> これは?
> outなのでは?

黒猫さんご本人がこう書かれているので、間違いではないと思いますよ。



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

Name: パコネコ  ..上級者(18,338ポイント)   Date: 2010/07/22(木) 00:35   No:57116     
Title: Re:たびたび失礼します。    
ほんとだ…でもなんでinを閉じるんでしょう?

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

Name: ISLe  ..初心者(8,800ポイント)   Date: 2010/07/22(木) 01:18   No:57118     
Title: Re:たびたび失礼します。    
この部分より前にファイルを開いてて、このあとinから読み込んでoutに書き出す処理が続く、と想像します。

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

Name: QERA  ..ぴよぴよ(186ポイント)   Date: 2010/07/22(木) 18:25   No:57155     
Title: Re:たびたび失礼します。    
初めまして、横から失礼します。
こんな感じではどうでしょうか?

if((out = fopen("eep_size.txt","r")) != NULL){
    printf("ファイルが存在します\n上書きしますか? yes/no\n");
    scanf("%3s",answer);
    if(strcmp(answer,"yes") == 0){
        out = fopen("eep_size.txt","w");
    }
}
else{
    printf("ファイルがありません。作成します。\n");
    out = fopen("eep_size.txt","w");
}
fclose(out);
printf("終了します\n");
exit(0);


帰り際に急いで考えたので、動くかどうかはちょっと怪しいですが・・・

"終了します"の文字位置はここではいけないのでしょうか?

それと、この部分だけのコードですとどうしても最後のfcloseが
inではおかしいように思えます。

ISLeさんは想像しますと書いていますが、私たちは分からないので、ある部分だけで判断してしまうと思うので、ここはfclose(out)というようにしました。

すみません、急いでいるので何を書いているのか自分でもちんぷんかんぷんなので^^;


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

Name: ISLe  ..初心者(8,856ポイント)   Date: 2010/07/22(木) 18:42   No:57157     
Title: Re:たびたび失礼します。    
> ISLeさんは想像しますと書いていますが、私たちは分からないので、ある部分だけで判断してしまうと思うので、ここはfclose(out)というようにしました。

inについては想像するしかできませんが、質問のコードでは最後のブロックを抜けたところでoutが"w"モードでオープンされているので、それは必要条件になるのではないかと。


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

Name: QERA  ..ぴよぴよ(269ポイント)   Date: 2010/07/22(木) 19:05   No:57166     
Title: Re:たびたび失礼します。    
>ISLeさん
まあ、inであってもoutであっても、黒猫さんが合っているやりかたで
やってもらえばどちらでもいいと思います。

とりあえず私はoutではないかと、思ったものなので


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

Name: 黒猫  ..入門者(3,851ポイント)   Date: 2010/07/22(木) 20:54   No:57177 解決!     
Title: Re:たびたび失礼します。    
たくさんの回答ありがとうございます。
皆さんの回答を参考にさせていただきます。

因みに言うと、載せているソースは上下に続きがあるので、混乱されたと思います。
上に読み込み(in)がオープンしているので、書き込みファイルをyes以外(no)にすると
ファイルをクローズしてプログラムが終了します。 編集済み


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

Name: パコネコ  ..上級者(18,553ポイント)   Date: 2010/07/22(木) 21:37   No:57181     
Title: Re:たびたび失礼します。    
終わったみたいなのでいいんですけど…かたっぽだけなんですね。
inはともかくoutは閉じないんですね。
いっそinも閉じなきゃいいのに…と、愚痴っときます。


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

Name: ISLe  ..初心者(8,887ポイント)   Date: 2010/07/23(金) 00:55   No:57207     
Title: Re:たびたび失礼します。    
コードの一部だとおっしゃっているので、そっくり入れ替えられることを心がけました。

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



Name: sss  ..ぴよぴよ(1ポイント)   Date: 2010/07/22(木) 18:51   No:57161       
Title: 無題    
スマブラみたいな感じの3Dゲームを作りたいんですが
何から学べばいいですか?


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


Name: シエル  ..プログラマー(31,767ポイント)   Date: 2010/07/22(木) 18:55   No:57162     
Title: Re:無題    
あなたがどのくらいのスキルをお持ちかによって変わってきます

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

Name: ookami  ..プログラマー(36,571ポイント)   Date: 2010/07/22(木) 19:03   No:57165     
Title: Re:無題    
「スマブラみたいな感じの3Dゲーム」を作るなら、百人単位の人を束ねるスキルがないとw

利権がらみの調整とかすごい大変そうですねwwww

まぁそれはさておき、まずはここの管理人さんの講座を読むのをオススメします。


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

Name: シエル  ..プログラマー(31,821ポイント)   Date: 2010/07/22(木) 19:06   No:57167     
Title: Re:無題    
あなたがここの管理人さんの講座を見て、さっぱり分からないようであれば、
あなたが目標とするゲームが作れるようになるのは相当先のことでしょう。


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

Name: sss  ..ぴよぴよ(36ポイント)   Date: 2010/07/22(木) 19:08   No:57168     
Title: Re:無題    
ありがとうございます

まずはこうざをみることにしますね〜^^


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

Name: softya [URL]  ..ハッカー(186,973ポイント)   Date: 2010/07/22(木) 19:37   No:57170     
Title: Re:無題    
プログラミング初心者が基本的な3Dゲームを作れる様になれるとしたら、軽く3年から5年は必要だと思います。それに高い確率で挫折しかねません。一気に高望みせず一歩一歩積み重ねることが大事です。
たとえN64レベルだとしても完成は7年〜10年先ぐらいと考えてもらったほうが現実的だと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,234,033ポイント)   Date: 2010/07/22(木) 23:49   No:57205     
Title: Re:無題    
3Dのプログラムは、プログラミングスキル以外にある程度の数学的知識も必要になります。
ですので、もし高校生にまだなっていないなどの場合は数学がネックになってしまう場合もあると思います。

私たちにはsssさんの事が全く解らないので、
質問する時は軽く自己紹介をされると適切な回答が集まりやすいと思いますよ。


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



Name: KEN  ..かけだし(1,106ポイント)   Date: 2010/07/22(木) 08:36   No:57124       
Title: カーブ    
今自分は敵の動きでカーブの動きを作りたいのですがどうしたらいいか分かりません。
したいカーブのイメージをあげておきます

Y座標のみに値を足していきカーブするとX座標は同じで横にただついていくだけ、としたらいいのですが
それが良く理解できません。

ちなみに自分はサインカーブの動きも遣ってるのですが、これでただY軸を足したらいいだけと言われましたが
良く分からないです

//ヘッダー
#define RAD (3.141592f / 180.0f)//ラジアン値に変換


//cpp
  float Enemy::m_BaseWaveHeight =    1.0f; //振り幅基本角度
    
    m_SinCurveHeight = 0.0f;           //振り幅基本高さ

 //角度を足して一周期したら初期化
 if( ++m_Angle > 360.0f ){
      m_Angle = 0.0f; 
 } 
  //サインカーブ
  m_SinCurveHeight = m_BaseWaveHeight * 
    (float)sin( 2.0f * m_Angle * RAD );

これをどうしたらいいか全く分かりません
どなたか知恵を貸して下さい
よろしくお願いします

 編集済み


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


Name: やっくん  ..プログラマー(32,239ポイント)   Date: 2010/07/22(木) 10:08   No:57127     
Title: Re:カーブ    
>Y座標のみに値を足していきカーブするとX座標は同じで横にただついていくだけ
X座標は同じで横についていくだけとありますが、何について行くのでしょうか
自分のキャラクターが存在し、その動きに合わせて敵も着いてくるということでしょうか?
それとも単にY座標が変化しても敵は等速運動を続けるということでしょうか?

申し訳ないですが、ソースコードのどれがX座標とY座標を表しているのかがわかりませんので回答があいまいになりますが・・・

/* X座標 */
もし、自分の動かすキャラクターに合わせて敵が動くならば、
敵のX座標値に自分キャラのX座標値を代入。

等速運動をさせるならば、
ループさせるたびに敵のX座標値に定数値を加算してばいけば良いかと思います。

/* Y座標 */
敵Y座標値には変位分だけループごとに加算してあげればいいかとおもいます。


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

Name: TKOZ  ..比類無きプログラマー(76,195ポイント)   Date: 2010/07/22(木) 16:39   No:57149     
Title: Re:カーブ    
ネットカフェから書き込みです。

簡単なツールをC#かVBで作れば良いとおもいます。

マウスがドラッグしている時(マウスが押されていて、離されていない状態)の座標を
記憶しておき、テーブル化で動きを再現するという手法です。

昔はこの方法がよく使われていました。(ギャラクシアンなど)

こうすることで、いろんな敵の移動が再現できます。

ただし、描画角度は計算するのが少し難しいかもしれません。


int XTbl[60*15];//15秒間のX座標
int YTbl[60*15];//15秒間のY座標

Enemy[i].x=XTbl[framecounter];
Enemy[i].y=YTbl[framecounter];

framecounter++;

こんな感じですが、ツールを作るのが難しいなら、DXライブラリをつかえば良いと思います。
GetMousePoint(int *x,int *y);
GetMouseInput();
これらの関数でデバッグモードでバイナリファイルなり、テキストファイルに保存するのは
どうでしょうか?


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

Name: パコネコ  ..上級者(19,148ポイント)   Date: 2010/07/22(木) 22:30   No:57194     
Title: Re:カーブ    
えーと…
ジャンプの軌道もカーブに近いですよね。

例で言うと
x=0;
y=0;
ax=10;
ay=0;
yuka=480;

while(y<yuka){//ループのかわりに床に達するまで
 x+=ax;
 y+=ay;

 ay++;
 描写
}
とか?
これはループ中、際限なくyの移動量が増えていきますけどね。
左上から右下に墜ちる感じです。
Xの移動量はわからないのでそのままにしました。


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



Name: KEN  ..かけだし(1,343ポイント)   Date: 2010/07/22(木) 21:34   No:57180       
Title: 敵の向き    
敵の方向転換の事で質問なのですが
主人公より後ろに敵がいる場合は右向き、
前からでてきたら左向きで出てこさす処理をしているのですが、
敵が上から出てきたとき、主人公と敵の位置(X座費用)が同じになった時に
敵が右にいるか左にいるか分からず常に右、左と向きの切り替えを続けて
そのまま突っ込んできます。

敵と主人公の位置が同じになった場合は敵の方向を右向きの状態で来さしたいんですが、
色々と試しましたが全く改善されません。
どなたか改善策を教えてくださいお願いします。

// 主人公との位置から現在の向きをだす
if( YuSyaPoz.x < AIPoz->x ){
  m_NowDir = RIGHT;
}

else{
   m_NowDir = LEFT;
}



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


Name: パコネコ  ..上級者(18,622ポイント)   Date: 2010/07/22(木) 21:42   No:57183     
Title: Re:敵の向き    
む?
右向きの敵が右に移動するから今度は左を向いてしまうということですか?
ある程度の幅を持たしてその範囲内のときは、右に移動しなくすればどうでしょう?

勘違いならすいません。


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

Name: シエル  ..プログラマー(32,068ポイント)   Date: 2010/07/22(木) 21:49   No:57184     
Title: Re:敵の向き    
おもしろい敵ですねw

一度向きをセットしたら、もうセットしないようにフラグでも立ててみてはいかが?


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

Name: KEN  ..ぴよぴよ(122ポイント)   Date: 2010/07/22(木) 21:54   No:57185     
Title: Re:敵の向き    
パコネコさん>

説明不足ですいません。イエそうではなく上から出てきた場合で、主人公と位置が同じになった時は
敵が右を向いていいか左を向いて良いか分からない状態になっているのでのような現象が起こっていると
思われます。

シエル さん>
フラグをどのように作ったらいいか全くわからないです 編集済み


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

Name: パコネコ  ..上級者(18,688ポイント)   Date: 2010/07/22(木) 21:56   No:57186     
Title: Re:敵の向き    
敵はどういう動きをするんですか?
上から出てきて下(主人公)に向かって移動?

右向きのときに右に移動するとかありますか?


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

Name: KEN  ..かけだし(1,505ポイント)   Date: 2010/07/22(木) 22:06   No:57189     
Title: Re:敵の向き    
パコネコ>さん

  

上から出てきて下(主人公)に向かって移動? 

はいそのとうりです。


右向きのときに右に移動するとかありますか? 

はいそのとうりです。右から出てきたときは右向きで
左から出てきたときは左向きででてきます。

主人公より後ろにいた敵が主人公を追い抜くと、敵は左向き
にかわります。そして主人公に向かってきます


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

Name: パコネコ  ..上級者(19,014ポイント)   Date: 2010/07/22(木) 22:16   No:57190     
Title: Re:敵の向き    
やっぱり…
理由とかわかりました。

移動量にもよりますが、移動させる文に横移動をさせない必要があります。
たとえば
if(teki_muki==0)//右向きのとき
 teki_x+=teki_idouryou;
となっているなら
if(teki_muki==0){//右向きのとき
 teki_x+=teki_idouryou;
 if(p_x<=teki_x)//向き判定で左向きになったら。
  teki_x=p_x;//プレイヤーと同じ座標にまで戻ります。
}

こんなのでどうでしょう?

===========
私が思った
理由についても
/*
主人公より後ろにいた敵が主人公を追い抜くと、敵は左向き 
にかわります。そして主人公に向かってきます 
*/
これには続きがありますよね。
常に主人公のほうに向かって移動するんですから、
左を向いた後次の移動で、右を向いてしまいます。
そして今度は左向きに…それが迷っているように見えたのではないでしょうか?
少なくとも私は、そんな状況に何度かなってしまったので…





 編集済み


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



Name: event  ..ぴよぴよ(130ポイント)   Date: 2010/07/22(木) 19:11   No:57169       
Title: イベントログの書き込み先    
お世話になります。

C言語で、イベントログにメッセージを出力しようとして
以下の方法で書き込みました。

    hEventLog = RegisterEventSource(NULL, exe);
    if(hEventLog == NULL){
        printf("event log can not open.\n");
        return (0);
    }

    bResult = ReportEvent(
        hEventLog,
        type,
        0,
        ID,
        NULL,
        1,
        0,
        &module,
        NULL);

    DeregisterEventSource(hEventLog);


しかし、不思議なことがおきました。
自分のXP端末や、社内のWindowsServer2003などでは、
アプリケーションの種類のイベントログに出力されたのですが、
お客様先のWindowsServer2003で実行したところ、
なぜかシステムの種類のイベントログに出力されてしまいました。

このEXEだけを呼ぶバッチを作り実行したところ、
アプリケーションに出力されるのですが、
他の日次で稼動するバッチに組み込んで実行させたところ
システムに出力されてしまいました。

この、状況によってアプリケーションやシステムに出力される
要因(環境変数?レジストリ?)をご存知の方、ご教示いただけないでしょうか。


よろしくお願いいたします。








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


Name: シエル  ..プログラマー(32,017ポイント)   Date: 2010/07/22(木) 20:22   No:57174     
Title: Re:イベントログの書き込み先    
MSDNを覗いてきたら、RegisterEventSourceの第二引数は下記のようになってました。


lpSourceName
登録済みハンドルを取得するイベントソースの名前を表す NULL で終わる文字列へのポインタを指定します。この名前は、レジストリの EventLog キーに登録されているログファイルエントリのサブキーでなければなりません。たとえば、レジストリに次のキーがある場合は、WinApp が有効なイベントログの名前です。
HKEY_LOCAL_MACHINE

  System

    CurrentControlSet

      Services

        EventLog

          Application

            WinApp

          Security

          System

戻り値



なのでレジストリを覗いてみたら何か分かるかもしれませんよ


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



Name:  ..初心者(7,749ポイント)   Date: 2010/07/16(金) 20:03   No:56833       
Title: ソースの評価?添削?を[雑談かな]    
 タイトルの通りなのですが、前回こちらの掲示板で
cuiのポーカーのコードを載せて、いろいろと助言を
いただき、それをもとに改良してみました。

 本来であれば、学校の先生等に添削してもらえれば
いいのですが、普通の高校に通っているため、
頼めず、周りにはプログラミングできる人もいないため、
自分の書いたコードがどのくらいだめなのか、が分からないので、
ぜひともだめな点を指摘していただきたいです。

 http://www1.axfc.net/uploader/File/so/47616.zip
PASS abab
上のURLから一式ダウンロードできます。


 注:イラストが下手ってことに関しては、練習用なので
許してください。それと、ゲームを本格的に作ろうとしてるのではないので、
Dxlibは使っていません。

 コンパイラ:VC++2008
  OS:WinXP SP3

 前回の質問:
http://www.play21.jp/board/formz.cgi?action=res&resno=51208&page=&lognum=157&id=dixq&rln=51269


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


Name: 白い時空  ..入門者(2,820ポイント)   Date: 2010/07/16(金) 22:43   No:56851     
Title: Re:ソースの評価?添削?を[雑談かな]    
自分が気になった点を、

なぜ、カードのマークにSがふたつあるんでしょうか?
別の文字のほうがいいですね。見分けられないですし。


気になるのは、カード交換のところです。
各桁に交換する数字を指定しているようですが、ポーカーでは基本的に同じカードを2回交換することは無いと思います。

ですから、1と0だけで入力し
「10011」なら、1,2,5桁目が1なので、1,2,5枚目のカードを交換。
「11111」なら、全部の桁が1なので、全部のカードを交換。
「00000」(つまり0)なら、数字が1の桁がないので交換しない。
という感じにしたほうが楽だと思います。


他にちょっと気になったのは、

char *wlhcoubuf = new char[32];
これにわざわざnewを使う意味はあるんですか?

mycards[i - 1].suu = yamafuda[sumcard].suu;
mycards[i - 1].mark = yamafuda[sumcard].mark;
同じ構造体なので別に分ける必要はなく、
mycards[i - 1] = yamafuda[sumcard];
でOKです。


プログラムはよく出来てると思います。
ですが、役を判定する関数がプレイヤーとCPUのカードを判定するせいで、関数の長さが2倍になっています。
これを解決できれば、もっと良くなると思います。
objectを渡すのではなく、手札の配列を渡してみたらどうですか。


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

Name:  ..初心者(8,176ポイント)   Date: 2010/07/17(土) 22:15   No:56911     
Title: Re:ソースの評価?添削?を[雑談かな]    
Sが二つあるのは単純に間違えていただけです。今、言われて気付きました…

>>ですから、1と0だけで入力し 
>>「10011」なら、1,2,5桁目が1なので、1,2,5枚目のカードを交換。 
>>「11111」なら、全部の桁が1なので、全部のカードを交換。 
>>「00000」(つまり0)なら、数字が1の桁がないので交換しない。

 最初は1と0で考えてみたのですが、どこを交換するかを把握するアルゴリズムが作れず、1~5を使って書きました。よろしければ、その部分のアルゴリズムについて教えていただけますか?

>>char *wlhcoubuf = new char[32]; 
これにわざわざnewを使う意味はあるんですか?
いえ、多分、プログラムが動かなかったときにいろいろと思考錯誤していた結果newが残っていたのだと思います。

 構造体の代入については前も指摘されたような…学習できていなのか…

 なるほど、判定用の関数に手札の配列を渡せばいいのですか、それなら、CPUとプレイヤー用の二つに分ける必要がなくなりそうです。

 ところで、これの次はレベルアップのためにはどんなプログラムを作ることに挑戦してみればよいのでしょうか?(いろいろなアルゴリズムに触れたりさまざまな関数に触れることができるような)題材があれば押してください。お願いします。


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

Name: 白い時空  ..入門者(3,177ポイント)   Date: 2010/07/19(月) 08:31   No:56955     
Title: Re:ソースの評価?添削?を[雑談かな]    
ちょっと返信が遅れてしまいました。

10進数でやるときは
//入力
delcard=0;
int count=1;
for(i = 0;i < 5;i++){
    if(BST_CHECKED == SendMessage(hSel[i],BM_GETCHECK,0,0))    //チェックされている状態なら
        delcard += 1*count;
    
    count *= 10;
}
//交換
for(i = 0;i < 5;i++)
    if(del%10==1){
        mycards[i] = yamafuda[sumcard];
        sumcard++;
    }
    del = del / 10;
}
2進数でやるときは
//入力
delcard=0;
for(i = 0;i < 5;i++){
    if(BST_CHECKED == SendMessage(hSel[i],BM_GETCHECK,0,0))    //チェックされている状態なら
        delcard += 1 << i;
}
//交換
for(i = 0;i < 5;i++)
    if(delcard & 1<<i ){
        mycards[i] = yamafuda[sumcard];
        sumcard++;
    }
}
2進数がわかるなら使ってください。 …とここまで書いて気付いたんですが、
//カード1枚を交換する関数を作成
void ChangeCard(struct card *change){
    *change=yamahuda[sumcard];
    sumcard++;
}

for(i = 0;i < 5;i++){
    if(BST_CHECKED == SendMessage(hSel[i],BM_GETCHECK,0,0))    //チェックされている状態なら
        ChangeCard(&mycards[i]);    //交換する
}

このほうが明らかに簡単だと思いますが…どうでしょうか。 編集済み


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

Name: たいちう  ..ハッカー(101,356ポイント)   Date: 2010/07/19(月) 09:00   No:56956     
Title: Re:ソースの評価?添削?を[雑談かな]    
ちゃんとGUIに移行して動きますね。お疲れ様です。
しかしGUIにすることで、CUIの欠点が拡大されてしまった面もあるようです。


1.判定部分のobjectによる場合分けが冗長です。
objectの替わりに判定すべき配列(の先頭アドレス)を渡すことで解決できます。
int Cstraight(const card *cards);

2.シャッフルの部分のアルゴリズム
無駄が多く厳密性もありません。
cf. http://ray.sakura.ne.jp/tips/shaffle.html
(rand()自体が厳密でないし、今回の用途では十分でしょうが一応指摘)

3.ソースコードが読みにくい
インデントが揃ってなかったり、消すのがめんどうだったり、、、
他人に見てもらう前に、自分でできることはやりましょう。


指摘できるところはまだまだありそうですが、
主に3.の理由でこれ以上は見ていません。
1.と3.を直した状態で再度あげてもらえれば、また見ます。


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

Name:  ..初心者(8,571ポイント)   Date: 2010/07/19(月) 12:17   No:56959     
Title: Re:ソースの評価?添削?を[雑談かな]    
>白い時空さん
 0と1でやるようにするということはCPU用の処理の部分をかなりいじらなければいけなくなり、
すぐにできず、今回のupには間に合いませんでした。

2進数と10進数の2通りも出していただけて、大変参考になります。
すぐに印刷して明日の学校の授業中に精読してみます。

 一つ気になったのですが、2進数で行うメリットとはなにがあるのでしょうか?
いろいろな参考書にも10進数以外の処理は書いてあり、でも、必要性も感じず
全く勉強してこなかったので、なぜ10進数が使える環境で2進数を使うのでしょう?

>たいちうさん
前回も回答していただきありがとうございました。大変参考になりました。
>>1
今直してみました。ただ、const修飾子をつけると、カード交換のときに
カードを変更できなくなるのではないでしょうか?
(今、ググったばかりなのであいまいなのですが…)

>>2
>>無駄が多く厳密性もありません。
厳密性とはどの部分がでしょうか?
一応参考サイトを読ませていただき、変更してみましたが、
考え方として変更した部分は大丈夫でしょうか?
motoとsakiが同じ値にならないようにしたので前回よりはましになっていると思うのですが…

>>3
コメントは残しっぱなしですみません、upするときにしっかりと
消すべきだったのに忘れていました。
 インデントはそろえてやっていたつもりだったのですが、
メモ帳で開いてみるとなぜかずれてました。VC++やTeraPad等で
編集していたので、その時は問題なく表示されていて
今、自分でupしたのを見て異変に気付きました。大変申し訳ありません。
いろいろと修正を試みたのですが、だめだったので、
upロダのほうにcppファイルの状態でupさせていただいたので、
そちらを見てもらえると助かります。

DLURL
http://www1.axfc.net/uploader/File/so/47766

 また、今見直してみて気になたのは
RECT型に値を代入するところです。
これは値の代入だけで4行も使ってしまうのがなんというか、こう、
きれいじゃないと思うのです。RGBマクロ的な、
一行で入力できるようなのはないのでしょうか?必要なら、自分で書くしかないのですか?

 後、この程度の少量のソースだとどのくらいの時間で読み終わりますか?
自分は、他人のソースを読むとき、このくらいの量になると、1日2日じゃ終わらないのですが。。。


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

Name: 白い時空  ..入門者(3,391ポイント)   Date: 2010/07/19(月) 14:10   No:56962     
Title: Re:ソースの評価?添削?を[雑談かな]    
タブ文字と半角文字のインデントが混ざっています。タブ文字の長さはソフトによって変わるのでそれが原因でしょう。

2進数を使う目的ですが、容量が少なくなるからです。
例えば交換する枚数を増やす場合、int型の容量の関係で、10進数では10枚まで交換できますが、2進数では31枚まで交換可能です。
コンピュータは容量が制限されるので、容量は少ないほうがいいのです。

私はwindows APIの部分はほとんど見ていません。
複雑で指摘しづらいですし。
私も昔、windows APIを使っていましたがゲームを作るのには向いておらず、DXライブラリに変えました。
でもwindows APIの経験は必要ですね。


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

Name: ISLe  ..初心者(7,762ポイント)   Date: 2010/07/19(月) 16:29   No:56966     
Title: Re:ソースの評価?添削?を[雑談かな]    
インデントが揃っていない他人のソースを読むときは、コマンドラインツールで加工してしまいます。
いまはCygwin版のastyleというツールを使っています。便利ですよ。


>  また、今見直してみて気になたのは
> RECT型に値を代入するところです。

構造体なので
//           left, top, right, bottom
RECT rcc = {   20, 210,   440,    240 }; //CPU用
という記述もできます。
いまのままだとエラーになるのでcaseごとにブロック付ける必要あります。
順番間違えるとアレなのでメンバごとに代入するのが良いと思いますけど。
#C99だとメンバ指定できる

WM_PAINTの最後にbreak付いてないのに気付きました。


>  後、この程度の少量のソースだとどのくらいの時間で読み終わりますか?
> 自分は、他人のソースを読むとき、このくらいの量になると、1日2日じゃ終わらないのですが。。。

移植の仕事がメインなので慣れているのもありますけどこのソースなら詳細まで見て30分以内ですね。
1日あれば5万行くらいのソースでだいたい内容を把握できます。


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

Name: ISLe  ..初心者(8,141ポイント)   Date: 2010/07/19(月) 16:55   No:56967     
Title: Re:ソースの評価?添削?を[雑談かな]    
描画部分を細かく見てみました。

ビットマップやペンやブラシをSelectObjectしたときに以前にセットされているビットマップやペンやブラシが返るので、覚えておいて、DeleteObjectする前にSelectObjectで元に戻してください。

TextOutで文字数をsizeofで求めてるところがあります。
strlenを使うようにしましょう。
#ちゃんとstrlen使っているところもある。

かわりにDrawText使ってる(とコメントが書かれている)ところはsizeof()-1だとポインタサイズ(この場合は4)-1で3文字しか表示されなかったのでしょう。

case WM_PAINT:の最後にbreak;が無いのでそのままWM_COMMANDの処理に突入してます。
たまたまうまく動いているようです。


あとはTEXTマクロが中途半端に使われているのが気になりますかね。
UNICODEについては意識が回っていないように見えます。


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

Name: たいちう  ..ハッカー(101,386ポイント)   Date: 2010/07/19(月) 18:42   No:56968     
Title: Re:ソースの評価?添削?を[雑談かな]    
> 今直してみました。ただ、const 修飾子をつけると、カード交換のときに
> カードを変更できなくなるのではないでしょうか? 

変更が必要かどうかで使い分けて下さい。
hantei()も同じ方法が適用できます。
ついでにCpareはスペルミスかな?


> 一応参考サイトを読ませていただき、変更してみましたが、
> 考え方として変更した部分は大丈夫でしょうか?

だめです。もう一度よく読んでください。最後まで。


> upロダのほうにcppファイルの状態でupさせていただいたので、
> そちらを見てもらえると助かります。

comp()は変わってないようですが。


> 一行で入力できるようなのはないのでしょうか?
> 必要なら、自分で書くしかないのですか?

SetRect
http://msdn.microsoft.com/ja-jp/library/cc428714.aspx


>  後、この程度の少量のソースだとどのくらいの時間で読み終わりますか?
> 自分は、他人のソースを読むとき、このくらいの量になると、1日2日じゃ終わらないのですが。。。

私も丁寧に読んで30〜60分位でしょうか。
その時副産物として、私好みに書きなおされたプログラムができていることも多いです。
今回のような質問の場合、問題点を全て探すような事はせず、
特に目立った欠点を指摘して、改善されたらもう少し見てみよう、
というスタンスですので、5分位です。

その他、WndProc()が長過ぎです。メッセージ毎に分割した方が
見通しが良くなるのではないでしょうか。


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

Name:  ..初心者(8,924ポイント)   Date: 2010/07/22(木) 20:20   No:57173 解決!     
Title: Re:ソースの評価?添削?を[雑談かな]    
>白い時空さん
 2進数にこんな利点があったとは、なるほど、条件によっては、約3倍の量を記憶しておけるということですか。これからは少し2進数にも手を出してみたいと思います。

>ISLeさん
 breakが抜けているとは、何たる不覚、すぐに修正しました。

 一日で5万行、なんとい量…やはり、そのくらいはできるようにならないと社会では通用しませんか。。。少しでも近づけるよう精進します!

 sizeofは指定した変数等のメモリサイズを返すもので、strlenは指定した文字列の長さ(\0を除いて)を返すので、sizeof("CPU")というようにしても文字列の長さを求めているわけではないので、TextOutに渡しても正しく表示されないという風に理解して大丈夫ですか?

>>あとはTEXTマクロが中途半端に使われているのが気になりますかね。 
>>UNICODEについては意識が回っていないように見えます。
 ここらへんは、win32APIの勉強を始めたばかりでとりあえず、変数の型については少しずつ勉強しているのですが、文字コードはまだまだわからないので、とりあえず、コンパイルが通ればいいと思い理解しないうちに使ってしまいました。すみません。

>たいちうさん
 Cpareは完全にスペルミスです。Cpairでした(笑)

>>hantei()も同じ方法が適用できます。
というのは、hanteiも替えてしまおうと思ったのですが、どうせ、hanteiの引数に
#define CPU  1
#define PLAYER 0
というようにして渡したほうがどちらについて求めているかわかりやすいかな、と思ったので直していませんでした。
 コードの長さは「objectの替わりに判定すべき配列(の先頭アドレス)を渡す」方が、5,6行は短くなったのですが、どうも、見づらくて結局もとに戻してしまいました。。。

>>comp()は変わってないようですが。
comp()ですか?特に指摘されていないと思うのですが。。。それに、qsortを使うためにここら辺は、自分で並べ替えのアルゴリズムを考えられなくて例文をそのまま持ってきてちょっと改良しただけなので、ここらへんを変えるなら、自分でソート用の関数を作ってみようかなと思います。

>>SetRect
なるほど!こんな風なのを探していました。まさに、理想通りのでした。

 わずか5分で指摘できるのですか。そのレベルに到達できるように日々精進していきたいと思います。

 返信が遅れてすみません、コードの修正もしたのですが、とりあえず、まだまだ問題点があることがわかったので、一応解決にしてゆっくりと考えてみたいと思います。
 こちらの掲示板だと「早い、詳しい、親切」と三拍子そろっていて本当に助かりました。本当にありがとうございました。


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



Name: dom  ..ぴよぴよ(336ポイント)   Date: 2010/07/22(木) 17:45   No:57154       
Title: シフトJISの判別    
 アルファベットと日本語が混ざった文字列の文字数を数えるために,次のようにしたところ
うまくいきませんでした。

char *str = "abcあいう";
int len = 0;  //文字列の長さ

for( int i = 0; str[i] != '\0'; i++ ){
    if( str[i] >= 0x81 && str[i] <= 0x9f ){
        i++;
    }
    len++;
}

  そこで,いろいろ試した結果,
        printf( "%x", str[3] );
の出力が,
        ffffff82
となりました。
 私はstr[3]がif文で0x82と扱われると思っていたのですが,実際は0xffffff82となっていたようです。
そこで疑問なのですが,なぜ0xffffff82となるのでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(214,998ポイント)   Date: 2010/07/22(木) 18:50   No:57160     
Title: Re:シフトJISの判別    
charが符号付きだったのでしょう。


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

Name: ドラ  ..初心者(7,414ポイント)   Date: 2010/07/22(木) 18:58   No:57164     
Title: Re:シフトJISの判別    
1.char型は汎整数拡張によって演算時にint型に変換されます。
   この変換時には元の値を維持するように変換します。

2.C言語ではchar型が「符号付き」なのか「符号なし」なのかは処理系定義となっています。


char型が「符号付き」の環境ではstr[3]が負値になります。
その負値がint型に変換された結果、(2の補数を採用した処理系では)0xffffff82になってしまうのです。
#符号拡張と言うらしい。

これを回避するには、str[i]をunsigned charに変換してから使えばいいと思います。


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

Name: dom  ..ぴよぴよ(367ポイント)   Date: 2010/07/22(木) 19:59   No:57172 解決!     
Title: Re:シフトJISの判別    
>ドラさん

汎整数拡張なる変換がされていたとは知りませんでした。
おかげで納得できました。ありがとうございます。


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



Name: 森の白熊  ..ぴよぴよ(633ポイント)   Date: 2010/07/20(火) 18:22   No:57005       
Title: ActiveDirectryの更新について    
はじめまして。
森の白熊と申します。

C++は結構初心者の私が、いろいろなHPをみて
いろいろ切り貼りして、
C++(MFC)でActiveDirectryにあるユーザのパスワードを
変更するプログラムを作成しました。
(以下、AD更新プログラムと書きます)

このAD更新プログラムのEXEを直接ダブルクリックすると、
正常に実行され、パスワードが書き換わるのですが、
某システムから起動(*1)されると、
初期化エラー(0xc0000142)が発生してしまいます。
(*1)某システムはMacromedia JRun4のサービスが起動していて、
    パスワードの更新要件が発生すると、当AD更新プログラムが起動される
    仕組みです。

C++のプログラミングがよくないのか、
または環境(JRAN4,JAVA)が原因なのか、
よくわかっていません。

この初期化エラーが発生する
原因がわからず困っています。
誰か同じような現象にあわれた方がいないか、
また、似たような状況にあわれた方がいないかと思い、
投稿してみました。

私自身、JRun4やJAVAに関して知識がなく、
うまく説明できませんが、
よろしくお願いします。

また、ちょっと試してみたのですが、
ADの更新以外の処理だけのEXEを作成し、
JRUNのサービスから起動させたところ、
起動に成功したので、
JRUN4 + AD関連の組み合わせでなにかあるのか
とも思っています。

よろしくお願いします。



開発環境
WinXP + VisualStudio2005
実行環境
Win Server 2003


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


Name: ookami  ..プログラマー(36,275ポイント)   Date: 2010/07/22(木) 09:26   No:57126     
Title: Re:ActiveDirectryの更新について    
私も詳しくないのですが、

http://oshiete.goo.ne.jp/qa/1929732.html
↑ここによると、
> アカウントを制限付きに変更したところ、
> 「アプリケーションを正しく初期化できませんでした(0xc0000142)。
> [OK]をクリックしてアプリケーションを終了してください。」
> というメッセージが出るようになりました。

ということがあるようですので、Java上で実行する時の権限関連が
怪しい気がいたしました。

参考になりますでしょうか...?


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

Name: 森の白熊  ..ぴよぴよ(716ポイント)   Date: 2010/07/22(木) 18:37   No:57156     
Title: Re:ActiveDirectryの更新について    
ookami 様

ありがとうございます。

参考にさせていただきます。


どうしていいかわからない状況だったので、
たいへん助かります。

ちょっと時間がかかるかもしれないですが、
いろいろ確認してみて、
また、報告させていただきます。


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



Name: レンジ  ..ぴよぴよ(85ポイント)   Date: 2010/07/22(木) 15:23   No:57142       
Title: OpenGLで文字列のテクスチャを扱いたい    
OpenGLで文字列のテクスチャを扱おうとしております。
今回の質問は切り取り位置についての質問です。

drawNumber(int num)という関数があったとします。
この関数は引数に入れた数字をテクスチャから切り取り
画面中心に表示するだけの簡単なものです。

数値でしたら綺麗に書けるのですが文字列となると長くなってしまいます。
例えば下記の様に並んでいる画像があったとします。
////////////////////////////////////
01234
56789
////////////////////////////////////
数字でしたら以下の様に座標を求められるかと思います。
X・・・num%4
Y・・・num/4

これを文字列で行うと
drawString(char string[]){
    int number = 0;

    switch(string){

        case "A":
            number = 1;
            break;
        case "B":
            number = 2;
            break;
            ・
            ・
            ・
            ・
    }
    //numberから座標を生成
    〜〜

}


みたいにしないといけない気がするのですが
もっと効率のよい方法はあるのでしょうか?

かなりわかりにくい質問と理解しております。
上手く説明が出来ないので勘弁して頂けますと助かります。


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


Name: シエル  ..プログラマー(31,637ポイント)   Date: 2010/07/22(木) 15:31   No:57144     
Title: Re:OpenGLで文字列のテクスチャを扱いたい    
文字列はどう並んでるんですか?

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

Name: めるぽん  ..初心者(7,843ポイント)   Date: 2010/07/22(木) 17:44   No:57153     
Title: Re:OpenGLで文字列のテクスチャを扱いたい    
>数字でしたら以下の様に座標を求められるかと思います。
>X・・・num%4
>Y・・・num/4 
その並び方だと、4 じゃなくて 5 ですね。
あと座標を求めるなら1個あたりの幅や高さを掛ける必要があります。

>    switch(string){
>        case "A":
>            number = 1; 
C, C++ の場合、switch に文字列を使用することはできません。

const int width_count = 10; // 横に並んでいる文字の数
const int width = 8;        // 1個のアルファベットあたりの横幅
const int height = 16;      // 1個のアルファベットあたりの縦幅

int convertAlpha(char c)
{
    // A-Zが連続してることは仕様的には保証されないけど、大抵の環境では問題ないだろう
    return c - 'A';
}

void drawChar(char c, int x, int y)
{
    int sx, sy;
    int n = convertAlpha(c);
    if (n < 0 || n >= 26) return;

    sx = (n % width_count) * width;
    sy = (n / width_count) * height;
    // 画像の sx, sy の位置から width, height だけ切り取って、x, y の位置に描画する
}

void drawString(const char* str, int x, int y)
{
    while (*str != '\0')
    {
        drawChar(*str++, x, y);
        x += width;
    }
}

// 画面中央に文字列を表示する
void drawStringCenter(const char* str)
{
    // screen_width, screen_height は画面の幅, 高さとする
    drawString(str,
        (screen_width - strlen(str) * width) / 2,
        (screen_height - height) / 2);
}

こんな感じでどうでしょうか。

convertAlpha 関数が多分質問の答えになっていると思いますが、A-Z が連続していないような環境でもちゃんと動作させたい場合は、各アルファベットを特定の数値に変換する作業が必要になってきます。
そういう場合はまあ、テーブルを作るなり毎回文字を検索するなり、レンジさんみたいに switch を書くような実装に convertAlpha を変更してもいいと思います。


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



Name: サイ  ..ぴよぴよ(907ポイント)   Date: 2010/07/22(木) 11:47   No:57129       
Title: ブロック崩し    
ブロック崩しで4方向にバーをやりたいんですけど、どうすればいいですか?
また、背景とかはどう入力すればいいですか?

プログラムはVBでC#です。


Public Class Form1
    '定数
    Const BAR_HABA As Integer = 120   'バーの幅を指定(整数)
    Const BAR_SPEED As Integer = 9   'バーのスピードを指定(整数)
    Const TAMA_SPEED As Integer = 5 '弾の初期スピード(整数)
    Const TAMA_MAXSP As Integer = 8   '弾の最大スピード(整数)
    Const TEN_HANSYA As Integer = 1 '弾が壁に1回反射したときの得点(整数)
    Const TEN_UKETORI As Integer = 10   '弾をバーで1回受け止めたときの得点(整数)
    Const TEN_HIT As Integer = 100    'ブロックに1回あたったときの点数(整数)
    Const TEN_SPEED As Integer = 10000 '何点ごとに弾のスピードが1段階上がるか(整数)
    Dim BLOCK_COLOR() As Brush = { _
        Brushes.Cyan, Brushes.Crimson, Brushes.Magenta, _
        Brushes.LawnGreen, Brushes.Cyan, Brushes.Yellow, _
        Brushes.White _
    }   'HPごとのブロックの色(最後の色はHPが7以上のとき適用)



    '変数(システム関係)
    Dim g As Graphics   '画面に描くためのペン
    Dim playing As Boolean  'プレイ中かどうか(True,False)
    Dim keyHidari As Boolean    '左が押されているかどうか(True,False)
    Dim keyMigi As Boolean  '右が押されているかどうか(True,False)
    Dim i As Integer   '繰り返し計算用として使用
    Dim j As Integer    '繰り返し計算用として使用

    '変数(ゲーム関係)
    Dim level As Integer '現在のレベル(整数)
    Dim score As Integer '現在のスコア(整数)
    Dim tamaX As Double '弾の中心位置X(数値)
    Dim tamaY As Double '弾の中心位置Y(数値)
    Dim kakudo As Double    '弾の角度・計算用(数値)
    Dim tamaMukiX As Double    '弾の向きX(数値)
    Dim tamaMukiY As Double    '弾の向きY(数値)
    Dim tamaYosokuX As Double  '弾の予測位置X・当たり判定計算用(数値)
    Dim tamaYosokuY As Double  '弾の予測位置Y・当たり判定計算用(数値)
    Dim bar As Double
    Dim blockHP(10, 5) As Integer   'ブロックのHP
    Dim blockX As Integer   '弾のブロック換算位置X・当たり判定計算用(整数)
    Dim blockY As Integer   '弾のブロック換算位置X・当たり判定計算用(整数)
    Dim blockAll As Boolean 'ブロックがすべて消えたかどうか(True,False)



    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.H Then
            keyHidari = True  '左が押され始めた!(左キーをON)
        End If
        If e.KeyCode = Keys.J Then
            keyMigi = True  '右が押され始めた!(右キーをON)
        End If


    End Sub

    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        If e.KeyCode = Keys.H Then
            keyHidari = False  '左が離された!(左キーをOFF)
        End If
        If e.KeyCode = Keys.J Then
            keyMigi = False  '右が離された!(右キーをOFF)
        End If


    End Sub  'バーの左隅位置(数値)



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '画面とペンの初期化
        PictureGamen.Image = New Bitmap(PictureGamen.Width, PictureGamen.Height)
        g = Graphics.FromImage(PictureGamen.Image)

        'その他の初期化
        Randomize() '乱数の初期化
        playing = False 'プレイ中ではない状態

        'タイトルロゴを表示
        g.Clear(Color.Black)    '画面をクリアする
        g.DrawString("ブロック崩し", New Font("MS 明朝", 32, GraphicsUnit.Pixel), Brushes.Yellow, 64, 144)
        PictureGamen.Invalidate()   '画面を更新する

        'キー入力を受け付けるようにする
        Me.KeyPreview = True
    End Sub

    Private Sub PictureGamen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureGamen.Click

    End Sub

    Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click
        If playing Then
            'プレイ中でだったら、ゲームを停止する
            playing = False
            ButtonStart.Text = "スタート"
        Else
            'プレイ中でなかったら、初期化の上プレイ状態にする
            playing = True
            ButtonStart.Text = "やめる"
            SetLevel(TextSyokiLV.Text)   'レベルを「初期レベル」に設定
            SetScore(0)   'スコアを0に設定

            SyokiHaichi()   '初期配置を行う
            CheckPause.Focus()  '「一時停止」にフォーカスをあてる
        End If
    End Sub
    


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


Name: ookami  ..プログラマー(36,317ポイント)   Date: 2010/07/22(木) 12:12   No:57136     
Title: Re:ブロック崩し    
VBでwwww C#wwwwwwww 何語wwww
ていうかソースを見る限りそこまでできるなら4方向も背景もなぜできないのか分かりません。


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

Name: naohiro19  ..ぴよぴよ(123ポイント)   Date: 2010/07/22(木) 12:25   No:57137     
Title: Re:ブロック崩し    
何回も投稿するのはおやめください。迷惑です。

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

Name: かぶと  ..ぴよぴよ(935ポイント)   Date: 2010/07/22(木) 15:25   No:57143     
Title: Re:ブロック崩し    
若輩ながら失礼します。かぶとと申します。

このスレッドが一番最初に出来たと思うので
このスレッド以外の同じトピックを全て削除して
ここ一つにまとめて見てはどうでしょう。

左右に動かす事が出来たら
その左右の処理をコピーして
Xでは無くてYで上と下にも使うと出来ます。
背景は(0,0)から(640,480)まで
キャラクターと同じ様に表示すれば
背景として描画出来るんじゃないかと思いますよ。


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

Name: シエル  ..プログラマー(31,741ポイント)   Date: 2010/07/22(木) 15:33   No:57145     
Title: Re:ブロック崩し    
VBでC#っていったいどっちの言語なんですか?


>ブロック崩しで4方向にバーをやりたいんですけど、どうすればいいですか? 
>また、背景とかはどう入力すればいいですか? 

もう少し具体的に質問して下さい。


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

Name: dic  ..比類無きプログラマー(87,607ポイント)   Date: 2010/07/22(木) 15:41   No:57146     
Title: Re:ブロック崩し    
規制されてもしらんぜよ



Name: かぶと  ..ぴよぴよ(151ポイント)   Date: 2010/07/21(水) 12:32   No:57044       
Title: C++でのグローバル変数的な変数の定義の仕方について    
こんにちは、かぶとと申します。
今回はC++について知りたい事があります。

C++でクラスを2つ作ったのですが
片方のクラス(A)内の関数で0を代入した変数が
そのクラスA内の別の関数では0が代入されてなくて
マイナス8万幾つと言う数字が入っていました。

また、もう片方のクラスBの方に
クラスAの変数を引っ張って来て使おうと思っても
上手く行きません。

クラス間や関数間での変数のやり取りは
どの様にしたら宜しいでしょうか。


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


Name: シエル  ..プログラマー(31,178ポイント)   Date: 2010/07/21(水) 12:43   No:57046     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
コードを提示して下さい。

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

Name: かぶと  ..ぴよぴよ(231ポイント)   Date: 2010/07/21(水) 13:55   No:57053     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
すいません、ゲームに組み込んであって
なかなか簡単に再現が出来ません。

簡単に言うとC言語で言う所の
exturnはC++ではどの様にやるんでしょうか。
ソースを分けて作り始めてからこの状態です。


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

Name: softya [URL]  ..ハッカー(186,847ポイント)   Date: 2010/07/21(水) 14:55   No:57058     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
同様の問題があるソースコードを作ることは難しいと思えませんので、同じ問題が出る簡潔なコードを新たに作ってみてみらえますか。それが、いちばんの早道だと思います。

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

Name: DVDM [URL]  ..熟練のプログラマー(53,184ポイント)   Date: 2010/07/21(水) 18:54   No:57071     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
>>かぶとさん
> 片方のクラス(A)内の関数で0を代入した変数が…
その原因が解っているクラスのソースだけでも提示することはできないでしょうか。
やはりソースの提示が出来ないと答え辛いですが、なんとなくで書いてみますので
見当はずれでしたら御免なさい。

・変数を定義しているだけで、初期化を行っていない
・初期化を行うよりも前に、関数でその変数を使用している
・メンバ変数と同じ名前の変数が、関数内で初期化されていないローカル変数として使用されている
・0を入れた変数名が間違っている
・初期化されていない別の変数が、問題となっている変数に代入されている

くらいしか思い浮かびませんでした。
その変数がどこで初期化され、どこで使用されているかの確認が必要だと思います。


> exturnはC++ではどの様にやるんでしょうか。
C++ でも extern は使用できますがそれではいけないのでしょうか。
それ以外なら、継承を使用したり、使用したいクラスで定義したり、
ポインタや参照で渡して使用していく感じでしょうか…。


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

Name: かぶと  ..ぴよぴよ(243ポイント)   Date: 2010/07/21(水) 18:56   No:57072     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
下記に書いたのと同じ状態です。
PosXとPosYが無い、と出てしまいます。
どうしたら良いでしょう。


────────────────

//// Player.h ////

class Player{
    
    public:
        int PosX;
        int PosY;
        void Dainyu();
};

────────────────

//// Player.cpp ////

#include"Player.h"

void Dainyu(){
    
    PosX=100;
    PosY=100;
    
}

────────────────

//// Main.cpp ////

#include<iostream.h>
#include"Player.h"

int main(void){
    
    Player PL;
    
    cout << PL.PosX << endl;
    
    return 0;
    
}

────────────────

※下記は、上記を実行した際に表示されるエラー※

--------------------構成: Test - Win32 Debug--------------------
コンパイル中...
Player.cpp
C:〜Test\Player.cpp(5) : error C2065: 'PosX' : 定義されていない識別子です。
C:〜Test\Player.cpp(6) : error C2065: 'PosY' : 定義されていない識別子です。
cl.exe の実行エラー

Test.exe - エラー 2、警告 0


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

Name: かぶと  ..ぴよぴよ(360ポイント)   Date: 2010/07/21(水) 18:59   No:57073     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
>シエルさん、softyaさん

すいませんでした。
コードを作りました。


>DVDMさん

少ない情報で推理してくれてありがとうございます。
原因になっていると思われる部分の説明を
一行ずつ調べながら読んでいます。

コードが作れたので、出しました。


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

Name: シエル  ..プログラマー(31,487ポイント)   Date: 2010/07/21(水) 19:00   No:57074     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
void Player::Dainyu(){ 
     
    PosX=100; 
    PosY=100; 
     
}

こうしたらどうですか?


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

Name: ぽこ  ..上級者(23,098ポイント)   Date: 2010/07/21(水) 19:01   No:57075     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
> 下記に書いたのと同じ状態です。
> PosXとPosYが無い、と出てしまいます。
> どうしたら良いでしょう。
>
>(略)

> void Dainyu(){
>     
>     PosX=100;
>     PosY=100;
>     
> }


関数Dainyu()から見える場所にPosX、PosYがありません。
やりたいことは↓のようなことですか?

void Dainyu(Player& p){
     
     p.PosX=100;
     p.PosY=100;
     
}

----追記
Dainyu()ってPlayerクラスのメンバ関数だったんですね。。
シエルさんが提示されたコードが正しいです。
私のは忘れてください。

#最近、コードちゃんと読めてないなぁ。。
 編集済み


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

Name: dic  ..比類無きプログラマー(87,453ポイント)   Date: 2010/07/21(水) 19:25   No:57076     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
//// Player.cpp //// 

#include"Player.h" 

void Dainyu(){ 
     
    PosX=100; 
    PosY=100; 
     
} 


class Player 指定するの忘れてませんか?

void Player::Dainyu()

ではないでしょうか?


//------------------------------
かぶってますね^^;
 編集済み


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

Name: かぶと  ..ぴよぴよ(492ポイント)   Date: 2010/07/21(水) 19:34   No:57078     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
void Player::Dainyu()

にしたら出来ました。
どうもありがとうございます。
テストの方は完了しました。
皆様どうもありがとうございました。

しかし、ゲームのメインの方のコードが
上手く出来ません。
やっぱり恥を捨ててアップロードします。
 編集済み


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

Name: DVDM [URL]  ..熟練のプログラマー(53,290ポイント)   Date: 2010/07/21(水) 19:44   No:57079     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
>>かぶとさん
> ゲームのソースはアップローダーなどで
> 全部載せても大丈夫ですかね。

アップロードできるのであればそうされた方がいいと思います。


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

Name: かぶと  ..ぴよぴよ(564ポイント)   Date: 2010/07/21(水) 19:56   No:57080     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
http://firestorage.jp/download/8baf2661cd2226138105aefc4bd53fbe8255cf33

ゲームソースです。

CameraX
CameraY

の、Playerの関数内の定義の仕方が分かりません。
それ以外にもゴチャゴチャしてます。

何かこうした方が良いと言うのがあったら
宜しくお願いします。


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

Name: シエル  ..プログラマー(31,539ポイント)   Date: 2010/07/21(水) 20:53   No:57081     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
Fieldクラスのインスタンスを作って、呼び出せばいい。

Field test;

test.CameraX=100


みたいな感じ。


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

Name: DVDM [URL]  ..熟練のプログラマー(54,250ポイント)   Date: 2010/07/21(水) 21:07   No:57085     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
>>かぶとさん
ソースを拝見させて頂きました。
DXライブラリが手元になく、コンパイルはしていませんので間違いがあったら御免なさい。


void Player::GraphDraw(){

    // カメラのXとYを外部から引っ張って来る
    int CameraX=0;
    int CameraY=0;

    // プレイヤー描画
    DrawGraph(PlayerX-CameraX, PlayerY-CameraY, GHandle[graphnumber], TRUE);

    DrawFormatString(0,  0, GetColor(255, 0, 0), "PlayerX=%d",CameraX);
    DrawFormatString(0, 20, GetColor(255, 0, 0), "PlayerY=%d",CameraY);
}

初期化されていない変数を使用されているのが原因だと思います。
int CameraX, CameraY はローカル変数のため、書いただけでは初期化されておりません。

int CameraX=0;
int CameraY=0;
…と初期化しておけばとりあえず大丈夫ですが、多分やりたいことと違うような気がします。

この CameraX, CameraY は、Field クラスにある CameraX, CameraY とは別物と考えて宜しいのでしょうか?
もし、 Field クラスのものを使用したければ 引数で貰ってきたり、
クラス内で Field クラスを定義しアクセスする必要があります。


class Player{

        int GHandle[100];
        int count;
        short graphnumber;
        short Action;
        int PlayerX;
        int PlayerY;

    public:
        void Init();
        void Animetion();
        void GraphDraw();
        int JoyStick();
};

また、Player クラスにあるメンバ変数 PlayerX, PlayerY が public でしたので、
private にしておいた方がいいと思います。
同様に、Field クラス内の CameraX, CameraY も private にしておいた方がいいと思います。
(public がいいのであればそのままで構いませんが…。)



void Field::Scroll(){

    // 代入変数
    int blank=200;

    // フィールドクラス定義
    Field FD;
    Player PL;
    PL.Init();

    // 左端
    if((PL.PlayerX-CameraX)<blank){
        CameraX=FD.Limit(PL.PlayerX-blank, 0, mapWidth-640);
    }

    // 右端
    if((640-blank)<(PL.PlayerX-CameraX)){
        CameraX=FD.Limit(PL.PlayerX+blank-640, 0, mapWidth-640);
    }
}

やはり、こちらでも初期化されていないのが原因かと思われます。
Player PL;
の次の行に PL.Init(); と入れてやればとりあえず大丈夫です。



void Field::Init(){
    GHandle=0;
    CameraX=0;
    CameraY=0;

    mapWidth = 100;
    mapHeight = 100;
    GHandle=LoadGraph("BMP/Field.bmp");
    GetGraphSize(GHandle, &mapWidth, &mapHeight);
}


メンバ変数である mapWidth, mapHeight の初期化も行われておりませんでしたので
とりあえず 100 という値を入れさせて頂きました。



Init 関数を呼ぶのが面倒だと感じるのであれば
コンストラクタを定義してみるのも一つの手かもしれません。
例えば、Player クラスの場合:


- Player.h -

class Player{

        int GHandle[100];
        int count;
        short graphnumber;
        short Action;
        int PlayerX;
        int PlayerY;

    public:
        // コンストラクタ
        Player()
        {
            this->Init();
        }
    (以下略)


コンストラクタを追加することで Player PL; と定義した時に
コンストラクタで Init を呼んでくれるため自分で呼ぶ必要がなくなります。

かぶとさんが期待されている結果が私には解らなかったので、とりあえずという表現をしております。
これで八万なんぼという結果はなくなると思うのですが如何でしょうか。



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

Name: naohiro19  ..ぴよぴよ(100ポイント)   Date: 2010/07/22(木) 07:53   No:57122     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
this->PosXでprivate属性のついた変数にアクセス可能です。

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

Name: かぶと  ..ぴよぴよ(731ポイント)   Date: 2010/07/22(木) 08:56   No:57125     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
thisポインタとコンストラクタで初期化を調べています。
DVDMさんとても丁寧な解説で助かります。

ただ、説明がたりな過ぎて申し訳ありませんでしたが
スクロール関数は画面をスクロールする度に呼び出したい関数なので
その中で初期化は出来ないかも知れません。

Field FD;でFD.CameraXに変えたらエラーが出てしまいました。

CameraX、CameraYと言う変数は、本当は
もっと広い範囲で使える様にしてみたいのですが
変数の範囲がどのくらいに出来るかと言うのも
良く分かりません。

取り合えず基本を勉強した方が良いでしょうか。


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

Name: DVDM [URL]  ..熟練のプログラマー(55,006ポイント)   Date: 2010/07/22(木) 10:31   No:57128     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
>>かぶとさん
> スクロール関数は画面をスクロールする度に呼び出したい関数なので
> その中で初期化は出来ないかも知れません。 
ということは、Field::Scroll 関数内の下記処理
if((PL.PlayerX-CameraX)<blank){
    CameraX=FD.Limit(PL.PlayerX-blank, 0, mapWidth-640);
}

では、PL.PlayerX は初期化されていない状態で使われることになるので望む結果にはならないと思います。
これは一例ですが、PlayerX, PlayerY の値を引数で貰ってくるというのはどうでしょうか。

void Field::Scroll(int PosX, int PosY){ 〜処理〜 }
プレイヤーの座標をこのように受け取り、関数内で使用していこうという流れです。


> Field FD;でFD.CameraXに変えたらエラーが出てしまいました。 
どういったエラーでしょうか?
これも、CameraX が初期化されていないのが原因ではないでしょうか。


> 変数の範囲がどのくらいに出来るかと言うのも
> 良く分かりません。 
例えば、Field::Scroll 関数を一例に上げますと

void Field::Scroll(){

    // 代入変数
    int blank=200;

    // フィールドクラス定義
    Field FD;
    Player PL;
  (以下略)


FD, PL の寿命はこの Scroll 関数を抜けるまでということになります。
「変数 スコープ c」なんかで検索をかけると色々見つかると思います。
参考URL:http://www.geocities.jp/ky_webid/c/022.html


> 取り合えず基本を勉強した方が良いでしょうか。
もし関数について「引数」「戻り値」などが解っていないとこの先辛いと思います。
不安だと感じたらすぐに勉強してみましょう。

一番気になったのが初期化忘れでしたので、
まずは変数を初期化し、その後で使用するというのを心掛けてみてはいかがでしょうか。
(個人的にはコンストラクタでメンバ変数を初期化する方が便利だと思います)

かぶとさんが希望する処理を一つずつ整理し、
どのような処理を行いたいのか、その為にはどのクラスに変数・関数を持たせるかなどを考えて行けば
スッキリするのではないでしょうか。

「こんなことをこういう感じで行いたい」と具体的に示して頂ければ
アドバイスも集まりやすくなると思います(多分…)。



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

Name: かぶと  ..ぴよぴよ(796ポイント)   Date: 2010/07/22(木) 13:29   No:57141 解決!     
Title: Re:C++でのグローバル変数的な変数の定義の仕方について    
DVDMさんありがとうございました。
スコープと言うのも調べています。

結局、基本的な事が分かっていなかったので
基本を勉強してからもう一度頑張ろうと思います。

今回は解決する事にします。


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



Name: サイ  ..入門者(3,412ポイント)   Date: 2010/07/22(木) 13:17   No:57140       
Title: すいません(ブロック崩し)    
れんぞくで投稿したことをおわびします
コードが長かったんでコードをわけて投稿してしまいました
今度はソースデータをつけてみました
自分なりにやってみたんですが、バーを一つ追加してみたらバーのあたり判定がなくなってしまいます。
どうしたらいいですか?
背景もどうやってつけるんですか?
変更した点
'バーとの当たり判定を計算
            If tamaYosokuY >= 300 And tamaYosokuY < 310 Then
                If tamaYosokuY >= 10 And tamaYosokuY < 20 Then

'画面への描画
        g.FillEllipse(Brushes.White, CInt(tamaX) - 5, CInt(tamaY) - 15, 15, 15) '弾
        g.FillRectangle(Brushes.Orange, CInt(bar), 300, BAR_HABA, 10)   'バー
        g.FillRectangle(Brushes.Orange, CInt(bar), 10, BAR_HABA, 10)   'バー








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




Name: よっちー  ..ぴよぴよ(18ポイント)   Date: 2010/07/22(木) 12:52   No:57138       
Title: 無題    
C++2010についてなのですが

C++で画像を表示するにはどうしたらいいのでしょうか?
全くの初心者なので分かりやすくお願いします(汗)


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


Name: シエル  ..プログラマー(31,622ポイント)   Date: 2010/07/22(木) 12:56   No:57139     
Title: Re:無題    
何のライブラリを使うかによります。

初心者はDXライブラリを使った下記のページから順番にやってくと良いでしょう。
http://dixq.net/g/


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



Name: カスタム  ..ぴよぴよ(146ポイント)   Date: 2010/07/19(月) 09:58   No:56957       
Title: リスト構造について    
はじめまして、カスタムと申します。
早速ですが質問させていただきます。

リスト構造についてです。
単刀直入に
大きさの違う要素をリストとしてつなげることは可能ですか?

リストにポインタを持たせてそのポインタはそれぞれ異なる別の型の構造体なりクラスを指す
のようなことはCやC++で実現可能なんでしょうか。

void型ポインタやテンプレートクラスなども考えてみましたが、どうもうまく考えがまとまりません。

あまり上手な表現法が見つからずこんな下手な質問になってしまい申し訳ありません。お忙しいとは思いますがぜひともご助言のほどよろしくお願いします。


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


Name: へろり  ..プログラマー(25,901ポイント)   Date: 2010/07/19(月) 10:19   No:56958     
Title: Re:リスト構造について    
可能ですよ。

というより割と使われてると思いますよ。

C++の場合はよくは分かりませんが、Cの場合繋げる型の種類が決まっている場合は共用体を使うのが一般的じゃないでしょうか。

昔、C言語ライクなマクロ言語のコンパイラを作った時はそうしましたね。


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

Name: ISLe  ..初心者(7,545ポイント)   Date: 2010/07/19(月) 15:48   No:56965     
Title: Re:リスト構造について    
C++なら共通の親クラスを継承したクラスは、親クラス型のポインタに代入できます。
リストから親クラス型ポインタを取り出してメンバ関数を呼ぶときそれが仮想関数なら継承先のクラスでオーバーライドしたメンバ関数が呼ばれます。
オブジェクト指向ではポリモーフィズム(多態性)と呼ばれます。

#内部で共用体使ってサイズを合わせて固定サイズのメモリをやりくりすることもできます。


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

Name: dic  ..比類無きプログラマー(87,378ポイント)   Date: 2010/07/19(月) 21:26   No:56974     
Title: Re:リスト構造について    
可能です

私は純粋なCを知りませんが
C/C++で、そのようなことが発生すると設計から考え直しますね


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

Name: カスタム  ..ぴよぴよ(326ポイント)   Date: 2010/07/19(月) 21:54   No:56976     
Title: Re:リスト構造について    
解答ありがとうございます。

> C++の場合はよくは分かりませんが、Cの場合繋げる型の種類が決まっている場合は共用体を使うのが一般的じゃないでしょうか。

ここ最近使ってなかったので共用体の存在をごっそり忘れてました(汗)
言われてみれば確かにその方法がありました
ただやっぱり変数名が変わってしまうところあたりはどんな数値が入ってるかっていうパラメータを持たせて、それによって分岐あたりで処理するしか対処方法はないですか…?


> C++なら共通の親クラスを継承したクラスは、親クラス型のポインタに代入できます。
> リストから親クラス型ポインタを取り出してメンバ関数を呼ぶときそれが仮想関数なら継承先のクラスでオーバーライドしたメンバ関数が呼ばれます。
> オブジェクト指向ではポリモーフィズム(多態性)と呼ばれます。

> #内部で共用体使ってサイズを合わせて固定サイズのメモリをやりくりすることもできます。

親クラス型のポインタだと子クラスで新しく宣言した変数や関数は確かスコープできなかった気がするんですが、なにか対処法などあったりしますか?
関数のほうは仮想関数を使用すれば何とかなると思うんですが。。。



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

Name: 組木紙織  ..比類無きプログラマー(90,468ポイント)   Date: 2010/07/19(月) 23:10   No:56980     
Title: Re:リスト構造について    
Type Erasure かCRTPを使えば解決できると思います。(どちらも完全にはりかいできてないので思いつきですが、)
boost::anyを利用してあげてもいい気がします。
(これも結局Type Erasureかな。)


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

Name: たかぎ [URL]  ..ハッカー(214,570ポイント)   Date: 2010/07/20(火) 00:58   No:56981     
Title: Re:リスト構造について    
別のアプローチを示すために、あえて(C++ではなく)Cで考えると...

struct list_node
{
    struct list_node *next;
};

struct foo { ... };
struct bar { ... };

struct foo_node
{
    struct list_node node;
    struct foo value;
};

struct bar_node
{
    struct list_node node;
    struct bar value;
};

struct int_node
{
    struct list_node node;
    int value;
};

このようにしておけば、どんな型でもリストに挿入することができます。
ノード単体を見て、どんな型の値を保持しているかを知るには、それを判別するためのメンバがもう一つ必要になります。


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

Name: へろり  ..プログラマー(26,434ポイント)   Date: 2010/07/20(火) 10:54   No:56991     
Title: Re:リスト構造について    
>このようにしておけば、どんな型でもリストに挿入することができます。

しかし、これだと struct list_node node; を必ず構造体の先頭のメンバにしなければいけませんね。
でなければ、常に(struct list_node*)へのキャストが必要です。

私ならば、struct list_node node; を構造体の先頭のメンバにし忘れる自信があります。
Cはポインタからポインタへのキャストは何も言ってくれませんから、ちょっと危険な気がします。

struct hoge_node{
    ...
    void *next;
};

と同じぐらい危険だと思うのですが。

struct list_node node; が必ず構造体の先頭のメンバに現れるような工夫が必要だと思います。
もしくは、先頭のメンバで無い場合エラーを起こすような工夫ですか。

でなければ、ちょっと使うにはためらってしまうデータ構造ですね。


#私見ですので、怒らないでくださいね。


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

Name: ISLe  ..初心者(8,345ポイント)   Date: 2010/07/20(火) 15:31   No:56999     
Title: Re:リスト構造について    
> 私ならば、struct list_node node; を構造体の先頭のメンバにし忘れる自信があります。
> Cはポインタからポインタへのキャストは何も言ってくれませんから、ちょっと危険な気がします。

リスト構造そのものではないですけど、おおむかしにGUIシステム作ったときは、

struct component *button, *label;
label = create_component(LABEL);
set_caption(label, "ラベル");
set_position(label, 10, 20);
button = create_component(BUTTON);
set_caption(button, "OK");
set_position(button, 100, 20);
set_callback(button, button_callback);

という感じの使い方をするように設計してました。

struct component;
だけ公開して、利用する側はポインタで受け取ってそのまま渡すしかできないようにします。
ウインドウを閉じたら載ってるコンポーネントも破棄できるようにリスト構造での管理もしてました。

けっきょくクラスもどきですけど。


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

Name: ISLe  ..初心者(8,401ポイント)   Date: 2010/07/20(火) 17:41   No:57002     
Title: Re:リスト構造について    
> struct component;
> だけ公開して、利用する側はポインタで受け取ってそのまま渡すしかできないようにします。

create_componentは実際にはcomponent構造体を先頭に配置した別の構造体を作って返してて、利用する側はcomponent構造体としてしか認識させないという点がキモです。


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

Name: たかぎ [URL]  ..ハッカー(214,833ポイント)   Date: 2010/07/20(火) 17:45   No:57003     
Title: Re:リスト構造について    
> しかし、これだと struct list_node node; を必ず構造体の先頭のメンバにしなければいけませんね。 
> でなければ、常に(struct list_node*)へのキャストが必要です。 

 そんなことはありません。

struct list_node *front;

struct foo_node node1;
front = &node1.node;

struct bar_node node2;
node2.node.next = front;
front = &node2.node;

のようにすればよいので、メンバーnodeの位置にかかわらず、同じシンタックスで記述することができます。
必要なら、それを利用したマクロを定義しておけば、型に依存しないAPIを提供することができます。

struct hoge_node
{
    struct hoge value; 
    struct list_node node; 
};

のように、nodeが先頭にない可能性を考慮して、

(struct hoge*)((char*)node - offsetof(struct hoge_node, node)

とすれば、valueを参照することができます。
これもマクロ化することが可能ですね。

型チェックを入れたければ、型情報のためのメンバを追加して、assertでも使えば診断できます。
 編集済み


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

Name: カスタム  ..ぴよぴよ(902ポイント)   Date: 2010/07/22(木) 00:28   No:57112     
Title: Re:リスト構造について    
ちょっと留守にしている間にこんなにものご回答いただきありがとうございます


> C/C++で、そのようなことが発生すると設計から考え直しますね

まわりにいる人間にも同じようなことを言われました
自分なりに少し設計を考え直してみたいと思います



> Type Erasure かCRTPを使えば解決できると思います。(どちらも完全にはりかいできてないので思いつきですが、)
> boost::anyを利用してあげてもいい気がします。
> (これも結局Type Erasureかな。)

ちょっと調べてきました。
なんか少し複雑でしたが、大方は理解できた気がします。
使いこなすにはもうすこし勉強が必要になるかとおもいますが、いいアドバイスありがとうございます



>このようにしておけば、どんな型でもリストに挿入することができます。

そういう風につないでいけばリストにできるということは理解できました

自分の勉強不足で一から勉強しなおして来いと言われればそれまでなんですが、リストの先頭をさせたところで、後半のvalueをどうやって指せばいいかがわかりません。ポインタあたりの知識が特に不安でして...
わがままですがクラスも含めて考えたいのでちょっとC++で失礼します。

typedef struct list_node 
{
    struct list_node *next;
};

class Test{
public:
    Test(){a=b=1;};
    ~Test(){};
    int a;
    out(){std::cout << a << "+" << b << "=" << a+b << std::endl;};
private:
    int b;
};

typedef struct Test_node
{
    list_node node;
    Test value;
};

int main(void){
    list_node *front;
    Test_node node1;
    front = &node1.node;

    Test_node node2;
    node2.node.next = front;
    node1.node = &node2.node;
    
//****データを参照する部分********
    char *p = node1.node;
    p + sizeof(list_node);
    p->a = 2;
    p->out();

    return 0;
}

こんな感じになるんでしょうか(あってるかとても不安です)


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

Name: へろり  ..プログラマー(26,723ポイント)   Date: 2010/07/22(木) 08:31   No:57123     
Title: Re:リスト構造について    
>のように、nodeが先頭にない可能性を考慮して、 

>(struct hoge*)((char*)node - offsetof(struct hoge_node, node) 

>とすれば、valueを参照することができます。 
>これもマクロ化することが可能ですね。

すみません。 こういったコードを書かない事を前提に話してました。
わざわざ構造体の先頭へのポインタ値を計算するというのがなんだかトリッキーな感じがして、
あまりスマートではないもので。

せっかくメンバ変数には名前が付いてるのですから、名前で呼んであげるのがメンバ変数への愛だと思っています。



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

Name: たかぎ [URL]  ..ハッカー(214,834ポイント)   Date: 2010/07/22(木) 11:52   No:57131     
Title: Re:リスト構造について    
> わざわざ構造体の先頭へのポインタ値を計算するというのがなんだかトリッキーな感じがして、 
> あまりスマートではないもので。 

C++だと、継承関係のあるクラス間の型変換では、コンパイラに任せられるだけでやっていることは同じです。
offsetofマクロというのはそもそもこういう使い方のためにあるものなので、トリッキーというわけでもないと思います。


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



Name: レン  ..ぴよぴよ(992ポイント)   Date: 2010/07/21(水) 11:08   No:57036       
Title: 最近、C言語を学び始めたのですが・・・    
タイトルの通り、最近C言語を学び始めたのですが、今は、MicrosoftVisualC++2008というソフトにひたすら、本に書いてある、ソース?を入力して暗記する。
という、毎日を送っています。最初はこうして学んでいくものなのでしょうか??
また、もっと効率的に勉強する方法や、間違っているところがあれば教えていただけないでしょうか??


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


Name: シエル  ..プログラマー(31,211ポイント)   Date: 2010/07/21(水) 11:25   No:57039     
Title: Re:最近、C言語を学び始めたのですが・・・    
最初はとにかく片っ端からソースを打ち込んで動かしていって
そのエラーに対応していけば、ある程度は書けるようになりますよ。
ある程度理解できてきたら、自分でプログラムを考えて書いてみて思い通りに動かせる
か何回もやってみる。
とりあえず、たくさんコードを書いてその意味を理解することです。
そのうち慣れてきますよ。

私はC言語を完全に独学で学んでいますが、C言語の入門書などは買わず、
全てネットにある情報だけでひたすら勉強しました。
それでも簡単なゲームなどはある程度作れるようになりましたよ。
まあ、しっかりした基本を学ぶには入門書にしたがって勉強することをお勧めしますがw

私は最初は挫折しかけましたが、諦めずに勉強して、ある程度理解できるようになりました。
頑張って下さい!


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

Name: レン  ..かけだし(1,274ポイント)   Date: 2010/07/21(水) 12:27   No:57042     
Title: Re:最近、C言語を学び始めたのですが・・・    
動かすというか、ソースを打ち込んで、コンパイルして表示するという感じです。
たとえば、
#include <stdio.h>

int main(void)
{
     int no;
 
     printf("整数を入力してください:");                結果は   
     scanf("%d", &no);                    整数を入力してください:357 
                               その数の10倍は3570です。
     printf("その数の10倍は%dです。\n", 10 * no);

     return 0;
}

というソースなどをひたすら書いています。
そして、printfの意味、使い方やscanfの意味、使い方などを学んでいくという手順です。
こんな感じでいいのでしょうか??


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

Name: シエル  ..プログラマー(31,191ポイント)   Date: 2010/07/21(水) 12:28   No:57043     
Title: Re:最近、C言語を学び始めたのですが・・・    
いいと思います。

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

Name: レン  ..かけだし(1,297ポイント)   Date: 2010/07/21(水) 12:34   No:57045     
Title: Re:最近、C言語を学び始めたのですが・・・    
ありがとうございます。安心して作業を進めることができます^^

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

Name: レン  ..かけだし(1,464ポイント)   Date: 2010/07/21(水) 12:43   No:57047     
Title: Re:最近、C言語を学び始めたのですが・・・    
あっ、もうひとつ気になっていることいいでしょうか。

初心者なもので質問の意味がわからないかもしれませんが・・・
MicrosoftVisualC++2008を使っていて、ひとつのプロジェクトにひとつのソースファイルがありますが、
ひとつのプロジェクトに作れるソースはひとつだけで、もうひとつ新しいソースをつくろうと思ったら、もうひとつプロジェクトを作ってするしかないのでしょうか??

わかりにくくてすいません^^;


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

Name: シエル  ..プログラマー(31,218ポイント)   Date: 2010/07/21(水) 12:48   No:57048     
Title: Re:最近、C言語を学び始めたのですが・・・    
一つのプロジェクトにいくつでも追加できます。

左の方にあるソリューションエクスプローラから
ソースファイルを選択→右クリック→新しい項目を追加で
c++ファイルを選べば追加できます。


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

Name: toyo  ..熟練のプログラマー(54,246ポイント)   Date: 2010/07/21(水) 12:56   No:57049     
Title: Re:最近、C言語を学び始めたのですが・・・    
念のために
ソースファイルは何個でも問題ありませんがmain関数は1つのプロジェクトに1個だけです
1つのソリューションに複数のプロジェクトは可能です


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

Name: レン  ..かけだし(1,608ポイント)   Date: 2010/07/21(水) 12:58   No:57050     
Title: Re:最近、C言語を学び始めたのですが・・・    
ですが、それだと、一個目のソースはうまくコンパイルできるのですが、2個目から、既に定義されている。
とか。〜は1つ以上の複数回定義する。とかでてくるのですが・・・
どうしたらいいのでしょうか??


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

Name: シエル  ..プログラマー(31,169ポイント)   Date: 2010/07/21(水) 13:08   No:57051     
Title: Re:最近、C言語を学び始めたのですが・・・    
複数回定義しているものがあると思われます。
分割コンパイルを学んでください。

それか、ソースを全て貼ってください


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

Name: レン  ..かけだし(1,859ポイント)   Date: 2010/07/21(水) 13:29   No:57052     
Title: Re:最近、C言語を学び始めたのですが・・・    
今の状態は、

ソリューション
 Lソースファイル
 |   L test.c
 |  L test.cpp 
 Lヘッダーファイル
 Lリソースファイル

という感じになっていて…
test.cには上で紹介したやつを書いていて
test.cppには

#include <stdio.h>

int main(void)
{
     int no;

     printf("整数を入力してください。:");             整数を入力してください:37
     scanf("%d", &no);                あなたは37と入力しましたね。 

     printf("あなたは%dと入力しましたね。\n", no);

     return 0;
}

というソースをかきます。
そして、test.cをコンパイルするときちんとできるものの、
test.cppをコンパイルすると上記のようなエラーがでるのですが…
分かりましたでしょうか??


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

Name: シエル  ..プログラマー(31,210ポイント)   Date: 2010/07/21(水) 13:55   No:57054     
Title: Re:最近、C言語を学び始めたのですが・・・    
toyoさんがおっしゃってることをもう一度よみ直してください。
main関数についての注意がありますよね?


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

Name: softya [URL]  ..ハッカー(186,765ポイント)   Date: 2010/07/21(水) 14:40   No:57056     
Title: Re:最近、C言語を学び始めたのですが・・・    
学習法としては、ただ打ち込むだけじゃなくて、ちょっと変えてみる。
機能を付け加える事や表示を変えてみるや変数の型を変えるとどうなるかなど試してみるってことが大事ですよ。


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

Name: レン  ..かけだし(1,872ポイント)   Date: 2010/07/21(水) 15:08   No:57060     
Title: Re:最近、C言語を学び始めたのですが・・・    
わかりました。すいませんでした


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

Name: レン  ..かけだし(2,019ポイント)   Date: 2010/07/21(水) 21:32   No:57086     
Title: Re:最近、C言語を学び始めたのですが・・・    
すいませんが、もうひとつ質問させてもらいます><
あの…ひとつのプロジェクトには関数がひとつということは分かりました。
ですが、MicrosoftVisualC++2008を使っていて、一つ目のプロジェクトで一つソースを書き動かしたとします。そして、二つ目のプロジェクトを作って、そこにソースを書き動かすと、なぜか、一つ目のソース結果が出てくるのですが、なぜでしょうか??

分かる方いらしたらお教えくださいm__m


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

Name: ぽこ  ..上級者(23,408ポイント)   Date: 2010/07/21(水) 22:25   No:57089     
Title: Re:最近、C言語を学び始めたのですが・・・    
> あの…ひとつのプロジェクトには関数がひとつということは分かりました。

関数はいくつでも定義できます。
名前が被ったら駄目なだけです。

> ですが、MicrosoftVisualC++2008を使っていて、一つ目のプロジェクトで一つソースを書き動かしたとします。そして、二つ目のプロジェクトを作って、そこにソースを書き動かすと、なぜか、一つ目のソース結果が出てくるのですが、なぜでしょうか??

> 分かる方いらしたらお教えくださいm__m

ソリューション全体で、太字となっているプロジェクトが実行されます。
変更するには、動作させたいプロジェクトを右クリック-「スタートアッププロげクトに設定」を
選択してください。
#スタートアッププロジェクトが太字になっていると言ったほうが良いかな。


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

Name: レン  ..かけだし(2,038ポイント)   Date: 2010/07/21(水) 22:49   No:57093 解決!     
Title: Re:最近、C言語を学び始めたのですが・・・    
なるほど!!
ありがとうございます。また分からないことおねがいします。


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



Name: カッテーラ  ..ぴよぴよ(720ポイント)   Date: 2010/07/20(火) 17:22   No:57000       
Title: セーブデータを作るにあたって、    
一通り簡単な程度のプログラミングを理解してき始めたので
セーブデータを作ろうと思い

http://dixq.net/g/58.html

を試してみたのですがエラーが起きました、コピペしたので間違いはないと思ったのですが
まだファイル関係の関数に慣れていないので、エラーの具体的な直し方がわかりません。

教えてばっかりなのは、駄目だと知っているのでせめてアドバイス(ここはこんな感じにしたほうがいいよ)
などでも教えてもらいたいです。お願いします

エラー内容は、
1>c:\users\syouno\desktop\整理整頓!\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(22) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。
1>c:\users\syouno\desktop\整理整頓!\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(42) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。
1>リンクしています...
1>test.obj : warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます。
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>.\Debug/DxLib.exe : fatal error LNK1120: 外部参照 1 が未解決です。

です。恐らくfopenの使い方がおかしいのでは?と思うのですが、アドバイスお願いします。
前述の通り、コードは上のURLのコードのまんまです。


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


Name: Dixq (管理人)  ..ウィザード(1,233,669ポイント)   Date: 2010/07/20(火) 17:54   No:57004     
Title: Re:セーブデータを作るにあたって、    
プロジェクトがコンソール用じゃないのでしょう。
あのサンプルはDXライブラリのプロジェクトではコンパイル出来ません。

うちのHPトップメニューにある「C言語をはじめるには?」を参考にしてください


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

Name: カッテーラ  ..ぴよぴよ(940ポイント)   Date: 2010/07/21(水) 17:03   No:57063 解決!     
Title: Re:セーブデータを作るにあたって、    
Dixq さんありがとうございます。

新しくコンソール用のプロジェクトを作り、試したら無事コンパイルができました!

また、質問することもあると思いますので(極限 無いように頑張りますが;)

その時は、またアドバイスなどをよろしくお願いします。
というわけなので解決マークを貼らさせていただきます。

※細かいことについての質問なのですが、
これ(このセーブデータ)って、バイナリじゃなくテキスト形式でも出力できるのでしょうか?
(その場合やり方は、fopen("save_data.dat", "rt" )などであっているのですか?)
あんまり、PCをいじくる時間が無いものなので できれば返答お願いします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,233,845ポイント)   Date: 2010/07/21(水) 22:38   No:57092     
Title: Re:セーブデータを作るにあたって、    
いえいえ、質問する為の場ですから、お気軽にどうぞ^^

もちろんテキスト形式でも出力出来ますよ。
読み込みの時は
"r"
書き込みの時は
"w"
を指定します。
他にもありますが、最初覚えるのはこの2つで十分でしょう。
詳しくは
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
12章をお読みになると良いと思います。

また、「fopen」でgoogle検索しても参考になるサイトは沢山出てきます。


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



Name: パコネコ  ..上級者(17,307ポイント)   Date: 2010/07/20(火) 21:23   No:57016       
Title: 入力について    
scanfなどを使って入力を行うときに、入力した後にエンターキーを押してデータに反映されますよね。
入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、
入力を行うときには
「bbbbb」
というふうに入力するときにすでにBボタンの残骸が入力される状態です。
一度「BackSpace」を押して全部消せばいいのですが、せめて入力のときに
「b」
というふうに一つしか入力できなくできないでしょうか?
よろしくお願いします。




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


Name: ぽこ  ..上級者(22,744ポイント)   Date: 2010/07/21(水) 00:34   No:57024     
Title: Re:入力について    
現状がよくわかりません。

> 入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、
> 入力を行うときには
> 「bbbbb」
> というふうに入力するときにすでにBボタンの残骸が入力される状態です。

Bボタンの入力処理を行う前にBボタンの残骸がある、と言う意味ですか?
それとも、Bボタンの入力処理を行なおうとすると、複数回のBボタン入力処理を行う羽目になる(本当は1回だけ処理したい)、という意味ですか? 



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

Name: パコネコ  ..上級者(17,172ポイント)   Date: 2010/07/21(水) 00:38   No:57025     
Title: Re:入力について    
処理に入った時には、すでに残骸が入力されている状態です。


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

Name: ぽこ  ..上級者(22,761ポイント)   Date: 2010/07/21(水) 00:50   No:57028     
Title: Re:入力について    
サンプルソースを提示できます?
#残骸が出るソースが欲しいです。


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

Name: バグ  ..ハッカー(200,370ポイント)   Date: 2010/07/21(水) 10:35   No:57034     
Title: Re:入力について    
処理系依存ですし、本来は未定義の動作ではありますが、fflush関数で標準入力ストリームをクリアしてから、scanf関数を実行してみてはいかがでしょうか?

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

Name: シエル  ..プログラマー(31,137ポイント)   Date: 2010/07/21(水) 11:26   No:57040     
Title: Re:入力について    
>入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、

結局入力したい値は何なのですか?何をしたいのか見えてきません。


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

Name: パコネコ  ..上級者(17,423ポイント)   Date: 2010/07/21(水) 14:42   No:57057     
Title: Re:入力について    
少し違いますがこんな感じです。

char a;
if(gl_getkeystate('B')<0){//Bボタンが押されているなら
 while(gl_getkeystate('B')<0);//ボタンを離すまで待機
 printf("ダンジョンの最初に\n"
        "戻る:0 戻らない:1---");
 scanf("%c",&a);
 if(a=='0')break;//ダンジョンから抜ける。
 else printf("キャンセルしました。\n");
}

こんな感じでした。
ただscanf文を処理するときには、入力画面に「bbbb」と入ってしまっています。
scanfで なくてもいいので、入力画面のときに「b」でこれ以上入力してもバックスペースを押さない限り
入力できなくしたいのです。
注意:
gl_getkeystateはボタンが押されているかの判定ができる関数?です。


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

Name: シエル  ..プログラマー(31,309ポイント)   Date: 2010/07/21(水) 14:55   No:57059     
Title: Re:入力について    
if(gl_getkeystate('B')<0){//Bボタンが押されているなら 
 while(gl_getkeystate('B')<0);//ボタンを離すまで待機 

↑この辺が原因かと。


全部gl_getkeystateの関数で処理すればいいんじゃないですか?


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

Name: パコネコ  ..上級者(17,540ポイント)   Date: 2010/07/21(水) 15:25   No:57061     
Title: Re:入力について    
>全部gl_getkeystateの関数で処理すればいいんじゃないですか?
そうですね。
一応ゲームのほうは、右ボタン左ボタンで選んで決定っというふうに作りました。
つまりこういうやつですよね。
a=0;
do{
 if(gl_getkeystate('Y')<0)a=1;
 if(gl_getkeystate('N')<0)a=2;
}while(a==0);



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

Name: パコネコ  ..上級者(17,656ポイント)   Date: 2010/07/21(水) 18:46   No:57070 解決!     
Title: Re:入力について    
できれば入力の方法が知りたかったのですが…
でもゲームを作るときには、直接ボタンを押したかの判定のほうが、
いいかもしれませんね。

質問の文章が?かは、わかりませんがわかりずらい質問に付き合っていただき、
ありがとうございました。
これで、解決にしたいと思います。


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



Name: shiro4ao  ..初心者(7,343ポイント)   Date: 2010/07/21(水) 17:21   No:57064       
Title: 文字を書き込めない    
メインのスレッドでひたすらbufに"B"を書き込む
サブのスレッドでひたすらbufに"A"を書き込み出力する

ということを1000回繰り返しました。
しかし、一回も"B"が書き込まれることなく終了してしまいました。

この方法で一回でいいからBと出力して欲しいのですが可能でしょうか?

===================ここから===============================
#include <windows.h>
#include <stdio.h>

char buf[1024];
int j=1000;

DWORD WINAPI SubThread(LPVOID vdParam) {
    int i=0;
    while (i<j) {
        strcpy(buf,"A");
        printf(buf);
        i++;
    }
    ExitThread(TRUE);
}

int main(void){
    int i=0;
    char a[1024];
    CreateThread(NULL , 0 , SubThread , NULL , 0 ,NULL);
    while (i<j) {
    strcpy(buf,"\nB\n");            //探しやすいようにBの前後に改行を入れました  
    i++;
    }
    gets(a);                //結果をコンソール上で見るために終了させないようにするためです
return 0;
}

====================ここまで============================


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


Name: シエル  ..プログラマー(31,458ポイント)   Date: 2010/07/21(水) 17:40   No:57065     
Title: Re:文字を書き込めない    
まず、一つの変数に同時に複数のスレッドから書き込みを行うのは
やめたほうがいいと思います。

どうしてもBを出力したければ、
下記のようにサブスレッドでAをコピった後に、スリープを入れたらいいんじゃないですかね。

strcpy(buf,"A"); 

Sleep(1);

printf(buf); 


こうすれば、何回かに一回はBが表示されるんではないでしょうか。

 編集済み


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

Name: shiro4ao  ..初心者(7,548ポイント)   Date: 2010/07/21(水) 17:55   No:57066     
Title: Re:文字を書き込めない    
ありがとうございます。
複数のスレッドから書き込みが上手くいかないということを実感するために
なんとなく書いたプログラムなのであんまり気にしなくていいと思います。
(ただ、うまく「不具合」が起こってくれないので困っているのです・・・)

Slepp(100)くらいにしていれてみたのですが、全く変化なしでした。
最初の一回だけ、Bが出力されて、それ以降はAが連続で出てきます。
確認したら、サブスレッドが書き込んでいるときは、メインスレッドの処理は
させてもらえていないようでした。

「複数のスレッドから書き込みは危険な場合があるから避けましょう」

という程度の発生率でしかないのでしょうか?


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

Name: ぽこ  ..上級者(23,001ポイント)   Date: 2010/07/21(水) 18:13   No:57067     
Title: Re:文字を書き込めない    

>(ただ、うまく「不具合」が起こってくれないので困っているのです・・・)

マルチスレッドに起因する問題は、タイミング問題です。
現象が発生しないのは、試行時間が短いか、試行回数が少ないからです。
1000回ループではなく、100万回ループにし、プログラム自体を100回くらい動かしてください。
んで、表示する文字列も長くしてください。
A、Bともに100文字程度にしてみてどうですか?

>「複数のスレッドから書き込みは危険な場合があるから避けましょう」 
>という程度の発生率でしかないのでしょうか?


問題なのは発生率の高さではありません。
発生すること自体が問題なのです。

>「複数のスレッドから書き込みは危険な場合があるから避けましょう」 

と書かれていますが、なぜ危険なのか理解していますか?



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

Name: shiro4ao  ..初心者(7,701ポイント)   Date: 2010/07/21(水) 18:30   No:57069 解決!     
Title: Re:文字を書き込めない    
>んで、表示する文字列も長くしてください。
>A、Bともに100文字程度にしてみてどうですか? 

Aを長くしたら、途中でBが出てきました。

実際に使う場合は長い文字列でも当然なのでたしかに危険だと思いました・・・・
書き込み内容が意図せずに変わっていたら、発見しにくいバグになるかもしれないので
実際に使う際は注意したいと思います。

シエルさん、ぽこさんありがとうございました。
これにて解決とさせていただきます。


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



Name: ガウシカ  ..ぴよぴよ(49ポイント)   Date: 2010/07/20(火) 15:06   No:56998       
Title: slnファイルが開けません><    
初めてです

こないだVC2010を入れて、DXlib_VCに入っているDxLib_VC2010用.slnが開けません

開こうとすると「このバージョンではサポートされないプロジェクトの種類(vcxproj)」
と出てしまいます。

拡張子を確認してもslnになっているのに読み込む際vcxprojになってしまいます
どうすれば開けるのでしょうか?


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


Name: ookami  ..プログラマー(36,366ポイント)   Date: 2010/07/21(水) 09:50   No:57033     
Title: Re:slnファイルが開けません><    
レスが無いようなので...

別スレで似たような話題があったので貼っておきます。
http://www.play21.jp/board/formz.cgi?action=res&resno=56552&page=&lognum=173&id=dixq&rln=56574
まぁ...ここでも「解決!」したかどうか分からないんですけども。

Softyaさんの
> VisualStudioを起動した後、ファイル→開く→プロジェクト/ソリューションで該当のファイルを開いたらうまく読み込みませんか? 
というのが気になるので、試してみていただけませんか?


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

Name: シエル  ..プログラマー(31,179ポイント)   Date: 2010/07/21(水) 11:28   No:57041     
Title: Re:slnファイルが開けません><    
ファイルを右クリック→プロパティから、ファイルの種類を変更して、
VC2010に設定してみても駄目でしょうか?


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

Name: ガウシカ  ..ぴよぴよ(206ポイント)   Date: 2010/07/21(水) 16:18   No:57062 解決!     
Title: Re:slnファイルが開けません><    
あ、別スレがあったんですね・・・
気付きませんでしたm_ _m

>>シエルさん
だめですね・・・同じように表示されてしまいます

>>VisualStudioを起動した後、ファイル→開く→プロジェクト/ソリューションで該当のファイルを開いたらうまく読み込みませんか?  
プロジェクト/ソリューションというのは右下のファイルの種類というところでしょうか?
見つからないんですが・・・;

とりあえず今は2008をインストールしたので、一応解決にしておきます


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



Name: ぬるぽ  ..入門者(3,040ポイント)   Date: 2010/07/19(月) 01:28   No:56948       
Title: 画像部分を真っ白にする方法    
DXライブラリで、
画像部分を真っ黒にする方法は

SetDrawBright( 0 , 0 , 0 );
//画像を表示
SetDrawBright( 255 , 255 , 255 );

と、輝度を指定してあげれば出来るのですが、
画像部分を真っ白にする方法が分かりません。
そのようなこと可能なのでしょうか?
もし知っている方がいましたら教えてください。
よろしくお願いします。


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


Name: ぬるぽ  ..入門者(3,065ポイント)   Date: 2010/07/20(火) 01:12   No:56982 解決!     
Title: Re:画像部分を真っ白にする方法    
不可能ということで解決にしたいと思います。

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

Name: 白い時空  ..入門者(3,423ポイント)   Date: 2010/07/20(火) 01:23   No:56983     
Title: Re:画像部分を真っ白にする方法    
解決になってしまいましたが…

画面を真っ白にするなら
白をαブレンドで描画すればいいんじゃないですか?

DrawBox( 0, 0, 640, 480, GetColor(255,255,255) , TRUE);//画面全体を白で描画
SetDrawBlendMode( 0, DX_BLENDMODE_ALPHA );//αブレンドの値を設定
//画像を表示
SetDrawBlendMode( 255, DX_BLENDMODE_NOBLEND);//元に戻す

多分これでいいと思います。


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

Name: ぬるぽ  ..入門者(3,139ポイント)   Date: 2010/07/20(火) 03:49   No:56989     
Title: Re:画像部分を真っ白にする方法    
ああ、すみません。強調すればよかったですね。
画面全体を真っ白にするのではなく、
画像自体をプログラムで真っ白に変えてみたいのです。

添付参照。

白く加工したものを表示する方法もありますが、
メモリが勿体ないので……


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

Name: シエル  ..プログラマー(29,361ポイント)   Date: 2010/07/20(火) 08:04   No:56990     
Title: Re:画像部分を真っ白にする方法    
加算ブレンドしまくるとか

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

Name: へろり  ..プログラマー(26,565ポイント)   Date: 2010/07/20(火) 11:05   No:56992     
Title: Re:画像部分を真っ白にする方法    
DXライブラリはさっぱり分かりませんが。

画像のビットブロックを直接いじるとかは出来ないのでしょうか。

もしくは、画像からマスクなりリージョンなりを作って塗りつぶすとか。


>白く加工したものを表示する方法もありますが、 
>メモリが勿体ないので……
png画像で640x480のサイズでも300kb程度ですよ。
そんなにケチるほどのメモリ量では無いと思いますが。


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

Name: 白い時空  ..入門者(3,552ポイント)   Date: 2010/07/20(火) 12:28   No:56993     
Title: Re:画像部分を真っ白にする方法    
加算ブレンドと反転描画を組み合わせたらできました。

その方法ですが、反転画像を描画し、その後元画像を加算ブレンドで描画します。
そのため、2回描画する必要があります。
SetDrawBlendMode( DX_BLENDMODE_INVSRC, 255);//画像を反転させて描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_ADD, 255);//画像を加算ブレンドで描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255) ;//元に戻す

反転画像の色は(255−元画像)になるので、元画像と加算ブレンドすると、
元画像+(255−元画像)=255
となることを利用しました。 編集済み


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

Name: ぬるぽ  ..入門者(3,182ポイント)   Date: 2010/07/20(火) 21:44   No:57018 解決!     
Title: Re:画像部分を真っ白にする方法    
>白い時空さん
おお、この発想はなかったです。
助かりました。ありがとうございました。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +