|
Name: ぬっち ..初心者(6,203ポイント)
Date: 2008/08/14(木) 12:17
No:20190
|
|
Title: セーブデータについて
|
|
また質問させていただきます。
今回は、セーブデータの作成・書き込み・読み込みの方法についてです。
セーブデータ無しでは、ゲームとして何か物足りないものがあったので、作り始めたのはいいのですが、思うように先に進めません。
具体的には
・白紙のスコアデータには、問題なく書き込みが出来る。
・書き込みしたものを読み込む時に、エラーが出て強制終了されてしまう。
ということです。
プログラム自体が間違っている可能性があるので、UPしておきます。
<スコア読み込み>
fp=fopen("score.txt", "r");
if(fp){
fscanf(fp,"%d",spell_history[0]);
fscanf(fp,"%d",spell_history_max[0]);
fclose(fp);
}
<スコア書き込み>
fp=fopen("score.txt", "w");
if(fp){
fprintf(fp,"%d\n",spell_history[0]);
fprintf(fp,"%d\n",spell_history_max[0]);
fclose(fp);
}
もちろんこれを使っている時には、FILE *fpを加えてあります。
ポインタをよく理解していないためか、苦戦しています;;
ぜひ、アドバイスをよろしくお願いします。
442ポイント を落としてしまった。
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(84,407ポイント)
Date: 2008/08/14(木) 12:36
No:20192
|
|
Title: Re:セーブデータについて
|
|
fscanfはscanfのファイル読み込み版なので、%dのときはアドレスを渡す必要があります。
fp=fopen("score.txt", "r");
if(fp){
fscanf(fp,"%d",&spell_history[0]);//こっちと
fscanf(fp,"%d",spell_history_max);//こっちのどちらか。
//でも分かりやすさの面で上を使ったほうがいいと思います。
fclose(fp);
}
187ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(6,262ポイント)
Date: 2008/08/14(木) 17:54
No:20213
| 解決!
|
Title: Re:セーブデータについて
|
|
tkmakwins15さん回答ありがとうございます。
おかげで、うまくいくようになりました^^
ありがとうございます。
59ポイント を手に入れた。
|
|
|
|
Name: ドアラ ..ぴよぴよ(337ポイント)
Date: 2008/08/14(木) 15:00
No:20197
|
|
Title: ゲーム作成の環境について
|
|
いつも参考にさせてもらっています。
以前ここのHPで勉強させてもらってXPでゲームを作成したのですが、
最近購入したvistaにもっていって起動したところ正常に動作しませんでした。
静止画の描画はできているようなのですが、動画の再生がうまくいっていないようです。
directXは10です。
もしなにか対策などありましたら教えていただけないでしょうか。
よろしくお願いします。
2倍のポイントを手に入れた! 324ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(690,058ポイント)
Date: 2008/08/14(木) 17:30
No:20207
|
|
Title: Re:ゲーム作成の環境について
|
|
DirectXでもVistaでも使用出来るはずです。
動画の再生が出来ないのでしたら、ハンドルに-1が返って来ているのかどうかをまず確認してみてはどうでしょうか。
特にVistaだから何か特別な事をしなければならないということは無いと思います。
もしライブラリが古いのでしたら最新をお使いになる事をお勧めします。
2倍のポイントを手に入れた! 256ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..中級者(12,876ポイント)
Date: 2008/08/13(水) 22:32
No:20179
|
|
Title: 龍神録の館18,21章について
|
|
報告です。
●18章---- out.cpp を変更 ----の中の
//当たり判定メイン
void out_main(){
int i,s,u,v;
for(i=0;i<CSHOT_MAX;i++){//自機ショット総数
if(cshot[i].flag>0){
for(s=0;s<ENEMY_MAX;s++){//敵総数
変数u,vですが、敵ショットの当たり判定で使うのかと思っていたら結局使ってませんでした。
ミスではないでしょうか。
あるいは、
●21章---- out.cpp を変更 ----の中の
//敵ショットと自機との処理
void enemyshot_and_ch(){
int s,n;
for(s=0;s<SHOT_MAX;s++){//敵ショット総数
if(shot[s].flag>0){//そのショットが登録されていたら
for(n=0;n<SHOT_BULLET_MAX;n++){//弾総数
if(shot[s].bullet[n].flag==1){//弾が登録されていたら
if(out_judge_enemyshot(s,n)){//自機にその弾が接触していたら
shot[s].bullet[n].flag=0;//弾をオフ
/*喰らいボム処理をここに追加*/
if(ch.flag==0 && ch.mutekicnt==0){//ステータスが通常で、無敵じゃなかったら
ch.flag =2; //1:喰らいボム受付中 2:死んで浮き上がり中
ch.cnt =0;
se_flag[3]=1;//自機死に音
return;
}
}
}
}
}
}
}
の宣言がu,vで
//敵ショットと自機との処理
void enemyshot_and_ch(){
int u,v;
for(u=0;u<SHOT_MAX;u++){//敵ショット総数
if(shot[u].flag>0){//そのショットが登録されていたら
for(v=0;v<SHOT_BULLET_MAX;v++){//弾総数
if(shot[u].bullet[v].flag==1){//弾が登録されていたら
if(out_judge_enemyshot(u,v)){//自機にその弾が接触していたら
shot[u].bullet[v].flag=0;//弾をオフ
/*喰らいボム処理をここに追加*/
if(ch.flag==0 && ch.mutekicnt==0){//ステータスが通常で、無敵じゃなかったら
ch.flag =2; //1:喰らいボム受付中 2:死んで浮き上がり中
ch.cnt =0;
se_flag[3]=1;//自機死に音
return;
}
}
}
}
}
}
}
、とこうなる予定だったのでしょうか。
●21章
「fiest_ini関数に弾情報を格納していますが、この当たり判定範囲をちょうどいい大きさに決めるのに時間がかかりました・・。」
↑この文章の"fiest_ini関数"は"first_ini関数"です。
●21章
「;//自機死に音」
↑
"ピチュり音"か、"死に音"に統一したほうがいいのではないかと思いましたが、
さすがにどうでもいいですよね、
個人的にはピチュり音のほうが好きです。ピチューン
●21章
「関数の汎用化は後々することにし、今はコピペして少し変更してみましょう。
基本敵ショットと自機との当たり判定処理を同じです。」
↑
この文章、
当たり判定処理"を"同じです。
は、
当たり判定処理"と"同じです。
ですよね。
●21章
---- ch.cpp の以下の関数を変更 ----
↑
"char.cpp"
です。
●21章
//敵が死ぬかどうかの決定
void enemy_death_judge(int s){
int i;
se_flag[8]=1;//敵に当たった音
if(enemy[s].hp<0){//敵のHPが0未満になったら
enemy[s].flag=0;//敵を消滅させる
se_flag[1]=1;//敵のピチュリ音
enter_del_effect(s);
"ピチュリ音"→"ピチュり音"
です。
以上です。
1,575ポイント を手に入れた。
|
|
|
Name: natu ..ぴよぴよ(815ポイント)
Date: 2008/08/14(木) 15:42
No:20198
|
|
Title: MFCのゲームを作りたいのですが
|
|
タイマーのつかい方が今ひとつ分かりません。
MFCでタイピングのゲームを作成しているのですが、
25問を解き、正解だった場合もしくは制限時間を超えてしまった場合、次の問題を表示したいと思っております。
下記がプログラム内容です。
void CProgramView::Loop1(CDC* pDC)
{
CProgramDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if((m_nRight<26)|(0<m_nRight))
{
m_nRight=0; //正解数
m_nQuestion=1; //問題数
}
Haikei(pDC); //問題表示領域の枠表示
Tokei(pDC); //時計の秒針が表示される枠表示
Moji(pDC); //問題文表示
OnChar(ch, count,flags); //入力
if(m_fTimer==FALSE)
{
SetTimer(123,250,NULL); //タイマーをセット
if(m_nQuestion<26) //25問以上問題を解いていないケース
{
m_fTimer = FALSE;
}
else m_fTimer = TRUE; //全問解いた場合
}
Loop0(pDC); //秒針の描画クラス
if(m_nx==715) //タイムアウトだった場合
{
KillTimer(123);
NGPaper(pDC);
m_nQuestion++; //問題をカウント
m_sAnser.Empty(); //回答文字列をクリア
pDoc->GetNextSet(); //次の問題を取得する
InvalidateRect(NULL);
}
if(m_nQuestion<m_nCount) //正解だった場合
{
KillTimer(123); //タイマーを切る
Tokei(pDC); //秒針の画像を消すために時計の画面を再描画
Right(pDC); //正解した場合の画像を描画
Haikei(pDC); //問題文・回答を消すために問題表示領域の枠を再描画
PartsPaper1(pDC); //正解した場合の壁紙を表示
m_nQuestion++; //問題数をカウント
m_sAnser.Empty(); //回答文字列をクリアする
pDoc->GetNextSet(); //次の問題を取得する
InvalidateRect(NULL);
}
}
そして、この動作を25問、解くまでループさせる関数として以下の関数を作成しました。
void CProgramView::Loop2(CDC* pDC)
{
if(m_fTimer==FALSE)
{
Loop1(pDC);
}
}
//タイマーの内容
void CProgramView::OnTimer(UINT nIDEvent)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
if(nIDEvent == 123)
{
InvalidateRect(NULL);
}
CView::OnTimer(nIDEvent);
}
しかし、実際にこのプログラムを実行すると入力し、正解する間は次の問題が表示されるのですが、タイマーが切れません。
そして、制限時間になるとそこまで解いていた問題から凄い勢いで描画が始まり、止まりません。
おそらくタイマーが正常に使えていないという可能性が考えられるのですが・・・。
希望としては、25問を順次解き、解き終わった後は画像を描画し、次の問題を表示したいのですが、どうしたら良いか教えてください。
この疑問に関して、メッセージポンプで対応すれば良いということを某掲示板で教えていただいたのですが、具体的な使用方法が分からず困惑しております。よろしければおしえていただければと思います。
815ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(104,209ポイント)
Date: 2008/08/14(木) 16:39
No:20202
|
|
Title: Re:MFCのゲームを作りたいのですが
|
|
すみません、ちゃんと掲載されてましたね…(^_^;)
失礼しました。
26ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(104,239ポイント)
Date: 2008/08/14(木) 16:42
No:20203
|
|
Title: Re:MFCのゲームを作りたいのですが
|
|
正解だった場合にしか、タイマーの解除と再描画をしていない気がするんですが、その辺りは関係ありませんか?
30ポイント を手に入れた。
|
|
|
|
|
Name: ま〜く ..初心者(6,999ポイント)
Date: 2008/08/14(木) 17:06
No:20204
|
|
Title: Re:MFCのゲームを作りたいのですが
|
|
パッと見なのですが・・Timerの部分というより、MFCを使ったプログラムの流れが出来ていないような気がします。
void CProgramView::Loop1(CDC* pDC) メソッドは 何所から呼ばれていますか?
CDC *pDCを貰っている所をみると、OnDrawから呼んでいませんか?
もしそうであれば、以下の点に注意した方が良いと思います。
・OnDraw内(そこから呼ばれるメソッド等)では、InvalidateRectは呼ばない。
すごい勢いで描画されるのはこのせい?
・OnDrawでは「通常」描画だけをすべき。
>この疑問に関して、メッセージポンプで対応すれば良いということを某掲示板で教えていただいたのですが、具体的な使用方法が分からず困惑しております。よろしければおしえていただければと思います。
う〜ん?MFCを使っているんですよね?であれば、「メッセージポンプを使う」というのはあまり・・・
とりあえず、CViewから派生してできたView内でなんとかなりますよ。
以下適当ですが、流れを・・
OnCreate等 初期化: SetTimer で 1秒周期とかにする。
第一問目の状態にする。
リミット時刻リセット。
OnDraw: その時の状態を描画する
OnChar: 回答(キーボードで入力ですよね?番号とか・・) されたら判定して
次の問題に移すとかの制御。
そして Invalidate
OnTimer: 一秒周期とかでくるので、リミットの時刻になるまで、カウンタか何かをインクリメント
カウンタがリミットの時間分を過ぎたら 次の問題に移すとかの制御
そして Invalidate
2倍のポイントを手に入れた! 548ポイント を手に入れた。
|
|
|
|
Name: kaiten ..かけだし(1,434ポイント)
Date: 2008/08/13(水) 21:37
No:20175
|
|
Title: 絶対値を使う場合はどっちが軽い?
|
|
条件分岐の時、
変数x,x2,rが存在するとして、
if((x2-x<r)||(x2-x>(-r)))
{
//処理
}
と書くのと
if(fabs(x2-x)<r)
{
//処理
}
と書くのではどちらの処理が軽いのでしょうか?
関数使う分下の方が重いのかと思ったのですがどうなんでしょう?
131ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(54,522ポイント)
Date: 2008/08/13(水) 22:11
No:20176
|
|
Title: Re:絶対値を使う場合はどっちが軽い?
|
|
完全に処理系に依存します。
例えば、x, x2, rが実浮動小数点数の場合、FPUがない、または浮動小数点演算をソフトエミュレートする処理系であれば、それほど変わらないかもしれません。
また、FPUがある環境であっても、fabsが組み込み関数として実装されているような処理系であれば、演算回数および短絡評価のための条件分岐を考えると後者の方が高速になります。
123ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(123,791ポイント)
Date: 2008/08/13(水) 22:19
No:20178
|
|
Title: Re:絶対値を使う場合はどっちが軽い?
|
|
> と書くのではどちらの処理が軽いのでしょうか?
> 関数使う分下の方が重いのかと思ったのですがどうなんでしょう?
私だったら、各々の処理を1億回くらい繰り返すような
テストコードを書いて確かめます。
42ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..かけだし(1,530ポイント)
Date: 2008/08/13(水) 22:45
No:20180
| 解決!
|
Title: Re:絶対値を使う場合はどっちが軽い?
|
|
お二人ともありがとうございます。
>たかぎさん
処理系に依存だったんですか。同じものかと思い環境を書いてませんでした。
>boxさん
ごもっともです。1億回分のコード書いて確かめてみます。
96ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..かけだし(1,598ポイント)
Date: 2008/08/13(水) 23:14
No:20182
| 解決!
|
Title: Re:絶対値を使う場合はどっちが軽い?
|
|
一応報告を。
BCC Developer、VISTA、DXライブラリ使用下ではfabsを使用しない方が圧倒的に速かったです。
今後は聞く前に試すよう善処します(汗
では。
68ポイント を手に入れた。
|
|
|
|
Name: ぬっち ..初心者(5,546ポイント)
Date: 2008/08/12(火) 11:43
No:20098
|
|
Title: 敵弾フラグが消えない
|
|
現在、バグ取りのため、いろいろ試しているのですが、このバグ取りの中でどうしても、敵弾の組のフラグを消す時のバグがうまく取れません。
具体的には、
・異なる敵が連続して(短い間隔で)弾を発射すると、敵弾が全て画面外に出ても敵弾の組のフラグが消えない。
・すこし長めの間隔で敵が弾を発射したときは、ある程度フラグ処理がうまく行われる。
ということです。
・敵が単体の場合は処理がうまくいく。(たとえ何度も違う敵弾の組のフラグを立てた場合でも)
言葉だけではわからないと思いますので、敵弾の処理の部分のプログラムを載せておきます。
void enemy_shot_display(){
for(int i=0;i<EnemyTotal;i++){
if(EnemyShotGroup[i].flag==1 || EnemyShotGroup[i].flag==2){
EnemyShotGroup[i].counter++;
for(int j=0;j<EnemyShotTotal;j++){
if(EnemyShotGroup[i].EnemyShot[j].flag==1 || EnemyShotGroup[i].EnemyShot[j].flag==2){
SetDrawBlendMode(DX_BLENDMODE_ADD,256);
if(EnemyShotGroup[i].EnemyShot[j].img==83 || EnemyShotGroup[i].EnemyShot[j].img==84 || EnemyShotGroup[i].EnemyShot[j].img==85){
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 );
}
DrawRotaGraph((int)EnemyShotGroup[i].EnemyShot[j].x,(int)EnemyShotGroup[i].EnemyShot[j].y,1.0f,EnemyShotGroup[i].EnemyShot[j].display_angle,image_enemy_shot[EnemyShotGroup[i].EnemyShot[j].img],TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
if(EnemyShotGroup[i].EnemyShot[j].x<-20.0 || EnemyShotGroup[i].EnemyShot[j].x>440.0 || EnemyShotGroup[i].EnemyShot[j].y<-20.0 || EnemyShotGroup[i].EnemyShot[j].y>500.0){
EnemyShotGroup[i].EnemyShot[j].flag=0;
}
}
}
}
}
for(int i=0;i<EnemyTotal;i++){
if(EnemyShotGroup[i].flag==1 || EnemyShotGroup[i].flag==2){
for(int j=0;j<EnemyShotTotal;j++){
if(EnemyShotGroup[i].EnemyShot[j].flag==1 || EnemyShotGroup[i].EnemyShot[j].flag==2){
return;
}
}
for(int j=0;j<EnemyShotTotal;j++){
EnemyShotGroup[i].EnemyShot[j].graze=1;
}
EnemyShotGroup[i].flag=0;
}
}
}
ちなみに、この部分はシューティングの館のプログラムを参考にして作ってあります。
敵弾の存在フラグが2となっているのは、敵を撃破したときの敵弾の存在フラグです。
説明不足でしたら、ゲーム本体または、使っている全てのcppファイル、hファイルをUPすることも考えています。
よろしくお願いします。
667ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(214,225ポイント)
Date: 2008/08/12(火) 13:25
No:20100
|
|
Title: Re:敵弾フラグが消えない
|
|
実行できないので正しくは解りませんが、見る限りでは
2つめの i<EnemyTotalを条件にした forループ内で、returnをしている箇所が
気になります。
コードから推測するに、ここの処理は一連のEnemyShot[x]の弾が全て flag=0だった場合、
根っこのグループ側 EnemyShotGroup[x]のフラグも0にするのが目的ですが、ここで returnしてしまうと
以降にある配列の弾に関して処理が一切行われないように見えます。
(どこか別の場所で処理しているのかもしれませんが)
その為、配列の配置的に先に出た弾のグループが消えない限り、
後発の弾が消えないのだと思われます。
なので、きちんと forループを EnemyTotal分回してあげれば
うまくいくのではないでしょうか。
180ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(5,780ポイント)
Date: 2008/08/12(火) 17:26
No:20117
|
|
Title: Re:敵弾フラグが消えない
|
|
Justyさん返答ありがとうございます。
私もそのreturnが曲者かなと思っていたので、やはりそこかもしれませんね。
しかし、直そうと思っていたんですが、これ以外の方法でうまく敵弾のフラグを消す方法が思いつきません;;
ある敵弾の組の中の敵弾のフラグが全て消えているならば、その敵弾の組のフラグを消す。
消えていなければ、次の敵弾の組を見る。
このことの繰り返しを行って、全ての敵弾の組を見るということを考えればよいと思うのですが、これをプログラムにすることがうまく出来ません;;
何かいいアドバイスがありましたらよろしくお願いします。
234ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(16,974ポイント)
Date: 2008/08/12(火) 18:01
No:20119
|
|
Title: Re:敵弾フラグが消えない
|
|
これはSTGの館の考えで敵出現及び敵ショットのフラグを立ててるんですよね。んでちょっと考えてみました。
void enemy_shot_display(){
int count;
for(int i=0;i<EnemyTotal;i++){
if(EnemyShotGroup[i].flag==1 || EnemyShotGroup[i].flag==2){
EnemyShotGroup[i].counter++;
count = 0;
for(int j=0;j<EnemyShotTotal;j++){
if(EnemyShotGroup[i].EnemyShot[j].flag==1 || EnemyShotGroup[i].EnemyShot[j].flag==2){
SetDrawBlendMode(DX_BLENDMODE_ADD,256);
if(EnemyShotGroup[i].EnemyShot[j].img==83 || EnemyShotGroup[i].EnemyShot[j].img==84 || EnemyShotGroup[i].EnemyShot[j].img==85){
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 );
}
DrawRotaGraph((int)EnemyShotGroup[i].EnemyShot[j].x,(int)EnemyShotGroup[i].EnemyShot[j].y,1.0f,EnemyShotGroup[i].EnemyShot[j].display_angle,image_enemy_shot[EnemyShotGroup[i].EnemyShot[j].img],TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
if(EnemyShotGroup[i].EnemyShot[j].x<-20.0 || EnemyShotGroup[i].EnemyShot[j].x>440.0 || EnemyShotGroup[i].EnemyShot[j].y<-20.0 || EnemyShotGroup[i].EnemyShot[j].y>500.0){
EnemyShotGroup[i].EnemyShot[j].flag=0;
}
count ++;
}
if(count == 0 && j == EnemyShotTotal-1)
EnemyShotGroup[i].flag=0;
}
}
}
}
こんなのでうまくいきませんかね、カウントで出現中の弾[j]が1つもなければその[i]も0にする感じで考えてみたのですが
499ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(5,797ポイント)
Date: 2008/08/12(火) 18:20
No:20123
| 解決!
|
Title: Re:敵弾フラグが消えない
|
|
arrayさん返答ありがとうございます。
それぞれの組について数え上げるということですか。
この方法だと確かにうまくいきますね^^
しかし実行してみると、動作がかなり重くなってしまいました・・・。
プログラムから判断すると、計算量が増えて(ひとつの組に対して、数を数えるという操作をして)重くなっているのが原因かもしれませんね^^;
この辺は、私自身でも考えてみたいと思います。
ともかくこれで、先に進めることが出来るようになりました。
アドバイスありがとうございます^^
17ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(17,512ポイント)
Date: 2008/08/12(火) 18:40
No:20124
|
|
Title: Re:敵弾フラグが消えない
|
|
ちなみにですけど、EnemyShotGroup[i].EnemyShot[j].flagが1か2かの時のみcountを加算しており、
if(count == 0 && j == EnemyShotTotal-1)
EnemyShotGroup[i].flag=0;
は最後に1回だけ、しかもカウントが1以上なら処理しないので、急激に重くはならないと思ったのですが、今見たら、無駄部分があるのかもしれませんね。なので後ろの部分だけ書き換えてみました。
/*省略*/
if(EnemyShotGroup[i].EnemyShot[j].x<-20.0 || EnemyShotGroup[i].EnemyShot[j].x>440.0 || EnemyShotGroup[i].EnemyShot[j].y<-20.0 || EnemyShotGroup[i].EnemyShot[j].y>500.0){
EnemyShotGroup[i].EnemyShot[j].flag=0;
}
if(count != 0)
count ++;
}
}
if(count == 0)
EnemyShotGroup[i].flag=0;
}
}
}
一応加算処理よりifで読み飛ばした方が処理は早いらしいので0の場合のみcountを加算させ、
if(count == 0 && j == EnemyShotTotal-1)
EnemyShotGroup[i].flag=0;
は、別にfor(j)の中に入ってる必要はなさそうなので外に出してみました。
これでもあまり変わらなそうだけど実質は軽くなるはずです(?)
もっともcountを取ること自体、無駄な処理かもしれませんが^^;
538ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(688,569ポイント)
Date: 2008/08/12(火) 19:41
No:20131
|
|
Title: Re:敵弾フラグが消えない
|
|
画面内に弾が無い時フラグが落としたければ
void EnemyShotCalcDisp(){
int i,j;
for(i=0;i<ENEMY_TOTAL_NUM;i++){
if(EnemyShot[i].flag==1){
EnemyShot[i].counter++;
for(j=0;j<ENEMY_TOTAL_SHOT_NUM;j++){
if(EnemyShot[i].EnemyShots[j].flag==1){
DrawRotaGraph( 略.x , 略.y , 1.0f , 略.disp_angle , 略 , TRUE ) ;
if(EnemyShot[i].EnemyShots[j].x<-20.0||EnemyShot[i].EnemyShots[j].x>440.0||
EnemyShot[i].EnemyShots[j].y<-20.0||EnemyShot[i].EnemyShots[j].y>500)
EnemyShot[i].EnemyShots[j].flag=0;
}
}
}
}
for(i=0;i<ENEMY_TOTAL_NUM;i++){
if(EnemyShot[i].flag==1){
for(j=0;j<ENEMY_TOTAL_SHOT_NUM;j++){
if(EnemyShot[i].EnemyShots[j].flag==1)
break;
}
if(j==ENEMY_TOTAL_SHOT_NUM)
EnemyShot[i].flag=0;
}
}
}
これでどうでしょうか?
赤のif文にたどり着いたとき、jの値がループの上限値なら、最後までbreakが
行われなかった事がわかりますので、つまり弾が無い事がわかります。
372ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(214,293ポイント)
Date: 2008/08/12(火) 22:41
No:20135
|
|
Title: Re:敵弾フラグが消えない
|
|
見ていてちょっと気になったのですが、SetDrawBlendMode()の2つ目の引数って
0〜255までですよね?
(実害はないと思いますが)何故に 256なんでしょ?
68ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(6,099ポイント)
Date: 2008/08/12(火) 23:39
No:20138
|
|
Title: Re:敵弾フラグが消えない
|
|
解決したけど、こんなにレスがつくとは・・・。
本当に親切な人たちが集まる掲示板ですね^^
>arrayさん
実行してみると、弾自体が発射後すぐに消えてしまうということが起こってしまいました。
発射された弾がcount=0と勘違いしてしまっているのではないかと考えたのですが・・・。
どうなのでしょうね;;
>管理人さん
書き換えてやってみましたが、今度はまったく敵のフラグが落ちないという事態に;;
後半部分のbreak辺りの処理がうまくいってない感じです。
>Justyさん
あ・・・、これは完全に間違えですね;;
指摘していただきありがとうございます。
このよう間違いもあることも考えると、何人かの人にプログラムを見せることも重要かもしれませんね^^;
テストプレイを重ねた結果、countによる重さは、弾が増えた時(多くの敵弾の組の存在フラグが立っている場合)に起こるようです。(プログラム見ればわかりますが^^;)
動作が遅くなった時、60(設定した最高値)の敵弾の組の存在フラグが立っていました。
なるべく、このようなことがならないよう、存在フラグを多く立てすぎないよう注意していく事も必要かもしれませんね。
302ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(688,699ポイント)
Date: 2008/08/13(水) 00:16
No:20139
|
|
Title: Re:敵弾フラグが消えない
|
|
う〜ん、うまくいくはずなんですけどね〜。
もしかして
int i,j;
for(int i=0;i<ENEMY_TOTAL_NUM;i++){
if(EnemyShot[i].flag==1){
for(int j=0;j<ENEMY_TOTAL_SHOT_NUM;j++){
if(EnemyShot[i].EnemyShots[j].flag==1)
break;
}
こんな風に二重に宣言していませんか?
112ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(214,554ポイント)
Date: 2008/08/13(水) 00:17
No:20140
|
|
Title: Re:敵弾フラグが消えない
|
|
>テストプレイを重ねた結果、countによる重さは、弾が増えた時(多くの敵弾の組の存在フラグが立っている場合)に起こるようです。
>動作が遅くなった時、60(設定した最高値)の敵弾の組の存在フラグが立っていました
その「重さ」は countによるものというより、描画にかかるコストだったりしませんか?
それだけの数の弾分描画関数を呼ぶとそれなりに重くなりそうな気がします。
>弾自体が発射後すぐに消えてしまうということが起こってしまいました
理論的には arrayさんの方法でも管理人さんの方法でもうまくいくはず・・・なのですが、
ここ以外のところにも問題があるのかもしれませんね。
あれ? arrayさんのコードの訂正版で
if(count != 0)
って正しくは
if(!count)
だったりしませんか?
261ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(6,365ポイント)
Date: 2008/08/13(水) 00:32
No:20141
|
|
Title: Re:敵弾フラグが消えない
|
|
>管理人さん
2重宣言は特にありませんね・・・。
プログラムを見た感じではうまくいきそうなんですが・・・。
>Justyさん
実際に前の状態で行った時は、多少遅くなる程度で(FPSが59を切るくらいで)動作が重くなりませんでした。
また、配列数を増やしても、目に見えるほど重くなることはありませんでした。
しかし、countでのフラグの落とし方を導入してみると、FPSが40を切ることもあるくらい重くなってしまいます。
このことから、重くなるのが描写ではないと判断したのですが、どうでしょうか?
一応、重くなる対策として、敵の弾の出現間隔を調整することで落ち着きましたが、出来ればなんとか解決したいです;;
266ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(214,284ポイント)
Date: 2008/08/13(水) 00:52
No:20144
|
|
Title: Re:敵弾フラグが消えない
|
|
>しかし、countでのフラグの落とし方を導入してみると、FPSが40を切ることもあるくらい重くなってしまいます。
>このことから、重くなるのが描写ではないと判断したのですが、どうでしょうか?
なるほど。まだちょっとどっちかは判断が付かないんですが、
今の countの仕方は arrayさんの改良前か後でも、それ自体はそんなに大した処理では
ないはずなんですよ。
んー、なんでしょうねぇ。
一度、今現在のコードを出して頂いた方がいいのかもしれません。
270ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(213,985ポイント)
Date: 2008/08/13(水) 00:59
No:20145
|
|
Title: Re:敵弾フラグが消えない
|
|
>書き換えてやってみましたが、今度はまったく敵のフラグが落ちないという事態に;;
>後半部分のbreak辺りの処理がうまくいってない感じです。
いろんな可能性がありますが、ありがちなのは EnemyShotGroup[i].flagを 1にしたとき、
(或いは EnemyShotGroup[i].flagを 0にしたときでもいいですが)
ちゃんとそのグループ内の全ての EnemyShotGroup[i].EnemyShot[j].flagを 0に初期化していますか?
それをしていないと、同じ領域を2度目以降に使用する際に、前回使用したときの情報が
残ってしまっている可能性があります。
299ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(214,155ポイント)
Date: 2008/08/13(水) 02:19
No:20146
|
|
Title: Re:敵弾フラグが消えない
|
|
そういえば。
弾の flagが全て 0だからといって、グループの方も 0にしてしまっていいのでしょうか?
例えば計10発撃つはずだったのに、最初に一発撃った段階で、その弾が画面外に行ってしまって
flagが 0に。
そのグループは1発しかまだ発射していないからグループのフラグも 0になってしまい、
残りの9発が発射されなくなってしまったりしませんか?
170ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(688,947ポイント)
Date: 2008/08/13(水) 02:43
No:20147
|
|
Title: Re:敵弾フラグが消えない
|
|
敵が画面内におらず、一つも登録された弾がなければ、それ以上計算する必要がないので、
弾幕データを消しても良いですよね。
龍神録の館だと、弾幕を開始した敵のフラグがオフになっていて、かつ、
弾幕の弾が全て画面上になければ弾幕データがオフになりますが、
シューティングゲームの館のサンプルでは、単に画面内になければオフになっていると思います。
龍神録の館では敵は倒されるか、画面外に出たらフラグに2を入れ、それで判断しています。
それにシューティングゲームの館のサンプルのままでは、弾幕の弾データは敵が倒されていても、
登録され続けるため、上のような方法で、改善しなければなりません。
248ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(214,280ポイント)
Date: 2008/08/13(水) 04:06
No:20149
|
|
Title: Re:敵弾フラグが消えない
|
|
>敵が画面内におらず、一つも登録された弾がなければ、それ以上計算する必要がないので、
>弾幕データを消しても良いですよね。
敵がいなくなれば、そうですね。
>龍神録の館だと、弾幕を開始した敵のフラグがオフになっていて、かつ、
なるほど。きっちり改善されているのですね。
125ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(6,571ポイント)
Date: 2008/08/13(水) 08:11
No:20150
|
|
Title: Re:敵弾フラグが消えない
|
|
>Justyさん
>弾の flagが全て 0だからといって、グループの方も 0にしてしまっていいのでしょうか?
確かにいわれてみれば、これは問題がありますね。
今まで、普通に作っていて何の問題もなかったので完全に見逃していました。
逆に、これを直せればボムを撃った時ややられた時に敵弾が全て消え、その後しばらく発射されないという事態を直せるかもしれませんね。
>管理人さん
敵を倒したときの弾の振る舞いは大丈夫なのですが、問題は敵のフラグと弾のフラグ関係に問題があるということですね。
今のところ、それによる問題が発生していないのですが、やはりここの改良をすべきでしょうか?
206ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(17,808ポイント)
Date: 2008/08/13(水) 17:36
No:20168
|
|
Title: Re:敵弾フラグが消えない
|
|
私の改良後のプログラムですが、Justyさんの仰るとおりで
if(count != 0) ×
if(!count) ○
が正しそうですね。一瞬同じに見えましたが、上だと一度もカウントしませんね(汗
それと管理人さんのプログラムなんですが、
if(j==ENEMY_TOTAL_SHOT_NUM) ×
if(j==ENEMY_TOTAL_SHOT_NUM - 1) ○
でよさそうじゃないですか?
↓より修正しときます
170ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(689,372ポイント)
Date: 2008/08/13(水) 18:40
No:20171
|
|
Title: Re:敵弾フラグが消えない
|
|
>>arrayさん
これはループ中にbreakが行われたかどうかを判定する為に私はよく使う手なんですよ。
#include <stdio.h>
#define MAX 10
int main(){
int i;
for(i=0;i<MAX;i++){
if(i==15)
break;
}
if(i==MAX)
printf("途中でbreakが行われませんでした\n");
return 0;
}
このi==15を5にしたり10にしたりしてみて下さい。
iはMAX未満の状態がループ継続可能条件なわけですが、それを満たさなくなったからループから抜けたわけですよね。
だから、最後までi++が行われたのならiはMAXになっているはずです。
2倍のポイントを手に入れた! 408ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(17,648ポイント)
Date: 2008/08/13(水) 19:30
No:20173
|
|
Title: Re:敵弾フラグが消えない
|
|
実行結果を確認しました、理解してるつもりだったのですけど、間違ってますね><
私はforで配列の
#include <stdio.h>
#define MAX 5
int main(){
int i,data[MAX] = {0};
for(i=0;i<MAX;i++)
printf("data[%d]=%d\n", i, data[i]);
printf("----for終了----\n");
printf("i=%d\n",i);
return 0;
}
#####実行結果#####
data[0]=0
data[1]=0
data[2]=0
data[3]=0
data[4]=0
----for終了----
i=5
data[0〜4]の配列の中身を見ると考えてたので←あってますよね
iが4カウントで止まっていると勘違いしてたのがアホな言動をした原因だったみたいです。
実際はforを抜けたら5になってたんですね><;
こんなことも知らなかったりするので、またミスしていた時は教えてくれると嬉しいです^^
304ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(689,783ポイント)
Date: 2008/08/13(水) 19:45
No:20174
|
|
Title: Re:敵弾フラグが消えない
|
|
int data[5];
で用意すると、[0]〜[4]が使用できる要素であることは正しいです。
また
(↓@ABは機種依存文字)
for(@;A;B){
//ごにょごにょ
}
において、
@はループの一番最初に一度だけ行われる処理
Aはループ1周の最初に行われる処理
Bはループ1周の最後に行われる処理
だから、上記と、処理は左からされること、0以外が条件文の真になることからBをはぶいてこんなことも。
#include <stdio.h>
#define MAX 5
int main(){
int i,data[MAX]={0,};
for( i=0 ; ++i && i<=MAX ;)
printf("data[%d]=%d\n", i-1, data[i-1]);
printf("----for終了----\n");
printf("i=%d\n",i);
return 0;
}
実行結果
data[0]=0
data[1]=0
data[2]=0
data[3]=0
data[4]=0
----for終了----
i=6
こんな事は普通しませんがw
359ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..初心者(6,645ポイント)
Date: 2008/08/13(水) 22:18
No:20177
| 解決!
|
Title: Re:敵弾フラグが消えない
|
|
arrayさんのプログラムを修正して試したところ、うまくいきました。(FPSが59以上で落ち着きました)
やはり、countを余計に数えていることによる、動作の重さであるということでした。
管理人さんのほうでは、なぜかうまくいかないので、今のところはarrayさんの方法を使わせていただきます。
このスレを立てたおかげで、新たなテクニック、動作の重さについていろいろと学ぶことが出来ました^^
レスしてくださった、管理人さん、Justyさん、arrayさんありがとうございます^^
74ポイント を手に入れた。
|
|
|
|
Name: 藍 ..入門者(2,815ポイント)
Date: 2008/08/13(水) 15:21
No:20165
|
|
Title: 龍神録の館12章で
|
|
龍神録の館12章で
//行動パターン4
//すばやく降りてきて左へ
void enemy_pattern4(int i){
int t=enemy[i].cnt;
if(t==0)
enemy[i].vy=5;//下がってくる
if(t==30){//途中で右向きに
enemy[i].muki=2;
}
if(t<100){
enemy[i].vx+=5/100.0;//右向き加速
enemy[i].vy-=5/100.0;//減速
}
}
ここのすばやく降りてきて左へってのは右へですよね。
細かすぎますが誤字を発見しましたので一応報告しておきます。
133ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(17,952ポイント)
Date: 2008/08/13(水) 17:50
No:20169
|
|
Title: Re:スコアやその他もろもろの表示
|
|
C言語初心者とのことですが
>シューティングのやつはスコアやpowerやpointの計算や表示はどのようにしたらよいのでしょうか?
との事なので、33章までの内容は理解されてるのでしょうか?
分らない所があればシューティングの館に関しては熟読した方だと思っているので、多少ですがサポートできると思います・・・が
敵フラグ、ショットフラグなどを理解しないで、いきなり、スコア表示などから取りかかるのは利口ではないと思います。というのも敵を倒してからポイント加算などの処理をするので、一番最後に考えるのが普通になるんじゃないでしょうか?
144ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(12,354ポイント)
Date: 2008/08/13(水) 18:27
No:20170
|
|
Title: Re:スコアやその他もろもろの表示
|
|
>arrayさん
画面デザインやSTGフィールドの広さといったことに絡んでくるので一概には言えませんが、
スコア等を表示する場所は早めに確保しておいた方が、敵や弾の消滅処理が書き易くなると思います
(ウインドウの端がフィールドの端とは限らないので)
Point等の計算は最後の方になるでしょうが、表示だけなら現段階での検討を推奨します
ついでに表示する桁数等の仕様もある程度考えておいた方がいいと思います
あと、「計算」と「表示」は違う機能なので、別の関数に分けて作った方が楽になります
2倍のポイントを手に入れた! 258ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(185ポイント)
Date: 2008/08/12(火) 15:42
No:20107
|
|
Title: ゲームプログラミングの館の内容について
|
|
以下の章をのサンプルプログラムはお使いのコンパイラにソースをコピーペーストしていってください。
と書いてあったんですけど
どの項目にコピーペーストしたらいいんですか?
66ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(243ポイント)
Date: 2008/08/12(火) 17:00
No:20114
|
|
Title: Re:ゲームプログラミングの館の内容について
|
|
この質問は解決したんですが
12章の「画像を動かす」のところで画像が動いているように見えないんですが
なぜですか?
49ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(15,405ポイント)
Date: 2008/08/13(水) 12:47
No:20162
|
|
Title: Re:ゲームプログラミングの館の内容について
|
|
私の環境でも表示されないですよ
WaitKey();に来た時点で最後の画像がいきなり表示されるだけです。
グラフィックチップやドライバーの問題だと思っています
LoadGraphScreen( i , 0 , "char.png" , TRUE ); //画像を描画
の下に
WaitVSync(0);
を加えると表示されるんですがちらつきもなくなります。
16ポイント を手に入れた。
|
|
|
|
Name: Haru ..中級者(10,017ポイント)
Date: 2008/08/11(月) 13:51
No:20061
|
|
Title: lsコマンド ワイルドカード //linux gcc
|
|
たびたび申し訳ないです!
Haruです・・・。
今回わからないところは、、、、また、というか、、まだワイルドカード
のプログラムです。
前回の[19015]の投稿で、Mistさんに教えて頂いた事はできるようになったのですが、、
(以下おしえて頂いた事)
___________________________________________________________
1: *abc
2: abc*
3: *abc*
だった場合です。
1,2は、ほぼアドバイス通りに作成しました。
1>>ファイル名の先頭部分から*を除く検索文字数分、同じかどうかmemcmpするだけです。
2>>検索文字列の*を除いた文字数を取得 ファイル名の文字数を取得
検索文字数よりも少なければ不一致
ファイル名の文字数から検索文字数を引いた位置からファイル名と検索文字でmemcmpする
_____________________________________________________________
3は*は0文字からで良いので単純に
検索文字がabcだった、場合にabcの文字列を含むファイルを読み取る。
とのように、考え、それは先に述べたように完成しました。
しかし、私の理解が悪かったのか、、、
(というか、ワイルドカードがどのように使えるのかちゃんと試しておくべきでした...orz)
例えば、myfile.cというファイルがあった場合に
ls m*f*l*.*や、m*l* などのように検索した場合でも検索がHITするようにしたいのですが、、
一週間近く考えても、考えれば考えるほどわからなくなってきてしまいました。
もしよろしければ、度々すみませんが、アドバイス等をいただけますでしょうか?
p.s >>Mistさん
私の勘違いのためせっかく教えて頂いたのに申し訳無いです。
これは、経験だと思い、後に活かすことが出来るようにします。
------
2番の手順は以下の通り
415ポイント を手に入れた。
|
|
|
|
Name: Haru ..中級者(10,056ポイント)
Date: 2008/08/11(月) 14:01
No:20062
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
一番下
>>------
>>2番の手順は以下の通り
は、コピペミスです(汗
39ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..中級者(14,486ポイント)
Date: 2008/08/11(月) 16:50
No:20069
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
自分が作るとしたら
まず検索文字列を*で分割して文字列の配列を得るかな
配列の文字列で順番に strstr( )して最後の文字列まで NULL が返らなければ一致
69ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..中級者(10,355ポイント)
Date: 2008/08/11(月) 17:00
No:20071
| 解決!
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
>>toyoさん
>>自分が作るとしたら
>>まず検索文字列を*で分割して文字列の配列を得るかな
>>配列の文字列で順番に strstr( )して最後の文字列まで NULL が返らなければ一致
分割というと、strtokですかね。
strstr関数は使えるかな?
と思い、一回調べたんですが、使い方がいまいちピンとこなくて諦めた関数でした(^^;
もう一度strstrを調べ直してから、再挑戦します!!
ありがとうございます!
197ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..中級者(14,977ポイント)
Date: 2008/08/11(月) 17:53
No:20077
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
実際に作ってみたら配列にしなくてもよかったです
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
haystack : 被検索文字列
wild : *を含んだ検索文字列
戻り値 : 0 一致 : -1メモリ確保失敗 : -2 不一致
*/
#define WILD_CHAR '*'
#define DEBUG
int wildcard(char* haystack, char* wild) {
char* start;
char* end;
// 検索文字列を書き換えるので作業用のバッファを確保してコピー
char* buf = (char*)malloc(sizeof(char) * (strlen(wild) + 1));
if (buf == NULL ) {
return -1;
}
strcpy(buf, wild);
start = buf;
while (*start) {
// '*'を探して見つかれば 0 に書き換える
end = strchr(start, WILD_CHAR);
if (end) {
*end = '\0';
}
// デバッグ用出力
#ifdef DEBUG
printf("haystack=%s needle=%s\n", haystack, start);
#endif
// 文字列を探して一致しなければメモリ開放して戻る
if ((haystack = strstr(haystack, start)) == NULL) {
free(buf);
return -2;
}
// 被検索文字列と検索文字列を更新する
haystack += strlen(start);
start += strlen(start) + 1;
}
free(buf);
return 0;
}
int main(void) {
char *moji1 = "*ab**c*def*gh*.*ijk*";
char *moji2 = "abbc123def456gh4.ijk";
if (wildcard(moji2, moji1) == 0) {
printf("OK\n");
}
else {
printf("NO\n");
}
return 0;
}
491ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(25,518ポイント)
Date: 2008/08/11(月) 19:53
No:20083
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
これでどうでしょう。
#include <stdio.h>
#include <string.h>
int Search(const char *str, const char *pat)
{
while(*str && *pat){
if(*pat == '*'){
while(*++ pat == '*') ;
if(!*pat) return 1;
if(!(str = strchr(str, *pat))) return 0;
}
else if(*pat != *str) return 0;
str ++;
pat ++;
}
while(*pat == '*') pat ++;
return !*str && !*pat;
}
int main(void)
{
char *str = "abbc123def456gh4.ijk";
char *pat = "*ab**c*def*gh*.*ijk*";
const char *result[] = {"不一致", "一致"};
puts(str);
puts(pat);
puts(result[Search(str, pat)]);
return 0;
}
333ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(25,490ポイント)
Date: 2008/08/12(火) 10:27
No:20094
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
間違ってました。
これだと、
"abcda"に対して、"*a"が不一致になるので、だめです。
28ポイント を落としてしまった。
|
|
|
|
|
Name: Haru ..中級者(10,738ポイント)
Date: 2008/08/12(火) 10:36
No:20095
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
toyoさん、フリオさんどうもありがとうございます!!
見させていただきました。
が、少しわからないところがあるので、宜しければ教えていただけないでしょうか?
恐らく、私のポインタの理解度が足りないのが原因かと、思われます。。
char* buf = (char*)malloc(sizeof(char) * (strlen(wild) + 1));
この1行では作業用のバッファをコピーするというのは理解できたのですが、
*(strlen...));の前の*はどういう意味なんでしょうか?
while (*start)
ここのwhileの後の(*start)とは、どのような条件が成り立ったら、
whileから抜けるという意味なのでしょうか?
ここのstartは今、*を含む検索文字列が代入されてるのですよね?
haystack += strlen(start);
start += strlen(start) + 1;
そしてここは、被検索文字列と検索文字列を更新するとありますが、
今の私にはわかりません。。。
startはDEBUGを見る限り、文字列の長さは0になってるのですよね?
自分でもう少し考えろといわれそうですが、この3つの文は今の私が考えた結果ではわかりませんでした。
383ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 ..かけだし(1,185ポイント)
Date: 2008/08/12(火) 11:10
No:20096
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
> char* buf = (char*)malloc(sizeof(char) * (strlen(wild) + 1));
char 型のサイズ × (wild の長さ + 1)、つまり、
wild の長さ + 1 の文字列長を char 型のサイズで掛け算しています。
そのサイズ分だけメモリから取得しています。
ちなみに +1 は終端文字(NULL文字)分です。
> while (*start)
*start は start の指している文字を表します。
この while 文では、 *start が0でない間繰り返されます。
つまり、
while (*start != 0)
あるいは
while (*start != '\0')
と同等です。
これは *start が終端文字になるまで繰り返すということです。
> haystack += strlen(start);
> start += strlen(start) + 1;
while 文の最初のほうで '*' を終端文字に置き換えているので、
ワイルドカード文字列の最初に '*' があった場合は文字列の長さが0になります。
上記の文は、haystack を現在の startの文字列長( '*' を終端文字に置き換えているのでそこまでの長さ)分
ずらしてから、 start を終端文字に置き換えた次の位置に移動しています。
疑問箇所だけ説明しましたが、これでなんとなくつかめたのではないでしょうか?
(他の方のコードを読み解くのも言語の勉強になります)
270ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..中級者(11,111ポイント)
Date: 2008/08/12(火) 11:27
No:20097
| 解決!
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
>>被検索文字列と検索文字列を更新する
掛け算!!orz...。
てっきりポインタだとばっかり思い込んでました。
>>*start は start の指している文字を表します。
>>この while 文では、 *start が0でない間繰り返されます。
>>while (*start != 0)
>>while (*start != '\0')
>>と同等です。
なるほど。。。勉強になります!!
>>上記の文は、haystack を現在の startの文字列長( '*' を終端文字に置き換えているのでそこまでの長さ)>>分 ずらしてから、 start を終端文字に置き換えた次の位置に移動しています。
理屈は説明していただいてなんとなく理解できました!
・・・が、少しピンと来ないんでノートに書きまくって理解しようかな思います(^^;
>>疑問箇所だけ説明しましたが、これでなんとなくつかめたのではないでしょうか?
>>(他の方のコードを読み解くのも言語の勉強になります)
ありがとうございます!
本当に他の方のコードを読むと勉強になりますね!
御津凪さん解説していただいてありがとうございました!!
373ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(25,723ポイント)
Date: 2008/08/12(火) 15:45
No:20108
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
改良しました。
#include <stdio.h>
#include <string.h>
int Match(const char *str, const char *pat)
{
const char *w = NULL;
while(*str){
if(*pat == '*') w = pat ++;
else if(*pat != *str){
if(!w) return 0;
pat = w + 1;
str ++;
}
else{
str ++;
pat ++;
}
}
while(*pat == '*') pat ++;
return !*pat;
}
int main(void)
{
char *str = "abcdab";
char *pat = "*ab";
const char *result[] = {"Unmatch", "Match!!"};
puts(str);
puts(pat);
puts(result[Match(str, pat)]);
return 0;
}
233ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..中級者(11,971ポイント)
Date: 2008/08/13(水) 09:57
No:20157
|
|
Title: Re:lsコマンド ワイルドカード //linux gcc
|
|
>フリオさん
レス遅れてすみません!!
わざわざありがとうございます!
48ポイント を手に入れた。
|
|
|
|
Name: わ太郎。 ..ぴよぴよ(3ポイント)
Date: 2008/08/12(火) 18:58
No:20125
|
|
Title: 計算結果がうまく表示できませんん。
|
|
はじめまして、わ太郎。と申します。
ソフトはMicrosoft Visual Studioを使っています。
円周の計算なのですが、計算結果が−になってしまいます。
void main(void)
{
double han,enshu;
printf("半径入力");
scanf("%d",&han);
enshu=han*2*3.14;
printf("半径=%5.2fセンチ\n円周=%5.2fセンチ\n",han,enshu);
rewind(stdin);
getchar();
}
どこを直せばいいのでしょうか?
初歩的な質問ですいません。
3ポイント を手に入れた。
|
|
|
|
Name: tny ..ぴよぴよ(10ポイント)
Date: 2008/08/12(火) 19:02
No:20126
|
|
Title: Re:計算結果がうまく表示できませんん。
|
|
初めまして。
scanf("%d",&han);
を、
scanf("%lf",&han);
とすれば、いいのではないでしょうか。
10ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(17,638ポイント)
Date: 2008/08/12(火) 19:02
No:20127
|
|
Title: Re:計算結果がうまく表示できませんん。
|
|
scanf("%d",&han);
多分ここだと思います。正しくは%fかな・・%dは10進数だったとおもうのでdoubleには対応していないのかと
2倍のポイントを手に入れた! 126ポイント を手に入れた。
|
|
|
|
|
Name: わ ..ぴよぴよ(7ポイント)
Date: 2008/08/12(火) 19:09
No:20128
| 解決!
|
Title: Re:計算結果がうまく表示できませんん。
|
|
scanf("%lf",&han);
でちゃんと表示することができました^^
こんな初歩的な質問に答えてくださってありがとうございました。
7ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..中級者(11,301ポイント)
Date: 2008/08/12(火) 03:39
No:20092
|
|
Title: 龍神録の館17、19章について
|
|
報告です。
●17章
//キャラクタショットに関する関数
void cshot_main(){
calc_cshot();//ショットの起動計算
enter_shot();//ショット登録
}
軌道計算ですよね、直し忘れてました。
●19章---- out.cpp 以下の部分を変更 ----
se_flag[1]=1;//敵のピチュリ音
↓
se_flag[1]=1;//敵のピチュり音
です。
●19章---- define.h の以下を変更 ----
//敵に関する構造体
typedef struct{
int flag,cnt,pattern,muki,knd,hp,hp_max,item_n[6],img,back_col;
//フラグ、カウンタ、移動パターン、向き、敵の種類、HP最大値、落とすアイテム、背景色
double x,y,vx,vy,sp,ang;
//座標、速度x成分、速度y成分、スピード、角度
int bltime,blknd,blknd2,col,state,wtime,wait;
//弾幕開始時間、弾幕の種類、弾の種類、色、状態、待機時間、停滞時間
}enemy_t;
コメントが急に下になっています。
●19章---- define.h の以下を変更 ----
define.h
じゃなくて
struct.h
ですね、内容的に。
---- struct.h の以下を変更 ----
、です。
●19章---- GV.h に以下を追加 ----
GLOBAL del_effect_t del_effect[DEL_EFFECT_MAX];//消滅エフェクト
GLOBAL effect_t effect[EFFECT_MAX];//エフェクト
ですが、
GLOBAL int img_del_effect[5];
↑
これの追加を指摘し忘れているようです。
---- GV.h に以下を追加 ----
GLOBAL int img_del_effect[5];
GLOBAL del_effect_t del_effect[DEL_EFFECT_MAX];//消滅エフェクト
GLOBAL effect_t effect[EFFECT_MAX];//エフェクト
ですよね。
以上です。
2倍のポイントを手に入れた! 990ポイント を手に入れた。
|
|
|
Name: tmhr ..ぴよぴよ(79ポイント)
Date: 2008/08/11(月) 19:08
No:20082
|
|
Title: DXライブラリについて
|
|
DxLib_VCのフォルダの中のサンプルプログラム実行フォルダっていうのがあるじゃないですか
その中のDxLib.slnというものがないんですが、どこにそれはあるんですか?
わかりにくくてすいません。
77ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(688,128ポイント)
Date: 2008/08/12(火) 01:18
No:20087
|
|
Title: Re:DXライブラリについて
|
|
拡張子は表示させる設定になっていますか?
また、DXライブラリのバージョンによっては
DxLib_VC2008_and_2005用.sln
などになっているかもしれません。
.slnが開ける設定になっていなければ、DxLib.dswを開いてみて下さい。
95ポイント を落としてしまった。
|
|
|
|
Name: lbfuvab ..かけだし(2,467ポイント)
Date: 2008/08/12(火) 03:29
No:20091
|
|
Title: PlaySound関数
|
|
今あるソフトでPlaySound関数を使っているのですが、
SND_ASYNCフラグをつけた場合は絶対(SND_LOOPは使っていません)
PlaySound(NULL,NULL,SND_PURGE);として止めなくてはならないのでしょうか?
それとも時間がきたら勝手に止まるので放っておいていいのでしょうか?
81ポイント を手に入れた。
|
|
|
Name: けるびん ..入門者(4,678ポイント)
Date: 2008/08/12(火) 01:04
No:20086
|
|
Title: プロセス間通信について
|
|
実験でプロセス間通信を行なって、簡単なゲームを作成しろ(テトリスをやろうかなと考え中)という課題が出たのですが、
自分で調べてみたところ・・・
プロセス間通信には大きく二つあり、
・同一マシン内での通信
・ネットワークで接続されたマシン同士で行なわれる通信
の2種類があり前者で使用されるソケットをUNIXドメインソケット、後者で使用されるソケットがINETドメインソケットである。
という基礎的な知識をやっと調べたところなんですけど、UNIXドメインソケット、INETドメインソケットについてもう少し詳しく知りたいので、いいサイトなどがあれば教えていただきたいです。
こういうのやってみると楽しかった、みたいな経験とかも教えていただけるとありがたいです。
227ポイント を手に入れた。
|
|
|
Name: type_white ..ぴよぴよ(649ポイント)
Date: 2008/08/11(月) 13:26
No:20060
|
|
Title: s5. 処理速度を一定にする。等で
|
|
どうもこんにちはです。またしてもすっごい些細な事で気づいたことがあったので数点報告です。
■ゲームプログラミングの館
・s5. 処理速度を一定にする。
にて、
>>まず、この処理を担当する関数名をwait_fancとでも名づけましょう。
とあり、その後もwait_fancという名前で関数が定義されていますが、
fancの部分がfunctionの略だとされたらwait_funcの方がいいんじゃないでしょうか
■龍神録プログラミングの館
・1章 プロジェクトと素材を用意しよう
の プロジェクトをまとめてダウンロード で頂く事のできる素材で、
各章の.cppなどのソースが入っているフォルダの名前が「sorce」となっていますが、「source」の綴り間違えじゃないでしょうか。
これは・・・修正が大変なので無理そうですが一応報告です^^;
■龍神録プログラミングの館
・7章 ボードを表示してみよう
にて、
>>main.cppではメインループのcase 0内に「first_ini();」が入っただけです。
とありますが、前章からみて実際には
case 100:
に
calc_ch();
も足されていますですよ。
381ポイント を手に入れた。
|
|
|
|
Name: Haru ..中級者(10,158ポイント)
Date: 2008/08/11(月) 14:15
No:20063
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
>>fancの部分がfunctionの略だとされたらwait_funcの方がいいんじゃないでしょうか
ttp://pc11.2ch.net/test/read.cgi/prog/1111139540/-100
皆さん良く間違えるみたいですね(^^;
私もスペルミス多いので日本語で kinou なんて関数名にしてたらkibou
になってて、、、笑
しかも気づくのに結構時間がかかってました。
何のために日本語にしたんだか。orz
102ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..中級者(10,060ポイント)
Date: 2008/08/11(月) 14:55
No:20064
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
sorceとserchは、このサイトの個性だと思います。
ツッコンじゃダメだー
あと、誤字報告は報告でトピックを立てるといいですよ。
でも新しいルールだし規約に無いのか。
便乗して報告です。
●17章
//キャラクタショットに関する関数
void cshot_main(){
calc_cshot();//ショットの起動計算
enter_shot();//ショット登録
}
"軌道計算"じゃないでしょーか。
154ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(687,749ポイント)
Date: 2008/08/11(月) 16:38
No:20068
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
皆様ありがとうございます。
うぅ、、なんとまぁ五時の覆い歳とでshow。orx
serchとsorceは昔っから私は覚え間違いしてて、
wordで英文書くときに、ナミナミ線でいつも注意されます^^;
フォルダ内にある全てのファイルのスペルミスを置換してくれるソフトとかないですかね〜・・。
フォルダ選択してCtrl + Hとかで出来たらいいのに^^;
出来るだけ修正しようと思います。
皆様ありがとうございました。
131ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(214,045ポイント)
Date: 2008/08/11(月) 17:08
No:20072
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
>フォルダ内にある全てのファイルのスペルミスを置換してくれるソフトとかないですかね〜・・。
今時のエディタならどれでもそういう機能ありそうな気がします。
うちで使ってる EmEditorだと「ファイルから置換」で特定のフォルダ内の指定したフィルタに一致した
ファイルの中を置換できますし。
117ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 ..ぴよぴよ(915ポイント)
Date: 2008/08/11(月) 17:11
No:20073
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
> フォルダ内にある全てのファイルのスペルミスを置換してくれるソフトとかないですかね〜・・。
> フォルダ選択してCtrl + Hとかで出来たらいいのに^^;
フリーソフトで"Repl-Ace"というものがありまして、
それだと、ディレクトリ内(あるいはドラッグ&ドロップしたファイル)の全てを一括して
置き換えることが出来ますよ(複数可)。
私も愛用しています。
72ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(104,172ポイント)
Date: 2008/08/11(月) 23:32
No:20085
|
|
Title: Re:s5. 処理速度を一定にする。等で
|
|
ていうか、VisualStudioにも一括置換機能はあったはずですが…?(ΘoΘ;)
27ポイント を手に入れた。
|
|
|
|
Name: ROL ..上級者(16,328ポイント)
Date: 2008/08/11(月) 12:42
No:20055
|
|
Title: ゲーム素材のダウンロードについて
|
|
あいかわらず、ファイル分割ができないROLです^^;
今回は、ゲーム素材のダウンロードの事で相談させていただきたく書き込みしました。
家の回線はISDNなので音楽ファイルなどをダウンロードするにもものすごく時間がかかります;
そして、回線状態があまり安定していないので切れることが多いんです。
そうするとファイルサイズが大きければ何回もやり直しと言う事が多々あります。
ダウンロードマネージャーなどを使っているのですが認証が必要なファイル置き場などは
一定時間経つとアドレスが無効になり、回線が切断されたら最後、1からやり直しになってしまいます。
私はHPを持っていますので「ファイル置き場→自分のHP鯖」にダウンロード
または、ZIP形式でダウンロードする。
のような方法があればいいのですが。
何かいい方法は無いでしょうか?よろしくお願いします。
追伸
管理人様から返信ありませんでしたが、届いてましたでしょうか?
教科書で隠しながら描いたものですから自分でも満足いくものではなかったのですが
雰囲気がつかめればと描いて見ました^^
313ポイント を手に入れた。
|
|
|
|
Name: 御津凪 ..ぴよぴよ(843ポイント)
Date: 2008/08/11(月) 12:57
No:20056
|
|
Title: Re:ゲーム素材のダウンロードについて
|
|
大体の鯖の規約ではダメだろうと思いますが方法はあります。
cgiプログラム(PHPとか)を使って、対象のファイルデータを実行元の鯖に送る方法です。
プログラム的には可能ですが、規約の問題もあり、私の知る限りではそのようなcgiプログラムを見たことがありません。
また、自分のPCからそのような処理をするのは無理だと思います。
データを取得するうんぬんにかかわらず、自分の回線を使用するからです。
家から取得するより、近くのネットカフェ等を使ってUSBメモリなどに保存してくるほうが
難しくなく、効率がいいです。
もちろん金はかかりますが。
234ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..上級者(16,418ポイント)
Date: 2008/08/11(月) 19:07
No:20081
| 解決!
|
Title: Re:ゲーム素材のダウンロードについて
|
|
なるほど、CGIを使うと言う方法があるのですね。
町の財政が悪くて光が導入できずに、ADSLは回線いっぱい。、ISDNも私が契約した1本だけでした;
回りの町が光工事をしてあるのでNTTも回線が増やせないようで^^;
鯖の規約をもう一度読み直して何とかなる方法を探って見ます。
近くにネットカフェがあれば私も光にはしてるんですがね^^;
>メール
やっぱり届いてませんでしたか^^;
てっきり「あ、微妙じゃん。返信しなくてもいっか;」的な感じで
スルーされたかと思ってヒヤヒヤしました;;;
自分の家でスキャンしたせいかサイズが大きくなってしまったので
ZIP形式で送りますね^^
>「あ、微妙じゃん。返信しなくてもいっか;」
管理人様がそんな事するはず無いとはわかっているんですが、つい心配で
でも、送信できたってことはいったい誰に届いたんでしょう・・・・・・(怖
90ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..上級者(16,474ポイント)
Date: 2008/08/11(月) 20:03
No:20084
|
|
Title: Re:ゲーム素材のダウンロードについて
|
|
先ほどメールを送りましたが届いていますでしょうか?
もしダメであるようであればこちらの問題だと思うので
違うアドレスから送ろうと思います;;;
56ポイント を手に入れた。
|
|
|
|
|
Name: 明石 ..ぴよぴよ(20ポイント)
Date: 2008/08/11(月) 18:58
No:20080
| 解決!
|
Title: Re:ウィンドウの変更
|
|
ありがとうございます。
無事解決しました。
16ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..中級者(10,293ポイント)
Date: 2008/08/11(月) 16:16
No:20067
|
|
Title: 龍神録の館17、18章について
|
|
"---- cshot.cpp を変更 ----"の中の
//ショットの移動計算
#define CSOUT 20 //どれ位画面から外れたら消すか
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT ||
cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
cshot[i].flag=0;
}
}
}</pre>
、の中に"cshot[i].cnt++;"が無いため18章で自機ショットの当たり判定が発生しませんでした。
</pre>//ショットの移動計算
#define CSOUT 20 //どのくらい画面から外れたら消すか
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
cshot[i].cnt++;
if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT ||
cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
cshot[i].flag=0;
}
}
}
これでうまくいきました。
そしてダウンロードできるプロジェクトファイルの18章cshot.cpp
の中では、
//ショットの移動計算
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
cshot[i].cnt++;
if(cshot[i].x<-dranx || cshot[i].x>FIELD_MAX_X+dranx ||
cshot[i].y<-drany || cshot[i].y>FIELD_MAX_Y+drany)//画面から外れたら
cshot[i].flag=0;
}
}
}
こうなってたのですが、なんだか効率がよさそうですね。
解説が欲しいですがこの先にあるでしょうか。
int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
この計算について教えてください。
233ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(688,105ポイント)
Date: 2008/08/11(月) 16:53
No:20070
|
|
Title: Re:龍神録の館17、18章について
|
|
ご報告ありがとうございます。
まず、自機がうつ弾は龍神録プロジェクト\dat\img\char\bl1.pngですので、一度確認して下さい。
この画像サイズが11,55なんですね。
そして自機ショットは通った軌跡に障害物が無かったかを確認して、当たったかどうかを調べます。
その計算では前にいた位置をspdから予測して直線で求めています。
つまり軌跡をつないで計算していっているので、
「前回のフレームで弾が画面内にあり、今のフレームで画面外」の状態では消してはいけないのです。
前回のフレームで画面内、今のフレームで外、の状態で消すと、今のフレームで描いた最後の
画面外へ外れる軌跡が計算されていないことになります。
弾の位置はcshot[i].spd+画像サイズ/2が画面外なら前回も画面外だったことがわかるので、
この時に消さないといけないのです。
・・・なんていう事を解説無しで理解しろというのは酷ですね、追記しておきます;
356ポイント を手に入れた。
|
|
|
|
Name: ヨセフ ..ぴよぴよ(667ポイント)
Date: 2008/08/06(水) 16:36
No:19820
|
|
Title: 反転させて文字を表示することが出来ません。
|
|
I like sports.を.strops ekil Iになるようにしたいのですが、出来ませんでした。
メイン関数の中がおかしいようなきがするのですが、どうでしょうか?
#include <stdio.h>
/* length関数の宣言 */
int length(char *str);
int main(void)
{
char str1[100], str2[100];
int i, j = 0, len_num;
printf("文字列を入力してください。");
gets(str1);
len_num = length(str1);
printf("%d",len_num);
printf("文字列 %s を反転させると %s になります。\n", str1, str2);
return 0;
}
/* length関数の定義 */
int length(char *str)
{
int c = 0;
while(*str){
c++;
str++;
}
return c;
}
38ポイント を手に入れた。
|
|
|
|
Name: YuO ..上級者(22,672ポイント)
Date: 2008/08/06(水) 16:41
No:19822
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
反転させるコードがないようですが。
str2には反転させた結果を入れたいのだと思いますが,
結果として,str2は内容が不定な状態のままprintfに渡されています。
44ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..ぴよぴよ(737ポイント)
Date: 2008/08/06(水) 16:52
No:19823
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
len_num = length(str1);
printf("%d",len_num);
これで反転できるつもりだったのですが・・・。
2倍のポイントを手に入れた! 70ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(121,939ポイント)
Date: 2008/08/06(水) 16:56
No:19824
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
length関数は、引数として与えた文字列の「長さ」を求めています。
「逆転させた文字列」を求めてはいません。
ところで、今回は、length関数も自作の対象なのですか?
文字列長を求めるには、strlenという標準関数があるのですけれど。
73ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..ぴよぴよ(964ポイント)
Date: 2008/08/06(水) 17:08
No:19826
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
この問題は、足りないところをたして、結果をだすというものでした。
最初は以下のような感じでした。
<pre>
#include <stdio.h>
/* length関数の宣言 */
int length(char *str);
int main(void)
{
char str1[100], str2[100];
int i, j = 0, len_num;
printf("文字列を入力してください。");
printf("文字列 %s を反転させると %s になります。\n", str1, str2);
return 0;
}
/* length関数の定義 */
int length(char *str)
{
return c;
}
<//pre>
実行結果は前に説明した通りです。
反転の方法はfor文が必要ですか?
227ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..入門者(3,439ポイント)
Date: 2008/08/06(水) 17:46
No:19827
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
for文はきっと使います。多分こんな感じ
for(i = 0; i < len_num; i++){ /* 処理 */}
あと、実行結果って見せてくれましたっけ?
> int i, j = 0, len_num;
これ、よく見ると i に0が入ってるようで入ってません。
jだけに0を入れたかった って理由があるならこれで正解でしょうけど、
多分違うと思うので。
まあ i と j は多分あとでfor文で使うのだろうから、
そこで初期化するだろうしバグにはならないような気がします。
けど、あまりよくない書き方だとは思います。
穴埋め問題っぽいから、問題作成者が間違ってるのかも。
にしても、main関数内に i と j があるってことは
回答ではmainの中で反転処理させるつもりだったんでしょうか…。
関数作ったほうがスマートなのになぁ。
187ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(11,042ポイント)
Date: 2008/08/06(水) 18:31
No:19828
|
|
Title: 無題
|
|
コードはきちんとプレタグで囲みましょう。
何故最初だけタグを書いたり一文字違ったりして一度もきちんと書けないのでしょう?
しっかり確認して投稿しましょう。
一回できちんと投稿出来る自信がないならプレビューをしてから投稿しましょう。
それでなくても削除キーを設定しておけば投稿後も修正出来ます。
きちんと誤字やタグミスの無い文章で投稿して下さい。
181ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..ぴよぴよ(991ポイント)
Date: 2008/08/06(水) 22:04
No:19847
|
|
Title: Re:無題
|
|
実行する前初期化されていないとにエラーが出ます。
どうすればよいでしょう?
27ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,207ポイント)
Date: 2008/08/06(水) 22:17
No:19851
|
|
Title: Re:無題
|
|
こんな感じになっています。
#include <stdio.h>
/* length関数の宣言 */
int length(char *str);
int main(void)
{
char str1[100], str2[100];
int i, j = 0, len_num;
printf("文字列を入力してください。");
gets(str1);
for(i = 0; i < len_num; i++){
hen_num=>i}
printf("文字列 %s を反転させると %s になります。\n", str1, str2);
return 0;
}
/* length関数の定義 */
int length(char *str)
{
int c = 0;
while(*str){
c++;
str++;
}
return c;
}
216ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(122,476ポイント)
Date: 2008/08/06(水) 22:34
No:19854
|
|
Title: Re:無題
|
|
【例】"abcd"を与えて、逆順の"dcba"を得る
与えた文字列"abcd"の長さは4である。
このとき、str1[]の中身は次のとおりである。
str1[0]:'a'
str1[1]:'b'
str1[2]:'c'
str1[3]:'d'
str1[4]:'\0'(文字列終端を表わす)
さて、逆順の文字列を得る、ということは、
str2[0]:'d'
str2[1]:'c'
str2[2]:'b'
str2[3]:'a'
str2[4]:'\0'(きちんと終端させる)
の状態にすることである。
終端の'\0'は最後にセットするとして、さて、str1[]の各文字(例:'a')が入っている添字番号と
str2[]中の同じ文字('a')が入っている添字番号との間には、どういった関係式が成り立つだろうか。
考えてみよう。
162ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,280ポイント)
Date: 2008/08/06(水) 22:49
No:19859
|
|
Title: Re:無題
|
|
str[1]とstr[2]の関係をかかなくてはいけないということですか?
str[1]=aのときはstr[2]に何かがくる、という感じにするということでしょうか?
50ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(122,781ポイント)
Date: 2008/08/06(水) 23:15
No:19867
|
|
Title: Re:無題
|
|
元の文字列str1で、'a'は[0]にありますね。
同じ'a'という文字が、逆順文字列str2では[3]にありますね。
このように、同じ'a'という文字が、str1[]とstr2[]のどこに入っているかには
法則があります。その法則を見つけてください、ということです。
'b'でも'c'でも'd'でも、共通の法則です。
2倍のポイントを手に入れた! 248ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,329ポイント)
Date: 2008/08/07(木) 00:19
No:19879
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
法則ですかぁ…。
1の箱の一番目にaが入ったら、2の箱の最後にaがくる。
という考え方ですよね?
49ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(122,926ポイント)
Date: 2008/08/07(木) 08:47
No:19896
|
|
Title: Re:反転させて文字を表示することが出来ません。
|
|
'a'という文字は、
反転前のstr1[0]と反転後のstr2[3]にあります。
'b'という文字は、
反転前のstr1[1]と反転後のstr2[2]にあります。
'c'という文字は、
反転前のstr1[2]と反転後のstr2[1]にあります。
'd'という文字は、
反転前のstr1[3]と反転後のstr2[0]にあります。
さて、上記のことから、同じ文字を格納しているstr1[]の添字番号と
str2[]の添字番号との間に、どういう関係があるでしょうか。
136ポイント を手に入れた。
|
|
|
|
|
Name: BIOS ..ぴよぴよ(628ポイント)
Date: 2008/08/07(木) 19:37
No:19944
| 解決!
|
Title: その仕様のコードです。
|
|
#include <stdio.h>
#define MAZ 15
#define ZERO 0
static char ap[MAZ]={"I speak English"};
int main(void){
char wk;
int ia,ib;
for(ia=ZERO;ap[ia+1]='\n';ia++) printf("%c",ap[ia]);
printf("\n");
for(ia=ZERO;ib=MAZ-1;ia<ib;ia++,ib--){
wk=ap[ib];
ap[ib]=ap[ia];
ap[ia]=wk;
}
for(ia=ZERO;ap[ia+1]='\n';ia++) printf("%c",ap[ia]);
printf("\n");
return ZERO;
}
以上です。APIの技術情報を交換し合いませんか?もよろしくお願いいたします。
196ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(11,161ポイント)
Date: 2008/08/07(木) 21:14
No:19954
|
|
Title: 無題
|
|
>BIOSさん
答えのコードを投稿する事はboxさんや他の閲覧者の方々もすぐ出来ますが、それはしないでいるのです。
これではboxさんが今まで答えを提示することなく丁寧に答えに導いていらっしゃった努力が無意味になってしまいます。
場合によっては正解例を示しながら解説するほうがいい場合もあるかと思います。
ただし、今回の場合そのように感じられません。
しかも何故勝手にトピを解決にしてしまっているのでしょう。
ちょっと場の空気を読まない投稿が多すぎるのじゃないでしょうか。
また、コードはタグで囲みましょう。
119ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..上級者(22,805ポイント)
Date: 2008/08/07(木) 21:59
No:19955
|
|
Title: Re:その仕様のコードです。
|
|
at 2008-08-07T19:37+09:00
[19944] その仕様のコードです。
BIOS wrote (No. 19820) :
(ざっくり省略)
色々とだめ。
・ZEROなんてマクロあるだけ無駄 (ZEROという単語に数値0以上の意味がないから)
・MAZは定義する必要がない。必要ならstrlenを使う
・一つ目と三つ目のfor文の条件式が明らかに間違っている
・そもそもそれらのfor文を用意する意味がない (%15sとかで十分。本来ならナル文字で終端しておくべき)
・二つ目のfor文は構文が間違っている (;が多すぎる)
API云々の前に,Cの勉強をちゃんとすべきだと思います。
133ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..かけだし(1,244ポイント)
Date: 2008/08/07(木) 22:07
No:19956
|
|
Title: Re:無題
|
|
>BIOSさん
>「マーク」はトピ主が選択する物です(トピ主は最後に「解決!」を選択)
>(つまりトピ主は最初質問か雑談のどちらかを選択する。返信者は選択の必要無し)
利用規約の一文です。言いたいことは通りすがりさんと同じなので言わないでおきますが。
答えを書くにしてもヨセフさんの書き方に合わせた方が親切だと思います。せめてコメント付けるとか。
本題と全く関係ないですけどなんかヒーロー戦機思い出した…やったことないのに……
69ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,427ポイント)
Date: 2008/08/07(木) 23:35
No:19963
|
|
Title: Re:無題
|
|
すいません。
分けあって投稿が出来ませんでした。
解決はまだしていません。
同じ文字を格納しているstr1[]の添字番号と
str2[]の添字番号との間にある関係は、
aが最初に出ていて、反転した後は最後に出てるということですか?
ってなると前の考えと同じになってしまいすよね・・・。
逆に動いているって事ですか?
98ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,516ポイント)
Date: 2008/08/07(木) 23:53
No:19965
|
|
Title: Re:無題
|
|
文字を回して、回し終えたら、最後の文字から最初の文字までまた回すっていう考えもしてみたのですが?
あっすみません!「分けあって」ではなく、訳あってです。
ちゃんと編集が出来るように努力します。
89ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..上級者(22,904ポイント)
Date: 2008/08/08(金) 01:36
No:19971
|
|
Title: Re:無題
|
|
> 同じ文字を格納しているstr1[]の添字番号と
> str2[]の添字番号との間にある関係は、
> aが最初に出ていて、反転した後は最後に出てるということですか?
それを式で表して,はじめてプログラムが書けます。
まぁ,ポインタ使えば式は不要,という考え方もありますが。
> ってなると前の考えと同じになってしまいすよね・・・。
> 逆に動いているって事ですか?
やり方はひとつではないのですが,私の考えているやり方を。
今回の場合は別の配列へのコピーが入るので,
str1の添字番号からstr2の添字番号を計算で出してしまった方が楽だろう,と思います。
まずは,str1の中身が"abcde"だった場合の,
各文字のstr1における添字番号i1とstr2における添字番号i2を書き出してみてください。
表にすると分かり易くなると思います。
# これは紙と鉛筆で十分できると思います。
次に,各文字について,i1とi2の間にはどういう関係があるのか,数式化して下さい。
最後に,文字列の長さがlenの時に,str1の添字番号nにある文字はstr2の添字番号になるかを数式化して下さい。
あとは,str1の全ての文字について,上記の式を使ってstr2にコピーしていけばできあがりです。
99ポイント を手に入れた。
|
|
|
|
|
Name: ヨセフ ..かけだし(1,607ポイント)
Date: 2008/08/08(金) 21:59
No:20000
|
|
Title: Re:無題
|
|
返事が遅くなってすみません。最近、パソコンの調子がよくないみたいで…。
今回の反転の方法をなんとなくは理解できたのですが、プログラムとしてかくと、
よくわからなくなってしまいます。
91ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(123,418ポイント)
Date: 2008/08/08(金) 22:25
No:20001
|
|
Title: Re:無題
|
|
下表の?部を埋めてみてください。
【"abcd"を"dcba"に反転させる場合】
文字列の長さ=4
反転前:str1
反転後:str2
+--------+-----+-----+-----+-----+-----+
| ------ | 'a' | 'b' | 'c' | 'd' | '\0'|
+--------+-----+-----+-----+-----+-----+
| str1の | ? | ? | ? | ? | ? |
|添字No. | | | | | |
+--------+-----+-----+-----+-----+-----+
| str2の | ? | ? | ? | ? | ? |
|添字No. | | | | | |
+--------+-----+-----+-----+-----+-----+
【"abcde"を"edcba"に反転させる場合】
文字列の長さ=5
反転前:str3
反転後:str4
+--------+-----+-----+-----+-----+-----+-----+
| ------ | 'a' | 'b' | 'c' | 'd' | 'e' | '\0'|
+--------+-----+-----+-----+-----+-----+-----+
| str3の | ? | ? | ? | ? | ? | ? |
|添字No. | | | | | | |
+--------+-----+-----+-----+-----+-----+-----+
| str4の | ? | ? | ? | ? | ? | ? |
|添字No. | | | | | | |
+--------+-----+-----+-----+-----+-----+-----+
378ポイント を手に入れた。
|
|
|
|
|
Name: ね〜す ..ぴよぴよ(283ポイント)
Date: 2008/08/11(月) 12:18
No:20054
|
|
Title: Re:無題
|
|
はじめまして。このスレを見ていてちょっとした思い付きがあったのですが、
このようなものはどうでしょうか。
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| | | | | | a | b | c | d |
ここで配列全体を文字数+1で引くと、
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| a | b | c | d | | | | | | ※ここの計算部分は配列に代入しません
そして、絶対値として計算すると、
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| | | | | | d | c | b | a |
このようになる気がします。
Cは超初心者なので、ソースコードは書けませんが、この考え方が使えるのかな?と思います。
覚束ない日本語で申し訳ないです。
283ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(687,478ポイント)
Date: 2008/08/11(月) 13:13
No:20058
|
|
Title: Re:無題
|
|
>ね〜すさん
それでも出来ますね。
ただ、0番を最初にした方がいいかもしれません。
実際にやってみました。
答えを書いてしまうとよくないので、肝心な要素番号をさす部分だけ省略してあります。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
int i,len;
char str[10]="abcd",str2[10];
len=(int)strlen(str);
for(i=0;i<len;i++)
str2[i]=str[上記理論];
str2[i]='\0';
printf("%s\n",str2);
return 0;
}
実行結果
dcba
「str[上記理論]」の部分を仰っている理論の通りに番号を示す式を書けばこれでも出来ました。
295ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(123,554ポイント)
Date: 2008/08/11(月) 15:22
No:20065
|
|
Title: Re:無題
|
|
ね〜すさんの考え方はすばらしいと思います。
ただ、管理人さんも書かれているとおり、
C言語の配列はゼロ始まりですので、
こんな風に考えるのがよいかもしれません。
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| | | | | a | b | c | d | |
ここで配列全体から「文字数-1」を引く
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| | a | b | c | d | | | | |
正負を反転させるとできあがり
| -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 |
| | | | | d | c | b | a | |
65ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..かけだし(2,265ポイント)
Date: 2008/08/11(月) 16:03
No:20066
|
|
Title: Re:無題
|
|
文字列strと長さlenを渡すと逆に出力する
void PutStrReverse(char *str,int len);
を定義したとすると、
#include<stdio.h>
#include<string.h>
void PutStrReverse(char *str,int len);
void main(){
char str[50];
int len;
puts("文字を入力してください");
gets(str);
puts("反転して出力します");
PutStrReverse(str,strlen(str));
}
となりますよね。
後、PutStrReverseに関するヒントとしては
最初に出力するのはstr[len-1]で
最後に出力するのはstr[0]です。
後は上手くループを使ってやれば良いと思います。
214ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..初心者(8,070ポイント)
Date: 2008/08/09(土) 21:43
No:20025
|
|
Title: 自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
今、龍神録の館の17章まで来ています。
正常にビルドされた後、
自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
スロー(低速移動)モードに移行する左シフトキーは有効ですが、Zキーのみ無効です。
現在、左に移動しながらでないとショットが出来ない状況にあります。
ソースはコピペに頼らないで書いています。
キーコンフィグの設定どこかおかしいでしょうか。
key.cppファイルの内容です、少し長いですが失礼します。
#include "../include/GV.h"
unsigned int stateKey[256];
int GetHitKeyStateAll_2(){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++;
else stateKey[i]=0;
}
return 0;
}
int CheckStateKey(unsigned char Handle){
return stateKey[Handle];
}
//パッドの入力状態を格納する変数
pad_t pad;
//引数1と引数2のうち大きいほうを引数1に代入する
void input_pad_or_key(int*p, int k){
*p = *p>k ? *p : k;
}
//パッドとキーボードの両方の入力のチェックをする関数
void GetHitPadStateAll(){
int i,PadInput,mul=1;
PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
for(i=0;i<16;i++){
if(PadInput & mul) pad.key[i]++;
else pad.key[i]=0;
mul*=2;
}
input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT ));
input_pad_or_key(&pad.key[configpad.up] ,CheckStateKey(KEY_INPUT_UP ));
input_pad_or_key(&pad.key[configpad.right] ,CheckStateKey(KEY_INPUT_RIGHT ));
input_pad_or_key(&pad.key[configpad.down] ,CheckStateKey(KEY_INPUT_DOWN ));
input_pad_or_key(&pad.key[configpad.shot] ,CheckStateKey(KEY_INPUT_Z ));
input_pad_or_key(&pad.key[configpad.bom] ,CheckStateKey(KEY_INPUT_X ));
input_pad_or_key(&pad.key[configpad.slow] ,CheckStateKey(KEY_INPUT_LSHIFT ));
input_pad_or_key(&pad.key[configpad.start] ,CheckStateKey(KEY_INPUT_ESCAPE ));
input_pad_or_key(&pad.key[configpad.change],CheckStateKey(KEY_INPUT_LCONTROL));
}
//渡されたパッドキー番号の入力状態を返す。返り値が-1なら不正
int CheckStatePad(unsigned int Handle){
if(0<=Handle && Handle<PAD_MAX){
return pad.key[Handle];
}
else{
printfDx("CheckStatePadに渡した値が不正です\n");
return -1;
}
}
cshot.cpp内の自機ショット登録関数はこちらです。
#include "../include/GV.h"
int cshot0num[2] ={2,4};
int cshot0pos_x[4] ={-10, 10,-30, 30};
int cshot0pos_y[4] ={-30,-30,-10,-10};
//自機ショットの登録可能番号を返す
int search_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==0)
return i;
}
return -1;
}
//通常ショット登録
void ch0_shot_pattern(){
int k;
for(int i=0;i<cshot0num[ch.power?0:1];i++){
if((k=search_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=-PI/2;
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x[i];
cshot[k].y=ch.y+cshot0pos_y[i];
cshot[k].power=23;
cshot[k].knd=0;
}
}
se_flag[2]=1;//発射音オン
}
//低速通常ショット登録
void ch1_shot_pattern(){
int k;
for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
if((k=search_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=-PI/2;
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x[i]/3;//低速中なら位置を中心側へ
cshot[k].y=ch.y+cshot0pos_y[i]/2;
cshot[k].power=23;
cshot[k].knd=0;
}
}
se_flag[2]=1;
}
//ショット登録部
void enter_shot(){
//ショットボタンが押されていたら
if(CheckStatePad(configpad.shot>0)){
ch.shot_cnt++;
if(ch.shot_cnt%3==0){//3カウントに1回
if(CheckStatePad(configpad.slow)>0)//低速移動中なら
ch1_shot_pattern();
else
ch0_shot_pattern();
}
}
else
ch.shot_cnt=0;
}
//ショットの移動計算
#define CSOUT 20 //どのくらい画面から外れたら消すか
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT ||
cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
cshot[i].flag=0;
}
}
}
//自機ショットに関する関数
void cshot_main(){
calc_cshot();//ショットの軌道計算
enter_shot();//ショットの登録
}
ゲームパッドでも同じ状況です、
どのような原因が考えられるでしょうか。
また、館でまとめてダウンロードできるプロジェクトの17章では正常にショットが撃てます。
1,093ポイント を手に入れた。
|
|
|
|
Name: at ..かけだし(2,039ポイント)
Date: 2008/08/10(日) 10:31
No:20033
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
コードが長くて読む気がしません。もう少し具体的に質問したほうがいいと思います。
あと、
else
ch.shot_cnt=0;
}
のような省略は誤作動の元ですので、初心者のうちは面倒でも
else { ch.shot_cnt=0; }
のように細部まで書く習慣をつけたほうがいいです。
2倍のポイントを手に入れた! 208ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(16,241ポイント)
Date: 2008/08/10(日) 11:26
No:20035
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
パッと見、間違いはなさそうに見えますが、左を押した時にショットが登録されているみたいなので、プロジェクト内検索を使い『configpad.left』『ch1_shot_pattern();』『ch0_shot_pattern();』を検索して、『configpad.left』を押した時にショットパターンを登録していないか確認するしかないのではないでしょうか。
それと、そのプログラムは自分で弄られた部分があるのでしょうか、龍神録の館のプログラム、私は35章での不具合が出ていないので35章をそのまま使った時にもエラーは出るのか、そういった情報もあればこめかみさんの記述ミスか、パソコン自体に問題があるのか分かると思います。
222ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(16,475ポイント)
Date: 2008/08/10(日) 11:55
No:20036
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
すみません、館の方ではうまく動作するんですね^^;
なのでもう一度詳しく見てみたのですが、やっぱり大丈夫そうな感じです・・・orz
first_ini()の初期化に問題ないか、PAD_MAXはちゃんと登録されているかなど確認するのも良いかもしれません。
要約すると
・『configpad.left』によって『ch○_shot_pattern()』が呼び出されていないか。(低速パターンのショットがでるなら『ch1』通常ショットなら『ch0』と変わってくると思います。)
・単純にキーコンフィグのどこかが間違っている。
・シフトを押して左を押すと低速時ショット、シフトを押さず左を押すと通常ショットなら、ほぼ80%以上キーコンフィグに問題があると思います
くらいしか予想できません
234ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(8,682ポイント)
Date: 2008/08/10(日) 20:43
No:20039
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
>atさん
アドバイスありがとうございます。
書き写しながらそのように書いていこうと思います。
>arrayさん
ありがとうございます。
今ソースを隅から隅まで比較しているところです、それでもダメだったらまた質問にきます。
定義は最近痛い目を見たので気をつけているつもりなんですが・・・「つもり」じゃダメなんでしょうね。
>シフトを押して左を押すと低速時ショット、シフトを押さず左を押すと通常ショットなら、ほぼ80%以上キーコンフィグに問題があると思います。
そのとおりなんですが、それに加えて左に移動するんですよ。どうなってるんでしょう・・・
ちょっと今疲れてるんで。目がさめたらまた挑戦します。
わからなくても成功しても必ず報告に来ますのでよろしくお願いします。
350ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(8,767ポイント)
Date: 2008/08/10(日) 20:48
No:20041
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
間違って雑談にしてしまいました。
一応解決するまで質問にしておきます。
失礼します。
41ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(687,089ポイント)
Date: 2008/08/11(月) 00:07
No:20048
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
//ショット登録部
void enter_shot(){
//ショットボタンが押されていたら
if(CheckStatePad(configpad.shot>0)){
ここじゃないですか?
お解かりだと思いますが、
if(CheckStatePad(configpad.shot)>0){
こうですね。
また、今回の場合は、全てコピペしてもらえて良かったと思います。
こちらにコンパイルプロジェクトもありますし、他のファイルを含め、
バグが生じている時、自分が予期していないコードが原因となっている場合もあるので、
ファイルの内容をそのまま張ってもらった方がいいと思います。
そして、cshot.cppの内容を変更するとバグが生じるため、
ここにバグの原因があるという推測も良かったと思います。
もしも、今後同じようなバグが生じてお悩みになることがあれば、
今回と同じように質問してもらって大丈夫だと思います。
ただ、ブレイクポイントを使えばかなりバグが限定出来るので、
ご自分でもバグが無いかブレイクポイントで探していって下さい。
ブレイクポイントについて使い方がわからなければ、また別途ご質問下さい。
バグの探し方ですが、今回はショットキーじゃなくても、ショットが登録されてしまっていました。
なので、とりあえず
//ショット登録部
void enter_shot(){
ショット登録部から探していこうと思いますね。
CheckStatePad(configpad.shot)
これは、キー番号を渡し、そのキー番号が押されているかチェックする関数です。
今回そのキー番号にショットキー番号を渡しています。
ショットキーが押されていないのにここが真になるのなら、
ここがおかしいのではないかと、ここにブレイクポイントを置いてみます。
まぁ今回の場合はブレイクポイントを置く前に原因がわかりますね。
224ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(8,856ポイント)
Date: 2008/08/11(月) 07:18
No:20050
| 解決!
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
ありがとうございました管理人さん!
無事解決しました。
そのあたりは何度も確認してたのに見事に見過ごしてました、なさけねー。
括弧を打ち足りないというミスばかりしていたので、括弧の位置を疑っていなかったようです。
89ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..中級者(9,859ポイント)
Date: 2008/08/11(月) 08:27
No:20051
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
報告です。
●11章
エクセルデータとそのスクリーンショットの
アイテムの種類の注釈
"item_n[0]"
、は
"item_n"
じゃないでしょうか、
以降のデータも全部そうなってますし。
●12章
"--enemy.cppに以下を追加--"のところの
//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){//その敵のフラグがオンになってたら
if(0<=ENEMY_PATTERN_MAX && enemy[i].pattern<ENEMY_PATTERN_MAX){
enemy_pattern[enemy[i].pattern](i);
これはダウンロードしたプロジェクトの内容と違ったのですが、プロジェクトの内容のほうが正しいようです。
//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){//その敵のフラグがオンになってたら
if(0<=enemy[i].pattern && enemy[i].pattern<ENEMY_PATTERN_MAX){
enemy_pattern[enemy[i].pattern](i);
"if(0<=ENEMY_PATTERN_MAX && enemy[i].pattern<ENEMY_PATTERN_MAX)"
が↓
"if(0<=enemy[i].pattern && enemy[i].pattern<ENEMY_PATTERN_MAX)"
こうです。
●13章
"ここでその弾幕データはどうなっているか、構造体の定義と変数の宣言を見てみましょう。"
の、
//ショットに関する構造体
typedef struct{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号、色
int flag,knd,cnt,num;
"色"のコメントが余分なようです。
●16章
画像タイトル"ミシャクジさま弾幕を作ってみよう"ですが、
日本神話的にはどっちでもいいようですが、
東方的には"ミシャ「グ」ジさま"
、のようです。
●18章
out.cppの中の
se_flag[1]=1;//敵のピチュリ音
ピチュ"る"の連用形ピチュ"り"、
活用語尾はひらがなです。
●龍神録プログラミングの館、各章へのリンクへのタイトル画像。
15章のみょん弾幕の章から文字が右によってたり、真ん中にあったりで不定ですが、
意図があるのでしょうか。
●"規約と使い方"の中の
7 許容行為
・宿題の質問は大いに結構です。是非ドンドン質問してください。
しかし宿題の完全丸投げをする
文章が途中で止まっていました。
●同じく"規約と使い方"のページの下のほう、
"このサイトの主旨"の中の一番下、
などなど、ドシドシご質問ください。
などなど。
↑二回言ってます。
以上です。
1,003ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..中級者(9,906ポイント)
Date: 2008/08/11(月) 08:35
No:20052
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
あと一個、
●17章
---- load.cpp の load()関数に以下を追加 ----
のところで、
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
の追加を指摘するのを忘れているようです。
47ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(687,618ポイント)
Date: 2008/08/11(月) 13:20
No:20059
|
|
Title: Re:自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
|
|
ありがとうございます。修正しました。
>"item_n[0]"
これは
item1がitem_n[0]にはいり、
item2がitem_n[1]にはいり、
item3がitem_n[2]にはいり・・・ということを示したかったのですが、
その説明が中途半端になってしまったようです;
どこかできちんと説明を追加しようと思います。
>●龍神録プログラミングの館、各章へのリンクへのタイトル画像。
弾幕作製の章は右寄せ、通常の章は中央寄せなのですが、わかりにくかったですね・・。
もう少しわかりやすい見せ方を工夫します;
140ポイント を手に入れた。
|
|
|
|
Name: 米米会 ..ぴよぴよ(63ポイント)
Date: 2008/08/08(金) 13:24
No:19990
|
|
Title: テキストファイル読込→表示
|
|
こんにちは、米米会です。
質問です。
テキストファイルを読み込み、画面に表示をさせたいのですが上手くいかなくて困っています。
ファイルを開く時はfopen_s、読み込む時はfscanf_s、表示にはTextを使おうとしています、簡単なソースと説明書きをしてくださると嬉しいです。
また、他に良い方法があればご教授ください。
開発にはMicrosoft Visual Studio 2008、Win32APIを使用しています。
63ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..かけだし(1,798ポイント)
Date: 2008/08/08(金) 19:14
No:19998
|
|
Title: Re:テキストファイル読込→表示
|
|
まずコンソールで
@fopenでテキストファイルを開く
Aファイルサイズを調べる(_filelength(_fileno(fp))みたいな感じで)
Bバッファを用意する(malloc等)
Cfreadで読み込む
D表示する(printf)
Eバッファを開放する(free)
Fファイルを閉じる(fclose)
でやってみてはどうでしょうか?
68ポイント を手に入れた。
|
|
|
|
|
Name: 米米会 ..ぴよぴよ(136ポイント)
Date: 2008/08/09(土) 22:00
No:20026
|
|
Title: Re:テキストファイル読込→表示
|
|
返信遅れまして申し訳ございません。
以前コンソールで_s無しでのプログラムは作っていたのですが警告文で_s付のほうが好ましい、の様な文がでたので挑戦している最中です。
後、困っている内容を具体的に書いてませんでした。
テキストファイルからchar型で読み込んだのはいいんですがTextOut関数での表示の仕方がイマイチ分かりません。
ご教授いただけたら嬉しいです。
73ポイント を手に入れた。
|
|
|
|
|
Name: at ..かけだし(1,831ポイント)
Date: 2008/08/10(日) 10:26
No:20032
|
|
Title: Re:テキストファイル読込→表示
|
|
TextOutはウインドウに文字を表示する機能です。
使い方は猫でも分かるらしいですよ。調べてみてはいかがですか?
50ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..かけだし(2,051ポイント)
Date: 2008/08/10(日) 21:22
No:20042
|
|
Title: Re:テキストファイル読込→表示
|
|
確かTextOutは改行を無視するので
ファイルを表示するならDrawText等の方が良いと思いますよ。
猫でもSDKの第五章辺りです。
21ポイント を手に入れた。
|
|
|
|
|
Name: 米米会 ..ぴよぴよ(129ポイント)
Date: 2008/08/11(月) 11:43
No:20053
| 解決!
|
Title: Re:テキストファイル読込→表示
|
|
DrawTextを使ってみたら理想に近い表示ができました。
皆さんありがとうございます。
7ポイント を落としてしまった。
|
|
|
|
Name: まさ ..ぴよぴよ(408ポイント)
Date: 2008/08/10(日) 01:27
No:20029
|
|
Title: Visual C++ 2008 Express Edition のことで質問です。
|
|
数日前からC言語を勉強し始めて、「Visual C++ 2008 Express Edition」をDLしました。
とりあえず、プログラムを入力してコンパイルすることはできるようになりました。
ちゃんと使えてるのかは分かりませんが・・・
上記のソフトを使っていて気になったのが
「ソースファイル」、「ヘッダーファイル」、「リソースファイル」というものです。
現在は、「ソースファイル」にだけファイルを作ってプログラムを打ち込んでおり、
他の2つには触れていません。
これらはどういうものか教えてもらえませんか?
155ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..初心者(8,332ポイント)
Date: 2008/08/10(日) 01:44
No:20030
|
|
Title: Re:Visual C++ 2008 Express Edition のことで質問です。
|
|
私も初心者なので一般的な回答が出来るほど理解はしていないのですが。
私の経験としては。
「ソースファイル」
には、自分で組んだプログラムファイルを入れていきます。
「ヘッダーファイル」
には、自分で作った関数の宣言や構造体、定義など、
増えてきたソースファイルを管理しやすくするためのヘッダファイルを追加するもののようです。
「リソースファイル」
にはライブラリファイルなどのプログラムの先人たちの資産を入れます。
違ってたらごめんなさい。
もっと詳しい人の回答を待ったほうがいいとは思いますが、
そのあたりは経験を積んでいくほうが理解は早いと思います。
262ポイント を手に入れた。
|
|
|
|
|
Name: まさ ..ぴよぴよ(438ポイント)
Date: 2008/08/10(日) 02:02
No:20031
|
|
Title: 回答ありがとうございます。
|
|
>こめかみさん
早速、回答ありがとうござます。
ニュアンスはつかめました!
30ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..中級者(14,417ポイント)
Date: 2008/08/10(日) 16:28
No:20037
|
|
Title: Re:回答ありがとうございます。
|
|
VisualStudioでは拡張子が .c や .cpp のファイルはソースファイルに
.h のファイルはヘッダーファイルのところに入るようにフィルタが設定してあります
ソースファイルやヘッダーファイルのところで右クリック、プロパティでフィルタの確認や変更が出来ます
リソースファイルには普通画像や音声ファイルをいれます
125ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(8,726ポイント)
Date: 2008/08/10(日) 20:46
No:20040
|
|
Title: Re:回答ありがとうございます。
|
|
そうだったんですか。
間違えたこと教えちゃったかな。
まささん、またいらしてたらごめんなさい。
44ポイント を手に入れた。
|
|
|
|
|
Name: まさ ..ぴよぴよ(544ポイント)
Date: 2008/08/11(月) 00:30
No:20049
| 解決!
|
Title: 回答ありがとうございます。
|
|
>toyoさん
分かりやすい回答ありがとうございます。
ヘッダーやリソース自体がまだよく分からないので、自分で調べてみようと思います。
また分からないことがあれば、質問させていただきます。
>こめかみさん
自分の勉強不足なだけのことなので、お気になさらず。
これからもよろしくお願いします。
106ポイント を手に入れた。
|
|
|
|
Name: recoba ..ぴよぴよ(173ポイント)
Date: 2008/08/09(土) 20:09
No:20023
|
|
Title: 画面上のカーソルを自動でクリック
|
|
プログラミングについて勉強しているのですが
画面上のカーソルを自動でクリックすることは可能でしょうか?
今、加速度センサを用いて計測しています。{受信側はUSBタイプの
加速度センサ(ZSTAR)}
USBの中に、計測や録画をするソフトが入っています。
しかし、連続して録画できる時間が20分と決まっており、
再度録画するときは20分後に、もう1度クリックしないと録画が始
らない仕組みになっております。(excelでデータが残る)
自動でクリックしてくれるようなプログラムはありますでしょうか?
よろしくお願いします。
173ポイント を手に入れた。
|
|
|
|
Name: recoba ..ぴよぴよ(244ポイント)
Date: 2008/08/09(土) 22:21
No:20027
|
|
Title: Re:画面上のカーソルを自動でクリック
|
|
すいませんマクロのサイトをみさせていただきましたが、
どちらのフリーソフトでしょうか?
初心者質問で申し訳ありません
71ポイント を手に入れた。
|
|
|
|
|
Name: recoba ..ぴよぴよ(273ポイント)
Date: 2008/08/10(日) 23:40
No:20047
| 解決!
|
Title: Re:画面上のカーソルを自動でクリック
|
|
お2人方どうもありがとうございました。
大変参考になりました。
29ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(71ポイント)
Date: 2008/08/09(土) 19:37
No:20019
|
|
Title: グラフィックについて
|
|
最近プログラムをしてみようと思って決断したんですが、
キャラクターなどのグラフィックは自分で作るものなんですか?
そしてみなさんはどうなさってるんですか?
言葉足らずかもしれませんがお願いします。
71ポイント を手に入れた。
|
|
|
|
Name: 翡翠 ..入門者(3,658ポイント)
Date: 2008/08/09(土) 20:01
No:20021
|
|
Title: Re:グラフィックについて
|
|
私は自分で描こうと思っています
使用ソフトはGIMPとかEDGEとかですね
自分の絵に自信がなければ、フリーの素材を使うとか、絵のうまい人に頼むとか方法があります
ただ、私は著作権とか面倒な事が嫌いなので、自分で描こうと思ったのですが
参考になれば幸いです
132ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(15,991ポイント)
Date: 2008/08/09(土) 20:02
No:20022
|
|
Title: Re:グラフィックについて
|
|
人それぞれだと思います。ご存じか知りませんが、東方というゲームではプログラム、グラフィック、BGMすべて1人で作業しているらしいです。
それと、過去ログに似たような質問があったので参考にしてください。
ゲームを製作する際の画像の用意は
ちなみに私は、自分で描いたり、龍神録の館の画像をそのまま使用してたり^^ ・・・龍神録の画像を使用してると著作権なんかの関係で配布はできくなると思いますが、プログラムを楽しむ分には十分だと思います。
147ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(2ポイント)
Date: 2008/08/10(日) 00:56
No:20028
| 解決!
|
Title: Re:グラフィックについて
|
|
お答えいただきありがとうございました。
参考にさせていただきます。
また質問させていただくかもしれませんので、そのときはお願いします。
2ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(686,865ポイント)
Date: 2008/08/10(日) 23:11
No:20046
|
|
Title: Re:グラフィックについて
|
|
もしドット絵とかのフリー素材が必要な時は
「●● 素材」で検索すると大抵出てきますよ。
どんなゲームかわかりませんが、
●●にはマップチップだったり、キャラチップだったり、
好きなキーワードを入れて検索すると良いでしょう。
まぁ大抵RPGツクール素材が出てきますが・・。
2倍のポイントを手に入れた! 258ポイント を手に入れた。
|
|
|
|
Name: ナオユキ ..ぴよぴよ(156ポイント)
Date: 2008/08/09(土) 14:11
No:20011
|
|
Title: C原語の課題の質問です。
|
|
<結果例>
指定文字 ?a
文字列 ?abcabcabc
変換後文字列 \bc\bc\bc
変換文字数 3
のようになるはずなんですが、実行しても結果が得られません。
while文で友達が試したところ、上手くいったようです。
C原語は初心者なので、解説をいただけたらうれしいです。
よろしくおねがいします。
156ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(15,844ポイント)
Date: 2008/08/09(土) 15:01
No:20015
|
|
Title: Re:C原語の課題の質問です。
|
|
それと、私も1言。
>while文で友達が試したところ、上手くいったようです。
forでもできなくないですけど、文字列の長さが不確定なので、forよりwhileを使った方が良いという事だと思います。forはループする回数が決まっている時に使う事が多いいみたいです。それに対しwhileはループする回数が不確定の時に使用するみたいです。
109ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(123,489ポイント)
Date: 2008/08/09(土) 18:42
No:20017
|
|
Title: Re:C原語の課題の質問です。
|
|
> forよりwhileを使った方が良い
どちらがよい、ということはないです。
例えば、以下の2つの書き方は、「何かの文」に continue; が
なければ全く等価です。
1)for文の場合
for (A; B; C) {
/* 何かの文 */
}
2)while文の場合
A;
while (B) {
/* 何かの文 */
C;
}
71ポイント を手に入れた。
|
|
|
|
|
Name: ナオユキ ..ぴよぴよ(239ポイント)
Date: 2008/08/10(日) 21:24
No:20043
| 解決!
|
Title: Re:C言語の課題の質問です。
|
|
訂正しました。すいません。
みなさんの数々の解答を参考にもう一度やってみます。
ご協力ありがとうございました。
PFは#defineで定義したprintfです。
過去問題にでていたので、ちょっとやってみたくなりしてみました。
83ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..熟練のプログラマー(58,729ポイント)
Date: 2008/08/10(日) 22:40
No:20044
|
|
Title: Re:C言語の課題の質問です。
|
|
>PFは#defineで定義したprintfです。
ちょっとやってみるぐらいならいいと思いますが。
(使い方の練習にはなるので)
printf()などの関数名を#defineするべきではないと思います。
というより#defineは最小限にすべきであるとおもいます。
理由は#defineが単純な文字列置換であるので、無意味に使いすぎると
意図しない部分で置換される可能性が高くなるからです。
79ポイント を手に入れた。
|
|
|
|
Name: 風宮翔 ..かけだし(1,369ポイント)
Date: 2008/08/09(土) 18:49
No:20018
|
|
Title: 知恵を貸して下さい……
|
|
現在、趣味兼卒研の代案でちょっとしたテキストエディタを作っています。
少しばかり実装に困っていて、作業が滞っています。
どうか、皆さんの知恵を貸して下さい……。
悩み1:
『TeraPad』や『Notepad++』といったエディタで【元に戻す】の回数が指定できるじゃないですか。
あれってどんな風に組めば実装できるんでしょうか……。
悩み2:
一行の文字数を指定して、それ以上だと折り返すようにしたいのです。
これもどうすれば実装できますか……?
ソースは諸事情によりマイPCがネットに繋がらなくなってしまい、貼れません(汗
まぁ、皆目見当もつかないので、どっちにしろ問題の部分を記述していないのですが……(滝汗
使用する関数やヘッダファイル等、ヒントを頂けると嬉しいです……。
217ポイント を手に入れた。
|
|
|
|
Name: at ..かけだし(2,263ポイント)
Date: 2008/08/10(日) 10:35
No:20034
|
|
Title: Re:知恵を貸して下さい……
|
|
>『TeraPad』や『Notepad++』といったエディタで【元に戻す】の回数が指定できるじゃないですか。
>あれってどんな風に組めば実装できるんでしょうか……。
それらのソフトは自前で実装しているのかもしれませんが、通常はエディットボックスの
コントロールにSendMessage()で一つ戻させる、というやり方をとるのだと思います。
>一行の文字数を指定して、それ以上だと折り返すようにしたいのです。
>これもどうすれば実装できますか……?
ですから、普通は顧問コントロールが勝手にやってくれることで、そのコモンコントロールから
実装したいならハナシは別ですが、普通はカスタムコントロールもしくはサブクラス化で解決しますよ。
224ポイント を手に入れた。
|
|
|
|
Name: kirbest ..かけだし(1,301ポイント)
Date: 2008/08/09(土) 13:18
No:20010
|
|
Title: アプリケーションの作り方
|
|
今までc++ & DXライブラリでゲームばかり作っていましたが、
一応ゲームもアプリだとは思うのですが、メモ帳や電卓やブラウザ等のようなアプリをc++で作りたいと思い
調べてみましたが、どうも入門用の解説サイトが見つかりません。
どこかオススメの場所はないでしょうか?
83ポイント を手に入れた。
|
|
|
Name: BAGSAC.COM ..ぴよぴよ(65ポイント)
Date: 2008/08/09(土) 04:02
No:20002
|
|
Title: NULLポインタについて
|
|
pが有効の場合 if(p != NULL)またはif(p)
pが無効の場合 if(p == NULL)またはif(!p)と表現されているのですが、はじめのif(p != NULL),if(p == NULL)は理解できるのですが、書き直したif(p),if(!p)が理解できません.
自分の考えではif(p != NULL)の書き直した奴がif(!p)になると思っているんですが違うみたいなので、なぜそうなるのか教えてください。
65ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..かけだし(2,030ポイント)
Date: 2008/08/09(土) 04:31
No:20003
|
|
Title: Re:NULLポインタについて
|
|
if文は0は偽、0以外を真として評価します。
つまり
if(p)は
if(p != 0)と同じで
if(p != NULL)とも同じです。
同様に
if(!p)は
if(!p != 0)と同じで
if(p == 0)とも言い換えることができ、更に
if(p == NULL)とも言えます。
2倍のポイントを手に入れた! 232ポイント を手に入れた。
|
|
|
|
|
Name: BAGSAC.COM ..ぴよぴよ(147ポイント)
Date: 2008/08/09(土) 04:52
No:20004
|
|
Title: Re:NULLポインタについて
|
|
回答ありがとうございました.
改めて回答を見てもう1度考えたのですが、なぜif(p)がif(p != 0)になるののかが理解できません.
もう少し具体的に説明してもらってもよろしいでしょうか?お手数かけてすみませんmm
82ポイント を手に入れた。
|
|
|
|
|
Name: 風宮翔 ..かけだし(1,152ポイント)
Date: 2008/08/09(土) 06:41
No:20005
|
|
Title: Re:NULLポインタについて
|
|
要するに、NULLじゃないって事は何らかの値が入ってるわけで。
『pが0(NULL)じゃない = 0(NULL)以外の値』って事は分かりますか?
if文は0(NULL)以外の値を『真』としています。否定すればこれでも『真』になりますが。
今回の場合、pには0以外の値が入っていると仮定します。
pが0じゃないって事は、『p != 0』って事ですよね。
つまり、そういう事です。
……とは言ったものの、間違っている可能性がありそうなので、どなたか指摘あったらお願いしますm(__)m
2倍のポイントを手に入れた! 342ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(103,997ポイント)
Date: 2008/08/09(土) 07:54
No:20006
|
|
Title: Re:NULLポインタについて
|
|
ところで、NULL=0というのは100%保証されているのでしょうか?
もし、環境に依存するのであれば、ちょっと話が変わってきそうかな…と思ったもので(^_^;)
73ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(54,158ポイント)
Date: 2008/08/09(土) 09:27
No:20007
|
|
Title: Re:NULLポインタについて
|
|
if文は、式を0と比較して等しくない場合に真となります。
つまり、if(p)はp!=0が成立する場合に真となりますし、if(p!=NULL)は(p!=NULL)!=0が成立する場合に真となります。
> ところで、NULL=0というのは100%保証されているのでしょうか?
それは内部的な表現の話ですね。
整数定数0、または整数定数0をvoid*にキャストしたものが空ポインタ定数であり、空ポインタ定数をポインタ型に変換したものが空ポインタになります。
空ポインタは、どんなオブジェクトまたは関数へのポインタとも等しくないことが保証されていますから、pが空ポインタでない場合、p!=0は必ず真になります。
また、空ポインタどうしを比較して等しくなることも規格上保証されていますので、pが空ポインタの場合、p!=0は必ず偽になります。
199ポイント を手に入れた。
|
|
|
|
|
Name: BAGSAC.COM ..ぴよぴよ(188ポイント)
Date: 2008/08/09(土) 10:03
No:20009
| 解決!
|
Title: Re:NULLポインタについて
|
|
みなさん分かりやすい回答ありがとうございました.
かなり深いところまで理解できました.感謝します^^
41ポイント を手に入れた。
|
|
|
|
Name: array ..中級者(12,309ポイント)
Date: 2008/08/07(木) 01:52
No:19885
|
|
Title: 深弾幕結界を表現しました
|
|
前立てたスレッドが過去ログへ流れてしまったので、新しく立てさせてもらいました。
【ニコニコ動画】龍神録で東方 深弾幕結界を表現してみた
頑張って似せようとしたのですが、これが限界でした。本物は見れば見るほど分らなくなる・・・(笑)なので、頑張ってみたのが挫折して4パターンだけになってしまいました。
それで、ソースも公開する予定だったのですが、変更点が多々あり掲示板に貼り付けるには無理がある量だと思ったのでとりあえず諦めました。
>きっとこの無数に出てくる弾1つ、1度でも角度違ったら避けれなくなる場合がありますし。
本当にそうでした。回りを回る物体の速度や、弾を発射する速度、弾を止めるタイミング・・・これを調整するのに3、4日かけたのですがうまくいかず・・・妥協しました。
・・・にしても中途半端な結果に終わってしまってすみません。
続きを頑張ってくれる人がいれば嬉しいのですが
(規約抜粋)
>また、同梱されている素材の中にはここでの使用に限って許可を頂いている素材もある為、
>ここのサイトの内容と酷似したソースコード・内容で配布、販売される方は一度ご相談下さい。
との事なので一応動画にして公開しても良かったのか確認しておきます。事後承諾を取る形で申し訳ないです。
問題があるようなら消します。
181ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,461ポイント)
Date: 2008/08/07(木) 02:06
No:19886
|
|
Title: Re:深弾幕結界を表現しました
|
|
ちょっっっ!!!!
すごい!!!!
テンションめっちゃ上がりましたwww
問題?!
全然無いです!
あるとすれば、せっかくお作りになった動画が製作主「Dixq」になってるので、
私が作ったように見えるという点位(汗
説明コメントでarrayさんがお作りになったということをもう少しアピールされてもよいのでは^^;
いや〜〜〜しかし感激しました・・・。
永久マイリス行きですw
こんなの見せられたら管理人としては、挑戦せざるを得・・いや、無理ですw
これだけ角度計算するの大変だったでしょうね〜^^;
これやったことある人にしかわからないんですよね、この苦労・・・。
いや〜わかりますよ、うん!
お疲れ様でした^^
こちらが逆にいい刺激になりましたw
350ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(12,587ポイント)
Date: 2008/08/07(木) 02:26
No:19887
|
|
Title: Re:深弾幕結界を表現しました
|
|
それだけ喜んでもらえると私も嬉しくなりますねw
ニコニコの方の説明文をタグじゃ改行できなかったから調べてたらプレミアじゃないという結果に・・・(泣 (後でコメント縮小しておきます)
そんな事を調べてるうちに返信入ってて嬉しいです^^
製作主については、龍神録の紹介をしたくて書いたのですが、なんか違う意味でも勘違いされそうですよね。以後、また似たような事をする機会があれば気を付けます。
> これだけ角度計算するの大変だったでしょうね〜^^;
> これやったことある人にしかわからないんですよね、この苦労・・・。
> いや〜わかりますよ、うん!
本当に苦労しますね。ボス弾幕を真似るというのは初めてで本当に苦労しました。動画をビデオテープなら穴があくほど再生したりと・・・思い出したくもないです。
その分、龍神録のプレイ動画を見ると管理人さんの技力&努力はやっぱり凄かったと思えます。
278ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,288ポイント)
Date: 2008/08/07(木) 02:36
No:19888
|
|
Title: Re:深弾幕結界を表現しました
|
|
でも、すごくいい勉強になったのでは^^
あれだけのものが作れるなら随分慣れてらっしゃると思いますし、
オリジナル弾幕の製作もこれで楽勝ですね♪
当然ですが、自分で思いついたのを実装するより、既存の弾幕を瓜二つに真似るほうが究極に難しいですし。
よく「パクリなら誰でも出来る」とかいわれますが、
弾幕を真似るのだけは違いますよねw
p.s.
これはどうでもいい事かもしれませんが、
投稿完了時間を、9,19,29,39,49,59分のいつかになるようにし、投稿したら即効で「1」と入力すると
最初の閲覧者増えますよっb
(10分ごとに更新され、最後のものほど上に来る、そしてコメントの無い動画は反映されない事に基づいています)
173ポイント を落としてしまった。
|
|
|
|
|
Name: array ..中級者(12,920ポイント)
Date: 2008/08/07(木) 03:10
No:19889
|
|
Title: Re:深弾幕結界を表現しました
|
|
確かに勉強になりました。もうある程度の弾幕は作れそうです。とは言いませんけど。今回ボスの構造体や中身を色々調べていたら、弾と指定の座標の角度を求める関数(?)を発見したり、他にもこの関数を使えばこんな事もできるなぁなど、思いっきり管理人さんのプログラムに頼ってますが思いました^^
とりあえずボス弾幕など複雑な動きをするのを真似るのは非常に難しいという事が分かったのでこれからはオリジナル・・じゃなくてそれっぽい動作をさせて遊びたいと思います。
動画はここの人達がどんな動きをしてるのか気軽に見てもらえるために作ったので本当はYoutubeあたりにしたほうが良かったんでしょうけどニコニコしか使わないので・・・。
ちなみに今回が動画作成及び投稿が初めてで、エンコードができなくて半日調べるはめになりました(ToT)・・・それでもあの画質(x_x)
333ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(12,599ポイント)
Date: 2008/08/07(木) 03:41
No:19891
|
|
Title: Re:深弾幕結界を表現しました
|
|
AviUtlでWMMで作ったaviを読み込ませようとすると対応するコーデックやプラグインが登録されていないとかで使えなかったんですよね。試しに違うので試したらできたんですけど^^;
それで仕方なくmencoderというのでエンコードしてみましたが、2分程度なのにあの画質・・・もっと使いようによっては綺麗になるのかもしれませんが。
それと、現在龍神録の館でボス弾幕までたどり着いてちょっと違うのもやってみたいという人がいたら、続きやりませんか?(笑)プログラム(弾幕作成)の勉強になります^^
一応35章のプロジェクトで動いているので、どなたか名乗りあげてもらえれば、汚いソースですが変更点を纏めたHTMLを作成しようと思うのですが、どうでしょうか。
321ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,501ポイント)
Date: 2008/08/07(木) 04:05
No:19893
|
|
Title: Re:深弾幕結界を表現しました
|
|
きっと円運動している弾と画面中心とのなす角から1〜2度位ずらして発射して、発射してから停止するまでのカウンタを1ずつ増やす・・
とか作っていくんだろうなとは思うのですが、果たしてあんな綺麗な曲線になるんだろうか・・・。
是非番外章とか作ってarrayさんの弾幕を紹介させて下さい〜^^
81ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(12,785ポイント)
Date: 2008/08/07(木) 12:43
No:19899
|
|
Title: Re:深弾幕結界を表現しました
|
|
2時間でこんなに作ってしまうとは管理人さん恐るべし
私はアホだから待機時間をどうすれば良いかだけで2日くらい考えてたんですけどね(..;)
にしても凄い・・・・でも同じ様な事を2度考えても2度手間になるだけだと思うので、どうなるか分からないけれど纏めてみます。
それと管理人さん以外にも弾幕に興味ある方はいらっしゃらないかな、できれば私と同じくらいの初心者にも弾幕づくりを楽しんでもらいたいのですが(^o^)
186ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..入門者(3,709ポイント)
Date: 2008/08/07(木) 13:08
No:19901
|
|
Title: Re:深弾幕結界を表現しました
|
|
>arrayさん
これはすごいわ…。
arrayさんの努力と、
龍神録プログラミングの館の効能が実証されたと言っていいでしょう。
>それと管理人さん以外にも弾幕に興味ある方はいらっしゃらないかな、
この流れには乗るべきな気がしてきた…!
来週からの休みを有効活用するしかねぇ。
2倍のポイントを手に入れた! 270ポイント を手に入れた。
|
|
|
|
|
Name: 柏 ..初心者(6,642ポイント)
Date: 2008/08/07(木) 13:36
No:19908
|
|
Title: Re:深弾幕結界を表現しました
|
|
横から失礼します。
動画の方拝見させてもらいましたが……これはすごい。
再現度が高すぎて思わず笑ってしまいました。「やべえ、やべえよこれ!」的な意味で。
思えば管理人さんの反魂蝶を見た時もこんな感覚でした。
初めて作ったボス弾幕が「深弾幕結界」でこれだけ再現出来れば、はっきり言って怖いもんなしではないでしょうか。色々思うところはありますが、ただただ「すごい」という言葉しかもう出て来ません。
しかしまぁ……管理人さんが龍神録の館を作られた事で、arrayさんというとんでもない化け物(表現を不快に感じられたらすいません)が産み出されましたね。わざわざライバルを増やすとは、管理人さんもしかしてドM。
また、今回の事でarrayさんの他にも龍神録の館を参考にゲームを作られている方でかなりレベルの高い弾幕を作っておられる方がこっそり居そうな気がしてならなくなりました。それこそすでに「深弾幕結果」を完成させている方がいるかも……?w
いずれにしても、いい刺激になりますね。もっと頑張らなければと思えてきます。
>>私はアホだから待機時間をどうすれば良いかだけで2日くらい考えてたんですけどね(..;)
2日? 甘いです。
僕なら1週間は余裕ですw
>>それと管理人さん以外にも弾幕に興味ある方はいらっしゃらないかな
興味はあります。練習としてちまちまと、東方の弾幕を真似て作っている段階です。
まぁさすがに弾幕結界のような難しい弾幕を真似るだけの技術とセンスはありませんので、比較的簡単なものを真似ているだけなんですけどね^^;
かなりの技術力と思考力をお持ちだと思いますので、これからもがんばってください!
陰ながら応援しています。
417ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,913ポイント)
Date: 2008/08/07(木) 13:55
No:19911
|
|
Title: Re:深弾幕結界を表現しました
|
|
>わざわざライバルを増やすとは、
その辺はちょっと躊躇しなかったわけじゃないんですよ実は^^;
でもせっかく作ったものをさらけ出すのは勿体無い・・とかいう小さなみみっちぃ気持ちより
少しでも多くの人に弾幕製作の楽しさ味わって欲しかったんですよね。
・・とかいって、あまり細かく解説すると解説がありえない長さになって
300章でも終わらくなりかねなかったので説明はある程度大雑把だから、
解る人なんて居ないだろうな・・みたいなこと考えてたんですが、
掲示板やメールを拝見するに、もうかなりの人が習得されているよう・・^^;
もしライバルが増えたらそのライバルに負けないように努力するのみです^^
(そして敗れる
47ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(13,185ポイント)
Date: 2008/08/07(木) 15:21
No:19913
|
|
Title: Re:深弾幕結界を表現しました
|
|
KEVさん柏さん有難うございます。努力が認められる(?)といのは嬉しいものですね^^
とりあえず、ソースを編集してるのですが、コメント書き足してたら余計に醜くなってしまいました。魅せ易いソースの書き方って難しいんですね^^; どうも魅せるセンスもないようなので、ソースを貼り付けて、理論的に考えた部分と検証を重ねて無理に合わせた部分なんかは、理論的に考えた部分だけ説明しておきますね。
それと私は学生という身分なので夏休みという暇な時間をレポートや課題そっちのけでやっていたので・・・KEVさんが休み返上で頑張りそうなので怖いです><
柏さんはレーザーの考えまで行ってるみたいなのですが、私は未だに未知の知識に手を着けられないでいます^^;多分理解できた時には相当な喜びが待っていると思うので頑張ってくださいー。ちなみに私が一番最初に感動したのはとても理論的に考えている、ピタゴラスの定理でした。それに続きsin、cosがこんな動きをするのか、など理論式(?)を理解すると喜ぶみたいです。(学校の授業はなんだったんだろ)
>わざわざライバルを増やすとは、
確かに、製品(この場合龍神録)のソースを公開すると、その製品の価値が無くなってしまいそうで怖い気持ちはありますよね。
しかし、管理人さんは解説は要点のみ、弾幕は東方の弾幕を似せるなどして龍神録みたいのは作れるけど同じのは作れないようにしてる感じがします。
なので龍神録の価値は下がらず、むしろ龍神録と東方の価値が相乗効果で上がる気がする良い構造になっていると思います。
というのも龍神録に出てくる弾幕を解説すると、本人なので本物の弾幕になっちゃいますが。
東方の弾幕は本人ではないので似た動作はするけど本物ではありません。なので東方を知ってる方は、普通に凄い!、知らない方でも弾幕づくりの勉強になる。
しかもちゃんと、色んなパターンを解説してくれてるので、弾を止めたり、発射位置を考えたり、奇怪な動きをさせたりと、本当に凄いサイトだと思います。
そしてそれが分ると、東方と龍神録の凄さを改めて思い知らされます。
400ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(683,673ポイント)
Date: 2008/08/07(木) 16:02
No:19914
|
|
Title: Re:深弾幕結界を表現しました
|
|
いやいや、東方と龍神録が並べてあるのは恐れ多いですよ^^;
arrayさんも今回の件で、なんだ誰にでも作れるじゃん!と感じられたと思いますし、あの程度なら誰にでも作れますよ^^
>同じのは作れないようにしてる感じがします
それは単に36章から作るのをさぼっているだけで、全部公開するつもりでした^^;
しかし逆にそれは良くないのかもしれませんね〜。
きっとサーっと読んで行っただけじゃわけわからないでしょうし、
変に意地悪とか言う意味ではなく、
所々に課題を用意し、単にコピーして言っただけじゃ完成しないようにした方が
いいかもしれません。
まぁ弾幕の作り方はある程度特徴的なのを紹介したら、別に全部さらけ出す必要もないですよね。
・・・いや、あのコードは龍神録のコードとは違うので作り直しながらコードを貼っていっているわけですが。
(なので、龍神録からコピペしたコードは全く無い)
毎回無駄な領域までチェックしている分館の方が効率は悪いですが、
まぁ最初はわかりやすさ重視でいいと思うので、
効率化は後々やっていこうと思います。
あ、後イメージコンバートエンジンの説明でもしておこうかなw
>KEVさんが休み返上で頑張りそうなので怖いです><
KEVさんそんな休みあるのかな〜・・w
340ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(13,488ポイント)
Date: 2008/08/07(木) 18:10
No:19920
|
|
Title: Re:深弾幕結界を表現しました
|
|
>所々に課題を用意し、単にコピーして言っただけじゃ完成しないようにした方が
>いいかもしれません。
たしかに、そうじゃないと最終章だけDLして終わっちゃいますよね。C言語を勉強しないでも画像を差し替えるだけでOKじゃ楽しくないです^^;
それと変更点を纏めたものを作成しました。とても見にくいものになっていますが興味のある方はご観覧ください。HTMLで作成した意味が全然なくなってしまいましたがw本当は円運動や、角度の取り方なんかも一緒に解説したかったんですが、出来次第、随時掲示板で報告させてもらいます。
・・・・HTMLは添付できなかったみたいです・・・普通か・・・拡張子をtxtにしたので、観覧の際は拡張子をhtmlに書き換えてください。当然の如く画像も一緒に添付できないみたいなので・・・・ほぼテキストファイルと大差ありません(笑)
○追記
txtファイルだけれどなぜか普通に開いただけでもタグが繁栄されてるみたいですので拡張子の変更は必要ないかもです
303ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(683,944ポイント)
Date: 2008/08/07(木) 18:37
No:19924
|
|
Title: Re:深弾幕結界を表現しました
|
|
ありがとうございます^^
少し気づいた点を
・#define BOSS_POS_X (FMX/2)
・#define BOSS_POS_Y (FMY/2)
・CRANGE 5.0
は既に定義されている。
弾幕計算関数内の
> //計算部
> for(i=0;i0){
はこれでいいのでしょうか?また、i0が宣言されていないようです。
こちらでは通らないのですがこのままコンパイル通りますか?
144ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..入門者(3,880ポイント)
Date: 2008/08/07(木) 18:51
No:19927
|
|
Title: Re:深弾幕結界を表現しました
|
|
夏休み 休みはあるが 暇じゃない (けぶ)
お盆休みは会社的には休暇ですが、
私は現在長期の研修中というか、けっこう特殊な勤務体系でして
多分研修先の施設で実験データでも取ってるんじゃなかろうかと思います。
弾幕の勉強が気分転換になればいいなーw
−−−−
まぁそんなことはいいとして、プログラムの話。
>> //計算部
>> for(i=0;i0){
>はこれでいいのでしょうか?また、i0が宣言されていないようです。
これ、テキストだと
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag>0){
ってちゃんとなってるんだけど、
拡張子を.htmlに直したらバグったよ。
どこかで意図しないタブが起動しちゃったかな。
171ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,001ポイント)
Date: 2008/08/07(木) 18:55
No:19929
|
|
Title: Re:深弾幕結界を表現しました
|
|
説明したい部分が多くてなにを言えばいいか分からないのですが、とりあえず検証してみた結果を画像化しておきます。これはパターン1を検証した時のものです。
まず左上の画像ですが、一番最初に発射される玉はボスへ向けて発射されてるみたいです。それと最後に発射される弾を比較するためのが左下の画像です。その差が30°。私のプログラムでは24°になっていますが、後々パターン2を考えてる時に、実際は30度だと思いました。
なのでパターン1は発射する毎に角度を加算していき、3周した時にはボスとの角度+30度に向けて発射すれば良いみたいです。
次に右上の画像ですが、これは弾の速度を1とした時(カウントも1ずつ増加なので)にどの位置でとまれば、それっぽくなるか検証してみたやつです。どうやら速度1の時、増幅率は3みたいなので速度につれて増加率も変化させれば良いみたいですが、これを式かするのに手こずりましたし、うまく書けませんでした。
あとは最初に発射した弾はアシストが3周したら動き出す、最後に発射したのはすぐに動き出すというのを式かすれば良いみたいです。
そして速度は止まるまでの速度が4だとしたら動き出してからの速度をそれ以下にしてあげないと、後から発射した弾に最初に発射した弾が追い付くみたいです。
とりあえず、これだけ説明しておきます。プログラムを見る気にはならないかもしれませんが、その気になった人がいれば見てもらえると嬉しいです^^なにか書き方で分らないところがあれば、不器用ながらに説明させてもらいます。
513ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,121ポイント)
Date: 2008/08/07(木) 19:03
No:19932
|
|
Title: Re:深弾幕結界を表現しました
|
|
ワードパッドで開けばそこの部分はキレイに表示できましたが、
今度は特殊文字でいっぱいに^^;
html形式で開くとところどころおかしくなりますね・・。
ソースコードそのままはったtxtファイルあげてもらえたらこちらでうまく修正しますよb
95ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,201ポイント)
Date: 2008/08/07(木) 19:13
No:19935
|
|
Title: Re:深弾幕結界を表現しました
|
|
BOSS_POS_Yは変更点なので追記する必要はないです。最初、ボスを指定位置に動かすのが良くわからなかったので初期定義変えちゃいました^^;あとから変更するとcountの初期化の方法をまた考えないといけなかったので、そのままにしちゃいました><
CRANGEは、define.hにあったので書き換えておきました。
後は、KEVさんの言うとおり、意図しない誤動作をしていたみたいなので、怪しい場所は修正しておきました。
という事で添付ファイル差し替えておきました。
とりあえず大丈夫だと思うので、もしダメtxtみたいだったらtxtをそのまま貼り付けるので、管理人さんお願いしますm(_ _)m
200ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,456ポイント)
Date: 2008/08/07(木) 19:20
No:19940
|
|
Title: Re:深弾幕結界を表現しました
|
|
あれ、
>は既に定義されている。
は
>は既に定義されているのではないでしょうか。
のミスタイプです^^;
(あまり変わりませんが・・)
>図
おぉ、上の画像を見てすぐにわかりました。
私も全く同じ方法で作りましたw
どうやったらその軌跡を描くのか、考えるのに時間かかりますよね^^;
ファイルの修正ありがとうございます。
ちと、夕飯の買出しに行くのでまた後確認させていただきますm(_ _)m
58ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,244ポイント)
Date: 2008/08/07(木) 19:57
No:19945
|
|
Title: Re:深弾幕結界を表現しました
|
|
>どうやったらその軌跡を描くのか、考えるのに時間かかりますよね^^;
私は、その差が30°になっている事に気付くのに大分かかりましたが、それが分ったらパターン2も同じ様に最初と最後の差をはかれば良いのかという事に気づきました。ちなみにパターン2画面上を分度器で測ったら30°と50°だったのですがどうやら30°から減算されているらしく、30°-80°すれば良いみたいです。
これを全部調べるのかと思うと途中で挫折してしまいましたw
43ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,340ポイント)
Date: 2008/08/07(木) 20:02
No:19946
|
|
Title: Re:深弾幕結界を表現しました
|
|
・・・それと、そのパターン1とパターン2で検証しまくったおかげか、パターン3は見た瞬間、直感で分かったのですぐできましたし、パターン4も別物でありながら、それっぽいのならこんな感じかなと両方で1日もかかりませんでした^^
96ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,939ポイント)
Date: 2008/08/07(木) 21:05
No:19952
|
|
Title: Re:深弾幕結界を表現しました
|
|
>こめかみさん
画質関係は結構調べましたよーw
Youtubeはそういうオプションを投稿者が付けれるようにしてほしいですよね。
いちいち閲覧者がみんなそれ付けて見てくれるわけ無いですし・・。
色々試して今はAviUtlを使うことで落ち着いています。
VP6 2passは下手すると3時間とかエンコードに時間かかるので、
エンコードが終わってから「あ、ココミスあった」なんかあった時には絶望です・・。
CPU使用率100%になるからエンコード中は対して他の作業出来ないですしね〜・・。
ただしVP6は動きに強いので気合入れたプレイ動画を投稿する時はこれで頑張ります。
PVとかは全部VP6で作りました。
ちょこっと高画質にするときにはだいたいMP4でやってます。
3分とかでエンコード出来るので、すごく手軽に変換出来て楽ですb。
212ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,473ポイント)
Date: 2008/08/07(木) 23:02
No:19960
|
|
Title: Re:深弾幕結界を表現しました
|
|
やっぱりニコニコは凄いですよね。私はVistaなのですが色々調べた挙句最終的にニコニコ講座の方法で完結しましたし。
しかし、コンピューターの最高品質が最高品質でないとは・・・・がっかりです。今後は、こめかみさんの教えてもらったURLや管理人さんのいうMP4の方がエンコードが早いというのも気になるので、また色々試してみようと思います。
133ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,780ポイント)
Date: 2008/08/07(木) 23:17
No:19961
|
|
Title: Re:深弾幕結界を表現しました
|
|
> すみません、読む立場になって改めてコードをポンと渡されて内容理解する困難さを痛感しましたw
>
いや、本当すみません。多分パターン分けして時間表現にcountを用いたりしてるから余計に混乱するのかもしれません。パターン4では洒落でHP減らしちゃってますしw(終わりと同時に死んでほしかったので、とりあえず適当な処理を入れました)。所々に無駄な処理が入ってるかもしれません><(一応整理したのですが)
周りを周ってる奴をアシストとしてますが、アシストの処理はパターン開始時のフラグ立てと下の方にあったりします。
それとcountを用いた理由はt2だとパターン2を考えるときにパターン1ので流れた時間も考えないといけないしパターン3になるとパターン1、2もの時間も考慮しないといけない・・・・。めんどくさいのでパターンを分岐させたタイミングでカウントを0にしています。
円運動に関しては、
円周=直径×PI
道のり(円周)=速さ×時間
を式に代入してます。なので決まってないのは速さです。時間と直径を決めることでスピードが変化します。
307ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(685,158ポイント)
Date: 2008/08/07(木) 23:33
No:19962
|
|
Title: Re:深弾幕結界を表現しました
|
|
>どうやら速度1の時、増幅率は3みたいなので速度につれて増加率も変化させれば良いみたいですが、これを式かするのに手こずりましたし、うまく書けませんでした。
ここなんですが、最初1発目の弾の速さが1なら、最後にうつ弾の速さは3ということでしょうか?
2倍のポイントを手に入れた! 168ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,865ポイント)
Date: 2008/08/07(木) 23:45
No:19964
|
|
Title: Re:深弾幕結界を表現しました
|
|
最初の弾はカウント0で止まったら最後の弾は発射から300カウントで止まってますので、とりあえず傾きが増幅率なのかなと思い増幅率は3じゃないかと思いましたが、違うかもしれません。
なので速さは一定です。
//==========
違ったので修正
最初の弾はカウント0で止まったら最後の弾は発射から900カウントで止まってます。それで発射してからの弾のカウントは300なので最後の弾は300離れた距離の位置にいる事が分かったのですが、役に立ちますか?
なので速度を2にしたら最後の弾は150カウントで止めないといけなくなるのかな・・・・ちょっとここは私も悩んで色々した割にあんまり整理できてません・・・orz
85ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(685,844ポイント)
Date: 2008/08/08(金) 00:17
No:19966
|
|
Title: Re:深弾幕結界を表現しました
|
|
最初中心に向けて発射し、最終的に変化する角度について、
20°〜30°位ということはわかるのですが、
ど〜〜〜〜も試行錯誤してみても、一体何度なのかはっきりわからない!
解らないなら実際に計ろう!ということでちょっと考察してみましたw
最終的に発射した位置は
(若干解りにくいですが、画像右端に測定した位置を赤の十字で示してあります)
座標=[87,78]
敵が存在している画面中央の位置は
座標=[192,215]
弾が最終的に到達する位置は
座標=[185,389]
でした。3点の座標がわかっているならこの成す角がわかるはず!
ということで、2本の直線が成す角度を計算するツール作って見ました。
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793238462643383279
typedef struct{
double x,y;
}p_t;
int main(){
p_t p[4];
char st[2][5]={{"始点"},{"終点"}};
double angle0,angle1;
for(int i=0;i<4;i++){
printf("%dつ目の%s座標を入力(x,y)\n",i/2+1,st[i%2]);
scanf(" %lf %lf",&p[i].x,&p[i].y);
}
angle0=atan2(p[1].y-p[0].y,p[1].x-p[0].x);
angle1=atan2(p[3].y-p[2].y,p[3].x-p[2].x);
printf("\n角度 = %.8f[rad]\n角度 = %.2f[°]\n"
,angle1-angle0,(angle1-angle0)/PI*180);
return 0;
}
実行結果
1つ目の始点座標を入力(x,y)
87 78
1つ目の終点座標を入力(x,y)
192 215
2つ目の始点座標を入力(x,y)
87 78
2つ目の終点座標を入力(x,y)
185 389
角度 = 0.34866626[rad]
角度 = 19.98[°]
ということで角度がわかりました!
恐らく20°ですね!
686ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,920ポイント)
Date: 2008/08/08(金) 00:33
No:19968
|
|
Title: Re:深弾幕結界を表現しました
|
|
むちゃくちゃ凄いですね・・・私には線を引っ張って分度器で測る事しかできませんでしたが・・・座標の正確な位置取りによって、誤差はあるのでしょうが、まず20°で間違いなさそうですね。
私もやる気が出てきたので、円運動は速度は明らかに56じゃないのでもう少し理論的に煮詰めてみます。
55ポイント を手に入れた。
|
|
|
|
|
Name: array ..中級者(14,969ポイント)
Date: 2008/08/08(金) 00:39
No:19970
|
|
Title: Re:深弾幕結界を表現しました
|
|
むwそうでしたか、流石に早いですね。
もう解決してそうですが後は、半径と、初弾の発射位置の取り方ですよね。最初は発射時間を遅らせていたのですが、後々PI/20ずらして初期位置をずらしたのですが、ここも正確にするには問題になってくると思います。
49ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(15,374ポイント)
Date: 2008/08/08(金) 02:45
No:19977
|
|
Title: Re:深弾幕結界を表現しました
|
|
なるほど・・・あれは加速してるわけではなくそのタイミングで発射されていたんですね。その可能性はまったく視野に入っていませんでした><
私は、boss.dxに何が入ってるのかdn.xはどんな動きをしてるのか調べてました。boss.dxが実際の位置とは違う、表示用の座標で、dn.xは爆発時の画面などの動きが入ってるみたいですね。
という事で、 boss_assist_img()を書き換えないと表示位置がずれてるみたいですね。今から修正版を差し替えておきます。
210ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(686,180ポイント)
Date: 2008/08/08(金) 03:46
No:19978
|
|
Title: Re:深弾幕結界を表現しました
|
|
出来た〜!
出来る限りの事をしたつもりです・・・。
0.1秒単位でそれぞれの発射時間を調べたり細かく発射角度調べたり^^;
こんなのでどうでしょう♪
といっても、まだ1周目だけですが・・。
↓画像クリックで、動画へ飛びます
(消去しました)
まぁみたらわかると思いますが、左側が作った方、右側が本物つまり東方です。
177ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(15,418ポイント)
Date: 2008/08/08(金) 05:15
No:19979
|
|
Title: Re:深弾幕結界を表現しました
|
|
やばいw再現率やばすぎるw
あえて文句をつけるとしたら外向きに発射されてる弾の動きですかね、内向きの弾の再現率には感服しました。
何回見ても凄い!ごまかしが見られないところが凄いです
44ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(686,272ポイント)
Date: 2008/08/08(金) 05:34
No:19980
|
|
Title: Re:深弾幕結界を表現しました
|
|
うぉ・・内側ばかり見てて外側にあまり注意してなかった^^;
あれですか、、、グニン・・と曲がってますかね・・w
内側発射もきっと加速してるんだと思いますが、私のは加速していません^^;
速度にしても、向きにしてもことごとく徐々に変化してますよね東方はw
92ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(15,584ポイント)
Date: 2008/08/08(金) 05:50
No:19982
|
|
Title: Re:深弾幕結界を表現しました
|
|
それは私も思いましたけど、どうなんでしょうね、意図的にしたとは思いたくない動作ですよね。多分前に違う場所の角度計算した結果が1カウント差で上書きされなかったとか・・・色々想像してしまう奴である事は確かですよね。でも東方とあろうゲームがそんなバグ的なものをほったらかしにするはずもないので、やっぱり意図的にしてるんでしょうね・・・・意図した意味は理解不能だけどw
>速度にしても、向きにしてもことごとく徐々に変化してますよね東方はw
本当に凄いですよね、私じゃ想像もできないような関数を用意してるんだと思いますが・・・。もっと精進したいです^^
166ポイント を手に入れた。
|
|
|
|
|
Name: array ..上級者(15,704ポイント)
Date: 2008/08/08(金) 12:22
No:19989
|
|
Title: Re:深弾幕結界を表現しました
|
|
お疲れ様です^^
本物は次で周りの奴が4つに増えるんですよねw 私は流石に4つも解析する気にはなれませんでした。確かその次は6つに増えるし・・・・でもパターン2まで解析できれば4つになろうが大体同じ考えで処理していけると思ったのですが、どうなんでしょうか・・・。
95ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(686,374ポイント)
Date: 2008/08/08(金) 17:41
No:19995
|
|
Title: Re:深弾幕結界を表現しました
|
|
3周目完成の目処はたったのですが、これ全部作るだけ時間かけるメリットがあるか疑問に思ってきました・・・^^;
まだ2周目・・8周作るのに一体何時間かかるんだろう^^;
arrayさんがバトンタッチしたくなる理由もわかってきましたw
私もそろそろバトンタッチを・・。
誰か頑張って下さいぃぃ(´〜`;)
137ポイント を落としてしまった。
|
|
|
|
|
Name: array ..上級者(15,735ポイント)
Date: 2008/08/08(金) 21:56
No:19999
|
|
Title: Re:深弾幕結界を表現しました
|
|
> 3周目完成の目処はたったのですが、これ全部作るだけ時間かけるメリットがあるか疑問に思ってきました・・・^^;
> 誰か頑張って下さいぃぃ(´〜`;)
お疲れ様です>< いや、本当に凄いクオリティーの高い再現率で感動しました^^
31ポイント を手に入れた。
|
|
|
|
Name: kazuoni ..上級者(22,093ポイント)
Date: 2008/08/06(水) 22:40
No:19857
|
|
Title: インクリメント、デクリメントのタイミング
|
|
お邪魔します。
もし「柴田望洋 図解C言語 ポインタの極意」をお持ちでしたらp154,p158を御覧ください。
@strncpyの実現例
char *strncpy(char *s1, const char *s2, size_t n)
{
char *p = s1;
while(n){
n--;//1
if(!(*s1++ = *s2++)) break;
}
while(n--)//2
*s1++ = '\0';
return (p);
}
ここでnのデクリメントのタイミングなんですが・・・なぜ//1と//2でのタイミングが違うのでしょうか?
Astrncmpの実現例
char *strcmp(char *s1, const char *s2)
{
while(*s1 == *s2){//1
if(*s1 == '\0')
return (0);
s1++;//2
s2++;//3
n--;
}
if(!n) return (0);
if(*s1) return (1);
return (-1);
}
ここで、//1〜//3をまとめて
(*s1++ == *s2++)ではだめなのですか?ちょっと混乱しています・・・。
っというか、これは著作権てきにまずいですか?まずければすぐ消します^^;
476ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(680,665ポイント)
Date: 2008/08/06(水) 23:04
No:19863
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
解らない事があればとりあえずコードを書いてみよう!ということで
下のようなサンプルをかきました。
#include<stdio.h>
int main(void){
int n;
n=5;
printf("スタート!\n");
while(n){
n--;
printf("%d\n",n);
}
n=5;
printf("スタート!\n");
while(n--){
printf("%d\n",n);
}
return 0;
}
実行結果
スタート!
4
3
2
1
0
スタート!
4
3
2
1
0
ということで、あまり変わりません。
whileは先に条件文が評価される為、デクリメントがされるタイミングはさほどかわらないはずです。
タイミングが違うというのはどういう意味なのでしょう?
もう少し詳しくその意味が書いて無いですか?
245ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(122,533ポイント)
Date: 2008/08/06(水) 23:11
No:19865
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
> Astrncmpの実現例
>
> char *strcmp(char *s1, const char *s2)
strncmpの実装例ですか?それともstrcmpの実装例ですか?
また、未定義の変数nを使っているのは何かの間違いですか?
49ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(22,284ポイント)
Date: 2008/08/06(水) 23:11
No:19866
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
>whileは先に条件文が評価される為、デクリメントがされるタイミングはさほどかわらないはずです。
char *p = s1;
while(n){
n--;
if(!(*s1++ = *s2++)) break;
これが
char *p = s1;
while(n--){
if(!(*s1++ = *s2++)) break;
はダメですか?
132ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(22,410ポイント)
Date: 2008/08/06(水) 23:17
No:19869
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
Astrncmpの実現例
char *strncmp(char *s1, const char *s2,size_)//strcmp→strncmp
{
while(*s1 == *s2){//1
if(*s1 == '\0')
return (0);
s1++;//2
s2++;//3
n--;
return((unsigned char)*s1 - (unsigned char)*s2);
}
思いっきり間違えてました・・・。
126ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(22,714ポイント)
Date: 2008/08/08(金) 09:11
No:19985
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
boxさん、管理人さん、ご回答ありがとうございます。
ちょっと質問の仕方を変えてみます。@は同じ意味として解釈しました。
Aはよく見たら二回目の投稿も記述ミスありますね。本当に申し訳ありませんでした。。眠いときは寝たほうがいいねすねw(管理人さんもww)
while(*s1 == *s2){//1
文1;
s1++;
s2++;
文2;
}
while(*s1++ == *s2++){//2
文1;
文2;
}
//1ではスタートからみると
文1[s1,s1]
文2[s1+1,s2+1]
文1[s1+1,s2+1]
文2[s1+2,s2+2]
...
となり
//2では
文1[s1,s2]
文2[s1,s2]
文1[s1+1,s2+1]
文2[s1+1,s2+1]
...
このようになるということでよろしいでしょうか?
304ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(123,040ポイント)
Date: 2008/08/08(金) 09:55
No:19986
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
while(*s1 == *s2){//1
文1;
s1++;
s2++;
文2;
}
*s1 == *s2 を評価する
真ならば、文1の実行、s1のインクリメント、s2のインクリメント、文2の実行をこの順に行なう。
*s1 == *2 を評価する。
真ならば、文1の実行、s1のインクリメント、s2のインクリメント、文2の実行をこの順に行なう。
.....
*s1 == *2 を評価する。
偽ならば、while文から抜ける。
----------
while(*s1++ == *s2++){//2
文1;
文2;
}
*s1 == *2 を評価する。
s1とs2の両方をインクリメントする。どちらのインクリメントが先かは、処理系によって異なるかもしれない。
つまり、文1、文2の実行前に、while文のカッコ内はすべて評価済み。
先の評価が真ならば、文1の実行、文2の実行をこの順に行なう。
*s1 == *2 を評価する。
s1とs2の両方をインクリメントする。
先の評価が真ならば、文1の実行、文2の実行をこの順に行なう。
.....
*s1 == *2 を評価する。
s1とs2の両方をインクリメントする。
先の評価が偽ならば、while文から抜ける。
80ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..上級者(23,309ポイント)
Date: 2008/08/08(金) 10:10
No:19987
|
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
丸囲み文字はJIS X 0208にない文字で,このページはエンコードがShift_JISなので,基本的に使ってはいけません。
# 数値参照を使えば正しいです。
そのため,括弧と数字の組み合わせに変更しています。
なんか,そもそも結論を間違えているようなので……。
(1)
> ここでnのデクリメントのタイミングなんですが・・・なぜ//1と//2でのタイミングが違うのでしょうか?
違う必要があるからです。
strlen(s2) >= nの状況では同じかも知れませんが,strlen(s2) < nの状況ではタイミングが違うことが意味を持ちます。
例えば,n == 0の状況を考えてみればよいでしょう。
kazuoniさんのNo.19866の代替案は代替案になりません。
というのは,一つ目のwhileを抜けた時点で,nはデクリメントされています。
おそらく,nはUINT_MAXやULONG_MAXあたりの値になることでしょう。
結果,二つ目のループで範囲外アクセス (元々nは0ですから) をしてしまうことになります。
(2)
> (*s1++ == *s2++)ではだめなのですか?ちょっと混乱しています・・・。
だめです。
ループを出た時点で,s1とs2が一個先を指してしまいます。
でもって,strcmp/strncmpの戻り値はintですよ。
247ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(22,947ポイント)
Date: 2008/08/08(金) 17:01
No:19994
| 解決!
|
Title: Re:インクリメント、デクリメントのタイミング
|
|
boxさん、YuOさん丁寧なご回答ありがとうございます。
完璧に理解できました。本当にありがとうございました。インクリメント、デクリメントはしっかり学習した記憶がなくて、評価するときの順番とかは全く知りませんでした。。学習不足で本当にすみませんでした。
>丸囲み文字はJIS X 0208にない文字で,このページはエンコードがShift_JISなので,基本的に使ってはいけません。
本当にすみませんでした。次回からは気をつけたいと思います。
次回からはプレビューでしっかり確認してから投稿したいと思います。
ありがとうございました。またよろしくお願いします。
233ポイント を手に入れた。
|
|
|
|
Name: yasya ..ぴよぴよ(488ポイント)
Date: 2008/08/07(木) 13:28
No:19904
|
|
Title: 無題
|
|
こんにちは。
また、この前と同じような質問なんですが、
test.obj : error LNK2001: 外部シンボル ""char * key" (?key@@3PADA)" は未解決です。
みたいなエラーが出た時は、どうすれば解決するのでしょうか。
102ポイント を手に入れた。
|
|
|
|
Name: yasya ..ぴよぴよ(534ポイント)
Date: 2008/08/07(木) 17:14
No:19915
|
|
Title: Re:無題
|
|
えーと、管理人さんが作ったRPGのサンプルを参考にして作ったものを実行したらこうなったんですけど・・・。
46ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(683,780ポイント)
Date: 2008/08/07(木) 17:45
No:19916
|
|
Title: Re:無題
|
|
つまり自作なのですね。
コードが無いと全くわからないですが、
とりあえずkeyの宣言がおかしいのでしょう。
大文字小文字の間違いを含め、宣言を確認してみてください。
またVSは時たまおかしな挙動をするので、一回閉じて余計なファイルを消して再起動してコンパイルすると
直る時があります。
107ポイント を手に入れた。
|
|
|
|
Name: わきた ..ぴよぴよ(154ポイント)
Date: 2008/08/08(金) 13:26
No:19991
|
|
Title: 64bitプログラミング移植について
|
|
お世話になります。
現在32ビットで書いたプログラムを64ビット環境でも動かせるようにしたいと
思います。既存のプログラムは、32ビットのWindowsとLinuxで動かせるように
なっています。どうしてもWindowsとLinuxでの関数名が一致しない場合は、
#ifdef __WINDOWSなどで対応しています。
質問
@ 32、64ビット環境共に対応するためには、ソースを書くうえの
注意点を教えてください。特にLinuxとWindowsで共通で使えるように
していこうと思います。
AWindowsでは、VisualStudio2005を使用していますが、64ビット移植にあたって
環境設定とか必要があると思いますが、具体的に教えていただければ
助かります。
漠然な質問で申し訳ありませんが、分かる範囲で答えていただいたら
助かります。宜しくお願いします。
154ポイント を手に入れた。
|
|
|
|
Name: 御津凪 ..ぴよぴよ(609ポイント)
Date: 2008/08/08(金) 14:27
No:19992
|
|
Title: Re:64bitプログラミング移植について
|
|
私は 64bit プログラミングをしたことはありませんが出来る限りの回答をしたいと思います。
@の質問について
一番にいえることは、ポインタの型の違いがあります。
32bit 版では4バイト、64bit 版では8バイトとなります。
VisualStudio2005を使っているのであれば、/Wp64(だっけ?)のオプションで32/64bit対応のプログラムが作れると思います。(2008では廃止・無視されています)
正確に言えばこのオプションは64bit版を想定したソースとしてコンパイルし、問題があれば警告を表示します。(たとえばアドレス値を unsigned long にキャストしようとした時など)
LinuxとWindowsの標準ライブラリの誤差は対応しているということなので、
同じように64bit対応関数などを補間していけば大丈夫だと思います。
Aの質問についてはやったことが無い(というより環境により出来ない)ので、なんともいえませんが、
多分、プロジェクトのプロパティのビルドオプションの変更で可能になると思います。
(インストール時にインクルードパスなどは設定されています)
余談ですが、
知っている限りではWindowsは64bit環境でも、32bitのプログラムは動くように設計されていますよ。
あと、無料版では64bit版でコンパイルできませんよ。
93ポイント を手に入れた。
|
|
|
|
Name: BCI-3e ..中級者(12,063ポイント)
Date: 2008/08/03(日) 04:05
No:19428
|
|
Title: ものすごい雑談ですが・・・・・
|
|
初めて?雑談トピ立てたいと思います。もちろんC言語の事ですが;
皆さんは、なぜC言語を始められたのでしょうか?
また、勉強法、思い出などいろいろ書き込んじゃってください^^
ぜんぜんC言語と関係ない思い出話でもいいですよ〜
皆さんの過去が謎に包まれすぎていると思うので、ぜひ知りたいと思います(*_*)
139ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(663,111ポイント)
Date: 2008/08/03(日) 05:14
No:19431
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
この掲示板では過去に何度かお話したことがあるのでもしご存知の方は重複すみませんm(_ _)m
私が初めてCに触ったのもパソコンに触ったのも大学1年の時でした。
なのでPC歴やC歴はすごく浅いです。
ただプログラミングがしたくて情報系に入ったものの、
プログラムコードをうちこんで、真っ黒の画面に計算結果が出るだけのC言語に全く魅力を感じませんでした。
始めたばかりの頃は、ゲームやワードやwindowsそのものなんかはC言語とかじゃなく、
もっと他の何かで作られているんだ、今全然違う関係ないことをしてるんだと勘違いしていたので、
余計興味がわかず、全然勉強しませんでした。
そのせいで赤点ギリギリ・・プログラムの宿題は友達のを見せてもらう始末でした。
その頃、どうしても課題の締め切りに間に合わず、でも勉強していなかった私にとって
どうあがいても解けないプログラムの問題があり、
この掲示板でも好まれないような質問を某掲示板でした事があります。
PC歴もC歴も浅い私は、いまいちどう質問したらいいかもわからなかったので、
質問の仕方も悪かったのだと思いますが、
結構酷い事を言われ、嫌な思いをした事がありました。
しかし大学3年の後期、ソフトウェアロボットというものを作ろうと言う授業がありました。
OpenGLを使って3Dでロボットを作り、そのロボットを操ってみようと言うものです。
自分で作ったプログラムでロボットが動くことが本当に面白くて、
来る日も来る日もパソコン室にこもりました。
初めて出会った人から「あぁ、あのいつもパソコン室で何か作ってた人でしょ?」と言われるほど^^;
それからロボットは完成させたんですが、もっと簡単に描画が出来るDXライブラリに出会ってから
ゲーム製作に没頭しました。
ゲームを作っているうちに基礎力が欠損している事に気づき、
データ構造とアルゴリズム系の本を買ったり、ウェブで勉強したりして基礎から勉強しなおしました。(それ以来ずっと今でも忙しくない日は1日12時間以上はプログラム書いています^^;)
アルゴリズムを勉強しては、それを使って自分の好きなゲームを作るという繰り返しで覚えていきました。
億劫な勉強も楽しい事に結びつければ身に付きも早いだろうと思ったのです。
そうして一通り基本的なことが何とか理解出来たかな?と思った頃、
学校でCの事を色んな人が質問に来てくれるようになっていました。
こんな自分でも人の為に何か出来るかもしれない、
昔嫌な思い出がある分、初心者にどう教えないといけないかわかるから、
それを活かして初心者でも気持ちよく利用できるサイトを作りたいと思うようになり、HPを立てました。
(初めは常連さんがダッシュさんとJustyさんしかいらっしゃらない小さなサイトでたまにポツポツ投稿される質問に答えるアクセス数の少ないサイトでした。)
話がそれましたが、そうしてゲーム製作にすごく楽しみを感じるようになってから色んなゲームを作りました。
色んなゲームを作っているうちに一つ大きなゲームを作りたいと思い、Bommanを作りました。そしてアルゴリズムの勉強もかねてBLACKを作りました。
ゲーム製作が本当に楽しいと感じたので、もっと多くの人にこの楽しさを伝えたいと、ゲームプログラミングの館を作り、STGの館を作りました。
そうしていると(DXライブラリでこんなゲームが作れるんだ!ってゲームを配布したいのに今まで作ったゲームは配布出来なかったため)今度は配布出来るゲームが作りたいと思ったことと、昔好きだった東方にどれだけ近づけられるか腕試しがしたくなったことから、龍神録を作りました。そして龍神録Plusを作って今に至ります。
振り返ってみれば私のC歴やPC歴なんてホント浅いですね^^;
3年の後期から勉強始めたから・・C歴はもうすぐ3年というところでしょうか。
2倍のポイントを手に入れた! 2,420ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..入門者(3,061ポイント)
Date: 2008/08/03(日) 05:31
No:19435
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
すげー神様のライブ語り見ちまった。
私も人に語れるくらいのレベルにいつかなりたいです。この一ヶ月でゲーム作るぞうらぁ
私はゲームが作りたくて大学2年で全然情報関係ない学部から情報工学に転学しました。
C言語歴は一年?その割にはぜんぜん使えてる気がしませんort
76ポイント を落としてしまった。
|
|
|
|
|
Name: BCI-3e ..中級者(13,196ポイント)
Date: 2008/08/03(日) 06:13
No:19441
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
とても面白く、ちょっと感動しました。
なんか急に管理人様との距離が近づいたような気がします。
なら次に私のPC談を^^
私がPCに触れたのはほんの1年ほど前の事です。
家にPCはあったのですが、親の仕事で使っていたものなので触らせてもらえるわけもなく。
何とか説得して夏休み、がんばってアルバイトをして買いました。ですが、全くパソコン
に触った事が無い人間ですから、ミス連発。何度となくWindowsを再インストールしました;
そして、ネットサーフィンを覚えた私は毎日いろんな事を吸収し、フリーで配布されている
ゲームがある事を知ったのです。しかし、あまり面白く無いRPGやアクションゲーム。
でも、どうやって作ってるんだろうと思い調べて見るとツクールと言うものを使っている事
が判明。こんな高い物を使ってなんて無駄なんだと思いつつ面白そうなゲームを探す日々。
そして、今年の始めにあるゲームと出会いました。灯が作ったThe Ruins Of The Lost Kingdom
通称ROL。このゲームのオープニングを見たときに鳥肌が立った事を今でも覚えています。
きれいなグラフィック。個性豊かなキャラクター。カッコイイアクション。そしてストーリ。
今まで出会った事の無い、未知の世界。これをたった3人で作っている。どうやって?
他人にできるのだから自分にできないことは無い。2Dぐらいは作ってやると思い一人で劫火!
そして自分でいつかは、あんなゲームを作りたいと思ってゲームを作る方法を必死で探しました。
しかし出てくるのは本の宣伝やツクールばかり。それでも何とかしたいと思って調べました。
そして、たまたまこのゲーム館にたどり着いたわけです。でも、PCを初めてまだ1年も経っていない。
なんだコレ?C言語?コンパイラ?コレで何をどうしろと?と右往左往。しかし今ではがんばって・・・・
少しは人に教えられるようになったかな?程度には成長しました。コレも管理人様が手取り足取り
丁寧に教えてくださったおかげです。
今では毎日C言語に触れて少しでもROLに近づけるようにがんばっています。前進あるのみですね^^
でも、いまだにキーボ−ドを見ながらでないと文字が打て無いんですよ。
見ないで打つ人ってどうやって練習してできるようになったんでしょうか?
ROLのリンクをここに貼っておきます。
迷惑であれば消去していただいても結構ですが、ものすごくグラフィックがきれいです。
遊ばないなんて損ですよ。ゲーム内でチャット的掲示板もリアルタイムで更新されますし。
ストーリーも性能も無料にしてはもったいないと思うぐらいのものです。
最近ではオンラインゲーム形式の物が出ています。はっきり言ってあれはプロ顔負けです。
中国で販売されてもおかしく無い。もうお金とって出回ってる可能性も十分あります。
http://www.tomoshibi.net//guide/rol.html
ついでに一番最初にプレイ画面を一部投稿させていただきました。
見にくかったらごめんなさい。
879ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(84,014ポイント)
Date: 2008/08/03(日) 10:07
No:19447
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>でも、いまだにキーボ−ドを見ながらでないと文字が打て無いんですよ。
>見ないで打つ人ってどうやって練習してできるようになったんでしょうか?
最初は、キーボードを正しい指使いで動かせるように、見ながらポジション?(っていうのかな?)の練習をしたんです。それ続けてたら、いつの間にか目が離れてました。
C言語を始めた理由ですが、始める前からプログラミング自体には興味があったのですが、どんな言語があって、どんな特徴が…なんていうのは分からなくて、適当に書店でプログラミングコーナーで本を取ったのがC言語だったという理由です。
もしかしたらVBだったかもしれません。でもCでよかったんじゃないかなと思います。
232ポイント を落としてしまった。
|
|
|
|
|
Name: <kor ..ぴよぴよ(501ポイント)
Date: 2008/08/03(日) 10:36
No:19449
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
わたしは、パソコンは2〜3年使ってましたけどそこまでいろいろやってませんでした。
本格的に使い始めたのは去年の夏、ニコニコを知ってからですね。
そこで東方を知って、さっそくインストール・・・VISTAなので動きませんでしたorz
当時はdirectXを更新すればいいなんてこと知りませんでした(そもそもdirectX自体を知りませんでした)
そこで、「じゃあ自分で作っちゃえ」みたいな大変なことを軽く思いついてしまい、作成開始しました。
しかし、フリーのツールを拾っても、なぜかいいものができず、さまよった結果ここに着きました。
その時の感想は、
「おぉ…プログラミングか。なんかかっちょいいし、これだと好きなもの作れんじゃね?」
みたいなことを思い、始めました。
当時も今も、たいして腕は上がってませんが、ゲームの構造とかが少しわかるようになって、みんなの気にしない部分ですごい苦労があるんだなぁとか思ってたりします。
350ポイント を手に入れた。
|
|
|
|
|
Name: めいらる ..ぴよぴよ(203ポイント)
Date: 2008/08/03(日) 13:53
No:19482
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
初めまして、書き込みさせていただきます〜
私がプログラミング…というかゲーム製作自体に触れたのは3年前のRPGツクール5でした。今思えばそれが全ての始まりです(´∀`)
既存のシステムに満足がいかず変数の扱いなどを覚えて自作戦闘などに挑戦してみたりしてました。
しかし自由度の狭さと容量の都合で製作は停止…
期間をあけて今年1月にやっと自力でPCを買い、同時にRPGツクール2000を買いました。
でも容量の心配は無いけどやはりあと少し自由度が足りない…そこでスクリプト機能があるとうわさのツクールXPを購入(笑)しかしRGSSを使用してスクリプトを自作しようとしたものの理解できず撃沈…
この頃初めて東方を知り、どっぷりハマり、自作ゲームの方向性をRPGからシューティングに変更しました…
が、
RPGツクールではどうがんばってもシューティングはしんどい…それならば…雑誌に…確か…初心者向けの…簡単な言語とかなんとか………HSP…
mes "ハローワールド"
ここで初めてプログラミングに触れました(・∀・) プログラミング=ややこしくて難しい数学+英語みたいなもの という固定観念があったため敬遠してましたがHSPのおかげでその固定観念はどっかにいきました(´∀`)
しかしHSPでのシューティング製作を続けて三ヶ月…速度の壁にぶつかりました…
東方のように不思議な動きをする弾を600発も操作するととてもじゃないけど60FPSの維持は不可能…ハイスペックPCなら問題ないだろうけどそれじゃプレイできない人が…それ以前に自分のPCが動作環境を満たせないとは(笑)
そこで高速との噂のCに移ろうかと思ったのですが C=超難プロ御用達言語 というイメージがあったのでなかなか踏み切れずにいたところ、DXライブラリとゲームプログラミングの館の存在を知りました(・∀・)
…で、今に至ります(・∀・)C暦一ヶ月です
203ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(14,299ポイント)
Date: 2008/08/03(日) 14:05
No:19485
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
おぉ〜
人それぞれCに触れたきっかけが違うんですね^^
こうして見るとこのスレ立てた事、ものすごく交流の場になったんでは?
次ぎはたかぎさんとかKEVさんのお話も聞きたいな〜
たかぎさん&KEVさん←・・・・・・(・_・。)ジ〜〜〜
99ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,634ポイント)
Date: 2008/08/03(日) 14:06
No:19486
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
おぉ、めいらるさん!こんにちは^^
スナップ写真のボードが実写だ・・w
めいらるさんあんなにSTG作ってらっしゃるのにC歴1ヶ月だったんですか^^;
HSPみたいな言語は本格的な製作には向かないんでしょうねぇ。
パールみたいに宣言無しで変数が使える言語は絶対どこかで間違いするので、怖いです・・。
スペルミスしてても、教えてくれないし^^;
>ゲーム製作自体に触れたのは3年前のRPGツクール5でした。
それで背景がツクールなんですねw
36ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,738ポイント)
Date: 2008/08/03(日) 14:13
No:19487
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
いいですね。具体的なお名前を出すと出ていない方に失礼なのでしませんが、
皆さんのお話私も聞いてみたいです。
・・といった矢先・・普段個人的なお話をあまりされないboxさんも是非^^;
KEVは
プログラミングの授業なんて60点(合格最低点)取ればいい
という教えを私に説いてくれましたb
104ポイント を手に入れた。
|
|
|
|
|
Name: めいらる ..ぴよぴよ(363ポイント)
Date: 2008/08/03(日) 14:23
No:19489
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
管理人さん>
どうもです(^ω^)
ボードはその辺の山ですwww
Cを始めたのは管理人さんと某SNSで知り合ったあの時です(^ω^)Cはあんまり理解できて無いと思いますw
ポインタやクラスとかの使い道がいまだによくわからないので…
関数の自作(表現おかしいかもw)、ソースの分割、構造体…などがHSPには無かったのでソースの長さがものすごいことになってその点でも苦労してました…データ管理も大変です(^ω^;)
背景はツクールXPのを流用してますww
利用規約を見るとツクール以外での使用は禁止だそうですので早めに自作する予定ですw
160ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(666,978ポイント)
Date: 2008/08/03(日) 14:29
No:19490
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>利用規約を見るとツクール以外での使用は禁止
そうなんですよね〜、私も最初ツクールで作ってたのに規約違反だったので、作り直しました・・。
それ位OKにしてくれたほうがよっぽどソフトの売り上げ上がると思うのですがねぇ・・。
・・と会話スレになってしまいそうなので、この辺で自重しておきます^^;
87ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..熟練のプログラマー(57,817ポイント)
Date: 2008/08/03(日) 16:07
No:19493
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
私も書いていいのかな。
私がC言語を始めたきっかけはC++言語を学ぼうと思ったからです。
最初にEXCELのVBAで簡単なゲームやプログラムを作って、
C++をやろうと思ったらC++を初心者向けに書いている参考書が見つからなかったので
Cを学んだというわけです。
VBAを始めたきっかけはEXCELで同じことを繰り返すのが面倒なだけだったのですが。
C言語を始めて1か月で入門書は読み終えたので、
私の中では、C言語を始めて1か月は初心者と認めていません。(笑)
アルゴリズムとデータ構造の勉強に移行する時期だと勝手に思っています。
259ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..中級者(14,874ポイント)
Date: 2008/08/03(日) 23:27
No:19560
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
みなさん、貴重な体験談ありがとうございます。
ちょっとスレが下の方に下がってきたので上に持ち上げます^^
初心者の方とかもぜひ書いて下さい。ここは雑談もOKなのですから。
私も最初は自分みたいな初心者がこんなすごい方たちの前に現れても
いいのかとちゅうちょしましたが、なんのその。管理人様もどこにで
もいるような大学生。人間皆、変わりありません。先にCに触れた人が
知識豊富なだけで、始めは皆疾駆八苦して誰かに質問して学んだんです。
なので、怖がらずにどんどん書き込んじゃってください。
このスレによって、もっと皆様方と交流できたらと思っています^^
265ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni ..上級者(20,376ポイント)
Date: 2008/08/03(日) 23:41
No:19562
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
一か月ぶりに帰宅しまーすwちょっと長い旅にでてました^^;旅先でここをチラチラみてたんですが、かな文字対応してないPCばかりだったので。。自分もそろそろ本腰いれてC基礎を一か月で・・・できますかねっ^^;
C言語を始めた理由・・・やっぱり自分で前までやっていたゲームが作れるってとこでしょうかね。
学校の課題で詰まってここにたどり着いたんですが、その後管理人さんのページをみるとゲームが作れるって書いてあってびっくりした記憶があります。「C言語でこんなの作れるの!?」みたいな。自分はスーパーファミコンを小学校のときガンガンやってたんですぐにやり始めました。FFが作りたい・・・ってw
制作はちょっと止まってますが・・・絶対に完成させます。
改めて・・・皆様よろしくお願いします(えっ
213ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(102,614ポイント)
Date: 2008/08/04(月) 00:25
No:19569
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
私が初めて触れたプログラム言語はBASICでした。
CASIOのVX−4というポケコンで、授業そっちのけでゲーム作ってましたね(笑)
とはいえ、そのポケコンはメモリが少なくて、プログラムに割り当てられた領域が約3KB…つまり3000文字以内に収める必要があった訳です。
そんな厳しい環境でプログラムしていたせいか、少ない文字数で、できるだけ処理の速い方法を常に模索していたと思います。
それから、初のPCでのプログラミングはFM−TOWNSのF−BASICでした。ちなみに私のPCのメインメモリは2MB(誤字ではありません(笑))でした。
PCを使うようになって何が嬉しかったって、FDにプログラムを保存できるという事だったんですよ。3KBと1MBでは全く違いますからねぇ…(^_^;)
ポケコンという、あまりに厳しい環境に慣れていた私にとっては天国のようでした(笑)
C言語との出会いは学校の授業でした。しかし、BASIC信者だった私は真面目に授業を受けず、友達のレポートを丸写しする毎日でした…
それからの10年間は、プログラムとは全く縁の無い生活を送っていたのですが、ひょんなことから今の会社に拾っていただきソフト屋になることになった訳です。
最初はVC++でMFCから入り、今ではVBやC#なんかでの仕事も多くなってきました。
VBなんて、BASICと名前がついてはいるものの、最早BASICではないなぁ…とか愚痴りながら仕事をこなす毎日であります。
415ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(11,572ポイント)
Date: 2008/08/04(月) 00:36
No:19573
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
自分は、FCがどこもかしこも売り切れで買えなかった時に代わりに買ってもらったのが
SEGAの「SC−3000」という機種でした
最初は愚図ってたものの、そのうちに諦めて遊び始めたものの、
全く意味の分からないソフトがありました
それがBASICでした
それからベーマガ(分かる人いますよね?)を買うようになり、
MSXに乗り換えて・・・
まぁ色々あって10年近くプログラムから引き離されましたが、
今、C++で念願のゲーム作成をしています
あんまり面白い話じゃないですね、平坦すぎて・・・
186ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(102,677ポイント)
Date: 2008/08/04(月) 00:39
No:19576
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
ベーマガとポケコンジャーナルは愛読書でした(笑)
良い雑誌でしたよね(^-^)
25ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(11,701ポイント)
Date: 2008/08/04(月) 01:02
No:19580
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>バグさん
確かに・・・でも、どんどん投稿プログラムが減って、雑誌が薄くなっていくのは哀しかったですね
すぐに消えていく新コーナー達・・・JAVA講座とか
でも一番好きなコーナーが「読者の闘技場」だったり・・・
今月は○○なので経験値倍付けだ!
って、毎月倍付けやん!みたいな(笑)
129ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(103,203ポイント)
Date: 2008/08/04(月) 09:09
No:19595
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>>木霊さん
そうなんですよ…Windowsが普及し始めた頃から「作る」よりも「使う」時代になっていったんですよね。
でも、ここのサイトの盛り上がりをみるにつけ、今こそああいった雑誌が求められてるんじゃないかなぁ?とか思わないでもないんですよね。
私が見ていた当時は、N88-BASIC、F-BASIC、X-BASICなんかがメインだったんですが、素人投稿とは思えない怨念めいた相当に凝った作りのゲームがあったりして、毎回ビックリさせられていました。
上記の3つの中で、N88-BASICだけはSPRITE機能が無かったので、激しいアクションなんかにはあまり向いてないはずなのに、高速で巨大なボスキャラ(アスキーアートでしたが)が動くシューティングゲームとかあったりしましたしねぇ…(笑)
そういえば、なにげにゲームの攻略記事とかも充実してましたよね。ALL ABOUTシリーズとかデータの細かさに感動してましたし。
238ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..上級者(15,079ポイント)
Date: 2008/08/04(月) 10:39
No:19598
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
やっぱり昭和って感じすね^^
私が知らない知識ばっかり;でも、2〜3年前に比べて
言語に触れる人が若年化してるようです。情報の先生
が言うには5年前は1人も興味を持つ人すらいなかった。
けど今は工業系、情報系などに進んでいなくても今は
一人に1台パソコンがある時代。それだけ自分の個性を
出すために使われてるような気がします。
なので、そんな面白い雑誌などがこれからどんどん
普及してくれるとありがたいですね^^
こう言うスレの一部をページ内に残しておいてもいい
かもしれません。どなたかIT関係の記者が面白がって
取材やきじにしてくれるかも。やっぱりたわいも無い話っていいですね^^
これからもたまにはこんなスレ立てたいと思います。
205ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(103,340ポイント)
Date: 2008/08/04(月) 11:52
No:19602
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>>BCI-3eさん
残念ながら、マイコンBASICマガジンは絶賛廃休刊中です(^_^;)
当時は誌面に印刷されているプログラムをカリカリと写していく作業が大変でした…。
特に大作にプログラムになると、もう気の遠くなるような作業でしたし(笑)
今なら、CD−ROMとかにプログラムコードを添付してのムック本として復活しても面白いかもしれませんね。
毎号、開発環境+インストーラ付なら、初心者でもとっかかりは凄く楽そうですし…
137ポイント を手に入れた。
|
|
|
|
|
Name: KEV ..かけだし(2,481ポイント)
Date: 2008/08/04(月) 19:28
No:19638
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
BCI-3eさんとROLさんが両方いらっしゃるみたいですが、
よく混在しているのでどっちかどっちか分からなくなりますw
私は大学時代にC言語の授業を受けてましたが、
あの時期をプログラム歴には絶対いれたくないです。
もう、ほんと楽しくなかったんですよー!プログラムの授業って…
Dixqがなんか暴露してて恥ずかしいですが、事実なのでもっと恥ずかしいです。
大学生のときは、
自宅で開発環境を開いたことなんてなかったです。
皆さんが言ってるような、ゲームを作りたいといった情熱がなかったので、
勉強にもまったく力が入らなかったんだろうなぁ。
だから私のプログラム歴は入社した後の8ヶ月程度といっていいでしょう。
今では、自分の生活を維持するためにプログラムを勉強して業務をこなす日々です。
最初は今まで勉強してなかったツケが回ってきて本当にしんどかったけど、
やっとプログラミングで自分で新しいものを作りたいと思える余裕がでてきました。
今でもゲームを作ろうという気はそこまでなかったりします。
ゲームプログラミングの館は楽しいからやったけどね。
むしろマイコンを使用した機械とか設計したいですね。
まずはデジタル時計を作りたいなと思ってます。
皆さんの話を聞いてると実にやる気が出ます。
私の話は反面教師にでもしていただけたら幸いです。
335ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..中級者(11,963ポイント)
Date: 2008/08/05(火) 00:59
No:19650
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>バグさん
自分が読み始めた時は「ファミリーベーシック」とか「ぴゅう太」がありました
全60機種80作品とか、今考えると無茶苦茶な収録量ですよね
もう5年になるんですねぇ、休刊してから・・・
他機種のプログラムを移植するのは結構勉強になって良かったんですけどね
1行プログラム(255文字以内)とかありましたし、プログラムが掲載されるので
メッセージやマップデータを圧縮・暗号化とか結構色々なテクニックが駆使されてたりで・・・
ムック本での復活・・・いいですね、やって欲しいですね
>BCI−3eさん
今はプログラム系の雑誌は無いかもしれませんよ
確かC言語マガジンも休刊したとか
まぁ、自分の知ってるプログラム系雑誌はベーマガにMSXファン・MSXマガジン・C言語マガジン
の4誌だけなのであまりあてにはなりませんけど
262ポイント を手に入れた。
|
|
|
|
|
Name: ステハン ..ぴよぴよ(18ポイント)
Date: 2008/08/05(火) 01:06
No:19651
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
いつもはROMしてる者ですがしょっちゅうみてます。
とりあえずBCI-3eさんは名前を統一したらいかがでしょうか?
誰がどうみてもROLさんと同一人物ですよ?
別に文句をつける訳では無いのですが、釣られてみました。
18ポイント を手に入れた。
|
|
|
|
|
Name: ROL ..中級者(10,539ポイント)
Date: 2008/08/05(火) 11:32
No:19661
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
ステハンさん、それは文脈が同じと言う意味にとれそうですよ〜。
私、PC暦そんなに長く無いし、チャットやメールもほとんどしないし。
でも、C始めてBCI-3eに会ってからチャットやメールを始めたんです。
なので、BCI-3eさんの影響が大きすぎて文章が似ているのかもしれませんね^^;
実を言うと本ばかり読んでる陰気な子だったので
しゃべらないから自分らしい言葉が無いのかも><
それだけ私にとってBCI-3eさんは大きな存在と言えます。(多分;)
それと、ココは雑談スレです。違う意見を言う場合新しいスレッドを立ててください。
それから、つられるって言われてますが、私釣竿なんかもってないもん;
197ポイント を手に入れた。
|
|
|
|
|
Name: ステハン ..ぴよぴよ(175ポイント)
Date: 2008/08/05(火) 11:47
No:19662
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
〉雑談スレです。
ならば構わないのでは?
まぁ、可能性で言えば、0ではありませんよね。夏休みに二人とも家にパソコンあるだろうに高校へ行ってたまたま同じPCを使い投稿したと…。
以前ROLさんは夕方の17時40分にこれから徹夜で勉強しますと言いましたが…学校で勉強する予定だったのでしょうか?
二人してROLなんたらと言うサイトが感動したと言い此処で宣伝…見ていて痛々しいです。
釣りでないなら尚更。
157ポイント を手に入れた。
|
|
|
|
|
Name: BCI-3e ..上級者(15,585ポイント)
Date: 2008/08/05(火) 12:06
No:19663
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
あの〜〜〜〜〜
私が雑談スレ立てた理由ご覧になられましたでしょうか?
皆さんのCやプログラムなどの思い出を書き込んでほしいと思い
このスレを立てました。それに対してここは思い出を語り合う場では無い。
とおっしゃるならまだしも、この人、同一人物に見えるから統一しろ
と言った書き込みはスレ主からして願い下げです。意見が言いたいのであれば
新しいスレを立てるなり、管理人様に通告するなり好きにやってください。
思い出話を書き込んでくださった皆様。
このようなトラブルスレになってしまいごめんなさい。
また何か面白い話があればどんどん書き込んでください。
皆さんからしたら雑談でも私のような素人からしたらものすごく
貴重な体験談になります。また、たわいの無い会話で新人さんも
入りやすくなるように思います。
ROLの宣伝に対しては少し過剰でしたでしょうかね;
反省とともにお詫び申し上げます。
このような解答で理解していただけましたでしょうか、ステハンさん。
私はこの掲示板の皆様が、その時に合った対応をしているからこそ
この状況が維持できているのだと思います。楽しいスレを不愉快にする
書き込みは掲示板維持にものすごく大きな影響を及ぼしかねません。
今後、場に合った意見や会話をなさるよう、お願い申し上げます。
506ポイント を手に入れた。
|
|
|
|
|
Name: ステハン ..ぴよぴよ(0ポイント)
Date: 2008/08/05(火) 12:20
No:19664
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
〉BCI-3eさん
わかりました。
ただ、私が言いたかったことはROLさんとBCI-3eさんが混在していて、不愉快であった事です。
私としては管理人ではないのであなた達が1人であろうが何だろうが大して興味はありません。
他の参加者様、並びに管理人様、私の発言で不愉快にさせてしまったとしたならば申し訳ありません。
BCI-3eさん、ROLさんも別人であるという設定であるならば(別人であっても)以後、混在するような事は無いようにお願いします。私はこれ以上は発言しませんので。
175ポイント を落としてしまった。
|
|
|
|
|
Name: Haru ..中級者(10,080ポイント)
Date: 2008/08/05(火) 12:58
No:19666
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
さて、空気が悪くなる前に(もう手遅れ?)私の浅いC言語を
始めたきっかけでも話しましょう!
私は大学6年間も通い(院ではないです)やっとこさ、卒業したダメ学生でした。
就職先としては実家の雀荘(なんで大学いったんだろ・・・笑)を継ぐ予定
だったのですが、、、将来の結婚の事などを考えると・・・。ってな理由で、
何故か文系の私が今の会社に!
事前に勉強もしていなかった為、ほとんど0からのスタートで四苦八苦しながら、
毎日が勉強の日々です。
それでも、必死にがんばっています!
聞かれてないですが、私のHNの由来は「春からC言語始めます」の「春」という
単語をそのまま使った安易なものです(^^;
75ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(103,619ポイント)
Date: 2008/08/05(火) 13:17
No:19670
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>>Haruさん
意外かもしれませんが、理数系よりも文系の人の方が多かったりするんですよね…この仕事w
うちの会社の先輩も記者志望だったのに気付いたらPGやってたとか…w
6ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..中級者(10,251ポイント)
Date: 2008/08/05(火) 13:23
No:19672
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>バグさん
みたいですね!!
私も入社してから、知りました!「文系 SE」なんて、検索すると
結構HITすることにびっくりしました(@@;
私がCをそれなりに理解できるようになったら、
「文系でもわかる!!C言語入門」なんて本出したら売れるのでは・・・?
とか、浅はかな考えをしていたら、もうとっくに出てました・・・orz
132ポイント を手に入れた。
|
|
|
|
|
Name: ゆーずぃ ..ぴよぴよ(223ポイント)
Date: 2008/08/05(火) 14:50
No:19682
|
|
Title: 廃刊続きとは言われますが…
|
|
今更な話題で申し訳ないのですが^^;
私も先輩に聞いて昔は様々なプログラミング雑誌(このような表現でいいのかはわかりませんが;)が発刊されていたと聞きました。そして皆様がおっしゃるように廃刊されていったということも聞きました。
そんな中何気なく本屋で見つけた本は、皆様がお探しの、恐らく日本で現在発刊されている唯一のプログラミング雑誌!その名も
「日経ソフトウェア」!
名前からするとプログラミングは関係なさそうですが、内容はこちらのサイトの趣旨とも概ね一致する、初心者を対象としたC、Java、Ruby、HTTP等々幅広く扱う総合プログラム入門雑誌といったところでした。どうも見た感じ3ヵ月程前に発刊されたばかりのようです。
是非一度お目通しあれ♪です^^
57ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..中級者(9,678ポイント)
Date: 2008/08/05(火) 15:00
No:19683
|
|
Title: Re:廃刊続きとは言われますが…
|
|
1998年からあります。
私はもう卒業したつもりの雑誌ですが、良い雑誌だと思いますよ。
27ポイント を落としてしまった。
|
|
|
|
|
Name: BCI-3e ..上級者(15,640ポイント)
Date: 2008/08/05(火) 15:31
No:19685
|
|
Title: Re:廃刊続きとは言われますが…
|
|
それは興味深いですね^^
僕も本屋さんに直行しなければ!
こんな情報も初心者としてはありがたいです。
ドンドン書き込んでください^^
55ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..上級者(19,804ポイント)
Date: 2008/08/05(火) 16:43
No:19694
|
|
Title: Re:廃刊続きとは言われますが…
|
|
ちょっと間が空いてしまいましたが
> Haruさん
私見ですが自分の会社に毎年入ってくる後輩を見ていると、C言語をまったく知らない状態から
スタートした場合、理系PGの方がC言語に対する理解は早いのですが、文系PGの方がきちんと
整理されたきれいなプログラムを書いてくれる傾向があるように思います。
(個人の性格や資質によるところは大きいですが)
私が思うに文系PGは以下の点で理系PGよりも優れていると思います。
1.文章力がある
仕事でSE/PGをする場合、他人(お客さん、またはグループメンバ)が理解できるドキュメントが書け
ないと話になりませんので、その点において文系のほうが有利な気がします。
上にも書きましたがプログラムもCという言語を使った文章であるので、文章を書くように起承転結
がはっきりしたソースコードの方がレビューしやすいですしバグが少ないです。
技術的には高度でも当人にしか理解できないスパゲッティソースは不具合が多く低評価になる傾向が
あります。
2.コミュニケーション力がある
一人で仕事は出来ません。
他人(お客さん、またはグループメンバ)に自分の考えをうまく伝えられない、他人の意図がうまく
汲み取れない人はこの職業には向いていないように思います。
特に目上の人と会話する場合に敬語がキチンとつかえるかどうかも結構重要です。
どの業界(ゲーム、組み込み、Winアプリ、研究、etc..)にいてどんなものを作るかにもよりますが、
(私の経験上)数学的な知識はそれが必要になったときに勉強しても間に合う場合の方がほとんどなので、
理系よりも文系のほうが優秀な方が多いように思われます。
528ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..中級者(9,602ポイント)
Date: 2008/08/05(火) 17:02
No:19696
|
|
Title: Re:廃刊続きとは言われますが…
|
|
>Mistさん
>理系PGの方がC言語に対する理解は早いのですが、文系PGの方がきちんと
>整理されたきれいなプログラムを書いてくれる傾向があるように思います。
なるほど(^^;
私は綺麗に書けているかわかりませんが・・・(^^;
>私が思うに文系PGは以下の点で理系PGよりも優れていると思います。
>1.文章力がある
>2.コミュニケーション力がある
このように、理由まであげてもらえると、なんだか自分でもやれる気がしてきました!
>特に目上の人と会話する場合に敬語がキチンとつかえるかどうかも結構重要です。
敬語の方は体育会系なんで大丈夫です!!(本当か?)
まぁ、これはほとんどの職種で、必要なことですよね。
一般的な社会人としては問題ないレベルだと自分では思ってます。
>理系よりも文系のほうが優秀な方が多いように思われます。
優秀な側に入れるようになる為に頑張ります!!
ありがとうございました!!
468ポイント を落としてしまった。
|
|
|
|
|
Name: 翡翠 ..入門者(3,075ポイント)
Date: 2008/08/05(火) 17:15
No:19698
|
|
Title: Re:廃刊続きとは言われますが…
|
|
>Mistさん
そうなんですか……
理系の私としては、ちょっと悲しい……
と、いきなり出てきてすみません
私がプログラミングをしたいと思ったのは、高校生になってからでした。目的はただ『ゲームを作りたいから』でしたね
小学生の時からずっと、物語を作りたいと思っていたのですが、ゲーマーでもあった私は、『あぁ、だったらゲームを作ればいいんじゃない?』みたいな感じで、プログラムの勉強を始めました
と言っても、C言語を始めたのは今年度からで、高校時代はだらだらと過ごし、触れた言語と言えばHSPでした。ただ、HSPを使ったおかげで、プログラミングに慣れることは出来ましたけどね
とまあ、こんな感じです
182ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..上級者(19,902ポイント)
Date: 2008/08/05(火) 17:29
No:19700
|
|
Title: Re:廃刊続きとは言われますが…
|
|
> 翡翠さん
あくまで私の経験上での話ですのお気になさらないでください。
理系でも優秀な方はたくさんおられます。
結局のところ
> 個人の性格や資質によるところは大きいですが
なのです。
かく言う私もバリバリ理系です(^-^;
お話しするのは得意なんですが、メールとかドキュメントが苦手ですorz
98ポイント を手に入れた。
|
|
|
|
|
Name: 翡翠 ..入門者(3,526ポイント)
Date: 2008/08/05(火) 18:36
No:19710
|
|
Title: Re:廃刊続きとは言われますが…
|
|
>Mistさん
ですよね!
やっぱり、個人の資質かぁ……
性格ばっかりは、そう簡単に治りませんからねぇ……
私も、人にわかりやすく説明するのとかは苦手です
どうしても、自分の頭の中の事を伝えられないんですよね
85ポイント を手に入れた。
|
|
|
|
|
Name: 名無し ..入門者(4,628ポイント)
Date: 2008/08/07(木) 01:13
No:19883
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
管理人さんへ
> いつもはROMしてる者ですがしょっちゅうみてます。
> とりあえずBCI-3eさんは名前を統一したらいかがでしょうか?
> 誰がどうみてもROLさんと同一人物ですよ?
> 別に文句をつける訳では無いのですが、釣られてみました。
BCI-3e
ROL
同一人物ですよね?(笑)
*清く正しいこの掲示板で、嘘つきな人を放っておいて良いのですか?
前々から白々しい演技して、一人二役演じるのは見るに耐えません。
僕もステハンさんの意見に賛成です。
名前を統一される事をオススメします。
> あの〜〜〜〜〜
> 私が雑談スレ立てた理由ご覧になられましたでしょうか?
> 皆さんのCやプログラムなどの思い出を書き込んでほしいと思い
> このスレを立てました。それに対してここは思い出を語り合う場では無い。
> とおっしゃるならまだしも、この人、同一人物に見えるから統一しろ
> と言った書き込みはスレ主からして願い下げです。意見が言いたいのであれば
> 新しいスレを立てるなり、管理人様に通告するなり好きにやってください。
> 思い出話を書き込んでくださった皆様。
> このようなトラブルスレになってしまいごめんなさい。
> また何か面白い話があればどんどん書き込んでください。
> 皆さんからしたら雑談でも私のような素人からしたらものすごく
> 貴重な体験談になります。また、たわいの無い会話で新人さんも
> 入りやすくなるように思います。
貴方本当に迷惑ですよ?新人さんも笑ってますよ?
> ROLの宣伝に対しては少し過剰でしたでしょうかね;
> 反省とともにお詫び申し上げます。
変なゲーム宣伝しないで下さい。
> このような解答で理解していただけましたでしょうか、ステハンさん。
> 私はこの掲示板の皆様が、その時に合った対応をしているからこそ
> この状況が維持できているのだと思います。楽しいスレを不愉快にする
> 書き込みは掲示板維持にものすごく大きな影響を及ぼしかねません。
> 今後、場に合った意見や会話をなさるよう、お願い申し上げます。
結局掲示板荒らしたのは貴方でしょう?
147ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,111ポイント)
Date: 2008/08/07(木) 01:36
No:19884
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
名無しさん、ご意見ありがとうございます。
すみません、気分を害されたようで。
ただこの件は、任せていただけないでしょうか。
>*清く正しいこの掲示板で、嘘つきな人を放っておいて良いのですか?
今までこの掲示板が一番よい場・雰囲気・環境になるよう努力して来ました。
これからもその姿勢は変わりません。
私が全ての人にとっていい方法だと思えるような道を選択して運営していこうと思っています。
今回の件に限らず、もしも規約違反をされている方がいらっしゃるのならば
それを正していこうとする姿勢は以前もこれからも同じです。
また、この件をここでやり取りすると荒れかねませんので
>管理人さんへ
ということで、もし私宛へのメッセージでしたら今後はメールで送っていただけませんでしょうか。
私の名前をクリックしていただければメルアドが表示されます。
33ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..かけだし(1,303ポイント)
Date: 2008/08/08(金) 11:33
No:19988
|
|
Title: Re:ものすごい雑談ですが・・・・・
|
|
>理系文系
やっぱり文章力は必要ですよねぇ…プログラム書いてると痛感します。
ここに書き込むだけで10分くらいかかったりw
地道に注意しながら書くしかないんですかねぇ、スパゲッティコード対策。
59ポイント を手に入れた。
|
|
|
|
Name: toto ..ぴよぴよ(709ポイント)
Date: 2008/08/08(金) 02:14
No:19972
|
|
Title: 分割コンパイルがエラーが出てきて出来ません。
|
|
旧シューティングゲームの館の5章に出てくる分割コンパイルのやり方を試してみた所
「LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。」
という意味の分からないエラーが出てきてしまいます。色々と試してみたんですが解決できず。
結局、この意味が分からないまま時間だけが過ぎていっている状態です。
原因が分かる方、よろしければ知恵をお貸しください。
200ポイント を手に入れた。
|
|
|
|
Name: array ..上級者(15,164ポイント)
Date: 2008/08/08(金) 02:26
No:19974
|
|
Title: Re:分割コンパイルがエラーが出てきて出来ません。
|
|
このエラーを何度か見たことあるような気がするので、・・・それと、エラーをダブルクリックすると大半 エラー原因となっているファイル&行まで飛んでくれるんですが(これはダブルクリックしても飛んでくれないエラーでしたかね)
>LIBCMTD.lib(wincrt0.obj)
.objとエラーが出て、原因が分らないときはプロジェクトファイルの位置にあるDebugフォルダごと削除して再度デバッグすると以外とすんなり通る事があるのですがどうでしょうか?
195ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..上級者(23,062ポイント)
Date: 2008/08/08(金) 02:38
No:19976
|
|
Title: Re:分割コンパイルがエラーが出てきて出来ません。
|
|
Windowsプログラムとしてプロジェクトを作成していませんか?
当該プログラムはConsoleプログラムとしてプロジェクトを作成しなければなりません。
プロジェクトのプロパティに出力を変更する項目があるはずなので,それを変更しましょう。
エラーの原因はそのまんまで,WinMain関数が存在しないのが原因です。
# Windowsプログラムのエントリポイントです。
158ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..初心者(6,719ポイント)
Date: 2008/08/07(木) 18:01
No:19918
|
|
Title: 構文エラーというのがたくさん出ます
|
|
今龍神録の館13章まで来ているのですが以下のようなエラーメッセージが出ます。
1>------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1>コンパイルしています...
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>enemy.cpp
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2059: 構文エラー : ';'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>shot.cpp
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(34) : error C2143: 構文エラー : ';' が '||' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(34) : warning C4390: ';' : 制御が空の文が見つかりました。意図した記述でしょうか?
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(35) : error C2059: 構文エラー : ')'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(35) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2059: 構文エラー : ';'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(55) : error C2059: 構文エラー : ')'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(55) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>コードを生成中...
1>ビルドログは "file://d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\Debug\BuildLog.htm" に保存されました。
1>RyuJin - エラー 13、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ダウンロードした館のソースプロジェクトは正常にビルドできます。
何時間も確認しましたが、もとのソースプロジェクトと見比べてみても構文の打ち間違いは無いように思いました。
構文のエラー以外でこのようなエラーメッセージが出るのはどのような原因が考えられるでしょうか。
ソースコードをどこかで打ち損じているか、または打ち漏らしているのだとは思うのですが。
1,374ポイント を手に入れた。
|
|
|
|
Name: こめかみ ..初心者(6,671ポイント)
Date: 2008/08/07(木) 18:16
No:19921
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
>まずはソースを貼ってください。
すいません、でも長いですよ?
プロジェクトごとここに添付すればいいのでしょうか。
サーバーの容量とか、よくわかりませんが迷惑になりませんか?
48ポイント を落としてしまった。
|
|
|
|
|
Name: こめかみ ..初心者(7,529ポイント)
Date: 2008/08/07(木) 18:31
No:19923
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
void enter_shot(int i){
int j;
(59) for(j=0;j<SHOT_MAX;j++){//フラグのたって無いenemyを探す
if(shot[j].flag==0){//未使用の弾幕データがあれば
memset(&shot[j],0,sizeof(shot_t));//初期化して登録
shot[j].flag=1;//フラグを立てる
shot[j].knd=enemy[i].blknd;//弾の種類
shot[j].num=i;//num=どの敵から発射されたものか。
shot[j].cnt=0;
return;
}
}
}
void shot_calc(int n){
int i,max=0;
if(enemy[shot[n].num].flag!=1)//敵が倒されたら
shot[n].flag=2;//それ以上ショットを登録しないフラグに変える
for(i=0;i<SHOT_BULLET_MAX;i++){//n番目のデータの弾を計算
if(shot[n].bullet[i].flag>0){//?その弾が登録されていたら
shot[n].bullet[i].x+=cos(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
shot[n].bullet[i].y+=sin(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
shot[n].bullet[i].cnt++;
(34) if(shot[n].bullet[i].x<-50 || shot[n].bullet[i].y>FIELD_MAX_X+50) || shot[n].bullet[i].y<-50 ||
(35) shot[n].bullet[i].y>FIELD_MAX_Y+50){//画面外に外れたら
if(shot[n].bullet[i].till<shot[n].bullet[i].cnt)//最低消えない時間より長ければ
shot[n].bullet[i].flag=0;//消す
}
}
}
//現在表示中の弾がひとつでもあるかどうか調べる
for(i=0;i<SHOT_BULLET_MAX;i++)
if(shot[n].bullet[i].flag>0)
return;
if(enemy[shot[n].num].flag!=1){
shot[n].flag=0;//終了
enemy[shot[n].num].flag=0;
}
}
void shot_main(){
int i;
(53) for(i=0;i<SHOT_MAX;i++){//弾幕データ計算
//フラグが立っていて、設定した種類が間違っていなければ(オーバーフロー対策)
(55) if(shot[i].flag!=0 && 0<=shot[i].knd && shot[i].knd<SHOT_MAX){
shot_bullet[shot[i].knd](i);//.kndの弾幕計算関数を呼ぶ関数ポインタ
shot_calc(i);//i番目の弾幕を計算
shot[i].cnt++;
}
}
}
()の中の数字が行数です。
よろしくお願いします。
858ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(7,582ポイント)
Date: 2008/08/07(木) 18:48
No:19926
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
全角スペース見つかりませんでした。
念のため全角スペースで検索もかけてみましたが見つかりませんでした。
53ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(7,598ポイント)
Date: 2008/08/07(木) 18:57
No:19931
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
ありがとうございます。
(34)(35)行は括弧を直したらエラーじゃなくなりました。
16ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(6,881ポイント)
Date: 2008/08/07(木) 19:07
No:19934
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
現在のエラー状況です。
1>------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1>コンパイルしています...
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>enemy.cpp
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2059: 構文エラー : ';'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\enemy.cpp(59) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>shot.cpp
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2059: 構文エラー : ';'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が ')' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(53) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(55) : error C2059: 構文エラー : ')'
1>d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\mydat\sorce\shot.cpp(55) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>コードを生成中...
1>ビルドログは "file://d:\ゲームプログラミングの館\project\龍神録プロジェクト\1章\Debug\BuildLog.htm" に保存されました。
1>RyuJin - エラー 10、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
直ってません。
717ポイント を落としてしまった。
|
|
|
|
|
Name: 御津凪 ..ぴよぴよ(516ポイント)
Date: 2008/08/07(木) 19:13
No:19936
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
SHOT_MAX はきちんと定義されているのでしょうか?
エラーの共通点がそこにあるようですが。
34ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,308ポイント)
Date: 2008/08/07(木) 19:15
No:19937
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
とりあえずvoid enter_shot(int i)関数に間違いはありません。
一字一句確認しましたが、そこにエラーが出る原因は無いと思います。
そうなると、それより上とかの括弧の対応があってないとかでしょうか。
閉じ括弧を入力すると太字になりますよね。
その上の始まりの括弧太字を見れば対応が確認できますので、
対応がきちんとあっているか確認してください。
174ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(6,951ポイント)
Date: 2008/08/07(木) 19:17
No:19939
| 解決!
|
Title: Re:構文エラーというのがたくさん出ます
|
|
でっ出来ました!
ありがとうございます御津凪さん!
まさにそれでした。
SHOT_MAX
↓
SHOT_MAX 30
これで実行出来ました!
70ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(7,009ポイント)
Date: 2008/08/07(木) 19:20
No:19941
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
すみません管理人さん。
よもや数字そのものの定義忘れなんてご想像もつかなかったのでは無いでしょうか。
みなさんご迷惑おかけしました。ありがとうございました。
つぎはいよいよ弾幕の章なので楽しみです。
58ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(6,613ポイント)
Date: 2008/08/07(木) 20:18
No:19947
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
恒例のご報告と質問と提案です。
12章の
移動パターン1〜3,移動パターン7〜9
の、
"//登録された停滞時間だけして"
は、"//登録された時間だけ停滞して"。
直し忘れてましたよー。
13章の
shot_calc関数。今回の質問の中にもあったのですが。
//画面外に外れたら
↓
//画面から外れたら
もう出てこないかな。
これはいっぱい在ってどことはいえないのですが。
serchは
searchを略しているのでしょうか、略すほど手間も無さそうに感じますが。
でもkindもkndだし直さなくてもいいんじゃないですかね?
11章ではエクセル持ってない人のために
「OpenOffice.org」 ワープロや表計算などを含むフリーのオフィス統合環境
オススメしてみてはいかがでしょうか。
フリーソフトです。
ちょっと使ってみましたが動作も軽そうだし便利そうですよ。
最後に質問なんですが
質問1
//敵が画面から外れたら消す
if(enemy[i].x<-20 || FIELD_MAX_X+20<enemy[i].x || enemy[i].y<-20 || FIELD_MAX_Y+20<enemy[i].y)
//弾が画面から外れたら消す
if(shot[n].bullet[i].x<-50 || shot[n].bullet[i].x>FIELD_MAX_X+50 || shot[n].bullet[i].y<-50 || shot[n].bullet[i].y>FIELD_MAX_Y+50)
敵と弾の消滅判定が30づつ違うのはどういった意味なんでしょうか。
質問2
13章shot_calc関数の中の
if(shot[n].bullet[i].flag>0){//その弾が登録されていたら
フラグの管理は等価演算子でやるものだと思っていたのですが。
これはこの先、生きてくるのでしょうか
if(shot[n].bullet[i].flag==1){//その弾が登録されていたら
でもいいんですか?
一度に質問して迷惑だったらごめんなさい。
396ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,727ポイント)
Date: 2008/08/07(木) 20:53
No:19951
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
ご報告ありがとうございます。
そうですね〜最初からオープンオフィス使えばよかったですかね。
serchはsorceと同様スペルミスを長年使い続け、これが頭に染み付いています・・orz
>敵と弾の消滅判定が30づつ違うのはどういった意味なんでしょうか。
ホントは敵の画像サイズ、弾の画像サイズをそれぞれ持たせ、それを+するのが一番なのですが、
処理が増えて面倒だったので、こんないい加減になってます。
弾は大きなサイズがあるので、敵の大きさより大きくしてあります。
まぁ50+しておけば大丈夫だろうという超いい加減な値です。
>質問2
flagは取り決めを今後変えたとき、2にすることがあるかもしれません。
例えば敵は死ぬとフラグが2になりますよね。
その時、敵の処理がされなくなっては困ります。
そういう意味で一応処理は>0で判定して行うようにしてあります。
とりあえず今のところ敵以外は1以外フラグに値は入らないと思うので、
==1でも大丈夫だとは思います。
235ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..初心者(6,977ポイント)
Date: 2008/08/07(木) 22:10
No:19957
|
|
Title: Re:構文エラーというのがたくさん出ます
|
|
>弾は大きなサイズがあるので、敵の大きさより大きくしてあります。
なるほど。大弾のことを失念してました。
>例えば敵は死ぬとフラグが2になりますよね。
なるほどなるほど、地霊殿には一定ダメージで変化する弾が在りましたがそーいうのに使えるのかもしれないんですね。
詳しい解説ありがとうございました。
95ポイント を手に入れた。
|
|
|
|
Name: 柏 ..初心者(6,225ポイント)
Date: 2008/08/07(木) 12:05
No:19897
|
|
Title: にゅ〜っと出てくるレーザーを作るには? とその他
|
|
こんにちは。
まずは基本情報を。。。
VisualC++ 2005 Express Edition
DXライブラリを使用。
今回は2つ質問させて頂きたいことがあります。
まず一つ目なのですが、にゅ〜っと出てくるレーザーの作り方です。
動きのイメージとしてはこのような感じです。
(見づらくて申し訳ないですm(__)m)
<画像>
http://www1.axfc.net/uploader/Img/so/17728
<動画>
http://www1.axfc.net/uploader/He/so/127718
パスワード:ant
この場合レーザー(管理人さんが以前この掲示板で提供されていたものをこっそり使用させて頂いています)を0.4倍(2,48)にし、それを180個組み合わせて1つのレーザーを構成しているので、単純に時間をずらして発射していけば動画のようにうまい下手は別として一応にゅ〜っと見せる事には成功しています。ですが、180個で構成されているレーザーなのでたくさん撃つと当然処理が重くなります。常時fpsが20を切り、非常に弾が避けやすくなります^^;
そのため、レーザーを元の画像サイズのままにゅ〜っと出てくるように見せるにはどのようにすればいいでしょうか?
次に2つ目の質問ですが、画像のx方向のみのサイズの変更方法です。
まず、色々試してみた結果です。
始めに普段使っているDrawRotaGraphでは拡大率の指定のみなので、これだとx方向のみならずy方向の値も変わってしまいます。
次にDrawExtendGraphですが、これは左上と右下の座標を指定出来るので、90度×∞の方向に進む場合は綺麗に表示出来るのですが、斜めに進んで行く場合は角度の情報を持たないのでうまく表示出来ません。
次にDrawModiGraphなのですが、これは画像の4点の座標を指定できるので、斜めになってもx方向だけ拡大・縮小して表示することは出来ると思うのですが……4点の座標を指定しなければならないといことで、少々複雑になりそうな気がして敬遠しています。
まとめますと、
1.画像のx方向のサイズのみを拡大・縮小したい(y方向のサイズはそのまま)
2.その際、DrawModiGraph関数は複雑そうなので出来れば使いたくない(あくまでも"出来れば"です)
ということです。
恐らく表示したい画像を直接ペイントなりでリサイズしてやれば解決することだと思うのでそれほど深刻には考えていませんが、例えば時間ごとに伸縮を繰り返すレーザーを作ったりも出来るようになる(気持ち悪そうな動きですが。。。)と思いましたので、出来れば知っておきたいと思いました。
以上2点、アドバイス頂ければ幸いです。
動画・画像内の一部画像の著作権者様サイト名(閉鎖のため詳細不明)
KMAP
858ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(682,997ポイント)
Date: 2008/08/07(木) 13:26
No:19903
|
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
龍神録の館34章でレーザーの作り方紹介しています。
始点と終点の座標を渡せばそのレーザーが作れる仕様になっているので、
いくつも上書きする必要がありません。
もし上の選択肢から選ぶなら
DrawModiGraph
でしょうね。
角度情報、スピード、始点座標、カウンタ、レーザーの太さ
さえあれば、終点が計算できると思います(他にも変数はいるかもしれませんが)。
x=cos(angle)*spd*cnt
y=sin(angle)*spd*cnt
で終点が計算出来ますよね。表示すべき座標はそこから90度、太さ/2ほど方向転換した位置ですから
x1=cos(angle)*spd*cnt + cos(angle+PI/2)*(太さ/2)
y1=sin(angle)*spd*cnt + sin(angle+PI/2)*(太さ/2)
x2=cos(angle)*spd*cnt + cos(angle-PI/2)*(太さ/2)
y2=sin(angle)*spd*cnt + sin(angle-PI/2)*(太さ/2)
で計算出来ませんかね?
362ポイント を手に入れた。
|
|
|
|
|
Name: 柏 ..初心者(6,833ポイント)
Date: 2008/08/07(木) 13:48
No:19910
| 解決!
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
龍神録の館34章ではベクトルや行列が出ていたので敬遠していたのですが、じっくり見てみようと思います。
それで理解出来なければ……なんとかごまかして表示する方法を考えてみます^^;
DrawModiGraphを使う方法も難しそうですが、「複雑そうだから避ける」のはやめ、ない頭を働かせてやってみようと思います。
アドバイスありがとうございました。
時間をかけてもっと模索してみます。
191ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(683,333ポイント)
Date: 2008/08/07(木) 14:05
No:19912
|
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
とりあえず34章はよまなくても実装出来そうではないでしょうか?
始点と角度、スピード、カウンタ、レーザーの太さ
さえわかればレーザー全体の4点が計算できると思います。
終点は先ほど言った
x=cos(angle)*spd*cnt
y=sin(angle)*spd*cnt
ですから、レーザーの終点側の2点は、始点をxo,yoとすれば
x3=xo + cos(angle)*spd*cnt + cos(angle+PI/2)*(太さ/2)
y3=yo + sin(angle)*spd*cnt + sin(angle+PI/2)*(太さ/2)
x2=xo + cos(angle)*spd*cnt + cos(angle-PI/2)*(太さ/2)
y2=yo + sin(angle)*spd*cnt + sin(angle-PI/2)*(太さ/2)
となり、始点側の2点は
x0=xo + cos(angle+PI/2)*(太さ/2)
y0=yo + sin(angle+PI/2)*(太さ/2)
x1=xo + cos(angle-PI/2)*(太さ/2)
y1=yo + sin(angle-PI/2)*(太さ/2)
となるので、4点が求まりませんか?
レーザーの当たり判定はレーザーの中に「線分」を用意しておき、
その「線分と点との距離」を計算すればいい事になります。
420ポイント を手に入れた。
|
|
|
|
|
Name: 柏 ..初心者(7,266ポイント)
Date: 2008/08/07(木) 20:27
No:19948
| 解決!
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
なんだかんだで結局半日近く考えていました。。。
管理人さんの書いてくださった絵と説明で"考え方"自体は分かったのですが、式の使用方法がいまいち理解できなかったので、その理解できた"考え方"を基に自分なりに作る方法で落ち着きました。
そして、とりあえずDrawModiGraphを使う方法でレーザーを描画する事が出来るようにはなりました。複雑そうだと思っていましたが案外と単純だったので、早めに使っておけばよかったと後悔してます。。。
しかしちょっと前のスレにもありましたが、幅を1ピクセルにするとシャギーが出てきてしまいます。180度くらいまでは見た目にもなんとかごまかせる範囲なのですが、それ以上になると見るに耐えないレベルのシャギーが発生します。しかも何故か
PI2/360*x
のxの値が大きければ大きいほどシャギーが酷くなるという訳の分からない状況に…orz
単に僕の書いた式が変なだけかもしれませんが。
それでもとりあえずは幅1.5くらいなら影響を受けないようなので一応解決です。
あとはにゅ〜っと出てくるような処理を考えなければいけませんが……ここまで出来ればどうにかなるかなと楽観しています^^;
どうせまたモンモンと悩むんでしょうけど……w
34章は僕にとっては難しいという事が再確認出来ましたので、今後一切読みませんw(数学・物理苦手です...)
まぁ自分の理解できる範囲で工夫していこうかなと^^;
丁寧に絵での説明もしてくださりありがとうございました。
また一つ知識が増えた気がします。
433ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..伝説のハッカー(684,492ポイント)
Date: 2008/08/07(木) 20:43
No:19949
|
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
あまりに細い場合はどうしようもないですが、
バイリニア法での表示はしていますか?
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
とかけば出来ます。
>34章
実はあんな判定しなくても、線分と点との距離を計算したらいいだけという種あかしが上にしてあったりします・・。
|
|
|
|
|
Name: 柏 ..初心者(7,316ポイント)
Date: 2008/08/07(木) 21:06
No:19953
| 解決!
|
Title: Re:にゅ〜っと出てくるレーザーを作るには? とその他
|
|
バイリニア法での表示は恐らく出来ていると思います。
仕組みは分かりませんがネアレストと比べると全然違うんですね……。
50ポイント を手に入れた。
|
|
|
|
|