|
Name: black_cat ..入門者(3,227ポイント)
Date: 2010/10/10(日) 22:51
No:63165
|
|
Title: フルスクリーン [C#]
|
|
C#でウインドウをフルスクリーンにするときに、
ほんの一瞬画面が白くなるのを防ぎたいのですが、
なにかやり方はあるのでしょうか?
もし出来ないのなら、白くなるのを黒くなるのに変えるのでもいいです。
よろしくお願いします。
42ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(105,637ポイント)
Date: 2010/10/10(日) 23:56
No:63183
|
|
Title: Re:フルスクリーン [C#]
|
|
C#はわかりませんが、
ウィンドウクラスの構造体の情報に背景の色をBLACKにしてみてはどうでしょう?
30ポイント を手に入れた。
|
|
|
|
Name: ACE ..ぴよぴよ(90ポイント)
Date: 2010/10/08(金) 14:18
No:62913
|
|
Title: マスク関数の使用法について
|
|
始めましてACEという者です。現在サークル活動でゲーム制作を行っております。
今回はマスク関数の使用法について質問させていただきます。
以前サークルで作ったゲームを配布しようとなったときに他の環境下でも動くか確認したことがあるのですが、
マスク処理が正常に行われないパソコンがありました。当時は締め切りも近く、急遽違う処理を実装して配布しました。
それ以降ゲーム制作にマスク処理を使わないようにしてきたのですが、今制作中のゲームで実装したい表現に
どうしても使わざるを得なくなっています。
今思うと環境依存ではなく私の実装方法が間違っていたのかもしれません。
そこで、関数の使い方や用意するマスク画像等マスク処理を行うときに注意しなければならないことについて
助言いただければと思います。
90ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(104,609ポイント)
Date: 2010/10/08(金) 14:21
No:62915
|
|
Title: Re:マスク関数の使用法について
|
|
参考にならないハッカーですが
思いつく限りではデスクトップの画像の扱い方かもしれません
8ビット環境、16ビット、24ビット、32ビット
なおかつその中での色素のビットマスクが違う環境があります
使用しているビデオカードの色素の取り扱い方が違います
これ以上は詳しくはないです
147ポイント を手に入れた。
|
|
|
|
|
Name: ACE ..ぴよぴよ(100ポイント)
Date: 2010/10/09(土) 00:44
No:62948
|
|
Title: Re:マスク関数の使用法について
|
|
dicさん、ご返答ありがとうございます。
やはりマスク処理は環境依存が強いのでしょうか。
こちらの管理人様が公開されているAerobeatでは随所でマスク処理が
使われていて、それに近い表現をしてみたいと思ったのですが…。
10ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(87,359ポイント)
Date: 2010/10/09(土) 00:57
No:62949
|
|
Title: Re:マスク関数の使用法について
|
|
ちょっと返答がしにくいですね。
関数の使い方といっても、まず何のライブラリで開発されてるのかわからないので
具体的なアドバイスが出来ません。
また、マスク処理が正常に行われないとありますが、その時の状況もわからないので
具体的なアドバイスは難しいかと。
DXライブラリだったら、私はさっぱりわからないので具体的なアドバイスはできませんが。
133ポイント を手に入れた。
|
|
|
|
|
Name: ACE ..ぴよぴよ(261ポイント)
Date: 2010/10/09(土) 20:01
No:63046
|
|
Title: Re:マスク関数の使用法について
|
|
>シエルさん
申し訳ありません。詳しい説明もせずに質問していました。
開発環境はC/C++とDXライブラリです。
不具合の具体的な内容としては、マスク画像で隠したい部分がまったく隠れていなかったということです。
マスク画像を変更してみたりもしましたが改善が見られなかったので、
マスク機能自体がうまく動いてないものと認識しています。
因みに正常動作した環境はvista/ノートPC一台、XP/デスクトップPC三台です。
異常動作した環境はXP/ノートPC二台になります。
161ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(105,337ポイント)
Date: 2010/10/10(日) 22:52
No:63166
|
|
Title: Re:マスク関数の使用法について
|
|
マスク処理関数内でどのような処理をしているかを書いてくれる
よりアドバイスされるかと思います
21ポイント を手に入れた。
|
|
|
|
|
Name: ACE ..ぴよぴよ(698ポイント)
Date: 2010/10/11(月) 00:31
No:63198
|
|
Title: Re:マスク関数の使用法について
|
|
>dicさん
以下に当時のコードのマスクに関係する部分を記載します。
二年前のコードなのですが覚えている範囲でコメントを追加しました。
//ゲームシーンのコンストラクタ
Result::Result(){
(中略)
CreateMaskScreen(); //マスク画面の作成
graph.push_back(LoadMask("graph/black.bmp")); //std::vectorにハンドル追加
DrawMask(0,0,graph[22],DX_MASKTRANS_NONE); //追加したハンドルでマスク描画
SetUseMaskScreenFlag(FALSE); //一時的にマスク使用フラグを折る
}
//描画関数
void Result::Draw(){
(マスクを適用しない部分の描画)
SetUseMaskScreenFlag(TRUE);
(マスクを適用する部分の描画)
SetUseMaskScreenFlag(FALSE);
}
//ゲームシーンのデストラクタ
Result::~Result(){
(中略)
DeleteMaskScreen(); //マスク画面の削除
}
DXライブラリのレファレンスにあるサンプルプログラムを参考にしました。
437ポイント を手に入れた。
|
|
|
|
Name: NANA ..ぴよぴよ(472ポイント)
Date: 2010/10/10(日) 23:31
No:63172
|
|
Title: 配列の要素を増やすか否か
|
|
いつもお世話になっております。
現在、想定ミスで、配列の要素を増やすか、増やさないかを検討しております。
具体的には、2Dアクションゲームを作成していて
array[64][64](左から、「種類」「行動パターン」)と配列を定義していました。
「種類」にはプレイヤー1・プレイヤー2・敵1・敵2・アイテム1〜などとしていたのですが
array[64][64][64]として「大項目」「小項目」「行動パターン」として
「プレイヤー」の「1番」が「待機中」などとしたほうが、プログラム的に都合がいいこと(プレイヤー全体に何かをさせたいときなど…)に気づき、現在要素を増やそうかと思っています。
ただ、ささいなことですが、「安易に要素を増やしていいのか?」と思いました。
要素を増やせば、プログラムを書き換える作業も発生するし、負荷も増えてしまうので、
無理に変えず、今のままで、突っ切ってもいいのかな?と思いました。
これを書きながら、「普通に増やしたほうがいい」とは思っているのですが、
なんとなく気にかかったので、皆様の意見をいただければ幸いです。
以上となります。
くだらない質問ですが、どうかよろしくお願いいたします。
472ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(105,692ポイント)
Date: 2010/10/11(月) 00:01
No:63186
|
|
Title: Re:配列の要素を増やすか否か
|
|
まだ、手付け初めの段階なら3次元配列に変更していいと思います
ただ、結構途中まで作ってるなら2次元配列で作って
次は3次元配列で作るのがいいカナと思います
55ポイント を手に入れた。
|
|
|
|
|
Name: NANA ..ぴよぴよ(525ポイント)
Date: 2010/10/11(月) 00:09
No:63190
| 解決!
|
Title: Re:配列の要素を増やすか否か
|
|
dic様
ご返信いただき誠にありがとうございます。
まさに言っていただいたことが極論だと思いました。
ので、まだある程度手付け始めなので、3次元配列にしたいと思います。
53ポイント を手に入れた。
|
|
|
|
Name: グルグル ..入門者(2,585ポイント)
Date: 2010/10/11(月) 00:00
No:63184
|
|
Title: iphone Viewの分割表示とUITableViewの長さを変える
|
|
こんなことができるのかな。。。ということで書きました。
【やりたい事】
1つのWindowに2つのViewを張付けたい。
2つのViewは、「UITableView」と「UIImageView」です。
「何考えているの」って感じですが、
画面のイメージは、「UITableView」の横幅を短くして、Windowの右側に
そして左側に「UIImageView」を表示したいと思っています。
不可能と思っていて、テーブルも自前でImageで作成して制御するしかないと思っています。
テーブルで実装したい制御は、スクロール、並び替え(検索)、選択して他画面へですが。。。
何か情報ありましたら教えてください。
よろしくお願いいたします。
203ポイント を落としてしまった。
|
|
|
Name: 工藤 [URL] ..ぴよぴよ(844ポイント)
Date: 2010/10/10(日) 11:51
No:63101
|
|
Title: 配布掲示板のパラメータの追加方法について
|
|
初心者でがご指導宜しくお願い致します。
どんな相談でも乗って頂けるのか分かりませんが以前にC-BOARDという配布掲示板をDLしたのですが
パラメータの追加をすることで1項目枠(丁度この掲示板のURL蘭のような枠)を追加することが出来たのですが
追加した項目だけが(必須)項目にしていても未入力の際、エラーメッセージが表示されません。
始から付いていたその他の項目は全て以下のような形式でエラーメッセージが正常に表示されるのですが
<span class=ErrorSmall>ERROR:○○を記入してください。 [(eval 9)(42)] </span>
そこで質問させて頂きたいのですが追加した項目も(必須)の際、未入力の場合同じようにエラーメッセージが表示されるようにしたいと思っています。
sub check {
my @error;
#── 名前をチェック
my $name = $::FORM{'name'};
my $master = $CNF::master{'name'};
(!$::FLAG{'master'} && (&ETC::name_matching($name,$master,$CNF::master{'mode'})))
&& return(['管理人と同じ名前は使えません。']);
#── 新規スレッド立てチェック
if (!$::FORM{'follow'}) {
(!$::FLAG{'master'} && $CNF::permission{'pst'}{'master'}{'modenew'})
&& return(['管理人以外は新規スレッドを投稿できません']);
}
#── 投稿元をチェック
$CNF::post{'referer_check'}{'mode'} && !$::FLAG{'mobile'}{'mode'}
&& !$::FLAG{'incm'}
&& ($ENV{'HTTP_REFERER'} !~ /^\Q$CNF::place{'this'}{'url'}\E/)
&& push(@error, '投稿元が不正です。');
#── アクセス権チェック
if ($CNF::permission{'pst'}{'mode'}) {
require './cmd/prm.pl'; &PERMISSION::check('pst');
}
#── プロキシ経由かチェック
($CNF::post{'no_proxy'}{'mode'}
&& !&CGI::check_proxy(&CGI::get_host(1)))
&& push(@error,
'プロキシサーバーを経由しての書き込みは'
. '禁止されています。');
#── ここまででエラーがある場合は出力
@error && return(\@error);
#── 投稿データチェック
@error = @{&check_parameter}; $::FLAG{'check'} = 1;
#── 二重投稿チェック
my $o_identify;
if (!$::FLAG{'master'} && !$::FORM{'preview'}
&& ($::FORM{'cmd'} ne 'mdt')) {
my $result; ($o_identify, $result) = &identify;
($::FLAG{'debug'} == 2) && ($result = 2);
if ($result == 0) {
push(@error, '同一内容の再投稿は禁止されています。');
}
elsif ($result == 1) {
push(@error,
"管理人($CNF::master{'name'})以外は"
. "$CNF::post{'interval'}秒以内の再投稿は出来ません。");
}
}
return((@error ? \@error : 0), $o_identify);
}
__SUB__
関係ないのかもしれませんが上記はpst.pl投稿関係の関数が含まれているそうです。
補足などあれば補記させて頂きたいと思っています。
宜しくお願い致します。
727ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(105,394ポイント)
Date: 2010/10/10(日) 22:55
No:63167
|
|
Title: Re:配布掲示板のパラメータの追加方法について
|
|
C言語ではないですよね?
サーバーサイドはHTMLしか分からないし、
その配布元に質問してみてはいかがでしょうか?
57ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..かけだし(1,869ポイント)
Date: 2010/10/10(日) 23:16
No:63169
|
|
Title: Re:配布掲示板のパラメータの追加方法について
|
|
>C言語ではないですよね?
コメント文の#記号、変数(なのかな)?の前の$記号、my @〜という記述、あと掲示板ってこと
perlじゃないですかね?
39ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..入門者(4,047ポイント)
Date: 2010/10/09(土) 17:15
No:63033
|
|
Title: Re:ゲーム公開
|
|
DLして一通りやってみました
宇宙求星旅がやったこと無いプレイ感覚で、一番面白かったですね。
けっこう夢中になって25面全クリしちゃいました
衛星でスイングバイして、予想外の軌道で動いたりするのが
特に面白いと感じました。
新しい仕掛けとか追加したり、画像をリファインしたりすれば
面クリア型のアクションパズルゲームとして、立派なものができそうな気がします。
139ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(4,175ポイント)
Date: 2010/10/10(日) 21:37
No:63157
|
|
Title: Re:ゲーム公開
|
|
自分のゲームのテストプレイの際はお世話になりました。
自分も一通りプレイしてみましたが、宇宙求星旅は斬新な感じがしました。
引力の感じがなんだかクセになります。
全体的に、効果音があると雰囲気が出ていいと思います。
自分はあまりゲームを作ったことがないので、いろいろな種類のゲームを作れるのは羨ましいです。
ではでは、失礼します。
112ポイント を手に入れた。
|
|
|
|
Name: IT侍 ..ぴよぴよ(184ポイント)
Date: 2010/10/10(日) 19:26
No:63143
|
|
Title: ファイルのコピー
|
|
もともとあるファイルの内容を違うファイルにコピーするプログラムで watch を入力するとそのファイルの内容をコマンドに表示させるプログラムなのですが、なぜかうまくいきません。コマンドに永遠に????が表示されてしまいます。
どうしてでしょうか?ご教授願います。以下がソースです。何故かファイルもコピーされてません。何が原因なのでしょうか。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
FILE *to, *from;
char ch,watch;
if (argc < 3 || argc > 4){
puts("エラーです。正しい使用法で使用してください。\n"
"<プログラム名> <元のファイル名> <コピー先のファイル名> <watch>");
exit(1);
}
if ((from = fopen(argv[1],"r")) == NULL){
puts("error! I can't this program");
exit(1);
}
if ((to = fopen(argv[2],"w")) == NULL){
puts("error!");
exit(1);
}
if (argc == 4 || !(strcmp(argv[3],"watch")))
watch = 1;
else
watch = 0;
while ((ch = fgetc(from)) == EOF){
fputc(ch,to);
if(watch)
putchar(ch);
}
fclose(to);
fclose(from);
return 0;
}
184ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(31,737ポイント)
Date: 2010/10/10(日) 19:32
No:63145
|
|
Title: Re:ファイルのコピー
|
|
while文で指定するのは、ループ終了条件ではなく、ループ継続条件です。
((ch = fgetc(from)) == EOF)
→((ch = fgetc(from)) != EOF)
とするとどうなりますか?
51ポイント を手に入れた。
|
|
|
|
|
Name: IT侍 ..ぴよぴよ(241ポイント)
Date: 2010/10/10(日) 20:07
No:63148
|
|
Title: Re:ファイルのコピー
|
|
ありがとうございました。
おかげさまで問題が解決しました。
こういったうっかりミスでプログラムって全然動かないもんですね。
これからも精進していきます。
適切な指導ありがとうございました!
57ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(24,699ポイント)
Date: 2010/10/10(日) 20:42
No:63151
|
|
Title: Re:ファイルのコピー
|
|
> if (argc == 4 || !(strcmp(argv[3],"watch")))
このままだと、argc==3のときに範囲外のargv[3]にアクセスすることになり、危険です。
if (argc == 4 && !(strcmp(argv[3],"watch")))
とすべきだと思います。
(追記)
間違っていたので修正しました。 
2倍のポイントを手に入れた! 68ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(18,177ポイント)
Date: 2010/10/10(日) 19:07
No:63140
|
|
Title: Re:直線と円の当たり判定
|
|
現在当たり判定をまとめたヘッダファイルを作っています。
まだ円と円の判定しかできてないのでその他の当たり判定について参考になるページもありましたら教えてください。
47ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(31,686ポイント)
Date: 2010/10/10(日) 19:27
No:63144
|
|
Title: Re:直線と円の当たり判定
|
|
円の中心と直線の距離dを「点と直線の距離の公式」で求め、
それを円の半径rと比較する。
d≦rの場合、直線と円は交わっていることになります。
2倍のポイントを手に入れた! 110ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(18,261ポイント)
Date: 2010/10/10(日) 20:03
No:63147
|
|
Title: Re:直線と円の当たり判定
|
|
中学2年ですがそんな公式初めて知りました。(一応理解しました。)
2点の座標からy=ax+by+cの形に直すプログラムを作り、その後公式に当てはめればよいでしょうか?
84ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(31,817ポイント)
Date: 2010/10/10(日) 20:09
No:63149
|
|
Title: Re:直線と円の当たり判定
|
|
> 2点の座標からy=ax+by+cの形に直すプログラムを作り、その後公式に当てはめればよいでしょうか?
それで良いと思います。
y=ax+by+cではなく、0=ax+by+cですが。
#これは、直線と円の当たり判定の話であって、線分と円の当たり判定の話じゃないことは留意してください。
2倍のポイントを手に入れた! 80ポイント を手に入れた。
|
|
|
|
|
Name: Ultiamte ..ぴよぴよ(365ポイント)
Date: 2010/10/10(日) 20:26
No:63150
| 解決!
|
Title: Re:直線と円の当たり判定
|
|
y=ax+by+cではなく、0=ax+by+cですが。>打ち間違えました。
一次関数なら中1でやったので大丈夫だと思いますが何かあったらまた回答お願いします。
76ポイント を手に入れた。
|
|
|
|
Name: Ultimate ..上級者(17,205ポイント)
Date: 2010/10/10(日) 11:08
No:63092
|
|
Title: 自機と敵機の角度
|
|
弾幕を作っていて、敵に自機狙いショットを打たせたいのですが、下の部分に何かおかしい点があるようです。
どこが間違えているのでしょうか?
tmain2.r[]はラジアンを入れる変数です。
tmain2.coscos[]はコサインを入れる変数
tmain2.sinsin[]はサインを入れる変数
tmain2.r[i]=atan2(tmain2.ty-jiki.ty,tmain2.tx-jiki.tx);
tmain2.coscos[i]=cos(tmain2.r[i]);
tmain2.sinsin[i]=sin(tmain2.r[i]);
151ポイント を手に入れた。
|
|
|
|
Name: Ultimate ..上級者(17,256ポイント)
Date: 2010/10/10(日) 11:09
No:63093
|
|
Title: Re:自機と敵機の角度
|
|
追加
tmain2.tyは自機のY座標
jiki.tyはは敵機のY座標
tmain2.txは自機のX座標
jiki.txは敵機のX座標
51ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(21,886ポイント)
Date: 2010/10/10(日) 11:13
No:63094
|
|
Title: Re:自機と敵機の角度
|
|
コードが少なすぎるので確証はできません。
tmain2.ty-jiki.ty
を
jiki.ty-tmain2.ty
にしてみてください。
43ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(18,070ポイント)
Date: 2010/10/10(日) 11:18
No:63096
|
|
Title: Re:自機と敵機の角度
|
|
すみませんが、うまく動きません。
もっと広い範囲のソースを載せます。
//敵2
typedef struct{
double x[50]; //X座標
double y[50]; //Y座標
double tsin,tcos,tr;
double r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサイン
int flag; //フラグ
int tflag[50];
int nagasa[50];
int count; //カウント
int count2;
double tx;
double ty;
int tcounter;
int hp;
}t2;
t2 tmain2;
//自機
typedef struct{
double tx; //X座標
double ty; //Y座標
double x[100];
double y[100];
double x2[100];
double y2[100];
int flag[100];
int hp;
int nagasa[100];
int count;
}jstruct;
jstruct jiki;
//中略//
//敵2/////////////////
if(tmain2.hp>0&&tmain1.hp<=0){
DrawGraph(tmain2.tx,tmain2.ty,tmain,TRUE);
if(tmain2.count<100){
tmain2.ty++;
}
tmain2.count++;
if(tmain2.count2<10){
tmain2.count2++;
}
for(i=0;i<50;i++){
if(tmain2.tflag[i]==0){
tmain2.x[i]=tmain2.tx;
tmain2.y[i]=tmain2.ty;
}
}
if(tmain2.count2>=10){
tmain2.count-0;
for(i=0;i<50;i++){
if(tmain2.tflag[i]==0){
tmain2.tflag[i]=1;
//サインコサイン
tmain2.r[i]=atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx);
tmain2.coscos[i]=cos(tmain2.r[i]);
tmain2.sinsin[i]=sin(tmain2.r[i]);
break;
}
}
}
for(i=0;i<50;i++){
if(tmain2.tflag[i]==1){
tmain2.nagasa[i]+=10;
tmain2.x[i]=tmain2.nagasa[i]*tmain2.coscos[i];
tmain2.y[i]=tmain2.nagasa[i]*tmain2.sinsin[i];
DrawCircle(tmain2.x[i],tmain2.y[i],3,BLACK,TRUE);
}
}
DrawFormatString(0,0,BLACK,"%d",tmain2.tflag[0]);
}
814ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(18,067ポイント)
Date: 2010/10/10(日) 11:22
No:63098
|
|
Title: Re:自機と敵機の角度
|
|
訂正
tmain2.tyは敵機のY座標
jiki.tyはは自機のY座標
tmain2.txは敵機のX座標
jiki.txは自機のX座標
逆でした。。。
3ポイント を落としてしまった。
|
|
|
|
|
Name: みけCAT ..上級者(22,757ポイント)
Date: 2010/10/10(日) 13:03
No:63108
|
|
Title: Re:自機と敵機の角度
|
|
double r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサイン
というように要素を10しか確保していないのに、
for(i=0;i<50;i++){
if(tmain2.tflag[i]==0){
tmain2.tflag[i]=1;
//サインコサイン
tmain2.r[i]=atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx);
tmain2.coscos[i]=cos(tmain2.r[i]);
tmain2.sinsin[i]=sin(tmain2.r[i]);
break;
}
}
というようにそれより大きい要素にアクセスしているためデータが壊れていると思います。
2倍のポイントを手に入れた! 760ポイント を手に入れた。
|
|
|
|
|
Name: Ultiamte ..ぴよぴよ(289ポイント)
Date: 2010/10/10(日) 15:34
No:63120
| 解決!
|
Title: Re:自機と敵機の角度
|
|
ご指摘いただいた通りの初歩的なミスでした。
あとは細かな調整などをして成功しました。
ありがとうございました。
35ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(21,170ポイント)
Date: 2010/10/10(日) 08:57
No:63076
|
|
Title: プロトタイプ宣言の必須化
|
|
おはようございます。みけCATです。
開発環境はDev-c++4.9.9.2(コンパイラはデフォルト)
もしくはTeraPad0.93とMinGWと自作ソフトを使っています。
たとえばこのコードを見てください。
#include <stdio.h>
int main(void) {
printf("%d\n",zikkenn(3,5));/*スペルミス*/
return 0;
}
int zikken(int a,int b) {
return a+b;
}
このコードをコンパイルすると、
[Linker error] undefined reference to `zikkenn'
というエラーが出ます。
この程度のプログラムであれば、zikkennというトークンがどこに使われているかわかりやすいですが、
もっと大きいプログラムになるとわかりにくくなります。
検索すればいいかもしれないですが、
#include <stdio.h>
int main(void) {
printf("%d\n",ikken(3,5));/*スペルミス*/
return 0;
}
int zikken(int a,int b) {
return a+b;
}
のようなパターンになると、ikkenで検索するとzikkenも引っかかってきて、検索しにくいと思います。
そこで、関数のプロトタイプ宣言を必須にして、プロトタイプ宣言がない関数を使用すると
そこで警告かエラーを吐くようにするコマンドラインオプションはありますでしょうか?
教えていただければ幸いです。
585ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..ハッカー(231,081ポイント)
Date: 2010/10/10(日) 13:19
No:63111
|
|
Title: Re:プロトタイプ宣言の必須化
|
|
一応GCCのオプションについても回答しておきます。
-Wimplicit-function-declaration
-Werror-implicit-function-declaration
この二つがそれに該当するはずです。
50ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(23,217ポイント)
Date: 2010/10/10(日) 13:26
No:63113
| 解決!
|
Title: Re:プロトタイプ宣言の必須化
|
|
たかぎさん
ありがとうございます。
#include <stdio.h>
int main(void) {
printf("%d\n",zikken(3,5));/*スペルミス*/
return 0;
}
int zikkenn(int a,int b) {
return a+b;
}
を-Wimplicit-function-declarationオプションでコンパイルすると
F:\C\error\error2.c: In function `main':
F:\C\error\error2.c:4: warning: implicit declaration of function `zikken'
C:\Users\(ユーザー名)\AppData\Local\Temp/ccWAbaaa.o(.text+0x3a):error2.c: undefined reference to `zikken'
collect2: ld returned 1 exit status
と表示されました。
エディタで検索するときに「単語全部が一致」を使うという手もあります。
319ポイント を手に入れた。
|
|
|
|
Name: カイリ ..ぴよぴよ(461ポイント)
Date: 2010/10/08(金) 18:40
No:62929
|
|
Title: 売れるiPhoneアプリゲームについて
|
|
iPhoneアプリゲーム(有料115円)を2本リリースして2ヶ月経ちました。
しかしDL数が全国で100に行きそうにありません。
売上をあまり気にしていないのですがDLが多いに越したことはありません。
もしiPhone関連の開発者の方や販売に詳しい方がいたら
アドバイスを頂きたいのですがどのようなことをすればDL数が増えるでしょうか?
あまりお金のかかることが出来ないので大きな広告を出すなどは無理です・・・。
また公開開始して2カ月もたってDL数100は少ない方ですよね?
221ポイント を手に入れた。
|
|
|
|
Name: カイリ ..ぴよぴよ(346ポイント)
Date: 2010/10/09(土) 15:45
No:63018
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
管理人様直々ご連絡ありがとうございます。
具体的なURLを貼れればいいのですが私の本名がばれるのでww
詳しい方がいたら何か販売の意見を頂けたらと思いまして・・・。
73ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(584,013ポイント)
Date: 2010/10/09(土) 21:37
No:63050
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
うちも五十歩百歩なんであんまり偉そうなことは言えませんが、多くの iPhoneアプリはそんなものです。
いいコンセプトを持ったアプリを作っても、何らかの宣伝をしなければ当然売れ行きは伸びません。
とにかく、作ったアプリをユーザーの目に触れさせる機会を増やすことが重要ではないでしょうか。
ちなみに今までにどんなプローモーション活動をしたんですか?
135ポイント を手に入れた。
|
|
|
|
|
Name: カイリ ..ぴよぴよ(650ポイント)
Date: 2010/10/10(日) 08:04
No:63072
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
>>ISLe 様
そうなんですか?
100は多い方なんですか。
月に数十万とか稼いでいる方もいるみたいだったので最底辺と思いました。
宣伝の仕方が良く分からないので全くしてません。
>>Justy様
プロモーション活動は全くと言っていいほどしておりません。
mixiのアプリ紹介コミュニティやtwitterを使い宣伝しようかとは思うのですが効果が期待できる気がしなくて・・・。
やってもいないのにそういうこと言うなと怒られてしまいそうですがw
>>作ったアプリをユーザーの目に触れさせる機会を増やすことが重要ではないでしょうか。
なるほど・・・まず目に留まらなければDLもされませんもんね。
このスレを見て下さった方でこういうのしてみたら?という意見があったら是非伺いたいです。
304ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..比類無きプログラマー(87,636ポイント)
Date: 2010/10/10(日) 10:16
No:63084
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
iPhoneアプリ用ゲームは作りませんが・・・
youtubeにゲームをしている映像(CMみたいに)をアップロードしてみるのが
私的に一番いいと思います。
37ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,289,531ポイント)
Date: 2010/10/10(日) 11:38
No:63100
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
> 月に数十万とか稼いでいる方もいるみたいだったので
その人も何の宣伝活動もしていないんですか?
きっと上位に来る人はそれなりの活動をしているのではないかと思います。
それにそんなに簡単に月数十万稼げるような話は無いのでは・・。
すごく良いアプリで有名サイトや雑誌の編集者が気に入ればそこで宣伝してもらって一気に人気が出る事はあるかもしれませんが、結局は宣伝ではないかと。
iPhoneアプリの事は良く知りませんが、星の数ほどあるアプリから人に気に入ってもらうのは簡単な事ではない気がします。
カイリさんのアプリがどんなアプリなのか全く解らないので、検討違いな事を言っているかもしれませんが、
アプリの紹介ページを見てくれている人にパっとそのアプリの内容が伝わるような努力をされてはどうでしょう。
私はベクターとかで何か良いソフトは無いか探す時、文章ばかりの一覧では良く解らず選ぶのに困る事があります。
でも、ソフトの紹介ページのリンクに作者のHPがあって、そこで非常に解りやすいアプリの紹介があれば私はそれをDLします。
私自身が作っているゲームも、なるべく人が見てすぐにゲームの内容が解るように紹介動画を作ったり、
HPを見ただけでゲームの内容が伝えられる工夫をしているつもりです。
また、ゲームをプレイして下さった方々にアンケートのお願いをしています。
作ったゲームのどこがよくて、どこを改善しないといけないのか、
このゲームをしった経緯はなんだったのか、などをアンケートを通じて知ることで次により良い物が作れたら良いなと思っています。
http://dixq.net/sr/ank/enq.cgi?mode=kekka
ここを見ると過半数の人は動画サイトからHPに来てくれていることが解ります。
それなら、より人が見ようと思ってくれるような動画作りを頑張る事が最も効率的に人に見てもらう機会を作る事になるのだなと解ります。
宣伝も良いと思いますが、自分のアプリやその宣伝活動の一連を含めて何が良くないのかを知り、それを改善する活動も必要だと思います。
しかし、宣伝するにはそのアプリへのリンクが必要だと思うのですが、本名を知られることなく人にアプリを知ってもらうというのは難しいのでは・・。
796ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(231,355ポイント)
Date: 2010/10/10(日) 12:28
No:63105
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
iPhoneアプリの事は分かりませんがWindowsのフリーソフトは雑誌等で紹介されると劇的にダウンロード数が伸びることがあります。私の場合だと週刊アスキーに紹介されたらいきなり500DL増えました。
やはり、こういう場合のメディアの力は侮れません。
ただ、雑誌社に自分で売り込んだことはないので、紹介ホームページを充実させて、アプリ掲載サイトの載せてもらったり地道に活動するしか無いと思います。そういう意味で動画を用意するのは良いかも知れませんね。
13ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(584,375ポイント)
Date: 2010/10/10(日) 12:48
No:63107
|
|
Title: Re:売れるiPhoneアプリゲームについて
|
|
基本的なところを挙げると
・ アプリを海外対応する
日本だけだと厳しいので海外でも売る機会を作ります。
勿論App Storeからリンクを張っている公式サイトも英語版も作ります。
・ Youtubeにアプリの魅力が伝わるような紹介動画をアップする
私自身アプリ購入に迷ったときは動画で判断することが多いですし、口コミ効果も期待できるので
これはうまく作るとかなり有効だと思います。
今までで一番記憶に残っているアプリの動画は幾つかあるのですが、一番最初に凄いと思ったのは
Voice Bandの動画でした。
段取りのいい動画ではないですし「パーパパパパー」とか言ってるだけなのに、
しかも iPhoneの画面は6分40秒もの動画の中で合わせて30秒くらいしか見せてないのに
なんだか「すごい」と思わせる動画で、即買いでした。
・ 何かのコミュニティで宣伝する、アプリ紹介サイト・ブログ等のメディアで紹介してもらう
大手ブログで紹介されると売り上げは伸びますのよ。
App Bank等開発者自ら寄稿できるところもありますうまく利用するといいでしょう。
あと、ある程度売れてからとなりますがApp Storeのランキングに載ると(カテゴリ別Top200とかでも)、
ランクによっては少ないですがしばらくはコンスタントに売れていきますので、まずはランキングに
載るよう、そしてそのランキングを維持するようプローモーションを行うのがいいんじゃないでしょうか。
ちなみにあのランキングそんなに売れてなくても不思議と載ってしまうことがあります……。
>を使い宣伝しようかとは思うのですが効果が期待できる気がしなくて・
宣伝OKな場所でターゲットユーザーがそこにいる可能性があるなら、やった方がいいでしょう。
一本でも売れれば御の字ですし、そこから広がっていくことも考えられます。
何でもそうですが売れる為には地道な営業努力が必要だと思います。
362ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(21,694ポイント)
Date: 2010/10/10(日) 09:35
No:63078
|
|
Title: DrawRotaGraphF相当のコード TurnFlag
|
|
http://www.play21.jp/board/formz.cgi?action=res&resno=63023&page=&id=dixq&rln=63031
の続きです。
DrawRotaGraphFに回転などを実装しているのですが、
TurnFlagが効かないようです。
どこが悪いかわかる方がいらっしゃいましたら教えていただければ幸いです。
kaiten関数は
http://www.play21.jp/board/formz.cgi?action=res&resno=63052&page=&id=dixq&rln=63052
のものです。
function.cppのDrawRotaGraphFの下に貼りつけました。
int DrawRotaGraphF(HDC to,int x,int y,float ExtRate,float Angle,
gazou* graph,int TransFlag,int TurnFlag) {
HDC gazoufordraw;
HDC scaledgazou;
HBITMAP oldbmp;
HBITMAP scalebmp;
HBITMAP scaleoldbmp;
int sx,sy;
int dx,dy;
double rx,ry;
COLORREF col;
sx=(int)(graph->sizex*ExtRate);
sy=(int)(graph->sizey*ExtRate);
gazoufordraw=CreateCompatibleDC(to);
scaledgazou=CreateCompatibleDC(to);
scalebmp=CreateCompatibleBitmap(to,sx,sy);
oldbmp=(HBITMAP)SelectObject(gazoufordraw,graph->bmp);
scaleoldbmp=(HBITMAP)SelectObject(scaledgazou,scalebmp);
StretchBlt(scaledgazou,0,0,
sx,sy,
gazoufordraw,graph->x,graph->y,graph->sizex,graph->sizey,
SRCCOPY);
for(dy=0;dy<sy;dy++) {
for(dx=0;dx<sx;dx++) {
if(TurnFlag)col=GetPixel(scaledgazou,sx-dx,dy);
else col=GetPixel(scaledgazou,dx,dy);
col=GetPixel(scaledgazou,dx,dy);
kaiten(&rx,&ry,x,y,x+dx-sx/2,y+dy-sy/2,Angle);
if(!TransFlag || col!=RGB(255,255,255)) {
SetPixel(to,(int)rx,(int)ry,col);
}
}
}
SelectObject(gazoufordraw,oldbmp);
SelectObject(scaledgazou,scaleoldbmp);
DeleteObject(scaleoldbmp);
DeleteDC(gazoufordraw);
DeleteDC(scaledgazou);
return 0;
}
(編集)</pre>をつけ忘れました。 
524ポイント を手に入れた。
|
|
|
|
Name: 迷彩吹雪 ..入門者(4,389ポイント)
Date: 2010/10/10(日) 12:17
No:63104
|
|
Title: Re:DrawRotaGraphF相当のコード TurnFlag
|
|
for文の中にある
if(TurnFlag)col=GetPixel(scaledgazou,sx-dx,dy);
else col=GetPixel(scaledgazou,dx,dy);
col=GetPixel(scaledgazou,dx,dy);
は
if(TurnFlag){
col=GetPixel(scaledgazou,sx-dx,dy);
}
else{
col=GetPixel(scaledgazou,dx,dy);
}
col=GetPixel(scaledgazou,dx,dy);
と同義ですよね?
ならば、TurnFlagに関わらず
col=GetPixel(scaledgazou,dx,dy);
が実行されてしまうのではないでしょうか。
私が若輩者でどんな処理をされているか良くわかっていないので、見当違いだったらすみません……。
294ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(21,997ポイント)
Date: 2010/10/10(日) 12:45
No:63106
| 解決!
|
Title: Re:DrawRotaGraphF相当のコード TurnFlag
|
|
その通りでした。
下のcol=GetPixel(scaledgazou,dx,dy);を消したら動きました。
ありがとうございました。
ただ、拡大をかけるとかなり重いようなのでまた改良したいと思いますが...
77ポイント を手に入れた。
|
|
|
|
Name: うしお ..初心者(5,243ポイント)
Date: 2010/10/09(土) 20:16
No:63047
|
|
Title: Unicodeと静的リンクライブラリについて
|
|
Unicode対応ライブラリを作成する場合についての質問です
ある関数の中身が、
マルチバイト用の関数と、Unicode用の関数、
それぞれ別な中身を用意する必要があると知りました
たとえば、
void DebugPrintA()
{
OutputDebugStringA("");
}
void DebugPrintW()
{
OutputDebugStringW(L"");
}
という実装で、公開ヘッダは
#ifdef _UNICODE
#define DebugPrint DebugPrintW
#else
#define DebugPrint DebugPrintA
#endif
しかしこうすると、同じ関数が2つ出来るために、
メンテナンス性の低下を引き起こします
OutputDebugStringなどの文字コードに関係するコードが1行でも出てくれば、
関数を2つにする必要が出てきてしまいます
これはなんとかして簡略な方法はありませんか?
それとも考え方が間違っていますでしょうか?
333ポイント を手に入れた。
|
|
|
|
Name: りゅん [URL] ..ぴよぴよ(140ポイント)
Date: 2010/10/09(土) 22:19
No:63054
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
マルチバイト・unicode の両方に対応させるには、どうしても関数をふたつ作る必要があります。
私も同じような問題に当たったことがありますが、そのときはこんな風にしてみました。
ちょっと強引かもしれないけど…
void DebugPrintA( char* cstr )
{
// マルチバイト文字をワイド文字に変換した後、処理は DebugPrintW に丸投げ
wchar_t wbuf[ 512 ];
toWideString( wbuf, 512, str );
OutputDebugStringW( wbuf );
}
void DebugPrintW( wchar_t* wstr )
{
OutputDebugStringW( wstr );
// ...
}
これなら DebugPrintW の中身を管理するだけで大丈夫! …なはずです。^^;
9ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(230,302ポイント)
Date: 2010/10/09(土) 22:38
No:63056
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
ひとつで済ませる方法がないわけではありません。
基本的にはりゅんさんの方法と同じで、いったんワイド文字列になおしてからワイド文字版を呼ぶことになりますが...
まず、準備として...
std::wstring to_wstring(char const* s);
std::wstring to_wstring(wchar_t const* wcs);
のようなワイド文字列に変換する関数を作っておきます。
本来は必要がない、ワイド文字列→ワイド文字列への変換関数も作るのがポイントです。
その上で、
template <typename charT>
void DebugPrint(charT const* s)
{
::OutputDebugString(to_wstring(s).c_str());
}
とすれば、ひとつの関数定義で済むようになります。
293ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..初心者(5,450ポイント)
Date: 2010/10/09(土) 22:50
No:63057
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
ご回答ありがとうございます
ちょっと自分が勘違いしているかもしれないのですが、
ライブラリを利用する立場の話ですが、
マルチバイトの設定でビルドしているにもかかわらず、
Unicodeの関数を呼んでも問題はないのですか?
ためしに
コンソールにて、マルチバイト設定で
wprintf(L"これはワイド文字列");
としましたが、
コンパイル、リンク->正常
出力->なし
という状態で正常に動かなかったのですが
これは何がいけないのでしょうか?
207ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(230,450ポイント)
Date: 2010/10/09(土) 22:53
No:63058
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
> マルチバイトの設定でビルドしているにもかかわらず、
> Unicodeの関数を呼んでも問題はないのですか?
Visual C++に限った話だとすると、問題ありません。
> コンソールにて、マルチバイト設定で
> wprintf(L"これはワイド文字列");
> としましたが、
> コンパイル、リンク->正常
> 出力->なし
> という状態で正常に動かなかったのですが
> これは何がいけないのでしょうか?
ロケールを設定していないからでは?
wprintfを使う前には、setlocaleで少なくともLC_CTYPEを設定しておかなければなりません。
2倍のポイントを手に入れた! 148ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..初心者(5,530ポイント)
Date: 2010/10/09(土) 23:32
No:63060
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
wprintfは別な要因でした、すみませんありがとうございます
テンプレートに関して、ああ、こんな方法もあるのか!
と思ったのですが、
ヘッダーに全部書くとなると、
見えて欲しくないものも公開ヘッダに含まれてしまう
→さらにもう一段cppに包む手間が発生する
void DebugPrintA()
{
DebugPrint<char>();
}
void DebugPrintW()
{
DebugPrint<wchar_t>();
}
という実装になるといった感じだろうと想像することができました
内部newのあるstringのオーバーヘッドも気になるところでしょうか
その代わりに、関数は1つで済む
ちょっと自分にはメリットとデメリットが交錯して判断が難しくなってきました
この手法はよく用いられる方法なのでしょうか?
>Visual C++に限った話だと、
というのも気になります
これはかなり環境依存の解決方法ということになってしまうのでしょうか?
2倍のポイントを手に入れた! 80ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(230,742ポイント)
Date: 2010/10/10(日) 10:51
No:63088
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
> void DebugPrintA()
> {
> DebugPrint<char>();
> }
> void DebugPrintW()
> {
> DebugPrint<wchar_t>();
> }
> という実装になるといった感じだろうと想像することができました
最終的に関数名を分けるのであれば...
#ifdef _UNICODE
#define AorW(x) x##W
#else
#define AorW(x) x##A
#endif
のようなマクロを作っておいて、
void AorW(DebugPrint)(LPCTSTR s)
{
OutputDebugString(s);
}
と、関数定義を一度だけ定義しておき、2回コンパイルを通せばよいのです。
IDEでもできないことはありませんが、Makefileを書いた方が簡単かもしれません。
> 内部newのあるstringのオーバーヘッドも気になるところでしょうか
それほどタイムクリティカルな処理なのであれば、もっといろいろなことに配慮しなければならなくなります。
> この手法はよく用いられる方法なのでしょうか?
ジェネリックプログラミングでは、本来違うものを同じように書けるように工夫するのは普通だと思います。
> これはかなり環境依存の解決方法ということになってしまうのでしょうか?
Windows APIを使う時点で完全に環境依存だと思いますが...
292ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..初心者(5,777ポイント)
Date: 2010/10/10(日) 11:16
No:63095
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
どうせウィンドウズ依存だからVCにもガンガン依存しちゃえ!
というのもひとつの考え方ですが、
せめてVCのみの機能は控える、というのも勉強のためには良いかなと
考えたからです
このあたりは自分で実際に今後試しながらやっていきます
タイムクリティカルというよりは、
ライブラリを使う側でマルチバイトだけで組む場合、
本来は必要なかったUnicode変換の処理が毎回入ってしまう
同じくUnicode→Unicodeでもコピーが発生する
というのに対してもったいなさといいますか、そういった印象があがってしまいました
OSがUnicodeベースであれば、
マルチバイトであっても内部で変換が入るらしいので、
このオーバーヘッドはたいしたことない、と考えることもできそうですが
まだ実際に計測したわけではないです
関数定義を一度だけ定義しておき、2回コンパイル
というのは、.Libファイルごと分けてしまうということでしょうか?
それとも、
Makefile(私は詳しくないです)
の設定で.objを2つ作ってあくまでも1つの.libという形でしょうか?
247ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(231,031ポイント)
Date: 2010/10/10(日) 11:35
No:63099
|
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
> せめてVCのみの機能は控える、というのも勉強のためには良いかなと
> 考えたからです
それはちょっと厳しいのでは?
元の質問は、
> マルチバイトの設定でビルドしているにもかかわらず、
> Unicodeの関数を呼んでも問題はないのですか?
なので、それであればライブラリの作りなどに完全に依存していますから。
> ライブラリを使う側でマルチバイトだけで組む場合、
> 本来は必要なかったUnicode変換の処理が毎回入ってしまう
これについてはご自身で書かれているように、どこで変換するかだけの話です。
もっとも、Visual C++に依存したくないのであれば、MutibyteToWideCharなどは使えませんので、std::codecvtファセットを使うなどしなければならなくなります。これだとオーバーヘッドはもう少し増えるでしょうね。
> 同じくUnicode→Unicodeでもコピーが発生する
> というのに対してもったいなさといいますか、そういった印象があがってしまいました
本質ではないところでもう一手間かかりますので、分かりにくいかと思って省略しましたが、その問題は回避可能です。
> 関数定義を一度だけ定義しておき、2回コンパイル
> というのは、.Libファイルごと分けてしまうということでしょうか?
> それとも、
> Makefile(私は詳しくないです)
> の設定で.objを2つ作ってあくまでも1つの.libという形でしょうか?
Makefileであれば、
DebugPrintA.obj: DebugPrint.cpp
cl /c DebugPrint.cpp
DebugPrintW.obj: DebugPrint.cpp
cl /c /D_UNICODE DebugPrint.cpp
のように、ひとつのソースファイルから複数のオブジェクトファイルを生成できるということです。

274ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..初心者(5,859ポイント)
Date: 2010/10/10(日) 12:01
No:63102
| 解決!
|
Title: Re:Unicodeと静的リンクライブラリについて
|
|
たくさんの詳しいご回答ありがとうございました
かなり知識を深めることが出来ました!
またMakefile、template
のことについて等非常に参考になりました
得た知識を元に
もう一度自分のソースと相談し、進めていきたいと思います。
82ポイント を手に入れた。
|
|
|
|
Name: dkns ..ぴよぴよ(679ポイント)
Date: 2010/10/09(土) 12:47
No:62994
|
|
Title: 龍神録の8章について
|
|
こんにちは、自分は専門学校ゲームプログラミング科1年のものです
サイトを見ながらプログラミングの勉強をしているのですがどうしても8章がうまくできません
エラーの内容は以下のとおりです
1>c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(21) : error C2065: 'PAD_MAX' : 定義されていない識別子です。
1>c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(17) : error C2371: 'ch_t' : 再定義されています。異なる基本型です。
1> c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(17) : 'ch_t' の宣言を確認してください。
1>c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(22) : error C2371: 'pad_t' : 再定義されています。異なる基本型です。
1> c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(22) : 'pad_t' の宣言を確認してください。
1>c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(27) : error C2371: 'configpad_t' : 再定義されています。異なる基本型です。
1> c:\documents and settings\user\デスクトップ\project\1章\mydat\include\struct.h(27) : 'configpad_t' の宣言を確認してください。
色々とエラー原因を探したのですが解決できず、しかたなく8章で追加や変更のあった文字をサイトから丸々コピーしたにも関わらず同じエラーがでます
どのような要因が考えられますか?、皆さまのお力をお貸しください
0SはXP、Visual C++ 2008Express Editionを使っています
長々と失礼いたしました。
679ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(229,666ポイント)
Date: 2010/10/09(土) 13:17
No:63003
|
|
Title: Re:龍神録の8章について
|
|
勉強のためでしたら、まずエラーの意味を理解することから始めてはどうでしょうか?
これらのエラーは2つに分類されます。
'PAD_MAX' : 定義されていない識別子です。
'ch_t' : 再定義されています。
この2つの意味は分かりますでしょうか?
また、C言語のexternとファイル分割やヘッダの役割に付いてどの程度理解されていますか?
157ポイント を手に入れた。
|
|
|
|
|
Name: dkns ..ぴよぴよ(841ポイント)
Date: 2010/10/10(日) 08:38
No:63073
|
|
Title: Re:龍神録の8章について
|
|
No:63001 様
参考にしてみます
ありがとうございます
No:63003 様
そうですね、もう少し理解することを頑張ってみようと思います
externについてはこのサイトで初めて存在を知り、グーグルで検索して他サイトで1時間ほど勉強した程度です
ファイル分割やヘッダファイルも他サイトで独学で授業ではちゃんとした授業では習っていません(簡単なゲームを作る際、先生が”こういうものもあるんだよ”とほのめかした程度)
162ポイント を手に入れた。
|
|
|
|
|
Name: dkns ..ぴよぴよ(872ポイント)
Date: 2010/10/10(日) 10:09
No:63082
| 解決!
|
Title: Re:龍神録の8章について
|
|
出来ました!
やはり重複インクルードが原因だったようです
ありがとうございました
31ポイント を手に入れた。
|
|
|
|
Name: きのこのこのこ ..ぴよぴよ(858ポイント)
Date: 2010/10/09(土) 15:24
No:63017
|
|
Title: 正しく入力できないのです
|
|
生年月日を入力してそれをメッセージボックスで表示するプログラムなのですが、正しく入力できないことがあります
月で1桁の月を入力した時に日が1桁しか入力できなかったり、1桁の日を入力した時に年齢が1桁しか入力できなくなってしまいます
1桁入力するときに01とすると次も2桁入力できるみたいですが、そのようなことをしなくても2桁入力できるようにしたいと思っています
私は高校でC言語を学んでいる最中ですが、WindowsCはまだ数ヶ月しか学んでいません
生年月日や年齢を使って占いのようなものを作り、文化祭で発表しようと思ってますのでどうかよろしくお願いします
見落としておりました、申し訳ありません
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1148365286
Yahoo知恵袋でも質問しておりますが、どうかよろしくお願いします
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static int check = 0 , sFlag = 0 , century , month , day , age;
int id , len = 0;
static char str[12];
char outstr[300] , mes_str[256] , mes_str2[256];
HDC hdc;
PAINTSTRUCT ps;
switch(msg){
case WM_CREATE:
memset(str , 0 , sizeof(str));
memset(outstr , 0 , sizeof(outstr));
memset(mes_str , 0 , sizeof(mes_str));
break;
case WM_CHAR:
len = strlen(str);
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
str[len] = wp;
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
wsprintf(mes_str , "初めに誕生年を入力してくださ
い");
TextOut(hdc , 300 , 20 , mes_str , (int)strlen
(mes_str));
if(century != 0){
wsprintf(outstr , "年:%d" , century);
TextOut(hdc , 385 , 40 , outstr , (int)
strlen(outstr));
}
if(sFlag > 0){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生月を入力し
てください");
TextOut(hdc , 300 , 60 , mes_str ,
(int)strlen(mes_str));
if(month != 0){
wsprintf(outstr , "月:%d" ,
month);
TextOut(hdc , 395 , 80 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 1){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生日を入力し
てください");
TextOut(hdc , 300 , 100 , mes_str ,
(int)strlen(mes_str));
if(day != 0){
wsprintf(outstr , "日:%d" ,
day);
TextOut(hdc , 395 , 120 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 2){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "最後に現年齢を入力し
てください");
TextOut(hdc , 300 , 140 , mes_str ,
(int)strlen(mes_str));
if(age != 0){
wsprintf(outstr , "年齢:%d" ,
age);
TextOut(hdc , 385 , 160 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 3){
memset(mes_str , 0 , sizeof(mes_str));
if(month < 1 || month > 12){
strcat(mes_str , "1年はは1〜12月
までです\n");
check = 1;
}
if(month == 4 || month == 6 || month ==
9 || month == 11){
if(day < 1 || day > 30){
wsprintf(mes_str2 , "%d
月は1〜30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(month == 1 || month == 3 || month ==
5 || month == 7 || month == 8 || month == 10 || month == 12){
if(day < 1 || day > 31){
wsprintf(mes_str2 , "%d
月は1〜30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(check == 0){
wsprintf(mes_str , "%d年%d月%d日生まれ %d歳" , century ,
month , day , age);
}
id = MessageBox(hWnd , mes_str , "確認"
, MB_YESNO | MB_ICONQUESTION);
if(id == IDNO){
sFlag = 0;
}
}
EndPaint(hWnd , &ps);
break; 
858ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(18,397ポイント)
Date: 2010/10/09(土) 16:34
No:63024
|
|
Title: Re:正しく入力できないのです
|
|
case WM_CHAR:
len = strlen(str);
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
str[len] = wp;
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
のところを
case WM_CHAR:
len = strlen(str);
str[len] = wp;/*この行の位置を移動する*/
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
としてみてください。
211ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(18,836ポイント)
Date: 2010/10/09(土) 16:43
No:63026
|
|
Title: Re:正しく入力できないのです
|
|
どうしてできなかったかを解説します。
(想像なので間違っているかもしれません。)
最初、str配列はこうなっています。
00 00 00 00 00 00 00 00 00 00 00 00
「1」を押すとこうなります。
31 00 00 00 00 00 00 00 00 00 00 00
ここでEnterを押したとします。
まず
len = strlen(str);
により、len=1になります。
次に、
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
のところで
00 00 00 00 00 00 00 00 00 00 00 00
となります。
そして、
str[len] = wp;
のところで、len=1なので
00 0D 00 00 00 00 00 00 00 00 00 00
となります。
「1」を押すと
31 0D 00 00 00 00 00 00 00 00 00 00
となります。
もう一度「1」を押すと、strlen(str)==2なので
31 0D 31 00 00 00 00 00 00 00 00 00
となります。
これをatoiに掛けると、0Dのところで解析が止まり、1になるのだと思います。
同じ理由で、現状のプログラムで2桁入力すると、次に3桁以上は入力できないと思います。
439ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(19,179ポイント)
Date: 2010/10/09(土) 16:46
No:63027
|
|
Title: Re:正しく入力できないのです
|
|
ついでにバッファオーバーラン対策もした方がいいと思います。
case WM_CHAR:
len = strlen(str);
if(len<11)str[len] = wp;/*終端のnull文字も含めて要素数-1*/
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
softyaさん
きのこのこのこさんは、規約違反だと言われたらちゃんと直されたので、それでいいと私は思いました。
343ポイント を手に入れた。
|
|
|
|
|
Name: きのこのこのこ ..ぴよぴよ(814ポイント)
Date: 2010/10/10(日) 09:00
No:63077
| 解決!
|
Title: Re:正しく入力できないのです
|
|
ご迷惑おかけして申し訳ありませんでした
解決致しました。ありがとうございました
44ポイント を落としてしまった。
|
|
|
|
|
Name: 初級者 ..中級者(9,892ポイント)
Date: 2010/10/09(土) 23:35
No:63061
|
|
Title: Re:無題
|
|
ご本人がわかっていない(クエスチョンマーク付き)概念について、
ご本人が望むような回答が来るとはとても思えませんね。
11ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,288,509ポイント)
Date: 2010/10/10(日) 01:31
No:63068
|
|
Title: Re:無題
|
|
セキュリティを考えるのはsoftyaさんも仰るようにゲームが完成してからでも良いと思いますが
気になるようなので少しだけ回答しましょう。
> あとデーターを非表示し?、ロック?する方法はありますか?
ユーザーが勝手にデータを閲覧したり改竄したりしないようにする方法という事でしょうか?
それであれば、「暗号化」という話になるでしょう。
例えば、リンク先のように「見られてはいけないデータ」なる文字列があったとしましょう。
実行ファイルは膨大なデータ量である為、一文字ずつ見ていく人はあまりいないでしょう。
(と言っても実行ファイルの仕組みを知ればどこに何のデータがありそうか大体わかってしまうのですが)
多くの場合は検索をかけてデータを見つけると思います。
今回の場合で言えば「データ」という文字列で検索をかければ見つかります。
しかし
「デ」「ー」「タ」それぞれに文字コード+1したものを保存してみたとしたらどうでしょう。
文字コードに1足しただけであっても全く意味の解らない文字列にかわるはずです。
検索してもひっかからなくなるでしょう。
これはシーザー暗号といって最も簡単な暗号化の一つです。
先ほども言ったように解る人が見ればそれでも大体データの場所が解ってしまうので、
データをいくつかシフトするだけで発見されるかもしれません。
ですので、暗号化にはより複雑な方法等様々な方法が存在します。
すごく大事なデータであればライブラリを利用して暗号化するのが良いでしょうが、まぁフリーゲームではそこまでしなくても良いように思います。
いくらデータファイルにこだわってもしょうがない事もありますので。
何故かというと、例えば私のゲームのセーブデータには簡単な暗号化がかけてあって、
改竄するとゲームが起動できなくなるようになっています。
しかし、いくらセーブデータをきっちり暗号化したって、保存する前に書き換えられてはしょうがありません。
ゲームをプレイ中、そのゲームが使っているメモリのデータを書き換える事が出来るので、
例えば、ゲームをクリアした時「1200ポイント」だったとしましょう。
「1200」のデータを持っているメモリのデータを探して「10000ポイント」に書き換えてしまうと
保存する前に変数のデータが変わっているので防ぎようがないのです。
それを防ぐには変数に値を代入する時は常に暗号化するなどの処置が必要かもしれません。
その辺の効率的な方法は私も良く知りませんが、この辺の分野は突き詰めていくとドンドン深くなりそうです。
そしてプログラムコードはドンドン読みにくくなりそう・・。
ですから、最初は気にせずにゲーム本体のプログラムを勉強していった方が良いように思います。
603ポイント を手に入れた。
|
|
|
|
Name: アトラス ..初心者(6,393ポイント)
Date: 2010/10/10(日) 01:29
No:63067
|
|
Title: 検索&置換ボックスが表示されない
|
|
VC++2008ExpressEditionを使っているのですが、
Ctr+F を押しても、編集メニューの置換と検索を押しても
検索ボックスが出てこなくなりました
不便で大変困っているのでアドバイスよろしくお願いします
51ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,288,735ポイント)
Date: 2010/10/10(日) 01:38
No:63069
|
|
Title: Re:検索&置換ボックスが表示されない
|
|
その不具合には出会ったことがありませんが、VC++ってたまにおかしな挙動をする時がありますよね。
そんな時は不必要なファイルを全部消して再起動すると戻る事があるかもしれません。
ソースコード(*.cpp, *.h)と
プロジェクト名.sln
プロジェクト名.vcproj
以外のファイルは消しても問題ありません。(DebugフォルダやReleaseフォルダも含め)
VC++を閉じ、不要なファイルを全て消してVC++を再起動してみてはどうでしょう。
これでうまくいかなければ再インストール以外に私は方法をしりません。。
226ポイント を手に入れた。
|
|
|
|
|
Name: アトラス ..初心者(6,445ポイント)
Date: 2010/10/10(日) 08:38
No:63074
| 解決!
|
Title: Re:
|
|
再起動しても変わらず・・・と思ったら自己解決しました。
なんとスクリーンの外にはみ出ていました(正確には端っこ数ドットがかろうじて見えていた状態
どうしてそんな所にウィンドウが行ってたのか謎ですが
ありがとうございました。
2倍のポイントを手に入れた! 52ポイント を手に入れた。
|
|
|
|
Name: ポルク ..ぴよぴよ(25ポイント)
Date: 2010/10/09(土) 01:46
No:62951
|
|
Title: C言語取得
|
|
初めまして。主さんのHPを見てC言語を始めようと思ったのですが、コンバイルを入手はしたものの、基本的なプログラムがやっぱりまだ全然わかりません・・。
C言語を取得するには本を見ながらやった方がいいのか、ネットで検索して覚えていったほうがいいのかどっちがいいでしょうか?
ぁ、、良かったら主さんがオススメするC言語入門サイトなんか教えてくれたらうれしいです。。。
良かったら返信お願いします。
25ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,286,260ポイント)
Date: 2010/10/09(土) 02:01
No:62955
|
|
Title: Re:C言語取得
|
|
> ポルクさん
こんにちは^^
私のHPを見てC言語を勉強しようと思って頂けたとは光栄です。
これから難しい事や辛い事も沢山あるかもしれませんが、共にがんばっていきましょう☆
さて、本・ネットはそれぞれに長所短所があります。
HPの解説はボランティアで作っているので、図が少なかったりあまり解説が念入りに考えられた文章では無かったりします。
その代わりソースがコピペ出来るのは便利です。
本は売り物ですから、よく考えて書かれていて解説も非常に解りやすい物が多いです。
ただ、コピペが出来ないので、プログラムを書くのに時間がかかります。
しかし最初は全て手打ちした方が良いかもしれませんし、CDロム付の本を買うなど方法もあるかもしれません。
私がお勧めする方法としては、まず「C言語 入門」でググります。
解説サイトが山のように出てきますので、順番に見ていって自分が読みやすそうだと思ったサイトで"ある程度"勉強して見て下さい。
google先生は賢いので、上にあるものほど読みやすい場合が多いです。
"ある程度"C言語に慣れてきたら大きな書店に行きます。
C言語の解説書もこれもまた山のようにありますが、端から手に取ってパラパラ見ていきます。
「これが読みやすそう」と思った本を購入してしっかり勉強して下さい。
人が勧めるより自分が読みやすそうだと思った本の方が良いと思います。
それでも何か勧めてほしいという事でしたら、
http://www.amazon.co.jp/%E6%96%B0%E7%89%88-%E6%98%8E%E8%A7%A3C%E8%A8%80%E8%AA%9E-%E5%85%A5%E9%96%80%E7%B7%A8-%E6%9F%B4%E7%94%B0%E6%9C%9B%E6%B4%8B/dp/4797327928
この辺お勧めです。この次は実践編を読んでください。
先ほど"ある程度"といったレベルはパラパラ参考書を読んでどれが解りやすそうか解るレベルです。
詳しい文法を覚えているような必要はありません。
ネットでも勉強できるでしょうが、やはり勉強する為には自分の財布を痛めたほうが良い事が多いです。
ところで、プロジェクトを作ってhello worldをコンパイルするところまではいきました?
※
念のため、コン「パ」イル (コンバイルではなく)
また、機械語に変換する事をコンパイルといい、その作業をしてくれるソフトの事をコンパイラと言います。
577ポイント を手に入れた。
|
|
|
|
|
Name: ポルク ..ぴよぴよ(106ポイント)
Date: 2010/10/09(土) 02:22
No:62957
|
|
Title: Re:C言語取得
|
|
>シエルさん>管理人さん
詳しい返信ありがとうございます・・!
とても参考になります。まだ始めたばっかですが頑張って勉強します。ありがとうございましたm(_ _)m 
81ポイント を手に入れた。
|
|
|
|
|
Name: ポルク ..ぴよぴよ(196ポイント)
Date: 2010/10/09(土) 02:55
No:62959
|
|
Title: Re:C言語取得
|
|
連続で返信すいません。
>管理人さん
>ところで、プロジェクトを作ってhello worldをコンパイルするところまではいきました?
ここまではなんとかできました。ここから先どうしよう・・と思い質問しようと思った次第です。
90ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(44,610ポイント)
Date: 2010/10/09(土) 07:59
No:62967
|
|
Title: Re:C言語取得
|
|
>ここまではなんとかできました。ここから先どうしよう・・と思い質問しようと思った次第です。
プログラムを習得するには、とにかく読んで、とにかく書くのが一番の近道です。
最初はきちんと書いたつもりでも、意図しない振る舞いをすることが多々あると思います。(慣れてきても日常茶飯事ですが)
何故、そういう動きをするのか調べたり考えたりしていく内に、上達していきます。
とりあえず、FizzBuzzゲームなど、簡単な問題から解いていくのがいいと思いますよ。
ここの掲示板では、コンソールでピラミッド? 三角形? を描画させる問題が流行っているような気がします。
応用してパスカルの三角形を描画してみてもいいですね。
15ポイント を落としてしまった。
|
|
|
|
|
Name: 白 ..中級者(11,380ポイント)
Date: 2010/10/09(土) 11:41
No:62976
|
|
Title: Re:C言語取得
|
|
僕も初心者なので余り参考にならないかもしれませんが、
シエルさんがお書きになられたHPの例を一通りやってみたら、
簡単なライフゲームを自力で作ってみるといいと思います。
54ポイント を手に入れた。
|
|
|
|
|
Name: ポルク ..ぴよぴよ(206ポイント)
Date: 2010/10/10(日) 00:05
No:63063
| 解決!
|
Title: Re:C言語取得
|
|
ありがとうございます! 参考にさせてもらってやってみまする
10ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(20,555ポイント)
Date: 2010/10/09(土) 22:05
No:63052
|
|
Title: 座標の回転
|
|
なぜか座標を回転するサンプルを作ってみました。
参考になれば幸いです。
添付したサンプルの計算部分のみ抽出して掲載しておきます。
ox,oy:結果を代入するポインタ
cx,cy:回転の中心の座標
mx,my:回転される座標
angle:回転角度(ラジアン、時計回り)
void kaiten(double* ox,double* oy,
double cx,double cy,double mx,double my,double angle) {
double length;/*斜辺の長さ*/
double sinmoto,cosmoto;/*元のsin,cos*/
double sinsaki,cossaki;/*回転後のsin,cos*/
length=sqrt((mx-cx)*(mx-cx)+(cy-my)*(cy-my));
if(length==0) {
*ox=mx;
*oy=my;
return;
}
sinmoto=(cy-my)/length;
cosmoto=(mx-cx)/length;
/*加法定理*/
sinsaki=sinmoto*cos(angle)+cosmoto*sin(angle);
cossaki=cosmoto*cos(angle)-sinmoto*sin(angle);
*ox=cx+length*cossaki;
*oy=cy-length*sinsaki;
}
/*ニュートン法*/
double sqrt(double in) {
double x=2.0;
double nextx=1.0;
while((x>=nextx?1:-1)*(x-nextx)>0.0000000001) {
x=nextx;
nextx=x-(x*x-in)/(2*x);
}
return nextx;
}
/*
高校生のための マクローリン展開(1)
http://bit.ly/9Z2PNX
より
*/
double cos(double angle) {
double result=1.0;
double temp;
int i,j;
double fugou=-1;
for(i=2;i<=30;i+=2) {
temp=fugou;
for(j=0;j<i;j++)temp*=angle;
for(j=1;j<=i;j++)temp/=j;
result+=temp;
fugou=-fugou;
}
return result;
}
/*
高校生のための マクローリン展開(2)
http://bit.ly/bfVyXy
より
*/
double sin(double angle) {
double result;
double temp;
int i,j;
double fugou=-1;
result=angle;
for(i=3;i<=31;i+=2) {
temp=fugou;
for(j=0;j<i;j++)temp*=angle;
for(j=1;j<=i;j++)temp/=j;
result+=temp;
fugou=-fugou;
}
return result;
}
930ポイント を手に入れた。
|
|
|
Name: 山崎 ..熟練のプログラマー(51,036ポイント)
Date: 2010/10/08(金) 10:55
No:62909
|
|
Title: placement new について
|
|
おはようございます。
いつもお世話になっております、山崎と申します。
今回は、placement new についていくつかお伺いに参りました。
OSはXP、エディタはVisual Studio2010を使っております。
前々から興味があったplacement newについて、現在いろいろ調べております。
普通のnewよりどれくらい高速に動作するのかを調べようとプログラムを作っていたのですが、
その前にいろいろわからないことが出てきましたので、皆様のお力をお借りしたいと思います。
なお、placement new については主に以下のサイトを参考に学習しております。
http://www.geocities.jp/ky_webid/cpp/language/036.html
1.
メモリプールとして前もって確保しておくメモリ領域の型は、何でもいいのでしょうか?
char型として確保した領域にint型の値を割り当てたり、
あるいは自作したクラスの型でメモリを確保し、その領域にさらに違うクラスの値を割り当てるなど…。
そういうことは可能なのでしょうか。または、そういった使い方は安全なのでしょうか。
2.
メモリプールの、既に値を割り当てて使用中の領域に対して、誤ってさらに値を割り当てようとした時、
それは実行時エラーにならないのでしょうか?
仮にそれがエラーにならないとしたら、
「メモリプールのどこが使用中で、どこが空いているか」という情報の管理は、
プログラマがしなければいけないのでしょうか。
3.
メモリプールの中のどの位置に値を割り当てるかは選ぶことができるのでしょうか?
4.
デストラクタを明示的に呼び出した後の領域は、不定な値にならないのでしょうか?
仮に、デストラクタで後処理した後の領域に誤ってアクセスしてしまった場合、
デストラクタが呼び出された後の未使用領域ということに気づかずそのままプログラムが走り続けてしまうのでしょうか。
5.
普通のnewに比べて、placement newはどれくらい高速なのでしょうか。
自動変数を利用するくらいに高速なのでしょうか。
似たような意味の質問もあるとは思いますが、どうかお教えいただければ幸いです。
参考に、placement newをとりあえず試しに使ってみた時のコードを貼り付けておきます。
#include <stdio.h>
#include <stdlib.h>
#include <new>
class TestClass
{
public:
int TestInt;
double TestDouble;
TestClass() {printf("called constructor\n");}
~TestClass() {printf("called destructor\n");}
void PrintMember() {printf("Int=%d Double=%lf \n",TestInt,TestDouble);}
void SetMember() //テキトーな値を入れてみる
{
TestInt=rand();
TestDouble=(double)rand()/10;
}
};
int main()
{
char* Pool=new char[sizeof(TestClass)*5]; //char型でメモリプールを作る
TestClass* TestSpace[5];
for(int i=0;i<5;i++)
{
TestSpace[i]=new(Pool) TestClass();
TestSpace[i]->SetMember();
}
TestSpace[0]->~TestClass();
return 0;
}
1,184ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..ハッカー(229,901ポイント)
Date: 2010/10/08(金) 12:11
No:62911
|
|
Title: Re:placement new について
|
|
> 1.
> メモリプールとして前もって確保しておくメモリ領域の型は、何でもいいのでしょうか?
> char型として確保した領域にint型の値を割り当てたり、
> あるいは自作したクラスの型でメモリを確保し、その領域にさらに違うクラスの値を割り当てるなど…。
> そういうことは可能なのでしょうか。または、そういった使い方は安全なのでしょうか。
一般的には不可能ですし、安全でもありません。
x86であれば、たまたま動くとは思いますが...
> 2.
> メモリプールの、既に値を割り当てて使用中の領域に対して、誤ってさらに値を割り当てようとした時、
> それは実行時エラーにならないのでしょうか?
> 仮にそれがエラーにならないとしたら、
> 「メモリプールのどこが使用中で、どこが空いているか」という情報の管理は、
> プログラマがしなければいけないのでしょうか。
メモリプールというのが何を指しているのか分かりませんので、それ次第でしょう。
> 3.
> メモリプールの中のどの位置に値を割り当てるかは選ぶことができるのでしょうか?
これも、その「メモリプール」次第です。
> 4.
> デストラクタを明示的に呼び出した後の領域は、不定な値にならないのでしょうか?
> 仮に、デストラクタで後処理した後の領域に誤ってアクセスしてしまった場合、
> デストラクタが呼び出された後の未使用領域ということに気づかずそのままプログラムが走り続けてしまうのでしょうか。
不定だという認識でよいと思います。
誤ってアクセスした場合でも検出方法はありませんので、ポインタにNULLを入れておくなどしたほうが無難です。
> 5.
> 普通のnewに比べて、placement newはどれくらい高速なのでしょうか。
> 自動変数を利用するくらいに高速なのでしょうか。
newに渡すメモリブロックを割り付ける時間によります。
137ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..熟練のプログラマー(51,119ポイント)
Date: 2010/10/08(金) 19:58
No:62932
|
|
Title: Re:placement new について
|
|
たかぎさん
ご返信、まことにありがとうございます。
まだまだ学習中の身ですので拙い質問だったかもしれません、
御親切にお答えくださりありがとうございました。
83ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..プログラマー(25,488ポイント)
Date: 2010/10/09(土) 01:55
No:62954
|
|
Title: Re:placement new について
|
|
> TestSpace[i]=new(Pool) TestClass();
上記のコードだとTestSpace[0]〜TestSpace[4]に入るアドレスはすべてPoolと同じアドレスになるのですけど。
2倍のポイントを手に入れた! 68ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..熟練のプログラマー(51,307ポイント)
Date: 2010/10/09(土) 09:23
No:62969
|
|
Title: Re:placement new について
|
|
ISLeさん
ご返信ありがとうございます。
おっしゃるとおりで、上のソースコードでは全て同じ場所に値が代入されてしまっていて、
コードを書いた人が期待したであろう結果が得られていません。
そんな事態が起こったので、こちらで質問をするにいたったというわけなのです。
ただ、質問の趣旨は「期待した結果が得られないのですが、どこをどう直せばいいのですか」ではなく、
3番目に質問させてもらったように「値を割り当てる場所は指定できるのかどうか」と少し一般的な
感じの質問にさせていただきました。
188ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(22,019ポイント)
Date: 2010/10/09(土) 10:38
No:62970
|
|
Title: Re:placement new について
|
|
placement new は必要無いのであれば使わないに限りますが、どうしても必要だということになれば、最低でもアライメントの知識は入れておくべきでしょう。
http://d.hatena.ne.jp/Cryolite/20051102#p1
がよくまとめられています。
>あるいは自作したクラスの型でメモリを確保し、その領域にさらに違うクラスの値を割り当てるなど…。
>そういうことは可能なのでしょうか。または、そういった使い方は安全なのでしょうか。
仕様上では、たとえば、
void* p; // 何かの領域が割り当てられているとする
Hoge* q = new(p) Hoge();
Fuga* r = new(p) Fuga();
のように、同じ領域に別のオブジェクトを構築することは未定義です。なぜかというと、q のライフタイムが終了する前に p の領域に別のオブジェクトを構築しているからです。
void* p;
Hoge* q = new(p) Hoge();
q->~Hoge();
Fuga* r = new(p) Fuga();
とするのは、デストラクタ呼び出しによって q のライフタイムが終了しているため、この領域を使っても構いません。
デストラクタを呼ばずに構築してもいいケースはいくつか挙げられますが、一般的にはこのように明示的にデストラクタを呼んでから再構築するべきです。
2倍のポイントを手に入れた! 838ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(53,991ポイント)
Date: 2010/10/09(土) 11:42
No:62977
|
|
Title: Re:placement new について
|
|
私も基本的には、明確なメリットがなければ「やめといたほうが」と思いますが、
> 3番目に質問させてもらったように「値を割り当てる場所は指定できるのかどうか」
ということなら、
TestSpace[i]=new(Pool) TestClass();
↓
TestSpace[i]=new(Pool+sizeof(TestClass)*i) TestClass();
でいけるんじゃないですかね。
100ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..プログラマー(25,562ポイント)
Date: 2010/10/09(土) 18:26
No:63037
|
|
Title: Re:placement new について
|
|
> ただ、質問の趣旨は「期待した結果が得られないのですが、どこをどう直せばいいのですか」ではなく、
> 3番目に質問させてもらったように「値を割り当てる場所は指定できるのかどうか」と少し一般的な
> 感じの質問にさせていただきました。
指定したアドレスから始まる領域にオブジェクト割り付ける機能でしかないので、どんなアドレス値を渡すか、いつどこに領域を確保するか、はすべてプログラマの責任で行う必要があります。
自前で管理するメモリプールを使いたいならnewとdeleteをオーバーライドすればdeleteもふつうに呼び出せて差し替えとか楽です。
落ち物パズルゲームみたいにオブジェクトの最大数が決まっているときに固定で確保したメモリを使い回すのをやったことあります。
あとVisual C++の有償版にあるDEBUG_NEWマクロと同時に使えませんね。
newのオーバーライドでデバッグしたいところに合わせてメモリ確保の方法を切り替えると効率が良いです。
2倍のポイントを手に入れた! 30ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..熟練のプログラマー(51,533ポイント)
Date: 2010/10/09(土) 21:43
No:63051
| 解決!
|
Title: Re:placement new について
|
|
ぬるぽんさん、ookamiさん、ISLeさん、
ご返信まことにありがとうございます。
皆様に提示いただいたサンプルコードやサイト、ノウハウのおかげで
なんとかplacement newを使っていくことができそうです。
御親切にお教えいただき、誠にありがとうございます。
ぬるぽんさん
紹介頂いたサイトを拝見しました。
placement newに関するノウハウがたくさんつまっているようでした、
この後じっくり読ませて頂きますね。
お気に入りに登録して、ことあるごとに参考にさせて頂きます。
ookamiさん
なるほど、newのカッコの中身でアドレスを指定すればいいのですね・・・。
参考にしてプログラムを組んでみようと思います。
ありがとうございます。
ISLeさん
やはり、プログラマが管理する必要があるのですね・・・。
やってみようと思います。
アドバイス誠にありがとうございました。
226ポイント を手に入れた。
|
|
|
|
Name: WHITE ..ぴよぴよ(212ポイント)
Date: 2010/10/09(土) 19:33
No:63040
|
|
Title: GDIのみでゲーム作り
|
|
少し前にC言語の勉強を始めた者です。
ざっくりとした質問になってしまいますが、描画にWin32APIのGDI関数だけを使って
リアルタイムに動くゲーム(グラ●ィウスとかのシューティングのような)を作ることは可能なのでしょうか?
また、作ることができる場合どのようなものまでつくれるのでしょうか?
(なにかゲームの作品名をあげてもらえるとイメージしやすくて助かります。)
ウインドウズに付属するピンボール(Space Cadet)のようなものはDirectXをつかっているのでしょうか?
よろしくお願いします。
212ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(87,754ポイント)
Date: 2010/10/09(土) 19:42
No:63041
|
|
Title: Re:GDIのみでゲーム作り
|
|
私は実際にWINAPIだけを使ってシューティングをある程度まで完成させました。
私の作り方がまずかったのか、弾を300発程度描画したら、処理落ちしたり
ほかにも高度なエフェクトを表現できなかったので、
今は描画部分をDirectXに移行させて現在作り直しています。(DXライブラリではありません)
ですので、シューティングもある程度のものなら十分作れると思います。
ですが、画像を回転させたり、高度なアルファブレンディングをしたりなどになってくると
DirectXなどを使わないと表現できなくなってきます。
ですので、そんなにクオリティの高いゲームでなければ十分作れます。 
236ポイント を手に入れた。
|
|
|
|
|
Name: WHITE ..ぴよぴよ(355ポイント)
Date: 2010/10/09(土) 19:52
No:63042
|
|
Title: Re:GDIのみでゲーム作り
|
|
シエルさん、回答ありがとうございます。
やはりある程度までは可能なのですね、
しかし高度な表現が使えないということですか・・
状況に応じてDirectXを使うこともしなきゃいけないということですね。
ちなみにシエルさんは開発環境(コンパイラ)はなにをつかっていますか?
私はMinGWを使っているのですが、MinGWからのDirectXの使い方がいまいちわかりません。
(本当はDXライブラリをMinGWで使える方法がわかればいいんですが・・・)
参考になるサイトとかをご存知であれば教えていただけると助かります。
143ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(87,846ポイント)
Date: 2010/10/09(土) 20:00
No:63045
|
|
Title: Re:GDIのみでゲーム作り
|
|
私はVisual C++ 2008 Express Editionです。
私はまだC言語暦5ヶ月程度ですので、ほかのコンパイラは使ったことがありません^^;
MinGWなんか聞いたことないですね^^;
DXライブラリも普段まったく使わないので、ちょっとアドバイス出来そうにありません。
申し訳ありません。
ですので、ほかの方よろしくお願い致します^^
92ポイント を手に入れた。
|
|
|
|
|
Name: WHITE ..ぴよぴよ(392ポイント)
Date: 2010/10/09(土) 20:59
No:63049
| 解決!
|
Title: Re:GDIのみでゲーム作り
|
|
シエルさん、softyaさん
ありがとうございました。
早速参考にさせていただきます。
37ポイント を手に入れた。
|
|
|
|
Name: 笹身 ..ぴよぴよ(548ポイント)
Date: 2010/10/09(土) 17:45
No:63034
|
|
Title: グローバル変数
|
|
こんばんは、笹身という者です。
今回はグローバル変数について、質問があるので質問掲示板にて、質問させて頂きます。
本題ですが、グローバル変数は、使わないほうがいい、危険性がある。などと言われているので
なるべくグローバル変数の使用を抑えようとしているのですが、
今回の場合、グローバル変数を使わないでどのように表現したらよいでしょうか?
開発環境:VC++
言語:C言語
ソースコード
"test1.h"
//プレイヤーデータ
typedef struct Player{
int Graph[12]; //プレイヤー画像の取得
int X; //プレイヤー座標Xの取得
int Y; //プレイヤー座標Yの取得
int direction; //プレイヤーの向き(9=上 0=下 6=右 3=左)
int walk_flag; //プレイヤーの移動状態(止まっているか動いているか)
}Player;
test2.cpp
void PLAYER_walking(){
//構造体の初期化
Player Player; //プレイヤーのデータ(画像、座標(XY)向き)
Player.direction; //向き
Player.X = PLAYER_X;//X座標
Player.Y = PLAYER_Y;//Y座標
Player.walk_flag =0;//移動状態(1=ON)
//数変数群
LoadDivGraph( "test.png" , 12 , 3 , 4 , 32 , 32 , Player.Graph );//プレイヤー画像
.
.
.
void Barret_data(){
ここにプレイヤーの座標と向きを元に弾を表示させたいのですが、
もう一度構造体を初期化(?)して、向き、座標を取得しないといけないのでしょうか?
グローバル変数を使うと簡単に取得できるのですが、使わないほうがいいと言われているので
なるべく使いたくないです。
コードが分かりにくかったら申しわけございません。
548ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(19,625ポイント)
Date: 2010/10/09(土) 17:54
No:63035
|
|
Title: Re:グローバル変数
|
|
コード全体を見ないとよくわかりませんが、
関数の引数でポインタを渡すというのはどうですか?
構造体のポインタのメンバへのアクセスは.のかわりに->を使います。
変数のポインタを取得するには、変数の前に&をつけます。
70ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,287,385ポイント)
Date: 2010/10/09(土) 18:18
No:63036
|
|
Title: Re:グローバル変数
|
|
グローバル変数は安全に使えば非常に有用です。
むしろCで大きなプログラムを書くならモジュールごとに共通に使える変数は用意するべきでしょう。
C++ではクラスのメンバ変数として複数の関数間で共通に使う変数が用意出来ますが、
Cではそれが出来ません。しかしファイルごとにファイルの先頭にstatic変数を用意すれば似たような事が出来ます。
複数のファイル間で共通して使えるグローバル変数は0にし(全てのグローバル変数はstatic)、
値の取得はそのファイルに書いたGet関数を通して得るようにします。
そうすることで危険性は減らせます。
例えば、自機モジュールとそれを管理するメインモジュールがあったとしましょう。
自機.hにはメインモジュールから呼び出す関数のプロトタイプ宣言を書きます。
自機.cにはまず先頭に、上のプログラムで言う
statict Player_t Player;
を書き、Player自機.cのファイルの中ではどの関数からでもアクセスできるようにします。
(ただし、staticが付いているので、このファイルの外からはアクセスできません。)
自機の処理をする関数を自機.cに書きます。
プレイヤーの何らかの値が欲しい場合、例えばプレイヤーの座標を取得するような関数を使いたい時は
void GetPlayerPos( int *x, int *y ){
*x = Player.x;
*y = Player.y;
}
のような関数を通して渡してあげます。
そうすれば、元の変数の値が書き換わる可能性がありません。
493ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,287,906ポイント)
Date: 2010/10/09(土) 18:32
No:63038
|
|
Title: Re:グローバル変数
|
|
goto文もグローバル変数も同じことが言えます。
C言語を学び始めた人には「なるべく使わないように」と教えると思います。
それは良く理解せずに使うと非効率になりがちだからです。
でもgoto文もグローバル変数も正しく使えば非常に有用です。
例えばgoto文で言えば、深いループから抜ける時や、終了処理をしてから関数を抜けたい時など、
goto文を使った方がスマートになる場合があります。
また、グローバル変数の使い方の例として以下のようなプログラムを書いてみました。
完全にモジュールを切り分ける単位として解りやすいモジュールとしてUIがあるでしょう。
ここではキーボードをUIとしています。
/*** UI.h ***/
// キーの入力状態を計算する
int UI_CalcHitKeyStateAll();
// KeyNumberのボタンの入力状態を返す
int UI_GetHitButton( unsigned char KeyNumber );
/*************************************************/
/*** UI.cpp ***/
#include "DxLib.h"
static int gKey[ 256 ]; // キー入力状態を格納するための int型配列
// キーの入力状態を計算する
// 返り値 0:正常
int UI_CalcHitKeyStateAll(){
int i;
char KeyInputNow[256]; // 現在のキーの入力状態を格納する配列
GetHitKeyStateAll( KeyInputNow ); // 現在のキーの入力状態を取得
for( i=0; i<256; i++ ){
if( KeyInputNow[i] == 1 ){ // i番目のキーが押されていたら
gKey[i]++; // i番目の配列要素の値を加算
} else { // i番目のキーが押されていなかったら
gKey[i] = 0; // 要素の中身を0に
}
}
return 0;
}
// KeyNumberのボタンの入力状態を返す
// 返り値 自然数:KeyNumberのキーの入力状態
int UI_GetHitButton( unsigned char KeyNumber ){
return gKey[ KeyNumber ];
}
/*************************************************/
このプログラムはゲームプログラミングの館のGetHitKeyStateAll_2をゲームのモジュールに適用したものです。
どのキーが現在おされているかという情報はあらゆるモジュールが必要とします。
しかし、どこからでもその情報が書かれている変数にアクセス出来てしまうと、安全性が下がります。
そこで、変数に直接アクセスすることなく値を取得する為に、UI_GetHitButton関数 を利用します。
こうすることで安全にグローバル変数の値を取得できます。
また、グローバル変数の値が書き換わるタイミングがわけわからないなんてことにもなりません。
キーボードの入力状態を取得したいファイルの先頭に
#include "UI.h"
を書きます。すると、そのファイルからこの関数が呼べるようになります。
全てのモジュールにおいてこの要領で作っていけばかなり大きな構造でも対応出来そうです。
ただやはりC++よりは非効率になる事が多いですが・・。
521ポイント を手に入れた。
|
|
|
|
|
Name: 笹身 ..ぴよぴよ(747ポイント)
Date: 2010/10/09(土) 19:53
No:63043
|
|
Title: Re:グローバル変数
|
|
返信ありがとうございます。
>みけCAT様
引数を使う方法ですが一応考えたのですがどの部分で値を渡せばいいのか分からなくて
断念しました。
>Dixq (管理人)様
グローバル変数、goto文の有用性を丁寧に解説してくださり、ありがとうございます。
今回は、他の関数(当たり判定など)でも、プレイヤーの情報を必要になると思ったので
グローバル変数を使ってみます。
忙しいなかご返信ありがとうございます。
199ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(18,186ポイント)
Date: 2010/10/09(土) 16:29
No:63023
|
|
Title: LoadDivGraph相当のコード
|
|
無謀かもしれませんが、龍神録をDXライブラリを使わずに作ってみようとしています。
しかし、4章でつまずきました。
メインのループに入ってくれません。
メインのループとは、GameThread関数内のwhileのことです。
いろいろ調べてみたところ、
自作LoadDivGraph関数の中の
output[yy*x+xx].bmp=bmp;
output[yy*x+xx].x=xx*sx;
output[yy*x+xx].sizex=sx;
output[yy*x+xx].y=yy*sy;
output[yy*x+xx].sizey=sy;
のところをコメントアウトすると一応動いてくれました。
どこが悪いか教えてくださる人がいたら幸いです。
プロジェクトは添付しました。
画像は「プロジェクトを一括ダウンロード」の中の画像を同名でbmpに変換したものを使用しています。
プロジェクトの変換はhttp://sourceforge.jp/projects/sfnet_prjconverter/を使用しました。
2倍のポイントを手に入れた! 658ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(19,447ポイント)
Date: 2010/10/09(土) 16:58
No:63030
| 解決!
|
Title: Re:LoadDivGraph相当のコード
|
|
main.cpp内の
int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
を
gazou img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
に直したらうまくいきました。
ありがとうございました。
透過処理とかはまたあとで考えます。
2倍のポイントを手に入れた! 268ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(19,695ポイント)
Date: 2010/10/09(土) 17:01
No:63031
|
|
Title: Re:LoadDivGraph相当のコード
|
|
とりあえず実行結果に近くなるようにfunction.cppを修正しました。
DrawRotaGraphF関数内です。
修正前
StretchBlt(to,x,y,
(int)(graph->sizex*ExtRate),(int)(graph->sizey*ExtRate),
gazoufordraw,graph->x,graph->y,graph->sizex,graph->sizey,
SRCCOPY);
修正後
StretchBlt(to,x-graph->sizex/2,y-graph->sizey/2,
(int)(graph->sizex*ExtRate),(int)(graph->sizey*ExtRate),
gazoufordraw,graph->x,graph->y,graph->sizex,graph->sizey,
SRCCOPY);
248ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(17,461ポイント)
Date: 2010/10/09(土) 06:05
No:62962
|
|
Title: Re:無題
|
|
「起動するときのあれ」とだけいわれても何のことかわかりません。
もう少し説明してください。
もしかしてスプラッシュスクリーンのことですか?
41ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(230,009ポイント)
Date: 2010/10/09(土) 06:38
No:62963
|
|
Title: Re:無題
|
|
何が起動するときなのかもわかりませんね。
コンピュータ・ソフトウェアの話だと仮定しても、ブートローダーやスタートアップのことかもしれませんし、オペレーティングシステムの起動処理(OSによってまったく異なるので一概にはいえません)かもしれませんし、オペレーティングシステム上で動作するプロセス等の話かもしれません。

108ポイント を手に入れた。
|
|
|
|
|
Name: hax ..ぴよぴよ(506ポイント)
Date: 2010/10/09(土) 10:39
No:62971
|
|
Title: Re:無題
|
|
恐らく自分はこれを知りたいんだと思いますがビルドってどこですか?
ソフトが完成したらDebugビルドではなくReleaseビルドを行い処理速度の向上を図る
ソフトの開発中はおそらくデバッグスタート(F5で実行)をしていると思いますが、いえ デバッグ機能を使っていなくてもデバッグスタートが出来る実行可能ファイルとしてビルドされますが、 こうして出来る実行可能ファイルはデバッグ用の情報を多く含むのでその情報をいれない時に比べて 200KBほどファイルの容量が増えてしまいます。(処理速度も落ちます)
そこで、ソフトが完成したらリリースビルドという、デバッグ情報を含まない実行可能ファイルを ビルドすることで容量の縮小及び処理速度の向上をすることが出来ます。
方法はまずメニューの『ビルド』→『アクティブな構成の設定』を開きます、すると『〜〜Debug』と 『〜〜Release』がリストの中に表示されていて、おそらく『〜〜Debug』のほうが選択されていると 思いますので、ここでもう一つの『〜〜Release』の方を選択してOKボタンを押します。これでもう一度 ビルドするとリリースビルドされた実行可能ファイルが出来ます。
483ポイント を手に入れた。
|
|
|
|
|
Name: hax ..ぴよぴよ(510ポイント)
Date: 2010/10/09(土) 11:37
No:62975
|
|
Title: Re:無題
|
|
コンパイラじゃなくてVisual C++ 2010 Expressでした(笑)
29ポイント を落としてしまった。
|
|
|
|
|
Name: hax ..ぴよぴよ(584ポイント)
Date: 2010/10/09(土) 12:12
No:62985
|
|
Title: Re:無題
|
|
例えばこんな 起動ファイル のようなものを作りたいわけです。
これで分かりましたでしょうか?
32ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(54,184ポイント)
Date: 2010/10/09(土) 12:15
No:62987
|
|
Title: Re:無題
|
|
Visual C++ 2010 Expressでは、作ったゲームを起動できるんですよね?
なら、デフォルトでは、プロジェクトファイルと同じフォルダの、DebugフォルダまたはReleaseフォルダに、すでにexeファイルができています。
62ポイント を手に入れた。
|
|
|
|
|
Name: hax ..ぴよぴよ(652ポイント)
Date: 2010/10/09(土) 12:40
No:62992
|
|
Title: Re:無題
|
|
Visual C++ 2010 Express はありますが、
DxLib_VC2008用 をしようしています。
26ポイント を手に入れた。
|
|
|
|
|
Name: hax ..ぴよぴよ(740ポイント)
Date: 2010/10/09(土) 13:03
No:62998
|
|
Title: Re:無題
|
|
どうすればいいんですか?
熟練のプログラマー 様
2倍のポイントを手に入れた! 58ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(54,347ポイント)
Date: 2010/10/09(土) 13:05
No:62999
|
|
Title: Re:無題
|
|
添付のように、
「デバッグ開始」か「デバッグなしで開始」をクリックしてください。
エラーが出なければ成功です。
エラーが出たら、それをそのままコピーしてください。 
62ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(54,452ポイント)
Date: 2010/10/09(土) 13:30
No:63009
|
|
Title: Re:無題
|
|
おめでとうございました。
ゲーム制作がんばってください。
ついでに、私は 熟練のプログラマー ではなくて ookami です。
-- 追記
入れ違いになってしまいました。スルーしていただいておkです。 
74ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(104,440ポイント)
Date: 2010/10/07(木) 19:39
No:62878
|
|
Title: なんというか
|
|
シューティングは色々問題ありますが完成しました
その間にタスクシステムだのオブジェクト指向だの考えていた頃はよかったのですが、
いざ作品が完成するとなんだが、やりきってしまった感におそわれ
次の作品も似たようなソース管理になるんだろうなぁ・・・と思うと
なんかやりきれない気持ちです
しかし、作品を作りたいという気持ちはあるんですが、今の精神状態では作品を作る気になれないです
なんというか、この気分が以前の作りたい気持ちに戻る方法ってあるでしょうか?
(わかる方いますかね?)
193ポイント を手に入れた。
|
|
|
|
Name: fr ..ぴよぴよ(226ポイント)
Date: 2010/10/07(木) 19:54
No:62880
|
|
Title: Re:なんというか
|
|
モチベーションの低下ってやつですかね。
ライブラリを構築したのはいいけどそのまま終了してしまうこともよくあるみたいです。
(ゲーム完成まで持っていけない)
57ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(86,971ポイント)
Date: 2010/10/07(木) 20:01
No:62882
|
|
Title: Re:なんというか
|
|
私の場合色んなゲームを見たり、他人のソース見たり、どうにかしてリソース節約できないかとか
考えてると楽しくて仕方がなくなりますけどね。
まあ、今のシューティングが完成したら、気持ちが変わるかもしれませんが。
まだ、私の場合一つもゲームらしいゲームを作ってないことも影響してるかもしれません。
95ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(229,332ポイント)
Date: 2010/10/08(金) 01:43
No:62902
|
|
Title: Re:なんというか
|
|
私の場合は作りたいものが沢山あるので興味に合わせ色々やっています。
サイトを見てもらうと分かりますが自作コンパイラ、マイコンで工作、ツールなどなど。
C#でオリジナルのゲーム、FPGAでCPUコアを書いたり、OSをZEROから構築もやっみたいとか色々野望はありますので特にモチベーションは下がることはなかったですね。
2〜3日ぐらいやる気が出なくても、その内やる気になると思いますが。
187ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(44,516ポイント)
Date: 2010/10/08(金) 08:44
No:62907
|
|
Title: Re:なんというか
|
|
私はよほど暇を持てあますか、必要に迫られない限り何も出来ない人間ですので、何とも言えませんが。
とりあえず、ネットをブラブラしてみるといいと思いますよ。 時々おもしろいおもちゃが落ちてますから。
Diggなんかは結構お勧めです。 個人的にお気に入りのおもちゃ箱です。
以前、アリのエサ拾いアルゴリズムの問題点が指摘されていたのですが、コレにはえらく熱中した覚えがあります。 途中で挫折しましたが。
遺伝的アルゴリズムを知ったのもこのサイトです。 試しにTSP問題を解いてみてやっぱり途中で挫折しましたが。
タカハトゲームを知ったのもこのサイトです。 遺伝的アルゴリズムの交叉戦略に組み込んで見ましたが、あまりいい結果を得られませんでしたが。
そういえば、マイクロソフトのテラリウムを知ったのもこのサイトですね。 面白そうだなとは思いましたが、当時はちょっと忙しくて結局手をつけませんでしたが。
まぁ、何かと暇つぶしには困らないサイトです。
後はインスピレーションだと思いますよ。
2倍のポイントを手に入れた! 548ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(104,478ポイント)
Date: 2010/10/08(金) 13:27
No:62912
| 解決!
|
Title: Re:なんというか
|
|
みなさん色々ご意見ありがとうございます
ブラブラして気分転換しようと思います
ありがとうございました
38ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(53,769ポイント)
Date: 2010/10/08(金) 17:20
No:62920
|
|
Title: Re:なんというか
|
|
> ブラブラして気分転換
phpなどでサーバアプリなんか作ってみるのはいかがでしょう。
Ubuntuを触るとの事なので、ついでにウェブサーバ・アプリサーバ・データサーバを立てて
掲示板を作るだけでも、面白いかもしれません。
ただ、最初の質問が、
> 以前の作りたい気持ちに戻る方法
なので、あまりゲームから離れても微妙かもですね。
「ゲームの面白さとは何か」とか考えるのもいいかもしれません。
52ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,285,683ポイント)
Date: 2010/10/08(金) 20:39
No:62935
|
|
Title: Re:なんというか
|
|
私はモチベーションがそこまで潰えてしまう事はあまり無いのですが、
朝から晩までプログラム以外の事をほとんどしない毎日を1か月続けるとさすがに嫌になってしまったことがあります。
その時は、全くプログラムを書かない生活を1週間続けました。
すると自然とまたプログラムが書きたくなりました。
ただ「モチベーションをあげる為に他の事で遊んでいる」と思うとあまりよくないのかなと思います。
気を楽にして書きたい時に書くって感じで挑めば自然とモチベーションも上がってくるんじゃないでしょうか?
・・といいつつも私は一度作ると決めた物は絶対に完成させるぞと思って始めるので、途中でちょっと嫌になっても我慢して作り続けたりしていますが^^;
モチベーションを維持し続けるのって難しいですよね。
最近は友達とプログラムの話をすると無性にプログラムが書きたくなります。
「●●って作れそうにないよね」って話になると余計に(笑
大した参考になるかどうかわかりませんが、
「完全にプログラムの事を忘れてみる」「プログラムの話が出来る友人と会話してみる」って感じでどうでしょう。
469ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(105,103ポイント)
Date: 2010/10/08(金) 21:21
No:62937
|
|
Title: Re:なんというか
|
|
>ゲーム公開してほしい
大変ここではお世話になっているので
誰もやらないほどのクオリティですが公開してみます(R指定です)
http://www1.axfc.net/uploader/Li/so/79512
>phpなどでサーバアプリなんか作ってみるのはいかがでしょう。
phpも勉強したいのですが、その前にHTMLを勉強しようかと考えてます
>ゲームの面白さ
そうですね、奥が深いです
キャラクターに感情移入したり、グラフィックがきれいだったり、シナリオが感動的だったり
ゲームシステムがおもしろかったりと多岐に渡ってて、色々考えさせられますね
>一度作ると決めた物は絶対に完成させるぞと思って始めるので
やっぱりここが違いますね
私だったら、毎日コツコツ積み重ねるようにプログラムを組み立てる感じで
エラーとかでると 結構へこみますね
>「完全にプログラムの事を忘れてみる」「プログラムの話が出来る友人と会話してみる」って感じでどうでしょう。
なかなか地方ではパソコンは持ってるけどプログラムまでは・・・というのが現状で
めったに会えないですね
どちらかというと相手に会話を合わせないと、なかなか会話がはずまないです
//-----------------------------------------------------------------------------
Ubuntu インストールしてみましたが、キーボードを認識せずログインができずに・・・
Vine Linuxで遊びます
gccの勉強にもなるかな
サーバー関連はまだちょっと無理っぽいです
494ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(39,263ポイント)
Date: 2010/10/08(金) 21:38
No:62938
|
|
Title: Re:なんというか
|
|
プレイさせてもらいました♪
絵はdicさんが描かれてるんですか?
上手なので羨ましいです(’
少しバグを見つけので・・・
前のステージの音楽が重複して次のステージを遊ぶときに流れてました。
98ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(87,226ポイント)
Date: 2010/10/08(金) 22:13
No:62940
|
|
Title: Re:なんというか
|
|
これステージによって難易度は変わらないんですか?
ただ背景の絵が変わってるだけのような気が。
あとバグとして、
次のステージに行ったときに前回ステージ時クリア時の爆発が一瞬描画されてます。
第四ステージクリア時にゲームが止まります。
もうちょっと色々と改良できる点が結構あると思うので、
その辺見つけるだけでも私は意欲的になれますけどね。
123ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..熟練のプログラマー(41,662ポイント)
Date: 2010/10/08(金) 22:53
No:62945
|
|
Title: Re:なんというか
|
|
私は大した数のゲームを完成させたことはないですが、
なんとなく、dicさんの気持ちが分かる気がします。
私が考える解決方法としては、
コードを書くのが苦痛にならないほど、ゲームを作りたいと思うのが一つです。
やはりそれは、ゲームそのものをプレイするのが一番いいんじゃないんでしょうか。
もう一つは、コードを書くことを楽しむこと、
それには、既存のゲームのコードを読むのもありですが、
ゲームプログラミングの書籍を買って、それを読むのが良いと思います。
144ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(44,625ポイント)
Date: 2010/10/09(土) 07:35
No:62966
|
|
Title: Re:なんというか
|
|
やってみました。
ゲーム起動後、最初のステージ選択でステージ1以外を選択すると、クリア時に異常終了するようです。
ステージ1クリア時には、クリアーという文字が表示されますが、他のステージクリア時には無いようですね。
109ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(45,009ポイント)
Date: 2010/10/09(土) 12:00
No:62981
|
|
Title: Re:なんというか
|
|
ソースコードついていたのですね。 ざらっと見てみました。
まず、先に挙げたバグについては、各ステージクラスのメンバ関数 Move 内のクリア条件を満たした時の処理で、すべてのステージで *mode = def_mode_stage1_clear; となっているのが原因ですね。
それとプログラムの構造ですが、若干スパゲッティ気味になっているようです。 ステージ毎にクラスを定義していますが、ステージの差異はパラメータ化出来ますので、ステージ毎にクラスの定義どころか、ステージ毎のインスタンスすら必要ないでしょう。
各ステージのソースコードは、ステージ1のソースコードをコピー&ペーストしてちょこちょこっと書き換えてはいませんか。 こういう場合人間のやることですから書き換え漏れなんてことが往々にして発生します。
こういう場合もパラメータ化して1つの関数に切り分けてあげるのが常套手段です。 今回の場合はその必要もありませんが。
ちょっと無駄が多いようなので、これで完成。 ビールだわーい。 などと思わずにいじくり倒して見てはどうでしょうか。
一度リファクタリングしてみることをお勧めします。 恐らくソースコードは半分以下になるでしょう。
399ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(229,509ポイント)
Date: 2010/10/09(土) 12:23
No:62988
|
|
Title: Re:なんというか
|
|
私もソースコードを見させていただきました。
動作パラメータをcsv化したりテーブル化したりするだけでかなり効率化すると思います。
switchの部分はタスクシステム化も良いかも知れません。
ほとんど同じようなコード部分があちこちにありますので、これだとちょっと差異でのステージ毎の動作が違うのもうなずけます。徹底して同じようなコードは書かない(共通化する)ことが解決策になると思います。
138ポイント を手に入れた。
|
|
|
|
Name: ai ..ぴよぴよ(50ポイント)
Date: 2010/10/05(火) 22:11
No:62806
|
|
Title: 合計値
|
|
はじめまして
0が入力されるまで数値を入力していき、
0が入力されたら
サブルーチンに合計をだし
終了するプログラムを作りたいのですが・・
どうしたら良いでしょうか??
50ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..上級者(16,167ポイント)
Date: 2010/10/05(火) 22:33
No:62809
|
|
Title: Re:合計値
|
|
>0が入力されるまで数値を入力していき
int input,sum=0;
do {
scanf("%d",&input);
sum+=imput;
} while(input!=0);
>サブルーチンに合計を出力する
すいません、よくわかりません。
104ポイント を落としてしまった。
|
|
|
|
|
Name: ai ..ぴよぴよ(86ポイント)
Date: 2010/10/06(水) 10:18
No:62815
|
|
Title: Re:合計値
|
|
mainじゃなくって
別のとこに
入力した数値の合計をだすんです(´・ω・`)
36ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,447ポイント)
Date: 2010/10/06(水) 11:36
No:62816
|
|
Title: Re:合計値
|
|
前のプログラムの続きで
subroutine(sum);
/*ここまでをmain関数に入れる*/
/*宣言*/
void subroutine(int sum) {
/*処理*/
}
ということですか?
subroutineのプロトタイプ宣言も忘れずにしてください。
2倍のポイントを手に入れた! 252ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(53,662ポイント)
Date: 2010/10/06(水) 12:27
No:62817
|
|
Title: Re:合計値
|
|
言語も指定されてないしヒマだったので
バッチで書いてみましたwwww
@echo off
set sum=0
:re
set /p i=">"
if "%i%"=="0" goto end
set /a sum=%sum%+%i%
goto re
:end
echo 合計値:%sum%
pause
2倍のポイントを手に入れた! 188ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,285,214ポイント)
Date: 2010/10/08(金) 20:02
No:62933
|
|
Title: Re:合計値
|
|
> 住所特定反対さん
ここは、読んでいる人が不快な思いをしないコメントであれば何を投稿しても良い事になっています。
トピ立ても自由で、内容も何でも良いことになっています。
逆に言えば規約の根底にあるのは「他人が不快に思うコメントはダメ」という事です。
前から何度かトラブルになっていると思います。
なるべく丁寧な言葉で書いていただけると幸いです。
また、出来れば誤解を招くようなお名前は使って頂きたくないのですが、何か一般的な名前に変更して頂けないでしょうか?
※
今回のookamiさんの回答はその前に既にちゃんとCの回答が付いていて、質問者さんが必要ないと思えば読み飛ばすこともできたので、質問者さんは困ったり不快に思ったりはされなかったと思います。
むしろもし興味があれば、他の知識も付けられるということで良い機会だったのではないでしょうか。
> ookamiさん
対応が遅くなってすみません。今後も気軽にコメントして下さいね。
348ポイント を手に入れた。
|
|
|
|
Name: black_cat ..かけだし(2,257ポイント)
Date: 2010/10/04(月) 19:46
No:62731
|
|
Title: C# Box2D 画像適用2
|
|
「C#の基礎を固めては?」と言われて、そう決めたのですが、また投稿してしまいました。
何度もすみません。
C#をもっと勉強することに決めてC#の本も買って何度も読んだので、基礎中の基礎は理解したつもりです。
ですが、やっぱり目標がないと、次に何を勉強すればいいのか分かりません。
そこで、もし答えてくださるのであれば、
今の私ではとうてい理解できないような難しい回答でも構いませんので、
やり方だけでも教えていただけないでしょうか?
やりたいことは、
前回教えてくださったBox2Dのオブジェクトに画像を適用する方法では、すべてのオブジェクトが同じ画像になってしまうので、
各オブジェクトごとに違う画像を適用することです。
使用言語はVC#です。
もうサンプルコードに頼ったりせず、自分でしっかり考えようと思っています。
回答が理解できるように一生懸命がんばりますので、よろしくお願いします。
最後に、いつもわがままばかり言ってごめんなさい。
382ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(583,457ポイント)
Date: 2010/10/07(木) 01:52
No:62858
|
|
Title: Re:C# Box2D 画像適用2
|
|
>Box2Dのオブジェクトに画像を適用する方法
Imageを必要な数の分だけ持っておきます(ロードしておく)。
ここまではいいですよね?
Bodyクラスはメソッド SetUserDataを使って何か情報を設定しておくことができます
(引数は object型なのでどんな型でも受け付けます)。
そうするとメソッド GetUserDataを使い、設定した時の型でキャストすればその情報を取り出すことができます
(設定していなかったり、設定したときの型と異なると例外が出るので注意)。
これを利用して、全てのBodyの生成時にとりあえず種類を表す何か(enumとか数値とか)を入れておいて、
描画時に取り出して調べればそれが何のオブジェクトなのかわかるので、それに対応した
Imageデータを使って表示すればOKです。
269ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(2,321ポイント)
Date: 2010/10/07(木) 07:16
No:62861
|
|
Title: Re:C# Box2D 画像適用2
|
|
ほんといつもありがとうございます。
2段落目からを理解できるように勉強するつもりなんですが、
これは理解して成功したときに「解決」にすればいいのでしょうか?(時間がかかると思うので。)
52ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..入門者(2,595ポイント)
Date: 2010/10/07(木) 21:06
No:62888
|
|
Title: Re:C# Box2D 画像適用2
|
|
初期化の時に
m_Image = Image.FromFile("****.jpg");
でロードして、
オブジェクト作成の後に
body.SetUserData("body1");
で設定、
描画時に
string body1 = (string)body.GetUserData();
で取り出す
と考えたのですが、どこまで合っていますか?
あと、「調べればそれが何のオブジェクトなのかわかるので、それに対応したImageデータを使って表示する」
というところは、まだ考えている途中です。(苦戦中)
2倍のポイントを手に入れた! 274ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(583,758ポイント)
Date: 2010/10/08(金) 01:08
No:62900
|
|
Title: Re:C# Box2D 画像適用2
|
|
>これは理解して成功したときに「解決」にすればいいのでしょうか
まぁそうですね。
>どこまで合っていますか
文字列にしたのですね。イメージを1種類しかロードしていないような気もしますが
そこを除けば合っています。
>調べればそれが何のオブジェクトなのかわかるので
オブジェクトの種類毎に異なる文字列に、例えば右クリックで生成されるBodyには "right"を、
左クリックで生成されるBodyには "left"の文字列を入れておけば、取り出したときに
どっちの文字列が入っているかで種類を区別できますよね?
236ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..入門者(2,775ポイント)
Date: 2010/10/08(金) 07:26
No:62904
|
|
Title: Re:C# Box2D 画像適用2
|
|
>イメージを1種類しかロードしていないような気もしますが
大丈夫です。きちんと必要な分だけロードしています。
オブジェクトの区別は、
string body1 = (string)body.GetUserData();
if (body1 == "right")
{
}
という感じでいいですか?
ifの{ }の中はまだ分かりませんが...
2倍のポイントを手に入れた! 180ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(583,878ポイント)
Date: 2010/10/08(金) 23:45
No:62946
|
|
Title: Re:C# Box2D 画像適用2
|
|
>という感じでいいですか
SetUserDataを使って種類毎に設定済みであるならOKです。
>ifの{ }の中はまだ分かりませんが
その中で何をするべきなのか説明できますか?
76ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..入門者(2,815ポイント)
Date: 2010/10/09(土) 08:17
No:62968
| 解決!
|
Title: Re:C# Box2D 画像適用2
|
|
すみません。よく考えたらできました。
{ }の中で前回の描画の仕方を使えばよかったのですね。
やりたかったことが出来てとても嬉しいです。
Justyさん、ほんとありがとうございました。
また考えても分からないことがあれば、そのときはどうかよろしくお願いします。
では。 
40ポイント を手に入れた。
|
|
|
|
Name: おこちゃま ..ぴよぴよ(162ポイント)
Date: 2010/10/08(金) 17:22
No:62921
|
|
Title: conio.hをUNIXで使う方法について
|
|
はじめまして。
初めて利用させていただきます。
実は、C言語でconio.hのkbhit()などを使うコンソールアプリケーションを作成しました。
それを、ipod touchに移植(?)したいのですが、conio.hがUNIXにはないようです。
そこで、kbhit()を自作するか、ライブラリを追加するかしようとしたのですが、
いくら試してもうまくいきません。
MinGWのライブラリから、conio.hを追加、というのはそもそもうまくいくのでしょうか。
(管理人がタイトルを編集しました)
162ポイント を手に入れた。
|
|
|
|
Name: toyo ..熟練のプログラマー(63,011ポイント)
Date: 2010/10/08(金) 17:31
No:62924
|
|
Title: Re:無題
|
|
パソコンなどの環境では標準入出力を使えば移殖性のあるプログラムが作れますが組み込み系では入力、出力というのはその機器独自のものを使う必要があります
普通は開発キットにライブラリとしてあると思うのですが
99ポイント を手に入れた。
|
|
|
|
|
Name: おこちゃま ..ぴよぴよ(340ポイント)
Date: 2010/10/08(金) 17:45
No:62925
|
|
Title: Re:無題
|
|
ipod touchでGCCが動くと聞き、組んでみたのが今回の動機でした。
ですから私のプログラムは、MobileTerminal上で動くもので、
Xcodeのようなちゃんとした開発キットは、私は持っていません。
ipod touchに入れたGCCのライブラリは、
見た感じではcurses.hなどはあり、UNIXのようなライブラリでした。
148ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..プログラマー(25,397ポイント)
Date: 2010/10/08(金) 18:27
No:62926
|
|
Title: Re:無題
|
|
conio.hはMS-DOSの機能を呼び出すライブラリなのでUNIXにそのものずばりのものはありません。
> 見た感じではcurses.hなどはあり、UNIXのようなライブラリでした。
cursesが使えるなら
#include <stdio.h>
#include <curses.h>
int
main()
{
int c;
initscr();
noecho();
cbreak();
nodelay( stdscr, TRUE );
while (1)
{
sleep( 1 );
c = getch();
if ( c != ERR )
{
addch( c );
}
else
{
addch( '.' );
}
}
endwin();
}
という感じでgetchにkbhitふうの動作をさせることができるそうです。
# Ubuntu10.04とCygwinで動作確認済みです。
168ポイント を手に入れた。
|
|
|
|
|
Name: おこちゃま ..ぴよぴよ(364ポイント)
Date: 2010/10/08(金) 18:35
No:62927
| 解決!
|
Title: Re:無題
|
|
上のコードを参考にさせていただきます。
改行がおかしくなるのはMobileTerminalの仕様だとあきらめて解決策を模索します。
ありがとうございました。
24ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..プログラマー(25,420ポイント)
Date: 2010/10/08(金) 18:50
No:62930
|
|
Title: Re:無題
|
|
> 改行がおかしくなるのはMobileTerminalの仕様だとあきらめて解決策を模索します。
Mac系の改行コードはWindows系やUNIX系と違いますけどそのあたりは大丈夫ですか?
23ポイント を手に入れた。
|
|
|
|
|
Name: おこちゃま ..ぴよぴよ(412ポイント)
Date: 2010/10/08(金) 21:03
No:62936
|
|
Title: Re:無題
|
|
え。
そうなんですか!
あちゃあ・・・
それかもしれません・・・
試してみます。
ありがとうございます。
48ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(226,128ポイント)
Date: 2010/10/04(月) 19:42
No:62730
|
|
Title: Re:ファイルの書き出し
|
|
FFFTPなどのFTPソフトを使われたことはありますか?
まず、FFFTPとFTPdの間で接続出来るように勉強されたほうが良いと思います。
>使い方がよく分かりません
それでは何が分からないか分かりません。
全部をここで質問するのは、kokuoutyouさん自身のためにもなりませんよ。
検索して色々やった結果分からないことを質問されるようにされてはいかがですか? 
17ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..中級者(14,957ポイント)
Date: 2010/10/04(月) 21:16
No:62740
|
|
Title: Re:ファイルの書き出し
|
|
>使い方がよく分かりません
まず解凍したフォルダの中のnekosogiftpd.exeを起動します。
ツールバーの「ユーザー設定」ボタン(左から二つ目)をクリックします。
開いた画面の「追加」ボタンをクリックします。
ログインに使うユーザー名を「ユーザー名」の入力欄に入力します。
ログインに使うパスワードを「パスワード」の入力欄に入力します。
このユーザーでログインしたときに見える一番上のディレクトリにするディレクトリを
「ユーザー別ホームディレクトリ」で設定します。
「OK」を押します。
「OK」を押します。
これでユーザーの登録が完了です。
次に、サーバーを起動します。
ツールバーの一番左のボタンを押します。
サーバーが起動します。
ファイアウォールのダイアログが出てきたら「ブロックを解除する」を押します。
これでとりあえずFTPのクライアントで接続できるはずです。
softyaさん、せっかくアドバイスをされていますがすみません。
2倍のポイントを手に入れた! 442ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(226,235ポイント)
Date: 2010/10/04(月) 21:25
No:62741
|
|
Title: Re:ファイルの書き出し
|
|
>>みけCATさん
結局のところよく分からずに kokuoutyou さんがHTTPとかに手を出されているので、もしこの知識レベルで自宅サーバーを公開しているとするとかなり危険な状態にあるんじゃないかと思って勉強することをおすすめしたまでです。
よく理解しないままFTPサーバーを公開してしまうと、PCの中のファイルを書き換え放題ですからね。
107ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(15,448ポイント)
Date: 2010/10/05(火) 07:35
No:62753
|
|
Title: Re:ファイルの書き出し
|
|
CGIとhttpget.dllを使うと良いと思います。
「とほほのWWW入門」というサイトを参考にしてみて下さい。
この場合、家にApache等のHTTPサーバーが必要です。
(レンタルサーバーでも構いませんが)
56ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(226,499ポイント)
Date: 2010/10/05(火) 11:42
No:62762
|
|
Title: Re:ファイルの書き出し
|
|
>家はただランキング登録やランキングを見るとかに使いたいだけです
>サーバーとかは必要ないと思いますが
>どんな方法でやれば出来るかが知りたいだけです
サーバーが必要ない?
あれ?今までの話の流れで自宅にHTTPサーバーが動いているのかも思ってました。
自宅から何かデータを得るにしろ、自宅にデータを送るにしろサーバーは必須です。
HTTPサーバーは動いているんですよね?
そもそもファイルを書き出したい要件やどこまでやりたいか明確にしないとダメだと思います。
・メールじゃダメな理由。
・他者のフリーソフトじゃダメな理由。
・Windows Live SkyDrive等ではダメな理由。
で、どのような状況でランキングの情報を見たいかです。
ランキングのデータは、そもそも何処からどの様な手段で手に入れて自宅のマシンのどの様に保存して、それをどの方法で外部公開しているか?がはっきりしません。
あとはそれを外出先から参照する手段として、パソコンからなのか携帯かスマートフォンなのかも明確ではありません。
264ポイント を手に入れた。
|
|
|
|
|
Name: kokuoutyou [URL] ..かけだし(1,231ポイント)
Date: 2010/10/05(火) 17:52
No:62776
|
|
Title: Re:ファイルの書き出し
|
|
作りたい物は
テトリス(オンラインでランキング登録可能)
自宅にHTTPサーバーはあるのですがFTPやCGIなどが使えないためどうすればいいかが分からない
メールの場合
どんな感じにプログラムを組めばいいのかが分からない
Windows Live SkyDriveの場合使った事も触ったこともないのでよく分からない
今日先生に聞いたところTCPなんとかってやつがいいよっていってたけ
TCPが何なのかも分かりません(今からネットで調べて見る)
開発環境は
VC 2008
235ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(229,564ポイント)
Date: 2010/10/05(火) 18:17
No:62779
|
|
Title: Re:ファイルの書き出し
|
|
普通にFTPコマンドを使って送信すればよいだけでは?
自作のプログラムから行いたいのであれば、system関数なり、CreateProcessなり、_spawn系の関数なりを使って、FTPコマンドを呼ぶだけです。
wputを使えばもっと使いやすいかもしれません。FTPSにも対応しているはずですし。
124ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(15,641ポイント)
Date: 2010/10/05(火) 18:39
No:62781
|
|
Title: Re:ファイルの書き出し
|
|
まずは自宅サーバーでCGIを動かせるように勉強してみたらいかがですか?
2倍のポイントを手に入れた! 52ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(15,570ポイント)
Date: 2010/10/05(火) 20:07
No:62788
|
|
Title: Re:ファイルの書き出し
|
|
「使えない」とは、どういうことですか?
使い方がわからないのですか?
それとも、使い方はわかるけど起動出来ないということですか?
32ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(15,616ポイント)
Date: 2010/10/05(火) 20:55
No:62789
|
|
Title: Re:ファイルの書き出し
|
|
No.62782に
>OS windows7 ホームプレミアム
とありますが、32ビットですか?それとも64ビットですか?
46ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(15,908ポイント)
Date: 2010/10/05(火) 21:27
No:62797
|
|
Title: Re:ファイルの書き出し
|
|
No:62789にも書きましたが、
使っているのは32ビットのOSですか?それとも64ビットのOSですか?
「コンピュータ」を開けて、「システムのプロパティ」を押せば確認できると思います。
(これはWindows Vistaの場合なので、違うかもしれません)
2倍のポイントを手に入れた! 174ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,271ポイント)
Date: 2010/10/05(火) 22:27
No:62808
|
|
Title: Re:ファイルの書き出し
|
|
前のレスで指定したrarは解凍しましたか?
解凍したとしたら、何が出てきましたか?
出てきたものの中にhtdocsというフォルダなどがあったら、それのことだと思います。
(それに読み変えればいいだろうと思います)
85ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,195ポイント)
Date: 2010/10/05(火) 22:41
No:62810
|
|
Title: Re:ファイルの書き出し
|
|
rarファイルの中身にがインストーラだった場合は、
インストール時に指定したインストール先に読み変えてみてください。
28ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(62,912ポイント)
Date: 2010/10/06(水) 06:50
No:62812
|
|
Title: Re:ファイルの書き出し
|
|
それは古いバージョンのときのフォルダですね
ちなみに私の場合はC:の直下にインストールしたので
C:\Apache Software Foundation\Apache2.2\htdocs
になってます
Windows7でしたらProgram Files以下のファイルが直接編集できないためApacheのhttpd.confの編集が面倒になります(エディタを管理者権限で起動すれば可能ですがいちいち面倒です)
一度ApacheをアンインストールしてインストールフォルダをProgram Files以外に変更したほうが楽ですよ
146ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,481ポイント)
Date: 2010/10/06(水) 16:41
No:62824
|
|
Title: Re:ファイルの書き出し
|
|
rarファイルの中身を確認しました。
インストーラではなく、この中身をそのまま使います。
(rarファイルを解凍したフォルダ)\httpd-2.2-x64\bin\httpd.exeがサーバーの本体です。
C:\Program Files\Apache Group\Apache\htdocs
は
(rarファイルを解凍したフォルダ)\httpd-2.2-x64\htdocs
と読み替えてください。
簡易設定ソフトもつけておきます。
httpd.confにサーバーをインストールしたフォルダの情報を書き込むソフトです。
perlで作りました。
ActivePerlをインストールしたということなので、使えますよね。
使えなかったら遠慮なく質問してください。
コマンドライン:perl set.pl (rarファイルを解凍したフォルダ)
rarファイルを解凍したフォルダとは、httpd-2.2-x64というフォルダがあるところです。
34ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,819ポイント)
Date: 2010/10/06(水) 18:31
No:62833
|
|
Title: Re:ファイルの書き出し
|
|
設定を済ませたら、
http://(自分のサーバーのドメイン名)/cgi-bin/printenv.pl
(最後の拡張子はcgiかも)
にアクセスしてみてください。
情報が表示されれば成功です。
404エラー(Not Found)が出た場合は、アドレスのcgi-binのところを変えてみてください。
500エラー(Internal Server Error)が出た場合は、
Apacheのhtdocsとかがあるフォルダの中の
cgi-binフォルダの中のprintenv.pl(もしくはcgi)の1行目を
#!(ActivePerlのperl.exeのフルパスの\を/にしたもの)
に変えてみてください。
59ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(228,118ポイント)
Date: 2010/10/06(水) 21:57
No:62850
|
|
Title: Re:ファイルの書き出し
|
|
>TCPとかで作りたいんですが初心者にはムリですか?
いや、みけCATさんの方針だとサーバーのCGIはPerlですよ。
ookamiさんは、Apacheに苦労するならCGIサーバーを無料で借りたらってことでしょう。
Perlのサーバー側ランキングプログラムも作らないといけませんし、ゲーム(クライアント側)はTCPでサーバーのCGIと通信しなくては行けません。なので、まだまだやることが沢山ありますよ。
ご自身でTCPサーバーも作れますがWinSockとかDXライブラリで作る必要がありますし、yourServerとは接続できないでしょう。つまり自宅サーバーの運営方法をイチから考えないといけません。
kokuoutyouさんがやりたい事のために難しいことに挑戦する気がないのならって事でみけCATさんが代案を出してくれている訳ですから、この先何をする事になるのかご自身でまとめておいた方が良いように思います。 
2倍のポイントを手に入れた! 610ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(16,942ポイント)
Date: 2010/10/06(水) 22:29
No:62853
|
|
Title: Re:ファイルの書き出し
|
|
TCPを勉強したいのならそれでかまいませんが、
初心者のうちはCGIとhttpget.dllを使っておくのが簡単でいいと思います。
またCGIのサンプルも作ってみますので。
47ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..上級者(17,039ポイント)
Date: 2010/10/07(木) 06:22
No:62860
|
|
Title: Re:ファイルの書き出し
|
|
クライアントだけでも立派な「TCPを使ったソフト」です。
クライアントだけ作り、サーバーはHTTPサーバーとCGIを使うということも出来ます。
もちろんサーバーも作っても構いません。
それとも、TCPの仕組みから勉強したいですか?
97ポイント を手に入れた。
|
|
|
|
|