C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   処理軽減   
     ・[57712] バグ 
     ・[57713] yamataka 
     ・[57714] バグ 
     ・[57715] シエル 
     ・[57716] yamataka 
     ・[57767] ookami 
     ・[57770] yamataka 
   ばばぬき プログラム   
     ・[57727] 通りすがり 
     ・[57728] ぜらーちん 
     ・[57729] ぜらーちん 
     ・[57739] シエル 
   三角形アート   
     ・[57720] fatens 
     ・[57721] toyo 
     ・[57722] リク 
   改行   
     ・[57704] 蓮 
     ・[57705] TowaK 
     ・[57706] TowaK 
   無題   
     ・[57690] 蓮 
     ・[57695] Justy 
     ・[57697] 蓮 
     ・[57699] Justy 
     ・[57702] 蓮 
     ・[57703] 蓮 
   メモリの割り当てにつ ....   
     ・[57550] たかぎ 
     ・[57551] シエル 
     ・[57560] シエル 
     ・[57565] ぽこ 
     ・[57566] シエル 
     ・[57569] ぽこ 
     ・[57571] シエル 
     ・[57575] ぽこ 
     ・[57578] シエル 
     ・[57583] ISLe 
     ・[57591] 組木紙織 
     ・[57594] ぽこ 
     ・[57601] シエル 
     ・[57603] 組木紙織 
     ・[57620] ちょっと通りますよ 
     ・[57622] シエル 
     ・[57698] ぽこ 
   MAC   
     ・[57685] 初級者 
     ・[57686] ashitana 
     ・[57687] たかぎ 
     ・[57688] 蓮 
     ・[57692] ISLe 
     ・[57693] たかぎ 
   閏年の判別   
     ・[57510] fatens 
     ・[57513] 初級者 
     ・[57519] ナムアニクラウド 
     ・[57520] DecentLove 
     ・[57539] シエル 
     ・[57555] DecentLove 
     ・[57691] ナムアニクラウド 
   ピラミッドアートwhil ....   
     ・[57663] dic 
     ・[57664] シエル 
     ・[57666] ぜらーちん 
     ・[57667] QERA 
     ・[57668] リク 
     ・[57669] ちょっと通りますよ 
     ・[57672] リク 
     ・[57673] シエル 
     ・[57674] DVDM 
     ・[57675] ぜらーちん 
     ・[57677] リク 
     ・[57678] シエル 
     ・[57679] リク 
     ・[57680] dic 
   境界線付近の描画につ ....   
     ・[57624] ookami 
     ・[57625] シエル 
     ・[57626] ぬるぽ 
     ・[57627] ぬるぽ 
     ・[57628] へろり 
     ・[57630] シエル 
     ・[57637] DVDM 
     ・[57641] シエル 
     ・[57656] DVDM 
     ・[57660] シエル 
     ・[57665] スキマ妖怪 
     ・[57671] シエル 
   ファイルの移動処理   
     ・[57563] dic 
     ・[57573] ISLe 
     ・[57662] dic 
   変数初期化(XOR)に関し ....   
     ・[57606] シエル 
     ・[57610] toyo 
     ・[57614] たかぎ 
     ・[57615] ぜらーちん 
     ・[57618] たかぎ 
     ・[57659] softya 
   リボンインターフェー ....   
     ・[57657] softya 
     ・[57658] abc 
   ファイルの読み書き   
     ・[57617] シエル 
     ・[57619] ひよこん 
     ・[57621] バグ 
     ・[57623] シエル 
     ・[57629] ひよこん 
     ・[57631] シエル 
     ・[57632] Mist 
     ・[57633] toyo 
     ・[57634] ひよこん 
     ・[57635] ぜらーちん 
     ・[57636] バグ 
     ・[57638] ひよこん 
     ・[57639] ぜらーちん 
     ・[57640] シエル 
     ・[57642] ぜらーちん 
     ・[57643] ひよこん 
     ・[57644] バグ 
     ・[57645] ひよこん 
     ・[57646] シエル 
     ・[57647] バグ 
     ・[57648] ひよこん 
     ・[57650] シエル 
     ・[57651] ぜらーちん 
     ・[57652] ひよこん 
     ・[57653] バグ 
     ・[57654] ぜらーちん 
     ・[57655] ひよこん 
   ボスについて(50章 ....   
     ・[57540] シエル 
     ・[57547] かしも 
     ・[57548] ぜらーちん 
     ・[57549] シエル 
     ・[57553] jay 
     ・[57557] ぬるぽ 
     ・[57611] かしも 
   OpenGL ES での画像サ ....   
     ・[57595] Justy 
     ・[57597] 蓮 
     ・[57598] Justy 
     ・[57599] 蓮 
     ・[57609] 蓮 
   C言語・ピラミッドアー ....   
     ・[57572] ぽこ 
     ・[57577] Dixq (管理人) 
     ・[57579] Dixq (管理人) 
     ・[57581] lbfuvab 
     ・[57602] リク 
     ・[57607] バグ 
   OpenGL ESについて Ma ....   
     ・[57504] ookami 
     ・[57505] 蓮 
     ・[57506] ISLe 
     ・[57507] シエル 
     ・[57511] 蓮 
     ・[57512] 蓮 
     ・[57521] Justy 
     ・[57527] 蓮 
     ・[57543] シエル 
     ・[57585] Justy 
     ・[57592] 蓮 
   ループ内のcount++につ ....   
     ・[57570] ぽこ 
     ・[57576] SG 
     ・[57580] ぽこ 
     ・[57582] Dixq (管理人) 
     ・[57590] SG 
   変数について・・・   
     ・[57584] Dixq (管理人) 
     ・[57586] BRACK PENIKX 
     ・[57587] Dixq (管理人) 
     ・[57589] BRACK PENIKX 
   ユーザー定義関数につ ....   
     ・[57482] ookami 
     ・[57485] polpol 
     ・[57487] fatens 
     ・[57496] polpol 
     ・[57498] fatens 
     ・[57499] ookami 
     ・[57500] スキマ妖怪 
     ・[57502] ぜらーちん 
     ・[57503] ドラ 
     ・[57529] polpol 
     ・[57530] polpol 
     ・[57532] ぜらーちん 
     ・[57564] スキマ妖怪 
   Logについて   
     ・[57559] シエル 
     ・[57562] jay 
   円周率が出ない。。。   
     ・[57497] fatens 
     ・[57514] 初級者 
     ・[57524] パコネコ 
     ・[57525] 初級者 
     ・[57526] パコネコ 
     ・[57531] たいちう 
     ・[57552] QERA 
     ・[57554] 初級者 
     ・[57556] フリオ 
   プログラムが実行でき ....   
     ・[57537] たかぎ 
     ・[57538] シエル 
     ・[57541] ぜらーちん 
     ・[57544] nobita 
     ・[57545] 白い時空 
   リンクエラー   
     ・[57492] fatens 
     ・[57493] たかぎ 
     ・[57494] X 
     ・[57533] ぜらーちん 
     ・[57534] X 
   四聖龍神録の・・・   
     ・[57203] Dixq (管理人) 
     ・[57305] MASSA 
     ・[57320] Dixq (管理人) 
     ・[57348] ぬるぽ 
     ・[57523] MASSA 
   無題   
     ・[57222] パコネコ 
     ・[57223] 山崎 
     ・[57224] パコネコ 
     ・[57226] バグ 
     ・[57228] パコネコ 
     ・[57232] たかぎ 
     ・[57233] パコネコ 
     ・[57234] たかぎ 
     ・[57236] パコネコ 
     ・[57239] sizuma 
     ・[57241] パコネコ 
     ・[57242] がくせい 
     ・[57243] パコネコ 
     ・[57244] dic 
     ・[57245] やっくん 
     ・[57247] 御津凪 
     ・[57252] dic 
     ・[57253] ookami 
     ・[57254] パコネコ 
     ・[57257] だいちゃん 
     ・[57258] 御津凪 
     ・[57259] パコネコ 
     ・[57261] sizuma 
     ・[57266] 通りすがり 
     ・[57270] たかぎ 
     ・[57271] がくせい 
     ・[57272] パコネコ 
     ・[57273] たかぎ 
     ・[57274] パコネコ 
     ・[57275] たかぎ 
     ・[57276] パコネコ 
     ・[57277] たかぎ 
     ・[57281] パコネコ 
     ・[57284] がくせい 
     ・[57285] パコネコ 
     ・[57286] ookami 
     ・[57289] たかぎ 
     ・[57298] Dixq (管理人) 
     ・[57299] ぽこ 
     ・[57303] ぬるぽ 
     ・[57313] Dixq (管理人) 
     ・[57314] 初心者 
     ・[57316] Dixq (管理人) 
     ・[57322] たかぎ 
     ・[57325] ぽこ 
     ・[57326] Dixq (管理人) 
     ・[57349] Dixq (管理人) 
     ・[57350] たかぎ 
     ・[57382] ぽこ 
     ・[57516] がくせい 
     ・[57517] Dixq (管理人) 
     ・[57518] たかぎ 
     ・[57522] Dixq (管理人) 

Name: yamataka  ..ぴよぴよ(995ポイント)   Date: 2010/07/29(木) 09:18   No:57711       
Title: 処理軽減    
「画面上の全ての弾と自機が接触しているかを計算する」
のと
「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
その弾と自機が接触しているかを計算する](判定範囲=10)
では、どちらの方の処理が軽いですか?


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


Name: バグ  ..ハッカー(202,180ポイント)   Date: 2010/07/29(木) 09:29   No:57712     
Title: Re:処理軽減    
>>「画面上の全ての弾と自機が接触しているかを計算する」
>>のと

この処理は結局…

>>「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
>>弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
>>その弾と自機が接触しているかを計算する](判定範囲=10)
>>では、どちらの方の処理が軽いですか?

この処理と同意なのでは?
2段階に分ける意味が分からないのですが…?


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

Name: yamataka  ..かけだし(1,028ポイント)   Date: 2010/07/29(木) 09:42   No:57713 解決!     
Title: Re:処理軽減    
まさかの二つとも同じですか。

一つ目は、画面上の弾全てを計算。
二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。
ということだったのですが、
まさか同じだったとは思いませんでした。

ありがとうございました。 編集済み


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

Name: バグ  ..ハッカー(202,262ポイント)   Date: 2010/07/29(木) 09:50   No:57714     
Title: Re:処理軽減    
自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
ということは、結局全ての弾との距離を計算する訳だから、分けると二度手間なんじゃないかな…と思ったんです。

あぁ…でも、当たり判定の計算方法によってはそうとも言い切れないのかな?(^_^;)


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

Name: シエル  ..プログラマー(37,638ポイント)   Date: 2010/07/29(木) 10:02   No:57715     
Title: Re:処理軽減    
>>二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。

まずこれを判定する時間が必要になるし、またあなたの当たり判定計算法がどうなのか
知らないので、何とも言えません。
実測が一番でしょう。


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

Name: yamataka  ..かけだし(1,134ポイント)   Date: 2010/07/29(木) 10:06   No:57716     
Title: Re:処理軽減    
> 自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
いえ、自機と全ての敵弾の座標を大小関係(>,<)で判定して、(>,<は三平方の定理で距離を計算するより軽いと思ったので)
真だったら三平方の定理(だっけ?)で真だった敵弾との距離を計算して被弾しているか出します。 編集済み


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

Name: ookami  ..プログラマー(37,486ポイント)   Date: 2010/07/29(木) 19:02   No:57767     
Title: Re:処理軽減    
どちらが速いかは処理系依存ですね。

> 判定範囲=10

くらいなら、
後者の前半部分、

「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら」

だけで判定するというのはいかがでしょう?


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

Name: yamataka  ..かけだし(1,160ポイント)   Date: 2010/07/29(木) 20:25   No:57770     
Title: Re:処理軽減    
そうですか、やめておいた方がいいんですね。

バグさん、シエルさん、ookamiさん有り難うございました。


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



Name: マホ  ..かけだし(1,144ポイント)   Date: 2010/07/29(木) 15:34   No:57726       
Title: ばばぬき プログラム    
下は、ばばぬきのプログラムなんですが…
これに・人数の変更・場を盛り上げるメッセージ(会話、独り言?)を追加したいです。
どうすればいいのかまったくわからないので教えてほしいです。
お願いします!!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

char card_name[5][9]={{"◆"},{"■"},{"△"},{"▽"},{"×"}};

void swap(int card[], int i){//cardのi番目と乱数番目のカードを入れ替える
    int r,k;
    r=rand()%53;      //ランダムな数を作る
    k=card[i];        //現在のi番目のカード情報を保存
    card[i] = card[r];//r番目のカード情報をi番目のカード情報に入れる
    card[r]=k;        //i番目のカード情報をr番目のカード情報に入れる
}

void show_card_detail(int p){//pのカードの情報を表示
    printf("%s",card_name[p/13]);//マーク表示
    if(p!=52)                    //ババじゃなかったら
        printf("%-2d",p%13+1);   //数も表示
    else
        printf("  ");
}

void drop_card(int p[]){                     //同じ組のカードを捨てる
    int i,j;
    for(i=0;i<28;i++){                       //1人の最大カード枚数
        if(p[i]==-1 || p[i]==52)continue;    //カードが無いかババなら
        for(j=i+1;j<28;j++){                 //次のカードから最後までチェック
            if(p[j]==-1 || p[j]==52)continue;//カードが無いかババなら
            if(p[i]%13==p[j]%13){            //数が揃ったら
                show_card_detail(p[i]) , printf("と");
                show_card_detail(p[j]) , printf("を捨てた\n");
                p[i]=-1;                     //捨てる
                p[j]=-1;                     //捨てる
                break;
            }
        }
    }
}

void show_card(int p[2][28]){                 //手持ちのカードを見せる
    printf("\n");
    for(int j=0;j<2;j++){
        printf("プレイヤー%dの手札\n",j+1);
        for(int i=0;i<28;i++){                //1人の最大カード枚数
            if(p[j][i]==-1)continue;          //カードが無いなら
            show_card_detail(p[j][i]) , printf(" ");
        }
        printf("\n");
    }
}

void get_card(int player[2][28], int j){   //相手のカードから一枚引く
    int i,r;
    while(1){
        r=rand()%28;                       //相手のカードからランダムに
        if(player[(j+1)%2][r]==-1)continue;//引くはずのカードが無ければ
        else break;                        //あればbreak;
    }
    /*この(j+1)%2がポイント。次の相手を+1として表し、%によってループしている*/
    for(i=0;i<28;i++){//自分の空いているカード情報に格納する
        if(player[j][i]==-1){
            player[j][i] = player[(j+1)%2][r];      //相手から引いたカードを自分のカードに
            player[(j+1)%2][r] = -1;                //引かれた相手のカードは無しに
            printf("\nプレイヤー%dはプレイヤー%dから",j+1,(j+1)%2+1);
            show_card_detail(player[j][i]) , printf("を引いた。\n");
            break;
        }
    }
}

int check_card(int p[28]){//手札にまだカードがあるか。あるなら0、無いなら-1が返る
    int i;
    for(i=0;i<28;i++)
        if(p[i]!=-1)
            return 0;
    return -1;
}

int main(void){
    int i,j,card[53],player[2][28];
    char s;
    
    srand((unsigned)time(NULL));

    memset(player[0],-1,sizeof(int)*28);//カード情報の初期化
    memset(player[1],-1,sizeof(int)*28);//カード情報の初期化

    for(i=0;i<53;i++)
        card[i]=i;               //53種類のカード情報を入れる
    for(i=0;i<53;i++)
        swap(card,i);            //シャッフルする
    for(i=0;i<53;i++)
        player[i%2][i/2]=card[i];//配る
    for(j=0;j<2;j++)
        drop_card(player[j]);    //同じ組を捨てる

    printf("\n\n*****ゲームスタート*****\n\n");
    
    show_card(player);           //カード情報を見せる
    while(1){                    //ゲームが終わるまでループ
        for(j=0;j<2;j++){        //2人分ループ
            get_card(player, j); //相手からカードを引く
            drop_card(player[j]);//合ったカードを捨てる
            if(check_card(player[j])==-1)//終わったら抜ける
                goto ex;
            show_card(player);   //カードを見せる
            scanf("%c",&s);      //待機
        }
    }

ex:
    printf("\nゲーム終了\nプレイヤー%dの勝ち\n\n",j+1);

    return 0;
}


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


Name: 通りすがり  ..上級者(22,004ポイント)   Date: 2010/07/29(木) 15:42   No:57727     
Title: Re:ばばぬき プログラム    
まず、これは自分で作ったプログラムですか?
それとも課題などで配布されたものですか?


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

Name: ぜらーちん  ..入門者(3,714ポイント)   Date: 2010/07/29(木) 15:44   No:57728     
Title: Re:ばばぬき プログラム    
会話に関しては

ペアが出来た後に、残り枚数をチェックして、
残り枚数が3枚とかになったら、適当な台詞を入れるとかはどうですか?

人数追加に関してはここまで作成しているのであれば、
プレイヤーの二次元配列を変更して、配るときも割る数を人数分に変更したらよいのではないでしょうか?


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

Name: ぜらーちん  ..入門者(3,843ポイント)   Date: 2010/07/29(木) 15:47   No:57729     
Title: Re:ばばぬき プログラム    
書き忘れましたが、
プログラムを詳しく見てないので分かりませんが、配るときや処理も変わるでしょうし(多分

goto文は出来るだけ使わないほうがいいですよ
最も、絶対に使うなではなくて必要に応じては使ってもいいとは思いますが
まずは使わない方向で作成したほうがいいと思います。

というよりもこのプログラムならbreakでいいんじゃないかな・・?


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

Name: シエル  ..プログラマー(37,866ポイント)   Date: 2010/07/29(木) 16:41   No:57739     
Title: Re:ばばぬき プログラム    
この程度のコードを作れたのであれば、ある程度のコードは書けるでしょう。
一度自分が考えたコードを提示してみてください。
まさか、課題じゃないですよね?


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



Name: リク  ..初心者(8,561ポイント)   Date: 2010/07/29(木) 14:08   No:57719       
Title: 三角形アート    
こんにちは。皆様、昨日は、大変お世話になりました。そして、今日も訪問させていただきました。
昨日の応用だと思いながらも、
while→for文のピラミッドアート、三角形でまた引っかかってしまいました。
while文の文から抜粋して、それなりに考えてみたといいますか、同じ位置に並ばせてみたのですが・・・アドバイスお願いいたします。

                         *
                         **
                         ***
                         ****
                         *****
                         ******
                昨日の四角形for文の下に作ってみました。

        #include<stdio.h>
        void main(void)
   {
        int gyou,retu,atai;
        printf("数字を入力してください");
        scanf("%d",&atai); 
        for(gyou=0;gyou<atai;gyou++)
        {
                  for(retu=0;retu<atai;retu++)
                  {
                          printf("*");
                  }
                  printf("\n");
        }

   ココからです→ int dan,kosuu;
        printf("数字を入力してください");
        rewind(stdin);
        scanf("%d",&atai);
        for(gyou=0; gyou<atai; gyou++;dan--)
        {
                  for(kosuu=dan; kosuu<atai;kosuu++)
                  {
                          printf("*");
                  }
                          printf("\n");
        }
}

コンパイルしています...
for.cpp

c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。
c:\users\\documents\\\\for.cpp(19) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' の宣言を確認してください。
c:\users\documents\\\\.cpp(20) : error C2146: 構文エラー : ')' が、識別子 'dan' の前に必要です。
c:\users\documents\\\.cpp(20) : error C2059: 構文エラー : ';'
c:\users\documents\\\\.cpp(20) : error C2059: 構文エラー : ')'
c:\users\documents\\\\.cpp(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
ビルドログは "file://c:\Users\\Documents\\\\Debug\BuildLog.htm" に保存されました。
for版 - エラー 4、警告 2
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

実行結果の場所を見てみたのですが、{などはチェックしたのですが・・・
エラーが表示されてしまいました。


今回、while文をfor文に変えたときに、
     #include<stdio.h>
     void main(void)
   {
     int dan,kosuu;
    printf("数字を入力してください");
    rewind(stdin);
    scanf("%d",&atai);
    gyou=0;
    dan=atai-1;
    while(gyou<atai)
     {
          kosuu=dan;
       while(kosuu<atai)
      {
        printf("*");            
       kosuu++;
      }
       printf("\n");
        gyou++;
        dan--;
     }
    }


rewind(stdin)とdan--;が今回、四角形と違い困った点です。

上の三角形while文をfor文に自分なりにしてみました。(#include省略します。)


    int dan,kosuu;
        printf("数字を入力してください");
        rewind(stdin); →このrewind(stdin)がwhile文と同じ位置でいいのかに困りました。    
    scanf("%d",&atai);
  for(gyou=0; gyou<atai; gyou++;dan--) →前回の四角形と違いdan--をこの位置でいいのか困りました。
    {
             for(kosuu=dan; kosuu<atai;kosuu++)
                  {
                          printf("*");
                  }
                          printf("\n");
  }

とても長い文章で申し訳ありません。アドバイスしていただけると助かります。


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


Name: fatens  ..上級者(16,652ポイント)   Date: 2010/07/29(木) 14:53   No:57720     
Title: Re:三角形アート    
>for(gyou=0; gyou<atai; gyou++;dan--)

for 文の中にセミコロン(;)は2回しか入りません。


とりあえず、三角形のみのプログラムにして、正しいインデントで投稿しなおしてください。
あと、rewind(stdin)はいりません。



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

Name: toyo  ..熟練のプログラマー(54,838ポイント)   Date: 2010/07/29(木) 14:57   No:57721     
Title: Re:三角形アート    
for(gyou=0; gyou<atai; gyou++;dan--) 
でセミコロンが3個使われているのが間違いです
forでは ; は2個しか使いません
複数の処理を行いたい場合は , コンマで区切ります
for(gyou=0; gyou<atai; gyou++, dan--) 
ならエラーにならないはずです
でもdanの役割は何でしょう
danに値が代入されていないのもまずいです



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

Name: リク  ..初心者(8,599ポイント)   Date: 2010/07/29(木) 15:00   No:57722 解決!     
Title: Re:三角形アート    
長い投稿でしたので、次は三角形の文のみにします。

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



Name: TowaK  ..ぴよぴよ(213ポイント)   Date: 2010/07/29(木) 04:20   No:57701       
Title: 改行    
はじめて質問させていただきますTowaKです。
問題のソースは下にあるのですが……。


#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine, int nCmdShow )
{
    SetMainWindowText("SnowDome");
    ChangeWindowMode(TRUE);
    if(DxLib_Init()==-1) return -1;
    SetDrawScreen(DX_SCREEN_BACK);
    int bgm,menu=0,white,back; //1:最初から 2:続きから 3:Special 4:EXIT
    bgm=LoadMusicMem("星の雫 -2000-.gsd"); ChangeVolumeSoundMem(100,bgm);
    white=GetColor(0,0,0);
    PlaySoundMem(bgm,DX_PLAYTYPE_LOOP);
    SetDrawScreen(DX_SCREEN_BACK);
    back=LoadGraph("title.bmp");


    while(1){
        ClsDrawScreen();
        DrawGraph(0,0,back,FALSE);
        if (menu==0){
        DrawFormatString(150,200,white,"■New\n Load\n Special\n Exit");
        if(CheckHitKey(KEY_INPUT_RETURN)==1)
            break;
    }
    if (menu==1){
        DrawFormatString(150,200,white," New\n■Load\n Special\n Exit");
        if (CheckHitKey(KEY_INPUT_RETURN)==1)
            break;
    }
    if (menu==2){
        DrawFormatString(150,200,white," New\n Load\n■Special\n Exit");
        if (CheckHitKey(KEY_INPUT_RETURN)==1)
            break;
    }
    if (menu==3){
        DrawFormatString(150,200,white," New\n Load\n Special\n■Exit");
        if (CheckHitKey(KEY_INPUT_RETURN)==1)
            break;
    }
    if ((CheckHitKey(KEY_INPUT_UP)==1)&&(menu<3))
        menu--;
    if ((CheckHitKey(KEY_INPUT_DOWN)==1)&&(menu>0))
        menu++;
    ScreenFlip();
    WaitTimer(250);
    if (ProcessMessage()==-1)
        break;
    if (CheckHitKey(KEY_INPUT_ESCAPE)==1)
        break;
}
    end:
    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                // ソフトの終了 
}


といったふうにメニューの選択をできるようにした(つもりな)のですが、どうも、改行が出来ていないらしく、\nの部分に変なマークが出るだけで改行出来ていません。
まだ現段階では試し状態なので、どの選択をしてもbreakするようにしています。
どこが悪いのか、ご教授いただければ幸いです。
使用コンパイラはVC++2010で、DXライブラリを使っています。 編集済み


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


Name:  ..入門者(2,518ポイント)   Date: 2010/07/29(木) 05:11   No:57704     
Title: Re:改行    
DrawFormatStringって改行できましたっけ?
多分、出来なかった気がします・・・。
間違ってたらすみません。

#define FONT_SIZE 16

//フォントサイズのセット

y座標系に+FONT_SIZEすれば改行してるように見えると思います。


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

Name: TowaK  ..ぴよぴよ(263ポイント)   Date: 2010/07/29(木) 05:26   No:57705     
Title: Re:改行    
お聞きした方法を試してみると、見事開業することに成功しました!
ありがとうございました。

しかし、方向キーで選択しても、なぜかメニューのカーソルが移動しないのです^^;
どなたかよろしければ、そちらの方もご教授願えませんか?


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

Name: TowaK  ..ぴよぴよ(399ポイント)   Date: 2010/07/29(木) 05:37   No:57706 解決!     
Title: Re:改行    
自己解決できました。

  if ((CheckHitKey(KEY_INPUT_UP)==1)&&(menu<3)) 
        menu--; 
  if ((CheckHitKey(KEY_INPUT_DOWN)==1)&&(menu>0))

のmenu>0とmrnu<3が反対になっていたみたいです。
これで、解決とさせていただきたいと思います。
ありがとうございました。


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



Name:  ..かけだし(2,160ポイント)   Date: 2010/07/28(水) 22:57   No:57689       
Title: 無題    
下記で質問させて頂いた者です。
http://www.play21.jp/board/formz.cgi?action=res&resno=57501&page=&id=dixq&rln=57592

数日の間に3回も質問してすみません。

iPhoneアプリをOpenGL ESで開発をしていて
URLのソースを使ってテクスチャの読み込みをしてます。
http://github.com/sazameki/opengl-texture-loader/downloads

テクスチャを読み込む際に範囲を指定して読み込みたいのですが
このようなことは難しいのでしょうか?
GLuint tex = loadTexture( ~~ , 0.0f, 0.0f, 0.5f, 0.5f );
みたいな感じでしたいのですが・・・。

またこのソースは何のライブラリなのでしょうか?
オリジナルで作ったライブラリを公開する際に使う場合
連絡する必要があると思うのですが下記の人でいいのですよね?
http://sazameki.jp/about/author/


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


Name:  ..かけだし(2,193ポイント)   Date: 2010/07/28(水) 22:58   No:57690     
Title: Re:無題    
無題で投稿してしまいすみません。
タイトルは「OpenGL ESでの範囲指定でのテクスチャの読み込み」でお願いします。


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

Name: Justy  ..伝説なるハッカー(560,134ポイント)   Date: 2010/07/29(木) 00:29   No:57695     
Title: Re:無題    
>範囲を指定して読み込みたいのですが 
 普通は表示するときにUVで範囲を指定して表示しますが、本当に読み込み時に指定しておく必要があるのでしょうか?
 まずは表示時に指定する方向で検討してみて下さい。

 どうしても読み込み時に指定する必要があるのなら、SZGLLoadTexture関数等に手を入れて画像の特定範囲だけを
修正するといいでしょう。

 小さくしたいサイズ分の(切り出す為だけの)グラフィックスコンテキストを作って (UIGraphicsBeginImageContext)、
フルサイズの画像(UIImage)の drawInRectメソッドで切り出したい部分を描画し、
UIGraphicsGetImageFromCurrentImageContextで描画した画像を UIImageで取り出します。

 あとはこの UIImageを使ってテクスチャ処理をするよう SZGLTextureLoader.mを書き換えれば
できるんじゃないかと思います。



>またこのソースは何のライブラリなのでしょうか?
 一個人が作った iPhone用のライブラリです。


>公開する際に使う場合 連絡する必要があると思うのですが
 Public Domain扱いで公開されているので特に連絡する必要はありません。

sazameki's opengl-texture-loader at master - GitHub
http://github.com/sazameki/opengl-texture-loader
http://github.com/sazameki/opengl-texture-loader/blob/master/README

 
Public domain softwareとは - OSS用語 Weblio辞書
http://www.weblio.jp/content/Public+domain+software


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

Name:  ..かけだし(2,375ポイント)   Date: 2010/07/29(木) 01:11   No:57697     
Title: Re:無題    
またまたお助けありがとうございます。

>>普通は表示するときにUVで範囲を指定して表示しますが、本当に読み込み時に指定しておく必要があるのでしょうか? 
>>まずは表示時に指定する方向で検討してみて下さい。 
現在の状況を書いていないで申し訳ないです。
現在ではそのようにしています。

ただ、DXライブラリに馴染んでいたりする方は
画像のロードの際に分割できると楽かと思いまして・・・。

添付したソースを使う為には座標系を変更する必要があります。
// 座標系の変更
glOrthof( 0.0f, 320.0f, 480.0f, 0.0f, 0.5f, -0.5f );
x⇒320 y⇒480
 
方法はあるのですね!!
ご丁寧にありがとうございます。
でも難しくて作れそうにないです><
色々弄ってみます。
多分、再度質問しそうなので解決マークは数日つけれないです。

>>添付して頂いたソースの件
そうなんですかΣ
ただ無断で公開されると気分を害されるかもしれないので
一応、作者様には公開する旨を伝えますね。

ここにいる方々は皆さん凄い方々ばかりですが
Justyさんは本当に何者ですか(汗)

正直、回答を頂けるとは思いませんでした。


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

Name: Justy  ..伝説なるハッカー(560,285ポイント)   Date: 2010/07/29(木) 01:37   No:57699     
Title: Re:無題    
>DXライブラリに馴染んでいたりする方は 
>画像のロードの際に分割できると楽かと思いまして・・・。 
 テクスチャ名とテクスチャサイズをメンバに持つTextureクラスを作ることにしたんですよね?
 であればその中に UV情報も入れて、ロード時にセット、表示時に参照して表示するようにすれば
DXライブラリと同じようにつかえるかと。


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

Name:  ..かけだし(2,411ポイント)   Date: 2010/07/29(木) 05:07   No:57702     
Title: Re:無題    
なるほど・・・すぐにその方向に変更させて頂きます!!
そんなこと考えてもいませんでした。
またまたお助けありがとうございました!!


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

Name:  ..かけだし(2,416ポイント)   Date: 2010/07/29(木) 05:08   No:57703 解決!     
Title: Re:無題    
また解決マークをつけ忘れてしまいました(汗)
マークをつけさせて頂きます。


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



Name: シエル  ..プログラマー(35,119ポイント)   Date: 2010/07/27(火) 11:35   No:57546       
Title: メモリの割り当てについて    
いつもお世話になっております。シエルです。

メモリの割り当てについて質問があります。

【質問1】
下記三つのものに割り当てられるメモリの領域は下記領域で正しいでしょうか?

@グローバル変数、staticを付けた変数
→静的領域

A自動変数
→スタック領域

Bnewやmallocなどを使って確保した領域
→ヒープ領域

【質問2】
下記三つのものが割り当てられるタイミングは下記のとおりで正しいでしょうか?

@グローバル変数、staticを付けた変数
→プログラム起動時

A自動変数
→その変数がある関数が呼ばれたタイミング

Bnewやmallocなどを使って確保した領域
→newやmallocなどで動的確保したタイミング

【質問3】
下記三つのものが確保できる上限サイズについて教えてください

@グローバル変数、staticを付けた変数
→わかりません

A自動変数
→わかりません

Bnewやmallocなどを使って確保した領域
→メモリがある限りいくらでもOK?

基本的な質問で申し訳ございませんが、ご回答よろしくお願い致します。


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


Name: たかぎ [URL]  ..ハッカー(216,446ポイント)   Date: 2010/07/27(火) 11:54   No:57550     
Title: Re:メモリの割り当てについて    
newが出てきているのでC++だとは思いますが、詳しい処理系不明ですので正確なことはいえないのですが...

>【質問1】 
> 下記三つのものに割り当てられるメモリの領域は下記領域で正しいでしょうか? 
>
> @グローバル変数、staticを付けた変数 
> →静的領域 

原則としてそうです。

> A自動変数 
> →スタック領域 
>
> Bnewやmallocなどを使って確保した領域 
> →ヒープ領域 

そうなる処理系もあります。

> 【質問2】 
> 下記三つのものが割り当てられるタイミングは下記のとおりで正しいでしょうか? 
>
> @グローバル変数、staticを付けた変数 
> →プログラム起動時 

メモリが割り当てられるという意味ではそうです。
初期化のタイミングはまた別ですが...

> A自動変数 
> →その変数がある関数が呼ばれたタイミング 

そうなる場合もあります。

> Bnewやmallocなどを使って確保した領域 
> →newやmallocなどで動的確保したタイミング 

おおむねそうですが、newの場合はいろいろなケースがあります。

>【質問3】 
> 下記三つのものが確保できる上限サイズについて教えてください 
>
> @グローバル変数、staticを付けた変数 
> →わかりません 

完全にコンパイラや実行環境に依存します。

> A自動変数 
> →わかりません 

完全にコンパイラや実行環境に依存します。

> Bnewやmallocなどを使って確保した領域 
> →メモリがある限りいくらでもOK? 

完全にコンパイラやライブラリの実装、実行環境に依存します。


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

Name: シエル  ..プログラマー(35,166ポイント)   Date: 2010/07/27(火) 11:59   No:57551     
Title: Re:メモリの割り当てについて    
環境書き忘れてました。。。

visual c++ 2008 ExpressEdition
Windows7
メモリ4GB

です。


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

Name: シエル  ..プログラマー(35,370ポイント)   Date: 2010/07/27(火) 19:03   No:57560     
Title: Re:メモリの割り当てについて    
すいません。追加で質問です。
下記のようなクラスを

class A{
 int x,y,z;
 double o,p,q;
public:
 A();
 ~A();
};

A *a=new A

としてインスタンスを作成した場合、
メンバ変数のメモリは全てヒープ領域に確保されるのでしょうか?





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

Name: ぽこ  ..プログラマー(26,000ポイント)   Date: 2010/07/27(火) 22:21   No:57565     
Title: Re:メモリの割り当てについて    
VC++ですよね?
ヒープ領域に確保されます。
#operator newとかを上書きしないことが前提ですよね?


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

Name: シエル  ..プログラマー(35,543ポイント)   Date: 2010/07/27(火) 22:36   No:57566 解決!     
Title: Re:メモリの割り当てについて    
ぽこさんありがとうございました!

グローバル変数の限界サイズが来たときの対応が分かってよかったです。
クラスで変数を定義して、動的に確保すればメモリがなくなることはなさそうですね。

基本をあまり知らないので、operator newの意味がさっぱり分かりませんでしたが、
さっきググって調べました。
オーバーロードすれば、別で確保しといた領域にオブジェクトを構築できるんですね。
勉強になりました。

たかぎさんもありがとうございました。

これにて解決と致します。


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

Name: ぽこ  ..プログラマー(26,034ポイント)   Date: 2010/07/27(火) 23:09   No:57569     
Title: Re:メモリの割り当てについて    
> グローバル変数の限界サイズが来たときの対応が分かってよかったです。
> クラスで変数を定義して、動的に確保すればメモリがなくなることはなさそうですね。

揚げ足を取る様で申し訳ないのですが、
グローバル変数を限界サイズまで取ったときは、
ヒープも使えない状況に追い込まれると思いますよ。


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

Name: シエル  ..プログラマー(35,566ポイント)   Date: 2010/07/27(火) 23:17   No:57571     
Title: Re:メモリの割り当てについて    
静的領域とヒープ領域の限界サイズは同じってことでしょうか?

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

Name: ぽこ  ..プログラマー(26,318ポイント)   Date: 2010/07/27(火) 23:22   No:57575     
Title: Re:メモリの割り当てについて    
1つのプロセスに割り当てられるメモリサイズに上限があるからです。
32ビットOSだと高々4GB、64ビットOSだともっとたくさんです。
この辺はOS(やその設定)ごとに異なるので、具体的な数値は出せません。
いずれにしろ、コード領域、データ領域、ヒープ領域、スタック領域もろもろ合わせて上限があります。


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

Name: シエル  ..プログラマー(35,584ポイント)   Date: 2010/07/27(火) 23:28   No:57578     
Title: Re:メモリの割り当てについて    
なるほど。
私が質問する前までは静的領域はそんなに確保できないのかな〜と思ってました。
だからいつか限界が来たらどうしようと思っていたのですが、数十MBで無くなるほど
少ないわけではなさそうですね。

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


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

Name: ISLe  ..中級者(9,245ポイント)   Date: 2010/07/27(火) 23:40   No:57583     
Title: Re:メモリの割り当てについて    
Visual C++ 2008 Express Editionで、ヒープサイズは既定で1MB、スタックサイズも既定で1MBだそうです。

プロジェクトのプロパティ→構成プロパティ→リンカ→システム


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

Name: 組木紙織  ..比類無きプログラマー(90,792ポイント)   Date: 2010/07/28(水) 01:00   No:57591     
Title: Re:メモリの割り当てについて    
>1つのプロセスに割り当てられるメモリサイズに上限があるからです。 
>32ビットOSだと高々4GB、64ビットOSだともっとたくさんです。 
>この辺はOS(やその設定)ごとに異なるので、具体的な数値は出せません。 
>いずれにしろ、コード領域、データ領域、ヒープ領域、スタック領域もろもろ合わせて上限があります。


ヒープ領域も4GBの中にふくまれるのでしょうか?
私は、コード領域+データ領域+スタック領域もろもろ合わせて4GBという認識です。

#32bitCPUでメモリモデルはflatを想定しています。


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

Name: ぽこ  ..プログラマー(26,375ポイント)   Date: 2010/07/28(水) 01:26   No:57594     
Title: Re:メモリの割り当てについて    
> ヒープ領域も4GBの中にふくまれるのでしょうか?
> 私は、コード領域+データ領域+スタック領域もろもろ合わせて4GBという認識です。

> #32bitCPUでメモリモデルはflatを想定しています。

含まれます。
組木紙織さんの認識ですと、一つのプロセスに割り当て可能な仮想メモリとは別腹で、
ヒープ領域がプロセスに割り当てられることになりませんか?

OSがプログラム(実行可能ファイル)を実行する際には、プロセスという管理実体を作成し、
プログラム内に記録されている、各領域(コード領域、データ領域、スタック領域、BSS領域
(上記ヒープ領域と言っていたものを言い直しました))のサイズを読み取り、それに合わせて、
プロセスに(仮想)メモリを割り当てます。

そのメモリに対して、プログラムローダがコード領域、データ領域を展開します。
スタック領域や、BSS領域の初期化等は誰がやるか知りません(OSかもしれないし、
ランタイムライブラリかもしれない)><b。
しかし、OSで言うところのBSS領域(ランタイムライブラリで言うところのヒープ)が足りなくなると、ランタイムライブラリはOSにメモリを要求します。
この際に、求めるメモリがBSS領域のものだからと言って、OSが仮想メモリとは違うメモリを渡すことはないと思います。

----追記
長々と訳の分からないこと書いちゃった気がしますが、一言でいうと、
「ヒープ領域もOSが提供する仮想メモリ上にあるのだから、含まれます。」
ですね。
 編集済み


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

Name: シエル  ..プログラマー(35,670ポイント)   Date: 2010/07/28(水) 07:29   No:57601     
Title: Re:メモリの割り当てについて    
すいません。変なこと聞きます。


>長々と訳の分からないこと書いちゃった気がしますが、一言でいうと、 
>「ヒープ領域もOSが提供する仮想メモリ上にあるのだから、含まれます。」 
>ですね。

ヒープ領域は「仮想」メモリ上に確保されるのですか?
物理メモリは使用されないのでしょうか?


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

Name: 組木紙織  ..比類無きプログラマー(91,011ポイント)   Date: 2010/07/28(水) 08:38   No:57603     
Title: Re:メモリの割り当てについて    
>ヒープ領域は「仮想」メモリ上に確保されるのですか? 
>物理メモリは使用されないのでしょうか?

この場合の"仮想メモリ"はOSが提供する論理的な意味でのメモリという意味で、実際に確保される場所は
考えていません。

>ぽこさん

なんとなく話してる意味は分かりますが、細かい部分が全然です。(BSS領域って何?とか、)

私の認識だと、プログラム起動後すぐに、セグメントレジスタにそれぞれのアドレス(コード、データ、スタック)を入れて管理し、セグメントが最大4Gです。
BSS領域なんて出てこないです。

#多分対象としている領域が違う感じがしてます。
#私はアセンブラでコーディング時のレベルで話してます。






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

Name: ちょっと通りますよ  ..ぴよぴよ(204ポイント)   Date: 2010/07/28(水) 11:47   No:57620     
Title: Re:メモリの割り当てについて    
>ヒープ領域は「仮想」メモリ上に確保されるのですか? 
>物理メモリは使用されないのでしょうか?
仮想のイメージが違うかな? 必ず対応する物理領域があります
プログラム(プロセス)からは、仮想アドレスしか認識できないので
イメージ(仮想記憶の概念図)ttp://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6

ウィンドウズの場合だと、ヒープマネージャーが管理している領域がヒープ領域に当たります
プロセスが起動するときに、例えばデフォルトで1Mの領域をヒープマネージャに対して予約し、
デフォルトで8kをコミット(確定)します
物理メモリ(仮想メモリ)として使われるのはコミットされた場所だけです
実使用上コミットした8kを超える場合は、予約領域1Mまで自動拡張され使用できます

ちなみに、OSについてるヒープマネージャーとの交渉は、HeapAllocだったかな(Win32API)で
mallocの中でHeapAllocを呼び出しています
ページ(デフォは4k)単位でしか領域を確保できない為、mallocはひとまず4kとか8kとかの領域を確保し、
プロセス(ユーザ)から要求があるごとに、その領域を切り崩しながらヒープとして割り当てます

※コミットのイメージとしては、仮想アドレス空間と物理アドレス空間を対応付ける作業

>組木紙織さん
↑のURLの項目「仮想アドレス空間管理」にも、BSSについて触れていますよ


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

Name: シエル  ..プログラマー(36,329ポイント)   Date: 2010/07/28(水) 12:08   No:57622     
Title: Re:メモリの割り当てについて    
>>組木紙織さん、ちょっと通りますよさん

ありがとうございます。イメージがつかめました。


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

Name: ぽこ  ..プログラマー(26,454ポイント)   Date: 2010/07/29(木) 01:18   No:57698     
Title: Re:メモリの割り当てについて    
> >ぽこさん

> なんとなく話してる意味は分かりますが、細かい部分が全然です。(BSS領域って何?とか、)

え〜と、全然何でしょうか?(意味不明ですか?、納得がいかないですか?)
 
> 私の認識だと、プログラム起動後すぐに、セグメントレジスタにそれぞれのアドレス(コード、データ、スタック)を入れて管理し、セグメントが最大4Gです。
> BSS領域なんて出てこないです。

アセンブリ言語と実行イメージでのメモリ空間の分類(概念)が違うから、
出てこなくて当然です。


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



Name: IT太郎  ..ぴよぴよ(173ポイント)   Date: 2010/07/28(水) 22:33   No:57684       
Title: MAC    
学校の指定パソコンでしかたんくMACのパソコンでプログラミングを勉強しています。
やっぱりWindowsじゃエラーがでないのに、MACじゃエラーが出るというのはありえますか?
以下はWindowsならエラーがでないソースです。

#include <stdio.h>

int main()
{
  char *p;

  p = "MACってプログラミングに向いてない";

  printf(p);

  return 0;
}

私のMACではprintf(p);の部分がエラーとでます。
このソースコードは某参考書の内容を参考にしているので間違っている事はないはずです。

なぜMACだとprintf(p);の部分がエラーとなるのでしょうか?


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


Name: 初級者  ..初心者(8,543ポイント)   Date: 2010/07/28(水) 22:37   No:57685     
Title: Re:MAC    
printf関数の第1引数が本当にそれでいいのか、調べてみましょう。

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

Name: ashitana  ..ぴよぴよ(23ポイント)   Date: 2010/07/28(水) 22:41   No:57686     
Title: Re:MAC    
Win Vista&Borland C++ 5.5.1
Win Vista&Visual C++ 2010   /*追記部分*/
でもエラーが出ないでコンパイルでき、実行できました。
やっぱりMacが・・・・?

/*追記部分*/
しかし、MacOS X(Xですよね?)はUNIXにお面をかぶせたも
のだと聞いていたのですが・・・
Macの"仕様(笑)"でしょうか? 編集済み


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

Name: たかぎ [URL]  ..ハッカー(216,577ポイント)   Date: 2010/07/28(水) 22:51   No:57687     
Title: Re:MAC    
> やっぱりWindowsじゃエラーがでないのに、MACじゃエラーが出るというのはありえますか? 

あり得ますし、逆もあり得ます。

> なぜMACだとprintf(p);の部分がエラーとなるのでしょうか?

Macで試しましたがエラーはでませんでした。
何をどのようにしたときに、どんなエラーが出たのかを正確に補足してください。



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

Name:  ..かけだし(1,878ポイント)   Date: 2010/07/28(水) 22:52   No:57688     
Title: Re:MAC    
printf関数を使っている所を
printf( "%s",p ) としてみて下さい。


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

Name: ISLe  ..中級者(9,310ポイント)   Date: 2010/07/28(水) 23:30   No:57692     
Title: Re:MAC    
Ubuntu 10.04のgcc 4.4.3でコンパイルしたら

warning: format not a string literal and no format arguments

という警告は出ましたけど、エラーは出ませんでした。

#Cygwinのgcc3もgcc4も警告なし。何故?


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

Name: たかぎ [URL]  ..ハッカー(216,597ポイント)   Date: 2010/07/28(水) 23:36   No:57693     
Title: Re:MAC    
> warning: format not a string literal and no format arguments 

Macで、gcc-4.0やgcc-mp-4.5でコンパイルしても上記の警告は出ません。
4.2.1でコンパイルした場合だけ上記の警告が出ました。


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



Name: DecentLove  ..初心者(7,090ポイント)   Date: 2010/07/26(月) 19:00   No:57508       
Title: 閏年の判別    
先日質問した日付の経過計算なんですが、まずは閏年の計算が出来るようにしたいと思い、色々なサイトをみて調べ、とりあえず書いてみました。

#include "DxLib.h"
#include <stdio.h>
#include <windows.h>  

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) {


    SetGraphMode( 250, 100, 16);
        ChangeWindowMode(TRUE);    //ウィンドウモードに変更する為の関数
    SetWindowStyleMode(6);
    DxLib_Init();            //DXライブラリの初期化
    SetAlwaysRunFlag(TRUE);
        SetDrawScreen(DX_SCREEN_BACK);    //描画先を裏画面に変更(13章参照)

    int White = GetColor( 255,255,255 );

    while( CheckHitKey(KEY_INPUT_SPACE)==0 ){

        GetDateTime( &Date );
        ProcessMessage();
        ClearDrawScreen();

        int year = KeyInputNumber( 0 , 16 , 9999 , 1000 , FALSE ) ;

        if( year %100 == 0 )
        {
            if( year %400 == 0 )
                DrawFormatString( 0,0, White,"%d年は閏年です。" ,year );
            else
                DrawFormatString( 0,0, White, "%d年は閏年ではありません。", year );
        }
        else
        {
            if( year %4 == 0)
                DrawFormatString( 0,0, White, "%d年は閏年です。",year);
            else
                DrawFormatString( 0,0, White, "%d年は閏年ではありません。",year);
        }

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



見にくかったらすみません。
まずKeyInputNumber( 0 , 16 , 9999 , 1000 , FALSE ) ;で西暦年を入力し、計算に従い閏年か否かを判別するプログラムなんですが。
判別はうまく出来るんですが、一回動かしてもらえるとわかるとおり、閏年かどうかのコメントが表示された瞬間、消えてしまいます。
さらに、Escキーを押しても終了させることができません。
何故でしょうか?わかる方お願いします。

VisualC++ 2010
DxLibを使っています。


タイトル着け忘れました。
 編集済み


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


Name: fatens  ..上級者(16,584ポイント)   Date: 2010/07/26(月) 19:20   No:57510     
Title: Re:閏年の判別    
>閏年かどうかのコメントが表示された瞬間、消えてしまいます。

表示した次のフレームで ClearDrawScreen() によって消されるからです。


>Escキーを押しても終了させることができません。

while( CheckHitKey(KEY_INPUT_SPACE)==0 )
↑スペースキーを押すと終了するようにしてありますが...


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

Name: 初級者  ..初心者(8,389ポイント)   Date: 2010/07/26(月) 19:48   No:57513     
Title: Re:閏年の判別    
そのif文は、もっと簡単に書けます。

西暦年が、
「4で割り切れて100で割り切れない」
または
「400で割り切れる」
とき、うるう年
そうでないとき、平年


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

Name: ナムアニクラウド [URL]  ..ぴよぴよ(295ポイント)   Date: 2010/07/26(月) 21:37   No:57519     
Title: Re:閏年の判別    
回答させていただきます。よろしくお願いします。

このプログラムでは、「××年は閏年…」の文字列を消した後、もう一度西暦年を入力させるようにしています。
これはKeyInputNumberがwhileの中にあることが原因です。
KeyInputNumberがwhileの中にあるということは、西暦年の入力を何度も要求しているということなのです。

ESCで終了できない問題は、fatensさんのおっしゃるとおり
    while( CheckHitKey( KEY_INPUT_SPACE )==0 )
となっていることが原因です。

以下は、問題のソースからバグを取り除いたものです。

#include "DxLib.h" #include <stdio.h> #include <windows.h>   int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) {     SetGraphMode( 250, 100, 16);     ChangeWindowMode(TRUE);           //ウィンドウモードに変更する為の関数     SetWindowStyleMode(6);     DxLib_Init();                     //DXライブラリの初期化     SetAlwaysRunFlag(TRUE);     SetDrawScreen(DX_SCREEN_BACK);    //描画先を裏画面に変更(13章参照)     int White = GetColor( 255,255,255 );     int year = KeyInputNumber( 0 , 16 , 9999 , 1000 , FALSE ) ;     while( CheckHitKey( KEY_INPUT_ESCAPE )==0 ){         //不要なGetDateTimeを削除         ProcessMessage();         ClearDrawScreen();         if( year %100 == 0 )         {             if( year %400 == 0 )                 DrawFormatString( 0,0, White,"%d年は閏年です。" ,year );             else                 DrawFormatString( 0,0, White, "%d年は閏年ではありません。", year );         }         else         {             if( year %4 == 0)                 DrawFormatString( 0,0, White, "%d年は閏年です。",year);             else                 DrawFormatString( 0,0, White, "%d年は閏年ではありません。",year);         }         ScreenFlip();     }     DxLib_End();     return 0; }

これをコピペでとりあえず動くはずです。
読んでくれてありがとうございます。


ここから余談なので見てくれなくても大丈夫です。

DXライブラリのリファレンスなどを見ていただくと分かりますが、このソースに登場する二つの関数
    DxLib_Init();
    ProcessMessage();
は、失敗して-1を返したときに、プログラムを即時に終了する必要があります。
今回のソースでは-1を返した時の処理などはしませんでした(大幅改変すると分かりづらいので)。
DXライブラリを用いた実際のプログラミングでは、この二つの関数のことを忘れないようにしましょう。

では、ここまで読んでくれてありがとうございました。


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

Name: DecentLove  ..初心者(7,608ポイント)   Date: 2010/07/26(月) 22:21   No:57520     
Title: Re:閏年の判別    
fatensさん。
 すみません。
 Escとスペースを間違えました。
 Escで終了するようにしても終了できなかったので、スペースで試したのですが、やはりダメでした。
 こちらの表記ミスでした。

初級者さん。
 if文の中身は
 (year%4 == 0 && year%100 != 0 || year%400 == 0)
 こんな感じですね!

ナムアニクラウドさん。
 丁寧にありがとうございます。大丈夫でした!が、

while( CheckHitKey( KEY_INPUT_ESCAPE )==0 ){

    int year = KeyInputNumber( 0 , 16 , 9999 , 1000 , FALSE ) ;

    while( CheckHitKey( KEY_INPUT_SPACE )==0 ){

        //不要なGetDateTimeを削除
        ProcessMessage();
        ClearDrawScreen();

        if( year %100 == 0 )
        {

と、判定結果表示後にスペースを押すと、再度入力できて、その入力画面でEscを押すと終了できるようにしたいのですが…。なぜかEscを押しても終了してくれません。


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

Name: シエル  ..プログラマー(34,777ポイント)   Date: 2010/07/27(火) 11:05   No:57539     
Title: Re:閏年の判別    
KeyInputNumberが何の関数かは知りませんが、こいつで止まっているからでしょう。

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

Name: DecentLove  ..初心者(7,576ポイント)   Date: 2010/07/27(火) 16:56   No:57555 解決!     
Title: Re:閏年の判別    
よくわかりませんが、スペースとEsc、当時に押したら解決しました!ありがとうございました!

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

Name: ナムアニクラウド [URL]  ..ぴよぴよ(0ポイント)   Date: 2010/07/28(水) 23:20   No:57691     
Title: Re:閏年の判別    
解決はしたようですが、疑問が残るようなので説明しましょう。
宜しければ一読を。

KeyInputNumberを呼ぶと、その処理が終わるまで他の処理は止まってしまいます。
するとwhileの条件判定は、数値入力が完了するまで行われません。
つまりKeyInputNumberの処理中にEscを押しても終了しないわけです。
while( CheckHitKey( KEY_INPUT_ESCAPE )==0 )
{
    int year = KeyInputNumber( 0 , 16 , 9999 , 1000 , FALSE ) ;    //ここで停止
}

KeyInputNumber関数は最後の引数に TRUE を指定すると、Escキーにより入力がキャンセル可能で、
キャンセルされた場合 入力可能な最大値 + 1 の値(ここでは10000)が返されます。
これを用いて終了判定をすればいいと思われます。
読んでくれてありがとうございました。


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



Name: リク  ..入門者(4,843ポイント)   Date: 2010/07/28(水) 16:49   No:57661       
Title: ピラミッドアートwhile文→for文へ    
プログラムを作ることに意味がある・・・作り続け約6時間。自分の理解力のなさに絶望しました。
友達が参考にしてくれたプログラムや教科書を比べ合わせ、wordで文章作成までして作ったのですが、
まったく自分は理解できていないようです。なんとかできると思ったのですが、
皆さん。本当に申し訳ありません。もう一度お願いいたします。

私は、visual stdio2008を使っています。

友達が教えてくれた四角形のwhile文のピラミッドアートがあります。

#include<stdio.h>
void main(void)
{
 int gyou,retu,atai;
 printf("数字を入力してください");
 scanf("%d",&atai);
 gyou=0;@カウンタの初期化 
 while(gyou<atai)A条件式
{
 retu=0;@カウンタの初期化
 while(retu<atai){A条件式
 printf("*");C条件満たした場合の処理
 retu++;B→Aカウンタの増減式+1,-1
}
 printf("\n");C条件満たした場合の処理
 gyou++;B→Aカウンタの増減式+1,-1
    }
}
これは、友達が教えてくれたものなので、きちんと四角形が表示されました。
そして、これをfor文に作り変えたいと思い、自分で作り変えたところ・・・{や、;のエラーが大量発生と
悲惨なことになってしまいました。

恐らくまったく、理解できてないと思いながらも、自分でwhile文を参考にfor文を作ってみました。
(@などの説明は私が書いたものなので、友達が間違えているわけではありません。)
けれど、どこが違うのか全くわからないんです。

for文
#include<stdio.h>
void main(void)
{
int  gyou,retu,atai,;

for(gyou=0;gyou <atai;gyou ++)
{
   for(retu=0;retu<=3;retu++)
printf(“*”);
}
printf("\n");
}

とりあえず、while文からにた箇所を抜粋して、そのままfor文に張り付けるという、自分でなんて考え方なんだと思うのですが、これ以上考え方が分からないのです。
本当に、全く理解力の乏しい物で申し訳ありません。
今日ずっと作っているのですが、、やはり自分で作ることができませんでした。



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


Name: dic  ..比類無きプログラマー(88,327ポイント)   Date: 2010/07/28(水) 16:55   No:57663     
Title: Re:ピラミッドアートwhile文→for文へ    
6時間ぶっつけでやっているなら一息休憩することをお勧めします

休憩後、やりたいことを紙にいったん書いてから
自分で自分に説明できてから
プログラムにするのがいいです


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

Name: シエル  ..プログラマー(37,446ポイント)   Date: 2010/07/28(水) 17:09   No:57664     
Title: Re:ピラミッドアートwhile文→for文へ    
ataiに値が入ってないです。

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

Name: ぜらーちん  ..入門者(2,636ポイント)   Date: 2010/07/28(水) 17:25   No:57666     
Title: Re:ピラミッドアートwhile文→for文へ    
{}が閉じられていない〜

#include<stdio.h> 
void main(void) 

int  gyou,retu,atai,; 

for(gyou=0;gyou <atai;gyou ++) 
{
   for(retu=0;retu<=3;retu++) 
printf(“*”); 
}
printf("\n"); 
}
}

前からある奴:黒、黄、ライム
付けくわえた奴:アクア、赤、青

対応する{}からーは↑の順番通り
色付けたほうが分かりやすいかな?と思ってつけて、
付けくわえた奴と前の奴分けたほうがいいかな?とか思ったら逆に見づらくなったかもしれない…


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

Name: QERA  ..ぴよぴよ(857ポイント)   Date: 2010/07/28(水) 17:27   No:57667     
Title: Re:ピラミッドアートwhile文→for文へ    
四角系のピラミッドアートですと
3と入力したら、縦横3で*が
***
***
***

と表示されます。(当たり前ですが)

もう一つのスレッドも少し見ましたが、リクさんがどこまで理解できているのか私には分かりません。

なので、whileからforに書き直すのが困難なのであれば、それぞれの意味や条件式を順を追って考えてみるといいと思います。

while文ですと

while(条件式){
  処理内容
  gyou++;
}
となります。

リクさんのコードでは
while(gyou<atai){
  処理内容
  gyou=gyou+1;
}

・ataiはユーザーに入力させる
・gyouを0に初期化する
・gyou++(gyou=gyou + 1と同じ意味)でgyouを1ずつ増やしていく

となっています。

ここで例えばユーザーが3と入力した場合、ataiに3が入ります。
また、gyouを初期化しているのでgyouに0が入ります。

これをwhile文の条件式にに数値で表してみると

while(0<3){
  処理内容
  gyou=gyou+1;
}

となります。

条件式が成り立っているのでまず1回目の処理が行われます。
処理内容にgyou=gyou+1とありますのでgyouが1になります。

すると次のwhile文は

while(1<3){
  処理内容
  gyou=gyou+1;
}

となります。

このように1つずつ増えていくといずれ・・・

while(4<3){
  処理内容
  gyou=gyou+1;
}

となると思います。
こうなると条件式が合っていないので、while文が抜けることになります。

これくらい分かるよ!と感じたのなら、余計なお節介だと思って下さい^^

長文失礼しました。頑張ってください。


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

Name: リク  ..初心者(5,133ポイント)   Date: 2010/07/28(水) 17:53   No:57668     
Title: Re:ピラミッドアートwhile文→for文へ    
ぴよぴよさん>while文についてとても分かりやすい説明、ありがとうございます。
      どこまで、わからないか・・・ですか、本当に恥ずかしいのですが、
ただ単に教科書のプログラムを打っているという感じで、このように、課題でピラミッドアートを作れと出題されても、先生や友達がヒントを下さらなければ、whileやforも思い浮かびませんでした。最初はループなのでは?と全く見当違いな方向に進んでいました。
いえいえ、本当に余計なお節介なんてとんでもないです。

もし、よろしければ、for文について教えていただけると助かります。友達が教えてくれた(記載しているwhile文は実行するときちんと四角形が表示されるのですが)これを元に自分で考えたfor文がエラーが大量表示されてしまい、全くもって手がつきません。ほかの皆様の回答をもとに作りなおしてみたのですが、エラー表示のままですし、自分の作ったfor文が見当違いと予測はつくのですが、どこが違うのか・・・
while文をfor文に作り直す方法を教えてくださると助かります。


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

Name: ちょっと通りますよ  ..ぴよぴよ(404ポイント)   Date: 2010/07/28(水) 17:57   No:57669     
Title: Re:ピラミッドアートwhile文→for文へ    
考え方も悪くないし、イージーミスが非常に惜しいですね。
例えば↓これですが
while(retu<atai)
for文に直すのは簡単です
for(;retu<atai;) //whileとまったく同じ意味です、これで動きます

後は想像された通り、retu(カウンタ変数)をfor文に取り込みます
for(retu=0;retu<atai;)//この形でも動きます

次にretu(カウンタ変数)の更新文を取り込みます
for(retu=0;retu<atai; retu++) //見なれた形になりました


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

Name: リク  ..初心者(6,353ポイント)   Date: 2010/07/28(水) 18:21   No:57672     
Title: Re:ピラミッドアートwhile文→for文へ    
ぴよぴよさん>

もう一度、やってみました。

#include<stdio.h>  
void main(void)  

{  
    int  gyou,retu,atai,;

    printf("数字を入力してください");
    scanf("%d",&atai);

    for(gyou=0;gyou <atai;gyou ++)  
 { 
   for(retu=0;retu<atai;retu++) 
  {  
   printf(“*”);  
 } 
   printf("\n");  
  } 
}

------ すべてのリビルド開始: プロジェクト: pp, 構成: Debug Win32 ------
プロジェクト 'pp'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
po.cpp
c:\users\documents\cl11\pp\pp\po.cpp(7) : error C2146: 構文エラー : ';' が、識別子 'printf' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(8) : error C2065: 'atai' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2146: 構文エラー : ';' が、識別子 ';gyou' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: ';gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2065: 'atai;gyou' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(10) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'retu' : 定義されていない識別子です。
c:\usersdocuments\cl11\pp\pp\po.cpp(12) : error C2146: 構文エラー : ';' が、識別子 ';retu' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: ';retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2065: 'atai;retu' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(12) : error C2143: 構文エラー : ';' が ')' の前にありません。
c:\users\documents\cl11\pp\pp\po.cpp(14) : error C2065: '“*”' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2146: 構文エラー : ';' が、識別子 ';' の前に必要です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2065: ';' : 定義されていない識別子です。
c:\users\documents\cl11\pp\pp\po.cpp(15) : error C2143: 構文エラー : ';' が '}' の前にありません。
ビルドログは "file://c:\Users\Documents\CL11\pp\pp\Debug\BuildLog.htm" に保存されました。
pp - エラー 16、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========





作ってみたところ、エラーが17個中、16個になりました。


2倍のポイントを手に入れた! 1,220ポイント を手に入れた。

Name: シエル  ..プログラマー(37,495ポイント)   Date: 2010/07/28(水) 18:25   No:57673     
Title: Re:ピラミッドアートwhile文→for文へ    
ataiの後ろにいらんカンマがある。

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

Name: DVDM [URL]  ..熟練のプログラマー(55,578ポイント)   Date: 2010/07/28(水) 18:26   No:57674     
Title: Re:ピラミッドアートwhile文→for文へ    
>>リクさん
全角のセミコロン(;)や、ダブルクォーテーション(””)が使われてる見たいですので
半角に直してみましょう。

> int  gyou,retu,atai,; 
atai の後の , も要らないので消してみて下さい。


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

Name: ぜらーちん  ..入門者(2,820ポイント)   Date: 2010/07/28(水) 18:34   No:57675     
Title: Re:ピラミッドアートwhile文→for文へ    
テスト用変数
int lcnt = 0; //ループ用のカウンター
int max = 10;  //ループする回数の上限

whileとforの違い

whileの場合

while( lcnt < max ){ //(lcntがmax以上になるまでループ)
 lcnt = lcnt + 1; //カウンターを1増やします(lcnt++と同じ)
}

forの場合

for(lcnt = 0; lcnt < max; lcnt++){

}

簡単に書くと
forの場合はループ用のカウンターをループ内に書かなくてOKだし
ループ用の変数の初期値を決められる(lcnt = 0でも1でもok;)

別に入れなくておkならそこは省いて ; でOK

だからwhile→forにするのであれば、while内で回しているカウンターを消して
for文の中に入れてしまえばいい


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

Name: リク  ..初心者(6,893ポイント)   Date: 2010/07/28(水) 18:46   No:57677     
Title: Re:ピラミッドアートwhile文→for文へ    
シエルさん>教えてくださりありがとうございます。確かにありました。助かりました!

DVDMさん>本当にありがとうございます。朝からずっとやっているせいなのか、
     全角など全く考えもしませんでした。
    DVDMさんのおかげで、エラーがなくなりました。

シエルさんや、DVDMさんに教えていただきやった結果。

#include<stdio.h>  
void main(void)  
{  
    int  gyou,retu,atai;  

for(gyou=0;gyou <atai;gyou ++)  

   for(retu=0;retu<atai; retu++) {  
printf("*");  

printf("\n");  




------ すべてのリビルド開始: プロジェクト: nnn, 構成: Debug Win32 ------
プロジェクト 'nnn'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
ppp.cpp
c:\users\documents\nnn\nnn\ppp.cpp(6) : warning C4700: 初期化されていないローカル変数 'atai' が使用されます
マニフェストをリソースにコンパイルしています...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation.  All rights reserved.
リンクしています...
LINK : 前回のインクリメンタル リンクで C:\Users\Documents\\nnn\Debug\nnn.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
マニフェストを埋め込んでいます...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation.  All rights reserved.
ビルドログは "file://c:\Users\Documents\\nnn\nnn\Debug\BuildLog.htm" に保存されました。
nnn - エラー 0、警告 1
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

と表示され、エラーはなくなったのですが、デバックエラーが発生してしまいます。


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

Name: シエル  ..プログラマー(37,507ポイント)   Date: 2010/07/28(水) 18:49   No:57678     
Title: Re:ピラミッドアートwhile文→for文へ    
あれ?scanfが消えてる?

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

Name: リク  ..初心者(7,125ポイント)   Date: 2010/07/28(水) 19:06   No:57679 解決!     
Title: Re:ピラミッドアートwhile文→for文へ    
ででで・・・できました!!シエルさん指摘ありがとうございました!

今日、ずっとプログラムを作り続けて、9時間・・・
皆様のおかげでなんとか報われました。
本当に、ありがとうございます。

私は、本当にC言語が苦手で、他の質問サイト様にも質問などさせていただいていたのですが、
馬鹿じゃないの?そんなこともできないなんて、学校辞めたほうがいいんじゃない?など、
言われ、かなり凹んでいました。

けれど、皆様はこんな私のために、最後までアドバイスしてくださいました。
本当にありがとうございます。全くC言語を理解していない私に付き合ってくださり、
言葉で言い尽くせないほど、感謝の気持ちでいっぱいです。
また、質問に来た時には、教えていただけると嬉しいです。


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

Name: dic  ..比類無きプログラマー(88,341ポイント)   Date: 2010/07/28(水) 21:06   No:57680     
Title: Re:ピラミッドアートwhile文→for文へ    
そうか、今は夏休みか

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



Name: シエル  ..プログラマー(36,132ポイント)   Date: 2010/07/28(水) 09:04   No:57605       
Title: 境界線付近の描画について    
いつもお世話になっております。シエルです。

今シューティングゲームを作成中なのですが、
ゲームメイン画面とボード等がある画面との境目の描画方法について困っています。
どの部分か分からないと思うので、龍神録を例にした添付画像をごらん下さい。

何が困っているかと言いますと、
ゲームメイン画面で描画された弾などは、ボード画面との境目付近で綺麗に消えてくれます。
一方、ボード画面で描画された紅葉のエフェクトも境目付近で綺麗に消えます。
このお互いが境目付近で綺麗に消えてくれる方法が分かりません。

具体的に申しますと、

ゲームメイン画面で弾を描画

ボード画面を描画

の順に描画すれば、弾はボード画面によって上書きされ、弾は境目付近で綺麗に消えてくれます。
ですがこの状態だと、ボード画面に描画される右から左に移動するエフェクトはゲームメイン画面に
まで一部侵攻して描画されてしまいます。
逆に上記の描画順序を逆にしても、弾がボード画面に一部侵攻してしまいます。

お互いの画面で描画するオブジェクトをうまく境目付近で綺麗に消す方法はどのようにすればよいでしょうか?

お忙しいところ申し訳ございませんが、よろしくお願い致します。


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


Name: ookami  ..プログラマー(37,393ポイント)   Date: 2010/07/28(水) 12:22   No:57624     
Title: Re:境界線付近の描画について    
DXライブラリであれば、描画範囲を指定する関数がありますが、参考になりますでしょうか?
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N3


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

Name: シエル  ..プログラマー(36,386ポイント)   Date: 2010/07/28(水) 12:24   No:57625     
Title: Re:境界線付近の描画について    
失礼しました。DXライブラリではありません。
DirectXとWinAPIで作成中です。


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

Name: ぬるぽ  ..入門者(3,746ポイント)   Date: 2010/07/28(水) 12:26   No:57626     
Title: Re:境界線付近の描画について    
シエルさんは確かDirectXでゲームを作成しているんでしたっけ・・
DXライブラリならば(龍神録でいうならば)

SetDrawArea( FX, FY, FX+FMX, FY+FMY);

で境界を作ることができます。参考までにどうぞ。


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

Name: ぬるぽ  ..入門者(3,785ポイント)   Date: 2010/07/28(水) 12:27   No:57627     
Title: Re:境界線付近の描画について    
あ・・被ってしまった。
DirectXについては分からないので他の方の意見を聞いてください


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

Name: へろり  ..プログラマー(26,702ポイント)   Date: 2010/07/28(水) 12:40   No:57628     
Title: Re:境界線付近の描画について    
DirectXはさっぱり分かりませんが、SelectClipRgn()等は使えませんか

追記です。

グーグル先生に聞いたところ、クリッピング処理を専門に行うIDirectDrawClipperというインターフェイスがあるそうです。
しかしとても遅いので、自前で実装しました。 と下記のサイトに説明があります。

http://hp.vector.co.jp/authors/VA012320/directx4.html
 編集済み


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

Name: シエル  ..プログラマー(37,059ポイント)   Date: 2010/07/28(水) 13:05   No:57630 解決!     
Title: Re:境界線付近の描画について    
>>へろりさん

ありがとうございます。
SelectClipRgn試しました。が、DirectXでの描画には効果が無かったです。勉強になりました。

>グーグル先生に聞いたところ、クリッピング処理を専門に行うIDirectDrawClipperというインターフェイスがあ
>るそうです。 
>しかしとても遅いので、自前で実装しました。 と下記のサイトに説明があります。

このページの解説はDirectDrawでの方法のようです。これはDirectX7ぐらいでのバージョンの話になるようです。
私はDirectX9で開発しています。
Directx9はDirectDrawは廃止されてしまっています。

>>ぬるぽさん、ookamiさん

DXライブラリの本家ページにあった、DXライブラリのライブラリ自体を落っことしてきて、
setdrawarea関数のソースを見ました。
どうやらビューポートの設定を変えて描画領域を指定しているようでした。
ですが、ビューポートに関してはまだ詳しくないので、できるかわかりませんが、調べてやってみます。


皆さんの回答を見るまでは描画領域を指定して描画するという発想が頭が固いせいか、出てこなかったので
非常に参考になりました。
それで思いついた方法として、ボードの描画先のレンダリングターゲットを変更して、
大きさを指定したテクスチャに描画するようにし、最後にバックバッファに描画する方法が思いつきました。

一回どちらかの方法でやってみて、無理そうならまた考えます。
なので、一旦解決にしておきます。
ありがとうございました!

まだ他に良い方法を知ってる方がいらっしゃったら、回答お願い致します!


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

Name: DVDM [URL]  ..熟練のプログラマー(55,221ポイント)   Date: 2010/07/28(水) 13:52   No:57637     
Title: Re:境界線付近の描画について    
>>シエルさん
管理人さんが描画範囲を指定して描画しているのかはわからないですが
簡単な方法でいいのであれば、DirectX ではなく
画像と描画の順番を変えるだけで出来るかもしれません。

例えば件の紅葉ですが、添付画像では画面下の方で紅葉が切れているので
キャラを動かせる範囲の部分をボードから切り取り、
画面下の狭い隙間に紅葉が隠せるように何か描画しているような感じに見えました。

紅葉が切れている部分(赤丸の部分)をよく見てみると
1px 程ズレてるように見えたのでそうではないかなという意見でした。 


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

Name: シエル  ..プログラマー(37,294ポイント)   Date: 2010/07/28(水) 14:12   No:57641     
Title: Re:境界線付近の描画について    
>DVDMさん

ええと、私の理解不足で描画順番がいまいちわからないのですが、
現状は
@弾を描画
Aボードを描画

の順にすると、ボード画面の紅葉がはみ出してしまい、
上記を逆にすると、弾がボードにはみ出てしまう状態です。

分かりやすく描画の順番を説明していただけると助かります。。


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

Name: DVDM [URL]  ..熟練のプログラマー(55,459ポイント)   Date: 2010/07/28(水) 15:30   No:57656     
Title: Re:境界線付近の描画について    
>>シエルさん
うぅ…実装してみようと思いやってきましたが
描画順番を変えただけでは解決できそうになかったです…。
理解不足はこちらの方でした;
申し訳ございません!


DirectX の関数ですが IDirect3DDevice9::SetViewport は駄目ですかね…。

D3DVIEWPORT9 ViewPort;

ViewPort.X = 0;
ViewPort.Y = 0;
ViewPort.Width = 100;
ViewPort.Height = 200;
ViewPort.MinZ = 0.0f;
ViewPort.MaxZ = 1.0f;(修正箇所)

デバイス->SetViewport(&ViewPort);

左上から100*200の範囲で描画できますが、こういうのではないんですよね; 編集済み


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

Name: シエル  ..プログラマー(37,435ポイント)   Date: 2010/07/28(水) 16:46   No:57660 解決!     
Title: Re:境界線付近の描画について    
>DVDMさん

ありがとうございます!まさにこれを求めてました!
これで指定した範囲だけ描画することができるようになりました!
非常に助かりました!
これにて完全解決とさせていただきます!


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

Name: スキマ妖怪  ..入門者(3,686ポイント)   Date: 2010/07/28(水) 17:14   No:57665     
Title: Re:境界線付近の描画について    
解決されてしまったようですが、別の方法ということで…
参考までにどうぞ

↓ステンシルバッファを使ってクリップ処理をする方法みたいです

http://marupeke296.com/DXG_No54_StencilClipping.html


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

Name: シエル  ..プログラマー(37,482ポイント)   Date: 2010/07/28(水) 18:05   No:57671     
Title: Re:境界線付近の描画について    
>>スキマ妖怪さん

ステンシルバッファですか。難しそうですが、参考にさせていただきます!
ありがとうございました!


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



Name: dic  ..比類無きプログラマー(88,275ポイント)   Date: 2010/07/27(火) 20:11   No:57561       
Title: ファイルの移動処理    
MSDNで調べたのですが、ファイルのオープンやクローズなどはあったのですが、
ファイルを移動させる関数が見つけれなかったので質問させてください

現在
888.jpg
777.jpg
...
111.jpg
と、画像ファイルが3000〜あり、これを
画像フォルダに移動させたいのです


hoge.exe
*.jpg << これを
[画像] << (フォルダ)
    +
    |
    |
    |
    L___*.jpg << ここにもってくる


上のようなファイルの移動の処理をしたいのですが、
関数はあるのでしょうか?
WIN32APIでもいいです

環境:WindowsXP Visual C++ 6
制限:batファイルでなく C/C++言語で


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


Name: dic  ..比類無きプログラマー(88,304ポイント)   Date: 2010/07/27(火) 20:19   No:57563 解決!     
Title: Re:ファイルの移動処理    
すいません、見つけました
MoveFileでいけそうです


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

Name: ISLe  ..中級者(9,165ポイント)   Date: 2010/07/27(火) 23:19   No:57573     
Title: Re:ファイルの移動処理    
C標準関数はrenameです。


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

Name: dic  ..比類無きプログラマー(88,304ポイント)   Date: 2010/07/28(水) 16:49   No:57662     
Title: Re:ファイルの移動処理    
おお renameでもできました
ありがとうございます

ちょっと予想外の使われ方でした




Name: ぜらーちん  ..ぴよぴよ(751ポイント)   Date: 2010/07/28(水) 08:51   No:57604       
Title: 変数初期化(XOR)に関しての意見    
お世話になってます。
今回は変数初期化(XOR)に関して、みなさんを意見を聞きたくて書き込みしました。

c言語の初期化で、一般的だと思われるのは
int cnt = 0;
だと思います。

私は学生のころ、ゲームプログラミング(C,C++)を勉強していまして
そのころの講師に、体感では分からないけどXOR初期化の方が早いよと習いました。(何回も初期化する場所や大型のプログラムなら)

その後、初期化に関しては
cnt ^= cnt;
といった形で初期化してきましたが、その後ゲーム関係ではありませんが、
組み込み系の企業に就職した際の研修で、XOR初期化をしていたところ、
XORで初期化をするなと怒られました。

理由としては、見る側が分かりづらいということです。
海外の人たちはXORでの初期化何て分からないと言われまして(//初期化みたいなコメントを付けましたが)それ以降使ってきませんでした。

ふと、そのことを思い出したので他の方々の意見を聞きたい処です。
やはりXOR初期化は余り好まれないのでしょうか?

よろしくお願いします


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


Name: シエル  ..プログラマー(36,288ポイント)   Date: 2010/07/28(水) 09:11   No:57606     
Title: Re:変数初期化(XOR)に関しての意見    
cnt ^= cnt;ってビット演算だから早いのかな?
この初期化方法は初めて見ました。

単に代入するのとそんなに速度に違いが出るんですかね?
う〜ん。勉強になりました。
独り言みたいですいません。。。


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

Name: toyo  ..熟練のプログラマー(54,653ポイント)   Date: 2010/07/28(水) 10:01   No:57610     
Title: Re:変数初期化(XOR)に関しての意見    
その昔アセンブラでプログラムしていた頃
レジスタの初期化で普通に
LD A, 0
のようにしていました(Z80のニーモニックです)
私が最初に買ったSHARPのMZ-1200というパソコンについていたソースコードで
XOR A
の記述を見てそれがAレジスタの初期化とわかり感動した記憶があります
当時は搭載メモリも少なくCPU速度も遅いので1バイトでも短く1クロックでも早くというプログラムが望まれていたのでこのようなテクニックが生み出されたのかなと考えます

今のCコンパイラでしたら0の初期化は最適化されてXORに自動で置き換えられることが多いのではないでしょうか
それなら初期化の目的であえてわかりにくいビット演算を使うのは不適切かと思います


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

Name: たかぎ [URL]  ..ハッカー(216,446ポイント)   Date: 2010/07/28(水) 10:39   No:57614     
Title: Re:変数初期化(XOR)に関しての意見    
アセンブラではよくやる方法ですが、C/C++の場合は意味がありません。
それ以上に、不定値を参照することになるのでよくないでしょう(建前上、トラップ表現の可能性もあるわけですし)。


Name: ぜらーちん  ..ぴよぴよ(985ポイント)   Date: 2010/07/28(水) 11:12   No:57615 解決!     
Title: Re:変数初期化(XOR)に関しての意見    
みなさんコメントありがとうございます。

最近のコンパイラは優秀ですね…、0の方が分かりやすいのは
色々な人が見るのには確かに、です。

確かに、最初の初期化でやると ??? と ??? をぶつけることになるので
良くなさそうです。

最初の初期化ではなく、0クリアしたい場合には…と考えても
コンパイラがやってくれるのなら0でいいですね。

ポケットコンピュータでBASICをやってたこともあり、
XORが結構馴染んでいたので、使いたい処ですが、
みなさんの意見の通り、やはり0の方が良さそうですね。

有難うございました。


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

Name: たかぎ [URL]  ..ハッカー(216,532ポイント)   Date: 2010/07/28(水) 11:43   No:57618     
Title: Re:変数初期化(XOR)に関しての意見    
あらゆるプロセッサでXOR Aに展開されるならよいのですが、アーキテクチャによっては同じレジスタ同士の演算ができません。
その場合、いったん別のレジスタやメモリに値をコピーし、その上でXORの計算を行うことになりますので、そんなプログラムは大きく、遅いものになってしまいます。

また、XOR Aができるアーキテクチャであっても、型によっては必ずしも効率がよくなるわけではありません。
こういうのはコンパイラに任せるべきですね。


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

Name: softya [URL]  ..ハッカー(187,393ポイント)   Date: 2010/07/28(水) 15:48   No:57659     
Title: Re:変数初期化(XOR)に関しての意見    
アセンブラでは良く見かけますが、高級言語ではまずXORで初期化しているのは見たことないです。
XORだとPICマイコンとかでは確かに効率が悪そうですね。コンパイラに任せるべきだと思います。


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



Name: abc  ..入門者(4,663ポイント)   Date: 2010/07/28(水) 14:42   No:57649       
Title: リボンインターフェース    
C++ VS2008 リボンインターフェースを使う事になったのですが、
オススメのサイト、本などあれば教えてください。


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


Name: softya [URL]  ..ハッカー(187,339ポイント)   Date: 2010/07/28(水) 15:34   No:57657     
Title: Re:リボンインターフェース    
使ったことは無いですが、MFCのFeaturePackにあるはずです。
http://msdn.microsoft.com/ja-jp/library/bb982354.aspx
書籍や一般サイトは存じませんので、MSDNのサイト辺りを参考にしてもらうのが良いかと思います。
http://msdn.microsoft.com/ja-jp/magazine/cc507634.aspx


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

Name: abc  ..入門者(4,693ポイント)   Date: 2010/07/28(水) 15:40   No:57658     
Title: Re:リボンインターフェース    
softya様、ありがとうございます。
参考にさせていただきます。



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



Name: ひよこん  ..ぴよぴよ(162ポイント)   Date: 2010/07/28(水) 11:28   No:57616       
Title: ファイルの読み書き    
初歩的な質問で大変申し訳ありません
ファイルをfgetsで読み込んだものをfprintfで書き込む方法を教えてください。

FILE *fp;
FILE *text
char str[100];
char *tt= "10";
char *search;

while(fgets(str,sizeof(str),fp))
{
   if(tt != NULL)
   {
        search = strstr(str,tt);
        fprintf(text, "%s", search);
   }
}

セグメンテーション違反とのエラーになっているのですが、どのように解決すればいいのでしょうか?


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


Name: シエル  ..プログラマー(36,302ポイント)   Date: 2010/07/28(水) 11:32   No:57617     
Title: Re:ファイルの読み書き    
fopenした?ほかにもたくさん変なとこあるけど。

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

Name: ひよこん  ..ぴよぴよ(271ポイント)   Date: 2010/07/28(水) 11:46   No:57619     
Title: Re:ファイルの読み書き    
変な所!? どこを直せばいいのでしょう!?

fopenはしました!

if(!(fp = fopen("sample.txt", "r"))){
            printf("can not open file.\n");
        }

while(fgets(str,sizeof(str),fp))
{
   if(tt != NULL)
   {
        search = strstr(str,tt);
        fprintf(text, "%s", search);
   }

fclose(fp);
fclose(text);

上記のようにしています


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

Name: バグ  ..ハッカー(200,408ポイント)   Date: 2010/07/28(水) 12:01   No:57621     
Title: Re:ファイルの読み書き    
読み込み用のファイルはオープンされているようですが、書き込み用ファイルはオープンされていないように見えます。


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

Name: シエル  ..プログラマー(36,350ポイント)   Date: 2010/07/28(水) 12:09   No:57623     
Title: Re:ファイルの読み書き    
if(tt != NULL) 
↑これは何か意味があるんですか?


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

Name: ひよこん  ..ぴよぴよ(600ポイント)   Date: 2010/07/28(水) 12:56   No:57629     
Title: Re:ファイルの読み書き    
>読み込み用のファイルはオープンされているようですが、書き込み用ファイルはオープンされていないように見えます。

書き込み用ファイルを追記してみました!
エラーはそのままです。


>if(tt != NULL) 
↑これは何か意味があるんですか?

search = strstr(str,tt);   
   if(tt != NULL)

strstrの検索値で使用しようとしていました。

以下に変更してみましたがセグメンテーション違反がでてしまってしまいました

if(!(fp = fopen("sample.txt", "r"))){
            printf("can not open file.\n");
        }
if(!(text = fopen("test.txt", "w"))){
            printf("can not open file.\n");
        }

while(fgets(str,sizeof(str),fp))
{
   search = strstr(str,tt);   
   if(tt != NULL)
   {
        fprintf(text, "%s", search);
   }

fclose(fp);
fclose(text); 



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

Name: シエル  ..プログラマー(37,084ポイント)   Date: 2010/07/28(水) 13:08   No:57631     
Title: Re:ファイルの読み書き    
いえ、ttの値は変化しないのに、なぜif文で判定しているのかと思いまして。。

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

Name: Mist  ..比類無きプログラマー(84,168ポイント)   Date: 2010/07/28(水) 13:09   No:57632     
Title: Re:ファイルの読み書き    
  if(tt != NULL) 



  if(search != NULL) 

の間違いじゃないですか?
ttがNULLになることは無いですよ。


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

Name: toyo  ..熟練のプログラマー(54,693ポイント)   Date: 2010/07/28(水) 13:11   No:57633     
Title: Re:ファイルの読み書き    
fopenに失敗してるんじゃないでしょうか
sample.txtのパスが違うとか


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

Name: ひよこん  ..ぴよぴよ(882ポイント)   Date: 2010/07/28(水) 13:42   No:57634     
Title: Re:ファイルの読み書き    
>fopenに失敗してるんじゃないでしょうか 
>sample.txtのパスが違うとか 

   if(search != NULL || search_20 != NULL)
   {
        printf("%s", search);
        fprintf(text, "%s", search);
  }
printfすると、出力されるのでfopenは成功してると思っていたんですが、できていないのもあるんですか!?
調べてみます
fprintfの使い方を見直します。


> if(search != NULL)  
にしてみました。セグメンテーション違反はなくなったのですが

次にもう一つ検索条件を追加しなければいけないのを忘れていまして

char *search_20; 
char *tt_20 = "20";

while(fgets(str,sizeof(str),fp))
{
   search = strstr(str,tt); 
   search_20  = strstr(str,tt_20);
  
   if(search != NULL || search_20 != NULL)
   {
        fprintf(text, "%s", search);
        fprintf(text, "%s", search_20);
   }
}
上記のようにしたらまた、セグメンテーション違反になってしまいました。


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

Name: ぜらーちん  ..かけだし(1,667ポイント)   Date: 2010/07/28(水) 13:46   No:57635     
Title: Re:ファイルの読み書き    
簡単に作ってみた(if~elseの分岐は逆がいいかもしれないけど!になってたからこういう風に)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUF 256
#define WORD "10"

int main(){
    
    FILE *fp = NULL; 
    FILE *text = NULL; 
    char str[BUF] = {'\0'}; 
    char *tt= WORD; 
    char *search = NULL; 
    
    if(!(fp = fopen("sample.txt", "r"))){ 
       printf("can not open file.\n"); 
    }
    else{  //検索ファイルが読み込めたら
        if(!(text = fopen("test.txt", "w"))){ 
           printf("can not open file.\n"); 
        } 
        else{ //出力ファイルも読み込めたら
            while(1) 
            { 
               if(fgets(str, BUF, fp) == NULL){ 
                  break;//最後になるまで取り出し
               }
               
               search = strstr(str, tt); //検索してみる
               if(search != NULL){ //見つかった
                    fprintf(text, "%s", search); 
               }
            }
        }
    }
    if(fp != NULL){
        fclose(fp);        //開いてもいないのに閉じたら困るため
    }
    if(text != NULL){ 
        fclose(text);    //開いてもいないのに閉じたら困るため
    }
    
    return(0);
}


エラーが出てた場所はここ
if(tt != NULL) 

    fprintf(text, "%s", search); 
}

なんかこの辺で出てたきがする
その辺は調べて(’’

後if文だけど、ttで判定しても意味ない気がする
searchにNULLかアドレスだっけ、が入るのだから
searchで見ないとダメな気がする


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

Name: バグ  ..ハッカー(200,460ポイント)   Date: 2010/07/28(水) 13:50   No:57636     
Title: Re:ファイルの読み書き    
   if(search != NULL || search_20 != NULL) 
   { 
        fprintf(text, "%s", search); 
        fprintf(text, "%s", search_20); 
   }
 


この判定文はまずいんじゃない?片方がNULLの場合でも書き込みしちゃうけど…?
っていうか、どうしたいの?

ひょっとして、どちらもNULLでない場合に両方書き込みたいの?


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

Name: ひよこん  ..ぴよぴよ(981ポイント)   Date: 2010/07/28(水) 14:06   No:57638     
Title: Re:ファイルの読み書き    
ぜらーちん様ありがとうございます。
サンプルを提示していただきまして、早速なおしてなんでできないのか探してみます

>ひょっとして、どちらもNULLでない場合に両方書き込みたいの?
そうなのです。どちらかでもあれば、ファイルに書き込むという処理を入れたいです。


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

Name: ぜらーちん  ..かけだし(1,807ポイント)   Date: 2010/07/28(水) 14:08   No:57639     
Title: Re:ファイルの読み書き    
条件式が複数ある場合()したほうがいいと思う
× if(search != NULL || search_20 != NULL) 
○ if( (search != NULL) || (search_20 != NULL) )

後、みたことなかったので質問なのですが

while(fgets(str,sizeof(str),fp)) 

これでループ条件としてはきちんと成り立っているのでしょうか?


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

Name: シエル  ..プログラマー(37,150ポイント)   Date: 2010/07/28(水) 14:10   No:57640     
Title: Re:ファイルの読み書き    
>そうなのです。どちらかでもあれば、ファイルに書き込むという処理を入れたいです。

ん?どっちかがNULLだった場合に今のままじゃNULLの方も書き込んでしまうと思いますが。


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

Name: ぜらーちん  ..かけだし(2,060ポイント)   Date: 2010/07/28(水) 14:17   No:57642     
Title: Re:ファイルの読み書き    
なんか違和感あったと思ったら
while(fgets(str,sizeof(str),fp))

条件式がなかったのか

NULLになるまで回したいなら
while(fgets(str, sizeof(str), fp) != NULL)
じゃないと、ダメなような

if(search != NULL || search_20 != NULL){ 
        fprintf(text, "%s", search); 
        fprintf(text, "%s", search_20); 
}

↑だと、探せてもいない方を書き込もうとしたり
両方探せてたら二回書き込むことになるんじゃない?

//search出来ていた場合
if(search != NULL){
   fprintf(text, "%s", search);
}
//search_20出来ていた場合
else if(search_20 != NULL){
   fprintf(text, "%s", search_20);
}

で、いいのではないでしょうか?
二回デテキタラ…
else{
   if(xxxx){}
}
で・・・


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

Name: ひよこん  ..かけだし(1,124ポイント)   Date: 2010/07/28(水) 14:18   No:57643     
Title: Re:ファイルの読み書き    
>while(fgets(str,sizeof(str),fp)) 
これでループ条件としてはきちんと成り立っているのでしょうか?

ファイルの中身を最初から最後まで表示されてましたのでいいのかと・・・

>ん?どっちかがNULLだった場合に今のままじゃNULLの方も書き込んでしまうと思いますが。

そうなんです!ファイルに書き込み処理がうまくいってないのであれなんですが
printfなどで表示されるとNULLなのに表示されてしまうんです。
でも、どうしたらでなくなるのかわからないんです。


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

Name: バグ  ..ハッカー(200,734ポイント)   Date: 2010/07/28(水) 14:25   No:57644     
Title: Re:ファイルの読み書き    
>>ひよこんさん
>>そうなのです。どちらかでもあれば、ファイルに書き込むという処理を入れたいです。

結局どっちなの?(^_^;)
「どちらかでもあれば、ファイルに書き込む」というのは、「NULLではない有効なデータのみを書き込む」という事ですか?


>>ぜらーちんさん
>>条件式が複数ある場合()したほうがいいと思う
>>× if(search != NULL || search_20 != NULL)
>>○ if( (search != NULL) || (search_20 != NULL) )

自分の意図したように動いているならば、これは問題ないと思いますよ?
個人的には今回程度の判定文ならば、上記の方が好きですね。

更に条件が増えてきた場合は縦に並べますが…

if (search    != NULL ||
    search_1  != NULL ||
    search_2  != NULL ||
    search_3  != NULL ||
    search_4  != NULL ||
    search_20 != NULL)
{
    /* なんらかの処理 */
}


こんな感じ?



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

Name: ひよこん  ..かけだし(1,225ポイント)   Date: 2010/07/28(水) 14:30   No:57645     
Title: Re:ファイルの読み書き    
>「NULLではない有効なデータのみを書き込む」という事ですか? 
そのようにしたいです

strstr()で探して、検索対象文字が見つかったらファイルに保存!
したいのはこれだけなんですが、うまくいかなくて(;;)


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

Name: シエル  ..プログラマー(37,256ポイント)   Date: 2010/07/28(水) 14:34   No:57646     
Title: Re:ファイルの読み書き    
検索文字が見つかったら、その行だけファイルに保存したいってことですか?

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

Name: バグ  ..ハッカー(201,292ポイント)   Date: 2010/07/28(水) 14:36   No:57647     
Title: Re:ファイルの読み書き    
おっとすれ違いでしたね。


if (search != NULL)
{
    fprintf(text, "%s", search);
}

if (search_20 != NULL)
{
    fprintf(text, "%s", search_20);
}



そういう事ならこれでどうでしょ?


>>ぜらーちんさん
>>なんか違和感あったと思ったら

>>while(fgets(str,sizeof(str),fp))

>>条件式がなかったのか

>>NULLになるまで回したいなら

>>while(fgets(str, sizeof(str), fp) != NULL)

>>じゃないと、ダメなような

駄目ではないです。
NULLが戻れば条件は必ず「偽」になって抜けるので、結果的にNULLではない値の間はループを続けられます。
勿論、明示的にすることによる読みやすさの向上というメリットはあります。


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

Name: ひよこん  ..かけだし(1,377ポイント)   Date: 2010/07/28(水) 14:40   No:57648     
Title: Re:ファイルの読み書き    
そうなのです。それでコレでできないかな?と思ったら動かなくて・・・

char *tt = 10
char *tt_20 = 20 

  search = strstr(str,tt);
  search_20 = strstr(str,tt);
 if((search != NULL ) || (search_20 != NULL ))
  {
        fprintf(text, "%s", search); 
        fprintf(text, "%s", search);
   }

strstrで探して、
>検索文字が見つかったら、その行だけファイルに保存したい
そうしたいのです。


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

Name: シエル  ..プログラマー(37,356ポイント)   Date: 2010/07/28(水) 14:46   No:57650     
Title: Re:ファイルの読み書き    
どちらの検索文字も見つかったら、その「行」を書き込むんだったら、

if(search!=NULL && search_20!=NULL)
{
   fprintf(text,"%s",str);
}

どちらか一つでも、あれば書き込むんだったら

if (search != NULL || search_20!=NULL)
{
    fprintf(text, "%s", str);
}



でいいのでは?


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

Name: ぜらーちん  ..かけだし(2,468ポイント)   Date: 2010/07/28(水) 14:48   No:57651     
Title: Re:ファイルの読み書き    
>>バグさん
ifとかの条件式の書き方とかって結局のところ好みですからね〜
whileの部分なるほど、NULL省略してもok何ですね。メモメモ

>> if文だけだと、同じのが二回かかれてしまうような

>>ひよこんさん

例えば、例文として以下の文章があったとして…
in.txt
10 20 30 40 50 60
10 10 10 20
50
EOF

出力結果的にはどう出したいのでしょうか?
今のプログラムのままですと
out.txt
10 20 30 40 50 60
10 10 30 10 20

って出ます

それとも
out.txt
10 20
10 10 10 20

って感じに出したいのでしょうか?


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

Name: ひよこん  ..かけだし(1,383ポイント)   Date: 2010/07/28(水) 15:06   No:57652     
Title: Re:ファイルの読み書き    
例えば、例文として以下の文章があったとして…
in.txt
10 20 30 40 50 60
10 10 10 20
50
EOF 

↓↓↓↓
out.txt
10 20 30 40 50 60
10 10 30 10 20

10があったからこの行書き込む
20があったからこの行書き込むです



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

Name: バグ  ..ハッカー(202,048ポイント)   Date: 2010/07/28(水) 15:10   No:57653     
Title: Re:ファイルの読み書き    
>>検索文字が見つかったら、その行だけファイルに保存したい 
>>そうしたいのです。

これで、やっとやりたい事が理解できた(^_^;)


>>ぜらーちんさん
>>if文だけだと、同じのが二回かかれてしまうような

確かにその通りですね。失礼いたしました…m(__)m



#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE        1024
#define LOAD_FILE_PATH    "load.txt"
#define SAVE_FILE_PATH    "save.txt"

int main(void)
{
    const char* pKey1 = "10";            // 比較用文字列その1
    const char* pKey2 = "20";            // 比較用文字列その2
    char szBuf[BUFFER_SIZE] = {0, };    // 1行分の文字列読み込み用バッファ
    FILE* pLoad = NULL;                    // 読み出し用ファイルポインタ
    FILE* pSave = NULL;                    // 書き込み用ファイルポインタ


    // 読み出し用のファイルオープン
    if ((pLoad = fopen(LOAD_FILE_PATH, "r")) == NULL)
    {
        // ファイルオープンに失敗
        printf("Load File Open Error\n");
        return -1;
    }

    // 書き込み用のファイルオープン
    if ((pSave = fopen(SAVE_FILE_PATH, "w")) == NULL)
    {
        // 読み出し用のファイルをクローズする
        if (pLoad != NULL)
        {
            fclose(pLoad);
        }

        // ファイルオープンに失敗
        printf("Save File Open Error\n");
        return -1;
    }

    // ファイルの終端まで1行ずつ読み込む
    while (fgets(szBuf, BUFFER_SIZE, pLoad) != NULL)
    {
        // 読み込んだ文字列にキー文字列が存在するか?
        if (strstr(szBuf, pKey1) != NULL || strstr(szBuf, pKey2) != NULL)
        {
            // 文字列が見つかったので書き込む
            fputs(szBuf, pSave);
        }
    }


    // ファイルをクローズして後始末をする
    fclose(pLoad);
    fclose(pSave);
    return 0;
}


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

Name: ぜらーちん  ..入門者(2,621ポイント)   Date: 2010/07/28(水) 15:11   No:57654     
Title: Re:ファイルの読み書き    
なるほど、ちなみに例文修正(30抜けてた)

10 20 30 40 50 60 
10 10 30 10 20

後は、10と20が二つあるから
10 20 30 40 50 60 
10 20 30 40 50 60 

っていう風にもしなくてok何ですよね?
10もしくは20もしくは10と20両方ある行を1行出すみたいな

それでしたら、上に出ているので大丈夫ではないでしょうか?


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

Name: ひよこん  ..かけだし(1,317ポイント)   Date: 2010/07/28(水) 15:21   No:57655 解決!     
Title: Re:ファイルの読み書き    
ありがとうございます! 動きました!
そして、すっごく勉強になりました。

お手数をお掛けし申し訳ありませんでしたが本当にありがとうございます


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



Name: かしも  ..ぴよぴよ(7ポイント)   Date: 2010/07/27(火) 10:49   No:57536       
Title: ボスについて(50章)    
ボスのHPのライン(?)の本数を変えるにはどうすればいいのですか

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


Name: シエル  ..プログラマー(34,764ポイント)   Date: 2010/07/27(火) 11:06   No:57540     
Title: Re:ボスについて(50章)    
本数って何ですか?

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

Name: かしも  ..ぴよぴよ(67ポイント)   Date: 2010/07/27(火) 11:44   No:57547     
Title: Re:ボスについて(50章)    
本数って言い方は変でしたね、すみませんm(_ _)m

ボスのスペル一つ一つに別々のHPを付けるにはどうすればい良いでしょうか?


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

Name: ぜらーちん  ..かけだし(1,088ポイント)   Date: 2010/07/27(火) 11:49   No:57548     
Title: Re:ボスについて(50章)    
>>http://dixq.net/board/board.html
それようの画像を用意して、表示したい座標に表示すればいいのではないでしょうか?
classで管理しているのであれば、継承とかを使って複製して管理すればいいと思います


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

Name: シエル  ..プログラマー(35,114ポイント)   Date: 2010/07/27(火) 11:52   No:57549     
Title: Re:ボスについて(50章)    
50章なんですよね?

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

Name: jay  ..上級者(18,479ポイント)   Date: 2010/07/27(火) 16:36   No:57553     
Title: Re:ボスについて(50章)    
えーと、早いお話がボスの弾幕毎にボスのHPを変えたい訳ですね?
それでは僕がやっているやり方(と言うより考え方)を簡単に紹介しますね

少し違うところから話が入りますが
ボスがつかう弾幕は”boss_shot_main”関数において、”boss_shot_bullet[boss.knd]”の部分で決められています

”boss_shot_bullet”は”func.h”で決められた配列を示している訳です。
それを”boss.knd”の数値を一つずつ増やしていくことで、決められた順番に弾幕を出している訳です。


この事を応用しまして
適当な配列(例えばboss_hp_maxなど)を作り
それに10000,8000など任意の値を代入して、上と同じく”boss.knd”に対応した弾幕の時に”boss.hp”に代入すればいいです。


boss.hp = boss_hp_max[boss.knd]
といった感じですね。


それでは頑張って下さい 編集済み


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

Name: ぬるぽ  ..入門者(3,688ポイント)   Date: 2010/07/27(火) 17:58   No:57557     
Title: Re:ボスについて(50章)    
もしかしたら、もしかするかもしれないので…

添付画像より、
@ボスのHPを通常弾幕とスペルカードで色を分ける
Aボスの残り弾幕数を知らせる(星部分)

のどちらかの処理について聞いてるのでしょうか?
違っていたらこの文章はスルーして構いません。


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

Name: かしも  ..ぴよぴよ(52ポイント)   Date: 2010/07/28(水) 10:20   No:57611 解決!     
Title: Re:ボスについて(50章)    
ぜらーちんさん、jayさん、ぬるぽさん

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

おかげで万事解決オールオッケーです。


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



Name:  ..かけだし(1,493ポイント)   Date: 2010/07/28(水) 01:08   No:57593       
Title: OpenGL ES での画像サイズの取得について    
下記のURLで質問させていただいたものです。
http://www.play21.jp/board/formz.cgi?action=res&resno=57501&page=&id=dixq&rln=57585

質問ばかりで申し訳ないのですが
もう一度アドバイスを頂けますと助かります。

現在iPhoneアプリをOpenGL ESにて開発しております。
UV座標系が複雑なのでスクリーン座標でも開発できるライブラリを作ろうとしております。

そこで描画の関数を作っておりどうしても読み込んだテクスチャの画像を取得する必要が出てきました。
色々と調べてみたのですがObjective-cで書かれたものは
見つけたのですがCよりで書かれたものを見つけることができませんでした。

下記のソースは引数の座標の中心に描画するというものです。
ソースでは画像を512と仮定しておりますが
ここをGLuint textureから取得して読み込むような仕様にしたいです。
どのようにすればよいのか教えては頂けないでしょうか。


void DrawTexture( int x, int y, GLuint texture, int red, int green, int blue, int alpha ){

    int width = 512;
    int height = 512;
    
    int w = width / 2;
    int h = height / 2;

    //長方形を構成する四つの頂点の座標を決定します
    const GLfloat squareVertices[] = {
        x-w,    y-h,
        x+w,    y-h,
        x-w,    y+h,
        x+w,    y+h,
    };
    
    //長方形を構成する四つの頂点の色を指定します
    //ここではすべての頂点を同じ色にしています
    const GLubyte squareColors[] = {
        red, green, blue ,alpha,
        red, green, blue ,alpha,
        red, green, blue ,alpha,
        red, green, blue ,alpha,
    };
    
    //元画像のどの範囲を描画に使うかを決定します
    const GLfloat texCoords[] = {
        0.0f,            0.0f,
        0.0f+1.0f,        0.0f,
        0.0f,            0.0f+1.0f,
        0.0f+1.0f,        0.0f+1.0f,
    };

    //テクスチャ機能を有効にし、描画に使用するテクスチャを指定します
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture);


    //頂点座標と色、およびテクスチャの範囲を指定し、描画します
    glVertexPointer(2, GL_FLOAT, 0, squareVertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
    glEnableClientState(GL_COLOR_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    //テクスチャ機能を無効にします
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisable(GL_TEXTURE_2D);
}


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


Name: Justy  ..伝説なるハッカー(559,538ポイント)   Date: 2010/07/28(水) 02:16   No:57595     
Title: Re:OpenGL ES での画像サイズの取得について    
 読み込み時にサイズは判っているはずなのでそれを利用するじゃダメなのですか?

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

Name:  ..かけだし(1,575ポイント)   Date: 2010/07/28(水) 02:31   No:57597     
Title: Re:OpenGL ES での画像サイズの取得について    
度々、ご回答ありがとうございます。
下記のように読み込んでしまっております。
その為、どんどん値が書き変わってしまっております。

CGSize imageSize, textureSize;
NSString *imagePath;
    
// テクスチャの生成
imagePath = [[NSBundle mainBundle] pathForResource:@"back_ground" ofType:@"png"];
texBackGround = SZGLLoadTexture(imagePath, &imageSize, &textureSize);
    
imagePath = [[NSBundle mainBundle] pathForResource:@"mato" ofType:@"png"];
texTarget = SZGLLoadTexture(imagePath, &imageSize, &textureSize);

できれば他の箇所でも使い回したいので
int width = 512;
int height = 512;
の所に読み込みたいです。
こういうことは難しいのでしょうか・・・?


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

Name: Justy  ..伝説なるハッカー(559,586ポイント)   Date: 2010/07/28(水) 02:45   No:57598     
Title: Re:OpenGL ES での画像サイズの取得について    
>どんどん値が書き変わってしまっております
 テクスチャ名と対になる imageSizeらを用意してそれを使えば書き換わることはなくなりますよ。
 面倒なら SZGLTextureクラスを使ってみる(或いは参考にして C/C++に書き直してみる)のも手かもしれません。


>こういうことは難しいのでしょうか
 OpenGLなら glGetTexLevelParameteriv / glGetTexLevelParameterfvで取得できますが、
OpenGL ESには無かったと思います。


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

Name:  ..かけだし(1,856ポイント)   Date: 2010/07/28(水) 05:09   No:57599     
Title: Re:OpenGL ES での画像サイズの取得について    
やはり管理するクラスを作った方がいいですか・・・。
素直にあるものを使います。

ご指摘頂いた通りにクラスを作って管理することにしました。
こんな感じに・・・
class Texture{
public:
    GLuint texture;
    CGSize imageSize, textureSize;
    NSString *imagePath;
};

>>或いは参考にして C/C++に書き直してみる
というのはBitmap型を使うなりしてやるってことですよね?
多分、私程度では無理ですww

探してみたのですがESにはないのですね><
勉強になりました。

Justyさん、かじった程度のレベルではない気がします><
聞きたいことが一杯あるのですが悪いので
本当にわからなくなりましたら再びお尋ねさせて頂くかもしれません。
その際はまた助けて頂けますと幸いです。

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


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

Name:  ..かけだし(1,880ポイント)   Date: 2010/07/28(水) 10:00   No:57609 解決!     
Title: Re:OpenGL ES での画像サイズの取得について    
すみません。
解決マークつけ忘れてました。


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



Name: リク  ..入門者(4,169ポイント)   Date: 2010/07/27(火) 23:05   No:57568       
Title: C言語・ピラミッドアートについて    
C言語が教科書を読んでもよく理解できず、困っているのですが、
さらに、ピラミッドアートの課題が出題されてしまい、とても困っています。

入力された値を1辺とする図形を*で描画するプログラムを作成しなくてはいけません。
*の出力はループ、printf("*");を必要数ループさせるのが、条件らしく、
実現できた数や処理効率が重要視されるようです・・・。

正方形・三角形・逆三角形・三角旗・ダイヤ型・六角形・星型
など種類がいくつか紹介されました。

友人も作り方を教えてくれたのですが、先生や友達の教えてくれたものをただ打っているという感じで、
どうしてこうなったのか教科書を読んでも理解できません・・・

main
1辺入力
図形
swith(図形)
{
 case_
 sankaku
 case_
 sikaku

↑は先生に教えていただいたものなんですが、なぜ、swithをつかわなければならないのでしょうか?
最近、関数(ピラミッドアートで使うと何か便利なんでしょうか?)を習い始め、
関数を使ってもいいと言われたのですが、その関数もよく理解できず困っています。

そして、プログラムを少し友人に教えてもらいながら作っていたものの、while文で作っていたのですが、
先生はfor文のほうが便利だとおっしゃっていて、それが何故なのかも本当に分からないままです。

友人に質問しても呆れられてしまい、自分自身。教科書を読み直したり、先生の話ををきちんと聞いているのに、理解できない自分にウンザリしてしまいます。

けれど、なんとかもうすぐ関数のテストも近いですし、ピラミッドアートもきちんと理解しておきたいので、
今回。恥を覚悟で質問させていただきました。

お勧めサイトや本。ピラミッドアートに関しては、あまりいい本や参考サイトはないと思うのですが、
そちらなどでも助かります。

どなたか、詳しく、C言語、ピラミッドアートについて教えていただけると助かります。


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


Name: ぽこ  ..プログラマー(26,211ポイント)   Date: 2010/07/27(火) 23:18   No:57572     
Title: Re:C言語・ピラミッドアートについて    
この掲示板で、一昔前(2,3週間前?)に流行りました。
過去ログを見てみてはどうですか?


私からは、取り敢えず1点だけ。
switchと使わなければならない理由はないです。
同様に、while文で書けるものをfor文で書かなければならない理由もないです。
理由を考えるな、と言っているワケではなく、プログラミングに慣れてきたら
いずれ理解できることなので、とにかく動くものを作ってください。

#リクさん自身が作成されたプログラムを載せて、わからない場所を明示すると
#アドバイスもらい易いですよ。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,239,429ポイント)   Date: 2010/07/27(火) 23:27   No:57577     
Title: Re:C言語・ピラミッドアートについて    
全く同じ質問が最近よくありますが、皆さん同じ学校なんでしょうかね?

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

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

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

皆さんいつも途中でいなくなるので、段々回答が消極的になってしまっていますが・・。
一番上の回答が一番詳しく回答しています。(特にNo:55924)


● >なぜ、swithをつかわなければならないのでしょうか?

switch文を使えば

switch( 図形 ){

    case 三角形:
        三角形描画();
        break;

    case 四角形:
        四角形描画();
        break;

    case ダイヤ:
        ダイヤ描画();
        break;

    ・・・・
}

みたいにかけて綺麗だからじゃないですか?


●>先生はfor文のほうが便利だとおっしゃっていて、それが何故なのかも本当に分からないままです。

良く解らなければ一度両方で作ってみてはどうですか?
whileもforも全く同じ事が出来ます。
ただ、whileはループ回数が解らない時、forはループ回数が予め解っている時に使われる事が多いですね。
兎に角プログラムを書いてみる事が大事です。


●>その関数もよく理解できず困っています。

どの辺が解りませんか?
本やサイトなどで勉強してみました?
上でも言ったようにプログラムは本を読んだだけでは解りません。
数学と一緒で、教科書を読んで覚えるのではなく、演習で覚えるのです。
ということで、一通り学んだら関数を沢山自分で作ってみましょう。
その上で解らない事があれば聞いて下さい。
C言語の解説サイトは山のようにありますよ。
沢山紹介しても困るかもしれませんから、二つだけ紹介します。
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
http://www9.plala.or.jp/sgwr-t/
ここに書いてある関数について勉強してみて下さい。

後、家で使っているコンパイラは何でしょうか?


2倍のポイントを手に入れた! 1,764ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,239,498ポイント)   Date: 2010/07/27(火) 23:29   No:57579     
Title: Re:C言語・ピラミッドアートについて    
う、過去ログを見たらほとんど答えが載ってしまっていますね・・。
是非コピペではなく、自分なりにプログラムを作ってみて下さい。

まずは、入力した大きさの正方形を描画する所から始めると良いと思います。

解らない事があれば、どこがどう解らず、現在どんなプログラムを書いているか途中でいいので投稿してみて下さい。
アドバイスが受けられやすいと思います。


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

Name: lbfuvab  ..プログラマー(27,666ポイント)   Date: 2010/07/27(火) 23:32   No:57581     
Title: Re:C言語・ピラミッドアートについて    
揚げ足を取るようで申し訳ないですが、
>main
>1辺入力
>図形
>swith(図形)
>{
> case_
> sankaku
> case_
> sikaku

これだと三角形と四角形しかないように思うのですが、どうなのでしょう?

>↑は先生に教えていただいたものなんですが、なぜ、swithをつかわなければならないのでしょうか?
switch文ではなくif-else文でも出来ますが、単に効率の問題でしょう。
要は
switch(hoge){
    case LABEL1:
        /* 処理1 */
        break;
    case LABEL2:
        /* 処理2 */
        break;
}
の方が
if(hoge == LABEL1){
    /* 処理1 */
}
else if(hoge == LABEL2){
    /* 処理2 */
}

より分かりやすいと云うだけの話です。


for文とwhile文については

for(初期処理 ; 繰り返し判定 ; ループ後処理){
  /* ループ内容 */
}

の方が

初期処理
while(繰り返し判定){
  /* ループ内容 */
  ループ後処理
}

より判り易く、かつ見やすいからです(書いてみれば分かります


最後に
>どなたか、詳しく、C言語、ピラミッドアートについて教えていただけると助かります

まずは課題の仕様、使ってる環境、あなたがどこまでプログラムを書けているかを教えてください。




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

Name: リク  ..入門者(4,114ポイント)   Date: 2010/07/28(水) 07:37   No:57602 解決!     
Title: Re:C言語・ピラミッドアートについて    
皆さん、詳しい説明ありがとうございました。
while文やfor文など理由を考えすぎていたのかもしれません。
皆さんの説明で、とにかく今、作っているプログラムをもっと多く作らなければならないということがわかりました。さらにプログラムを作って頑張ってみます。ありがとうございました。


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

Name: バグ  ..ハッカー(200,358ポイント)   Date: 2010/07/28(水) 09:44   No:57607     
Title: Re:C言語・ピラミッドアートについて    
うーむ、煽る訳ではないのですが、誰も何の解説もしていない(過去ログのリンクを貼っただけ)のに、本当に分かりました?(^_^;)

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



Name:  ..ぴよぴよ(307ポイント)   Date: 2010/07/26(月) 16:33   No:57501       
Title: OpenGL ESについて Mac    
このサイトはDirectX関連メインな気がするのですが
どうしてもわからないので質問させて頂きました。
スレ違いだったらすみません。

iPhoneアプリを作る為にMacを使いプログラムをしております。
購入した本についていた素材は透過するのですが
自分で作った素材はなぜか透過しません。
素材はWindowsで作っております。

mato_1 自分で作ったもの(Windows フォトショにて)
mato_2 本についてたもの

クリーニングしてもmato_1の方は背景にゴミみたいなものがついてしまってます。
何故なのかおわかりになる方いらっしゃらないでしょうか?


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


Name: ookami  ..プログラマー(37,319ポイント)   Date: 2010/07/26(月) 18:10   No:57504     
Title: Re:OpenGL ESについて Mac    
> mato_1 自分で作ったもの(Windows フォトショにて)
> mato_2 本についてたもの

それぞれのファイル形式は何ですか?

# 「ゴミみたいなもの」といえばjpgのフライノイズが思いうかびますが…


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

Name:  ..ぴよぴよ(332ポイント)   Date: 2010/07/26(月) 18:27   No:57505     
Title: Re:OpenGL ESについて Mac    
一応添付してはあるのですが両方ともpngです。
何故なのか本当にわかりません・・・。


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

Name: ISLe  ..中級者(9,111ポイント)   Date: 2010/07/26(月) 18:40   No:57506     
Title: Re:OpenGL ESについて Mac    
画像の透過情報は問題ないように見えますけど。

透過しないというのはまったく透過しないということですか?
ゴミが付くということは透過自体は行われているが余分なものが描画されているということですか?
そのゴミについてもっと詳しく教えていただけませんか?

テクスチャはマルチサンプルされるとき上下左右が繋がっていているように処理されるので端っこギリギリまで描かれていると画像の反対側がはみ出てくると思います。


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

Name: シエル  ..プログラマー(34,736ポイント)   Date: 2010/07/26(月) 18:45   No:57507     
Title: Re:OpenGL ESについて Mac    
そのゴミをこの目で見てみたいです。

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

Name:  ..ぴよぴよ(443ポイント)   Date: 2010/07/26(月) 19:25   No:57511     
Title: Re:OpenGL ESについて Mac    
皆さん回答ありがとうございます。
サイズが変わってるのは気にしないで下さい。

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND); 
drawTexture( 0.0f, 0.0f, 1.0f, 1.0f, texTarget, 255, 255, 255, 255 );
glDisable(GL_BLEND);


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

Name:  ..ぴよぴよ(570ポイント)   Date: 2010/07/26(月) 19:25   No:57512     
Title: Re:OpenGL ESについて Mac    
すみません。
間違えて投稿してしまいました。

サイズが変わってるのは気にしないで下さい。 

ソースはこんな感じです。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_BLEND);  
drawTexture( 0.0f, 0.0f, 1.0f, 1.0f, texTarget, 255, 255, 255, 255 ); 
glDisable(GL_BLEND);

画像のような感じになってしまいます。


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

Name: Justy  ..伝説なるハッカー(559,393ポイント)   Date: 2010/07/26(月) 22:37   No:57521     
Title: Re:OpenGL ESについて Mac    
 読み込み部分がどうなっているのかわからないのですが、多分使っているサンプルの問題な気がします。

 試しに

Downloads for sazameki's opengl-texture-loader - GitHub
http://github.com/sazameki/opengl-texture-loader/downloads

こちらのライブラリをDLして、SZGLTextureLoader.h/mファイルをプロジェクトに
登録して下さい。

 使い方は読み込みたいソースで SZGLTextureLoader.hを importして SZGLLoadTexture関数に
リソースパスと2つのCGSizeを SZGLLoadTextureに指定します。

    CGSize imageSize, textureSize;
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"mato_1" ofType:@"png"];
    GLuint texName = SZGLLoadTexture(imagePath, &imageSize, &textureSize);
    if(texName == GL_INVALID_VALUE)
        // エラー
こんな感じで読み込み完了です。

 これで表示してみてください。
 多分うまく表示されるはずです。


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

Name:  ..ぴよぴよ(732ポイント)   Date: 2010/07/27(火) 00:15   No:57527     
Title: Re:OpenGL ESについて Mac    
Justy様

ビンゴです!!
本に書いてある関数を使っていたので疑っておりませんでした。
頂いたソースを使ってみましたら問題なく読み込め解決しました。

Justyさんのお名前を度々見ますが
このようなことまで知っているのですね・・・
もう知らないことがないのでは・・・と思ってしまいました><

今回は本当に助かりました。
ありがとうございました。


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

Name: シエル  ..プログラマー(34,840ポイント)   Date: 2010/07/27(火) 11:11   No:57543 解決!     
Title: Re:OpenGL ESについて Mac    
JustyさんはOpenGLまで詳しいのか。。。さすがです。
解決してるようなので代わりに解決しときます。


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

Name: Justy  ..伝説なるハッカー(559,511ポイント)   Date: 2010/07/27(火) 23:51   No:57585     
Title: Re:OpenGL ESについて Mac    
 解決して何よりです。


>Justyさんのお名前を度々見ますが 
 最近は忙しくてあまり書き込めてないんですよね。


>JustyさんはOpenGLまで詳しいのか
 嗜む程度ですよ。
 それに今回のは OpenGLというより iPhone特有の問題ですし。


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

Name:  ..ぴよぴよ(770ポイント)   Date: 2010/07/28(水) 01:00   No:57592     
Title: Re:OpenGL ESについて Mac    
>>シエル様
解決マークをつけ忘れておりました。
申し訳ないです。
代わりにつけて頂いてありがとうございます。

>>Justy様
特有な問題でも理解できるのがすごいですね><
色々なサイトをみたり本を見ているのですが未だにあまり理解できないです・・・


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



Name: SG  ..ぴよぴよ(342ポイント)   Date: 2010/07/27(火) 23:05   No:57567       
Title: ループ内のcount++について    
いつもお世話になっております。
タイトルの件で質問させていただきます。
C言語は苦Cさんを一通り目を通したというレベルです。

http://dixq.net/g/45.html
のページのcountや龍神録のキャラ描画関数
void calc_ch(){
        ch.cnt++;
        ch.img=(ch.cnt%24)/6;
}

のch.cntは一秒間に60ずつ増えるという理解をしているのですが
(ここからすでに間違っている可能性もありますが)
これらの定義がintということはcountやch.cntが2147483647に達すると
オーバーフローするのでしょうか?

ゲームは別に止まらないので自分の思い違いかと思うのですが
ご解説いただけますと助かります。よろしくお願いいたします。 編集済み


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


Name: ぽこ  ..プログラマー(26,069ポイント)   Date: 2010/07/27(火) 23:13   No:57570     
Title: Re:ループ内のcount++について    
オーバフローしますよ。

#ゲームが止まらないのが運が良いせいのか、計算ずくなのかはわかりません。


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

Name: SG  ..ぴよぴよ(453ポイント)   Date: 2010/07/27(火) 23:24   No:57576 解決!     
Title: Re:ループ内のcount++について    
なるほど、ありがとうございました。
しかし回答をお聞きしてからよくよく計算すると結構な時間ですね。
ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。
対策する必要のない十分な時間ということですか。


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

Name: ぽこ  ..プログラマー(26,327ポイント)   Date: 2010/07/27(火) 23:31   No:57580     
Title: Re:ループ内のcount++について    
> ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。

ソースがあるので、初期値を書き換えちゃえば、すぐにも確認できますよ。


> 対策する必要のない十分な時間ということですか。

おそらくそういう設計なのでしょうね。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,239,544ポイント)   Date: 2010/07/27(火) 23:37   No:57582     
Title: Re:ループ内のcount++について    
60(フレーム)*60(秒)*60(分)*24(時間)*365(日)=約18億
と言う事で、1年間ゲームをつけっぱなしでもその値にはならないので、特に気にせずに実装しました。
ただカウンタ関係はunsigned intが良いですね。


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

Name: SG  ..ぴよぴよ(576ポイント)   Date: 2010/07/28(水) 00:53   No:57590     
Title: Re:ループ内のcount++について    
ぽこさん、 Dixqさん

ご丁寧な回答ありがとうございました。
結果的には問題ないとのことですが、やはり私としては
オーバーフローする可能性があるということを知っておくのと
知らないのではだいぶ差があると考えております。
すっきりしました。

しかし初期値書き換えなどの発想はパッとは出てきません、ナカナカ・・
プログラムは奥が深いですね


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



Name: BRACK PENIKX  ..ぴよぴよ(117ポイント)   Date: 2010/07/27(火) 23:22   No:57574       
Title: 変数について・・・    
私はまだCを勉強してまもなく、本当に初歩的だと思うので恥ずかしいのですが・・・

main.cpp
abc.cpp
xyz.cpp

を作ったとして・・main.cpp abc.cpp xyz.cpp のどこでも利用できる変数はどう宣言すればいいのでしょうか・・・(汗

※Microsoft Visual C++ 2008 Express Editionを使用しています 編集済み


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,239,870ポイント)   Date: 2010/07/27(火) 23:46   No:57584     
Title: Re:初歩的なことなのですが・・    
分割コンパイルを覚えると最初に躓くことですよね。

例えばmain.cppでグローバル変数

int a;

を宣言したならば、

abc.cppで

extern int a;

と書けば、そのファイルでaが使用出来るようになります。
しかしグローバル変数を多用するのはあまり良くないという考え方があるので、なるべく少なくしたいものです。

こんな風にすればグローバル変数を使わなくても他のファイルの変数の値を取ってくる事が出来ます。

http://dixq.net/zip/console_test2.zip
(すみませんがVC++2010です)

sample.cppからtest.cppのグローバル変数を取ってくる時は、GetTestValue関数を使って取得しています。
ファイル名と同じ名前のヘッダファイルを作り、ヘッダファイルには関数のプロトタイプ宣言を技術します。
その関数を使いたいファイルでヘッダファイルをincludeすればヘッダファイルに書いた関数がincludeしたファイルから呼び出せるようになります。

参考までに


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

Name: BRACK PENIKX  ..ぴよぴよ(155ポイント)   Date: 2010/07/27(火) 23:57   No:57586 解決!     
Title: Re:初歩的なことなのですが・・    
ありがとうございます!
早速ためしてみます


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,239,991ポイント)   Date: 2010/07/27(火) 23:59   No:57587     
Title: Re:初歩的なことなのですが・・    
補足です。

より安全にグローバル変数を使いましょうという話の続きで、
変数や関数にstaticと付けることで他のファイルから参照出来なくする事が出来ます。

http://dixq.net/zip/console_test3.zip

こちらに簡単ですがサンプルを作ってみましたのでよろしければどうぞ

test.cpp,test.hのstaticを外せばsample.cppの注釈が消せるようになります。


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

Name: BRACK PENIKX  ..ぴよぴよ(169ポイント)   Date: 2010/07/28(水) 00:33   No:57589     
Title: Re:初歩的なことなのですが・・    


 どうもありがとうございます(^ ^)


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



Name: polpol  ..ぴよぴよ(934ポイント)   Date: 2010/07/26(月) 06:01   No:57481       
Title: ユーザー定義関数について    
コードが簡単になるようにユーザー定義関数を使いたいのですが
うまくできません。
例えば以下のコードで↓
http://homepage2.nifty.com/natupaji/DxLib/lecture/lecture1_7.html
四角君の移動ルーチンを別のヘッダーファイルに書こうと思ったのですがエラー
になってしまいます。


/////////////////
↓kansuteigi.h


int sikaku() {
int SikakuX , SikakuY , SikakuMuki , SikakuGraph ;
int SikakuW , SikakuH , ShotW , ShotH ;
int SikakuDamageFlag , SikakuDamageCounter , SikakuDamageGraph ;

    // 四角君が顔を歪めているかどうかの変数に『歪めていない』を表す0を代入
    SikakuDamageFlag = 0 ;
// 四角君の移動方向をセット
    SikakuMuki = 1 ;
    SikakuX = 0 ; SikakuY = 50 ;

// 四角君の移動ルーチン
        {
            // 顔を歪めているかどうかで処理を分岐
            if( SikakuDamageFlag == 1 )
            {
                // 顔を歪めている場合はダメージ時のグラフィックを描画する
                DrawGraph( SikakuX , SikakuY , SikakuDamageGraph , TRUE ) ;

                // 顔を歪めている時間を測るカウンターに1を加算する
                SikakuDamageCounter ++ ;

                // もし顔を歪め初めて 30 フレーム経過していたら顔の歪んだ状態から
                // 元に戻してあげる
                if( SikakuDamageCounter == 30 )
                {
                    // 『歪んでいない』を表す0を代入
                    SikakuDamageFlag = 0 ;
                }
            }
            else
            {
                // 歪んでいない場合は今まで通りの処理

                // 四角君の座標を移動している方向に移動する
                if( SikakuMuki == 1 ) SikakuX += 3 ;
                if( SikakuMuki == 0 ) SikakuX -= 3 ;

                // 四角君が画面右端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する
                if( SikakuX > 576 )
                {
                    SikakuX = 576 ;
                    SikakuMuki = 0 ;
                }

                // 四角君が画面左端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する
                if( SikakuX < 0 )
                {
                    SikakuX = 0 ;
                    SikakuMuki = 1 ;
                }

                // 四角君を描画
                DrawGraph( SikakuX , SikakuY , SikakuGraph , TRUE ) ;
            }
        }

    
        return 0;
}








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


Name: ookami  ..プログラマー(37,128ポイント)   Date: 2010/07/26(月) 07:36   No:57482     
Title: Re:ユーザー定義関数について    
.hファイルに関数の実体(中身)を書くのは、一般的ではありません。

まぁそれはさておき、
WinMain関数のある.cppファイルの先頭に、
#include "kansuteigi.h"
はありますか?

それでだめなら、いったん
int sikaku() {

}
をWinMain関数の上に移動して、

kansuteigi.hをプロジェクトから削除してビルドすると、同じエラーがでるかどうか確認してもらえますか?


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

Name: polpol  ..ぴよぴよ(990ポイント)   Date: 2010/07/26(月) 11:15   No:57485     
Title: Re:ユーザー定義関数について    
回答ありがとうございます。
#include "kansuteigi.h" ですが指定しましたがダメです。
上記の方法を試してもやはりエラーが出ました。


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

Name: fatens  ..上級者(16,214ポイント)   Date: 2010/07/26(月) 11:27   No:57487     
Title: Re:ユーザー定義関数について    
具体的に、どのようなエラーが表示されますか?


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

Name: polpol  ..かけだし(1,051ポイント)   Date: 2010/07/26(月) 14:06   No:57496     
Title: Re:ユーザー定義関数について    
すいません。エラーと言うより
正常に起動はするのですが、四角君のグラフィックが表示されない状態です。。。
mymain.cppのほうではint kansuteigi.h()として呼び出しています


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

Name: fatens  ..上級者(16,454ポイント)   Date: 2010/07/26(月) 14:41   No:57498     
Title: Re:ユーザー定義関数について    
>mymain.cppのほうではint kansuteigi.h()として呼び出しています

kansuteigi.hはヘッダファイルの名前です。
関数の呼び出し方は理解できていますか?


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

Name: ookami  ..プログラマー(37,292ポイント)   Date: 2010/07/26(月) 15:05   No:57499     
Title: Re:ユーザー定義関数について    
何かアレですが、想像で書きますが、
whileループの中に、
sikaku();
と記述するとどうなりますか?


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

Name: スキマ妖怪  ..入門者(2,999ポイント)   Date: 2010/07/26(月) 16:21   No:57500     
Title: Re:ユーザー定義関数について    
sikaku関数内の

SikakuGraph ; 
SikakuDamageGraph ; 

画像を読み込んでないので表示されないのは当たり前なのでは?


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

Name: ぜらーちん  ..ぴよぴよ(89ポイント)   Date: 2010/07/26(月) 16:46   No:57502     
Title: Re:ユーザー定義関数について    
int sikaku() { 
  int SikakuX , SikakuY , SikakuMuki , SikakuGraph ; 
  int SikakuW , SikakuH , ShotW , ShotH ; 
  int SikakuDamageFlag , SikakuDamageCounter , SikakuDamageGraph ; 

  // 四角君が顔を歪めているかどうかの変数に『歪めていない』を表す0を代入 
   SikakuDamageFlag = 0 ; 
  // 四角君の移動方向をセット 
   SikakuMuki = 1 ; 
   SikakuX = 0 ; SikakuY = 50 ; 
 
  この辺に画像読み込み関数入れればok
 
   // 四角君の移動ルーチン 
  { 
    中略     
     return 0; 
 }


C++で複数ファイルで管理するなら、hにプロトタイプ宣言書いてcppにプログラム書いた方がいいと思うよ

あと気になったのは、コピペが変なのかな?
{}がおかしいと思うんだけど…、例えば↑に書いてる四角君の移動ルーチンの後にいきなり{が来てるけど
これはなに?(’’;


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

Name: ドラ  ..中級者(10,068ポイント)   Date: 2010/07/26(月) 17:58   No:57503     
Title: Re:ユーザー定義関数について    
赤字の所で安易に画像を読み込むと、sikaku() を呼び出すたびに画像を読み込んでしまって
「メモリ使用量がーーー!!!」ってなりがちですね。
SikakuGraph や SikakuDamageGraph はグローバル変数にして、WinMain関数で1回だけ
画像を読み込むというような感じにした方がいいと思います。

> 四角君の移動ルーチンの後にいきなり{が来てるけどこれはなに?(’’;
文の集合を1つの構文単位にまとめる「複合文」と呼ばれるものです。
複合文によって新しい有効範囲(ブロック)が発生しますが、今回のケースでは大した意味はなく、
四角君の移動ルーチンの範囲をくくっているだけです。


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

Name: polpol  ..かけだし(1,289ポイント)   Date: 2010/07/27(火) 05:40   No:57529     
Title: Re:ユーザー定義関数について    
返事遅れて申し訳ありません。。。
>kansuteigi.hはヘッダファイルの名前です。
>関数の呼び出し方は理解できていますか?

int sikakuでした。間違えました

>whileループの中に、sikuak();と記述するとどうなりますか?

そうですね。そのようにコードを書いてエラーが出ました。
>ぜらーちんさん
このように書いて実行すると'ShotH' : ローカル変数は 1 度も使われていません。というエラー
が出ます。

>スキマ妖怪さん、ドラさん
mymain.cppのほうでwinmain関数の外で
int SikakuGraph ;
SikakuGraph = LoadGraph( "Sikaku.png" ) ;
と記述し、kansuteigi.hの中で
int DrawGraph ;
DrawGraph( SikakuX , SikakuY , SikakuGraph , TRUE ) ;としても描画されません。。。


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

Name: polpol  ..かけだし(1,327ポイント)   Date: 2010/07/27(火) 06:15   No:57530 解決!     
Title: Re:ユーザー定義関数について    
とりあえずこれ以上質問するのも迷惑そうなんで
自分で考えてみます。。。
とりあえず解決ということで


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

Name: ぜらーちん  ..ぴよぴよ(831ポイント)   Date: 2010/07/27(火) 08:32   No:57532 解決!     
Title: Re:ユーザー定義関数について    
>>ドラさん
なるほど、{}だけというのは私にとっては滅多に見ない&使わないものだったので、
勉強になりました。

確かに、その位置を複数回呼び出してるのであればメモリがーになりますね。

---------------------------------------------------------------------------
解決済みになっていますが、取りあえず…

mainがどうなっているのか分からないのであれですが
表示したい画像をmainで読む込むだけじゃ、kansuteigi.hでは扱えないので引数として渡す必要がありますね。

良く見ていないのであれですが(マテ
今更思った事が・・・

mainのwhile(1)かfor(;;)あたりのどこかに
shikaku();ってのを呼び出して動かしているのだと思いますが
最初の
    SikakuDamageFlag = 0 ; 
  // 四角君の移動方向をセット 
    SikakuMuki = 1 ; 
    SikakuX = 0 ; SikakuY = 50 ; 
この部分ですが、毎回呼び出されていると毎回同じ位置で固定されるような気がするのですが
気のせいかな?

shikaku()を呼び出す前に、四角くんの初期値を設定しておきそれを呼び出す時に渡して上げないとまずいような気も
引数多すぎダメぽってなった時にclassの出番なのですが、今回は使ってなさそうなので
練習ということでグローバル変数にしちゃえば、渡さなくて済みます(グローバル変数の多様はお勧めしない)

作り方としては、mainの上に int 変数名 初期値(なくてもok);で、どこでも使えます。
ヘッダーに書く場合は、これもお勧めしませんがexternを付ければ問題なしです。


練習段階なのでclassとかはまだ分からないのかな?
ゲーム制作で一番楽なのはclassを使うことだと思いますので、使えれば簡単だと思います。

解決済みになっているところを失礼しました。解決マーク付けて投稿しておきますね


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

Name: スキマ妖怪  ..入門者(3,346ポイント)   Date: 2010/07/27(火) 21:42   No:57564 解決!     
Title: Re:ユーザー定義関数について    
自分の書き込み?か分かりませんが、
不快な思いをさせてしまったのならスイマセンm(_ _)m

> とりあえずこれ以上質問するのも迷惑そうなんで 
> 自分で考えてみます。。。 

別に迷惑と思ってません。
ここの掲示板の良い所はどんな質問にもレスがつくことだと思ってます。
だから気軽に質問してください。(…といいつつ自分は、普段見てるだけですが…;)


解決にされてしまったようですが、理解する手助けになれば
と思い書かせてもらいます。

簡単に言うと、以下のようになっているのが原因かと

#include <stdio.h>
void Func();

int main()
{
    int test = 100;
    Func();

    return 0;
}

void Func()
{
    int test;
    printf( "%d\n", test );
}


変数には有効範囲があって、同じ変数名でも
別々に作られていれば別の変数として扱われます。
上の例では、mainとfunc関数内にあるtest変数は別物として
扱われるためprintf関数での表示する値は不定値になってしまいます。

polpolさんのコードでも同じ事になっているのではないでしょうか?
(解決法はぜらーちんさんが書かれているのでそちらを参照してください;)


変数のスコープ(有効範囲)等をお調べになるといいかもしれません


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



Name: jay  ..上級者(18,597ポイント)   Date: 2010/07/27(火) 18:14   No:57558       
Title: Logについて    
先日ゲームを公開した時に”Log.txtを消した方がいい”と指摘をもらいました
しっかりと消したのですが
プログラムを実行する度に消したはずのLog.txtが自動的に生成されてしまいます。

プログラムを実行してもLog.txtが出ないようにするにはどうすればいいのでしょうか?


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


Name: シエル  ..プログラマー(35,230ポイント)   Date: 2010/07/27(火) 18:24   No:57559     
Title: Re:Logについて    
DXライブラリはさっぱり分かりませんが、リファレンスにこんなのがありました。

http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R15N14


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

Name: jay  ..上級者(18,557ポイント)   Date: 2010/07/27(火) 20:13   No:57562 解決!     
Title: Re:Logについて    
無事出来ました。
これで修正版も残すは最終確認だけです。

シエルさん、ありがとうございました。


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



Name: 山本  ..ぴよぴよ(199ポイント)   Date: 2010/07/26(月) 13:49   No:57495       
Title: 円周率が出ない。。。    
#include <stdio.h>
#include <stdlib.h>

int main()
{
  double pi;
  printf("pi=%f\n",pi); 
      }
     
 double calc_pi()
{double x,y,i,pi;
 int count;
    for(i=0;i<=1000;i++){
 x=(double)rand() / (RAND_MAX + 1);
 y=(double)rand() / (RAND_MAX + 1);   
 if((x*x+y*y)<1.0)
 {count+=1.0;}
    }
        pi=count/1000*4.0;
        return (int)pi;
}

これで円周率が出てくれないのはなぜ??


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


Name: fatens  ..上級者(16,411ポイント)   Date: 2010/07/26(月) 14:24   No:57497     
Title: Re:円周率が出ない。。。    
>これで円周率が出てくれないのはなぜ??

・calc_pi 関数を呼びだしていない
・calc_pi 関数のプロトタイプ宣言がない
・countを0で初期化していない
・pi=count/1000*4.0 count/1000はint型同士の割り算なので結果もint型になってしまう
・return (int)pi    int型にキャストしたのでは、小数点以下の値が帰らない

など


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

Name: 初級者  ..初心者(8,408ポイント)   Date: 2010/07/26(月) 19:50   No:57514     
Title: Re:円周率が出ない。。。    
プログラムは、思ったとおりには動きません。
書いたとおりに動きます。


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

Name: パコネコ  ..上級者(22,519ポイント)   Date: 2010/07/26(月) 22:49   No:57524     
Title: Re:円周率が出ない。。。    
実際にうごいてるのは
/*
double pi; 
printf("pi=%f\n",pi);  
*/
これだけ…

>int count;
int(整数)でいいんですか?
どちらかというと「i」のほうが整数っぽい


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

Name: 初級者  ..初心者(8,474ポイント)   Date: 2010/07/26(月) 23:00   No:57525     
Title: Re:円周率が出ない。。。    
円の内側にある点の「個数」を数えるための変数ですから、
「当然」整数です。


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

Name: パコネコ  ..上級者(22,561ポイント)   Date: 2010/07/26(月) 23:45   No:57526     
Title: Re:円周率が出ない。。。    
そうですか…
計算が楽になるかな〜と思ったのですが…
それに1.0ずつ足していたので整数型ではないと考えたんですが、
ダメみたいですね。すいませんでした。


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

Name: たいちう  ..ハッカー(101,392ポイント)   Date: 2010/07/27(火) 07:28   No:57531     
Title: Re:円周率が出ない。。。    
> それに1.0ずつ足していたので整数型ではないと考えたんですが、
> ダメみたいですね。すいませんでした。

違和感を感じる着眼点は正しいですが、結論が逆でしたね。

1.0ずつ足しているのに整数型、ではなく、
整数型なのに1.0ずつ足している、です。


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

Name: QERA  ..ぴよぴよ(395ポイント)   Date: 2010/07/27(火) 16:21   No:57552     
Title: Re:円周率が出ない。。。    
#include <stdio.h> 
#include <stdlib.h> 

double calc_pi(void);

int main() 

  double pi;
  pi = calc_pi();
  printf("pi=%lf\n",pi);  
      } 
      
 double calc_pi() 
{double x,y,pi,count=0;
 int i; 
    for(i=0;i<=1000;i++){ 
 x=(double)rand() / (RAND_MAX + 1); 
 y=(double)rand() / (RAND_MAX + 1);    
 if((x*x+y*y)<1.0) 
 {count+=1.0;} 
    } 
        pi=count/1000*4.0; 
        return pi; 


こうですかね? 編集済み


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

Name: 初級者  ..初心者(8,515ポイント)   Date: 2010/07/27(火) 16:47   No:57554     
Title: Re:円周率が出ない。。。    
1001回の試行で得られたcountの値を1000で割っているため、
やや厳密性に欠けるでしょう。
まあ、モンテカルロ法自体がそうなんですけどね。


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

Name: フリオ  ..プログラマー(35,131ポイント)   Date: 2010/07/27(火) 17:11   No:57556     
Title: Re:円周率が出ない。。。    
 
ごめんなさい。勘違いです。
countはdoubleですね。
 
 編集済み


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



Name: nobita  ..ぴよぴよ(0ポイント)   Date: 2010/07/27(火) 10:45   No:57535       
Title: プログラムが実行できない    
二次方程式を解くプログラムを作ったのですが、ビルドしてデバッグした直後に

○○○(実行ファイル名)の 0x54d2f508 (msvcr100d.dll) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 に書き込み中にアクセス違反が発生しました。

と表示され、プログラムがそれ以上動かなくなります。

ソースコード:
#include<stdio.h>
#include<math.h>

double SolveEquation1(double n1, double n2, double n3);
double SolveEquation2(double n1, double n2, double n3);
double SolveEquation3(double n1, double n2, double n3);

double a=0, b=0, c=0;

void main()
{
    printf("This program solves quadratic equation.\n");
    printf("\nax^2+by+c=0\n");
    printf("\nType in a:");
    scanf("%lf" , a);
    printf("\nType in b:");
    scanf("%lf" , b);
    printf("\nType in c:");
    scanf("%lf" , c);

    double disc = 0;
    disc = b*b - 4*a*c;
    
    if(0 > disc)
    {
        printf("\n\nNo real number solution\n");
    }

    if(disc = 0)
    {
        printf("\n\nThe answer is %lf.\n" , SolveEquation1(a,b,c));
    }

    if(a = 0)
    {
        printf("\n\na cannot be 0.\n");
    }

    if(0 < disc)
    {
        printf("\n\nThe answer is %lf and %lf.\n" , SolveEquation2(a,b,c) , SolveEquation3(a,b,c));
    }

}

double SolveEquation1(double n1, double n2, double n3)
{
    double m = 0, n = 0;
    double s = 0;
    m = 2*a;
    n = -b;
    
    s = n / m;

    return s;
}

double SolveEquation2(double n1, double n2, double n3)
{
    double m = 0, n = 0, o = 0;
    double s = 0;
    m = 2*a;
    n = -b;
    o = sqrt(b*b-4*a*c);
    
    s = (n+o)/m;

    return s;
}

double SolveEquation3(double n1, double n2, double n3)
{
    double m = 0, n = 0, o = 0;
    double s = 0;
    m = 2*a;
    n = -b;
    o = sqrt(b*b-4*a*c);
    
    s = (n-o)/m;

    return s;
}

コンパイラ:Microsoft Visual C++ 2010 Express Edition
OS:Windows Vista Business (英語版)

今までに無いようなエラーなので、解決方法が全く分かりません。
よろしくお願い致します。




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


Name: たかぎ [URL]  ..ハッカー(216,304ポイント)   Date: 2010/07/27(火) 10:58   No:57537     
Title: Re:プログラムが実行できない    
>  scanf("%lf" , a); 

↑とか

>  scanf("%lf" , b); 

↑とか

>  scanf("%lf" , c); 


↑とかが怪しい



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

Name: シエル  ..プログラマー(34,747ポイント)   Date: 2010/07/27(火) 11:02   No:57538     
Title: Re:プログラムが実行できない    
scanfにはアドレスを渡しましょう

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

Name: ぜらーちん  ..かけだし(1,035ポイント)   Date: 2010/07/27(火) 11:07   No:57541     
Title: Re:プログラムが実行できない    
× void main(){ }
○ int main(){省略 return(0);}

プログラム的には間違ってないけど、c的にはこっちのほうが良い感じ

【アドバイス】
>>たかぎさんが言うとおり、scanf三つとも怪しい
よく見てみると気づくと思う

後、scanfを使う時には
char buf[xxx];

scanf(中身);
gets(buf); //改行ポイ捨て

ってやった方がいいと思う



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

Name: nobita  ..ぴよぴよ(20ポイント)   Date: 2010/07/27(火) 11:26   No:57544 解決!     
Title: Re:プログラムが実行できない    
解決しました!
ありがとうございました。


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

Name: 白い時空  ..入門者(3,945ポイント)   Date: 2010/07/27(火) 11:30   No:57545     
Title: Re:プログラムが実行できない    
他にもありますね。

>if(disc = 0)
>if(a = 0)
よくあるミスですが比較は==です。これだとdisc,aに0が代入されます。


あと、SolveEquation関数がおかしいです。
関数の引数n1,n2,n3を使わず、a,b,cをグローバル変数にして解いています。
SolveEquation関数ではa,b,cではなく、n1,n2,n3を使ってください。
正しい答えは返ってくると思いますが、修正してください。
 編集済み


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



Name: X  ..入門者(4,266ポイント)   Date: 2010/07/26(月) 11:56   No:57491       
Title: リンクエラー    
何度もすみません(__)Xです。

さっきの質問は解決したのですが、リンクしているときに、エラーが出てしまいました。

エラーは、

リンクしています...
key.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
main.obj : error LNK2019: 未解決の外部シンボル "struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A) が関数 "int __cdecl ProcessLoop(void)" (?ProcessLoop@@YAHXZ) で参照されました。
main.obj : error LNK2001: 外部シンボル ""char * Key" (?Key@@3PADA)" は未解決です。
main.obj : error LNK2001: 外部シンボル ""struct music_t ms" (?ms@@3Umusic_t@@A)" は未解決です。
main.obj : error LNK2001: 外部シンボル ""struct ch_t ch" (?ch@@3Uch_t@@A)" は未解決です。
main.obj : error LNK2001: 外部シンボル ""struct back_t bc" (?bc@@3Uback_t@@A)" は未解決です。
G:\プログラミング\TeamX\DinosaurX\Debug\DinosaurX.exe : fatal error LNK1120: 外部参照 5 が未解決です。
ビルドログは "file://g:\プログラミング\TeamX\DinosaurX\Debug\BuildLog.htm" に保存されました。
DinosaurX - エラー 7、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

というものです。

環境:WindowsXP HomeEdition
      VisualC++2008ExpressEdition

お願いします。


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


Name: fatens  ..上級者(16,265ポイント)   Date: 2010/07/26(月) 12:07   No:57492     
Title: Re:リンクエラー    
main.cppの先頭に
#define GLOBAL_INSTANCE 
#include "global.h"
のように書いていますか?


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

Name: たかぎ [URL]  ..ハッカー(216,140ポイント)   Date: 2010/07/26(月) 12:25   No:57493     
Title: Re:リンクエラー    
エラーが出るたびに質問していたのではキリがありません。
単純なケアレスミスによるエラーなら自己解決できるはずですし、そうでないなら根本的に理解できていないことが原因の場合が多いのではないでしょうか?
というわけで、入門書でも読みながら、簡単なことから確実に理解していくことを強くお勧めします。


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

Name: X  ..入門者(4,777ポイント)   Date: 2010/07/26(月) 12:38   No:57494     
Title: Re:リンクエラー    
#define GLOBAL_INSTANCEをコメントにしてました(__)

でもコメントを外すと、

g:\プログラミング\teamx\dinosaurx\head\global.h(12) : error C2086: 'char Key[256]' : 再定義されました。
        g:\プログラミング\teamx\dinosaurx\head\global.h(12) : 'Key' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\global.h(14) : error C2086: 'ch_t ch' : 再定義されました。
        g:\プログラミング\teamx\dinosaurx\head\global.h(14) : 'ch' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\global.h(15) : error C2086: 'back_t bc' : 再定義されました。
        g:\プログラミング\teamx\dinosaurx\head\global.h(15) : 'bc' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\global.h(16) : error C2086: 'music_t ms' : 再定義されました。
        g:\プログラミング\teamx\dinosaurx\head\global.h(16) : 'ms' の宣言を確認してください。
g:\プログラミング\teamx\dinosaurx\head\global.h(17) : error C2086: 'configpad_t configpad' : 再定義されました。
        g:\プログラミング\teamx\dinosaurx\head\global.h(17) : 'configpad' の宣言を確認してください。
ビルドログは "file://g:\プログラミング\TeamX\DinosaurX\Debug\BuildLog.htm" に保存されました。
DinosaurX - エラー 5、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と出てきました。


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

Name: ぜらーちん  ..ぴよぴよ(908ポイント)   Date: 2010/07/27(火) 08:46   No:57533     
Title: Re:リンクエラー    
GLOBAL_INSTANCEは使った事がないので、あれですが
今簡単に調べてみたところ、externを省略出来るマクロを設定されているようですね

全文が分からないのでこちらを見ての予想ですが、
http://www.play21.jp/board/formz.cgi?action=res&resno=57484&id=dixq&from=tree#57486

global.hで、構造体の宣言の関数が入っているstruct.hをよんでますか?
ch_tとかは、struct.hに入っているのを使っているようなので
構造体宣言もしていない以上、struct.hを呼び出さないと使えないと思います


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

Name: X  ..入門者(4,842ポイント)   Date: 2010/07/27(火) 09:08   No:57534 解決!     
Title: Re:リンクエラー    
ぜらーちんさんの言われた事をやってみると、エラーが5つに減りました!
後5つなので、たかぎさんの言うとおり、基本を理解して、後は自力でやってみたいと思います!



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



Name: MASSA  ..ぴよぴよ(65ポイント)   Date: 2010/07/22(木) 22:40   No:57195       
Title: 四聖龍神録の・・・    
四聖龍プログラミングの館からDLしたprojectをいじくってるんですけれども、ラスボスの弾幕を
boss_shot_bulletH001,
boss_shot_bulletH004,
boss_shot_bulletH009,
boss_shot_bulletH010,
boss_shot_bulletH011,
boss_shot_bulletH012,
boss_shot_bulletH013,

に設定したんですけれども、出現と同時に死んでしまいます
どうしてでしょうか・・・・・・・


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,233,884ポイント)   Date: 2010/07/22(木) 23:36   No:57203     
Title: Re:四聖龍神録の・・・    
どの章ですか?
変更する前は正常に弾幕は表示されていましたか?
現在のソースを元に戻してはどうですか?


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

Name: MASSA  ..ぴよぴよ(166ポイント)   Date: 2010/07/23(金) 21:29   No:57305     
Title: Re:四聖龍神録の・・・    
申し訳ありません・・僕のコードが間違っていました・・・
本当にすみません
わざわざコメントありがとうございますm(_ _)m




それとお尋ねしたいことがあるのですがよろしいでしょうか・・
60章の状態ではスコアなどが000000000で固定されていますよね・・これを表示する方法が知りたいのですが・・初心者なのでよくわからなくて・・・・・


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,332ポイント)   Date: 2010/07/24(土) 00:06   No:57320     
Title: Re:四聖龍神録の・・・    
> MASSAさん
> スコアなどが000000000で固定されていますよね・・これを表示する方法が知りたいのですが

そうですね〜、ここでちょちょいと回答するには修正しないといけないコードが多すぎますね・・。
ちょっとスコア計算が出来るプログラムを作りますので少々お待ち下さい。


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

Name: ぬるぽ  ..入門者(3,552ポイント)   Date: 2010/07/24(土) 01:46   No:57348     
Title: Re:四聖龍神録の・・・    
龍神録については私もいじって遊んでますのでお答えします。
単純にスコアを増やしたいのであれば
増やしたいところにch.scoreを追加するといいですよ。
ch.power ch.graze ch.point ch.money も大体同じです。
グレイズだけちょっとやっかいですけど。
例えばout.cppで

//敵が死ぬかどうかの決定
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;//敵のピチュリ音
ch.score+=1111;                //追加部分
if(ch.score>999999999)ch.score=999999999;    //追加部分
        enter_del_effect(s);
        enter_enemy_item(s);//敵sのアイテムを出現させる(39章)
        for(i=0;i<SHOT_MAX;i++){//敵総数分
            if(shot[i].flag!=0){//登録されている弾幕データがあれば
                if(s==shot[i].num){//その敵が登録した弾幕があれば
                    shot[i].flag=2;//それ以上弾幕を続けないフラグを立てる
                    break;
                }
            }
        }
    }
}

//自機ショットと敵との処理
void cshot_and_enemy(){
    int i,s;
    for(i=0;i<CSHOT_MAX;i++){//自機ショット総数
        if(cshot[i].flag>0){
            for(s=0;s<ENEMY_MAX;s++){//敵総数
                if(enemy[s].flag>0){
                    if(out_judge_cshot(i,s)){//自機ショットと敵が当たっていれば
                        cshot[i].flag=0;//その自機ショットを消す
                        hit_enemy(s,cshot[i].power);
ch.score+=10;                //追加部分
if(ch.score>999999999)ch.score=999999999;    //追加部分
                        break;
                    }
                }
            }
            //ボスが出現していて、描画しないフラグがオフで、ショット中なら
            if(boss.flag==1 && boss.graph_flag==0 && boss.state==2){
                if(out_judge_cshot_boss(i)){
                    cshot[i].flag=0;
                    hit_boss(cshot[i].power);
                }
            }
        }
    }
}


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

Name: MASSA  ..ぴよぴよ(348ポイント)   Date: 2010/07/26(月) 22:45   No:57523     
Title: Re:四聖龍神録の・・・    

Dixq (管理人)様  どうもありがとうございますm(_ _)m 期待しております


ぬるぽ様      どうもありがとうございます。m(_ _)m 参考にさせていただきます。 


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



Name: がくせい  ..ぴよぴよ(55ポイント)   Date: 2010/07/23(金) 14:33   No:57221       
Title: 無題    
7/30の13:00からC言語のテストがあります。時間が限られているので、即回答可能な方、よろしくお願いします。問題は、試験開始後に掲示する予定です。

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


Name: パコネコ  ..上級者(20,077ポイント)   Date: 2010/07/23(金) 14:37   No:57222     
Title: Re:無題    
答えをかけってことですか?
それは、ここでは無理かと…
カンニングと思われても仕方ないですよね。

それと、利用規約読んだほうがいいですよ。
せめてテストの後、この問題わからなかったのでとかなら、ましですけど…




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

Name: 山崎  ..熟練のプログラマー(45,694ポイント)   Date: 2010/07/23(金) 14:40   No:57223     
Title: Re:無題    
おお、初めてのタイプですね!!
失礼ながら、笑ってしまいました。

残念ながら、こちらでは協力はあまり得られないと思います。
規約で「課題の丸投げ禁止」となっております。
どうかよろしければ、掲示板の利用規約の方を一度ご覧下さいな。

「課題の丸投げ予告」とは、画期的ですね…。


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

Name: パコネコ  ..上級者(20,118ポイント)   Date: 2010/07/23(金) 14:43   No:57224     
Title: Re:無題    
課題ならまだしも、テストですよ…
ちょっと見たいな〜とか思っちゃいましたが…

夜までにはあと3人ぐらいなんか文句つけられるぐらい、やばいでしょ…


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

Name: バグ  ..ハッカー(200,388ポイント)   Date: 2010/07/23(金) 14:58   No:57226     
Title: Re:無題    
C言語の問題にC#のソースとかで答えてみようかな…w

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

Name: パコネコ  ..上級者(20,260ポイント)   Date: 2010/07/23(金) 15:04   No:57228     
Title: Re:無題    
バグさん
ばれないようにですよ…(笑)


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

Name: たかぎ [URL]  ..ハッカー(215,410ポイント)   Date: 2010/07/23(金) 15:19   No:57232     
Title: Re:無題    
そういえば、「課題の丸投げ」は禁止ですが「試験の丸投げ」は禁止されていませんね。
ただ、その時間拘束されるのであれば有償対応しかないですね。
当然、足元を見た料金設定で。
(30分あたり5万円+税とか...)

無償なら、C1Xで回答するとか、いろいろ楽しみを見出すしかなさそうです。


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

Name: パコネコ  ..上級者(20,399ポイント)   Date: 2010/07/23(金) 15:29   No:57233     
Title: Re:無題    
おぉ〜大人の対応ってやつか…あれ、違った?
C1Xってなんですか?

てかよく見たら税金まで取ってる…すげー…足元見まくりだー(笑)、
尊敬します。


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

Name: たかぎ [URL]  ..ハッカー(215,428ポイント)   Date: 2010/07/23(金) 15:43   No:57234     
Title: Re:無題    
> C1Xってなんですか?

↓参照
http://en.wikipedia.org/wiki/C1X


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

Name: パコネコ  ..上級者(20,512ポイント)   Date: 2010/07/23(金) 15:48   No:57236     
Title: Re:無題    
/*
C1X C プログラミング言語の予定の新しい標準の非公式の名前です。これは非公式 C99 として知られている、既存の C 標準を置き換えるものです。新しい標準まだ確定されていません。最も最近のワーキング ドラフト、N1425、2009 年 11 月に公開されました。2009 年 11 月のドラフトには、C99 とライブラリの言語仕様のいくつかの変更にはなどが含まれます。
*/
これですか?
英語読めなかったんで翻訳掛けましたが…

要は丸映しできない感じに回答して、困らせようという「いたずら」ですか?



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

Name: sizuma [URL]  ..熟練のプログラマー(42,242ポイント)   Date: 2010/07/23(金) 16:11   No:57239     
Title: Re:無題    
僕は期日までに一冊本をアマゾンで買って送ってくれるくらいで回答しますよ☆

真面目に回答すると、まだ一週間時間があるので、勉強してください。
どうせたいして難しくもないテストですよね?


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

Name: パコネコ  ..上級者(20,812ポイント)   Date: 2010/07/23(金) 16:16   No:57241     
Title: Re:無題    
てか、これ先生が見てたら面白いのに…
先生/「む、この日程は偶然にもうちのクラスのテストと同じ日だ!」
先生/「念のため、テスト中携帯電話禁止とかインターネット禁止とかで、」
見回り強化?

==========
そのテストがどんなものか知りませんが、カンニングOKとか言うものですか?
(ほかの人に聞いてもいいとかの)
めったにないとは思いますが一応確認のため。
あと、テスト範囲でわからないとこ聞くほうが確実ですよ。
時間はまだ1週間ぐらいありますし。




 編集済み


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

Name: がくせい  ..ぴよぴよ(221ポイント)   Date: 2010/07/23(金) 16:19   No:57242     
Title: Re:無題    
(不適切な内容だったので管理人が削除しました)

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

Name: パコネコ  ..上級者(20,913ポイント)   Date: 2010/07/23(金) 16:29   No:57243     
Title: Re:無題    
私のレベル低いのは知ってるんでいいんですが。

「まあ、楽しかったからいいか。」って感じです。

掲示板終わったな。って言うのはやめてほしいです。

>お前の投稿はいつもレベルが低いよ(笑)
いつも掲示板読んでるんですね。






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

Name: dic  ..比類無きプログラマー(87,877ポイント)   Date: 2010/07/23(金) 16:37   No:57244     
Title: Re:無題    
まぁ、二度と書き込めないようにすることも
管理人さんには可能なのを承知での書き込みと思ってます

自己責任の原則
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%B7%B1%E8%B2%AC%E4%BB%BB%E5%8E%9F%E5%89%87


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

Name: やっくん  ..プログラマー(32,446ポイント)   Date: 2010/07/23(金) 16:37   No:57245     
Title: Re:無題    
>がくせいさん
人を中傷して楽しむ暇があれば、自分が精進する時間にあててみてはどうでしょうか?
私はその方が人生楽しめるかと思いますよ!


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

Name: 御津凪 [URL]  ..ハッカー(145,971ポイント)   Date: 2010/07/23(金) 16:45   No:57247     
Title: Re:無題    
> がくせいさん

こんな質問でも引っかかって答えるのはここでは普通の反応です。
あらかさまな嘘でも、証拠がない限り指摘しないとおもいます。

日々投稿される「質問」という釣りにかかる「我々」がいるのですから、
そういう方々はこの質問だってなにかしら答えますよね?

それに、「こんなバカらしい」質問という内容だって返答があるのですから、
やはりアットホームな掲示板だといえますね。
とある質問だけ返答が一切ないなんて、それだけでも冷たい掲示板だと思いませんか?


それでは最後に一言。

> こんなバカらしい質問に引っかかって
「規約」という釣り(比喩表現)に引っかかったのは「がくせい」さんですね。



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

Name: dic  ..比類無きプログラマー(88,134ポイント)   Date: 2010/07/23(金) 17:01   No:57252     
Title: Re:無題    
>がくせいさん
あまりにもくだらなくて
どこをどう反応していいのか正直わかりません

とあるサイトより
集団全体=100%として

偏差値80以上 …… 上位 0.18%以内
偏差値70以上 …… 上位 2.28%以内
偏差値60以上 …… 上位15.87%以内
偏差値50以上 …… 中位以上
偏差値50   …… 真ん中(平均値)
偏差値50以下 …… 中位以下
偏差値40以下 …… 下位15.87%以下
偏差値30以下 …… 下位 2.28%以下 << ここらへん?
偏差値20以下 …… 下位 0.18%以下


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

Name: ookami  ..プログラマー(36,589ポイント)   Date: 2010/07/23(金) 17:02   No:57253     
Title: Re:無題    
# がくせいさん
釣りとしてもレベルが低い。


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

Name: パコネコ  ..上級者(21,073ポイント)   Date: 2010/07/23(金) 17:04   No:57254     
Title: Re:無題    
あの〜他の掲示板とか過去ログぐらいしか読んだことないのですが、
釣り?ってよくあることなんですか?

========
ものすごく聞きづらいのですが…
釣りって、今回みたいな「いたずら」のことですか?
無知ですいません。
なにぶんレベル低くて…(;一_一)

 編集済み


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

Name: だいちゃん  ..ぴよぴよ(826ポイント)   Date: 2010/07/23(金) 17:10   No:57257     
Title: Re:無題    
>こんなバカらしい質問に引っかかって、投稿したやつに呆れるわ(笑)
>こんな質問に相手するなんて、この掲示板も終わったな。
>特にパコネコ(笑)
>こいつの反応には笑えた(笑)
>お前の投稿はいつもレベルが低いよ(笑)


どーでもいいけど(笑)使いすぎ
書き込み5行のうち4回って


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

Name: 御津凪 [URL]  ..ハッカー(146,040ポイント)   Date: 2010/07/23(金) 17:13   No:57258     
Title: Re:無題    
> パコネコさん

ここではたま〜にあります。
(「釣り」と自身で公言する確信犯は私は今まで見かけませんでしたが)

荒らしの方も過去にありましたね。
(全て管理人さんは説得や対策などしています。しかし削除することは滅多にありません)


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

Name: パコネコ  ..上級者(21,219ポイント)   Date: 2010/07/23(金) 17:20   No:57259     
Title: Re:無題    
そうなんですか。
御津凪さんありがとうございます。

荒らしの方を説得って、やっぱりここの管理人さんはタダものじゃないですね。
今まで見た?ことあるのは、「なりすまし」さんぐらいですね。
他の掲示板でですが…
あとなぜか、ゲームクリエイターと自分のことを言う人がいるとたたかれまくってる、
過去スレをよく見ました。

やっぱりインターネットって複雑ですね。


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

Name: sizuma [URL]  ..熟練のプログラマー(42,560ポイント)   Date: 2010/07/23(金) 17:21   No:57261     
Title: Re:無題    
>「こんなバカらしい」質問
僕は性悪説派なので、人間なんて所詮こんなもんじゃないかなーと思いますけど。
普通にいると思いますよ?こういう質問をしてくる人は。

そんなに関係ないですが今日テストがあったんですよね。
そのとき、提出したテストがまったく出来てなかった人が先生に
「お前補習だぞ」
って言われて地団駄踏んで教室を出て行きましたよ。
ちなみにその人22歳かな?

世の中そんな人がちょくちょくいるわけですよ。

>パコネコさん
>釣り
たまにあるんじゃないですかね。
本当かどうか確認できないですから。
とりあえず常識をもって判断するのと、ある程度信用してあげるぐらいしか出来ないです。回答する側は。


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

Name: 通りすがり  ..上級者(21,980ポイント)   Date: 2010/07/23(金) 17:44   No:57266     
Title: Re:無題    
ホントに手伝って欲しかったんだけど、ダメそうだったから
「や〜い引っ掛かった〜」
みたいな事を腹いせに言ったようにしか見えません


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

Name: たかぎ [URL]  ..ハッカー(215,447ポイント)   Date: 2010/07/23(金) 17:45   No:57270     
Title: Re:無題    
> ホントに手伝って欲しかったんだけど、ダメそうだったから 
> 「や〜い引っ掛かった〜」 
> みたいな事を腹いせに言ったようにしか見えません

おそらくみんな分かっていると思うので、そっとしておいてあげましょう。


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

Name: がくせい  ..ぴよぴよ(240ポイント)   Date: 2010/07/23(金) 17:55   No:57271     
Title: Re:無題    
皆さんは言葉のマジックを知らないようですね。

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

Name: パコネコ  ..上級者(21,246ポイント)   Date: 2010/07/23(金) 17:56   No:57272     
Title: Re:無題    
いまさらですが、質問いいですか?
この時期にテストするんですか?
夏休みシーズンのこの時期に。



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

Name: たかぎ [URL]  ..ハッカー(215,471ポイント)   Date: 2010/07/23(金) 17:57   No:57273     
Title: Re:無題    
> この時期にテストするんですか? 

私が関わっている学校でもこの時期です。
割と普通のことだと思いますよ。


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

Name: パコネコ  ..上級者(21,224ポイント)   Date: 2010/07/23(金) 17:58   No:57274     
Title: Re:無題    
そうなんですか?
え〜と、大学ですか?




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

Name: たかぎ [URL]  ..ハッカー(215,476ポイント)   Date: 2010/07/23(金) 18:04   No:57275     
Title: Re:無題    
> え〜と、大学ですか? 

専門学校です。


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

Name: パコネコ  ..上級者(21,252ポイント)   Date: 2010/07/23(金) 18:07   No:57276     
Title: Re:無題    
専門学校って夏休みないんですか?
もしくはずれてる?


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

Name: たかぎ [URL]  ..ハッカー(215,518ポイント)   Date: 2010/07/23(金) 18:16   No:57277     
Title: Re:無題    
> 専門学校って夏休みないんですか?

ありますよ。
後期が始まるのは9月の最終週からです。


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

Name: パコネコ  ..上級者(21,472ポイント)   Date: 2010/07/23(金) 18:25   No:57281     
Title: Re:無題    
一応
他人のたてたスレで質問してしまい、すいませんでした。
「がくせい」さん、すいません。

「たかぎ」さんも答えていただきありがとうございました。


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

Name: がくせい  ..ぴよぴよ(336ポイント)   Date: 2010/07/23(金) 18:30   No:57284     
Title: Re:無題    
(不適切な内容だったので管理人が削除しました)

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

Name: パコネコ  ..上級者(21,670ポイント)   Date: 2010/07/23(金) 18:33   No:57285     
Title: Re:無題    
指摘していただけたことについては、
ありがとうございます。

ですが、もう敬語ですらないんですね。
やっぱり、利用規約読むべきです。


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

Name: ookami  ..プログラマー(36,640ポイント)   Date: 2010/07/23(金) 18:33   No:57286     
Title: Re:無題    
念のためこっちでも。
# スルーすべき。


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

Name: たかぎ [URL]  ..ハッカー(215,493ポイント)   Date: 2010/07/23(金) 18:42   No:57289     
Title: Re:無題    
> やっぱり、利用規約読むべきです。

いや、多分日本語が読めないか、読めても理解できない可能性大です。


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

Name: Dixq (管理人)  ..ウィザード(1,234,253ポイント)   Date: 2010/07/23(金) 19:41   No:57298     
Title: Re:無題    
荒れてるとの連絡を受けて来たのですが、申し訳ないですが、今上司や同僚の人達と札幌のイベントに出掛けてて対応できていません、ごめんなさい;
帰宅次第対応します;

規約を守って気持ち良く掲示板を利用して下さいね…。


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

Name: ぽこ  ..上級者(23,846ポイント)   Date: 2010/07/23(金) 20:08   No:57299     
Title: Re:無題    
いや〜、この手の依頼を見たのは3度目ですねぇ。
しかも、いつもこの時期。

何年かに一度はこういう逸材が沸いて出てくるもんですねぇ。


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

Name: ぬるぽ  ..入門者(3,402ポイント)   Date: 2010/07/23(金) 20:39   No:57303     
Title: Re:無題    
>ホントに手伝って欲しかったんだけど、ダメそうだったから 
>「や〜い引っ掛かった〜」 
>みたいな事を腹いせに言ったようにしか見えません

こういうことをネット用語で 「後釣り宣言」 と言ったりしますね。

http://dic.nicovideo.jp/a/%E5%BE%8C%E9%87%A3%E3%82%8A%E5%AE%A3%E8%A8%80

以下引用

後釣り宣言とは、ネット用語の一つである。
後になって釣りを宣言すること。
ネット上での発言に突っ込まれたり間違いを指摘されたりしたとき、素直に非を認めず、
「さっきの発言は釣り。やーいひっかかった」などと涙目で言って相手を馬鹿にすることで保身を図る行為。
要は単なる負け惜しみであって、周りからは一層笑われる。後釣り宣言はかえって傷口を広げるだけである。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,234,534ポイント)   Date: 2010/07/23(金) 23:34   No:57313     
Title: Re:無題    
内容があまりにも人を傷つける内容だったので、記事を一部削除させて頂きました。
誰かが不快に思うような事のない、
ワイワイざっくばらんに会話が出来るような場になればいいなと思って作った掲示板ですので、
利用される時は出来るだけ守って頂きたいなと思っていますのでよろしくお願いします。

恐らくもうがくせいさんはこのような書き込みはなさらないと思いますのでもうこれ以上言うのはやめます。
アク禁だの人物の特定だのそんな事は出来る限り行いたくありません。
(ちなみに、今までこの掲示板では5万件以上の書き込みがありましたが、一度しかアク禁は行った事ありません)


また、レスがついたトピックは内容がどうであれ可能な限り消したくありませんのでこのまま残しています。
もし気分を害する方がいらっしゃればお伝え下さい。

> がくせいさん

7/30まではまだ時間がありますね。
1週間あれば、大体の基本問題は解けるようになれると思います。
今から対策してはいかがでしょう?

私はC言語を勉強する時誰にも聞ける人がいませんでした。
でもがくせいさんには助けてくれる人が沢山いるのですから、諦めずに頑張ってみませんか?


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

Name: 初心者  ..熟練のプログラマー(50,249ポイント)   Date: 2010/07/23(金) 23:38   No:57314     
Title: Re:無題    
おっおっなんか荒れてますね。
でもなかなかないですよ、素直に質問に対して答えてくれる掲示板なんて・・。
ここはあったかいです^^


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,234,932ポイント)   Date: 2010/07/23(金) 23:53   No:57316     
Title: Re:無題    
>> たかぎさん
> そういえば、「課題の丸投げ」は禁止ですが「試験の丸投げ」は禁止されていませんね。 

う、確かに・・。
ということで規約に「試験の丸投げ禁止」項目追加しました;
あぁこうやって最初数行しかなかった利用規約が六法全書みたいになっていくんだ・・。
そういえば「極端な方言を使う」が禁止行為になったのもこんな感じでしたね;


>> 初心者さん

そう思って頂けて何よりです^^
(最近管理人の掲示板出現率が低くて申し訳ないです・・;)


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

Name: たかぎ [URL]  ..ハッカー(215,628ポイント)   Date: 2010/07/24(土) 00:07   No:57322     
Title: Re:無題    
> ということで規約に「試験の丸投げ禁止」項目追加しました; 

禁止になってしまったんですね。
まあ、試験中に掲示板で質問することは必ずしもカンニングにならないわけですが、丸投げはひどいかもしれませんね。
ただ、先日とある試験というか実験に参加したときは、どんな方法を使ってもよいので時間内に仕上げなさいというテーマだったので、そういう意図であれば丸投げもOKなのかもしれません。


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

Name: ぽこ  ..上級者(24,148ポイント)   Date: 2010/07/24(土) 00:14   No:57325     
Title: Re:無題    
> そういえば「極端な方言を使う」が禁止行為になったのもこんな感じでしたね;

禁止行為なんですね。。
こういうのって義務行為として、「円滑なコミュニケーションを取ることを心がける」
としたほうが、規約を盾にヘンなことする人に対する抑止力になりませんかね?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,437ポイント)   Date: 2010/07/24(土) 00:17   No:57326     
Title: Re:無題    
そういう場合いであればOKなのかもしれませんね^^;
ただここの方針として丸投げはやめましょうという事になっているので、規約に上のように追加しました。

まぁ偉そうな事を言いつつも私は昔半泣きになりながら今だけでいいから答えが欲しい(絶対あとからちゃんと勉強するから)と思った事は何度もありました・・;

なので気持ちはよく解るんですけどね^^;
自分の学生生活に後悔が多かったのでそういう思いをしてほしくないなと言う気持ちが大きいのです。。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,235,906ポイント)   Date: 2010/07/24(土) 01:51   No:57349     
Title: Re:無題    
>> ぽこさん
> こういうのって義務行為として、「円滑なコミュニケーションを取ることを心がける」 
> としたほうが、規約を盾にヘンなことする人に対する抑止力になりませんかね?

ご意見ありがとうございます。規約に追加させて頂きました。
まぁ言ってしまえば、義務行為に
「全員が不快な思いをしない行動を取る」
とすれば全部網羅されるのかもしれませんが、より具体的にかかないと規約が意味をなさない事が多いんですよね;

以前極端な関西弁で質問する方がいらっしゃり、丁寧な言葉で話しましょうという意見や、関西弁が丁寧ではないとはどういうことだという意見などがあり、問題があったので、規約に追加したんです。
使っている本人は「俺は関西弁の方が円滑に話す事が出来るんだ!」と思っていれば、仰っている義務行為は本人としては果たしている事になるかもしれません(全体的にどうかは別ですが)

しかし大げさな方言は禁止と書いておけば、このような問題も無いことでしょう。
・・と言う事で段々規約が肥大化しているんですよね;

いやはやガチガチにかためられた決まりの中で利用する掲示板なんて堅苦しくて嫌なものだ・・。


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

Name: たかぎ [URL]  ..ハッカー(215,477ポイント)   Date: 2010/07/24(土) 02:01   No:57350     
Title: Re:無題    
極端な方言を禁止する趣旨は理解できますが、その意味では外国語も禁止すべきではないでしょうか?
ときどき英語での書き込みがありますが、円滑なコミュニケーションという意味ではどうしても問題があります。
年齢層もいろいろですし、英語が不得意な人も少なくないでしょうから。
「英語は学校で習っているはずだ」と主張する人もいるかもしれませんが、その論法であれば、漢文でも古文でもよいことになってしまいますね。


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

Name: ぽこ  ..上級者(24,952ポイント)   Date: 2010/07/24(土) 14:49   No:57382     
Title: Re:無題    
> とすれば全部網羅されるのかもしれませんが、より具体的にかかないと規約が意味をなさない事が多いんですよね;

まあ、「円滑な」や「不快な」、「極端な」も主観的な基準なんで、最終的にはdixqさんの判断
任せなんですけどね。

> ・・と言う事で段々規約が肥大化しているんですよね;

> いやはやガチガチにかためられた決まりの中で利用する掲示板なんて堅苦しくて嫌なものだ・・。


普通にしていれば規約は特に気にする必要はないですが、
初めての方には敷居が高くなってしまいますよね。

定期的に規約の棚卸しして、余り発生しない事案に関しては、
規約からこっそり外すしかなさそうですね。


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

Name: がくせい  ..ぴよぴよ(514ポイント)   Date: 2010/07/26(月) 20:10   No:57516     
Title: Re:無題    
自力でがんばります!

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,237,621ポイント)   Date: 2010/07/26(月) 20:21   No:57517     
Title: Re:無題    
> たかぎさん

英語については特に禁止するほど現状で困っていないので、このままでいいかなと思っています。
極端な方言での投稿は真面目な気持ちではないと捉えられる場合があるものの、
英語での投稿では必ずしもそうならないと思いますので。

もし今後困る事があればその時改善しようと思います。

> ぽこさん

そうですね、困ったらその都度規約を追加して、時々手を入れて整理するのが一番のようですね。

> がくせいさん

4日後ですね。頑張って下さい。


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

Name: たかぎ [URL]  ..ハッカー(216,296ポイント)   Date: 2010/07/26(月) 21:31   No:57518     
Title: Re:無題    
> 英語については特に禁止するほど現状で困っていないので、このままでいいかなと思っています。 

困っているかどうかという観点では、方言も大して困っていませんよね。
それに、英語はよくて、北京語や朝鮮語がだめだとする根拠がないので、円滑なコミュニケーションを目的とするなら、外国語は原則禁止にするほうがすっきりすると思います。

> 極端な方言での投稿は真面目な気持ちではないと捉えられる場合があるものの、 
> 英語での投稿では必ずしもそうならないと思いますので。 

英語での書き込みは圧倒的にスパムが多いですからね。
うちのサイトでは、いちいち読むのが面倒なので、日本語以外のコメントは問答無用で削除です。

まあ、急いで禁止にするほどではないのかもしれませんが...


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,237,665ポイント)   Date: 2010/07/26(月) 22:41   No:57522     
Title: Re:無題    
そうですね、ご意見ありがとうございます。
もし今後トラブルがあればその機会にご指摘いただいた事を元に規約の改定をしたいと思います。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +