|
Name: atsu ..ぴよぴよ(182ポイント)
Date: 2010/08/19(木) 17:10
No:59461
|
|
Title: win7のときのaa動画制作について本当に初歩的な質問です。
|
|
http://dixq.net/rakisuta2.html
を見ながら作っていたのですが自分はwin7を使っているのでAVI2JPGを使えません。
なのでほかのソフトを使ってbmpの連番を作ったのですがファイル名が「raki_0000」「raki_0001」〜「raki_2373」といった感じになってしまいます。
この時コードはどのように変えればいいのでしょうか。
自分は初心者なので上のURLの変更点だけ教えてもらえるとうれしいです。
お手数ですがよろしくお願いします。 
182ポイント を手に入れた。
|
|
|
|
Name: atsu ..ぴよぴよ(218ポイント)
Date: 2010/08/19(木) 18:23
No:59465
|
|
Title: Re:win7のときのaa動画制作について本当に初歩的な質問です。
|
|
今度はavi2jpgは動作を停止しましたとなってできませんorz
すみませんがコードの変更方法を教えてもらえませんか?
36ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(17,955ポイント)
Date: 2010/08/19(木) 19:06
No:59486
|
|
Title: Re:win7のときのaa動画制作について本当に初歩的な質問です。
|
|
>今度はavi2jpgは動作を停止しましたとなってできませんorz
AVIファイルが手元になかったため確認不足でした。
では、bmp_read 関数を下のものと置き換えて実行してみてください。
あのコードを理解しているわけではないので、間違っているかもしれませんが...
void bmp_read(int cnt){
char name[64];
FILE *fp;
sprintf(name,"image0/raki_%04d.bmp",cnt);
fp = fopen( name , "rb" );
if( fp == NULL ){
printfDx( "%sが見つかりません。",name);
return;
}
fread( data, 1, TOTAL, fp );
fclose(fp);
}
159ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(50,555ポイント)
Date: 2010/08/17(火) 08:56
No:59136
|
|
Title: メモリマップドファイルについて
|
|
お世話になります。
昨日、自作のアーカイバとその解凍ツールが完成しました。
そのアーカイバを使って、今作成しているゲームの外部データをアーカイブ化しました。
そのアーカイブデータを読み込んで、今までどおり画像や音声が表示できるかどうか試しているのですが、
読み込む方法として、メモリマップドファイルの技術を使って読み込もうとしています。
一応、マッピングオブジェクトを作成するところまでは上手く言ったんですが、
MapViewOfFile関数で、メモリをマップしようとしたときに、正しくそのポインタが取得できずに困っています。
MapViewOfFile関数の使い方は下記のように使用しているのですが、何か間違っているでしょうか?
char *p;
HANDLE mh,fh;
int point;
int size;
fh=CreateFile()//省略。ここでアーカイブファイルのハンドルを取得
mh=CreateFileMapping()//省略。マッピングオブジェクト作成
point=独自関数()//ここで、アーカイブファイル内の読み込みたいデータの位置(バイト)を取得
size=独自関数()//ここで、アーカイブファイル内の読み込みたいデータのサイズを取得
p=(char *)MapViewOfFile(mh,FILE_MAP_READ,0,point,size);
個人的にはMapViewOfFileの第3、4、5引数が怪しいと思っています。
どなたか分かる方、ご教授お願い致します。
追記:
3,4,5の引数を全て0にして、ファイル全体をマッピングすると、ポインタは取得できます。
つまり、アーカイブファイル内の指定の位置のポインタを取得しようとするとエラーになっているようです。 
555ポイント を手に入れた。
|
|
|
|
Name: toyo ..熟練のプログラマー(57,829ポイント)
Date: 2010/08/17(火) 09:29
No:59137
|
|
Title: Re:メモリマップドファイルについて
|
|
#include <windows.h>
#include <stdio.h>
int main (void)
{
SYSTEM_INFO SystemInfo;
GetSystemInfo(&SystemInfo);
printf("%x", SystemInfo.dwAllocationGranularity);
return 0;
}
MapViewOfFile( )関数の第3、4引数(オフセット)は↑で得られるdwAllocationGranularityの倍数しか指定できないようです
バイト単位での指定は出来ないようです
自分の環境でやった結果は0x10000でした
普通にfopenとfseekではどうでしょう
224ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(50,789ポイント)
Date: 2010/08/17(火) 09:39
No:59138
| 解決!
|
Title: Re:メモリマップドファイルについて
|
|
>MapViewOfFile( )関数の第3、4引数(オフセット)は↑で得られるdwAllocationGranularityの倍数しか指定できないようです。
ということは、読み込みたい位置がdwAllocationGranularityの倍数でない時点でもうエラーが
出てしまうってことですよね。。。
じゃあ、この関数はアーカイブファイルを読み込むようなときには向いていないようですね。
ファイルをメモリのように扱えて、ファイルから読むからメモリを消費しない、かつメモリの動的確保も
いらないようだったので、この関数を見つけた当初は良い関数だなと思ってたんですけどね。
まあ、ちょっと勉強がてらに使ってみたいってのもあったので、勉強になりました!
なので、toyoさんの言うとおり、メモリを動的確保して、fseekなどで読み込んでいきたいと思います。
toyoさんありがとうございました!
234ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(57,040ポイント)
Date: 2010/08/19(木) 19:03
No:59485
|
|
Title: Re:メモリマップドファイルについて
|
|
メモリマップドファイルを使った解決法が見つかりましたので、
今後の参考とするために、一応書き込んでおきます。
たしかにMapViewOfFileのオフセット位置はSYSTEM_INFO構造体のdwAllocationGranularityの倍数しか指定できません。
その解決方法として、アーカイブファイル全体をマッピングしてから、ポインタを移動してやるということです。
全体をマッピングして、その先頭のポインタを取得し、そこから指定したバイトだけポインタを
移動してやれば、移動したい位置に移動できます。
この時はMapViewOfFileの第3,4引数のオフセットを使用していないので、
先ほどの倍数に縛られることはありません。
全体をマッピングしたら、それだけメモリ食うじゃないかと思いますが、
マッピングしているだけですので、メインメモリは消費しないので問題ありません。
以上。
※スレ上がったらすみません。。。 
189ポイント を手に入れた。
|
|
|
|
Name: 疲れた ..ぴよぴよ(35ポイント)
Date: 2010/08/19(木) 18:57
No:59481
|
|
Title: 龍神録の第13章なんですが
|
|
struct.hのbullet_t bullet[SHOT_BULLET_MAX]が定義されていない識別子という風に
ビルドエラーが出てしまっていてどうすればいいのでしょうか?
改善策が全くわからないので助けて下さい。
※下のものが既出であったらごめんなさい。
shot.cppのshot_main()関数を以下のように変更と書いてあるのですが、13章までのプログラムのなかにshot_main()関数はshot.cppにないのですが・・・。
shotH.cppの追加に同じ物が2回出ていてエラーが発生してます・・・。
2ポイント を手に入れた。
|
|
|
|
Name: naohiro19
Date: 2010/08/22(日) 20:57
No:594811282478245
|
|
Title: Re:龍神録の第13章なんですが
|
|
struct.hに以下を追加します
#include "define.h"
|
|
|
|
Name: まる ..入門者(2,998ポイント)
Date: 2010/08/17(火) 01:38
No:59128
|
|
Title: Object-C 初心者な質問
|
|
初歩的な質問ですみません。
2点質問がございます。
I/F:iphone(Xcode)
言語:Object-C
1)デファインについて
#define MAX_NUM 30
#define FRIEND_TIMELINE_URL2 @"http://%@:%@@twitter.com/statuses/friends_timeline.json?count=MAX_NUM"
上記のようにツイッターAPIを使用してデータを取り出そうとしたのですが、
countオプションの値にデファインを使用しても無視されます。
数字をべたにいれると認識されます。
この原因についてわかるようでしたら、教えてください。
メンテナンスのことを考えて最大数はデファインで持ちたく。。。
よい回避策があればいいのですが。。
2)関数コールについて
さらに初心者的な質問ですが、
当方はC言語の知識しかないのですが、Object-Cでの関数コールの仕方について教えてください。
漠然とした質問ですみません。
このあたりがわかる参考になるサイトとかでも教えていただけると助かります。
359ポイント を手に入れた。
|
|
|
|
Name: 蓮 ..入門者(4,866ポイント)
Date: 2010/08/17(火) 08:29
No:59133
|
|
Title: Re:Object-C 初心者な質問
|
|
あくまで経験者レベルです。
時間がないのでざっくりと・・・
1について
宣言している部分は正しいですか?
又、C言語と組み合わせる場合は拡張子を変えなければいけないことがあるのですが拡張子は何になってます
か?
バックアップを取ってそのソースを.mmにしてみて下さい。
2について
[self 関数名];
これで関数を呼べるかと・・・。
169ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(15,950ポイント)
Date: 2010/08/17(火) 10:00
No:59140
|
|
Title: Re:Object-C 初心者な質問
|
|
define の置き換えはトークンと呼ばれる単位で置換していくのですけど、文字列リテラルというのは1つのトークンとして認識されるため、MAX_NUM が 30 に置換されることはありません。
少し回りくどいマクロを書けば文字列にすることも可能ですが、以下のような関数を使うようにしてもいいのではないでしょうか。
#define MAX_NUM 30
#define FRIEND_TIMELINE_URL2 @"http://%@:%@@twitter.com/statuses/friends_timeline.json?count=%d"
NSString* make_friend_timeline_url2(NSString* user, NSString* pass)
{
return [NSString stringWithFormat: FRIEND_TIMELINE_URL2, user, pass, MAX_NUM];
}
163ポイント を手に入れた。
|
|
|
|
|
Name: 蓮 ..入門者(4,935ポイント)
Date: 2010/08/17(火) 10:04
No:59141
|
|
Title: Re:Object-C 初心者な質問
|
|
あ〜ごめんなさい
よくソースを見てませんでした。
countオプションの値にデファインを使用しても無視されます。
と書いてあったのでってきり変数に値を入れているのかと・・・
69ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(564,552ポイント)
Date: 2010/08/18(水) 00:05
No:59284
|
|
Title: Re:Object-C 初心者な質問
|
|
Objective-Cですね。
>2)関数コールについて
関数は基本的に XXXXX(A, B, C)のように C言語と同じですよ。
ex) NSLog(@"hoge");
2倍のポイントを手に入れた! 88ポイント を手に入れた。
|
|
|
|
|
Name: まる ..入門者(3,167ポイント)
Date: 2010/08/18(水) 01:38
No:59297
|
|
Title: Re:Object-C 初心者な質問
|
|
みなさん回答ありがとうございます。
質問1に関しては理解いたしました。
質問2に関してですが、
下記例のソースで
Justyさんの回答を表すと、
- (IBAction)myAction1:(id)sender {
make_friend_timeline_url2(A,B);
}
蓮さんの回答を表すと
- (IBAction)myAction1:(id)sender {
[self make_friend_timeline_url2(A,B)];
}
どちらが正解でしょうか。
もうしわございません、もう少し教えてください。
169ポイント を手に入れた。
|
|
|
|
|
Name: 蓮 ..初心者(5,145ポイント)
Date: 2010/08/18(水) 02:27
No:59301
|
|
Title: Re:Object-C 初心者な質問
|
|
宣言の仕方によります。
試してみたのでしょうか?
objective-cで引数を使う場合
[self make_friend_timeline_url2(A,B)];
↓
[self make_friend_timeline_url2 XXX:A YYY:B];
みたいな感じかと・・・
109ポイント を手に入れた。
|
|
|
|
|
Name: まる ..入門者(3,185ポイント)
Date: 2010/08/19(木) 08:17
No:59406
| 解決!
|
Title: Re:Object-C 初心者な質問
|
|
Justyさんありがとうございました。
理解できました。
18ポイント を手に入れた。
|
|
|
|
Name: テラ ..ぴよぴよ(953ポイント)
Date: 2010/08/18(水) 22:30
No:59380
|
|
Title: 実行可能ファイルの作成
|
|
キャラクターの移動とマップ作成、および移動可能判定が出来上がったので、
一度実行可能ファイルで出力して動くかどうかを試そうと思ったのですが、
DXライブラリ置き場にある「DXライブラリの使い方」に従って今まで作成していたのですが、
最後の文にあった
>さて出来あがった実行可能ファイルですが、それはプロジェクトのフォルダの中の『Debug』フォルダか
>『Release』フォルダの中に作成されます。これがこれまでの作業の成果となります。
という文章のとおりに両方のファイルを見てexeファイルがあったため、クリックしてみたのですが、
ゲームのタイトルの書かれたウィンドウは表示されたのですが、肝心のゲーム画面が真っ暗でした。
何かの設定が足りないのでしょうか・・・? ご教授お願いいたします。
309ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(56,181ポイント)
Date: 2010/08/18(水) 22:35
No:59381
|
|
Title: Re:実行可能ファイルの作成
|
|
実行ファイルがあるディレクトリから見て、画像データなどがどのディレクトリに
あるのかを考えて実行ファイルを移動させるか、画像データなどを指定した場所に移動させて下さい。
48ポイント を手に入れた。
|
|
|
|
|
Name: テラ ..ぴよぴよ(965ポイント)
Date: 2010/08/18(水) 22:47
No:59384
| 解決!
|
Title: Re:実行可能ファイルの作成
|
|
exeファイルと画像フォルダを合わせたら表示することができました!
けっこう単純なことを見落としていたんですね・・・。ご教授ありがとうございます。
12ポイント を手に入れた。
|
|
|
|
Name: ネス ..初心者(6,894ポイント)
Date: 2010/08/18(水) 18:25
No:59363
|
|
Title: キャラチップ一個のピクセル数
|
|
皆さんグッドイブニングです。
今、キャラチップをダウンロードしたのですが、画面上で小さい気がして編集ソフトでリサイズしてみました。
しかし、一枚32ピクセルの設定だと表示する際、キャラに対するフォーカスがズレてしまうようです。
まるで別のキャラが表示されたり、キャラとキャラの間が表示されたりといった具合になります。
そこでキャラ一個あたりのピクセル数を把握したいのですが、どうやってすればよいのでしょう。
画像ファイルを右クリックで詳細を出し、サイズ情報など出すところまではできました。
しかし、一個当たりのピクセル数までは見当たらりません。
ただ、おそらくこれは小学生の算数で出せるのかなとも薄々感じています。
にもかかわらず、お恥ずかしながら、やり方が思い浮かびません。
横3・縦4枚の枚計12枚で、大きさ150×200なのですが、どうやって一個のピクセル数を求めればよいのでしょうか。
305ポイント を手に入れた。
|
|
|
|
Name: テラ ..ぴよぴよ(644ポイント)
Date: 2010/08/18(水) 18:32
No:59365
|
|
Title: Re:キャラチップ一個のピクセル数
|
|
まだここに顔を出し始めたばかりですが、少しご意見を。
>横3・縦4枚の枚計12枚で、大きさ150×200なのですが、どうやって一個のピクセル数を求めればよいのでしょうか。
実際に図にするとわかりやすいです。□を1枚として考えると、
□□□□
□□□□
□□□□
ということだとおもいます。
そして、大きさは150*200ということでしたので、
□□□□┐
□□□□150
□□□□┘
└200┘
という風に考えると、1個あたりのピクセル数がわかると思います。 
238ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(6,816ポイント)
Date: 2010/08/18(水) 18:41
No:59366
|
|
Title: Re:キャラチップ一個のピクセル数
|
|
テラさん、レスありがとうございます。
ということは、この場合、50*50が一枚の画像ということですね。
リサイズする場合、縦・横の枚数で割り切れるようにすべきなのですね。
78ポイント を落としてしまった。
|
|
|
|
Name: 疲れた ..ぴよぴよ(33ポイント)
Date: 2010/08/18(水) 19:11
No:59368
|
|
Title: 龍神録のキャラ変更
|
|
龍神録のキャラを
変えたいのですが、自作のキャラに変更をどうやればいいのか分からないので教えてください
33ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(207,291ポイント)
Date: 2010/08/18(水) 19:31
No:59369
|
|
Title: Re:龍神録のキャラ変更
|
|
同じ大きさ、同じ名前で自作キャラの画像ファイルを作成して、オリジナルの物と入れ替えれば多分おk。
52ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(51,897ポイント)
Date: 2010/08/17(火) 17:01
No:59183
|
|
Title: アーカイブファイル内のCSVデータ読み込みについて
|
|
今日2回目の質問になります。申し訳ありません。
昨日自作のアーカイバが完成したので、
そのアーカイバを使って作成したアーカイブファイルからデータを読み込もうとしています。
画像データや音声データは試行錯誤の上、何とか読み込めて表示や再生できるようになりましたが、
敵出現データのCSVファイルの読み込み方法について悩んでおります。
アーカイブ化する前は、直接ファイル名を指定して、fopenで読み込んだあと、
fgetsでcsvファイルのヘッダ部分を一行読み飛ばし、
fscanfで下記のように読み込んでいました。
fscanf(fp,"%d,%d,%d,・・・・省略)
ですが、アーカイブファイルの場合はバイナリファイルとしてアーカイブファイル全体を読み込んでいるので
ファイル名を指定して読み込むfopenが使えず、fscanfも使えません。
sscanfという関数があるのも見つけましたが、ヘッダ部分をどう読み飛ばすか、
また、どの部分までがそのCSVデータと見なすのかという指定ができそうにありません。
このようなアーカイブファイル内のCSVデータの読み込み方法として、
便利な方法はないでしょうか?
ご教授の程、よろしくお願い致します!
2倍のポイントを手に入れた! 1,020ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(197,589ポイント)
Date: 2010/08/17(火) 17:42
No:59189
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
私の場合ゲーム用のアーカイブファイルは、利便性の都合上ファイル毎に個別圧縮してました。
あとはfopenやfgetsの代わりをするストリーム関数を作って解凍しながら処理に受け渡すことでfopen時と変わらない使い勝手が実現できます。sscanfは、fgetsの代わりの関数で読み込んだデータを処理することでfscanf風に使えますね。
2倍のポイントを手に入れた! 230ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..ぴよぴよ(69ポイント)
Date: 2010/08/17(火) 17:46
No:59191
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
開発環境等の明記がありませんが、どのような環境でも可能な方法をお探しでしょうか?
20ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(51,968ポイント)
Date: 2010/08/17(火) 17:52
No:59192
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
>>softyaさん。ありがとうございます。
自作のストリーム関数ですか。どう作ればいいかさっぱりです。
CSVファイルのために個別圧縮ですか。出来ればまとめたいですね。。。
>>palladiumさん。ありがとうございます。
すいません。
コンパイラはVC+2008EEで、Windows7を使っています。
とりあえずWindows環境で実現できれば良いです。
|
|
|
|
|
Name: palladium ..ぴよぴよ(200ポイント)
Date: 2010/08/17(火) 18:13
No:59194
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
実装がわからないのでなんとも言えませんが
GetFileSize で元ファイルのサイズを取得
CreateFile でファイルにアクセス
SetFilePointer で読み込み位置を指定
ReadFile で読み込み
とかイメージします。
しかし、アプリケーションデータならXMLを先に考えます。
131ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(52,036ポイント)
Date: 2010/08/17(火) 18:20
No:59195
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
>palladiumさん。ありがとうございます。
その方法とほぼ同じ方法をfseek等でやろうとしました。
ですが、読み込もうとしているCSVファイルはデータの項目のヘッダが一行目にあります。
それを読み飛ばすにはどうすればよいでしょうか?
追記:
すいません。「実装」とおっしゃってるのが何なのかいまいちイメージできないんですが、
一応現在はシューティングゲームを作成しておりまして、その敵の出現データを管理しているのが
そのCSVデータになります。 
68ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(197,971ポイント)
Date: 2010/08/17(火) 18:39
No:59197
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
私の話の例は、個別に圧縮した上でアーカイブしてあるので、アーカイブされてますよ。圧縮が個別に掛かっているだけです。
今回の場合にはシエルさんが作ったと言っているアーカイバのデータ構造の簡単な説明しないとみなさんアイデアが出しづらいと思います。
>ですが、読み込もうとしているCSVファイルはデータの項目のヘッダが一行目にあります。
>それを読み飛ばすにはどうすればよいでしょうか?
上にも書きましたがその一行目が圧縮されているのかとか、どうやってファイル先頭にfseekできるのかとか、一行目を区別する改行コードはどうなっているとか、細かい説明が欲しいですね。
>すいません。「実装」とおっしゃってるのが何なのかいまいちイメージできないんですが、
この場合の実装は、どういうデータ構造やプログラムになっているか分からないと言う意味だと思います。
350ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..ぴよぴよ(167ポイント)
Date: 2010/08/17(火) 18:54
No:59200
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
>「実装」とおっしゃってるのが何なのかいまいちイメージできない
アーカイブファイルのデータ構造です。
33ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(52,968ポイント)
Date: 2010/08/17(火) 19:02
No:59202
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
そうですね。説明が足りなかったかもしれません。
アーカイバのデータ構造としては、まず最初にファイルの情報を保存したヘッダを書き込んでいます。
そのヘッダの内容として主なものは下記の三つです。ほかにも幾つか情報は書き込んでますが。
・ファイル名
・サイズ
・自分の先頭からの位置(バイト)
ですので、まずアーカイブのヘッダさえ読み込めれば、CSVファイルがアーカイブファイルの中のどの位置にあって、サイズはどれくらいかが得られます。
後はそのヘッダの後に、順番に各ファイルのデータをバイト単位で書き込んでいっているだけの単純なものです。
なので、圧縮等はしてません。(いずれ圧縮や暗号もやりますけど)
データ構造はこんな感じです。アーカイバは初めて作ったので説明が足りなかったらすみません。
こういう構造ですので、CSVファイルがある先頭のポインタまでは取得できるんですが、
そこからどうやって、一行読み飛ばして、カンマごとにデータを読んでいけばいいのかが分かりません。
テキストモードで読みこんでいれば余裕なんですけど、バイナリですので。。。
説明は大体以上になります。ご教授の程、よろしくお願い致します。
2倍のポイントを手に入れた! 932ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..ぴよぴよ(210ポイント)
Date: 2010/08/17(火) 19:11
No:59204
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
改行文字チェックではダメですか?
1行目の正体が不明なのでなんとも言えませんが。
43ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(53,141ポイント)
Date: 2010/08/17(火) 20:09
No:59206
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
すいません。
一行目はその敵データを示す項目名です。
例えば、
敵イメージ、敵ショットイメージ、アイテム、等という項目がまず一行目にあって、
そのしたのその項目が示すデータがずらーっと並んでいる感じです。
79ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(198,063ポイント)
Date: 2010/08/17(火) 20:42
No:59217
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
とりあえず簡単なのは一文字づつ読み込むしか無いです。改行コードが来れば行の終わりです。
この場合の文字コードの種別が指定されていないのですが、UNICODEだと少し説明がややこしくなります。
92ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(53,390ポイント)
Date: 2010/08/17(火) 20:43
No:59218
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
やっぱり一文字ずつしかないですかね。
ちょっとやってみます。無理そうならまた書き込みます。
28ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(53,727ポイント)
Date: 2010/08/17(火) 22:16
No:59236
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
うぅ・・。すみません。
何とか一行目ヘッダ部分の改行まで読み飛ばすことができ、
ポインタも二行目の最初の位置にまで持ってこれました。
が、しかし、肝心のカンマごとに区切られてるデータをどう読み込めばいいのか悩んでいます。
また一文字ずつ読んでいってカンマ部分までポインタを進めることはできますが、
肝心のデータは桁が決まっていません。
三桁だったり一桁だったり4桁だったりします。
読み込んでる文字は1バイトずつですので、これをどう元の数字に変換すればいいか悩んでいます。
思いついた方法としては、3バイト読んでカンマがあったら、
3バイト前の値を100倍、2バイト前の値を10倍、1バイト前はそのままにして、足し算して元の値を導き出す
ということしか思いつきません。
何か効率の良い方法はないでしょうか?
337ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(198,140ポイント)
Date: 2010/08/17(火) 22:28
No:59238
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
文字列バッファを用意して改行までのデータ一文字づつ読んで文字列バッファに貯めてください。
改行が来たら、\0を文字列バッファに書き込みます。
これで一行分の文字列が出来たので、これをsscanfします。
77ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(53,769ポイント)
Date: 2010/08/17(火) 22:33
No:59242
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
おお!私にとっては革命的な発想ですね!
どうやって文字列化するかが、あんまり分からないですけど、
ちょっとググってやってみます。ありがとうございます!
42ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(54,096ポイント)
Date: 2010/08/18(水) 00:18
No:59287
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
すいません。文字列バッファに貯める方法がよく分かりません。
現在読み込んでいるバイナリファイルの現在位置のポインタがpだとしたら、
buf[200];
for(int i=0;i<200;++i){
buf[i]=*p
++p;
}
こんな感じでいいのでしょうか。
この方法で文字列を作ろうとした場合、このバッファをsscanfにかけると、
block type is validのエラーが発生してしまいます。
※このソースはあくまで例です。実際はこんなのじゃありません。ちゃんと\0終端文字とか入れてます。 
44ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..かけだし(1,677ポイント)
Date: 2010/08/18(水) 09:13
No:59320
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
データを構造体にすると読み書きが容易です。
ヘボサンプルコード
/*------------------------------------------------------------------------------------------------
Module : StructIO.c -- 2010/08/18
Comment: WindowsXP sp3,
Visual Studio 2005 sp2,
Win32-Console,
/D "_UNICODE" /D "UNICODE"
------------------------------------------------------------------------------------------------*/
#include <windows.h>
#include <stdio.h>
#define RECORD 5
#pragma pack(push, 4)
typedef struct tag_SOMEDATA{
int RecordNumber;
int IntData;
double DoubleData;
float FloatData;
} SOMEDATA;
#pragma pack(pop)
void MakeData(SOMEDATA*);
void Display(SOMEDATA*);
void DoWriteFile(LPTSTR, PVOID, DWORD);
void DoReadFile(LPTSTR, PVOID, DWORD);
int main(void)
{
SOMEDATA SomeData[RECORD];
SOMEDATA ReadData[RECORD];
LPTSTR FileName = TEXT("SomeData.dat");
printf("-------------------- Write Data ----------------------\n");
MakeData(SomeData);
Display(SomeData);
DoWriteFile(FileName, SomeData, sizeof(SomeData));
printf("-------------------- Read Data -----------------------\n");
DoReadFile(FileName, ReadData, sizeof(ReadData));
Display(ReadData);
system("pause");
return 0;
}
void MakeData(SOMEDATA *SomeData) // でたらめなデータ ^^;
{
int i;
for (i=0; i<RECORD; i++)
{
SomeData[i].RecordNumber = i;
SomeData[i].IntData = i * 100;
SomeData[i].DoubleData = i / 2.1;
SomeData[i].FloatData = i * 3.14f;
}
}
void Display(SOMEDATA *SomeData)
{
int i;
for (i=0; i<RECORD; i++)
{
printf("RecordNumber : %d\n", SomeData[i].RecordNumber);
printf("IntData : %d\n", SomeData[i].IntData);
printf("DoubleData : %f\n", SomeData[i].DoubleData);
printf("FloatData : %f\n\n", SomeData[i].FloatData);
}
}
void DoWriteFile(LPTSTR FileName, PVOID SomeData, DWORD Size)
{
HANDLE hFile;
DWORD Written;
hFile = CreateFile(
FileName,
GENERIC_WRITE,
(DWORD) 0,
(LPSECURITY_ATTRIBUTES) NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
WriteFile(hFile, SomeData, Size, &Written, NULL);
CloseHandle(hFile);
}
void DoReadFile(LPTSTR FileName, PVOID ReadData, DWORD Size)
{
HANDLE hFile;
DWORD Read;
hFile = CreateFile(
FileName,
GENERIC_READ,
(DWORD) 0,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
ReadFile(hFile, ReadData, Size, &Read, NULL);
CloseHandle(hFile);
}
1,467ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(198,241ポイント)
Date: 2010/08/18(水) 09:25
No:59323
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
>こんな感じでいいのでしょうか。
>この方法で文字列を作ろうとした場合、このバッファをsscanfにかけると、
>block type is validのエラーが発生してしまいます。
ちゃんと中身が出来ているかデバッガで確認しましたか?
2倍のポイントを手に入れた! 56ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(54,363ポイント)
Date: 2010/08/18(水) 09:46
No:59324
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
悩むこと数時間。まったく解決しない。。。ちょっと進んだけど。
まず、バイナリモードで読み込んだときとテキストモードで読み込んだときの違いを理解しました。
Windows環境では、改行は0x0d0aで表されていて、これをテキストモードで読み込んだ場合は、
C側で改行を表す0a(10)で表される\nに自動的に変換してくれる。
バイナリモードで読み込むと変換せずに読み込まれるので、そのまま0x0d0aの値まま読み込まれる。
つまり、コードを書く際は\r(0x0dが来たら、改行が来たとみなす。
しかしその1バイト先に\n(0x0a)があるので、次の行を読み込むときには、
ポインタを2バイト進めてから読み込み始める。
0x0d(\r)はcarriage return(先頭に戻る)、0x0a(\n)はLine feed(改行)を表している。
ということまで理解しました。間違ってたらご指摘お願いします。
ということを踏まえたうえで作ったコードが以下です。
for(s=0;s<200;++s){
if(!memcmp("\r",p,sizeof(char))){
p+=2;//この一バイト先に\nがあるので、次に読み込む文字は2バイト先なので2足す
sbuf[s]='\0';//最後に終端文字を設定
break;
}
sbuf[s]=*p;//文字列バッファへ格納。
++p;//ポインタを進める
}
if(s==200){
MessageBox(hwnd,L"200バイト以内に改行が見つかりませんでした。",L"エラー発生",MB_OK);
return;
}
if(16!=sscanf(sbuf,"%d,%d,%d,%d,%lf,%lf,%lf,%lf,%d,%d,%d,%d,%d,%d,%d,%d",・・・・省略);
このように実行すると、block type is validとエラーが発生してしまいます。
ご教授お願い致します!
>palladiumさん。ありがとうございます。参考にさせていただきます。
>softyaさん
デバッガで確認しています。
デバッガで確認する限りは、ちゃんと文字は入っています。
バッファの中一つ一つ確認しました。でもエラーが出てしまいます。
追記:画面貼っておきます

96ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(198,641ポイント)
Date: 2010/08/18(水) 10:32
No:59331
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
まず読み込みの問題なのか、別の問題なの切り分けましょう。
char *sbuf="300,140,80,640,50,10,1,3,4,1,1,1,8,3,1,1";
sscanf(sbuf,"%d,%d,%d,%d,%lf,%lf,%lf,%lf,%d,%d,%d,%d,%d,%d,%d,%d",・・・・省略);
とやってもエラーが出ますか?
178ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(54,464ポイント)
Date: 2010/08/18(水) 10:59
No:59332
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
softyaさん。毎度すみません。ありがとうございます!
提示していたいだコードでやると、うまく読み込めますね。
何が違うのかが、分かりそうで分かりません。文字列リテラル?
34ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..プログラマー(38,775ポイント)
Date: 2010/08/18(水) 11:23
No:59333
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
エラー"Block type is valid"が気になりますね。
どういう意味なんでしょうか、稀なエラーのようですが。
プログラムが何かを破壊(?)しようとしていて、
それにブロックが働いているということでしょうか?
と、すると、ポインタがおかしなところを参照しているとか…
70ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(198,756ポイント)
Date: 2010/08/18(水) 12:30
No:59337
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
なにかが違うはずですので、リテラルとstrcmpで比較してみるとか、両方OutputDebugString()してみるとか、自分でリテラルとsbufを比較してみるとかしてみてください。なにか問題があるはずですからね。
ここで知恵を絞るとプログラミングで良い経験を積むことが出来ますよ。
115ポイント を手に入れた。
|
|
|
|
|
Name: palladium ..かけだし(1,793ポイント)
Date: 2010/08/18(水) 15:23
No:59348
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
ご提示されたコードには変数の型が明記されていませんが
どのような型であっても成立する方法をお探しなのですか?
サンプルコードがはっきりしないのでわかりませんが
バイトを扱うときはchar型ではNG
BYTE型(unsigned char)ではOKという場面もあります。
もし可能であれば問題箇所を関数化して提示していただけると
こちらでも検証可能となります。
116ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(56,038ポイント)
Date: 2010/08/18(水) 16:06
No:59354
| 解決!
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
うぅ・・・。。もう駄目。。死にそう。。。
やっと原因を突き止めることができました!
大きく分けて原因は二つありました。
一つ目は下記のコードで、ポインタpにを2バイト進めるところです。
一番最後の行まで読んだら、当然ポインタpが示す先にはもうデータはないのに、
2つポインタを進めてしまったことがまず一つ。
for(s=0;s<200;++s){
if(!memcmp("\r",p,sizeof(char))){
p+=2;//この一バイト先に\nがあるので、次に読み込む文字は2バイト先なので2足す
sbuf[s]='\0';//最後に終端文字を設定
break;
}
二つ目は、このコードは提示してなかったんですが、
このコードの下に動的確保したポインタを解放させるコードを書いていたんですが、
私のコードは上記のように、直接ポインタの値を変更してしまってました。
その状態で、
delete [] p;
とやっちゃってました。当然ポインタの位置が変わってるのにこんなことしたら、
関係ない部分のメモリが解放されてえらいことですよね。
たぶんこれが、block type is validのエラーの直接的な原因でしょう。
なので、この二つの問題を解決する方法として、ポインタ変数を使って直接ポインタを進めるのではなく、
ポインタをどれだけの数進めたかを保存する変数を別で用意して対応しました。
ということで、その変数をtmpとすると、下記のコードは
for(s=0;s<200;++s){
if(!memcmp("\r",&p[tmp],sizeof(char))){
tmp+=2;//この一バイト先に\nがあるので、次に読み込む文字は2バイト先なので2足す
sbuf[s]='\0';//最後に終端文字を設定
break;
}
sbuf[s]=p[tmp];//文字列バッファへ格納。
++tmp;//ポインタ数管理変数を進める
}
というようになります。
これで、最終行に言った場合でも、直接ポインタ変数をいじってるわけでもないので、変なアドレスに
直接アクセスすることもないし、解放するときもポインタ変数自体は進めてないので、
delete [] p;で問題なく解放できます。
この問題の解決に至ったのは、皆さんのアドバイスのおかげですが、
特に大きかったのはsoftyaさんが教えてくださったOutputDebugStringです。
まったくこの存在を知らなかったのですぐググって、使用法を調べました。
この関数は私がデバッグを行ううえでかなり革命的な方法でした。
いつもはprintfなどを使ったりだとか、Windowsアプリだとメッセージボックスを出すとかしてたので、
かなり面倒臭かったんですが、この関数でこれからはだいぶデバッグが楽になりそうです。
ついでに、この関数を改良してマクロをつくり、printfのように使うという方法がネットに
載っていたので早速実装しました。
可変長引数?の宣言方法や、__VA_ARGS__マクロの存在を知ることも出来まして、
非常に勉強になりました。
後はMNSさんの「何かを破壊しようとしている」という発言です。
色々問題点を絞り込んでいる中で、完全にsscanfの使い方とか文字列バッファの代入が上手くいってないのか
というところばかりに目が行ってしまっていて、まさかメモリの解放部分が直接的な原因だとは
考えもしませんでした。
「破壊」という言葉を聞いて、まさかと思って調べたらまさにそこが原因だったわけです。
この二つのアドバイスは本当に非常に助かりました!本当にありがとうございました!
もちろんpalladiumさんのアドバイス、サンプルソースの提示も非常に参考になりました。
今後のプログラミングの参考材料にさせていただきます。
今回のエラーは今までで一番やっかいなエラーだったと言っていいと思います。
ですが、途中で諦めたりしなかったのは皆さんのアドバイスのおかげです。本当にありがとうございました!
これからもご迷惑をおかけすると思いますが、よろしくお願い致します!
とりあえず、本当に倒れそうなのでちょっと休みます。。。。
1,574ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(56,045ポイント)
Date: 2010/08/18(水) 16:31
No:59357
|
|
Title: Re:アーカイブファイル内のCSVデータ読み込みについて
|
|
>>palladiumさん。
はい。よろしくお願いします^^
char型を使ってしまっていたので、BYTE型を使うようにします。
以前から気にはしていたんですけどね;
ありがとうございます。
7ポイント を手に入れた。
|
|
|
|
Name: テラ ..ぴよぴよ(404ポイント)
Date: 2010/08/17(火) 20:30
No:59211
|
|
Title: extern宣言を使用したときの二次元配列
|
|
はじめまして、テラといいます。早速ですが本題を。
ヘッダファイル内で extern int a[2][2]; と宣言したあとで、
ソースファイル内で a[2][2] = { {1,0},{0,1} }; のように初期値を入力したところ、
最初の { で「式が必要です」というエラーが出てしまいます。
自分としては、これを使用してマップ上で進行の可否のデータを一箇所のソースファイルにまとめたいと思っています。
そのため、上記のエラーが直ればマップ作成に移動できると思いますので、どなたかご教授願います・・・!
203ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(157,024ポイント)
Date: 2010/08/17(火) 23:29
No:59273
|
|
Title: Re:extern宣言を使用したときの二次元配列
|
|
> ソースファイル内で a[2][2] = { {1,0},{0,1} }; のように初期値を入力したところ、
その行の前後何行かを含めて、実際に書いたソースコードを示してください。

33ポイント を手に入れた。
|
|
|
|
|
Name: テラ ..ぴよぴよ(384ポイント)
Date: 2010/08/18(水) 08:27
No:59314
|
|
Title: Re:extern宣言を使用したときの二次元配列
|
|
>シエルさん
回答ありがとうございます。
マップ作成のソースの中で変数宣言してみます。
>BOXさん
以下がそのソースコードです。
#include "global.h"
void first_initialize(){
player.x = 320;
player.y = 160;
player.type = 0;
player.move = 0;
map_isMove[2][2] = {1,0},{0,1} };
}
global.h 内で map_isMove[2][2] が int型で extern宣言されています。
また、その上の構造体に関しては、同様に global.h 内で構造体を宣言しているヘッダファイルをインクルードしています。

20ポイント を落としてしまった。
|
|
|
|
|
Name: へろり ..プログラマー(29,882ポイント)
Date: 2010/08/18(水) 11:34
No:59334
|
|
Title: Re:extern宣言を使用したときの二次元配列
|
|
[]が配列としての意味を持つのは宣言の時のみです。
式中に現れた場合は添え字演算子となりポインタ演算のシンタックスシュガーに過ぎません。
したがって、map_isMove[2][2] = {1,0},{0,1} }; というコードは
*(*(map_isMove+ 2) + 2) = {1,0},{0,1} }; というコードと全くの等価です。
*(*(map_isMove+ 2) + 2)の型は
>extern int a[2][2]; と宣言したあとで
ということですから、int 型です。 配列型ではありません。
map_isMove[0][0] = 1;
map_isMove[0][1] = 0;
という風に個別に初期化する必要があります。
もしくは
static const int Hoge[2][2] = {{1,0},{0,1}};
とでもしておいて、
memcpy() あたりで一括にコピーしてしまうかですね。
312ポイント を手に入れた。
|
|
|
|
|
Name: テラ ..ぴよぴよ(406ポイント)
Date: 2010/08/18(水) 15:47
No:59352
| 解決!
|
Title: Re:extern宣言を使用したときの二次元配列
|
|
>へろりさん
回答ありがとうございます。
extern宣言したあとでは、配列型にはならないということですね・・・。
もうちょっと工夫して、マップ作成しやすい方法を考えてみます。 
49ポイント を落としてしまった。
|
|
|
|
Name: 門番 ..ぴよぴよ(135ポイント)
Date: 2010/08/17(火) 18:54
No:59199
|
|
Title: C言語を学びたい
|
|
初めまして。
今、何かと創作意欲に駆られまして、
C言語を学んでいろいろやってみたいと思っています。
最終的には東方みたいなSTGを作ってみたいとは思うのですが、
C言語については初心者で無知なため
もっと簡単なものから始めようかと思っています。
ですが、いまいち何から学び始めればいいのかわかりません。
ですので、みなさんはどういったことから始めていって、
最初に作ったものは何かとか参考にさせていただきたいのです。
ご回答よろしくお願いします。
135ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(53,062ポイント)
Date: 2010/08/17(火) 19:05
No:59203
|
|
Title: Re:C言語を学びたい
|
|
とりあえずゲームプログラミングの館http://dixq.net/g/を一通り読んで、
ゲームというのはどういうものかを学びました。
C言語の知識がどれぐらいあるかわかりませんが、基本は学んでおいてください。
最初に作ったものというか、現在作成中ですがシューティングゲームを作っています。
これが初作品の予定です。
94ポイント を手に入れた。
|
|
|
|
|
Name: ライス ..初心者(7,258ポイント)
Date: 2010/08/18(水) 00:24
No:59288
|
|
Title: Re:C言語を学びたい
|
|
シエルさんと同じですね^^
また、基礎を学んでおられないのでしたら…
<苦しんで覚えるC言語>
http://9cguide.appspot.com/
が、お勧めです。
参考書などを買う場合は…
<Cの絵本>
http://books.ank.co.jp/books/2002/c_ehon.html
が、お勧めです。
Cの絵本は初心者を対象としているので、
さらに学習する場合は別の参考書が必要になりますね^^;
でも、実際はサイトだけでも十分学べると思います。
また、上記に記したのは一例なので自分に合うものを探してみてください。
「C言語 入門」検索すれば山ほどありますよ^^
しかし、一番はゲームプログラミングの館ですね。
やってみるとわかりますが、楽しくて仕方がないですよ^^
この掲示板を活用するのもいいですよ。
しかし掲示板に頼りすぎるのではなく、
自分で努力してみてダメだったら掲示板で質問するのが良いと思います。
2倍のポイントを手に入れた! 344ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(64,389ポイント)
Date: 2010/08/18(水) 01:41
No:59298
|
|
Title: Re:C言語を学びたい
|
|
ほかのお二方もおっしゃっているように、まずは基礎が大事だと思います。
門番さんのレベルがどれほどなのか分からないのであれですが、
まだ触ったこともないぜ!っていうレベルでしたら、
参考書などを読みながら勉強してみてください。
それと、個人的には一番重要だと思っていることなのですが、
コンパイラをインストールして、実際にご自身でプログラムを打ち込んで実行する・・・
ということを心がけてみてはいかがでしょうか?
最初のうちは参考書に載っているプログラムのまる写しでもかまいません。
慣れてきたら、そのプログラムを改造したり、1から自分で書いてみたりするといいと思います。
実際にプログラムを書いていると、打ち間違いなどによるコンパイルエラーが起きると思います。
簡単かつ小さなプログラムを書いて、(本意じゃないにしても)エラーを見る・・・
っていうのもいい勉強になると思います。
数学や英語でも同じです。
小難しい公式を覚えたり、英単語や文法を覚えただけでは
実際に使える(使いこなす)ことはほぼ無理でしょう。
実際にそれらを使い、慣れることで覚え、習得していくものだと思っています。
もしプログラムを実行できる環境がないのでしたら、ぜひコンパイルを導入して
実際にプログラムを書いて実行するような勉強をしてみてください。
244ポイント を手に入れた。
|
|
|
|
|
Name: ぜらーちん ..初心者(7,345ポイント)
Date: 2010/08/18(水) 08:58
No:59319
|
|
Title: Re:C言語を学びたい
|
|
開発環境として
C/C++をVC++で学ぶのであれば個人的にVC++2008をオススメします。
メリット
インテリセンス有効
デメリット
インテリセンス無効
重い
メリット・デメリットはまだまだあるのですが、個人的にはインテリセンスの有無ですかね
構造体とか、classやらなにやら使うときに
TextBox->Text
とか、書く場合があるのですが
2008までですと、->の先の候補を表示してくれるのですが、2010だと表示してくれません。
その他にも色々あるようですので、取り敢えずは2008がいいと思います。
219ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(791ポイント)
Date: 2010/08/18(水) 15:41
No:59351
|
|
Title: Re:C言語を学びたい
|
|
情報系の大学でプログラムを学んでいるものです
既出ですが初心者なら開発環境ならVC++2008がおすすめですよ
インストールのしやすさ、設定のしやすさ、使いやすさ、わかりやすさが良いです
上に書かれている事意外にお勧めする理由を
(OS等に詳しいのであればプログラムはFedoraなどのLinux系でEmacsとgccでという人が多いでしょうが、Linuxはゲーム作成には向いてません)
VC++2010は新しいので参考サイトが少ないです
プログラムを勉強する際にサイトとかへ行けば大体ここをこーしろとか画像があるのですが、VC++2010は最近出たので、その画像が古い(VC++2008やVC++2005)場合が多いです
あまり慣れてないうちにこれはキツイかと思います
VC++2008は<Microsoft Visual Studio Express>で検索して一番上に出てくる公式サイトの一番下の<清貧情報>の<過去のバージョン>からダウンロードできます
ライスさんのおっしゃる<苦しんで覚えるC言語>というサイトは有名ですし勉強には良いですよ
自分も度々お世話になりました
ただ最初は一冊ほど手元に参考書があれば便利です
自分でメモしたり、わかり辛かったところには付箋など勉強のしやすさがのサイトとは違います
プログラムの本は3000円近くと結構高い目ですが、お金に余裕があるのならサイトを参考に一冊は本があればC言語への理解する速度が違うと思います
お勧めの本というのは、人によって理解の仕方が違うと思いますので本屋で立ち読みしてみるのが一番だと思います
ちなみに自分は<猫でもわかるC言語>という本ではじめました
こいつはほんとに初めての人にはあまりお勧めはしません
あと最初に作ったアプリケーションは画像の分割、結合、回転、色の調整、色々なフィルタを掛けたりヒストグラムを求めるなどの画像処理用のプログラムでした
最後に、ゲームの開発-特にSTGに大事なのはプログラマのアイデアです
PCのスペックが上がってきている今では、個人でのゲーム製作ではあまり綺麗なプログラムである必要は無いと思ってます
ですので基礎さえしっかり勉強すれば<ゲームプログラミングの館>を見ながらで作りたいものは大抵なんとかなります
長文失礼しました
がんばってください
701ポイント を手に入れた。
|
|
|
|
|
Name: 門番
Date: 2010/08/21(土) 21:22
No:591991282393329
| 解決!
|
Title: Re:C言語を学びたい
|
|
返信遅くなってすみません・・・。
シエル様、ライス様、s-rush様、ぜらーちん様、438番様、
みなさまご丁寧かつ詳しい返信ありがとうございます!!
皆様のご回答を基にがんばります!
ありがとうございました!!
|
|
|
|
Name: 未来のプログラマー ..かけだし(2,331ポイント)
Date: 2010/08/17(火) 13:41
No:59158
|
|
Title: Cの学習と生活習慣
|
|
私は毎日のようにこのサイトに訪れていますが
母は「パソコンばっかりはだめ」といってきます、
確かに夏休みの宿題や、身の回り、社会の基本
とかも必要かもしれません。
そこで皆さんに聞きたいのですが
将来のためにC言語とかを学ぶのが優先するか
社会人の基礎「夏休みの宿題や、身の回り、社会の基本」
をするかどっちですか?
確かにやること「宿題等」をしたらパソコンを
するということも大事かもしれませんが・・・
2倍のポイントを手に入れた! 328ポイント を手に入れた。
|
|
|
|
Name: しろ ..初心者(5,556ポイント)
Date: 2010/08/17(火) 13:58
No:59163
|
|
Title: Re:Cの学習と生活習慣
|
|
何歳でしょうか? 中学生くらい?
あなたのおっしゃる「社会の基本」というのが抽象的ですので、具体的に指しているのかよくわかりませんが、
夏休みの宿題くらいはきちんとやりましょう。別にPCはそれからでもいいです。
92ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(197,359ポイント)
Date: 2010/08/17(火) 14:38
No:59167
|
|
Title: Re:Cの学習と生活習慣
|
|
将来的なことを考えるなら
・やることをやらないとパソコンを取り上げれる
・C言語を使うための基本的な知識(学校の授業内容)を得られないため、プログラマーになれなくなる。
・プログラマーとして社会性は重要です。コミニケーション力やリーダーシップを学びましょう。
・体を鍛える(体力つける)ないとプログラマーの労働に耐えられません。学生時代はマラソンなど持久力を付けることを優先しましょう。
と言うことで、最低限のことはこなしてください。
パソコンは依存性があるのでその心配をされている可能性もありますので、他のこともして大丈夫だよとアピールを。楽しくて仕方が無いのでやりたいのは分かりますが。
198ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..比類無きプログラマー(85,398ポイント)
Date: 2010/08/17(火) 14:43
No:59168
|
|
Title: Re:Cの学習と生活習慣
|
|
> 社会人の基礎「夏休みの宿題や、身の回り、社会の基本」
間違いなくこっちです。
C言語がいくらできても社会人の基礎がないと、C言語を生かす前に会社に入れません。
基本的に仕事で使うようなスキルは会社に入ってから教えてくれますが、その逆はありえないからです。
あと、仕事で即戦力で使えるほどのスキルを学生時代に身につけるのはほぼ無理です。
(どの系統のソフトをするかにもよってきますが)
28ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..上級者(24,959ポイント)
Date: 2010/08/17(火) 15:28
No:59170
|
|
Title: Re:Cの学習と生活習慣
|
|
僕は高二なんで朝8時半から五時ぐらいまで勉強して、二時から三時くらいまでゲーム作ってます。
まぁ今割と修羅場なんでこんな生活ですが(もっと早く寝たい、、、)勉強しつつプログラムやら何やらをするのも十分可能だと思います。
58ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,252,419ポイント)
Date: 2010/08/17(火) 15:33
No:59171
|
|
Title: Re:Cの学習と生活習慣
|
|
間違いなく後者でしょう。
やはり中学高校は一般教養を付ける、運動クラブで精一杯青春の汗を流すというのが一番でしょう。専門知識は大学に入ってからでも付きます。
パソコンは何歳になっても出来ますが、クラスの友達と大切な時間を過ごしたり、大学受験の勉強したりは今しか出来ませんよ。
子供の時は子供時代にしか出来ない事を精一杯やるのが良いですねb
6ポイント を手に入れた。
|
|
|
|
|
Name: 未来のプログラマー ..かけだし(2,393ポイント)
Date: 2010/08/17(火) 16:23
No:59175
| 解決!
|
Title: Re:Cの学習と生活習慣
|
|
そうですね皆さんの意見は全員同じですね。
まだ後者夏休みの宿題や、身の回り、社会の基本
の方をやり遂げてないので、そちらにします
管理人さんまでわざわざありがとうございます
62ポイント を手に入れた。
|
|
|
|
Name: ネコイカ ..ぴよぴよ(88ポイント)
Date: 2010/08/18(水) 13:26
No:59341
|
|
Title: 配列とポインタ
|
|
参考書を読んでて次のことがわからなくて質問させていただきます
>配列添え字演算子はポインタに関しても適用できそうな気がしますね。
>結論的にいうと使えます。次の3つは同じなのです
>&str[n]
>pstr+n
>&pstr[n]
配列添え字演算子はポインタに関しても適用できる、とはどういうことでしょうか?
&pstr[n]これのpは何を表しているんだ??
あと、
int *p,a[]={10,20,30,40}
p=a
では、p=&aじゃないのはなぜですか
88ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..ハッカー(219,994ポイント)
Date: 2010/08/18(水) 13:35
No:59342
|
|
Title: Re:配列とポインタ
|
|
> 配列添え字演算子はポインタに関しても適用できる、とはどういうことでしょうか?
ポインタに関しても適用できるのではなく、添字演算子のオペランドは、オブジェクト型へのポインタと整数型でなければなりません。
配列型の変数名は、暗黙的に、その配列の先頭要素へのポインタに変換されます。
結果として、配列の変数名を指定しても、ポインタを指定したのと同じになります。
> &pstr[n]これのpは何を表しているんだ??
名前の一部なので、正確なことはその名前を考えた人に聞くしかありません。
ただ、pointer の p を表す一種のハンガリアン記法だとは思います。
> では、p=&aじゃないのはなぜですか
繰り返しになりますが、配列型の変数名は、暗黙的に、その配列の先頭要素へのポインタに変換されます。
つまり、今回の例でいえば、a は &a[0] に変換されるわけです。
一方、&a と書いた場合、その型は int* ではなく、int(*)[4] になります。
228ポイント を手に入れた。
|
|
|
|
|
Name: ネコイカ ..ぴよぴよ(143ポイント)
Date: 2010/08/18(水) 14:16
No:59344
|
|
Title: Re:配列とポインタ
|
|
回答ありがとうございます。
>一方、&a と書いた場合、その型は int* ではなく、int(*)[4] になります。
すみません。どういう意味か教えてください。
55ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..熟練のプログラマー(51,440ポイント)
Date: 2010/08/18(水) 02:31
No:59303
|
|
Title: 設定
|
|
DXライブラリ VisualC++用(Ver3.03)をダウンロードする(自己解凍形式(約11.00MB))
↑これをダウンロードしてDxLib VC2010用を開いてDxLib_VC2010Microsoft Visual Vasic Expressが出て来て、ファイルの新しいプロジェクトのインストールされたテンプレートのところに『VisualC++』→『Win32』←これがなかったのですがなぜですか。
後、DxLib_VC2010Microsoft Visual Vasic Expressの画面の右のソリューションエクスプローラのところにDxLib_VC2010(利用不能)と出るんですがこれは関係ありますか?
207ポイント を手に入れた。
|
|
|
|
Name: fatens ..上級者(17,722ポイント)
Date: 2010/08/18(水) 08:41
No:59318
|
|
Title: Re:設定
|
|
>DxLib_VC2010Microsoft Visual Vasic Express
もしかしてMicrosoft Visual Basic 2010 Expressを使用されているのでしょうか。
C, C++で開発するためには、これではなくMicrosoft Visual C++ 2010 Expressを使います。
61ポイント を落としてしまった。
|
|
|
|
|
Name: 初心者 ..熟練のプログラマー(51,480ポイント)
Date: 2010/08/18(水) 09:22
No:59321
|
|
Title: Re:設定
|
|
家のパソコンのOSはVistaです。
Microsoft Visual C++ 2010 Expressはどうやったら開くのですか?
教えてください。お願いします。
40ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(54,430ポイント)
Date: 2010/08/18(水) 10:04
No:59326
|
|
Title: Re:設定
|
|
まずvisualc++2010はインストールされているのですか?
されているのであれば、ソリューションファイルの関連付けがおかしいかもしれません。
ソリューションファイルの関連付けをvisual c++2010へ変更してください。
67ポイント を手に入れた。
|
|
|
|
|
Name: ぬるぽ ..初心者(7,646ポイント)
Date: 2010/08/18(水) 07:00
No:59311
|
|
Title: Re:画像の表示
|
|
ちょっとおっしゃってることに関しまして不明な点が多すぎるので
よろしければこちらのテンプレを使って、詳しく教えていただけたらうれしいです。
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
コピペ用
[1] 質問文
[1.1]
[1.2]
[1.3]
[1.4]
[2] 環境
[2.1]
[2.2]
[3] その他
・
・ライブラリ:
299ポイント を手に入れた。
|
|
|
|
Name: DG [URL] ..入門者(2,743ポイント)
Date: 2010/08/18(水) 03:18
No:59304
|
|
Title: 自作ソフトへのセキュリティ対策ソフトからの警告
|
|
自作のソフトを起動すると添付画像のように、ウイルスバスター2010から警告が出てしまいます。
環境は、Windows Vista 32bit VC++EE2008 DXライブラリ使用 です。
「InternetExplorerの設定を変更」と出ているのですがそんなことに関わるようなことはしていない
はずなんですが・・・
DXライブラリの本家の簡単なサンプルプログラムを実行しても同様に警告が出ます.
いろいろやってみたところ、DXライブラリを使うとこの警告がでるように思えてきたのですが、
どうなのでしょう?
156ポイント を手に入れた。
|
|
|
Name: ヒロ ..入門者(4,042ポイント)
Date: 2010/08/17(火) 21:16
No:59219
|
|
Title: C言語の仕様について
|
|
10年ぐらい前に学校でC言語を習っていました。
そして、就職を目指すべくC言語をまた新たに習いに行くつもりです。
学習はしたものの10年間何もプログラムを打っていなかったからです。
そして、今現在C言語を学ぼうとして学校に行っています。
そこで購入した本が「これならわかる C 入門の入門 坂下夕里」著 SE SHOEISHA
表紙の黄色のラインが特徴です。
この本を読んでいると。。。。
#include <stdio.h>
と
return 0;
は必ず書かなければいけないとありました。
この下記のプログラムですが、エラーは出ないのですが
実行するとすぐに消えてしまい、結局どういう出力になったのか
確認できませんでした。
#include <stdio.h>
main(){
int i,j,k;
for(i=1;i<=20;i++)
{
for(j=19;j>=i;j--)
printf(" ");
for(k=1;k<=i;k++)
printf("* ");
printf("\n");
return 0;
}
}
-----------------------------------
それに対して、
#include <stdio.h>
と
return 0;
をはずした場合、出力がしっかり確認できました。
main(){
int i,j,k;
for(i=1;i<=20;i++)
{
for(j=19;j>=i;j--)
printf(" ");
for(k=1;k<=i;k++)
printf("* ");
printf("\n");
}
}
これは著者がどういう思いでこのような事を言っているのでしょうか?
それともこの10年でコンパイラの性能が変わったのか、あるいは
仕様が変わったのかどうなのでしょうか?
CコンパイラはBorland C++Compiler 5.5無償
のコンパイラを使っています。
これから学校ではこの本を使って勉強する事になるのですが
皆さんはどのように思われますか?
487ポイント を手に入れた。
|
|
|
|
Name: ヒロ ..初心者(5,952ポイント)
Date: 2010/08/17(火) 21:43
No:59232
|
|
Title: MSNでも相談していることですが
|
|
マルチポストをする時はリンクを張らなければならない規則でしたね。
という事で
http://questionbox.jp.msn.com/qa6104511.html
このMSNの相談箱に相談していることと重なるのですが
NetBeans IDE 6.9でC言語のコンパイラの設定を教えて頂きたいのです。
今ままでずっとJAVAの勉強をNetBeans IDE 6.9でしてきました。
そして新たにC言語を学習することになりました。
よく見るとNetBeans IDE 6.9でC言語が使えるという事が書かれていたので
コンパイラの設定をしていたのですがどうしてもうまくいきません。
今までNetBeans IDE 6.9を使ってきたのでどうしてもこのソフトでプログラムを打ってみたいのです。
Borland C++Compiler 5.5無償や
下記のアドレスの説明のコンパイラ【MinGW-5.1.6】や【Cygwin】
のコンパイラをダウンロードし設定しました。
http://netbeans.org/community/releases/69/cpp-setup-instructions.html
もちろん、書かれてあるとおり、この2つのコンパイラは別々のフォルダに保存しました。
c:\の直下に保存しています。
しかし、何度やってみてもエラーが出てしまいます。
そのエラーとは。。。。。
ダイヤボックスのタイトルが【C/C++コンパイラが見つかりません】です。
内容は
システム上に適切なコンパイラが見つかりませんでした。
IDEが正しく動作するためには、一連の適切なコンパイラとその他の構築ツールが
必要です。
すでにシステムにコンパイラがあるが見つからない場合、次のいずれかを行います。
1)IDEを終了して、コンパイラをPATH環境変数に追加し、IDEを再起動します。
2)「ツール」>「オプション」>「構築ツール」ダイアログを開き、設定にコ
ンパイラを追加します。
システムにコンパイラがない場合、次を行います:
3)一連の適切なコンパイラをダウンロードしてインストールし、
IDEを再起動します。
構築環境のインストールおよび構成についての詳細は、http://netbeans.
org/community/releases/69/cpp-setup-instructions.html
を参照してください。
ちなみに1)は出来たと思います。
次に2)をやってみたのですが
「ベースディレクトリ内のコンパイラのみ使用可能です。」
というエラーが出ます。
どのように設定すればNetBeans IDE 6.9でC言語が使えるようになるのか教えてください。
本当に困っています。学校の授業に備えたいのです。
【相手が質問してくれた文面です】
環境設定の中にある、C/C++の項目を選択すると、
コンパイラやMakeコマンドをパス指定できる箇所がありますが、
そこには正しくパス指定されていますか?
【その答えを以下に書きました】
まず、使用しているOSがVISTAなので、NetBeans IDE 6.9のショーカットから特権レベルで
「管理者としてプログラムを実行する」にチェックを要れ実行しました。
【してもしなくても結果は同じでした】 何も設定されていませんでした。
makeコマンドに「C:\msys\1.0\bin\make.exe」と指定しました。
そして【了解】をクリックして一旦閉じました。しかし、再度開いてみると、初期の状態に戻っていて
全てが空白になっていました。
Cコンパイラ、C++コンパイラ、Fortranコンパイラ、makeコマンド、デバッカコマンド、
qmakeコマンド、cmakeコマンド
これらの項目に何を指定していいのか全くわかりません。
どういう手順で、NetBeans IDE 6.9でC言語を使える状態に出来るのでしょうか?
本当に困っているのでよろしくお願いいたしますペコリ(o*。_。)oペコッ
2倍のポイントを手に入れた! 1,910ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..プログラマー(33,787ポイント)
Date: 2010/08/17(火) 21:47
No:59233
|
|
Title: Re:C言語の仕様について
|
|
return 0の場所が・・・
#include <stdio.h>
main(){
int i,j,k;
for(i=1;i<=20;i++)
{
for(j=19;j>=i;j--)
printf(" ");
for(k=1;k<=i;k++)
printf("* ");
printf("\n");
//return 0;
}
return 0;
}
これならどうですか?
元のプログラムだとループの途中でプログラムが終了してしまいます。
===============
#include <stdio.h>
これはstdio.hで定義しているものを使うためではないでしょうか?
NULLとか…
ヘッダファイルとかいうものだと思うのですが…[.h]って書いてますし…
return 0については、
関数の戻り値について勉強していれば「こんなものなのかな?」ぐらいには多分わかると思います。
私も少し不安ですが…

2倍のポイントを手に入れた! 72ポイント を手に入れた。
|
|
|
|
|
Name: yoko ..初心者(7,683ポイント)
Date: 2010/08/17(火) 21:53
No:59235
|
|
Title: Re:C言語の仕様について
|
|
#include <stdio.h>
を書かなければ通常は文字は表示できないのですが・・・
return 0;に関して、
return 0;
の位置が間違っているために正しく結果が出ないのでは?
return 0;
}
を
}
return 0;
に変更すれば正しく動きます。
本が間違っているのではなく、あなたの写し間違いでは?
写し間違いであればその本で勉強しても差し支えないと思います。
写し間違えでなくとも、それくらいの間違いであれば学校の先生が
間違いに気づくと思いますので、問題ないと思います。
187ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(219,605ポイント)
Date: 2010/08/17(火) 22:37
No:59243
|
|
Title: Re:C言語の仕様について
|
|
> #include <stdio.h>
> を書かなければ通常は文字は表示できないのですが・・・
そんなことはありません。
int main(void)
{
puts("hello");
}
で、(警告が出たとしても)文字列を出力できるはずです。
必ず、<stdio.h>をインクルードしないといけないのは、FILE型やfpos_t型を使う場合、stdoutやSEEK_SETなどのマクロを使う場合だけです。
printfなど、可変個の実引数を受け取る関数は、関数原型が必須ですので、関数宣言無しで呼び出すことはできませんが、
int printf(const char*, ...);
と、自分で宣言すればよいので、必ずしも<stdio.h>をインクルードする必要はありません。
209ポイント を手に入れた。
|
|
|
|
|
Name: ヒロ ..初心者(6,184ポイント)
Date: 2010/08/17(火) 23:23
No:59264
|
|
Title: Re:C言語の仕様について
|
|
いろいろアドバイスを頂いて本当にありがとうございます。(*^-^*)
知らない事実だったので、少し、戸惑っていますが。。。
それで、自分でも、いろいろ試してみたのですが、一つ判ったことがあります。
Borland C++Compiler 5.5無償を使うと
#incledeやreturn 0;
を書かなければコンパイル時に失敗しますが、
開発ソフトによっては書かなくてもよいのかな?と思いました。
http://9cguide.appspot.com/p_9cide.html
上記のHPのソフトでは書かなくてもそのままコンパイルと実行ができました。
この項目とは違いますが、上記の
Date: 2010/08/17(火) 21:43 No:59232
Title: MSNでも相談していることですが の事も教えて頂けると大変嬉しいです。
NetBeans IDE 6.9でC言語のコンパイラの設定を教えて頂きたいと思っております。
ご存知の方がいればよろしくお願いいたしますペコリ(o_ _)o))
232ポイント を手に入れた。
|
|
|
|
Name: REN ..ぴよぴよ(53ポイント)
Date: 2010/08/17(火) 16:25
No:59176
|
|
Title: 動く画像について
|
|
始めましてRENと言います。早速ですが、本題に入ります。
龍神録さんでDL出来る弾幕ゲームとかの自機キャラ画像って動いてますよね?その動くのってただ単にGIFアニメで画像作って〜という風じゃ駄目なんでしょうか?あと、なんで1つの画像の中にいろんなモーション画像が入っていてるんでしょう?(下手ですが、絵のやつみたいに) それって1つの画像だから普通表示するとその画像がパッと表示されるだけなはずなのに、中の画像ひとつひとつがアニメーションになるのが不思議です。名前もつけれないのに、どうやって判別してるんでしょうか? 分かりにくくてすみません・・・。
53ポイント を手に入れた。
|
|
|
|
Name: 紅葉 ..上級者(16,461ポイント)
Date: 2010/08/17(火) 16:34
No:59178
|
|
Title: Re:動く画像について
|
|
単純にGIFを読み込むのが大変だからです。
それに1枚の画像ファイルに複数の素材を入れると画像の管理が楽だからです。
アニメーションについては
画像を分割して(素材ごとに)変数に読み込んで
フレームごとに違う画像を出しています。
1秒間で60フレーム回ってるとします。
3秒間180フレーム回りますよね?
1〜60フレームまでは立ってる絵
61〜120レームまでは攻撃している絵
121〜180レームまでは立ってる絵
って感じで出しわけてます。
わかりにくいですかね・・・?
172ポイント を落としてしまった。
|
|
|
|
|
Name: REN ..ぴよぴよ(162ポイント)
Date: 2010/08/17(火) 16:45
No:59181
|
|
Title: Re:動く画像について
|
|
紅葉さん、回答ありがとうございます。
すごく分かりやすいです!
表示する場所をうまく指定して画面に見せているってことですよね?
ありがとうございます、おかげさまでもやもやしていた部分が消えました。
109ポイント を手に入れた。
|
|
|
|
|
Name: REN ..ぴよぴよ(68ポイント)
Date: 2010/08/17(火) 16:49
No:59182
|
|
Title: Re:動く画像について
|
|
すみません; もうひとつ聞いても良いでしょうか;
アニメーションを付けない場合は、普通に
int ghandle = ("画像があるフォルダ名\\フォルダ名.PNG");
これでも大丈夫ですか?
94ポイント を落としてしまった。
|
|
|
|
|
Name: 紅葉 ..上級者(16,544ポイント)
Date: 2010/08/17(火) 17:06
No:59184
|
|
Title: Re:動く画像について
|
|
問題ないと思いますよ。
ghandle に画像が読み込まれる(正しくは違うのですが)ので
それをDraw系の関数で表示してみて下さい。
PNGが大文字みたいですが小文字のファイルを扱う際は気をつけて下さいね。
83ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..上級者(16,691ポイント)
Date: 2010/08/17(火) 17:14
No:59185
|
|
Title: Re:動く画像について
|
|
即席で作ったので不具合があるかもしれません。
添付したプロジェクトの様な感じで表示します。
ただ複数のアニメーションをつけると画像ファイルが
大量になりわかりにくくなるので1枚にまとめて書いて分割して読み込むことをお勧めします。
DATAフォルダのBMPフォルダに入っている画像を読み込んでおります。
147ポイント を手に入れた。
|
|
|
|
|
Name: REN ..ぴよぴよ(102ポイント)
Date: 2010/08/17(火) 17:14
No:59186
| 解決!
|
Title: Re:動く画像について
|
|
●紅葉さん
はい、小文字大文字注意しますorz
色々教えて下さってありがとうございました^^*
34ポイント を手に入れた。
|
|
|
|
|
Name: REN ..ぴよぴよ(217ポイント)
Date: 2010/08/17(火) 21:49
No:59234
| 解決!
|
Title: Re:動く画像について
|
|
●紅葉様
返信をしている時に紅葉さんの書き込みと
重なってしまい、今気づきました・・・!
親切に教えて下さってありがとうございます!
とても参考になりました!がんばってみます!
●Dixq(管理人)様
おお、本当ですか。無知ですみません;
教えて下さって、ありがとうございます!
115ポイント を手に入れた。
|
|
|
|
Name: master_scar ..ぴよぴよ(22ポイント)
Date: 2010/08/17(火) 20:32
No:59212
|
|
Title: サンプルを使って・・・
|
|
サンプルを使ってちょっとしたRPGを作りたいのですが、サンプルの組み込みを上手くするにはどうすればいいのでしょうか?ヒントをいただけないでしょうか?(m´・ω・`)m回答お願いします!
22ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(53,362ポイント)
Date: 2010/08/17(火) 20:38
No:59216
|
|
Title: Re:サンプルを使って・・・
|
|
サンプルとは何ですか?
>サンプルの組み込みを上手くするにはどうすればいいのでしょうか?
この質問をもう少し具体的にして下さい。
67ポイント を手に入れた。
|
|
|
|
Name: ネス ..初心者(6,295ポイント)
Date: 2010/08/17(火) 20:09
No:59205
|
|
Title: RPG用のマップチップ素材の扱いについて
|
|
皆さん、グッドイブニングでございます。
素材は、一枚の中に、芝生や木や井戸や家の壁面などがまとめられている、よくあるタイプのものだと思います。
ただ実際に使ってみようとすると、なかなか必要な部分だけをくり抜くということができず、ちょっとてこずっている状態です。
例えば、一本の木の部分だけをくり抜こうとしたのですが、近くの雑草みたいなのや、その素材の背景色みたいなのがくっついたままで、形通りに切り抜くとなると、かなり難しい気がしまして。
皆さんは、こういう場合、どのように必要な部分のみ、切り出しているのでしょうか。
プログラミングではなく、編集のお話で恐縮ですが、お手すきの際にでもお知恵をお貸しください。
2倍のポイントを手に入れた! 408ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(53,223ポイント)
Date: 2010/08/17(火) 20:11
No:59207
|
|
Title: Re: RPG用のマップチップ素材の扱いについて
|
|
バックの背景色が1色とか、同じような色ならグラフィックソフトなどで、
うまく透明にできますが、色んな色が混じっていると難しいですね。
グラフィックソフトの切り抜きツールを使って、綺麗に切り取りしかないでしょうね。
82ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(6,403ポイント)
Date: 2010/08/17(火) 20:20
No:59209
|
|
Title: Re: RPG用のマップチップ素材の扱いについて
|
|
シエルさん、レスありがとうございます。
試しにJtrimというソフトで「透過」という機能を探すとありました。
他の部分だけモノクロみたいな模様になって、これが透過画像の正式な作り方なのかは分かりませんが、一応の成功になりました。
108ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(6,579ポイント)
Date: 2010/08/17(火) 20:34
No:59213
|
|
Title: Re: RPG用のマップチップ素材の扱いについて
|
|
はい、ありがとうございます、おかげざまでできました。
さっきまで「うわ〜素材は良いの見つかったけど、コレ、どうしよう」と思っていたのに、「透過」というキーワードを与えてもらえたおかげで、こんなにも一気に前進できました。
また、普段は気にしてないけれども、改めて画像編集ソフトの偉大さを知ったと言うか、何がどうなっているのかは知りませんが、「おおっ!!」と軽く声に出して感動しました。
シエルさん、ありがとうございました。
ちなみに、皆さんにとっては既に常識なのかもしれませんが、チップ素材を一度リサイズで大きくしてから切り抜きなどすると、自分の場合、ひじょうにスムーズに行きました。もし、私と同じような問題でつまづいている方おられましたら、参考になれば幸いです。
176ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(6,589ポイント)
Date: 2010/08/17(火) 20:35
No:59214
| 解決!
|
Title: Re: RPG用のマップチップ素材の扱いについて
|
|
あ、忘れていました、これで解決です。
10ポイント を手に入れた。
|
|
|
|
Name: 花月 ..ぴよぴよ(91ポイント)
Date: 2010/08/17(火) 09:56
No:59139
|
|
Title: externを使わないで変数を共有する
|
|
ソースファイルが2枚ある時はexternを使って変数をやり取りしますよね?
これをexternを使わないで変数を共有することって出来ないでしょうか?
Aのソースで値が変更されたらBのソースでもその変数に影響を及ぼしたいです。
この様な事はC言語では出来ないのでしょうか?
91ポイント を手に入れた。
|
|
|
|
Name: 花月 ..ぴよぴよ(200ポイント)
Date: 2010/08/17(火) 18:58
No:59201
|
|
Title: Re:externを使わないで変数を共有する
|
|
引数ですか・・・なるほど・・・。
参考になりました。
externはあまり使わない方がいいと聞いた(スパゲティプログラムになりやすい)のであまり使いたくなかったんです。
流用が利くような関数を作れるように頑張ります。
109ポイント を手に入れた。
|
|
|
|
Name: ネス ..初心者(5,679ポイント)
Date: 2010/08/15(日) 17:44
No:59025
|
|
Title: CheckHitKeyの待ち処理について
|
|
入門編、以下のページの内容についてご教授よろしくお願いします。
>http://dixq.net/g/10.html
CheckHitKeyでエンターキーを取得するプログラムですが、whileループの中身が、結局のところ何の処理を繰り返しているのかが分かりません。プログラムを実行してみると、エンターキー以外では、画面はまったく反応していないように見えます。ただ、エンター以外の入力でも、画面上に、「ENTERキーを押すと終了します」という文章は表示され続けています。whileの条件文は、「==0」なので、「エンターが押されていないなら、カッコ内の処理を繰り返す」というふうに私は解釈してしまっているのですが、カッコ内の処理は、ProcessMessage()というエラー処理のみで、結局、いったい何が繰り返されているのか、あるいは、どうして文章の表示のままで「停められているのか」ピンと来ません。
例えば、 DrawString( 230 , 240 , "ENTERキーを押すと終了します。" , White );の部分が、whileの処理のカッコ内に書かれているのなら、「エンターが押されるまで、この文章は表示されるんだな」と分かるのですが、ここではwhileの手前で既に書かれていますし、私の今の習熟度では、何も処理の書かれていないwhile文というふうにしか捉えることができず、いったい何が繰り返されているのか、また、なんで何も処理がないのに繰り返されているのか、分かりません。
「いや、これはただ待っているだけだから、これでいいのだ」と考えれば、分かったようなつもりにはなれるのですが、エラー処理は別とすれば、何もwhileの中には処理がないように思え、C言語の入門も間もない私にはちょっと不思議に見えたのです。それともやはり、「処理がなくても条件文はあるので、これで待ち処理になるんだよ、これから知っといてね」というぐらいの理解でよいのでしょうか。
719ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,251,730ポイント)
Date: 2010/08/15(日) 18:01
No:59026
|
|
Title: Re:CheckHitKeyの待ち処理について
|
|
> ネスさん
こんにちは。
う、注釈間違ってますね;
「while( CheckHitKey( KEY_INPUT_RETURN ) == 0 )」
はエンターが押されていない間ループを意味します。
それから、おっしゃる疑問に付いてですが、
一度書いたものは消すまで表示し続けます。
今回の場合、消すという処理をしていないので、表示し続けます。
13章までのプログラムはゲーム製作中使う機会のないプログラムなので、一度13章まで読んでみてください。
そうすれば疑問は晴れると思います。
104ポイント を手に入れた。
|
|
|
|
|
Name: ネス ..初心者(5,881ポイント)
Date: 2010/08/15(日) 20:11
No:59038
|
|
Title: Re:CheckHitKeyの待ち処理について
|
|
レスありがとうございます。
>一度書いたものは消すまで表示し続けます。
>今回の場合、消すという処理をしていないので、表示し続けます。
なるほど、それで違うキーを押しても表示されていたのですか。
whileカッコの処理部に特に何も書かれていないのは初めてだったので、素朴な疑問を感じたしだいです。
>13章までのプログラムはゲーム製作中使う機会のないプログラムなので、
そうでしたか、では、もうちょっと読み進めてみますね。
202ポイント を手に入れた。
|
|
|
|
Name: 玄米茶 ..ぴよぴよ(80ポイント)
Date: 2010/08/16(月) 15:04
No:59095
|
|
Title: スタート画面の作り方について
|
|
はじめまして、こんにちは。
今回、龍神録様のプログラミングの館様とゲームプログラミングの館様を見ながら
ゲームを作ろうとしているのですが、
スタート画面をつけてみたいなあと思いまして質問立てさせて頂きました!
当方が今年の4月に始めたばかりの超初心者なもので
質問するのもとても申し訳ないのですが・・、
(もっと勉強してから来い!ですみません;)
今、19章の敵の消滅までやってみたのですが、
それにスタート画面(スタートがスペースボタンで終了がエンターキーみたいな簡単なもの)を
付けるには自分でstart.cppを追加してどういったプログラムを組むと良いでしょうか・・?
こんな質問ですみません。もし良かったら教えて下さい。
80ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..プログラマー(33,715ポイント)
Date: 2010/08/16(月) 15:41
No:59100
|
|
Title: Re:スタート画面の作り方について
|
|
ただ単にスペース押すのを待つとかですかね?
while(スペース押してないなら){
ループ
}
ゲーム開始
みたいな感じで、私はよくやります。
ループの中でもしくは条件の中で、キー状態を習得すれば問題なし(のはず)です。
簡単に済ませるならこんなのでもいいと思うのですが…
119ポイント を落としてしまった。
|
|
|
|
|
Name: 玄米茶 ..ぴよぴよ(222ポイント)
Date: 2010/08/17(火) 13:20
No:59152
|
|
Title: Re:スタート画面の作り方について
|
|
>>パコネコさん
はい、売ってるゲームみたいな始まる前にスタート画面が出てきて
各種設定や始める、続きから、みたいな選択画面です。
分かりやすく教えてくださって、ありがとうございます!
>>シエルさん
アドレス貼ってくださり、ありがとうございます!
はいっ、参考に見てみます^^*
142ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,252,508ポイント)
Date: 2010/08/17(火) 15:38
No:59172
|
|
Title: Re:スタート画面の作り方について
|
|
パコネコさん
それはまずくないですか?
どこか特定の部分でループして、制御部に処理が返らないのはまずい気がします。
そのループないにメッセージ処理や画面更新処理は入っていますか?
押すまで待機するなら何か状態フラグを持たせてその変化で処理を分岐させる方が良いように思います。
89ポイント を手に入れた。
|
|
|
|
Name: 猫以下 ..ぴよぴよ(40ポイント)
Date: 2010/08/17(火) 12:16
No:59149
|
|
Title: 猫でもわかるが俺にはわからない
|
|
最近C言語を習い始めたんですが
int main()
ってなぜint型なんでしょうか
char型とか使っているのにmainがint型なんて不思議です
あと、「猫でもわかるC言語プログラミング」に
printf("適当な整数値を入力してください___");
scanf("%d",&a);
printf("変数aに%dが入力されました\n",a);
実行結果
適当な整数値を入力してください___10
変数aに10が入力されました
と書いてあるのですが、変数のアドレスを入力した(つもりになっている?)のに
変数aに10が入力されたことになるのはどうしてでしょうか?
40ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..ハッカー(219,386ポイント)
Date: 2010/08/17(火) 13:39
No:59156
|
|
Title: Re:猫でもわかるが俺にはわからない
|
|
とりあえず、Cでプログラミングするだけなら理由を知る必要はありません。
日本語で「これはペンです」の「は」がなぜ「わ」ではないのかを知らなくても、読み書きができるのと同じです。
雑学的な興味や、もっと深い部分でCを理解したいということであれば、そういってください。
110ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(196,855ポイント)
Date: 2010/08/17(火) 13:40
No:59157
|
|
Title: Re:猫でもわかるが俺にはわからない
|
|
int main() がなぜintである必要があるかは、関数の戻り値に関する理解とC言語の規約に理解が必要です。
始めのうちは、int main()は決まりごとと理解しておいてください。
scanfは、基本的にポインタを渡してそのポインタが指す変数に値を入力する関数です。
なので、
scanf("%d",&a);
変数aのポインタをscanf関数にわたして、入力された数値を変数aに入れて戻ってきます。
これも関数の引数やポインタに関する知識がないとか理解しきれないと思いますので最初は決まりごとと受け取ってください。
243ポイント を手に入れた。
|
|
|
|
|
Name: 猫以下 ..ぴよぴよ(65ポイント)
Date: 2010/08/17(火) 13:54
No:59161
| 解決!
|
Title: Re:猫でもわかるが俺にはわからない
|
|
なるほど、すべてを理解しなくてもいいのですか
scanf関数についても知識不足でした…
少し気が楽になりました
みなさんありがとうございます!
25ポイント を手に入れた。
|
|
|
|
Name: プログラマー ..ぴよぴよ(349ポイント)
Date: 2010/08/15(日) 10:11
No:58989
|
|
Title: アライメント[alignment]に関する難しい質問
|
|
はじめまして
alignmentは具体的な言語に依存しないCPUの問題だと認識していますが、
便宜上ここではC言語の例にして問題の提起をさせていただきたいです。
例えば、よく見かける身ビットマップのC言語での実装例ですけれども、
ほとんどの場合、ファイルヘッダやinfoヘッダの構造体を
(BYTEストリームとして)丸ごとファイルに書き込もうとする実装ですね。
ところが、アライメント関係で構造体のメンバーの間や構造体の後部分必ず隙間(padding)があって、
ごみデータがファイルに書き込まれてしまうばかりでなくて、
sizeofによる取得した構造体のサイズも実際の有効データより大きくて、
ファイルの決まったフォーマットを破れるのではないかという問題ですね。
解説できる方お願いします。
349ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(29,130ポイント)
Date: 2010/08/15(日) 10:33
No:58992
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
うーん、定義済み(変更不可)のファイルフォーマットがあるのに、
構造体を丸ごと書き込もうとかいう実装はありえないと思うのですが。
何が問題なのかよく分からないです。
同一プラットフォームで読み書きするなら、パディングのゴミデータが
悪さするわけでもないし、
異種プラットフォームで読み書きするなら、少なくとも
ファイルフォーマットが厳密に定義されているはずで、
先程も言ったように、丸ごと書き込む実装ってのはあり得ないですし。
147ポイント を手に入れた。
|
|
|
|
|
Name: プログラマー ..ぴよぴよ(705ポイント)
Date: 2010/08/15(日) 19:52
No:59036
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
皆さんご返答有難うございます
例えば、以下は典型的なビットマップを作成するC言語コードですけれども。
ヘッダを構造体としてsizeofでメモリを確保し、ヘッダ中の既定情報を構造体のメンバーとして設定して、
画像データと貫いて、ファイルに一発で書き込むというやり方ですね。
構造体の中にpaddingごみがいっぱいあると同時に、sizeofで確保した構造体のサイズは実際の有用データの合計値より大きいはずですーーーファイルのフォーマットはどうして保持できるのでしょか。
// メモリイメージ用ポインタ設定
lpHead=(LPBITMAPFILEHEADER)lpBufl;
lpInfol=(LPBITMAPINFOHEADER)((LPBYTE)lpBufl+sizeof(BITMAPFILEHEADER));
lpPixell=(LPBYTE)lpBufl+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
// ビットマップのヘッダ作成
lpHead->bfType='M'*256+'B';
lpHead->bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwLength*dwHeight;
lpHead->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
lpInfol->biSize=sizeof(BITMAPINFOHEADER);
lpInfol->biWidth=dwWidth;
lpInfol->biHeight=dwHeight;
lpInfol->biPlanes=1;
lpInfol->biBitCount=24;
// ピクセル列をコピー
CopyMemory(lpPixell,lpPixel,dwLength*dwHeight);
fh=CreateFile(lpszFn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(fh,lpBufl,sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO)+dwLength*dwHeight,&dwSize,NULL);// ヘッダと画像データを全部一気に書き込む;biBitCount==24 の場合、カラーテーブルは領域ない!
CloseHandle(fh);
356ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(195,308ポイント)
Date: 2010/08/15(日) 20:40
No:59043
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
BITMAPFILEHEADERだと
#pragma pack(push, 2)
が無いとマズイでしょうね。
WindowSDKだとちゃんとパディング問題が起きないようになっているはずですよ。
サイズは確認はされたのですか?
もし、14バイトならパティングはちゃんと調整されていると思いますが。
128ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(29,158ポイント)
Date: 2010/08/15(日) 21:30
No:59048
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
> 画像データと貫いて、ファイルに一発で書き込むというやり方ですね。
すみません、やっぱり問題が理解できません。
ファイルに一発で書き込めないことの何が問題なのでしょうか?
16ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(13,616ポイント)
Date: 2010/08/16(月) 00:36
No:59060
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
> 構造体の中にpaddingごみがいっぱいあると同時に、sizeofで確保した構造体のサイズは実際の有用データの合計値より大きいはずですーーーファイルのフォーマットはどうして保持できるのでしょか。
BITMAPFILEHEADER等が定義されているWinGDI.hを見れば分かりますが、隙間ができないようにアラインメントが調整されています。
なのでCPUによってはメンバにアクセスしようとするだけで落ちるでしょう。
その場合該当メンバはバイト単位で読み書きするなどして対応する必要があります。
いまのところWindowsプラットフォームでは落ちるような問題にはなっていないだけですね。
でも例えば32ビットピクセルのビットマップでファイルイメージそのまま読み込んだらピクセルデータ部分のアラインメントがずれて、ピクセルデータに対するDWORDアクセスの速度が低下するようなことはあるでしょう。
221ポイント を手に入れた。
|
|
|
|
|
Name: プログラマー ..かけだし(1,055ポイント)
Date: 2010/08/16(月) 15:15
No:59096
| 解決!
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
皆さん
丁寧なご指導有難うございました。
MSの*.hファイルにできるだけ依存しないようなプログラムを組みたいので、
単独にBTMファイルのヘッダを自分のプログラムに定義したのですけれども(無論BTMファイルの規格に準じて)。
それでもだめで、MSのほうはpragmaも”ひそかに”使っているのですね。
MSにトリックされたような気持ちです(^^)
pragmaって規格もなく、その内容や動きは各社勝手に定義しているでしょ。
ファイルに書き込む内容に関して、
基本は構造体の形で表すのは可笑しいで、禁じるべきだと個人的に考えていますが、どうでしょう。
例えば、ファイルヘッダのフィールド名で先頭からのoffsetを#defineで定義して、
直接そのバッファメモリのアドレスにアクセスすればいいでは、と思います(キャストを利用とか)
350ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(196,154ポイント)
Date: 2010/08/16(月) 15:27
No:59098
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
それでもエンディアン問題があるので、パディングだけが解決しても完全な汎用ではありませんよ。あと、例えdefineとかで定義されてもx86系はアドレス境界(アライメント)例外を起こさないので良いですが、もし68000系のようなアドレス境界(アライメント)例外を起こすCPUの場合は1バイトづつ書き込むしかありません。
他にも色々なCPUがありますので、汎用的な定義は難しいんですよ。
【余談】
何度かC言語でエンディアン記述子が欲しいと思ったことがあります。 
2倍のポイントを手に入れた! 182ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(57,605ポイント)
Date: 2010/08/16(月) 16:08
No:59105
|
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
私も最初にビットマップ扱ったときに構造体のパックを知らずにメンバー単位で読み書きしてたことがありました
wingdi.hでビットマップ用構造体が定義されているのも知りませんでしたから自分で構造体定義を書いてましたし
88ポイント を手に入れた。
|
|
|
|
|
Name: プログラマー ..かけだし(1,100ポイント)
Date: 2010/08/17(火) 02:13
No:59131
| 解決!
|
Title: Re:アライメント[alignment]に関する難しい質問
|
|
また貴重なご意見いただき、ありがとうございます
>何度かC言語でエンディアン記述子が欲しいと思ったことがあります。
なるほど! エンディアンも実にややこしいですね
45ポイント を手に入れた。
|
|
|
|
Name: わかめ ..ぴよぴよ(273ポイント)
Date: 2010/08/13(金) 19:33
No:58900
|
|
Title: 頑固なC++のリンクエラー
|
|
皆さん、お沙汰いたしましております。
VC2008のお話ですけれども、下記のようなリンクエラーが出ました。
WEBで色々調べまして、二日間も費やしましたが原因不明のままです。
いったいどういうわけでしょうか。ご教授お願い致します。
1>MSVCRT.lib(wcrtexe.obj) : error LNK2001: 外部シンボル __imp__InterlockedExchange@8 は未解決です
1>MSVCRT.lib(wcrtexe.obj) : error LNK2001: 外部シンボル __imp__Sleep@4 は未解決です
1>MSVCRT.lib(wcrtexe.obj) : error LNK2001: 外部シンボル __imp__InterlockedCompareExchange@12 は未解決です
1>MSVCRT.lib(gs_report.obj) : error LNK2001: 外部シンボル __imp__TerminateProcess@8 は未解決です
1>MSVCRT.lib(gs_report.obj) : error LNK2001: 外部シンボル __imp__GetCurrentProcess@0 は未解決です
1>MSVCRT.lib(gs_report.obj) : error LNK2001: 外部シンボル __imp__UnhandledExceptionFilter@4 は未解決です
1>MSVCRT.lib(gs_report.obj) : error LNK2001: 外部シンボル __imp__SetUnhandledExceptionFilter@4 は未解決です
1>MSVCRT.lib(unhandld.obj) : error LNK2001: 外部シンボル __imp__SetUnhandledExceptionFilter@4 は未解決です
1>MSVCRT.lib(gs_report.obj) : error LNK2001: 外部シンボル __imp__IsDebuggerPresent@0 は未解決です
1>MSVCRT.lib(gs_support.obj) : error LNK2001: 外部シンボル __imp__QueryPerformanceCounter@4 は未解決です
1>MSVCRT.lib(gs_support.obj) : error LNK2001: 外部シンボル __imp__GetTickCount@0 は未解決です
1>MSVCRT.lib(gs_support.obj) : error LNK2001: 外部シンボル __imp__GetCurrentThreadId@0 は未解決です
1>MSVCRT.lib(gs_support.obj) : error LNK2001: 外部シンボル __imp__GetCurrentProcessId@0 は未解決です
1>MSVCRT.lib(gs_support.obj) : error LNK2001: 外部シンボル __imp__GetSystemTimeAsFileTime@4 "_htonl@4" は未解決です
273ポイント を手に入れた。
|
|
|
|
Name: MNS ..プログラマー(38,705ポイント)
Date: 2010/08/13(金) 19:41
No:58902
|
|
Title: Re:頑固なC++のリンクエラー
|
|
Platform SDKがインストールされていない…とか、
Kernel32.libがインポートされていない…とかでしょうか?
26ポイント を手に入れた。
|
|
|
|
|
Name: わかめ ..ぴよぴよ(412ポイント)
Date: 2010/08/13(金) 20:59
No:58906
|
|
Title: Re:頑固なC++のリンクエラー[「インポート」指定の方法も分かりません ]
|
|
MNS 様
早速のご返答有難うございます。
>Platform SDKがインストールされていない…とか、
これはどう判断すればよろしいでしょうか。
WinXPで、Microsoft SDKsの下に複数の処にKernel32.libが存在します。
>インポートされていない…とかでしょうか?
ごめんなさい!
「インポート」指定の方法も分かりません (汗;;;
またご教授いただければ幸いです
どうぞ宜しくお願い致します
シエル 様
ご返答有難うございます。
何でwindows.h と関係があるのでしょうか?
またご教授いただければ幸いです
どうぞ宜しくお願い致します
139ポイント を手に入れた。
|
|
|
|
|
Name: わかめ ..ぴよぴよ(320ポイント)
Date: 2010/08/13(金) 21:54
No:58910
|
|
Title: Re:頑固なC++のリンクエラー[「インポート」指定の方法も分かりません ]
|
|
たかぎ 様
ご返答有難うございます。
たかぎ様お元気ですか、数年前たびたびお世話になったことあります。
>リンクオプションを誤ってつぶしたということはありませんか?
「リンクオプション」ってどこで設定するのでしょうかせ
なにせ最近ほかの言語もやったりして、頭が結構混乱しています。
どうぞ宜しくお願い致します。
92ポイント を落としてしまった。
|
|
|
|
|
Name: けえぼお ..かけだし(2,255ポイント)
Date: 2010/08/13(金) 23:08
No:58913
|
|
Title: Re:頑固なC++のリンクエラー[「インポート」指定の方法も分かりません ]
|
|
家のVC2008(Professional Edition)もたまに謎のリンカエラーが発生するのですが、
objファイルを削除するとうまくいくことがあります。
試してみてはどうですか?
2倍のポイントを手に入れた! 118ポイント を手に入れた。
|
|
|
|
|
Name: わかめ ..ぴよぴよ(411ポイント)
Date: 2010/08/16(月) 15:21
No:59097
|
|
Title: Re:頑固なC++のリンクエラー[「インポート」指定の方法も分かりません ]
|
|
>Platform SDKがインストールされていない
一つだけお願いしたいですが、このPlatform SDKはどこからもらうのでしょうか。
OSについているのでしょうか、それとも Visual VC Studioについているのでしょうか
ご存知の方いらっしゃいます?
91ポイント を手に入れた。
|
|
|
|
|
Name: わかめ ..ぴよぴよ(359ポイント)
Date: 2010/08/17(火) 02:01
No:59130
| 解決!
|
Title: Re:頑固なC++のリンクエラー[「インポート」指定の方法も分かりません ]
|
|
シェル様
そうかそうか
簡単の方法はありますね!
いろいろありがとうございました
これからも宜しくお願い致します。
52ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,251,626ポイント)
Date: 2010/08/15(日) 13:00
No:59006
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
なるほど・・案外気づかないものですね・・
龍神録を作る時、弾を発射する瞬間、敵の上に変に重なってしまうので、見た目が良くないなと思っていましたが、なるほど、こうやって自然に見せていたんですね。
ぼかすことについては、ぼかす処理をDXライブラリですると難しいので、あらかじめぼかした画像を用意して重ねたほうが早い気がします。
ぼかし画像の上書きレベルを発射直後は非常に強く、次第に弱くして弾をはっきりさせていくとよいと思います。
115ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,066ポイント)
Date: 2010/08/15(日) 15:27
No:59016
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>ぼかすことについては、ぼかす処理をDXライブラリですると難しい〜
やはり、駄目でしょうか。
DirectXを直接触らないと、このレベルは解決できないものですかね……。
29ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(29,570ポイント)
Date: 2010/08/15(日) 16:05
No:59018
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>>ぼかすことについては、ぼかす処理をDXライブラリですると難しい〜
>やはり、駄目でしょうか。
>DirectXを直接触らないと、このレベルは解決できないものですかね……。
DXライブラリでも面倒なだけで、不可能ではないですよ。
DirectXについては分かりませんが、おそらくDXライブラリを利用する場合と手間は変わらないかと。
143ポイント を落としてしまった。
|
|
|
|
|
Name: h2so5 ..ぴよぴよ(694ポイント)
Date: 2010/08/15(日) 17:16
No:59023
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
簡単なぼかしであったらそれほど難しくはないように思いますが。
一応DXライブラリでも、(速度は知りませんが)
画像へのドット単位でのアクセスは可能のようですから。
そもそもYperiaさんは、なぜDXライブラリ側でぼかしをしたいのでしょうか。
使用する弾の画像の種類が多くないのであれば、あらかじめぼかした画像を
用意しておくのがやはり簡単だと思います。
ゲームプログラム側でいちいち作成するのは無駄が多いです。
62ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,252,130ポイント)
Date: 2010/08/15(日) 18:16
No:59028
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
ぼかす場合、例えば周囲のピクセルの輝度から、ある程度の領域の平均を求めればすぐに出来ますので、
アルゴリズムとしては簡単だと思います。
しかし、毎回計算しなければならないので、余計に無駄が多く、STGのように計算量の多いゲームはなるべく計算量を少なくしたいものだと思うので、やはりあらかじめ画像を用意したほうが良いのではないでしょうか。
RPGで戦闘画面に入る瞬間フィールドの映像をキャプチャし、ぼかしたりエフェクトをかけるような場合は、その都度計算する必要があるかもしれませんが、
事前に画像が用意できる場合はなるべくそうした方が良いと思います。
勉強するためにぼかしの練習をしてみたいということであれば、
DXライブラリの関数一覧にある「ドット単位で画像にアクセスしたい関係」の関数を使って画像を変化させると良いでしょう。
画像とは別に同じサイズで変化させた画像を格納する領域を用意しておき、
例えば3x3などのピクセル領域の輝度の平均を一つずつ格納していけばぼかせると思います。
ここで、大きな画像だと非常に計算に時間がかかります。
なるべく高速化を考えたほうが良いでしょう。
ピクセルの平均を計算するような場合、ほとんどの計算が以前行った計算とかぶります。
■■■□□
■■■□□
■■■□□
□■■■□
□■■■□
□■■■□
□□■■■
□□■■■
□□■■■
白い■の部分が計算領域だとすると縦の3つはかなりの確率で計算がかぶります。
また、
147
258
369
の順番で足し算するのと、
123
456
789
の順番で足し算するのは全く計算スピードが違います。
配列が横方向に連続して並んでいることを考えればわかるとおりです。
もし勉強がてらぼかし機能を実装されるときは、このような所も工夫されるとよろしいかと思います。
400ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,400ポイント)
Date: 2010/08/15(日) 20:03
No:59037
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
ご返信ありがとうございます。
やはりプログラム側でやる場合は、ドット単位でアクセスして〜 との話になるのですね。
それは思いついてはいたのですが、Dixqさんも仰る通り、STGでそんなことはしてられません。
かといってZUNさんは東方でどうやっているのかを考えたとき、もしかしたらプログラミングだけでやっているのでは、と思いまして。
画像処理のことがまったく分からないので、DXライブラリにもあります回転や拡大といった処理程度のコストで実現可能なことなのかな、と期待してました。
皆様の仰る通り、ぼかし画像を使ったアニメーションにしたいと思います。
DixqさんのURLも、時間があるときに見たいと思います。
ありがとうございました。
2倍のポイントを手に入れた! 334ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(563,997ポイント)
Date: 2010/08/15(日) 20:39
No:59042
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>プログラム側でやる場合は、ドット単位でアクセスして〜 との話になるのですね
そういうことではありますが、必ずしも自分でピクセル単位でアクセスして作らなければ
ならないかというと、そういうわけではありません。
アルファブレンドで薄くしたものを何度も微妙に座標をずらしながら書き込んでも、
ぼけたような画像を作り出すことはできますし、最新のDXライブラリなら別の方法もあります。
ただ、動画をみる限りではぼかしというほどのものでもなさそうなので、普通にアルファブレンドで
薄くしてバイリニアをかけて拡大表示したものから通常表示への遷移を行うだけで
いいんじゃないかと思いますけど……。
182ポイント を手に入れた。
|
|
|
|
|
Name: yu ..熟練のプログラマー(44,001ポイント)
Date: 2010/08/15(日) 22:23
No:59051
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>> Justyさん
>ただ、動画をみる限りではぼかしというほどのものでもなさそうなので、普通にアルファブレンドで
>薄くしてバイリニアをかけて拡大表示したものから通常表示への遷移を行うだけで
>いいんじゃないかと思いますけど……。
私もそう思いますw
地霊殿は良く見てないので確かなことは言えないですが、
紅魔郷では弾発射の瞬間に拡大してアルファブレンドしてるだけだったはずです。
後、弾発射のときに別の画像を上から重ねていると思います。
160ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,874ポイント)
Date: 2010/08/15(日) 23:03
No:59055
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
> ただ、動画をみる限りではぼかしというほどのものでもなさそうなので、普通にアルファブレンドで
薄くしてバイリニアをかけて拡大表示したものから通常表示への遷移を行うだけで
いいんじゃないかと思いますけど……。
確かに、言われるとそのように見えます……。
>紅魔郷では弾発射の瞬間に拡大してアルファブレンドしてるだけだったはずです。
後、弾発射のときに別の画像を上から重ねていると思います。
更に「地霊殿と星蓮船は同じ処理に見えますけど、紅魔郷のは違うように見える」ということを考えますと、「じゃあ地霊殿&星蓮船は何をしているんだ」って感じになってしまいますね……;;
実際に画像使って確かめてみたいと思いますので、報告は遅くなってしまいそうです。
> アルファブレンドで薄くしたものを何度も微妙に座標をずらしながら書き込んでも、
ぼけたような画像を作り出すことはできます
この程度でも、弾が2000発まで行きますとアウトになると思います。。。
>最新のDXライブラリなら別の方法もあります。
他の方法もあるのですね。
無知で申し訳ありません。
調べて考えて見たいと思います。
474ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(564,256ポイント)
Date: 2010/08/16(月) 00:38
No:59062
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>yuさん
同じような意見で良かったです。
>Yperiaさん
>確かに、言われるとそのように見えます……。
下の動画の最初の方の雑魚敵だと顕著にそう見えますね。
>この程度でも、弾が2000発まで行きますとアウトになると思います
起動時やステージデータロード中などで、空のテクスチャにぼかした画像を事前にレンダリングしておいて
ゲーム中はそれを使いまわせば普通に1回の弾につき1枚のぼかしテクスチャを使用するだけになりますので
まぁ大丈夫かなと思いますけど、さすがに 2000個だとどうなんでしょう……。
>他の方法もあるのですね
具体的にいうとシェーダーが使えるようになっています。
今回は使うことはないでしょうし、ちょっと敷居が高いので現段階ではお勧めはしませんが、
調べてみる分には面白いかと。
247ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(13,532ポイント)
Date: 2010/08/16(月) 01:07
No:59064
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
> ご覧いただくとお分かりになるかと思うのですが、敵キャラが弾を発射した瞬間、その弾がぼけてると思います。
弾が発射される場所に発射エフェクト(半透明の円)が表示されているように見えます。
ボス戦で発射エフェクトが表示されたあとに弾が配置されています。同じ処理だと思います。
エフェクトの色は発射される弾の色と同じのようです。
84ポイント を落としてしまった。
|
|
|
|
|
Name: y ..かけだし(1,311ポイント)
Date: 2010/08/16(月) 02:35
No:59065
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
実は全く複雑なことはされてません。
なぜなら、そんな複雑なことを弾全てにすると、死ぬほど重たくなるからです。
で、具体的にどうしているかというと、添付した画像のような画像を用意しておき、
弾が発射されてから実体化するまでの間に表示させています。
その間、倍率指定で大きくしていた画像をだんだんと、弾と同じくらいの大きさまで小さくし、
アルファブレンドで真透明からだんだんと不透明にしていききます。
東方は、パッと見すごいエフェクトを使ってるように見えたりしますが、実は全然すごくないです。
こう言うと東方を貶してるようにも見えますが、
逆にこんな簡単なことでここまで魅せるのはすごいなと思います。
尚、画像は本家から抜き出したわけではなく、私が似せて作ったものです。
勝手に使っても構いませんが、こういう画像を作ってみるのもまた楽しいものですよ。
オリジナルのエフェクトを作ってみると、作るゲームに愛着が湧いたりします。
※変換ミスがあったので編集させていただきました 
249ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,136ポイント)
Date: 2010/08/16(月) 02:43
No:59066
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
レスありがとうございます。
> 起動時やステージデータロード中などで、空のテクスチャにぼかした画像を事前にレンダリングしておいて
ゲーム中はそれを使いまわせば普通に1回の弾につき1枚のぼかしテクスチャを使用するだけになりますので
なるほど、そういう風にすれば、画像を新たに用意する必要はなくなりますね。
薄いαブレンドを多重に→保存という感じですかね。
>まぁ大丈夫かなと思いますけど、さすがに 2000個だとどうなんでしょう……。
単にDxLib::DrawGraphでしたら、弾の画像次第ですが、(その他の処理も考慮して、)2000がギリギリかなぁという感じです。(普通に処理落ちするレベルですけど)
(東方も2000発以上は出ないようになってますね。)
> 具体的にいうとシェーダーが使えるようになっています。
今回は使うことはないでしょうし、ちょっと敷居が高いので現段階ではお勧めはしませんが、
調べてみる分には面白いかと。
3Dはまったく分からないのですが、本家の真似をするとなると背景で使うことになりますので、今の内に勉強しておくのも良いとは思います。
あまり深く突っ込まないようにしようと思ってますので、弾の方に活かせるかどうかは分かりませんが;;
>弾が発射される場所に発射エフェクト(半透明の円)が表示されているように見えます。
ボス戦で発射エフェクトが表示されたあとに弾が配置されています。同じ処理だと思います。
エフェクトの色は発射される弾の色と同じのようです。
仰るボスは地霊殿(上)の方ですかね。
地霊殿ボスの最初の通常弾幕は、確かに別にエフェクトを使っているように見えます。
しかし、あれだけは特別に用意した何かであるように思えます。(雑魚のとは違うもの)
詳しくは分かりませんが……。。。
738ポイント を落としてしまった。
|
|
|
|
|
Name: y ..かけだし(1,458ポイント)
Date: 2010/08/16(月) 02:48
No:59067
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
舌足らずなところがあったので追記。
俗に大弾と呼ばれる弾や特殊な弾(炎弾や水弾など)は、
その弾の画像自身でエフェクトを作ってるようです。
その他の弾は、大体上で書いた方法です。
違って見えるのは、実体化までの時間が長かったり短かったりするせいです。
ナイフも小弾もクナイも、全部おんなじようなエフェクトを使っています
147ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,266ポイント)
Date: 2010/08/16(月) 02:51
No:59068
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
yさん
おおう、実はそうなのですか……。
確かに、それだけなら簡単ですね。
仰る通り、複雑なことをするとすぐ重たくなってしまうので、逆に簡単な手法だけで何とかするように考えなくてはならないのですね……。
新作のアイスも凄いなと思いましたが、その制限で魅せるのは、やはり腕なんでしょうね。。。
ところで、実際にどうやってやっているかというのは、どうやれば見極められるのでしょうか。
最初、私にはぼかしているようにしか見えなかったのですが……。
130ポイント を手に入れた。
|
|
|
|
|
Name: y ..かけだし(1,672ポイント)
Date: 2010/08/16(月) 03:25
No:59069
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
よく見る。これに限ります。
東方は比較的難易度の低いSTGなので、イージーでまったりスナップショットの旅に出かけたあとに、
撮ったスナップショットとにらめっこして見極めるもよし、
ルナティックでクリアしたリプレイをあとでじっくり見ながら見極めるもよし。
あとは東方の場合は、どうすれば簡単に速くできるかを思いつけば、
なんとなく同じものは作れると思います。
大体のエフェクトは、1エフェクトに付き1〜3種類くらいの画像しか使ってません。
なので、DxLib::DrawRota(F)があれば、大体実装できます。
極端な話、プログラムがダメでも画像がちゃんとしていればそれなりに綺麗に見えるので(当たり前ですが)、
そこまで悩む必要はないですよ。
214ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..上級者(24,901ポイント)
Date: 2010/08/16(月) 09:18
No:59076
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
>実際にどうやってるか
グリモワールオブマリサとか参考にするのも良いと思いますよ
42ポイント を手に入れた。
|
|
|
|
|
Name: Yperia ..かけだし(1,394ポイント)
Date: 2010/08/16(月) 18:02
No:59114
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
ふむふむ。
確かに、Dixqさんの動画を見ると、明らかにyさんの仰る通りということが確認できますね!
これからは動画を撮るようにします。
>グリモワールオブマリサとか参考にするのも良いと思いますよ
とりあえずamazonのショッピングカートに放り込みました 笑
128ポイント を手に入れた。
|
|
|
|
|
Name: HK ..初心者(5,618ポイント)
Date: 2010/08/17(火) 00:19
No:59127
|
|
Title: Re:【画像処理?】東方のような発射処理
|
|
私も以前、東方っぽいゲームをつくろうと思って、同じようなことで悩みました。
私が取った解決策は、「CaptureD」という、スクリーンショットが撮れるフリーソフトを使って
実際に東方のゲームをやりながら、敵が発射する瞬間や、自機がやられて敵弾が消える瞬間の
スクショを1000枚くらい撮って、じっくり見ながらを研究しました。
いろいろ調べた結果、わかったことを以下に書きます。
東方では敵弾発射時にのみ使われる
専用の弾画像(No:59065 でyさんが添付されている画像)
をおよそ20フレームほど表示しています。
本家の素材ではこの画像を(たぶん)8色用意しており、
発射される弾の色に合わせて使い分けられています。
その表示方法もNo:59065 でyさんが仰られている通り、
最初は透明度を高くしておき、だんだん不透明にしています。
また、本家東方では、透明度だけでなく、大きさも連続的に変化
させています。最初は大きく表示し、フレームごとに小さくしていくと、
本家と全く同じ感じが再現できました。
まとめると、発射直後の20フレーム中に
アルファブレンド:0→255
大きさ:だいたい2.5倍→0.5倍
とすれば、本家を再現できます。「だいたい」の部分は試行錯誤
大玉やレーザーなどは、また別な描画方法を取った方がいいと思います。
弾の書き方を考える際は、ぜひスクリーンショットを。
とすすめてみます。
54ポイント を手に入れた。
|
|
|
|
Name: スモモ ..かけだし(1,798ポイント)
Date: 2010/08/13(金) 21:41
No:58909
|
|
Title: マルチスレッドのサーバー作り
|
|
[1] 質問文
[1.1] 自分が今マルチプロセッサのサーバー作りたいです。
[1.2] 取り組んだプログラムコードが下にあります。
[1.3] 複数クライアント対応作るつもりですが複数対応なってないです。
[1.4] どうすれば複数クライアントが扱えるサーバーがどのように作ればいいでしょうか?
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2008
[3] その他
・C言語を一年半ぐらい勉強しました。初級か中級ぐらいです。
・ライブラリを使っていません。
#include <process.h>
#include <winsock2.h>
#pragma comment(lib,"WSOCK32")
#pragma warning(disable:4312)
class C_server{
int dstSocket;
static void CallFunc( LPVOID pParam );
public:
C_server(int dstSocket);
void MainFunc();
};
C_server::C_server(int dstSocket):dstSocket(dstSocket){_beginthread(CallFunc,0,this);}
void C_server::CallFunc(LPVOID pParam){((C_server*)pParam)->MainFunc();}
void C_server::MainFunc(){
char buffer[1024];
while(dstSocket){
//パケットの受信
int numrcv = recv(dstSocket, buffer, sizeof(char)*1024, 0);
if(numrcv ==0 || numrcv ==-1){
closesocket(dstSocket);
break;
}
printf("変換前 %s",buffer);
for (int i=0; i< numrcv; i++){ // bufの中の小文字を大文字に変換
buffer[i] = toupper(buffer[i]);
}
// パケットの送信
send(dstSocket, buffer, sizeof(char)*1024, 0);
printf("→ 変換後 %s \n",buffer);
}
}
void main()
{
// ポート番号,ソケット
int srcSocket; // 自分
int dstSocket; // 相手
// sockaddr_in 構造体
struct sockaddr_in srcAddr;
// Windows の場合
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);
// sockaddr_in 構造体のセット
memset(&srcAddr, 0, sizeof(srcAddr));
srcAddr.sin_port = htons(40453);
srcAddr.sin_family = AF_INET;
srcAddr.sin_addr.s_addr = htonl(INADDR_ANY);
// ソケットの生成(ストリーム型)
srcSocket = socket(AF_INET, SOCK_STREAM, 0);
// ソケットのバインド
bind(srcSocket, (struct sockaddr *) &srcAddr, sizeof(srcAddr));
// 接続の許可
listen(srcSocket, 10);
while(1){
if((dstSocket = accept(srcSocket, NULL, 0))>0){
//static C_server s(dstSocket); //
new C_server(dstSocket); //
//C_server s(dstSocket); //
}
}
WSACleanup();
}
ご教授の程、よろしくお願いします。 
705ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(28,792ポイント)
Date: 2010/08/13(金) 22:12
No:58911
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
マルチスレッドプログラミングになります。
accept()後にスレッドを生成し、それにdstSocketを渡してください。
#タイトルから判断するに、マルチプロセスで処理したいようにも
#見えますが、Windowsってできましたっけ?
#不可能か、結構面倒だったので諦めた覚えがあります。

125ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(1,880ポイント)
Date: 2010/08/14(土) 17:59
No:58951
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
ぽこさん
ご回答ありがとうございます。
> accept()後にスレッドを生成し、それにdstSocketを渡してください。
おっしゃる通りやっていると思いますが、よくわからないです。
よければ、詳しく教えていただけないでしょうか。
> #タイトルから判断するに、マルチプロセスで処理したいようにも
> #見えますが、Windowsってできましたっけ?
> #不可能か、結構面倒だったので諦めた覚えがあります。
よくわからないです。
わかるまで、マルチスレッドプログラミングとして覚えます。
ご指摘いただき、ありがとうございました。
82ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(1,985ポイント)
Date: 2010/08/14(土) 19:39
No:58959
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
softyaさん
ご丁寧に説明いただきありがとうございます。
それなのに、少ししかわからなくでごめんなさい!
もっと勉強する必要と思いますが。
とりあえず、クライアント50ぐらい同時に処理できるサーバーが作りたいです。
アドバイス参照しながら、やっていきます。
もし、よければ、もっとアドバイス下さい。
105ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(193,116ポイント)
Date: 2010/08/14(土) 19:53
No:58960
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
アドバイスはOKですが、何が分からないか整理してもらえますか。
>それなのに、少ししかわからなくでごめんなさい!
何がわかって、何が自分で調べても理解できなかったかできるだけ細かく整理出来ていると説明ポイントが絞りやすく良いですね。
マルチスレッドについて詳しく説明しようと思ったら、OS全般のことを説明することになり内容が本一冊分ってこともありえます。なので、とてもここで説明しきれませんので本を紹介することになると思います。
175ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(1,819ポイント)
Date: 2010/08/14(土) 20:27
No:58962
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
softyaさん
ご親切にしてもらってありがとうございます。
> >それなのに、少ししかわからなくでごめんなさい!
の意味は
したいことを聞いたら、したいことだけでなく、他にも理解しないといけないことが多くなりました。
すべてを学ぶのは時間かかることと、
自分、時間がないと自分をどうしようもないところを追い詰めたことだと思います。
自分が未熟のせいです。
softyaさんは気にしないでください。
よかったら、自分が書いたコード(上にあります)見てもらってもいいでしょうか。
なぜ、クライアント1つしか処理できない教えてもらってもいいでしょうか。
166ポイント を落としてしまった。
|
|
|
|
|
Name: ぽこ ..プログラマー(28,983ポイント)
Date: 2010/08/14(土) 20:38
No:58963
|
|
Title: Re:マルチプロセッサのサーバー作り
|
|
> なぜ、クライアント1つしか処理できない教えてもらってもいいでしょうか。
accept()の後、つまりユーザから接続を受けた後から C_serverクラスのコンストラクタ内の処理の間、
ユーザから接続を待っていないからです。
並列に処理を行ないたいのなら、ユーザからの接続を受けた後、スレッドを作成し、
すぐに接続待ち(accept()呼び出し)に戻る必要があります。
生成されたスレッドの中で、C_serverクラスのコンストラクタ内の処理相当のことをすれば、OKです。
138ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(1,868ポイント)
Date: 2010/08/14(土) 20:39
No:58964
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
dicさん
書き込みありがとうございました。
> >マルチプロセッサ
> まずはこの単語の意味から調べてください
> 次にWindowsのCPUの使われ方を調べてください
お恥ずかしいところ見せちゃってすいません。
調べてみます。
49ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(1,909ポイント)
Date: 2010/08/14(土) 20:44
No:58965
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
ぽこさん
ご親切に回答してもらって、ありがとうございます。
コード書き直してみます。
41ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(91,192ポイント)
Date: 2010/08/14(土) 23:02
No:58972
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
配列は扱えますか?
//=======================================================
Windowsで動くソースは持ってますし、動作の確認もできました
運営したいのですが、時間の都合上できない状態です
ちなみに私の持っているソースはサーバ側はシングルスレッドで処理してます
ネット上の知り合いになりますが、20〜30人接続してもラグが発生しないようです
なかなか知名度が低く、これ以上のクライアント(ユーザ)を確保できないので
性能の指標は未知数です
123ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(29,142ポイント)
Date: 2010/08/15(日) 10:46
No:58993
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
> 配列は扱えますか?
>
> ちなみに私の持っているソースはサーバ側はシングルスレッドで処理してます
> ネット上の知り合いになりますが、20〜30人接続してもラグが発生しないようです
selectやpollを使っているんですか?
12ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(2,416ポイント)
Date: 2010/08/15(日) 19:32
No:59034
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
みなさん
ご協力ありがとうございます。
自分もよくわからないですが、できました。みなさんのおかげです。
いろいろやってみたら、上のコードとほとんど変わらないですが、できるようになりました。
どなた、わかっている方、ご教授の程、よろしくお願いします。
コードは以下のようになります。
/*
S/2010/08/03 ServerTest00.h
E/2010/08/15 ServerTest23.h
*/
#include <stdio.h>
#include <process.h>
#include <winsock2.h>
#pragma comment(lib,"WSOCK32")
#define MAX 3
#define PORT 1234
//
class C_server{
int dstSocket; // 相手
char *name;
static void CallFunc( LPVOID pParam );
public:
static int cnt;
C_server();
C_server(int dstSocket,char *name);
void step();
};
int C_server::cnt = 0;
C_server::C_server(){dstSocket = 0;}
C_server::C_server(int dstSocket,char *name):dstSocket(dstSocket),name(name){_beginthread(CallFunc,0,this);}
void C_server::CallFunc(LPVOID pParam){((C_server*)pParam)->step();}
void C_server::step(){
char buffer[1024];
cnt++;
int NO = cnt;
printf("%d 個クライアントが接続している\n",cnt);
while(1){
//パケットの受信
int numrcv = recv(dstSocket, buffer, sizeof(char)*1024, 0);
if(numrcv ==0 || numrcv ==-1){
closesocket(dstSocket);
cnt--;
printf("NO.%d 接続切れた %d 個クライアントが接続している\n",NO,cnt);
break;
}
printf("NO.%d %s 変換前 %s",NO,name,buffer);
for (int i=0; i< numrcv; i++){ // bufの中の小文字を大文字に変換
buffer[i] = toupper(buffer[i]);
}
// パケットの送信
send(dstSocket, buffer, sizeof(char)*1024, 0);
printf("→ 変換後 %s \n",buffer);
}
}
//
void main()
{
// ポート番号,ソケット
int srcSocket; // 自分
int dstSocket; // 相手
// sockaddr_in 構造体
struct sockaddr_in srcAddr;
struct sockaddr_in dstAddr;
// Windows の場合
WSADATA data;
WSAStartup(MAKEWORD(2,0), &data);
// sockaddr_in 構造体のセット
memset(&srcAddr, 0, sizeof(srcAddr));
srcAddr.sin_port = htons(PROT);
srcAddr.sin_family = AF_INET;
srcAddr.sin_addr.s_addr = htonl(INADDR_ANY);
// ソケットの生成(ストリーム型)
srcSocket = socket(AF_INET, SOCK_STREAM, 0);
// ソケットのバインド
bind(srcSocket, (struct sockaddr *) &srcAddr, sizeof(srcAddr));
// 接続の許可
listen(srcSocket, MAX + 1/*(int)0x8ffffff*//*1*/);
while(1){
int dstAddrsize = sizeof(dstAddr);
// 接続の受付け
printf("接続を待っています\nクライアントプログラムを動かしてください\n");
if((dstSocket = accept(srcSocket, (struct sockaddr *) &dstAddr, &dstAddrsize))>0){
if(C_server::cnt >= MAX){
printf("接続最大数 %d を超えた\n",MAX);
continue;
}
printf("%s から接続を受けました\n", inet_ntoa(dstAddr.sin_addr));
new C_server(dstSocket,inet_ntoa(dstAddr.sin_addr)); //
}
}
WSACleanup();
}
ご教授の程、よろしくお願いします。
507ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(2,457ポイント)
Date: 2010/08/16(月) 14:04
No:59084
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
dicさん
書き込みありがとうございます。
> 新手の釣りでしょうか?
の意味わからないですが、教えていただけないでしょうか?
41ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(195,368ポイント)
Date: 2010/08/16(月) 14:21
No:59088
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
まったくスレッドを使っていないので絶対に目的が達成されていないのに「できました」と書かれていたからだと思います。スレッドを使っていないのはなぜでしょうか?
それと時間がないのに、こんなに悠長にしていて大丈夫ですか? 
60ポイント を手に入れた。
|
|
|
|
|
Name: Coca ..ぴよぴよ(77ポイント)
Date: 2010/08/16(月) 18:07
No:59115
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
C++を使用したことがないので、質問になりますが、
メインスレッド内、newで確保した領域を解放する必要があると思いますが、その点は問題ありませんか?
後は定型文みたいなものですから、_beginthreadの運用としてはいいのではないでしょうか。
_beginthreadのせいと思わしき問題が出るけど、俺のテスト項目のことだから、まぁいっかw 
77ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(29,200ポイント)
Date: 2010/08/16(月) 19:19
No:59119
|
|
Title: Re:マルチスレッドのサーバー作り
|
|
> softyaさん
> まったくスレッドを使っていないので絶対に目的が達成されていないのに
一応コンストラクタの所で_beginthread()を呼び出していますよ。
>スモモさん
やりたいことは達成出来たのですよね?
他に何が問題/疑問なのでしょうか?
42ポイント を手に入れた。
|
|
|
|
|
Name: スモモ ..かけだし(2,488ポイント)
Date: 2010/08/16(月) 21:11
No:59124
| 解決!
|
Title: Re:マルチスレッドのサーバー作り
|
|
みなさん
ご協力ありがとうございます。
おかげで解決しました。
またよろしくお願いします。
31ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(63,024ポイント)
Date: 2010/08/11(水) 12:16
No:58698
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
企画を第3者に見て判断してもらう というアイデア、私の意見としてもいいと思いますよ^^
「求人」のスレッドでも制作期間5カ月以内であのボリューム・・・
正直、無謀な挑戦だなぁと思いながら拝見していました(笑)
プログラミングはうまくいけば、すぐに組めることもありますけど、
グラフィックやサウンドを1から作るとなると結構大変です。
私もゲームに使用する32×32のドット絵を描いていますが、
1つ描き上げるのに1日はかかってしまいますorz
なので4か月で100個の画像を描くのは、とてもじゃないけど無理な気がしていました。
最近「ゲームを一緒に作ろう!」みたいなスレッドを立てて、人を募集していますが、
企画者の知識が不十分なケースが少なからずあると思います。
そのような人が話を進めて行ったとしても、
おそらく制作途中で行き詰ると思います。
最悪、企画そのものが自然消滅・・・っていうことも考えられるのではないでしょうか?
もちろん、すべての人が知識不足というわけではないですが^^;
今回の「求人」のスレッドも同じケースじゃないでしょうか?
第3者の人に企画書を添削してもらい、アドバイスをもらうことで
少しは改善されると思います。
企画に参加する側からしても、第3者の意見が入っていることで
少しだけかもしれませんが安心感が得られるかもしれません。
でもまぁ・・・第3者の意見を無視して強引に募集されちゃ意味ないかもですが^^;
416ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..比類無きプログラマー(85,046ポイント)
Date: 2010/08/11(水) 12:26
No:58699
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
> そこで、「企画段階でレビュワー(第三者)の評価を受け、判定を表示する」
> ということを考えています。
> (レビュワーは特定の人に限られます。自分でOKレビュー防止のため)
実際に出来るかどうかはおいておくとして、その考えはよいとは思います。
ただCMMIの観点から言えば、レビュワーがレビュワーとして十分な実力を持っていることを評価するためのシステムが必要かと思います。
また、レビュワーの実力の評価方法、およびその評価結果が公開されている必要もあると思います。
掲示板の常連だからレビュワーとしてOKです、なんてのは駄目です。
そうでないと、ある企画がレビュワーによって評価NGを受けたときにレビュワーの評価がおかしいといって揉めることになるかと思います。
#誤解を招きそうな文章を少し修正。
#追記
レビュワーが企画を評価する際、OKにするにしてもNGにするにしてもそのレビュワーがどのような手法、手段で評価を行ったのかも公開しないと揉める原因になりそうですね。
レビュワーは企画を評価する力も必要ですが、評価結果を報告するためのプレゼン力もいることになりますね。
それだけの力を持った第三者を、提示される企画を全て裁けるほどの人数そろえられるかどうかが問題ですね。(しかも無償で)
#追記2
ある企画に対してレビュアーAとレビュアーBで意見が異なった場合にどうするかも事前に決めておいたほうがいいと思います。
仕事であればリーダ、上司、顧客といった立場の強い人が最終決定することで決着しますが、上下関係のないネット上では意見の対立が発生した場合にいつまでたっても収集がつかないことが間々あります。
#追記3
レビューに掛かる期間をどうするのかも問題です。
企画の規模が大きくなればレビューに掛かる時間も当然長くなります。
しかも、仕事と違って善意のレビュアーに頼るのではすぐに終わるという保障はまず出来ません。
しかし、企画を出した側からすればすぐにでもメンバー募集を始めたいわけで、すぐにでもレビューを終わらして欲しいと考えるでしょう。
その辺のギャップをどう埋めるを考える必要もあるではないでしょうか。

156ポイント を落としてしまった。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(57,910ポイント)
Date: 2010/08/11(水) 12:26
No:58700
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
>>ookamiさん
記事・リンク先ともに拝見させて頂きました。
まず始めに、FireFox で表示した ookami さんのサイトの添付ファイルを付けました。
文字が被っていたため読みにくかったです。
IE8.0 でも確認しましたが、恐らく期待されているページが表示出来ていると思います。
もし宜しければ他のブラウザも意識して改善してみては如何でしょう。
今はテスト段階で以降改善すると言うのであればすいません;
> 「都合のいいことしか聞かない企画者」も、
> レビューを受けなければメンバーが募集できないわけですから
> 「都合の悪いことでも聞かざるを得ない」というような
> 効果も期待できるかもしれません。
メンバー募集に対して特定の人物が採点すると言う方式を
仮に、この掲示板にいらっしゃる常連さんで行ったと想定すると
結構なレスが続いたとしても「これなら大丈夫!」という結果になるとは思えなかったです。
企画を立案し、募集するすると言う事は、その企画に対してほぼ全てをお答えしなくてはなりません。
今回の件でも、「〜だと思う」という回答に対し、曖昧な表現はやめて下さいとありました。
そのような経験がある方ならまだしも、今回の件のように作りたい!
…という気持ちだけで立案すると、改善と言うよりは叩かれていると感じるかも知れませんし、
こんな面倒なら別の場所で募集します…なんて言われるかもしれません。
確かに必要な情報を開示しない依頼主が悪い所なのですが
せっかくのやる気を削いでしまわないかが心配でした。
それくらいでやる気が出なくなったのなら始めから作らない方がいいと言われればそれまでですけど;
しかし、全く解らなかった応募の仕方・方針がこのようなシステムを取ることで
「こうすればいいのか!」と改善されて行くような面もあると思いますので、
駄目と言う訳ではないです。
こればっかりは一度リリースしてみてユーザーの意見をフィードバックして貰わないと
なんとも言えない所ではありますね;
> 「こんな機能もどうですかw」といったアイデア
こういった支援サイトは今までに見たことないので変な回答になってたら申し訳ないです。
グループ制作の経験をした方が、グループ制作を経験していない方(あるいは自信がない方)
に向けての情報交換場のようなものがあると良さそうに思えました。
運営するには凄く難しいサイトになると思いますが、陰ながら応援しております!
593ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(41,753ポイント)
Date: 2010/08/11(水) 12:57
No:58703
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
# DVDMさん
お返事ありがとうございます。
こちらでもFireFoxをダウンロードして確認してみました。
こ れ は ひ ど い。
FireFoxって スタイルシート position:absolute は効かないんでしたっけ?
他にもチャート表示がうまくいかなかったり、
ブラウザ依存への対応は、予想以上に骨が折れそうですね;;
取り急ぎ、大きな崩れは修正しましたが、
いろいろ問題がありそうです。
--
皆様、お返事ありがとうございます。
すいません、取り急ぎ、デザインの問題が深刻だったので、
優先的に対応しました。
またまとめてお返事させていただきたいと思います。
206ポイント を手に入れた。
|
|
|
|
|
Name: ライス ..初心者(5,954ポイント)
Date: 2010/08/11(水) 17:03
No:58723
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
とてもいい考えだと思います!
やる気だけがあってもそれなりの知識がないとゲームは作れませんですしね^^;
レビュワーはそれなりの知識と経験を積んだ方になると思うので、
企画者さんの良い学習の場にもなると思います。
DVDMさんがおっしゃる通り叩かれることもあるかもしれませんが、
一度や二度叩かれたぐらいであきらめるようじゃどの道ゲームは完成しないと思います。
(私が言えるようなことではありませんが…)
また一つ思ったことは、
掲示板の規約と注意事項にあるようなテンプレートを用意すればよいと思います。
それなりの情報を公開することになるので、
応募者さんも安心できると思います。
※
「DVDM」→「DVDMさん」に変更しました。
265ポイント を手に入れた。
|
|
|
|
|
Name: ライス ..初心者(5,994ポイント)
Date: 2010/08/11(水) 17:06
No:58724
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
すみませんm(_ _)m
編集キー入力し忘れてました。
DVDMさんに、さんを付け忘れてました。
(名前は絶対に間違えないようにコピー&ペーストしてるのでつい…)
DVDMさん本当にすみませんm(_ _)m 
40ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(40,535ポイント)
Date: 2010/08/11(水) 23:47
No:58747
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
こんばんは。
先ほどはバタバタして失礼しました。
長文になりますが、順にお返事を書いていきます。
# s-rushさん
> 私の意見としてもいいと思いますよ^^
ありがとうございます!
> 企画者の知識が不十分なケースが少なからずあると思います。
> 最悪、企画そのものが自然消滅・・・っていうことも考えられるのではないでしょうか
まさに、ありそうな話ですね。
自然消滅すると、せっかく作った素材が無駄になってしまうんですよね。
こちらのサイトでは、
http://cyocorune.cocolog-nifty.com/mack_cgblog/2008/12/post-3ffa.html
# グラフィッカーが手伝いを依頼されて、嫌な事は何かご存知でしょうか。
# それは「ゲームが陽の目を見る事なく」「作った素材はお蔵入り(配布もできない)」で、「一切の報酬」も「お詫び」もない状態です。
↑こんな表現がされていました。
いったん動き出した企画が消滅してしまうと、
いろいろと被害がありますね。
> でもまぁ・・・第3者の意見を無視して強引に募集されちゃ意味ないかもですが^^;
確かに、ベースは「ただの掲示板」ですから、
「とにかく○○を募集!」と書かれてしまうことを
防ぐ手立てはないんですよね^^;
その対策として、
レビュワーが「プログラマを募集してよい」などのフラグを立てると、
そのプロジェクトには分かりやすくアイコンなどを表示して、
応募者が安心して応募できる目印にしようと思っています。
「強引に募集」しているのかどうか、応募者も確認できるというわけです。
# Mistさん
> 実際に出来るかどうかはおいておくとして、その考えはよいとは思います。
ありがとうございます!
> ただCMMIの観点から言えば、レビュワーがレビュワーとして十分な実力を持っていることを評価するためのシステムが必要かと思います。
仰るとおりです。さっそく見抜かれてしまいましたw
問題意識は持っています。
現状では、レビュワーをどうやって募集するか、という段階でありまして、
しかも、適切な募集は簡単にはかけられないだろうから、
当面は私ひとりでいいやw みたいな状態なので、
レビュワーを評価するシステムまでは考えれていない、というのが正直なところです。
「Project Management Professionalを取得した人に限ります」など、
公的資格でシバるのも、ちょっと大げさすぎる気がしますし... 私もってませんしねw
ただ、問題意識は持っていますので、
ゆくゆくは何かしらの対策が必要と思っています。
それとも、今から考えておくべき問題...ですかね?
> レビュワーが企画を評価する際、OKにするにしてもNGにするにしてもそのレビュワーがどのような手法、手段で評価を行ったのかも公開しないと揉める原因になりそうですね。
そうですね。
このあたりは、まずとにかく私がレビュワーとして経験をつんで、
揉めないコツみたいなものをつかんでから、
レビューの際の注意点を、他のレビュワーさんに示す...という流れを考えています。
ただ...表現の問題かもしれませんが、
「どのような手法、手段で評価を行ったのかを公開」っていうと...
「○○法に基づいて、この企画をレビューした。○○の式より、○○係数が0.8なのでうんぬん」のようなイメージなんですが...
「評価の根拠を公開」くらいのイメージでいいんでしょうか。
違ったら修正ください。
> ある企画に対してレビュアーAとレビュアーBで意見が異なった場合にどうするかも事前に決めておいたほうがいいと思います。
ですね。
ただ、企画がもう見るからにアレな場合は、
A が「まだメンバーを募集しないべき」と言ったら、
ほとんどの人が賛同してくれるでしょうから問題ないでしょう。
もし微妙な場合は、「企画○○のレビューを相談するスレ」などを立てて、
ある程度レビュワー同士で意見交換してもらうしかないかな、と考えています。
> レビューに掛かる期間をどうするのかも問題です。
ここは、あらかじめ「無償でのレビューなので時間がかかってもご了承ください」と、
免責を取るつもりです。
とはいえ、最初はそんなに大量の企画者が殺到しないという想定なので、
私一人で2日〜1週間を目安にレビューしていこうと思っています。
1,298ポイント を落としてしまった。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(41,447ポイント)
Date: 2010/08/11(水) 23:48
No:58748
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
# 本文が長すぎたようなので分けました。
# DVDMさん
改めまして、FireFoxでの動作確認、ありがとうございます。
ひとまず、文字が重なることはなくなったと思います。
ブラウザ依存の問題についても、積極的に修正していくつもりですので、
またお気づきの点があればご指摘ください^^
> 仮に、この掲示板にいらっしゃる常連さんで行ったと想定すると
> 結構なレスが続いたとしても「これなら大丈夫!」という結果になるとは思えなかったです。
「求人」のスレッドのことですよね。
正直、私もそう思います。
明らかに聞く耳ありませんでしたからね...
多少、ですが、
integ の場合は、「レビュワー」が最初の関門、というか
なんとなく特別な存在になるでしょうから、
多少、「レビュワーの言うことだったら聞いてみようかな」という気に...ならない人はならないか。
まぁ、何度レビューしてもダメなら諦めてもらうしかないでしょうね。
そこは切り捨てます。
> こんな面倒なら別の場所で募集します…なんて言われるかもしれません。
ありそうですね。上記と同様、そこは切り捨てます。
「別の場所で募集します」なら、まだやる気が残っているのでいいかなと思います。
「もうゲーム作りやめます」みたいなことになると、ちょっと残念ですね...
その辺はレビュワーの腕の見せ所...ということで。
# なんかここまでくると、レビュワー、というより、カウンセラーみたいですね。
> こういった支援サイトは今までに見たことない
少なくともビジネスにはなりませんね!
でもさりげなく嬉しいコメントですw
> グループ制作の経験をした方が、グループ制作を経験していない方(あるいは自信がない方)
> に向けての情報交換場のようなものがあると良さそうに思えました。
基本は掲示板なので、自由にスレ立てしてもらい、
情報交換してもらえばいいかな、と思っています。
# ライスさん
> とてもいい考えだと思います!
ありがとうございます!
> レビュワーはそれなりの知識と経験を積んだ方になると思うので、
> 企画者さんの良い学習の場にもなると思います。
そうですね。まさにそれをネライとしています^^
> 掲示板の規約と注意事項にあるようなテンプレートを用意すればよいと思います。
あーすいません、
一度は「テンプレート」、あったんですよ。
でもイマイチ項目が決まらなくて、消してしまったんです。
実際、私も「企画者がテンプレートに従って書き込めば、応募者も安心」な気がしたので
テンプレートを作ってみたのです。
ただちょっと...
簡単な例で説明すると、
「メンバーを募集するためにレビューを依頼する」
□ 仕様書を作成した
□ 連絡方法を決定した
□ 開発のスケジュールを決定した
というテンプレートで、
それぞれチェックして「レビューを依頼する」ボタンをクリック!...というイメージですけど、
□ 仕様書を作成した(つもり!)
□ 連絡方法を決定した(つもり!)
□ 開発のスケジュールを決定した(つもり!)
チェック チェック チェック!(意味ねぇー!)...というのが目に浮かんで、消しました。
結局、テキスト自由入力でいいや、という結論に、達しつつあります。
が、「応募者が安心」というのは大事にしたいので、
「こんなテンプレートならどうだ」というアイデアがあったら、どしどしお願いしたいですw
--
もうしばらく、「解決!」せずに置いておきます。
ご意見、お待ちしております。
2倍のポイントを手に入れた! 912ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..プログラマー(30,674ポイント)
Date: 2010/08/12(木) 00:02
No:58750
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
>>「こんなテンプレートならどうだ」というアイデアがあったら、どしどしお願いしたいですw
・グループ製作を完成させた経験がある。(完成が大切)
それなら「つもり」ってことはないと思うのですが…テンプレートというものを勘違いしていて、変なこと書いてたらすいません。
それが一番「安心」が強いと思ったので…
91ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..ハッカー(101,826ポイント)
Date: 2010/08/12(木) 00:27
No:58751
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
残念ながら無駄ではないかと。
経験不足・知識不足であっても能動的な企画者は、
既存の掲示板(ここもその1つです)などからのアドバイスで向上できると思います。
一方、受動的な企画者はookammiさんのシステムでも矯正できないでしょう。
立案段階のハードルを高めるだけならば、
能力のある人は既存の掲示板からでもアドバイスを吸収できるし、
ない人はレビューアのアドバイスにもかかわらずハードルを越えられず、
断念するか、別の掲示板に流れて叩かれることでしょう。
能動的・受動的、能力のあるない、の両極端でない人の内の一部については
救済できる可能性があると思いますが、ookamiさんの努力に見合うだけの
割合ではないと思います。
失敗を経験する(と私が思っている)ookamiさんにとっては有意義なことかもしれませんし、
結果的にありきたりの掲示板が1つ増えただけだとしても、立派な事だと思います。
# 私は少々物を知っているつもりですが、色々否定的に考えて実行しない人ですので、
# (例え無謀だと私が感じたとしても)実行しようとする人の事はある意味尊敬しています。
# (その意味では、ざっそうさんやパコネコさんの事もです。嫌味ではなく。)
# 否定的な意見ですので、無視されても一向に構いませんが、
# できれば、論破したり、吸収して改善につなげたり、リスクをしっかり評価してから
# 切り捨てたりしてくれれば本望です。
434ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(28,221ポイント)
Date: 2010/08/12(木) 00:29
No:58752
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
#無駄無駄無駄ァ
毎度、否定的なことしか言っていませんが、
聞く耳持たない人間にレビューなんて馬耳東風以外何者でもない気がします。
むしろツールの利用を妨げる一因にしかならないのでは?
前も書いた気がするんですが、一番大切なのは企画者に心得を
身につかせることだと思うんですよ。
そこで、企画者としての、マネージャとしての、あるいは一人のオトナとしての
心得をゲームを通じて学ばせるってのはどうですか?
説教気分を味わずに心得を学べるかも知れません。
ベースはe-learningで、ある試験に合格するとツールの一機能(例えば、募集のテンプレート)が
使えるようになるとか。
e-laeringだと堅苦しい感じがするので、ノベルゲーム風に仕立てるとか。
主人公がゲームを作成したい!と思いつき、ネット上で募集をかけるが、ディスられまくる。
落ち込んでいる主人公に対して、ゲーム作成経験があるヒロインがアドバイスを行う。
主人公は何人かから選択する(よくありがちな企画者のパターンを網羅する)。
・大学生…ネット経験5年程度。技術系、クリエーター系のコミュニティでの活動経験なし。煽られたら煽り返す。リーダーの意見が絶対だと思っている。
・中学生…ネット経験2年程度。技術系、クリエーター系のコミュニティでの活動経験なし。煽り耐性なし。自分を大きく見せようとする。
・小学生…ネット経験殆どなし、煽り耐性なし。
選択した主人公によって発生するトラブルが異なる。
マルチエンディング。全てバッドエンド(ありがちなトラブルで開発中止)。
全てのエンディングを見る頃には、ありがちなトラブルを回避するための
リテラシーが身についている!!
果たして主人公は無事ゲームを完成させることはできるのか?
#全部バッドエンドだけどね:P
#我ながらアホなこと言ってる気がするなあ。。。
504ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..プログラマー(30,579ポイント)
Date: 2010/08/12(木) 00:41
No:58753
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
おもしろそうですね。
ノベルゲームというものをやったことないですが、やってみたいな〜と思いました。
でも作るにはかなりの経験が必要な気がします。
私はプログラマー志望ですが、経験は大切な勉強だと思うので、こういう風にゲームで似たような経験を積むことができるのは素敵だと思います。
#全部バッドエンドだけどね:P
なんだ…残念です。
95ポイント を落としてしまった。
|
|
|
|
|
Name: ISLe ..中級者(12,222ポイント)
Date: 2010/08/12(木) 03:25
No:58755
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
プレゼンは良い案だと思うのですが、企画内容を秘密にしたいという企画者さんに対してはどのように対応するのでしょう。
漏らさないことを信じるしかないのでしょうけれどトラブルがあったときが心配です。
企画者さんが担当する作業を具体的にあげてもらうだけで困った人を予防できるのではないでしょうか。
何もできないという企画者さんには「ゲームが完成したと仮定して、そのゲームの取扱説明書と完全攻略本を作る(テキストのみで良し。ラフなイメージがあればベター)」という仕事を与えると良いです。
プログラムの知識もグラフィックの知識もサウンドの知識も要りません。
ゲームを遊んだりメールを打ったりすることができれば誰でもできることです。
↑ができればゲーム制作は9割方できたようなものです。
イメージを固めるのに相談相手がいたほうが捗るので複数人で企画やるかプログラム担当が聞き役になると良いと思います。
グラフィックやサウンドは専任にしないほうが良いと思います。
単発での発注にしてookamiさんのサイトで仲介したものは基本的にフリー素材として扱うような形にするとプロジェクトがポシャった場合にも無駄にならないのではないでしょうか。
#スレ違ってる気がしますがとりあえず思ったことを書いてみました。理想入ってます。
346ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..比類無きプログラマー(85,271ポイント)
Date: 2010/08/12(木) 09:33
No:58758
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
テンプレ作ってチェックつけさせるで十分な気がします。
募集のときにテンプレ項目に対して、具体的にどうするかを明示させるようにして
(例:連絡方法を決定した ⇒専用HPに掲示板を設置)
そういう記載がない募集に対しては、応募しないように呼びかけるのがコストパフォーマンス的に最良な気がします。
で、どういったテンプレがいいかを有識者と相談して決めればいいんでないでしょうか。
レビューでどこまで見るかにもよりますが、詳細な仕様書が必要ということにするのであればISLeさんの言うように守秘義務の問題が発生しますね。
Aチームの企画をレビューしたBさんが、その企画内容を絶対にばらさない(かつ、私的流用もしない)事ことを誓わせるなんて無償レベルじゃ無理ですよね(^-^;
法的に有効な契約書が必要になっちゃうか。 
136ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(42,108ポイント)
Date: 2010/08/12(木) 12:51
No:58760
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
皆様。お返事ありがとうございます。
順に返事してまいります。
# パコネコさん
>>「こんなテンプレートならどうだ」
> ・グループ製作を完成させた経験がある。(完成が大切)
これも、「つもり」ってことがあります...
例えば、企画者が複数いて、自分は実はあまり貢献できていないのに、
他の企画者にフォローされて、なんとか全体はまとまったが、
もしこの人だけで企画したら、ぜんぜん進まない、という場合です。
なので、「チェックボックス」ではダメで、
具体的に入力してもらう必要がある...
すると、「テキスト自由入力」ってことになってしまうわけです。
就職活動なり、バイトの面接などで、
「履歴書」って書くじゃないですか。
あれも、まぁある程度、決まった項目はありますが、
要は全部、「自己紹介」の「テキスト自由入力」なんですよね。
# たいちうさん
> 能動的・受動的、能力のあるない、の両極端でない人の内の一部については
> 救済できる可能性があると思いますが、ookamiさんの努力に見合うだけの
> 割合ではないと思います。
その「割合」は確かに大事ですね...
100個の企画のうち、
1 個が「一発OK、どんどん募集されたし」
1 個が「アドバイスしたら改善された。さぁ募集されたし」
98個が「救えない、アドバイスしても改善されない」
だと、さすがに萎えますね^^;
100個の企画のうち、
5 個が「一発OK、どんどん募集されたし」
50個が「アドバイスしたら改善された。さぁ募集されたし」
45個が「救えない、アドバイスしても改善されない」
くらいなら、まぁまぁやりがいがある気がします。
...が、たいちうさんの仰るとおりの結果になるかもしれません^^;;
# ぽこさん
> 無駄無駄無駄ァ
ブルルルルァでございます。
> 聞く耳持たない人間にレビューなんて馬耳東風以外何者でもない気がします。
これは仰るとおり。
問題は、たいちうさんも仰っている、その「割合」だと思うんですよね...
> 一番大切なのは企画者に心得を身につかせることだと思うんですよ。
そうですね。
「聞く耳を持っている人」ならば、レビュワーとのやり取りを通して、
心得を身に着けてもらえると思うんですよ。
問題は、「聞く耳を持たない人」ですね。
「ゲームを通じて学ばせる」ってのは...どうなんでしょうw
(ぽこさんも冗談で書いているのでしょうが、)
マンガ家を描いたマンガ「燃えよペン」...だったかな?
あれを読んだら、マンガ家になれますかねwwww
あと「e-learning」は...
模範解答が流れて終了な気がしてしまいます...。
もしそうなると、「規約でしばる」のと同程度の効果しかなくなってしまいます。
661ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(43,006ポイント)
Date: 2010/08/12(木) 12:51
No:58761
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
# 長すぎて投稿できないので分けました。
# ISLeさん
> プレゼンは良い案だと思うのですが、企画内容を秘密にしたいという企画者さんに対してはどのように対応するのでしょう。
> 漏らさないことを信じるしかないのでしょうけれどトラブルがあったときが心配です。
これ、募集系のスレを見たときに、いつも疑問に思うんですけど、
なんで企画内容を秘密にしたまま、メンバーを募集する人って
あんなに多いんでしょう。
「内容は、メンバーが集まってから考えます」とか
平気で書く人もいますよね。自分は何がしたいんだと。
...というスタンスなので、
基本、秘密にはしないでください、と言うつもりなんですが、まずいですかね。
企画内容がバレてまずいのは、
プロがビジネスの中でやるような場合はそうでしょうけど、
フリーゲームなんぞでは、むしろオープンにして
不特定多数の人から意見をもらうように仕向けたい、という気がします。
> 何もできないという企画者さんには「ゲームが完成したと仮定して、
> そのゲームの取扱説明書と完全攻略本を作る」という仕事を与えると良いです。
これは良いですね。
実は私も「求人」のスレで
・仕様決めの段階で、ゲームの取扱説明書が作成できますか?
っていう質問をザッソウさんに投げかけました。
見事にスルーされましたけども^^;
> グラフィックやサウンドは専任にしないほうが良いと思います。
> 単発での発注にしてookamiさんのサイトで仲介したものは基本的にフリー素材として
> 扱うような形にするとプロジェクトがポシャった場合にも無駄にならないのではないでしょうか。
これも良いアイデアですね^^
なんとなくですけど、制作って
@「プログラム」
A「シナリオ」
B「グラフィック」および「サウンド」
のグループで、
何かこう、違った文化というか、
扱いが異なる気がしていたんです。
「シナリオ」がたちが悪いという話を時々聞くんですけど、
皆さんどう思いますか?
# Mistさん
> テンプレ作ってチェックつけさせるで十分な気がします。
> 募集のときにテンプレ項目に対して、具体的にどうするかを明示させるようにして
> そういう記載がない募集に対しては、応募しないように呼びかけるのがコストパフォーマンス的に最良な気がします
なるほど、
「つもり!」かどうかは、明示された内容を、応募者が見て判断してくださいということですね。
> レビューでどこまで見るかにもよりますが、詳細な仕様書が必要ということにするのであればISLeさんの言うように守秘義務の問題が発生しますね。
うーん、
ここで言うレビューの目的は、
「この先メンバーを募集してよいか、客観的に判断すること」であって、
「仕様書がちゃんとできているかどうか」を判断するために、仕様書(あるいは、ISLeさんが仰っていたように「取扱説明書」)を
開示してもらう必要があるだろうな、と、思っています。
個人的には、
「レビュワーは、むやみにばらさないで下さい」と、レビュワー向けの規約に書いて、
法的縛りまでは必要ないんじゃないか...と思っています。
そうすると、
integ全体として、「扱うのはフリーゲームに限ります」とした方が、
トラブルは減るかもしれませんね。
あと、昨日「レビュワーの実力の評価方法、およびその評価結果が
公開されている必要もあると思います。」とのご意見をいただいて、
「じゃぁ例えばvectorはその辺どうしてるんだろう」と疑問に思ったんです。
http://www.vector.co.jp/ (一応URLをば)
軽く探した感じでは、公開されていない...?ように思えたので、
さきほどvectorレビューご担当者さんにメールで聞いてみました。
返事がきたら、ご報告しますねw
--
皆様、お返事ありがとうございます。
まだ「解決!」にはしないでおきますので、
よろしくお願いいたします。
がくせいさん
> 良い人を見つけましょう
> そうすれば万事解決
拝啓 お返事、ありがとうございます。謹んでスルーさせていただきます。KEI☆GU 
898ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(15,741ポイント)
Date: 2010/08/12(木) 13:58
No:58763
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
先日、「求人2」トピでは失礼いたしました。
これからは、誤解を与えないようややこしい表現は避けたいと思います。
-----------------------------------------------------------------------------
>なんとなくですけど、制作って
> @「プログラム」
> A「シナリオ」
> B「グラフィック」および「サウンド」
>のグループで、
>何かこう、違った文化というか、
>扱いが異なる気がしていたんです。
>
>「シナリオ」がたちが悪いという話を時々聞くんですけど、
>皆さんどう思いますか?
@は仕様、システムと置き換えて、「扱い」という視点から考えると、自分の意見では
@が良ければAとBは多少は妥協できる
Aが良ければBは妥協できる@はそれほど妥協することはできない
Bは真ん中以上なら「可」
そんな感じですかね。
制作した経験は殆ど無いですが、グラフィックとサウンドは並くらいの質ならまぁいいんじゃないかと考えられる気がしますね。
質問の意図に添えてなければすみません。
2倍のポイントを手に入れた! 456ポイント を手に入れた。
|
|
|
|
|
Name: ライス ..初心者(6,455ポイント)
Date: 2010/08/12(木) 14:17
No:58765
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
企画者さんに実技試験みたいなものを受けてもらうのはどうでしょうか。
例えば…
○○○さん(誰か協力的で知識と経験のある方)と、
この素材(適当なフリー素材を数種類)を使って5日でシューティングゲームの1面を作りなさい。
ただし○○○さんは実際にプログラムを組むだけで、
全ての指示を自分で行いなさい。
というような実技試験を企画者さんに受けてもらいます。
そしてその途中経過をすべて掲示板に報告してもらい、
実際に企画者さんと組んで思った事などを○○○さんに聞きます。
(後、報告に偽りがないかの確認も)
そして最後に、
完成したゲームをレビュワーやその他の人に遊んでもらい評価をしてもらいます。
そして最終的には、
それらの総合評価から企画者ととして適任かを判断する。
というような事を思ったんですが、
○○○さんのポジションになってくれる人がいるかどうか^^;
そして「そんなテスト受けてられるか!」
と、投げ出す人がいるのではないかという事が心配ですね^^;
また個人的にはゲームももちろん評価しますが、
完成品よりその過程を重要視する感じの方がいいかなぁと思っています。
制作過程 : 完成品 = 3 : 1
ぐらいで…。
461ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(43,197ポイント)
Date: 2010/08/12(木) 18:03
No:58780
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
# DecentLoveさん
すいません、
ちょっと私があっさり書きすぎていましたね^^;
@ABの「違い」とは、「質の違い」ではなくて、以下のようなことです。
※ もちろん、私の個人的な印象です ※
@「プログラマ」
プログラマは、一通りバグが取れるまでは、周りの人から見たら進捗具合が分からない。
プログラマ自身も、「あと3日ぐらいかな」と思っても、思いがけないバグに直面して、
結局終わらないことがある。
そのバグが致命的だった場合、イチから作り直すハメになることも。
しかもプログラマ以外の多くの人には、その苦悩がさっぱり分からない。
プログラマは、プログラマのそういう事情をよく知らないメンバーとケンカする可能性が高く、
そのせいでプロジェクトを抜けてしまうことがある。
引き継がれたプログラマは、元のソースコードがぐちゃぐちゃだと、
結局イチから作りなおすハメになる。
その「ぐちゃぐちゃ」というのは、プログラマにしか理解できない。
プログラマの特性を知らないメンバーは、「続きから作れば?」といったことを
平気で言うが、多くの場合、それは不可能。
プログラマは、なぜかプロジェクトが頓挫しても、
「スキルアップになったからいいか」と考える人が多い気がする。
A「シナリオ」
「プログラマ」「シナリオ」「グラフィック」「サウンド」の中では、もっとも敷居が低い。
中には、「プログラムも絵も曲もできないからシナリオやります」みたいな、消去法な人もいる。
そういう人に限って、ケンカしたわけでもないのになぜか途中で止めてしまう人が多い気がする。
「プログラマ」よりは、周りの人から見た進捗確認がラク。
プロジェクトが頓挫した場合、作りかけのシナリオを
別のところに持っていって、使いまわす人がいる。
というか、持って言った先が「シナリオ先行な進め方」をしていた場合、
割とそれがまかり通ってしまう。
B「グラフィック」および「サウンド」
「プログラマ」の次に敷居が高いが、
意外にクオリティ高いフリー素材屋さんも多い。
具体的にお願いすれば、見ず知らずの人でも
かなりのクオリティのものを作ってもらえることが多い。
進捗確認がラク。
(絵なら一目で、下書き段階なのか、塗り段階なのか分かる、という風に。)
ただ、企画者が決めた「イメージ」に沿って作るため、プロジェクトが頓挫すると、
せっかく作ったものを別のプロジェクトに使いまわすようなことができない。
...といったことです。
まぁ偏見...ですね。そんなに多くの人と接したわけでもないので...。
とにかくまぁ、そういった「特性」を踏まえながら、
(私の認識が間違っていたらそれを修正しながら)
integ も作っていかないといけないな、と思うわけです。
# ライスさん
企画者さんに実技試験...ですか。たしかに、本格的にはじめる前に、
小規模なプロジェクトをこなす、というのはいいですね。
ザッソウさんのスレでも、
あと何ヶ月か前の、ジジ猫さんのスレでも、
「まずは小規模にやってみたら?」という意見があった気がします。
> 制作過程 : 完成品 = 3 : 1
というのも、何というか、分かる気がします^^
少なくとも、「結果よりも過程を大事に」というのは同感です。
小規模なプロジェクトを「義務付ける」かどうかは微妙ですが、
「小規模かどうか」は、そのプロジェクトが成功(完了)するかどうかの
判断材料のひとつになりますから、何かしら、考えてみる必要がありそうですね。
191ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(12,591ポイント)
Date: 2010/08/13(金) 00:59
No:58825
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
> なんとなくですけど、制作って
> @「プログラム」
> A「シナリオ」
> B「グラフィック」および「サウンド」
> のグループで、
> 何かこう、違った文化というか、
> 扱いが異なる気がしていたんです。
実際のゲーム制作では、「企画・進行」という土台の上にあるんですよね。
「企画・進行」がどんなことをするのか不透明というかほとんど知られていないのが原因ですね。
> 「シナリオ」がたちが悪いという話を時々聞くんですけど、
> 皆さんどう思いますか?
「シナリオ」の仕事はまずプロットがあってテキストを起こしてデータの打ち込みとなると思います。
良い脚本書けてもそのままゲームに使えないわけで、脚本書いた人がゲーム用のフォーマットに打ち直したりするのは嫌がるというかそもそも無理というか。
「シナリオ」の企画レベルと実装レベルは別物と考えたほうが良いと思います。
小説なんかはイメージボードと同じです。
企画者さんの力を測るなら「テトリス」の取扱説明書を書いてみせろというのが良いのではないでしょうか。
どこかからコピーしてきたとしても、ゲーム制作ではそういうものを準備する必要があるのだと認識させることができるだけで良いと思います。
277ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(28,437ポイント)
Date: 2010/08/13(金) 10:53
No:58848
|
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
> # ぽこさん
> 問題は、「聞く耳を持たない人」ですね。
> 「ゲームを通じて学ばせる」ってのは...どうなんでしょうw
> (ぽこさんも冗談で書いているのでしょうが、)
ゲームの内容はともかく、「ゲームを通じて学ばせる」っていうコンセプトは
大真面目な提案です(でした。。。)。
相手がゲームだと取っ付き易いと思いますので。
> あと「e-learning」は...
> 模範解答が流れて終了な気がしてしまいます...。
> もしそうなると、「規約でしばる」のと同程度の効果しかなくなってしまいます。
クイズ形式で4択問題、計10問とかにして、全問正解しないとツールが使えない、
模範解答は流れない、という仕様にすればいいのかな?と思います。
んで、ツール(Webページ)にアクセスすると、一定の割合でゲームに飛ばされ、
クリアしないとツールを使えない状態にする。
問題はもしかすると前と違う問題かもしれない。
とすればある程度主体的に取り組めるのかな?と思います。
216ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(43,707ポイント)
Date: 2010/08/14(土) 09:23
No:58938
| 解決!
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
# ISLeさん
> 「シナリオ」の仕事はまずプロットがあってテキストを起こしてデータの打ち込みとなると思います。
> 良い脚本書けてもそのままゲームに使えないわけで
「プロット」→「テキスト」までは、ライターの仕事で、
「テキスト」→「データ」は、スクリプタの仕事ってことですね?
実際のところは、ライターはスクリプタを兼ねることが多いんじゃないでしょうかね。
大規模なプロジェクトなら、担当を分けるのかもしれませんが...
> 企画者さんの力を測るなら「テトリス」の取扱説明書を書いてみせろというのが良いのではないでしょうか。
企画者はいやがるんでしょうね^^;
自分の企画を進めたいのに、わざわざ別のゲームの説明書を書かせるわけですから...
ただ、力量を測るために
皆が知っているゲームの説明書を書かせる、というのは、
確かに良いのかも... 場面に応じて使わせていただきます^^
# ぽこさん
> 「ゲームを通じて学ばせる」っていうコンセプトは
> 大真面目な提案です(でした。。。)。
> 相手がゲームだと取っ付き易いと思いますので。
あら...大変失礼しました...^^;
企画者が「心得を習得する」事を「とっつきやすくする」、というのは
確かに必要だと思います。
ただ、これをゲーム化するとなると、
シナリオを書くのに、けっこうな経験が必要になると
思うので、すぐには無理かも... もうちょっと後の目標にしたいと思います。
--
皆様、たくさんのご意見ありがとうございました。
課題もいくつか見えてきて、スレ立てして本当によかったです。
この辺で「解決!」としたいと思います。
ありがとうございました^^
2倍のポイントを手に入れた! 510ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(43,920ポイント)
Date: 2010/08/16(月) 20:14
No:59122
| 解決!
|
Title: Re:【雑談】危ない企画を抑止するための機能
|
|
「解決!」にしましたが、追記です。
ベクターのレビューご担当者さんから
お返事が来ました。
> お問い合わせいただきました件、
>
> ●弊社内の複数の担当者が実際に試用し、機能性・操作性の面から、弊社サイト
> のご利用者様にお勧めできる水準に達していると判断したソフト
>
> とさせていただいております。
とのことでした。
これを受けて、「ベクター レビュー 弊社 複数 担当者」でググってみたら、
http://www.vector.co.jp/for_authors/upload/faq.html
というのがあったので、まぁ公式の見解なんですね。
(なので、この掲示板にも遠慮なく転載しました。)
# なお、このFAQ、サイトのどこからリンクしているのか分からず...
# そこまで追加問い合わせするのは気が引けたので、聞いてませんが...
まぁ、「総合的に判断します」というような内容で、
判断基準の明確化や公開はしていない、ということです。
ジャンルも様々だし、基準は決められないのも
しかたないものと思います。
ということで。ご参考まで。
213ポイント を手に入れた。
|
|
|
|
Name: taketoshi ..ぴよぴよ(588ポイント)
Date: 2010/08/16(月) 17:28
No:59110
|
|
Title: エディットコントロールでリターン押した時に鳴るビープ音について
|
|
こんにちは。
現在エディットコントロールから数値を入力して
リストビューコントロールに反映させるプログラムをWINAPI32を使って書いています。
エディットコントロールをサブクラス化してVK_RETURNを捕まえて
データ格納用の構造体に数値を格納して、リストビューに随時反映させているのですが
数値入力の度にビープ音が鳴ってしまいます、これを何とかしたいです。
ググった所、ES_AUTOVSCROLLをCreateWindowの時に指定すれば問題ないとあったのですが
指定してもビープ音が鳴ってしまいます。
解決方法と、そもそもこのビープ音はなんの為に鳴っているのか。
どなたかご解説お願いいたします。
192ポイント を手に入れた。
|
|
|
|
Name: taketoshi ..かけだし(1,321ポイント)
Date: 2010/08/16(月) 17:44
No:59112
|
|
Title: Re:エディットコントロールでリターン押した時に鳴るビープ音について
|
|
int listinput() //リストビューへの登録
{
static char szBuff[64],szItem[64];
static int i = 0, no_item = 0,count = 1;
int no_sub = 0;
float nConversion;
hMem = GlobalAlloc(GHND,sizeof(DATA) * i+1);
data = (DATA *)GlobalLock(hMem);
GetWindowText(hEdit,szBuff,64);
data[i].count = count;
nConversion = atof(szBuff);
data[i].tubo = nConversion*10.764;
SetWindowText(hEdit,"");
item.mask = LVIF_TEXT;
wsprintf(szBuff,"%d",data[i].count);
item.pszText = szBuff;
item.iItem = no_item;
item.iSubItem = no_sub;
ListView_InsertItem(hList,&item);
no_sub++;
sprintf(szItem,"%f",data[i].tubo);
item.pszText = szItem;
item.iItem = no_item;
item.iSubItem = no_sub;
ListView_SetItem(hList,&item);
i++;
count++;
no_item++;
return 0;
}
LRESULT CALLBACK EditProc(HWND hEdit,UINT msg,WPARAM wParam,LPARAM lParam) //エディットコントロールサブクラス化
{
switch(msg)
{
case WM_CHAR:
{
if(wParam == VK_RETURN)
{
listinput();
}
break;
}
}
return CallWindowProc(OldEditProc,hEdit,msg,wParam,lParam);
}
汚くてアレなんですが・・・
リストビューへの登録とサブクラス化のコードです。
エディットコントロールのCreateとサブクラス化はWM_CREATEの時に実行しています。
733ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(49,973ポイント)
Date: 2010/08/16(月) 18:31
No:59117
|
|
Title: Re:エディットコントロールでリターン押した時に鳴るビープ音について
|
|
msdnの説明によると、ES_MULTILINEスタイルの指定のところで、
下記の説明が記載されています。
ES_MULTILINE 複数行エディット コントロールを指定します。
既定では単一行のエディット コントロールが指定されます。
ES_AUTOVSCROLL スタイルが指定されていると、エディット コントロールは、
できるだけ多くの行を表示し、ユーザーが Enter キーを押したときに垂直方向にスクロールします。ES_AUTOVSCROLL が指定されていない場合、
エディット コントロールは、できるだけ多くの行を表示しますが、
それ以上行を表示できなくなったときにユーザーが Enter キーを押すと、ビープ音を鳴らします。
参考になりますでしょうか?
209ポイント を手に入れた。
|
|
|
|
|
Name: taketoshi ..かけだし(1,424ポイント)
Date: 2010/08/16(月) 19:50
No:59121
| 解決!
|
Title: Re:エディットコントロールでリターン押した時に鳴るビープ音について
|
|
シエルさんありがとうございます。
ES_MULTILINEとES_AUTOVSCROLLを同時に指定したところビープ音が消えました。
ビープ音はこれ以上入力できませんの合図だったんですね。
非常に勉強になりました。
ありがとうございました。
103ポイント を手に入れた。
|
|
|
|
Name: 南瓜 ..上級者(17,035ポイント)
Date: 2010/08/14(土) 11:44
No:58941
|
|
Title: 五目並べを作っているんですが…
|
|
いつもお世話になっています。 南瓜です。
まず最初に、前回のポーカーで一応?完成したのに
ちゃんとしたお礼を言ってなかったと思うので…
ポーカーのプログラムでアドバイスを下さった皆さんありがとうございますm(_ _)m
で、今回は五目並べを作っているのですが
勝敗を決める所がうまく出来ずにいます
どちらかが一手を入力すると勝敗がついてしまいます
原因は
if(r != 0) {
break;
}
とint judge (void) {以降の所がうまく処理出来ていないからだと考えているのですが
どのように改善すればいいのか判らないのでアドバイスをお願いします
いつも通りソースはテキストファイルに貼付けますが
Macは文字化けするんですが、windowsは文字化けするときしないとき
があってそうなる基準がよく判りません
これはC言語と関係ないですが、解決策が判る方お願いします
203ポイント を手に入れた。
|
|
|
|
Name: 蓮 ..入門者(4,713ポイント)
Date: 2010/08/14(土) 13:17
No:58943
|
|
Title: Re:五目並べを作っているんですが…
|
|
>>判定の件
出先で時間がないので間違えてたらすみません。
簡単にソースを作ってみました。
下記のソースでは配列のアクセスしてはいけない位置にも
アクセスしてしまうので範囲をもう少し小さくするか改良をしてください。
counterなる変数を用意して隣が白なら+1します
この変数の値が5になると一列揃ったことになります。
又、斜め等の判定は書かないでいいのでしょうか?
// 白 横のみの判定 (かなり非効率なのでもう少し改良してください。)
int judge (void) {
int i, j;
int counter = 0;
bool winFlag = false;
/*横方向チェック*/
for(i = 0; i <= BOARD; i++) {
for(j = 0; j <= BOARD; j++) {
if(board[i][j] == WHITE) counter++;
if(board[i][j+1] == WHITE) counter++;
if(board[i][j+2] == WHITE) counter++;
if(board[i][j+3] == WHITE) counter++;
if(board[i][j+4] == WHITE) counter++;
if(counter == 5) winFlag = true;
else{
counter = 0;
winFlag = false;
}
}
}
}
>>文字化けの件
文字コードの問題かと思います。
Windows標準のメモ帳ではShift-JISが初期なのに対して
MacではUTF-8(BOM無?)だったかと思います。
文字化けで十字架みたいなのが出てしまっていたら改行コードも違うかもしれません。
LF+RF等
アクマで意見ですので参考程度にしてください。
384ポイント を落としてしまった。
|
|
|
|
|
Name: 南瓜 ..上級者(17,406ポイント)
Date: 2010/08/14(土) 23:19
No:58973
|
|
Title: Re:五目並べを作っているんですが…
|
|
返信ありがとうございます。
ですが、変数counterを使った書き方だと、自分の書き方が悪かったために
自分と相手両方が入力する度にカウントされてしまうのと
ボードの範囲内に押さえるのが出来なかったため
int j_maru = board[p_j-1][p_i-1];/*揃ったかどうか判定するマーク*/
for(i = 1; i <= LINE; i++) {
if(board[p_j-1][i-1] != j_maru) { r = 0; break; }
}
if(r) { return 1; }
の所をfor(i = 1; r = 1; i <= LINE; i++) {
にして5列分全部同じマークだったらreturn 1を返す
と言う風にしたいのですがr = 1;を書き足すと
gomoku.c: In function ‘judge’:
gomoku.c:232: error: syntax error before ‘;’ token
gomoku.c:232: error: syntax error before ‘)’ token
gomoku.c:233: error: break statement not within loop or switch
gomoku.c: At top level:
gomoku.c:234: error: syntax error before ‘}’ token
とエラーが出てしまいます。
breakがループ内やスイッチ文内で使われていません
とは r の初期化の書き方が悪いためにbreakが機能しないと言うことですか?
ソースの貼付けに使うテキストエディタの環境設定のHTML保存オプションを見ると
エンコーディングが 日本語(Shift JIS)となっているのですが
見る所が違うのかな?
371ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(156,975ポイント)
Date: 2010/08/14(土) 23:31
No:58974
|
|
Title: Re:五目並べを作っているんですが…
|
|
> for(i = 1; r = 1; i <= LINE; i++) {
;(セミコロン)が3個登場してはいけません。2個です。
25ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(17,543ポイント)
Date: 2010/08/15(日) 10:51
No:58995
|
|
Title: Re:五目並べを作っているんですが…
|
|
気づかなかったorz ありがとうございます
これで、勝敗がうまくつくと思ったんですが
やっぱり一手入力した方が勝ちに成ってしまいます
judgeの戻り値が行けないのか mainの書き方が悪いのか
それともそれ以外なのか ちょっと検討がつきません
原因が判る方アドバイスをお願いします
137ポイント を手に入れた。
|
|
|
|
|
Name: h2so5 ..ぴよぴよ(632ポイント)
Date: 2010/08/15(日) 11:16
No:58997
|
|
Title: Re:五目並べを作っているんですが…
|
|
/*あいこ*/
for(j =1, r = -1; j <= LINE; j++) {
for(i = 1; i <= LINE; i++) {
if(board[j-1][i-1] == 0) { return 0; } //←変更箇所
}
}
が正しいのではないでしょうか。
マスに空きがまだあった場合は継続しないといけないので0を返さなくてはいけないはずです。
あと思ったんですが一々マスを全部検査するより、
プレイヤーとコンピュータが打った数を記録してマスの数と等しくなったら引き分け、
という処理のほうが簡単なのでは?
224ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..初心者(8,747ポイント)
Date: 2010/08/15(日) 11:38
No:58998
|
|
Title: Re:五目並べを作っているんですが…
|
|
× 検討がつかない
◎ 見当がつかない
正しい日本語を使おうではありませんか。
41ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(194,351ポイント)
Date: 2010/08/15(日) 12:38
No:59004
|
|
Title: Re:五目並べを作っているんですが…
|
|
今までの南瓜さんのやりとりを見ていて思ったんですが、一度ちゃんとデバッグする技法を身につけられた方が良いかと思いまして書かせてもらいます。基本的な技法としては、思ったルートを通っているかデバッグ用のprintfを埋め込みます。
例えば、
>judgeの戻り値が行けないのか mainの書き方が悪いのか
>それともそれ以外なのか ちょっと検討がつきません
と書かれていますので、どのルートを通っているか自信がないんだと思いますが、
r = judge();
if(r != 0) {
break;
}
の所を
r = judge();
if(r != 0) {
printf( "break r=%d\n,r);
break;
}
と書けば、break;で抜けたことが分かります。
あとは、judgeの中の
/*横方向チェック*/
for(i = 1, r = 1; i <= LINE; i++) {
if(board[p_j-1][i-1] != j_maru) { r = 0; break; }
}
if(r) { return 1; }
とかを
/*横方向チェック*/
for(i = 1, r = 1; i <= LINE; i++) {
if(board[p_j-1][i-1] != j_maru) { r = 0; printf("横方向break borad[%d][%d] != %d\n",p_j-1,i-1,j_maru); break; }
}
if(r) { printf("横方向return 1;\n"); return 1; }
などとすればjudgeされた条件も分かります。
闇雲にやるよりプログラムの学習になると思いますので、ぜひ試されることをお勧めします。それに、回答者もバグ原因が追求しやすくなります。
2倍のポイントを手に入れた! 1,092ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(17,712ポイント)
Date: 2010/08/15(日) 16:41
No:59020
|
|
Title: Re:五目並べを作っているんですが…
|
|
h2so5さん> 勝敗がすぐつく原因はそこでしたorz
コンピューターの入力を改良するのと同時に少しずつ
改良して行きます
初級者さん> どうもプログラムに限らずこの手のミスが多いな…
softyaさん> printfを使ってどのように処理されているかを確認するのがデバッグなんですね
確かにこれなら何処でうまくいってる、いってないがすぐ確認できますね
これからのプログラムの学習に役立てます!
5列揃ったら勝敗がつくようになりましたが
コンピューターの入力がランダムなのを改良するのに
また詰まりそうなので解決はまだ押さないでおきます
169ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(17,969ポイント)
Date: 2010/08/16(月) 14:32
No:59089
|
|
Title: Re:五目並べを作っているんですが…
|
|
デバッグの方法はいろいろあるんですね
自分はまだまだ未熟なんで、そんな恐ろしいバグに遭遇したくないですね^^;
コンピューターの入力パターンは、今の所リーチを阻止するくらいで
まだまだ弱いんですが、これを強くするのに調べた所
ミニマックス法やゲーム木などを勉強した方がいいなと思ったんですが
これらの理論はボードゲームはこれ、パズルゲームはあれみたいに決まっているのか
作りたいゲームに合わせてよって使い分けているのか、どうなんでしょうか?
五目並べというよりボードゲームでコンピューターを強くするには
どの理論を勉強した方がいいですか?
あと、関係ないんですがMacではDXライブラリが使えなかったと
思うので、類似の性能を持つものってありますか?
vectorで調べたんですが一杯ありすぎてどれを使えばいいのか
よくわかりませんでしたorz
257ポイント を手に入れた。
|
|
|
|
|
Name: 南瓜 ..上級者(18,024ポイント)
Date: 2010/08/16(月) 19:01
No:59118
| 解決!
|
Title: Re:五目並べを作っているんですが…
|
|
なるほど、複合させて使い分けて行くんですね
少しずついろんな理論を勉強していこうと思います
そうですか。ライブラリの件は、また別にスレを立てようと思います
コメント下さった皆さんありがとうございます!
55ポイント を手に入れた。
|
|
|
|
Name: IDO ..ぴよぴよ(658ポイント)
Date: 2010/08/16(月) 17:17
No:59109
|
|
Title: math.hからエラー
|
|
前回ここに書き込んだのですが解決しなかったのでもう一度・・・
龍神録第17章まで進んでいたのですが、開発環境を移しVS2005Proから
VisualStudio2008Expに移しました
いざコンパイルしてみるとmath.hが大量のエラーを吐きます
ググってもコレといった解決が見つからず、一度VS2010にしたので
それが原因かと思って2008Exにしてみたのですがやはり駄目・・・
エラーの内容は非常に長くなるためここには貼れませんが、
識別子が見つかりませんというエラーがmath.hの関数分出てしまっているようです
何か分かる方はお願いします
2倍のポイントを手に入れた! 290ポイント を手に入れた。
|
|
|
|
Name: Mist ..比類無きプログラマー(85,370ポイント)
Date: 2010/08/16(月) 17:54
No:59113
|
|
Title: Re:math.hからエラー
|
|
math.hをインクルードしている行の一つ上の行に間違いがないか確認してください。
一つ上の行が別のヘッダファイルのインクルードの場合、そのヘッダファイル内に間違いがないか確認してください。
68ポイント を手に入れた。
|
|
|
|
|
Name: IDO ..ぴよぴよ(689ポイント)
Date: 2010/08/16(月) 18:20
No:59116
| 解決!
|
Title: Re:math.hからエラー
|
|
!!
解決しました、ありがとうございました!
構造体宣言の;付け忘れが原因でした・・・
31ポイント を手に入れた。
|
|
|
|
Name: kei ..かけだし(1,592ポイント)
Date: 2010/08/16(月) 15:45
No:59101
|
|
Title: WM_COMMANDなどの意味について
|
|
いろいろとネットで調べたのですが答えが見つからなかったので質問させていただきます。
ウィンドウプロシージャなどでWM_COMMANDやWM_INITDIALOGなどよく見かけますが
他にもどのようなものがあるのか探してみたら
・WM_CTLCOLORDLG
・WM_CTLCOLORSTATIC
・WM_CTLCOLORMSGBOX
・WM_INITDIALOG
などたくさんあることがわかりました。
これらの意味を知ろう思ってネットで検索などしてもあまり見つかりませんでした。
何かこれらの一覧表のようなもので意味が解説されているようなサイトなど
ご存じの方はいらっしゃいますか?
75ポイント を手に入れた。
|
|
|
|
Name: kei ..かけだし(1,717ポイント)
Date: 2010/08/16(月) 16:15
No:59106
| 解決!
|
Title: Re:WM_COMMANDなどの意味について
|
|
教えていただきありがとうございました。
こんなにたくさんあるんですね。
マイクロソフトも日本語一覧表とか出せば理解者が増えると思うのですが
英語だけでしたね。
あまりマイナーなのはほとんど使われることもないということなのでしょうか。
早く返信をしていただきありがとうございました。
125ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..熟練のプログラマー(51,068ポイント)
Date: 2010/08/16(月) 14:09
No:59086
|
|
Title: ポインタ?
|
|
はじめまして。
ポインタを使用すれば何とかなりそうなのですが、散々悩みましたが分かりませんので質問いたします。
例えば、
unsigned long A;
unsigned short B[5];
A=0xF40000;
B[0]=1;
B[1]=2;
B[2]=3;
B[3]=4;
B[4]=5;
と仮定します。
その時、Aをアドレスとする番地にB[0]を、また、(A+1)のアドレスにB[1]を、・・・
という感じで、データを書き込みたいのですが、どのようにすれば巧くいきますでしょうか?
初期的な質問かもしれませんが、散々悩みに悩み、巧くいかず困っております。
申し訳ありませんが、よろしくお願いいたします。
228ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(195,509ポイント)
Date: 2010/08/16(月) 14:35
No:59090
|
|
Title: Re:ポインタ?
|
|
unsigned char *A;
unsigned char B[5];
int i;
A=0xF40000;
B[0]=1;
B[1]=2;
B[2]=3;
B[3]=4;
B[4]=5;
for( i=0 ; i<5 ; i++ ) {
a[i] = b[i];
}
ってことかな?
ちなみにバイト単位の書き込みなので、変数のサイズもunsigned charにしてあります。
141ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..熟練のプログラマー(51,181ポイント)
Date: 2010/08/16(月) 14:46
No:59091
|
|
Title: Re:ポインタ?
|
|
softyaさん
ご回答有難うございます。
私も初めはそれでよいかと思って試したのですが、どうしても、
A=0xF40000;
の箇所で
invalid '=' operand
というエラーが出てしまうので、困っております。
95ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..熟練のプログラマー(51,233ポイント)
Date: 2010/08/16(月) 15:40
No:59099
| 解決!
|
Title: Re:ポインタ?
|
|
softyaさん、toyoさん
有難うございました。
お二人のいうやり方で、どちらでも通りました。
大変助かりました。
有難うございました。
52ポイント を手に入れた。
|
|
|
|
Name: 馬鹿 ..ぴよぴよ(283ポイント)
Date: 2010/08/15(日) 12:19
No:59001
|
|
Title: 最短距離までの道を表示
|
|
スタートとゴールを入力したら
ゴールまでの最短距離を調べて、その行き方を表示するプログラムを作りたいんですがわかりません。
上下右左の四方向に進むプログラムはわかったんですが、右上、左上、右、左、右下、左下の六方向に進むプログラムが作れません。
ご教授お願いします。
#include <stdio.h>
int main(void)
{
int startx,starty,goalx,goaly;
int x,y,a,b;
printf("スタートx:");
scanf("%d",&startx);
printf("スタートy:");
scanf("%d",&starty);
printf("ゴールx:");
scanf("%d",&goalx);
printf("ゴールy:");
scanf("%d",&goaly);
x=goalx-startx;
y=goaly-starty;
for(a=1;a<=x;a++)
{
if(x>0)
printf("右");
else if(x<0)
printf("左");
}
for(b=1;b<=y;b++)
{
if(y>0)
printf("下");
else if(y<0)
printf("上");
}
return (0);
}
283ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..プログラマー(32,419ポイント)
Date: 2010/08/15(日) 12:28
No:59002
|
|
Title: Re:最短距離までの道を表示
|
|
このプログラム、上もしくは左に行くの?
右と下しか表示されませんでした。
左のときと下のときはfor文の条件に当てはまらないからループしませんよ…
まずはそれからな気がします。
94ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..プログラマー(32,602ポイント)
Date: 2010/08/15(日) 12:49
No:59005
|
|
Title: Re:最短距離までの道を表示
|
|
こんなのどうですか?
壁の設定がないならですけど…
x=startx;
y=starty;
while(goalx!=x || goaly!=y){
if(x<goalx){
printf("右");
x++;
}else
if(goalx<x){
printf("左");
x--;
}
if(goaly<y){
printf("下");
y--;
}else
if(y<goaly){
printf("上");
y++;
}
printf("\n");
}
左下を(1,1)とした場合ですけど…

183ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿 ..ぴよぴよ(402ポイント)
Date: 2010/08/15(日) 13:27
No:59007
|
|
Title: Re:最短距離までの道を表示
|
|
うぅ
すいません
盤面の定義は
左がx軸で右がy軸で
0,0 1,0 2,0 3,0 4,0
0,1 1,1 2,1 3,1 4,1
0,2 1,2 2,2 3,2 4,2 ・・・
・
・
・
という続いてく四角い盤上です
>このプログラム、上もしくは左に行くの?
すいません一回だけ調べて完成した気になってました
119ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(35,411ポイント)
Date: 2010/08/15(日) 16:17
No:59019
|
|
Title: Re:最短距離までの道を表示
|
|
つまり、
xy平面上(x >= 0、y >= 0)の格子点から任意の2点を選んでstart、goalとし、
その2点間の最短ルートを上、下を除いた6方向を使って表せ。
ということでいいのでしょうか?
また、そうなら、
全ての最短ルートを表示するのでしょうか、それとも、そのうちの1つを表示すればいいのでしょうか。

81ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿 ..ぴよぴよ(431ポイント)
Date: 2010/08/16(月) 00:37
No:59061
|
|
Title: Re:最短距離までの道を表示
|
|
はい!そのとおりです!
最短ルートは一つでいいです
29ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..プログラマー(33,834ポイント)
Date: 2010/08/16(月) 00:52
No:59063
|
|
Title: Re:最短距離までの道を表示
|
|
上と下を除いた6方向の時点で最短移動ではないですけどね…
そういう仕様なんでしょうけど、たとえばスタートとゴールのx軸の距離(絶対値?)とy軸の距離でy軸の距離のほうが大きい場合、一旦ゴールを通り抜けて戻るという作業(ジグザグに縦に進む)を行って、
ゴールを目指すことになりますよね…
82ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..ハッカー(143,901ポイント)
Date: 2010/08/16(月) 06:10
No:59070
|
|
Title: Re:最短距離までの道を表示
|
|
一番重要な点が明確になってないのですが、障害物はあるのでしょうか?
障害物があるとないとはかなり難易度か変わってきます。
1) 障害物がある場合
敵対探索が必要になります。簡単な探査としてはA*(エースター)探索ですかね。
全探索ではないので手軽です。が、パラメータの設定によって精度がかなり変わってきます。
2) 障害物がない場合
まずどこがスタートでどこがゴールでもスタートが左上、ゴールが右下で対角をなす四角形(※1)で考えると楽です。
レスに書いてあった座標系(第4事象)で考えると、
1,右斜め下に進む
↓
2,四角形(※1)の辺に当たる
↓
3,
x軸と水平な辺:あとはx軸+方向に進むだけ
y軸と水平な辺:一度左斜め下に進み、1に戻る
両方:ゴール
で最短になるかと思います。
おそらく課題は2)のような気がしますが、暇だったんで1)を作ってみました。
DOSからどうぞ。
以下の参考サイトをもろパクリ参考にしました。
正直うまく動いてるのかはわかりませんw
銀のがまぐち亭 A*経路探索
ttp://gingama.hp.infoseek.co.jp/java/a_star.html
#全探索って・・・面倒くさそう。
527ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿 ..ぴよぴよ(455ポイント)
Date: 2010/08/16(月) 07:07
No:59072
| 解決!
|
Title: Re:最短距離までの道を表示
|
|
ありがとうございます!
本当に助かりました!!
24ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(35,913ポイント)
Date: 2010/08/16(月) 14:09
No:59085
|
|
Title: Re:最短距離までの道を表示
|
|
解決してますが、考えてみました。
これでいい...はず。
#include <stdio.h>
#include <math.h>
typedef struct point{
int x, y;
} point;
typedef struct step{
int x, y;
} step;
typedef struct dist{
int x, y;
} dist;
int main(void)
{
point p1, p2;
dist d;
step s;
fputs("Start < ", stdout);
scanf("%d %d", &p1.x, &p1.y);
fputs(" Goal < ", stdout);
scanf("%d %d", &p2.x, &p2.y);
d.x = labs(p1.x - p2.x);
d.y = labs(p1.y - p2.y);
printf("\n(%d, %d)", p1.x, p1.y);
for(s.x = 1, s.y = p1.y > p2.y ? -1 : 1;d.y > 1 && d.y > d.x; d.y -= 2){
printf("->(%d, %d)", p1.x += s.x, p1.y += s.y);
printf("->(%d, %d)", p1.x -= s.x, p1.y += s.y);
}
for(s.x = p1.x > p2.x ? -1 : 1; p1.y != p2.y; ){
printf("->(%d, %d)", p1.x += s.x, p1.y += s.y);
}
for(s.x = p1.x < p2.x ? 1 : -1; p1.x != p2.x; ){
printf("->(%d, %d)", p1.x += s.x, p1.y);
}
putchar('\n');
return 0;
}

502ポイント を手に入れた。
|
|
|
|
Name: tyeiqp21 ..ぴよぴよ(817ポイント)
Date: 2010/08/16(月) 09:11
No:59075
|
|
Title: 文字を流すプログラムで実行時にエラー
|
|
はじめまして。今文字を流すプログラムを作っているのですが、
流す方向を変えたとたん、3文字以上入力するとエラーが出るようになりました。
中断を押してソースを見ると、printfの所の左に矢印がついていました。
これをちゃんと動くようにしてくれませんか?
関数(ヘッダファイル)は僕のコンパイラに標準でついてたらOKです。
お願いします。
//若干無駄な部分がありますが、気にせず削ってかまわないです。
PC:FujitsDeskPowerCE50J7
CPU:AMD Athlon XP 3000+ 2.09GHz
メモリ:512MB
OS:WindowsXpHomeSP3
コンパイラ:VC++2008Express
矢印にマウスオーバーしたときのツールチップ:
「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」
エラーメッセージ:「mozi.exe の 0x1029984f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000063 を読み込み中にアクセス違反が発生しました。」
abcと入力した場合
実行結果:abc(null)
//↑これが表示されたときにエラーメッセージが出ます。
ソースファイル:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
char in[30];
int c, c2,d,sec,more,i,q,w,m = 1;
retry: i = 1;
q = 1;
while(45 >= q)
{
printf(" ");
q++;
}
printf("←\r表示する文字>>>"); //メモリ破壊防止
scanf( "%s", &in );
printf("速さ>>>");
scanf( "%d", &sec );
printf("ok.\n");
c = strlen(in);
c2 = c * 2;
printf("%s", in);
std::string in2( in );
while( c > i )
{
w = i - 1;
while(w != 0)
{
printf("%s",in[c - w]);
fflush(stdout);
w--;
}
printf("%s\r",in[c]);
fflush(stdout);
Sleep(sec);
i++;
}
if(c == i){ printf("%s\r",in);}
fflush(stdout);
Slep(sec);
i++;
while(80 - c > i)
{
w = 0;
while(i - c > w)
{
printf(" ");
fflush(stdout);
w++;
}
printf("%s\r",in);
fflush(stdout);
Sleep(sec);
i++;
}
printf( "\nもう一度しますか?(はい=>1、いいえ=>2)>>>" );
scanf( "%d", &more );
if( more % 2 == 1 )
{
goto retry;
}
printf( "\nBye!!" );
Sleep(1000);
return 0;
}
817ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(49,599ポイント)
Date: 2010/08/16(月) 09:19
No:59077
|
|
Title: Re:文字を流すプログラムで実行時にエラー
|
|
printf("%s",in[c - w]);
fflush(stdout);
w--;
}
printf("%s\r",in[c]);
一瞬しか見てないですけど、このprintfって%sじゃなくて%cでは?
90ポイント を手に入れた。
|
|
|
|
|
Name: tyeiqp21
Date: 2010/08/20(金) 19:47
No:590751282301279
| 解決!
|
Title: Re:文字を流すプログラムで実行時にエラー
|
|
シエルさん、ありがとうございます。
返事が遅くなってしまってすいませんでした。
アドバイスいただいたところを修正すると、きちんと動きようになりました。
|
|
|
|
|
Name: ソラ ..ぴよぴよ(92ポイント)
Date: 2010/08/14(土) 03:52
No:58933
|
|
Title: Re:iPhoneアプリ開発について
|
|
>>Justy様
参考になるサイトをありがとうございます。
>>その順番を覚えておき、起動時に復元すればいいかと
すみません・・・ちゃんと書いておりませんでした。
この順番の取得の仕方がわかりません。
調べてみたのですがそれらしい記事がなくて・・・
81ポイント を手に入れた。
|
|
|
|
|
Name: ソラ ..ぴよぴよ(718ポイント)
Date: 2010/08/14(土) 16:53
No:58947
|
|
Title: Re:iPhoneアプリ開発について
|
|
>>Justy様
参考になるサイトをありがとうございます!!
ただ私では閲覧しただけでは解決することが出来ませんでした・・・
見てみると値が変動しないとnilが入ったままなのですね・・・
一部抜粋なのですが下記のように書いてみました。
しかし値が変動しないです・・・。
ログを見ても[defaults objectForKey:@"SETTINGS"]には値が入っていないので
- (void)deallocで書き込み処理をしているのがまずいのでしょうか?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// タブバー
viewControllers = [[NSMutableArray alloc] initWithCapacity:0];
NSArray *rssURLArray = [NSArray arrayWithObjects:
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
@"http://itpro.nikkeibp.co.jp/rss/ITpro.rdf",
nil];
NSArray *tabBarTitleArray = [NSArray arrayWithObjects:
@"ITpro01"
@"ITpro02"
@"ITpro03"
@"ITpro04"
@"ITpro05"
@"ITpro06"
@"ITpro07"
nil];
/*
NSArray *tabBarIconArray = [NSArray arrayWithObjects:
@"itpro_home.png",
@"itpro_network.png",
@"itpro_security.png",
nil];
*/
RootViewController *tableViewController;
for(int i = 0; i <7; i++){
tableViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
tableViewController.rssURL = [rssURLArray objectAtIndex:i];
tableViewController.title = [tabBarTitleArray objectAtIndex:i];
navigationController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
navigationController.tabBarItem.title = [tabBarTitleArray objectAtIndex:i];
// navigationController.tabBarItem.image = [UIImage imageNamed:[tabBarIconArray objectAtIndex:i]];
[viewControllers addObject:navigationController];
[tableViewController release];
[navigationController release];
}
// 読み込み
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if( [defaults objectForKey:@"SETTINGS"] != nil){
tabBarController.viewControllers = [defaults objectForKey:@"SETTINGS"];
}
NSLog( @"%@", [defaults objectForKey:@"SETTINGS"]);
tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:viewControllers];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
// 書き込み
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:tabBarController.viewControllers forKey:@"SETTINGS"];
[navigationController release];
[tabBarController release];
[window release];
[super dealloc];
}
626ポイント を手に入れた。
|
|
|
|
|
Name: ソラ ..かけだし(1,224ポイント)
Date: 2010/08/15(日) 05:27
No:58982
|
|
Title: Re:iPhoneアプリ開発について
|
|
度々ありがとうございます。
質問ばかりで申し訳ないです><
>>試してはいませんが、多分 tabBarController.viewControllersのままではうまくいかないと思います。
中身を見るとそんな気がするのですが改善案がわかりません・・・。
Justyさんが言う通りUINavigationController(NSArray)が格納されていました。
ただ中身が0x?????? (?は数字) とメモリの番地?が入っている為、
次回では変わってしまいそうです・・・
Justy様から見たら初歩的な事の様な気がするのですが
調べてもわからないのでどうか改善案を教えては頂けないでしょうか?
>>MSMutableArrayに順番がわかるような数値やテキストで入れて、
for分で順番に値をセットしているのですが
defaultsをもって復元できるのでしょうか?
こちらもわからないです・・・
ソース
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:tabBarController.viewControllers forKey:@"SETTINGS"];
[defaults synchronize];
// NSLog( @"%@", [[tabBarController.viewControllers objectAtIndex:1] objectAtIndex:1]);
NSMutableArray *setOrder= [[NSMutableArray alloc] init];
for( int i=0; i<[tabBarController.viewControllers count]; i++){
[setOrder addObject:[tabBarController.viewControllers objectAtIndex:i]];
}
NSLog( @"%@", [tabBarController.viewControllers objectAtIndex:1] );
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
~略~
RootViewController *tableViewController;
for(int i = 0; i <7; i++){
tableViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
tableViewController.rssURL = [rssURLArray objectAtIndex:i];
tableViewController.title = [tabBarTitleArray objectAtIndex:i];
navigationController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
navigationController.tabBarItem.title = [tabBarTitleArray objectAtIndex:i];
// navigationController.tabBarItem.image = [UIImage imageNamed:[tabBarIconArray objectAtIndex:i]];
[viewControllers addObject:navigationController];
[tableViewController release];
[navigationController release];
}
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if( [defaults objectForKey:@"SETTINGS"] != nil){
tabBarController.viewControllers = [defaults objectForKey:@"SETTINGS"];
}
NSLog( @"%@", [defaults objectForKey:@"SETTINGS"]);
tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:viewControllers];
長々とした質問で大変申し訳ないのですが
お手隙の時に回答頂けますと助かります。
506ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(563,246ポイント)
Date: 2010/08/15(日) 17:21
No:59024
|
|
Title: Re:iPhoneアプリ開発について
|
|
>改善案
では手っ取り早い方法として、保存時にタブバーのタイトルを順番に保存してみてはどうでしょう。
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
const int arrayMaxNum = [tabBarController.viewControllers count];
NSMutableArray *titleArr = [[NSMutableArray alloc] initWithCapacity: arrayMaxNum];
for(int i=0; i<arrayMaxNum; ++i)
{
UINavigationController * nvc = [tabBarController.viewControllers objectAtIndex: i];
[titleArr addObject: nvc.tabBarItem.title];
[nvc release];
}
[defaults setObject:titleArr forKey:@"SETTINGS"];
[defaults synchronize];
[titleArr release];
こんな感じでタブバーに表示されている名前が順番に "SETTINGS"に格納されることになります。
あとは起動時にこの情報を元に復元するだけとなります。
復元時には "SETTINGS"配列を頭から順番に中身の文字列を取り出し、[tabBarTitleArray indexOfObject:XXX]を使って
インデックスを求めれば、rssURLArrayや tabBarTitleArrayの何番目の要素を使えばいいのか求められるはずです。
494ポイント を手に入れた。
|
|
|
|
|
Name: ソラ ..かけだし(1,294ポイント)
Date: 2010/08/16(月) 00:13
No:59058
|
|
Title: Re:iPhoneアプリ開発について
|
|
出来ました!!
お忙しいのにソースまで頼んでしまい申し訳ありませんでした。
Justy様のお陰で[defaults synchronize];をしなければならないことや
オブジェクトの扱い方が少しだけわかりました。
本当にありがとうございました!!
70ポイント を手に入れた。
|
|
|
|
|