C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   無題   
     ・[47029] Mist 
     ・[47030] デジキャメ 
   signed int と unsign ....   
     ・[47020] Ma 
     ・[47023] 御津凪 
     ・[47026] Ma 
   ボールの接触判定とバ ....   
     ・[46099] softya 
     ・[46107] ラーグ 
     ・[46127] softya 
     ・[46132] ラーグ 
     ・[46136] softya 
     ・[46147] ラーグ 
     ・[46152] softya 
     ・[46226] ラーグ 
     ・[46228] ラーグ 
     ・[46230] softya 
     ・[46235] ラーグ 
     ・[46239] softya 
     ・[46240] ラーグ 
     ・[46252] ラーグ 
     ・[46263] softya 
     ・[46289] ラーグ 
     ・[46313] softya 
     ・[46575] ラーグ 
     ・[46586] softya 
     ・[46676] ラーグ 
     ・[46687] softya 
     ・[46694] softya 
     ・[46700] softya 
     ・[46706] ラーグ 
     ・[46724] softya 
     ・[46832] ラーグ 
     ・[46842] softya 
     ・[46922] softya 
     ・[46953] ラーグ 
     ・[46954] softya 
     ・[46996] ラーグ 
     ・[47006] softya 
     ・[47008] ラーグ 
     ・[47009] sizuma 
     ・[47011] ラーグ 
     ・[47012] sizuma 
     ・[47014] ラーグ 
     ・[47015] sizuma 
     ・[47017] ラーグ 
     ・[47021] sizuma 
     ・[47024] softya 
     ・[47025] ラーグ 
     ・[460971264982308] ラーグ 
   ロゴの作成   
     ・[46994] array 
     ・[46995] Dixq (管理人) 
     ・[47016] 宮 
   ルーミアのナイトバー ....   
     ・[46967] ひよこ 
     ・[46971] サンタクロース 
     ・[46978] ひよこ 
     ・[46988] Tatu 
     ・[46990] ひよこ 
     ・[46991] サンタクロース 
     ・[47005] Tatu 
   引数の定義?   
     ・[46985] softya 
     ・[47001] すのう 
   龍神録プログラミング   
     ・[46943] Justy 
     ・[46952] falco 
     ・[46987] falco 
   MIDIファイルを開 ....   
     ・[46778] mnkr 
     ・[46925] すのう 
     ・[46927] softya 
     ・[46930] softya 
     ・[46933] すのう 
     ・[46935] softya 
     ・[46939] すのう 
     ・[46941] softya 
     ・[46950] すのう 
     ・[46958] softya 
     ・[46969] すのう 
     ・[46970] softya 
     ・[46972] すのう 
     ・[46975] softya 
     ・[46976] すのう 
   execve関数の引数につ ....   
     ・[46964] hoge 
   PSPに移植した際に画像 ....   
     ・[46772] kazuoni 
     ・[46814] とく 
     ・[46834] kazuoni 
     ・[46841] yu 
     ・[46864] とく 
     ・[46884] kazuoni 
     ・[46889] とく 
     ・[46960] kazuoni 
   画像が表示されません   
     ・[46947] SooA 
     ・[46951] 零 
   ちゃんと動点を中心と ....   
     ・[46931] softya 
     ・[46938] cyc 
     ・[46944] たいちう 
     ・[46946] softya 
     ・[46948] cyc 
     ・[46949] cyc 
   Windows Media Player ....   
     ・[46936] Justy 
   Dxライブラリを使って   
   vc2008の表示に ....   
     ・[46929] MK-22 
   cshotについて   
     ・[46920] ひよこ 
     ・[46921] softya 
     ・[46923] box 
     ・[46924] kai 
   DXライブラリでゲー ....   
     ・[46905] softya 
     ・[46906] クルトン 
     ・[46908] softya 
     ・[46910] クルトン 
     ・[46912] ムンバ 
     ・[46913] softya 
     ・[46915] クルトン 
     ・[46917] softya 
     ・[46918] ムンバ 
   C,C++で音声認識   
     ・[46729] 御津凪 
     ・[46733] てと 
     ・[46734] たいちう 
     ・[46738] 御津凪 
     ・[46815] てと 
     ・[46816] たいちう 
     ・[46854] てと 
     ・[46855] softya 
     ・[46916] てと 
   PSPのボタン入力がうま ....   
   超初級C言語   
     ・[46868] sizuma 
     ・[46869] DVDM 
     ・[46874] はげ 
     ・[46875] box 
     ・[46877] hello world 
     ・[46878] sizuma 
     ・[46879] はげ 
     ・[46881] softya 
     ・[46886] たかぎ 
     ・[46890] hello world 
     ・[46892] sizuma 
     ・[46893] sizuma 
     ・[46894] box 
     ・[46895] たかぎ 
     ・[46896] たかぎ 
     ・[46897] たいちう 
     ・[46898] sizuma 
     ・[46899] たかぎ 
     ・[46900] sizuma 
     ・[46901] softya 
     ・[46902] たかぎ 
     ・[46903] たかぎ 
     ・[46907] sizuma 
     ・[46911] たかぎ 
   windows.hが開けないエ ....   
     ・[46621] KKXY 
     ・[46880] rokoroko 
     ・[46909] MNS 
   extern宣言とMakefile   
     ・[46865] ぽこ 
     ・[46873] box 
     ・[46888] 少年X 
     ・[46891] box 
     ・[468631265265608] 少年X 
   バグなのですが   
     ・[46859] ぽこ 
     ・[46867] softya 
     ・[46870] sizuma 
     ・[46872] sizuma 
     ・[46887] 電気屋 
   マップのスクロールに ....   
     ・[46836] 惰眠 
     ・[46838] kazuoni 
     ・[46839] SooA 
     ・[46840] たいちう 
     ・[46843] softya 
     ・[46857] 惰眠 
     ・[46871] SooA 
     ・[46876] Justy 
     ・[46882] 惰眠 
     ・[46883] kazuoni 
     ・[46885] 惰眠 
   プログラマの人に質問 ....   
     ・[46671] non 
     ・[46679] たいちう 
     ・[46717] たかぎ 
     ・[46718] sizuma 
     ・[46720] non 
     ・[46721] たこやき 
     ・[46775] dic 
     ・[46780] mnkr 
     ・[46819] たこやき 
     ・[46824] たいちう 
     ・[46831] たこやき 
     ・[46837] たいちう 
     ・[46848] たこやき 
     ・[46849] non 
     ・[46850] softya 
     ・[46851] たこやき 
     ・[46852] softya 
     ・[46853] たかぎ 
     ・[46860] たこやき 
     ・[46861] たかぎ 
     ・[46862] たこやき 
   DirectXで・・・   
     ・[46833] kazuoni 
     ・[46858] KA 
   DNSサーバ「   
     ・[46856] softya 
   PlaySound関数で   
   助けてください..   
     ・[46604] クリス 
     ・[46605] softya 
     ・[46610] クリス 
     ・[46611] クリス 
     ・[46623] クリス 
     ・[46625] バグ 
     ・[46627] クリス 
     ・[46628] shilfia 
     ・[46638] softya 
     ・[46639] softya 
     ・[46640] クリス 
     ・[46641] softya 
     ・[46642] クリス 
     ・[46643] softya 
     ・[46645] クリス 
     ・[46646] light 
     ・[46648] softya 
     ・[46649] クリス 
     ・[46651] softya 
     ・[46652] ぽこ 
     ・[46662] Dixq (管理人) 
     ・[46664] バグ 
     ・[46665] クリス 
     ・[46666] クリス 
     ・[46667] non 
     ・[46668] たいちう 
     ・[46675] クリス 
     ・[46677] non 
     ・[46678] 山崎 
     ・[46680] クリス 
     ・[46681] softya 
     ・[46684] バグ 
     ・[46686] たいちう 
     ・[46688] asd 
     ・[46692] Ma 
     ・[46693] 通りすがり 
     ・[46696] SooA 
     ・[46697] たいちう 
     ・[46698] Naohiro19 
     ・[46701] Ma 
     ・[46702] Dixq (管理人) 
     ・[46703] softya 
     ・[46704] 山崎 
     ・[46705] Ma 
     ・[46707] ラーグ 
     ・[46708] SooA 
     ・[46710] Ma 
     ・[46713] 通りすがり 
     ・[46715] shilfia 
     ・[46716] たかぎ 
     ・[46725] softya 
     ・[46726] sizuma 
     ・[46727] たかぎ 
     ・[46730] sizuma 
     ・[46737] たかぎ 
     ・[46745] Dixq (管理人) 
     ・[46754] ぽこ 
     ・[46755] たかぎ 
     ・[46760] softya 
     ・[46761] ぽこ 
     ・[46762] たかぎ 
     ・[46763] softya 
     ・[46765] たかぎ 
     ・[46766] たかぎ 
     ・[46767] たかぎ 
     ・[46768] ぽこ 
     ・[46769] たかぎ 
     ・[46770] ぽこ 
     ・[46771] たかぎ 
     ・[46777] Dixq (管理人) 
     ・[46779] たかぎ 
     ・[46781] Dixq (管理人) 
     ・[46782] ラーグ 
     ・[46783] たかぎ 
     ・[46784] non 
     ・[46785] クリス 
     ・[46786] light 
     ・[46787] dic 
     ・[46788] conio 
     ・[46789] softya 
     ・[46790] 通りすがり 
     ・[46791] たかぎ 
     ・[46792] Dixq (管理人) 
     ・[46794] ラーグ 
     ・[46795] SooA 
     ・[46798] たかぎ 
     ・[46799] たいちう 
     ・[46801] sizuma 
     ・[46804] dic 
     ・[46805] たかぎ 
     ・[46806] shilfia 
     ・[46807] asd 
     ・[46808] たかぎ 
     ・[46809] sizuma 
     ・[46810] たかぎ 
     ・[46811] shilfia 
     ・[46830] ぽこ 
   「32. 乱数の初期化の ....   
     ・[46820] SooA 
     ・[46821] たかぎ 
     ・[46826] 256bit 
     ・[46827] wing 
     ・[46828] softya 
     ・[46829] Dixq (管理人) 
   無題   
     ・[46823] shilfia 
     ・[46825] たいちう 
   管理人さんへ質問   
     ・[46613] Dixq (管理人) 
     ・[46813] jay 
   アクセス違反で困って ....   
     ・[46800] wing 
     ・[46802] ttt 
     ・[46803] ttt 
     ・[46812] wing 
   音楽再生について   
     ・[46654] SooA 
     ・[46663] Dixq (管理人) 
     ・[46682] tkmakwins15 
     ・[46685] SooA 
     ・[46743] no 
     ・[46744] Dixq (管理人) 
     ・[46746] no 
     ・[46748] SooA 
     ・[46749] Dixq (管理人) 
     ・[46758] no 
     ・[46759] no 
     ・[46776] Dixq (管理人) 
     ・[46793] no 
     ・[46797] SooA 
   エラーが・・・。   
     ・[46753] kazuoni 
     ・[46773] すのう 
   PSP移植について   
     ・[46751] kazuoni 
     ・[46757] とく 

Name: デジキャメ  ..入門者(3,714ポイント)   Date: 2010/01/25(月) 15:31   No:47028       
Title: 無題    
#include "DxLib.h"
#define size    (20)
#define PI_H    (9)
#define PI_W    (9)
#pragma warning(disable:4996)

int MyDrawPixel(int x, int y, int color){

    int sx, sy, Wh=GetColor(255,255,255), Bl=GetColor(70,70,255), col[] = {Wh,Bl};
 
    sx=x*size;  sy=y*size;  
    DrawBox(sx, sy, sx+size-1, sy+size-1, Wh, TRUE);DrawBox(sx+2, sy+2, sx+size-1-2, sy+size-1-2, col[color], TRUE);
    DrawLine(sx,sy, sx+size-1, sy+size-1,col[color]);DrawLine(sx,sy+size-2,sx+size-1,sy-1,col[color]);    
    return 0;
}
int YokoPixel(int x, int y, int color){
    int sx, sy, Wh=GetColor(255,255,255), Bl=GetColor(170,170,255), Yl=GetColor(249,230,100);
    int Gr=GetColor(170,255,170),Rd=GetColor(255,170,170), col[] = {Wh,Bl,Rd,Yl,Gr};
 
    sx=size*PI_W+x*size;  sy=y*size;
    DrawBox(sx, sy, sx+size-1, sy+size-1, col[color], TRUE);
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
 
    int SetFontThickness(int TinckPal),CheckHitKey(int KeyCode), MouseX, MouseY;
    int WorkData[PI_H][PI_W] = {0}, PixelData[PI_H][PI_W],PixellData[PI_H][PI_W]={0};
    int i, j, y=0,Bk,Wh,Min=0;    FILE *file;

    file=fopen("yokoiro.txt","r");
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
            fscanf(file,"%d", &PixellData[i][j]);
        }
    }
    fclose(file);
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
           YokoPixel(j, i, PixellData[i][j]);
        }
    }
    file=fopen("masu2.txt","r");if(file==NULL){printfDx("FILE ERORR");exit(0);}
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
            fscanf(file,"%d", &PixelData[i][j]);
        }
    }
    fclose(file);
    ChangeWindowMode(TRUE);    if(DxLib_Init() == -1){return -1;}
    Bk=GetColor(0,0,0); Wh=GetColor(255,255,255);
    for(i=0; i<PI_H; i++){
        for(j=0; j<PI_W; j++){
            MyDrawPixel(j, i, 0);
        }
    }
    SetMouseDispFlag(TRUE);
    while(!ProcessMessage()){
        if(memcmp(PixelData, WorkData, sizeof(int)*PI_H*PI_W) == 0) break;
        if(GetMouseInput() & MOUSE_INPUT_LEFT){
            while (GetMouseInput() & MOUSE_INPUT_LEFT);
            GetMousePoint(&MouseX, &MouseY);
                MouseX = MouseX/size;
                MouseY = MouseY/size;
                if(Min<=MouseX&&MouseX<PI_W&&Min<=MouseY&&MouseY<PI_H){
                    WorkData[MouseY][MouseX]++;
                    if(WorkData[MouseY][MouseX] > 1) WorkData[MouseY][MouseX] = 0;
                    MyDrawPixel(MouseX, MouseY, WorkData[MouseY][MouseX]);
                }
        }
    }
    DrawString(40,330,"Game Clear!",Wh);
    WaitTimer(2000);DxLib_End();return 0;
}

イラストロジックを作成しましたが、白いセルの横にカラーのセルを表示させようとすると、
画面が出てきません。
col[color]の配列を見ると、すべて0になっていました。
 YokoPixel(j, i, PixellData[i][j]);
の関数にエラーが出るのですが、
どこか間違えているのでしょか?

横色の配列は、
1 2 3 4 0 0 0 0 0
1 2 2 3 4 4 0 0 0
1 2 2 3 4 4 0 0 0
1 2 2 3 4 4 0 0 0
1 2 2 3 4 4 0 0 0
1 2 2 3 4 4 0 0 0
1 2 3 4 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

完成図は
1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0  
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 

を入力しました。

よろしくお願いします。


1,495ポイント を落としてしまった。


Name: Mist  ..比類無きプログラマー(83,204ポイント)   Date: 2010/01/25(月) 15:42   No:47029     
Title: Re:無題    
GetColorはDxLib_Initよりも前に呼び出しても正しい値を返しません。
それが原因ではないでしょうか。

#追加
よく見たらCheckHitKeyとかDrawBoxとかもDxLib_Init前に使用していますね。
DXライブラリの関数は(ごく一部を除いて)DxLib_Init前に使用するのはダメですよ。 編集済み


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

Name: デジキャメ  ..入門者(3,741ポイント)   Date: 2010/01/25(月) 15:59   No:47030 解決!     
Title: Re:無題    
ご回答とご指摘ありがとうございます。

画面が表示されました。


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



Name: Ma  ..プログラマー(32,640ポイント)   Date: 2010/01/25(月) 06:55   No:47019       
Title: signed int と unsigned int の掛け算。    
(タイトル変えました。下記は原因が分かっていなかったころの投稿です。)


おせわになってます。
C++、Visual C++ 2008 Express Edition, windows 7 64 bit 
の環境でプログラミングしていたところ
ブレイクポイントを設けることで、以下の二通りの計算で違う結果が出ていることが分かりました。

その1
height = editMessages.size()*15*(mouseCord[1]-gosa)/600;

その2
height = editMessages.size()*15/600*(mouseCord[1]-gosa);

私は、両方とも同じ結果になる。そう思っていました。


mouseCord は
 int mouseCord[2];
として宣言。値は、38

gosa は
 static int gosa;
として宣言。値は40。

height は
int height;
として宣言。値は、90だった。

editMessages

deque<string> editMessages;
として宣言。(std::deque)  editMessages.size()の値は、493。unsigned int ですね。

となっておりました。

結果は、
その1の方法では
heightの値が7158254になってしまいました。

493*15*(38-40)/600
これで-24.64とかになると思っていたのですが・・・。


その2の方法では、思ったとおりの
493*15/600*(38-40) = -24.64
つまりheightは -24になりました。

何か、私は勘違いしていますか?
四則演算からなにか勘違いしているのでしょうか。。。。
それとも何か型(static unsigned signed とか)の組み合わせ?? 編集済み


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


Name: Ma  ..プログラマー(32,729ポイント)   Date: 2010/01/25(月) 07:12   No:47020     
Title: Re:四則演算結果が異なる?    
追記
height = (mouseCord[1]-gosa)*(signed int)editMessages.size()*15/600;
↑OK
height = (mouseCord[1]-gosa)*editMessages.size()*15/600;
↑ダメ

ということで、 unsigned int と signed int をかけた事が原因なのはわかりました。
でも、これで解決にしちゃうとちょっとすっきりしないので、
よろしければこの現象の説明を、お願いします。

具体的には、
どうビット単位の計算の違いがあるのか、
私が思ったとおりに動くかどうかは環境依存なのか

という点を教えてもらえると助かります。 編集済み


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

Name: 御津凪 [URL]  ..ハッカー(138,454ポイント)   Date: 2010/01/25(月) 10:57   No:47023     
Title: Re:signed int と unsigned int の掛け算。    
この場合、掛け算をする時は signed 、 unsigned 関連無く正しい計算をしています。
しかし、割り算をする時、 signed 、 unsigned では計算結果が変わっています。

まず、
(mouseCord[1]-gosa)
は int型 ですが、
editMessages.size() が unsigned int型 のため、 unsigned int 型 同士として掛けてしまうので、
以降 unsigned int 型として計算されています。

次に、

(mouseCord[1]-gosa)*editMessages.size()*15
        ↓
(38 - 40) * 493 * 15

の時点で、値は signed では -14790 、 unsigned では 4294952506 で、
16 進数では共に 0xFFFFC63A です。(つまりこの時点までは双方向のキャストをしても結果は同じ)

この signed 、 unsigned の値を 600 で割ると、値は signed では -24 、 unsigned では 7158254 となり、
割り算をする時点で結果が変わることが分かります。


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

Name: Ma  ..プログラマー(33,120ポイント)   Date: 2010/01/25(月) 13:10   No:47026 解決!     
Title: Re:signed int と unsigned int の掛け算。    
おおお、納得できました!
最初は分からないと思いましたけれども、なんどか読んだら理解できました。


つまり

int nantoka = (signed int のなにか)*(unsigned int の何か)
とした場合、16進数では一致しているので最後にint に自動?キャストされるから、問題なしと。
つまり
int nantoka = (int)((signed int のなにか)*(unsigned int の何か))
であると。

それにたいして、
int nantoka = (signed int のなにか)*(unsigned int の何か)/600
とすると/600までがunsigned int になり、それを600で割ることで unsigned int の値として割ったことになり、それが最後にint にキャスト。
ということですね。

では

int nantoka = (signed int)((signed int のなにか)*(unsigned int の何か))/600

としても意図通りに正しくできるわけですね。

ありがとうございました。
間違ってたらおしてください(汗


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



Name: ラーグ  ..ぴよぴよ(847ポイント)   Date: 2010/01/13(水) 11:48   No:46097       
Title: ボールの接触判定とバーの移動について    
[1] 質問文
 [1.1] ブロック崩しのようなイメージで動いているバーにボールが当たったら跳ね返るようにしたいです
        バーもボールと同じ座標で動かないよう各々動かしたいです
 [1.2]
#include <stdio.h>
#include <stdlib.h>
#include <eggx.h>

int win;

int square(void){
  newpen(win, 2);
  fillrect(win, 150.0, 150.0, 200.0, 200.0);
}
int upbar(float x){
  float dx;
  dx=5.0;

  newpen(win, 9);
  fillrect(win, 320.0+x, 480.0, 80.0, 20.0);
  x+= dx;
  if(x>480.0){
    x-= dx;
  }
  else if(x<20.0){
    x+= dx;
  }
}
int downbar(float x){
  float dx;
  dx=5.0;
  
  newpen(win, 9);
  fillrect(win, 50.0+x, 0.0, 80.0, 20.0);
  x+= dx;
  if(x>480.0){
    x-= dx;
  }
  else if(x<20.0){
    x+= dx;
  }
}
int rightbar(float y){
  float dy;
  dy=5.0;

  newpen(win, 9);  
  fillrect(win, 480.0, 260.0+y, 20.0, 80.0); 
  y+= dy;
  if(y>480.0){
    y-= dy;
  }
  else if(y<20.0){
    y+= dy;
  }
}
int leftbar(float y){
  float dy;
  dy=5.0;

  newpen(win, 9);
  fillrect(win, 0.0, 180.0+y, 20.0, 80.0);
  y-= dy;
  if(y>480.0){
    y-= dy;
  }
  else if(y<20.0){
    y+= dy;
  }
}

int main(){  
  float x, y, dx, dy;

  win=gopen(500,500);//描画ウインドウを開く
  winname(win, "reflect");//名前をつける
  gsetbgcolor(win, "white");//背景を白に指定
  gclr(win);//背景を白に塗りつぶす

  x=40.0;
  y=30.0;
  dx=10.0;
  dy=10.0;
  
  while(1){
    gclr(win);
    square(); //中央に赤の正方形を表示
    upbar(x); //上側に灰の長方形を表示
    downbar(x); // 下側に灰の長方形を表示
    rightbar(y); // 右側に灰の長方形を表示
    leftbar(y); // 左側に灰の長方形を表示

    newpen(win, 5);
    fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);//丸を表示
    x+= dx;  
    y+= dy;
    if( 150.0<=x && x<=350.0 && y==140.0 ){
      dy= -dy; //中央ブロック下端に当たった時の処理
    }   
    else if( 150.0<=x && x<=350.0 && y==360.0 ){
      dy= -dy; //中央ブロック上端に当たった時の処理
    }   
    else if( 150.0<=y && y<=350.0 && x==360.0 ){
      dx= -dx; //中央ブロック右端に当たった時の処理
    }   
    else if( 150.0<=y && y<=350.0 && x==140.0 ){
      dx= -dx; //中央ブロック左端に当たった時の処理
    }   
    else if( x==140 && y==140 || x==360 && y==140 || x==360 && y==140 || x==360 && y==360 ){
      dx= -dx;
      dy= -dy; //中央ブロックの角に当たった時の処理
    }
    msleep(70);
  }
}
 

サブルーチンを使わないといけないのでmain関数の中のxとyを引数に持ってきて上記のプログラムの様にしました

 [1.3] バーの動かし方が分からずまた接触判定をどうすればいいのか困っていますので、サブルーチンの中でどう書けばいいのか教えていただきたいです
      
[2] 環境  
 [2.1] OS : Mac OS X
 [2.2] コンパイラ名 : egg

[3] その他 
 初心者なのでほとんど分からない状態です
 期限が間近なので早めに回答頂けたら幸いです
 


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


Name: softya  ..比類無きプログラマー(86,674ポイント)   Date: 2010/01/13(水) 12:08   No:46099     
Title: Re:ボールの接触判定とバーの移動について    
宿題か課題ですよね?
いつまでの締切かハッキリさせて貰うとみなさんの気構えが変わりますので明確にして下さい。

この掲示板でMACが使える人は限られていると思いますので、画面イメージがあったら貼りつけてももらえますか。どうもイメージが分からなくて。ちなみに私もMACはありません。

あと幾つか疑問が。
・各バーの移動方向は?
・バーの移動条件と言うか、キーボードの入力で動かすんですか?
・キーボードから入力方法は?
・終了はないのでしょうか?
・ボールが画面外へ出た時の処理は?
・自分はどこまでC言語を理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね


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

Name: ラーグ  ..かけだし(1,069ポイント)   Date: 2010/01/13(水) 15:31   No:46107     
Title: Re:ボールの接触判定とバーの移動について    
大学の課題で提出日は1月25日です

・上下のバーは左右に、左右のバーは上下に各々移動させようと思っています
・キーボードでの入力で動かすのではなく、プログラムを開始して後は自動で動くようにするつもりです
・終了は無いです
・ボールが画面外へ出たときの処理はまだ未定です・・・
・学校で習った範囲は
ループ
二重ループ
配列
条件分岐
入力と出力
などの基本的な内容は勉強しました

言語によっての違いなどがよく分からないのでとりあえず習った内容についてはこういう返答しかできないので申し訳無いです・・・


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

Name: softya  ..比類無きプログラマー(87,112ポイント)   Date: 2010/01/13(水) 22:19   No:46127     
Title: Re:ボールの接触判定とバーの移動について    
時間が無いとのことですので、がんがん仕様を固めましょう。

・上下のバーは左右に、左右のバーは上下に各々移動させようと思っています
・キーボードでの入力で動かすのではなく、プログラムを開始して後は自動で動くようにするつもりです
自由(ランダム)移動ですか?
それともAI?
なにか明確なルールを決めて下さい。

・ボールが画面外へ出たときの処理はまだ未定です・・・ 
少なくとも再スタートか反射か決めて下さい。
後で決めようなんてのは時間が無いので、すぐ決めましょう。

それと、構造体の配列や構造体の引数は使えますか?
構造体のポインタも使いたいところです。
なので、構造体のメンバを考えてみて下さい。

バーも正方形も全部構造体化して表示や当たり判定サブルーチンは出来るだけ1つにまとめてたいです。
バーの移動サブルーチン1つで済ませたいですね。


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

Name: ラーグ  ..かけだし(1,309ポイント)   Date: 2010/01/13(水) 23:28   No:46132     
Title: Re:ボールの接触判定とバーの移動について    
・バーは玉の座標と関係なくそれぞれが独立させて動かそうと思っています(これがAIなのかどうか判別できないのではっきりとした返答になっているか不安ですが・・・)
移動距離や進行方向は上記プログラムの様にして一定座標まで進行方向を逆にする様にしています

・ボールが画面外へ出た時は再スタートの形をとろうと思います

・構造体についてはまだ習っていないです
使ってはいけないということは無いですが期限以内に自分が構造体について把握、対処できるのかどうか分かりません



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

Name: softya  ..比類無きプログラマー(87,556ポイント)   Date: 2010/01/14(木) 00:25   No:46136     
Title: Re:ボールの接触判定とバーの移動について    
>・バーは玉の座標と関係なくそれぞれが独立させて動かそうと思っています(これがAIなのかどうか判別できないのではっきりとした返答になっているか不安ですが・・・)
>移動距離や進行方向は上記プログラムの様にして一定座標まで進行方向を逆にする様にしています
そうすると、一定方向に一定速度で動いて、一定座標まで来たら方向を逆転、逆に移動してまた逆転。これを繰り返すって事で良いですね。

>・ボールが画面外へ出た時は再スタートの形をとろうと思います
分かりました。

>・構造体についてはまだ習っていないです
じゃぁ構造体は諦めて、配列だけ使いましょう。

まず、グローバル変数を決めましょう。
ボールの座標、半径、ベクトルをグローバル変数とします。これは配列は使いません。
同様に四角形(中央とバーを兼ねます)のグローバル配列(各要素数は5)を作りましょう。
四角形の座標、サイズ、ベクトル(中央の四角は0です)、移動回数カウンタ(これが0になったら逆方向に逆転)を定義します。
この変数や配列の宣言とボールと四角形の変数や配列を初期化する関数を書いてみて下さい。
特に四角形は、出来るだけforループなどを使って同じことは書かない様に工夫してみて下さい。
では、また明日!


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

Name: ラーグ  ..かけだし(1,369ポイント)   Date: 2010/01/14(木) 08:50   No:46147     
Title: Re:ボールの接触判定とバーの移動について    
ボールの座標などのグローバル変数と、バーの座標などのグローバル変数はそれぞれ別々なんですか?

できればこんな感じのソースというのを書いて頂けないでしょうか?


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

Name: softya  ..比類無きプログラマー(87,778ポイント)   Date: 2010/01/14(木) 10:45   No:46152     
Title: Re:ボールの接触判定とバーの移動について    
ここの掲示板の返事を待つより、とりあえずやってみた方が早いですよ。

>ボールの座標などのグローバル変数と、バーの座標などのグローバル変数はそれぞれ別々なんですか?

いっしょにするメリットはないですからね。

>できればこんな感じのソースというのを書いて頂けないでしょうか?

ボールはグローバル化するだけですから、四角形の例を。

int sq_x[5],sq_y[5]; //座標
int sq_sizex[5],sq_sizey[5]; //サイズ
以下略。


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

Name: ラーグ  ..入門者(2,907ポイント)   Date: 2010/01/14(木) 23:51   No:46226     
Title: Re:ボールの接触判定とバーの移動について    
グローバル配列のやり方が分からず完全に行き詰まっています...
ベクトルはまだいじっていません
このやり方であっているんでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <eggx.h>

int win;
float x, y, dx, dy; 
float sq_x[5], sq_y[5];
float sq_w[5], sq_h[5];
float sq_dx[5], sq_dy[5];

sq_x[0]=150.0; sq_y[0]=150.0; sq_w[0]=200.0; sq_h[0]=200.0; sq_dx[0]=200.0; sq_dy[0]=200.0;   
sq_x[1]=320.0  sq_y[1]=480.0; sq_w[1]=80.0;  sq_h[1]=20.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[2]=50.0;  sq_y[2]=0.0;   sq_w[2]=80.0;  sq_h[2]=20.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[3]=480.0; sq_y[3]=260.0; sq_w[3]=20.0;  sq_h[3]=80.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[4]=0.0;   sq_y[4]=180.0; sq_w[4]=20.0;  sq_h[4]=80.0;  sq_dx[0]=200.0; sq_dy[0]=200.0;
 


int square(void){
  newpen(win, 2);
  fillrect(win, , x[0], y[0], w[0], h[0]);
}
int upsquare(void){
  float x, dx;
  x=0.0;
  dx=5.0;

  newpen(win, 9);
  fillrect(win, , x[1], y[1], w[1], h[1]);
  x+= dx;
  if(x>480.0){
    x-= dx;
  }
  else if(x<20.0){
    x+= dx;
  }
}
int downsquare(void){
  float x, dx;
  x=0.0;
  dx=5.0;
  
  newpen(win, 9);
  fillrect(win, , x[2], y[2], w[2], h[2]);
  x+= dx;
  if(x>480.0){
    x-= dx;
  }
  else if(x<20.0){
    x+= dx;
  }
}
int rightsquare(void){
  float y, dy;
  y=0.0;
  dy=5.0;

  newpen(win, 9);  
  fillrect(win, , x[3], y[3], w[3], h[3]); 
  y+= dy;
  if(y>480.0){
    y-= dy;
  }
  else if(y<20.0){
    y+= dy;
  }
}
int leftsquare(void){
  float y, dy;
  y=0.0;
  dy=5.0;

  newpen(win, 9);
  fillrect(win, , x[4], y[4], w[4], h[4]);
  y-= dy;
  if(y>480.0){
    y-= dy;
  }
  else if(y<20.0){
    y+= dy;
  }



補足の質問でグローバル配列ができたとしてforループをどのように利用すればいいんでしょうか?
また移動カウンタとはどういうことですか?
質問ばかりですいません...


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

Name: ラーグ  ..入門者(3,463ポイント)   Date: 2010/01/15(金) 00:11   No:46228     
Title: Re:ボールの接触判定とバーの移動について    
プログラムを少し修正

int win;
float x, y, dx, dy; 
float sq_x[5], sq_y[5];
float sq_w[5], sq_h[5];
float sq_dx[5], sq_dy[5];

int square(void){
  sq_x[0]=150.0; sq_y[0]=150.0; sq_w[0]=200.0; sq_h[0]=200.0; sq_dx[0]=0.0; sq_dy[0]=0.0;  
  newpen(win, 2);
  fillrect(win, sq_x[0], sq_y[0], sq_w[0], sq_h[0]);
}
int upsquare(void){
  sq_x[1]=320.0; sq_y[1]=480.0; sq_w[1]=80.0;  sq_h[1]=20.0;  sq_dx[1]=5.0; sq_dy[1]=0.0; 
  newpen(win, 9);
  fillrect(win, sq_x[1], sq_y[1], sq_w[1], sq_h[1]);
  sq_x[1]+= sq_dx[1];
  if(sq_x[1]>480.0){
    sq_x[1]-= sq_dx[1];
  }
  else if(sq_x[1]<20.0){
    sq_x[1]+= sq_dx[1];
  }
}
int downsquare(void){
  sq_x[2]=50.0;  sq_y[2]=0.0;   sq_w[2]=80.0;  sq_h[2]=20.0;  sq_dx[2]=5.0; sq_dy[2]=0.0; 
  newpen(win, 9);
  fillrect(win, sq_x[2], sq_y[2], sq_w[2], sq_h[2]);
  sq_x[2]+= sq_dx[2];
  if(sq_x[2]>480.0){
    sq_x[2]-= sq_dx[2];
  }
  else if(sq_x[2]<20.0){
    sq_x[2]+= sq_dx[2];
  }
}
int rightsquare(void){
  sq_x[3]=480.0; sq_y[3]=260.0; sq_w[3]=20.0;  sq_h[3]=80.0;  sq_dx[3]=0.0; sq_dy[3]=5.0; 
  newpen(win, 9);  
  fillrect(win, sq_x[3], sq_y[3], sq_w[3], sq_h[3]); 
  sq_y[3]+= sq_dy[3];
  if(sq_y[3]>480.0){
    sq_y[3]-= sq_dy[3];
  }
  else if(sq_y[3]<20.0){
    sq_y[3]+= sq_dy[3];
  }
}
int leftsquare(void){
  sq_x[4]=0.0;   sq_y[4]=180.0; sq_w[4]=20.0;  sq_h[4]=80.0;  sq_dx[4]=0.0; sq_dy[4]=5.0; 
  newpen(win, 9);
  fillrect(win, sq_x[4], sq_y[4], sq_w[4], sq_h[4]);
  sq_y[4]+= sq_dy[4];
  if(sq_y[4]>480.0){
    sq_y[4]-= sq_dy[4];
  }
  else if(sq_y[4]<20.0){
    sq_y[4]+= sq_dy[4];
  }
}


前の投稿では変数の名前を書き換えてなかったので直しました
エラーは出なくなりましたが、バーが止まったままで動かないです...



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

Name: softya  ..比類無きプログラマー(88,266ポイント)   Date: 2010/01/15(金) 00:19   No:46230     
Title: Re:ボールの接触判定とバーの移動について    
これは初期化関数で書いた方が良いですね。
配列の初期値で書いても良いんですが、混乱しそうなので。
sq_x[0]=150.0; sq_y[0]=150.0; sq_w[0]=200.0; sq_h[0]=200.0; sq_dx[0]=200.0; sq_dy[0]=200.0;   
sq_x[1]=320.0  sq_y[1]=480.0; sq_w[1]=80.0;  sq_h[1]=20.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[2]=50.0;  sq_y[2]=0.0;   sq_w[2]=80.0;  sq_h[2]=20.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[3]=480.0; sq_y[3]=260.0; sq_w[3]=20.0;  sq_h[3]=80.0;  sq_dx[0]=200.0; sq_dy[0]=200.0; 
sq_x[4]=0.0;   sq_y[4]=180.0; sq_w[4]=20.0;  sq_h[4]=80.0;  sq_dx[0]=200.0; sq_dy[0]=200.0;
なので、四角形の初期化関数を作って、そこに書いて下さい。
ちなみに、各バーの移動ベクトルは違うはずですよね?
中央の四角形は動かいないのでベクトルが0だと思いますが。

>補足の質問でグローバル配列ができたとしてforループをどのように利用すればいいんでしょうか?
同じ値を入れるときに利用して下さい。
出てこなければ使わなくても良いです。

>また移動カウンタとはどういうことですか?
>質問ばかりですいません...

あぁ、そこが説明不足でしたね。
各バーを移動させるとして、どうやって移動方向を逆転させるかですが。
私の思いついたのか一定回数移動したら移動ベクトルを逆転すれば良いんじゃないかってアイデアです。
でカウンタを設けてカウントダウンしていって0になったら移動ベクトルを逆転します。
0になったカウンタには、また次に逆転してほしいタイミングのカウント値を入れます。
これでカウントが0になる度に方向が逆転するって仕組みになるわけです。


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

Name: ラーグ  ..入門者(4,244ポイント)   Date: 2010/01/15(金) 01:37   No:46235     
Title: Re:ボールの接触判定とバーの移動について    
アドバイス通りiをカウンタにして一定距離進んだら移動方向を逆にすることが出来ました!

int win, i[4];
float x, y, dx, dy; //丸の座標と移動距離
float sq_x[5], sq_y[5]; //各四角形の座標
float sq_w[5], sq_h[5]; //各四角形のサイズ
float sq_dx[2], sq_dy[2]; //各四角形の移動距離

int square(void){
  newpen(win, 2);
  fillrect(win, sq_x[0], sq_y[0], sq_w[0], sq_h[0]);
}
int upsquare(void){  
  newpen(win, 9);
  fillrect(win, sq_x[1], sq_y[1], sq_w[1], sq_h[1]);
  sq_x[1]-= sq_dx[0];
  i[0]--;
  if(i[0]<0){
    sq_dx[0]= -sq_dx[0];
    i[0]=68;
  }
}
int downsquare(void){
  newpen(win, 9);
  fillrect(win, sq_x[2], sq_y[2], sq_w[2], sq_h[2]);
  sq_x[2]+= sq_dx[1];
  i[1]--;
  if(i[1]<0){
    sq_dx[1]= -sq_dx[1];
    i[1]=68;
  }
}
int rightsquare(void){
  newpen(win, 9);  
  fillrect(win, sq_x[3], sq_y[3], sq_w[3], sq_h[3]); 
  sq_y[3]+= sq_dy[0];
  i[2]--;
  if(i[2]<0){
    sq_dy[0]= -sq_dy[0];
    i[2]=68;
  }
}
int leftsquare(void){
  newpen(win, 9);
  fillrect(win, sq_x[4], sq_y[4], sq_w[4], sq_h[4]);
  sq_y[4]-= sq_dy[1];
  i[3]--;
  if(i[3]<0){
    sq_dy[1]= -sq_dy[1];
    i[3]=68;
  }
}


次に動いているバーへの当たり判定を追加したいんですがmain関数内の玉の挙動の部分に書くのか、それとも
バーの関数内に書くんでしょうか?
当たり判定のプログラム自体は以前に投稿した中央ブロックの当たり判定と同じ様に書けばいいと思っているのですが


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

Name: softya  ..比類無きプログラマー(88,251ポイント)   Date: 2010/01/15(金) 02:12   No:46239     
Title: Re:ボールの接触判定とバーの移動について    
まずですね。
square()
upsquare()  
downsquare()
rightsquare()
leftsquare()
を1つの関数に出来ますので、してみませんか。
このままの仕組みで当たり判定に行くとソースコードが複雑怪奇になってしまいます。

1つにする場合作る関数は
square_all(int no)
{
 //全部の四角形共通の処理
}
となります。
呼び出しは、こんな感じです。
int i;
for( i=0 ; i<5 ; i++ ) {
square_all(i);
}

あとi[4]は止めてcnt[5]としませんか。
なぜ5個なのかは、5つの関数を1つにするためです。
中央の四角形は動かないですが、上下左右のバーと同等に扱って下さい。
そうすれば、1つの関数で中央と上下左右のバーが扱えます。

>次に動いているバーへの当たり判定を追加したいんですがmain関数内の玉の挙動の部分に書くのか、それとも
バーの関数内に書くんでしょうか? 

当たり判定は1つの関数にすべきでしょう。
for( i=0 ; i<5 ; i++ ) {
ball_atari_hanntei(i);
}
って感じで呼び出します。

すいません、続きはまた明日お願いします。


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

Name: ラーグ  ..入門者(4,246ポイント)   Date: 2010/01/15(金) 02:31   No:46240     
Title: Re:ボールの接触判定とバーの移動について    
返信ありがとうございます
アドバイス参考に奮闘してみます!


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

Name: ラーグ  ..入門者(4,342ポイント)   Date: 2010/01/15(金) 12:27   No:46252     
Title: Re:ボールの接触判定とバーの移動について    
四角形を一つの関数にまとめれたんですが、当たり判定の関数は四角形の関数とは別に分けて書くんですか?

後、当たり判定のやり方が以前書いた中央ブロックの当たり判定の様に書かないといけないんでしょうか?
前の返信では当たり判定の関数分けをしたほうがいいとあったのですが、どのように書けばいいのか中々思いつけません…


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

Name: softya  ..比類無きプログラマー(88,970ポイント)   Date: 2010/01/15(金) 17:21   No:46263     
Title: Re:ボールの接触判定とバーの移動について    
遅くなりました。

>四角形を一つの関数にまとめれたんですが、当たり判定の関数は四角形の関数とは別に分けて書くんですか?

関数は機能別に分けるのが構造化プログラミングの基本ですので。
後のメンテンス性を考えての事です。

>後、当たり判定のやり方が以前書いた中央ブロックの当たり判定の様に書かないといけないんでしょうか?
>前の返信では当たり判定の関数分けをしたほうがいいとあったのですが、どのように書けばいいのか中々思いつけません…

中央ブロックの当たり判定ですが、
if( 150.0<=x && x<=350.0 && y==140.0 ){
は、大分問題がありますね。
y==140.0になるかは運次第と言うか、浮動小数点で==比較はうまく機能しません。
※ 原因は浮動小数点のまるめ誤差。
今のままだと問題が

ちゃんとした円と矩形の当たり判定は、下記を参考にして下さい。
「2008-06-02: 円と矩形の当たり判定」
http://www.uxi.jp/diary/2008.html

で、当たり判定を
for( i=0 ; i<5 ; i++ ) {
atari_hanntei(i);
}
としていましたが、

上下左右の当た判定をちゃんとするために、次のようにします。
※ 前と変えています。
[よびだし]ボールの処理はball_mave()関数へ。
ball_move();


[ボールの処理]
ball_move()
{
 // まずボールをX方向にベクトル分移動させる。
 x = x + dx;
 // 各四角形と当たり判定
 if( atari_hantei() ) {
  // 衝突したらX方向のベクトルを逆転。
  dx = -dx;
 }
 // 続いてY方向にベクトル分移動させる。あとはY方向について同様の処理。
}

[当たり判定関数]
// もし衝突したら、1をreturn値として返す。
int atari_hantei()
{
 // ボールと四角形の当たり判定。
 for( i=0 ; i<5 ; i++ ) {
  //サイトを参考に当たり判定を作って下さい。
 }
 // 衝突しなかったら
 return 0;
}

って感じです。分からなかったら聞いてください。


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

Name: ラーグ  ..入門者(4,517ポイント)   Date: 2010/01/16(土) 01:50   No:46289     
Title: Re:ボールの接触判定とバーの移動について    
ball_move()の関数を呼び出す際に()内にfillarcの各変数(自分のプログラムではx、y等)を入れて、ボールの動きの処理の関数の()内に(float x, float y)と書いて呼び出せばいいんでしょうか?
この方法で試してみたところ丸が移動しなくなって初期座標のところで止まったままになります・・・

後当たり判定のプログラムが見当がつかないので良ければ教えていただけないでしょうか


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

Name: softya  ..比類無きプログラマー(90,419ポイント)   Date: 2010/01/16(土) 12:29   No:46313     
Title: Re:ボールの接触判定とバーの移動について    
>ball_move()の関数を呼び出す際に()内にfillarcの各変数(自分のプログラムではx、y等)を入れて、ボールの動きの処理の関数の()内に(float x, float y)と書いて呼び出せばいいんでしょうか?
>この方法で試してみたところ丸が移動しなくなって初期座標のところで止まったままになります・・・

ボールの変数は、グローバル変数ですから引数で渡す必要がありません。
逆に引数で渡すと、値渡しになるため関数内で更新した値はグローバル変数に反映されず消えてしまいます。
これを防ぐ方法もありますが、ポインタを理解している必要がありますので今回は避けます。

>後当たり判定のプログラムが見当がつかないので良ければ教えていただけないでしょうか

じゃあ、とりあえず矩形と矩形の当たり判定で実装してみてもらえますか?
ボールは円に内接する矩形で当たり判定すると考えてみて下さい。
多少ウソが出ますが、初心者ならこのぐらいで良いのかも知れません。
参考↓
http://www012.upp.so-net.ne.jp/gyabo/tips/rect.html


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

Name: ラーグ  ..入門者(4,326ポイント)   Date: 2010/01/19(火) 10:50   No:46575     
Title: Re:ボールの接触判定とバーの移動について    
softyaさんにアドバイスを頂いた

[ボールの処理]
ball_move()
{
 // まずボールをX方向にベクトル分移動させる。
 x = x + dx;
 // 各四角形と当たり判定
 if( atari_hantei() ) {
  // 衝突したらX方向のベクトルを逆転。
  dx = -dx;
 }
 // 続いてY方向にベクトル分移動させる。あとはY方向について同様の処理。
}

[当たり判定関数]
// もし衝突したら、1をreturn値として返す。
int atari_hantei()
{
 // ボールと四角形の当たり判定。
 for( i=0 ; i<5 ; i++ ) {
  //サイトを参考に当たり判定を作って下さい。
 }
 // 衝突しなかったら
 return 0;
} 
この部分なんですがreturnで1を返すというのが分からなかったので
int atari_hantei(int i){
  for(i=0; i<5; i++){
    if( y==sq_y[i] + sq_h[i] + R && sq_x[i]<=x && x<=sq_x[i] + sq_w[i] + R ){
      dy= -dy; //四角形上端に当たった時の処理
    }
    else if( y==sq_y[i] - R && sq_x[i]<=x && x<=sq_x[i] + sq_w[i] ){
      dy= -dy; //四角形下端に当たった時の処理
    }
    else if( x==sq_x[i] + sq_w[i] + R && sq_y[i]<=y && y<=sq_y[i] + sq_h[i] ){
      dx= -dx; //四角形右端に当たった時の処理
    }
    else if( x==sq_x[i] - R && sq_y[i]<=y && y<=sq_y[i] + sq_h[i] ){
      dx= -dx; //四角形左端に当たった時の処理
    }
    else if(x==sq_x[i] - R && y==sq_y[i] - R || x==sq_x[i] - R && y==sq_y[i] + sq_h[i] + R || x==sq_x[i] + sq_w[i] + R && y==sq_y[i] - R || x==sq_x[i] + sq_w[i] + R && y==sq_y[i] + sq_h[i] + R ){
      dx= -dx; //四角形の角に当たったときの処理
      dy= -dy;
    }
    else if(y <= 0.0 || 500.0 <= y ){
      dy= -dy; //上下の壁に当たったときの処理
      newpen(win, 2);
      drawstr(win, 225.0, 250.0, 24, 0.0, "OUT!");
      msleep(10);
    }
    else if(x <= 0.0 || 500.0 <= x ){
      dx= -dx; //左右の壁に当たったときの処理
      newpen(win, 2);
      drawstr(win, 225.0, 250.0, 24, 0.0, "OUT!");
      msleep(10);
    }
  }
}

int ball_move(){
  newpen(win, 5);
  fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);//円を表示
  x+= dx;
  y+= dy;
}
自分なりに書いてみて
 ball_move(); //円を表示させる関数を呼び出す    
    for(i=0; i<5; i++)
      atari_hantei(i); //当たり判定の条件式の関数を呼び出す
関数の呼び出しをこのようにしてみましたが実際プログラムを動かしてみたところ、最初はちゃんと動作してくれるのですが途中でバーの中に入ってしまいおかしい動作をします 多分角を==で判定してしまっているのでダメなんだと思うんですが不等号を使って判定しようとしても配列全部に判定処理されるので、上側のバーの下端に当たるという判定と同時に下側のバーの下端の判定の処理と被ってちゃんと動作してくれません
( y>sq_y[i] - R && sq_x[i]<=x && x<=sq_x[i] + sq_w[i] ) //下端の条件式

(このように書いたら下側のバーの下端の判定処理でy>0で進行方向が逆になってしまう)

書き方が分かりづらくてすいませんがどなたか配列の場合での==を使わず判定処理をする方法を教えてもらえないでしょうか?
無駄に長文になってしまいすいませんm(__)m


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

Name: softya  ..比類無きプログラマー(95,648ポイント)   Date: 2010/01/19(火) 12:53   No:46586     
Title: Re:ボールの接触判定とバーの移動について    
>この部分なんですがreturnで1を返すというのが分からなかったので 

分からないなら聞いて下さいね。
衝突条件の時に、return 1;
って値を返すだけです。
関数の戻り値は勉強されていますよね?

>書き方が分かりづらくてすいませんがどなたか配列の場合での==を使わず判定処理をする方法を教えてもらえないでしょうか?

私の書いたのは、今のプログラムの角の問題も解決できるプログラムですから書き方を変えちゃうと色々問題が出るはずです。
上端とか何処に当たっているか判定しなくて良いんです。当たるか当たらないかの判定だけで当たり判定は作れます。何処に当たるか調べるから==なんてのが出て来てしまいます。
あと画面外に出た時の処理は、別の関数でやってください。関数の機能の定義があいまいになります。

とりあえず、当たり判定のリンク先は読まれたんですよね?
参考↓
http://www012.upp.so-net.ne.jp/gyabo/tips/rect.html
だったら、
(mx1 <= ex2 && ex1 <= mx2 && my1 <= ey2 && ey1 <= my2) 
の式になるはずですが。
とりあえず、当たり判定だけ書いてみてもらえませんか?
反射方向とか、上端下端とかは置いておいて、純粋に当たった事を判定する関数をです。

[追記]
左右と上下の移動と当たり判定を別にやると良いかは、色々シミュレーションしてみて考えてみて下さい。私の書いたプログラムの事です。
移動と当たり判定を次のようなアルゴリズムで処理します。
(1)座標にX方向だけの移動ベクトルを計算する。
(2)バー(四角形)との当たり判定を行う。当たっていたらXの移動ベクトルを反転する。
(3)X方向に移動した座標に、こんどはY方向の移動ベクトルを計算する。
(4)バー(四角形)との当たり判定を行う。当たっていたらYの移動ベクトルを反転する。



 編集済み


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

Name: ラーグ  ..入門者(4,972ポイント)   Date: 2010/01/20(水) 09:59   No:46676     
Title: Re:ボールの接触判定とバーの移動について    
ボールの処理と当たり判定の式について
int ball_move(){
  newpen(win, 5);
  fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);//円を表示
  x= x + dx;
  if( atari_hantei() ){
    dx= -dx;
  }
  y= y + dy;
  if( atari_hantei() ){
    dy= -dy;
  }
}

int atari_hantei(int i){
  for(i=0; i<5; i++){
    if( (x-10.0) <= (sq_x[i]+sq_w[i]) && sq_x[i] <= (x+10.0) && (y+10.0) <= sq_y[i] && (sq_y[i]+sq_h[i]) <= (y-10.0) ){
      return 1;
    } 
      return 0;
  }
}
リンク先を参考に当たり判定の式を書いてみましたが、四角形を突き抜けてしまいます... 当たり判定の式自体は何度も見直したので大丈夫だとは思うんですが 変数iは一貫して共通にする必要は無いと思うのでmain関数内で宣言で大丈夫ですか? main関数内の呼び出しも一応書いておきます
 while(1){ 
    int i;
    gclr(win);
    for(i=0; i<5; i++){
      square_all(i); //各四角形を呼び出す
    }
            
    ball_move(); //円を表示させる関数を呼び出す
    if(y <= 0 || y >= 500){
      dy= -dy;
    }
    else if(x <= 0 || x >= 500){
      dx= -dx;
    }
    msleep(70);
  }
}
後、各四角形の座標をを初期化関数で書き直すのを以前にアドバイス頂いたんですがまだやっていません 見やすいかどうかだけならとりあえず現状維持にしておきます [追記] ball_move関数内についてなんですが
if( atari_hantei() ){
    dx= -dx;
  }
  y= y + dy;
  if( atari_hantei() ){
    dy= -dy;
  }

当たり判定の式でreturnで1(真)を返してX座標のベクトルを反転させるという動きをするんだと思うんですが
Y座標のベクトルを反転させる時は別の当たり判定の関数にしなければいけないですか?

今のままの当たり判定の式だと上下左右のどのバーに当たってもX,Yの両方のベクトルが反転すると思うんですが...
なので左右のバーの場合の当たり判定、上下のバーの場合の当たり判定を書かないといけないんでしょうか?

質問多くなってしまい本当すいません... 編集済み


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

Name: softya  ..比類無きプログラマー(97,330ポイント)   Date: 2010/01/20(水) 10:57   No:46687     
Title: Re:ボールの接触判定とバーの移動について    
コードを見直していますので、ちょっと待って下さいね。
お昼までに返答いたします。

あっ全体を見直したいのでできたらソースコードを添付してもらえませんか?
xx.txtの名前にしないと張り付けられないと思いますのがよろしくお願いします。 編集済み


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

Name: softya  ..比類無きプログラマー(97,903ポイント)   Date: 2010/01/20(水) 11:44   No:46694     
Title: Re:ボールの接触判定とバーの移動について    
>リンク先を参考に当たり判定の式を書いてみましたが、四角形を突き抜けてしまいます... 当たり判定の式自体は何度も見直した>ので大丈夫だとは思うんですが変数iは一貫して共通にする必要は無いと思うのでmain関数内で宣言で大丈夫ですか? main関数内>の呼び出しも一応書いておきます

まず、間違いを指摘するとreturn 0;の場所がまずいです。
>int atari_hantei(int i){    ←/引数はありません。
>  for(i=0; i<5; i++){
>    if( (x-10.0) <= (sq_x[i]+sq_w[i]) && sq_x[i] <= (x+10.0) && (y+10.0) <= sq_y[i] && (sq_y[i]+sq_h[i]) <= (y-10.0) ){ ← (mx1 <= ex2 && ex1 <= mx2 && my1 <= ey2 && ey1 <= my2)  の式と違うような?
>      return 1;
>    } 
>      return 0;    ←1個目で当たっていなかったらreturn 0;してしまっています。なので2つ目以降の四角形と衝突判定していません。
>  }
>}
>

//    正しい処理
int atari_hantei(){
  for(i=0; i<5; i++){
    //    わかりやすく記述しましょう。
    //    バグを出さないためには、まずわかり易い書き方からです。
    float mx1 = sq_x[i];
    float mx2 = sq_x[i]+sq_w[i];
    float ex1 = x-10.0;
    float ex2 = x+10.0;
    float my1 = sq_y[i];
    float my2 = sq_y[i]+sq_h[i];
    float ey1 = y-10.0;
    float ey2 = y+10.0;
    if( (mx1 <= ex2 && ex1 <= mx2 && my1 <= ey2 && ey1 <= my2) ) {
        //    5個のうち、どれかに衝突したら1を返す。
      return 1;
    } 
  }
  //    5個全部調べて当たりが無かったら0を返す。場所を変えました。
  return 0;
}

>今のままの当たり判定の式だと上下左右のどのバーに当たってもX,Yの両方のベクトルが反転すると思うんですが...
>なので左右のバーの場合の当たり判定、上下のバーの場合の当たり判定を書かないといけないんでしょうか?

確かにまずい点がありました。
こちらで確認テストが出来ないので申し訳ないですね。
考え中なので、もう少しお待ち下さいね。

それと全体を見直したいので、ソースコードを添付してもらえませんか?
xx.txtの名前にしないと張り付けられないと思いますのがよろしくお願いします。


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

Name: softya  ..比類無きプログラマー(98,601ポイント)   Date: 2010/01/20(水) 12:14   No:46700     
Title: Re:ボールの接触判定とバーの移動について    
考え直した案ですが、図を見てもらえますか?
手書きで汚くて申し訳ないですが、真ん中黒い四角形がバーだと思って下さい。
で、ABCD4つのゾーンが定義されています。
これは、ボールの反射方向を衝突した時点の属するゾーンで決めようって仕組みになります。
ABゾーンだとYベクトルを反転します。
CDゾーンだとXベクトルを反転します。
両方のゾーンに属していたときは、X,Y両方のベクトルが反転されるわけです。

なので、ボール移動の関数は全く変わってしまいます。
当たり判定も当たったバーの番号を返すようにします。
int ball_move(){
  newpen(win, 5);
  fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);//円を表示
  x= x + dx;
  y= y + dy;
 // 当たっているか判定する。
 int atari = atari_hantei();
 // -1以外なら衝突
  if( -1 != atari ){
   if( ABゾーンに衝突? ) {
     dy = -dy;
   }
   if( CDゾーンに衝突? ) {
     dx = -dx;
   }
  }
}

// 返す値を変更しました。
int atari_hantei(){
  for(i=0; i<5; i++){
    //    わかりやすく記述しましょう。
    //    バグを出さないためには、まずわかり易い書き方からです。
    float mx1 = sq_x[i];
    float mx2 = sq_x[i]+sq_w[i];
    float ex1 = x-10.0;
    float ex2 = x+10.0;
    float my1 = sq_y[i];
    float my2 = sq_y[i]+sq_h[i];
    float ey1 = y-10.0;
    float ey2 = y+10.0;
    if( (mx1 <= ex2 && ex1 <= mx2 && my1 <= ey2 && ey1 <= my2) ) {
        //    5個のうち、どれかに衝突したら衝突した四角形の番号を返す。
      return i;
    } 
  }
  //    5個全部調べて当たりが無かったら-1を返す。
  return -1;


で、ゾーンのサイズですが、ボールが半径10なので各頂点から±10で良いと思います。
ゾーン判定のプログラムを考えてみて下さい。

もう、25日まで時間が無いので悠長に構えてられませんよ。
23日頃に終わらせる心構えでやらないと間に合わないと思います。 編集済み


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

Name: ラーグ  ..初心者(5,072ポイント)   Date: 2010/01/20(水) 13:03   No:46706     
Title: Re:ボールの接触判定とバーの移動について    
返信ありがとうございます

できる限り早く完成させたいと思います!

[追記]
ソース添付しました

本文は私情だったんで削除しました 編集済み


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

Name: softya  ..比類無きプログラマー(99,066ポイント)   Date: 2010/01/20(水) 18:13   No:46724     
Title: Re:ボールの接触判定とバーの移動について    
ソース見ました。
ゾーン判定さえちゃんとすれば、ちゃんと反射してくれそうです。
私の環境にx windowとeggxも入れたので、コンパイル&実行出来ます。
※ x windowの使い方が不明でウィンドウの移動も出来ませんが(汗)
画面がチラつくので何か使い方が悪いのかも知れませんが、eggxに詳しくないのでご容赦です。

それとコンパイル時にwarningが出ていると思いますが、
int square_all(int i)
int ball_move()
は戻り値が無いので
void square_all(int i)
void ball_move()
が正しいです。

関数のプロトタイプ宣言もヘッダ直後に加えて下さい。
void square_all(int i);
void ball_move();
int atari_hantei();

以上です。

ゾーン判定のプログラムの完成をお待ちしています。


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

Name: ラーグ  ..初心者(5,555ポイント)   Date: 2010/01/22(金) 02:58   No:46832     
Title: Re:ボールの接触判定とバーの移動について    
int atari_hantei(){
  for(i=0; i<5; i++){
    float mx1 = sq_x[i];
    float mx2 = sq_x[i]+sq_w[i];
    float ex1 = x-10.0;
    float ex2 = x+10.0;
    float my1 = sq_y[i];
    float my2 = sq_y[i]+sq_h[i];
    float ey1 = y-10.0;
    float ey2 = y+10.0;
    if(mx1 <= ex2 && ex1 <= mx2 && my1 <= ey2 && ey1 <= my2 ){
      return i;
    } 
  }
  return -1;
}


後はコンパイルのところまで持ってきたんですが、ball_move関数の方でエラーが起きてしまいます

reflect.c: In function ‘ball_move’:
reflect.c:35: error: ‘mx1’ undeclared (first use in this function)
reflect.c:35: error: (Each undeclared identifier is reported only once
reflect.c:35: error: for each function it appears in.)
reflect.c:35: error: ‘mx2’ undeclared (first use in this function)
reflect.c:35: error: ‘my2’ undeclared (first use in this function)
reflect.c:35: error: ‘my1’ undeclared (first use in this function)

変数の宣言はどこですればいいんでしょうか?
それと関数の呼び出しの部分は以前添付しましたソースと同じでいいんでしょうか?



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

Name: softya  ..比類無きプログラマー(99,751ポイント)   Date: 2010/01/22(金) 12:35   No:46842     
Title: Re:ボールの接触判定とバーの移動について    
>変数の宣言はどこですればいいんでしょうか?

関数の先頭で良いと思います。

>それと関数の呼び出しの部分は以前添付しましたソースと同じでいいんでしょうか?

はい。同じで良いと思います。

いちいち聞くより、自分で試した方が早いと思いますよ。
ソースコードの改変が気になるならコピーを残しておけば良いです。
質問して貰うのは全然問題ないですが、私が返答するまでの時間のロスが勿体無いです。 編集済み


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

Name: softya  ..ハッカー(102,957ポイント)   Date: 2010/01/23(土) 20:27   No:46922     
Title: Re:ボールの接触判定とバーの移動について    
締切が近づいてますが大丈夫ですか?
分からなかったら聞いて下さいね。


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

Name: ラーグ  ..初心者(5,405ポイント)   Date: 2010/01/24(日) 12:39   No:46953     
Title: Re:ボールの接触判定とバーの移動について    
一応判定はできたと思いますが自分の中で完全に動作を理解できていません
ゾーン判定

四角形に当たった時も半径分、中に進んで跳ね返るので直そうとしたら当たり判定がおかしくなってしまい見た目が悪くなっています

今携帯からの書き込みなのでご希望ありましたら午後6時頃にソース添付しようと思います


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

Name: softya  ..ハッカー(102,982ポイント)   Date: 2010/01/24(日) 12:42   No:46954     
Title: Re:ボールの接触判定とバーの移動について    
>今携帯からの書き込みなのでご希望ありましたら午後6時頃にソース添付しようと思います
こちらでも動作確認出来ますので、お待ちしています。


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

Name: ラーグ  ..初心者(5,456ポイント)   Date: 2010/01/24(日) 22:46   No:46996     
Title: Re:ボールの接触判定とバーの移動について    
返信大変遅れてしまいもうしわけありません

動作を見返したところ、いまだ当たり判定に不具合があったようで反射が
上手くいきません

ソース添付しておきますのでどこがおかしいかご指摘お願いします



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

Name: softya  ..ハッカー(104,105ポイント)   Date: 2010/01/25(月) 00:26   No:47006     
Title: Re:ボールの接触判定とバーの移動について    
非常に申し訳ないですが、今時間が取れません。
なんとか自力でお願いします。
ほんとうに申し訳ない。


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

Name: ラーグ  ..初心者(5,485ポイント)   Date: 2010/01/25(月) 00:44   No:47008     
Title: Re:ボールの接触判定とバーの移動について    
分かりました、頑張ってみます
もし時間できたら返信お願いします
間に合っても間に合わなかってもとりあえず形にしたいので 編集済み


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

Name: sizuma [URL]  ..プログラマー(32,589ポイント)   Date: 2010/01/25(月) 02:07   No:47009     
Title: Re:ボールの接触判定とバーの移動について    
このライブラリは座標系が違うんですね。
あー考え難い。
とりあえず、yの反射を
if(x >= (mx1-R) && x <= (mx2+R) && y >= (my1-R) && y <= (my1) || x >= (mx1-R) && x <= (mx2+R) && y <= (my2+R) && y >= my2)
したらどーなりますか?

こちらでは動作確認できないので、どんな感じなのか分からないですが・・・
内容も上のコード以外あんまり見てないので。


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

Name: ラーグ  ..初心者(5,659ポイント)   Date: 2010/01/25(月) 02:32   No:47011     
Title: Re:ボールの接触判定とバーの移動について    
添付しましたソースだと四角形に当たると当たり判定内から抜け出せなくなってしまいました
sizumaさんの考えてもらったの試してみましたが同じ結果でした

if(x >= (mx1-R) && x <= (mx2+R) && y >= my1 && y <= my1 || x >= (mx1-R) && x <= (mx2+R) && y <= my2 && y >= my2)


このように書くと反射は上手くいくんですが途中でバーに食い込んでしまい同じく当たり判定内から抜け出せなくなり、無限ループしました...


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

Name: sizuma [URL]  ..プログラマー(32,757ポイント)   Date: 2010/01/25(月) 02:40   No:47012     
Title: Re:ボールの接触判定とバーの移動について    
添付したファイルのソースに戻して、

if(x >= (mx1-R) && x <= (mx2+R) && y >= (my1-R) && y <= my1){
      y = my1-R;
      dy= -dy;
      number =number + 1;
}else if(x >= (mx1-R) && x <= (mx2+R) && y >= (my2-R) && y <= my2){
      y = my2 +R;
      dy= -dy;
      number =number + 1;
}

と書き直したらどうなりますかね?



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

Name: ラーグ  ..初心者(5,734ポイント)   Date: 2010/01/25(月) 02:58   No:47014     
Title: Re:ボールの接触判定とバーの移動について    
反射の見た目がすごくスムーズでさっきまでは半径分埋まってから反射していたのが無くなりました!
ですがある程度進んで下側のバーに当たろうとした時に急に方向転換して無限ループにはまりました


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

Name: sizuma [URL]  ..プログラマー(32,731ポイント)   Date: 2010/01/25(月) 03:05   No:47015     
Title: Re:ボールの接触判定とバーの移動について    
うーん、どんな画面になってるのかイメージできない・・・
方向転換するのはy軸方向ですか?

x軸方向ならばとりあえず、x方向の反射も上のように書き直してみてください。
上のソースは
my1よりめりこんだら、球を上に出す
my2よりめりこんだら、球を下にだす
って意味です。

明日の朝か、2時間目が退屈な授業なので、11時くらいにはまた覗きにきますので。
がんばってください


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

Name: ラーグ  ..初心者(5,809ポイント)   Date: 2010/01/25(月) 03:25   No:47017     
Title: Re:ボールの接触判定とバーの移動について    
簡単な図ですが...
ある程度球が進んでから下側のバー付近に行くと、
図のようにX座標を移動してX方向のベクトルが変わって画面外に出て無限ループになります


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

Name: sizuma [URL]  ..プログラマー(33,001ポイント)   Date: 2010/01/25(月) 08:56   No:47021     
Title: Re:ボールの接触判定とバーの移動について    
  if( atari != -1){
    if(x >= (mx1-R) && x <= (mx2+R) && y >= (my1-R) && y <= my1 || x >= (mx1-R) && x <= (mx2+R) && y >= (my2+R) && y <= my2){
      dy= -dy;
      number =number + 1;
    }
    if(y >= (my1-R) && y <= (my2+R) && x >= (mx1-R) && x <= mx1 || y >= (my1-R) && y <= (my2+R) && x >= (mx2+R) && x <= mx2){
      dx= -dx;
      number =number + 1;
    }
    if(number>15){
      number = 2;
    }

やっぱりここは+だと思いますけど・・・
うわーー遅刻するっ
また昼前にきます!
 編集済み


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

Name: softya  ..ハッカー(104,383ポイント)   Date: 2010/01/25(月) 11:26   No:47024     
Title: Re:ボールの接触判定とバーの移動について    
時間がとれたので見直してみました。
1つの問題点は、壁の反射処理です。
    if(y <= 10 || y >= 490){
      dy= -dy;
    }
    else if(x <= 10 || x >= 490){
      dx= -dx;
    }
壁の角に行くとはまります。
    if(y <= 10 || y >= 490){
      dy= -dy;
    }
    if(x <= 10 || x >= 490){
      dx= -dx;
    }
が正しいです。

それと、これだと壁ぎわで乱反射しますので、
    if(y <= 0 || y >= 500){
      dy= -dy;
    }
    if(x <= 0 || x >= 500){
      dx= -dx;
    }
となります。
これでボールが何処かえ消えるのは防げると思います。

あと、ゾーン判定時にボールのベクトルを見て反射するか決めないとまずいかもです。


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

Name: ラーグ  ..初心者(6,024ポイント)   Date: 2010/01/25(月) 12:31   No:47025     
Title: Re:ボールの接触判定とバーの移動について    
もう締め切り間近のため直しようがないので、ごり押しで乱反射対策しました

今まで壁に当たって反射する時にバーの当たり判定と被って無限ループに入っていたので
バーの高さが20.0なので壁に当たった時にその座標から±30.0移動させてベクトルを変えるようにしました

完全に計算式のみで動作できず不自然に見える部分も多々ありますが、一応無限ループは無くなったのでとりあえずこれで出そうと思います
また落ち着いたらソース添付しようと思います

皆さん詳しい解説をありがとうございました
本当に助かりました

ソース添付して解決とさせていただきます 編集済み


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

Name: ラーグ   Date: 2010/02/01(月) 08:58   No:460971264982308 解決!     
Title: Re:ボールの接触判定とバーの移動について    
大変遅れてしまいました
課題の結果はまだ分かりませんがとりあえずの提出はできました
回答してくださった方々ほんとうにありがとうございました





Name:  ..入門者(3,347ポイント)   Date: 2010/01/24(日) 21:17   No:46989       
Title: ロゴの作成    
透過処理のしてあるロゴ(pngファイル)の作り方がわかりません。

「LOGO!」というソフトを使ってみたのですが、ロゴまわりを透過することは可能ですか?
可能ならやり方を教えてほしいのですが・・・

もし、できなければ透過処理がついたオススメのソフトを教えてください。
お願いします。


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


Name: array [URL]  ..熟練のプログラマー(62,422ポイント)   Date: 2010/01/24(日) 22:10   No:46994     
Title: Re:ロゴの作成    
> 「LOGO!」というソフトを使ってみたのですが、ロゴまわりを透過することは可能ですか? 

使った事は無いですが、「# 不透明度を指定して影をつけたり」と書いてあるので可能だと思います。


> もし、できなければ透過処理がついたオススメのソフトを教えてください。 

画像作成は、GIMP や photoshop が有名です。

あと、ホームページビルダーを買ったら付いてくるウェブアートデザイナーってのはペイントと同等の操作感
で使いやすいので個人的には好きだったりします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,423ポイント)   Date: 2010/01/24(日) 22:29   No:46995     
Title: Re:ロゴの作成    
私はPhotoshop使ってます。
7.0が好きだったのですが、windows7で使えないのでCS4使ってます。
Photoshopは少々高いですが、もし学生ならアカデミック版が買えますよ。

arrayさんの補足でGIMPというソフトはフリーソフトです。
無料で使えるのに機能的にはphotoshopに勝るとも劣らない素晴らしいソフトです。
機能が多いので最初戸惑うかも知れませんが、わからない操作があればググれば大抵出てきますよ。

○○(やりたい処理) GIMP

みたいなキーワードで


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

Name:  ..入門者(3,506ポイント)   Date: 2010/01/25(月) 03:18   No:47016 解決!     
Title: Re:ロゴの作成    
GIMPにphotoshop、ウェブアートデザイナーですか。

GIMPは少しだけ触ったことがありますが、ロゴを作れるとは思いませんでした。
ウェブアートデザイナーは製作作業が楽しそうですね。
CS4、8万円するんですね。価格にビックリしてしまいました。

なるべくお金をかけたくないというのが心情ですので、
今回はGIMPを使って作成してみます。

arrayさん、Dixqさん、ありがとうございました。


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



Name: サンタクロース  ..入門者(2,635ポイント)   Date: 2010/01/24(日) 14:23   No:46961       
Title: ルーミアのナイトバードの再現について    
こんにちわ。原作の弾幕を実装しようとしている者です。
「ナイトバード」を作ってみたのですが、どうも弾のスピードをうまく決めることができません。
本家ではPI/2(下向き)の方向の弾が遅く、そこから右または左に行くほど弾速が速くなり完全な円でない曲線ができますよね。そういった弾速の違いからできる曲線はどうすれば作ることができるでしょうか?
//「ナイトバード」
void boss_shot_bulletH008(){
#define TM008 50
    int i,n,k,t=boss_shot.cnt%TM008;
    float rand1,rand2;
    if(t==0){
        for(n=1;n<5;n++){//左
            rand1=rang(PI/12);    
            for(i=1;i<15;i++){
                    if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].knd      =2;
                    boss_shot.bullet[k].angle    =PI/3+PI*2/3*i/15+rand1;
                    boss_shot.bullet[k].flag     =1;
                    boss_shot.bullet[k].x        =boss.x+cosf(PI/3+PI*2/3*i/15+rand1)*10;
                    boss_shot.bullet[k].y        =boss.y+sinf(PI/3+PI*2/3*i/15+rand1)*10;
                    boss_shot.bullet[k].col      =13;
                    boss_shot.bullet[k].cnt      =0;
                    boss_shot.bullet[k].spd      =??;    
                    se_flag[0]=1;
                 }
            }
        }
    }
    if(t==40){
        for(n=1;n<5;n++){//右    
            rand2=rang(PI/12);
            for(i=1;i<15;i++){
                if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].knd      =2;
                    boss_shot.bullet[k].angle    =PI*2/3-PI*2/3*i/15+rand2;
                    boss_shot.bullet[k].flag     =1;
                    boss_shot.bullet[k].x        =boss.x+cosf(PI*2/3-PI*2/3*i/15+rand2)*10;
                    boss_shot.bullet[k].y        =boss.y+sinf(PI*2/3-PI*2/3*i/15+rand2)*10;
                    boss_shot.bullet[k].col      =11;
                    boss_shot.bullet[k].cnt      =0;
                    boss_shot.bullet[k].spd      =??;    
                    se_flag[0]=1;
                }
            }
        }
    }
}

    

 編集済み


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


Name: ひよこ  ..比類無きプログラマー(78,422ポイント)   Date: 2010/01/24(日) 15:12   No:46967     
Title: Re:ルーミアのナイトバードの再現について    
iを使っているので、0.3+i/15みたいな感じでいいのでは、ないでしょうか

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

Name: サンタクロース  ..入門者(2,697ポイント)   Date: 2010/01/24(日) 15:50   No:46971     
Title: Re:ルーミアのナイトバードの再現について    
回答ありがとうございます。
しかしnを使わないと弾幕が三重の状態になってしまうのです。
iとnの両方を使わなければならないみたいです


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

Name: ひよこ  ..比類無きプログラマー(78,398ポイント)   Date: 2010/01/24(日) 16:37   No:46978     
Title: Re:ルーミアのナイトバードの再現について    
1.3+n/5+i/5
ではこんな感じでよろしいのでしょうか?


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

Name: Tatu  ..上級者(22,720ポイント)   Date: 2010/01/24(日) 19:57   No:46988     
Title: Re:ルーミアのナイトバードの再現について    
boss_shot.bullet[k].spd=(0.1*i+1)*(1.0+0.5*n);
のような形ではどうでしょうか?


添付画像の弾幕の関数
/*
弾発射関数
way個のknd番目の種類のcol番目の色の弾を座標(x,y)からb_angleの方向を中心に発射角度をそれぞれd_angleだけずらし、
(ただし、偶数弾などb_angleの方向に撃ちたくないときはb_angleの値をd_angle/2.0だけ大きくする)
angle方向に速度をspd,vxの値をvx,vyの値をvy(vx,vyはそのままでは機能しない),
状態をstateにしてとばす。この弾はtillまで画面外に出ても消えず、
effが1ならば加算ブレンドして描画され、sflagが1ならば発射音がなる。
*/
void boss_bullet_on(int way,int knd,int col,int cnt,double x,double y,double b_angle,double d_angle,double spd,double vx,double vy,int state,int till,int eff=0,int sflag=1){
    int i=0,k;
    for(i=0;i<way;i++){
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].knd   = knd;//弾の種類
            if(knd==7) boss_shot.bullet[k].kaiten=1;
            else boss_shot.bullet[k].kaiten=0;
            boss_shot.bullet[k].col   = col;//弾の色
            boss_shot.bullet[k].cnt   = cnt;
            boss_shot.bullet[k].x     = x;//座標
            boss_shot.bullet[k].y     = y;
            boss_shot.bullet[k].angle = b_angle+d_angle*(i - way/2);//角度:bが基準、dが間隔
            boss_shot.bullet[k].spd   = spd;//angle方向のスピード
            boss_shot.bullet[k].vx    = vx;//x方向の速度
            boss_shot.bullet[k].vy    = vy;//y方向の速度
            boss_shot.bullet[k].state = state;//弾の状態
            boss_shot.bullet[k].till  = till;//弾が画面外に出ても消えない時間
            boss_shot.bullet[k].eff      = eff;
            if(sflag==1)se_flag[0]=1;
        }
    }
}

void boss_shot_bulletT124(){
    int i,j,t=boss_shot.cnt%300;
    double angle;
    if( t==60 || t==120 || t==180 || t==240 ){
        for(i=0;i<3;i++){
            for(j=0;j<12;j++){
                angle=bossatan2()-PI/4;
                boss_bullet_on(1,1,1,0,boss.x,boss.y,angle+j*PI/16.0,0,(0.1*j+1)*(1.0+0.5*i),0,0,0,0);
            }
        }
    }
    if( t==90 || t==150 || t==210 || t==270 ){
        for(i=0;i<3;i++){
            for(j=0;j<12;j++){
                angle=bossatan2()+PI/4;
                boss_bullet_on(1,1,3,0,boss.x,boss.y,angle-j*PI/16.0,0,(0.1*j+1)*(1.0+0.5*i),0,0,0,0);
            }
        }
    }
    if(t==299){
        move_boss_pos(48,48,FMX-48,160,150,180);
    }
}


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

Name: ひよこ  ..比類無きプログラマー(78,406ポイント)   Date: 2010/01/24(日) 21:18   No:46990     
Title: Re:ルーミアのナイトバードの再現について    
Tatuさんすごいです。よく出来てますね。今考えたものなんですか?
弾幕の数がすごいことになってます。125個も作ったなんて(私はきっと50もありませんよ。


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

Name: サンタクロース  ..入門者(2,764ポイント)   Date: 2010/01/24(日) 21:28   No:46991 解決!     
Title: Re:ルーミアのナイトバードの再現について    
ひよこさん、Tatuさんありがとうございます。
まさかiとnをかけるという発想はまったくありませんでした。
おかげでいい感じの曲線ができました。
というかこれくらい自分で作れなければオリジナルの弾幕なんて到底作れませんね。


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

Name: Tatu  ..上級者(22,733ポイント)   Date: 2010/01/25(月) 00:25   No:47005     
Title: Re:ルーミアのナイトバードの再現について    
>>ひよこ さん
このスレッドを見て、「ナイトバード」の動画を見ながらつくりました。

>>サンタクロース さん
慣れれば作れるようになると思いますよ。


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



Name: すのう  ..かけだし(1,603ポイント)   Date: 2010/01/24(日) 18:57   No:46984       
Title: 引数の定義?    
DXライブラリとおーぷんMIDIぷろじぇくと(http://openmidiproject.sourceforge.jp/)のMIDIDataライブラリを使ってアプリケーションを作っているものです。
前回の投稿を一度解決にしてしまったのですが、また質問があるのでたびたび失礼します。

MIDIデータを読み込んでプロパティを表示させたいのですが、
フォーマットを読み込む
 
DrawFormatString(0,0,GetColor(255,255,255),"%d", MIDIData_GetFormat(pMIDIData));

などは上手くいくのですが、
テンポを読み込みたいのが上手くできません。

上と同じように書きたいのですが、

DrawFormatString(0,0,GetColor(255,255,255),"%d", MIDIData_FindTempo(pMIDIData));

ではできないです。

FindTempoの関数定義というところに

long MIDIData_FindTempo (MIDIData* pMIDIData, long lTime, long* pTempo);

と書いてあるのですが、long lTimeとかをどう書けばいいのでしょうか?
独学過ぎて、引数って何、くらいの状態なのですが、時間の都合でとりあえず答えを教えていただけると助かります。


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


Name: softya  ..ハッカー(104,055ポイント)   Date: 2010/01/24(日) 19:21   No:46985     
Title: Re:引数の定義?    
とりあえず関数は、引数の数だけパラメータを書かないとエラーになります。
>MIDIData_FindTempo (MIDIData* pMIDIData, long lTime, long* pTempo); 
だと3つのパラメータです。

ヘルプを見ると
pMIDIData:MIDIデータへのポインタ
lTime:時刻
pTempo:テンポを格納するバッファ
と説明されています。

[詳細な説明]
lTimeにおけるテンポ(lTimeにテンポイベントがない場合は直前のテンポ)を調べ、バッファに格納する。この関数は、最初のMIDIトラックのみに含まれるテンポイベントを探索する。テンポの単位は4分音符あたりのマイクロ秒[μ秒/4分音符]である。テンポイベントが指定時刻までに存在しない場合は、デフォルト値として、500000[μ秒/4分音符]が返される。

あと関数の戻り値はテンポではなくて正常異常のフラグですので注意。

使い方としては
long tempo;
long ltime;
ltime = 100; //単位は?
if( MIDIData_FindTempo(pMIDIData,ltime,&tempo) ) {
 //正常なら表示
 DrawFormatString(0,0,GetColor(255,255,255),"%d", tempo ); 
}

C言語の関数の理解も出来ていないとするとポインタは分かりませんよね?
このライブラリはポインタを使いまくっているので大丈夫ですかね?

時間が無いかも知れませんが、下記サイトの11章と15章には目を通しておいて下さい。
http://homepage3.nifty.com/mmgames/c_guide/
このままだと、致命的なバグを作ってしまって行き詰まる予感がします。


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

Name: すのう  ..かけだし(1,670ポイント)   Date: 2010/01/24(日) 23:51   No:47001     
Title: Re:引数の定義?    
ありがとうございます。
とりあえずですが、アプリケーション完成しました。

お忙しい中助けていただいて感謝しています。
またなにかあったらよろしくお願いします^^


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



Name: falco  ..ぴよぴよ(32ポイント)   Date: 2010/01/24(日) 00:49   No:46942       
Title: 龍神録プログラミング    
はじめまして、プログラム歴半年の初心者です。
こちらのサイトを見ながら勉強しているのですが龍神録プログラミングの5章でつまづきました。
コンパイル実行すると

 main.cpp(16) : error C2086: 'img_ch' : 再定義されました。
 main.cpp(17) : error C2086: 'ch' : 再定義されました。

というエラーメッセージが出てしまいます。
全てのヘッダファイルに対して#pragma onceでインクルードガードしてみましたが改善できません。
対処法を教えてください。
xpでVC++6.0をつかっています。


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


Name: Justy  ..伝説なるハッカー(495,149ポイント)   Date: 2010/01/24(日) 02:42   No:46943     
Title: Re:龍神録プログラミング    
 その 5章ページには

>後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください

とありますが、それは実行済みですか?


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

Name: falco  ..ぴよぴよ(41ポイント)   Date: 2010/01/24(日) 12:29   No:46952     
Title: Re:龍神録プログラミング    
はい。すべて実行済みです

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

Name: falco  ..ぴよぴよ(51ポイント)   Date: 2010/01/24(日) 19:35   No:46987 解決!     
Title: Re:龍神録プログラミング    
自己解決しました

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



Name: すのう  ..ぴよぴよ(390ポイント)   Date: 2010/01/21(木) 05:53   No:46774       
Title: MIDIファイルを開いて。    
こんばんわ、質問させていただきます。
MIDIファイルを開いて中身を解析したいのですが、どのようにしたらいいのでしょうか??
DXライブラリを使い、VC++で作っています。
今のところ、ファイルを開いて、中身を読み出し、画面に表示するところまでは作ることが出来たのですが、当たり前ですがMIDIをそのまま表示させても意味のわからない言語の羅列になります。
MIDIに関しては本やネットで結構調べたりしたのですが、自分の理解能力が追いつかず、プログラムに反映できてません。
SMFを読み込んで、メタイベント、特に調性とテンポとを取り出したいのですが、(SMFに書かれているという前提で)フォーマット0の場合とかだけでもいいのでどなたか教えていただけないでしょうか?
大分丸投げ感があるのですが、期限の近い学校の課題関連ですので、どうかお願いします。


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


Name: mnkr  ..入門者(3,415ポイント)   Date: 2010/01/21(木) 07:59   No:46778     
Title: Re:MIDIファイルを開いて。    
検索しました
グーグル先生で一発目で下記サイトが2つ見つかりました。

あるサイトでMIDI解析を行おうとしていて
ここがSMFについてとてもわかりやすく書かれているとありました。
実際わたしも読んでみましたがすのうさんが悩んでいる、
「MIDIをそのまま表示させても意味のわからない言語の羅列になります。」
を解決できるのではと思いました。
http://www.geocities.jp/stdmidi/

PerlでMIDI解析のソースをまるまる掲載しています。
言語は違いますが参考になるかと。
http://yokai-tp.com/cgi-bin/midi/plugin/mid2txt.pl0
上記の関連サイト
Midi Playlength calculator-II 
http://zentara.net/perlplay/some_snippets/midi-playlength-calculator.html

ちなみにわたしはやり方を知らないのでorz
こういう手助けしかできません。


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

Name: すのう  ..ぴよぴよ(590ポイント)   Date: 2010/01/23(土) 21:44   No:46925     
Title: Re:MIDIファイルを開いて。    
遅くなってスミマセン。
ありがとうございます。


あれから結構勉強して、自分で解析するのは無理だということがわかりましたwww(能力とか時間の問題で)
ので、MIDI解析のオープンソースを発見してきて使おうとしたのですが、それがコンソールアプリケーションでないと動作しないのです。
それをなんとかDXライブラリ使用で作ったアプリケーションに使いたいのですが、どうすればいいのでしょうか?

文章おかしかったらごめんなさいorz


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

Name: softya  ..ハッカー(102,801ポイント)   Date: 2010/01/23(土) 21:50   No:46927     
Title: Re:MIDIファイルを開いて。    
野暮な方法は、systemでそのツールを起動する。
system("midi解析ツール.exe midiファイル名 >解析結果.txt");
としといて、リダイレクトされた解析結果.txtを読み込むと解析結果が文字列として得られます。

ベストな方法は、オープンソースの詳細が無いと分かりません。
あとライセンス上オープンソースのコードを使用しても良いかは確認して下さい。
組み込んだ場合は、GPLなら自分もGPLとして公開する必要があります。
 編集済み


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

Name: softya  ..ハッカー(102,875ポイント)   Date: 2010/01/23(土) 22:05   No:46930     
Title: Re:MIDIファイルを開いて。    
ちょっと探してみましたが、ココのヤツのほうが楽なのでは?
http://openmidiproject.sourceforge.jp/
DLLとして使う分にはソース公開の義務も生じません。


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

Name: すのう  ..ぴよぴよ(796ポイント)   Date: 2010/01/23(土) 22:52   No:46933     
Title: Re:MIDIファイルを開いて。    
返答ありがとうございます。

システムでツールを起動というのは、MIDIファイルが毎回違っても使えるものなんでしょうか?
MIDIファイルは毎回使用者が選択する感じなんですが・・・。

あ、そこのソースを使用したいんです。
それで、そのMIDIDataライブラリっていうのを使用しようとしたらコンソールアプリケーションでないと動作しないって言われまして・・・。
DLLとして使うってどういうことなんですか?
初心者ですみません・・・><


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

Name: softya  ..ハッカー(102,746ポイント)   Date: 2010/01/23(土) 23:06   No:46935     
Title: Re:MIDIファイルを開いて。    
>システムでツールを起動というのは、MIDIファイルが毎回違っても使えるものなんでしょうか?
>MIDIファイルは毎回使用者が選択する感じなんですが・・・。 

system()の引数は文字列なので、sprintfで文字列を組み立てればOK。
ただし、野暮な方法なのでオススメではありませんね。

>それで、そのMIDIDataライブラリっていうのを使用しようとしたらコンソールアプリケーションでないと動作しないって言われまして・・・。 

該当の掲示板を見ましたが、サンプルコードがコンソールアプリだと言っているだけですね。
Windowsアプリ(DXライブラリを使ったものを含む)でのDLL使い方もその掲示板で丁寧に解説されてますよ。
http://sourceforge.jp/forum/forum.php?thread_id=25191&forum_id=13724

ところで、Visual Studio 2008のpro版(評価版)って90日しか使えませんが大丈夫ですか?


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

Name: すのう  ..ぴよぴよ(902ポイント)   Date: 2010/01/23(土) 23:44   No:46939     
Title: Re:MIDIファイルを開いて。    
すみません、DLLの置き場所はわかったのですが、そもそもDLLってなんなのかよくわかってない状態です。
理解能力が低いのでしょうかorz
何度か読み直したりDLLで調べたりしたんですけど。。。

卒研なので提出まで90日もありませんし、評価版でも、実行ファイル作ってしまえばいいかなーと思っていたのですが・・・もしかして、実行ファイルも90日たったら使えなくなってしまうんですか!?



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

Name: softya  ..ハッカー(102,912ポイント)   Date: 2010/01/24(日) 00:39   No:46941     
Title: Re:MIDIファイルを開いて。    
>すみません、DLLの置き場所はわかったのですが、そもそもDLLってなんなのかよくわかってない状態です。
>理解能力が低いのでしょうかorz
>何度か読み直したりDLLで調べたりしたんですけど。。。

DLLはダイナミック・リンク・ライブラリと言って実行時にリンクされます。
なので、exeファイルと同じ場所に置く必要があります。
※ 他の方法もありますが、今回はexeと一緒に置くのがベストだと思います。あちら方はsystem32を推薦しているみたいですが。
リンク時に指定するMIDIData.libはガワだけで実体ではありません。

その前にもしかしてライブラリってのが分からないんでしょうか?

>卒研なので提出まで90日もありませんし、評価版でも、実行ファイル作ってしまえばいいかなーと思っていたのですが・・・もしかして、実行ファイルも90日たったら使えなくなってしまうんですか!? 

動きますよ。
VisualStuidoは使えなくなりますけど。


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

Name: すのう  ..ぴよぴよ(804ポイント)   Date: 2010/01/24(日) 12:25   No:46950     
Title: Re:MIDIファイルを開いて。    
> DLLはダイナミック・リンク・ライブラリと言って実行時にリンクされます。
> なので、exeファイルと同じ場所に置く必要があります。
> ※ 他の方法もありますが、今回はexeと一緒に置くのがベストだと思います。あちら方はsystem32を推薦しているみたいですが。
> リンク時に指定するMIDIData.libはガワだけで実体ではありません。

ありがとうございます、色々なとこで調べたりもしてDLLについては(多分)理解しました!

> その前にもしかしてライブラリってのが分からないんでしょうか?

わかってるつもりなのですが・・・^^;
ですが、DLLに関しても理解したはずなのにやっぱりプログラムが動きません。
関数の使い方が悪いのかなぁと思うのですが、具体例があるとありがたいので、申し訳ないのですが、MIDIData.libをDXライブラリを使ったWindowsアプリのコードの例を示して何か示していただけないでしょうか・・・?
ファイル開いて閉じるだけとかでもいいんで、お願いします><
本当は自力でやるべき部分なんでしょうけど、卒論提出まで実は1週間きってまして・・・。
このままだと本当に卒業できなくなってしまうんです。
お力添えをおねがいしますっ。
 


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

Name: softya  ..ハッカー(103,055ポイント)   Date: 2010/01/24(日) 13:45   No:46958     
Title: Re:MIDIファイルを開いて。    
10分位で作ったプロジェクトなので適当ですが。

コード自体は、下記サイトの「使用例:4分音符の「ド」1音だけのMIDIデータを作成」です。
http://openmidiproject.sourceforge.jp/MIDIDataLibrary.html
DXライブラリのプロジェクトの構成は、
「DXライブラリプロジェクト生成ツール      Justy様」を利用しています。
http://dixq.net/sm/t1.html

どのような物を作られるか分かりませんが、あと一週間はムチャクチャ厳しいと思います。


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

Name: すのう  ..ぴよぴよ(914ポイント)   Date: 2010/01/24(日) 15:36   No:46969     
Title: Re:MIDIファイルを開いて。    
DLL使うことできました、本当にありがとうございます。

それで、まだ質問があるのですが・・・。
コンソール関数ベースだと
printf ("フォーマット = %d\n", MIDIData_GetFormat (pMIDIData));
となっているものを、DXライブラリではどう書けばいいのでしょうか?
DrawStringFormat(0,0,GetColor(255,255,255),"%d", MIDIData_GetFormat);
は違いますよね?


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

Name: softya  ..ハッカー(103,191ポイント)   Date: 2010/01/24(日) 15:46   No:46970     
Title: Re:MIDIファイルを開いて。    
>DrawStringFormat(0,0,GetColor(255,255,255),"%d", MIDIData_GetFormat); 
ただ文字で表示されるので良ければこれで問題ないと思いますが、すのうさんの求めているイメージが分からないので返答に困りますね。
とりあえずこのまま試して頂いて、実際やりたい事と違えば具体的にどうしたいのか書いていただけますか。


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

Name: すのう  ..かけだし(1,207ポイント)   Date: 2010/01/24(日) 15:57   No:46972     
Title: Re:MIDIファイルを開いて。    
あ、はい、ごめんなさい><
文字で表示してほしいのですが、これで実行すると、

 error C3861: 'DrawStringFormat': 識別子が見つかりませんでした

となってしまうのです。
・・・・と書こうと思ったのですが、今気付きました。
DrawFormatStringが正解ですね・・・。
ごめんなさい、単なるボケでしたorz


ですが、直して実行したところ、5641149、などと表示されました。
MIDIData_GetFormatはMIDIのフォーマットを取得しているので、0か1か2で表示されるものだとばかり思ってたのですが・・・。
これはどこか間違ってるのでしょうか?
専門外でしたらごめんなさい。


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

Name: softya  ..ハッカー(103,409ポイント)   Date: 2010/01/24(日) 16:10   No:46975     
Title: Re:MIDIファイルを開いて。    
その値は変ですね。
とりあえずサンプルのコンソールアプリで同じmidiデータを開いてちゃんと表示出来るか試してみて下さい。
結果が違えば、なにか使い方が間違っています。

そういえば、
>DrawStringFormat(0,0,GetColor(255,255,255),"%d", MIDIData_GetFormat); 
の部分ですが、
MIDIData_GetFormat(pMIDIData)
って書かずに
MIDIData_GetFormat
と書いていますが大丈夫ですか?

>専門外でしたらごめんなさい。 
確かにmidiは未経験ですが、色んなライブラリを使ったことがあるので少しはお役に立てるでしょう。


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

Name: すのう  ..かけだし(1,281ポイント)   Date: 2010/01/24(日) 16:23   No:46976 解決!     
Title: Re:MIDIファイルを開いて。    
> その値は変ですね。
> とりあえずサンプルのコンソールアプリで同じmidiデータを開いてちゃんと表示出来るか試してみて下さい。
> 結果が違えば、なにか使い方が間違っています。

> そういえば、
> >DrawStringFormat(0,0,GetColor(255,255,255),"%d", MIDIData_GetFormat); 
> の部分ですが、
> MIDIData_GetFormat(pMIDIData)
> って書かずに
> MIDIData_GetFormat
> と書いていますが大丈夫ですか?

MIDIData_GetFormat(pMIDIData)になおしたらちゃんと1と表示されました!!!
いつの間にか消しちゃってたんですね^^;

 
> 確かにmidiは未経験ですが、色んなライブラリを使ったことがあるので少しはお役に立てるでしょう。

生意気な言い方してすみませんでした><
本当に助かってます^^

なんとかやりたいことができそうな気がしますっ。
また質問あったら聞くと思いますが・・・お願いしますm__m


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



Name: まなお  ..ぴよぴよ(17ポイント)   Date: 2010/01/24(日) 13:11   No:46955       
Title: execve関数の引数について    
execve関数の引数について不明な点があるので投稿します。
環境はLinuxです。

execve関数のプロトタイプ宣言は以下のようになっています。
int execve(const char *filename, char *const argv[], char *const envp[]);

そこで質問なのですが、argvやenvpに指定する文字列はexecve関数の中で変更される可能性が
あるということなのでしょうか?

もし変更される可能性がないのならば
int execve(const char *filename, const char *const argv[], const char *const envp[]);
というようにcharの前にconstがあるべきだと思います。
何か理由があるのでしょうか?


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


Name: hoge  ..入門者(3,734ポイント)   Date: 2010/01/24(日) 14:53   No:46964     
Title: Re:execve関数の引数について    
> もし変更される可能性がないのならば
> int execve(const char *filename, const char *const argv[], const char *const envp[]);
> というようにcharの前にconstがあるべきだと思います。
> 何か理由があるのでしょうか?

constつきだと、キャストする必要があり、面倒くさいからではないでしょうか。
http://www.kouno.jp/home/c_faq/c11.html#10

 編集済み


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



Name: とく  ..かけだし(1,313ポイント)   Date: 2010/01/21(木) 01:25   No:46764       
Title: PSPに移植した際に画像が出ません    
コンパイルしてうまくいったのでキャラクターの画像を表示させようとしたのですが、表示されません。
教えてください。

main.cpp


include <GV.h>
#include <pspkernel.h>
#include <psppower.h>
#include <pspdebug.h>
#define GLOBAL_INSTANCE

PSP_MODULE_INFO("TEST", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);

//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);

//データのロード
extern void load();

//描画メイン
extern void graph_main();

int img_ch[2][12];      //キャラクタ画像9枚分 X2(変身用)
ch_t ch;                        //キャラクタデータ宣言

//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    GetHitKeyStateAll_2();//現在のキー入力処理を行う
    return 0;
}

int main(void)
{
    if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK)!=0)
        return -1;//初期化と裏画面化

    load();//データロード

    while(ProcessLoop()==0){//メインループ

        graph_main();//描画メイン

        if(CheckStateKey(DXP_INPUT_START)==1)

            break;//SELECTが入力されたらブレイク
       
        ScreenFlip();//裏画面反映
    }

    DxLib_End();//DXライブラリ終了処理

    sceKernelExitGame();

    return 0;
}
load.cpp
include <GV.h>


extern int img_ch[2][12];

void load(){
        LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 41 , 41 , img_ch[0] ) ;
                                                 //PSP用に41ずつのサイズにしました。

}

key.cppとgraph.cppは龍神録のソースと同じものです。 PSPには、
EBOOT.PBP
dat
   img
      char
         0.png



という感じに入れています。
原因を終えてください。
お願いします。


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


Name: kazuoni [URL]  ..ハッカー(129,144ポイント)   Date: 2010/01/21(木) 03:15   No:46772     
Title: Re:PSPに移植した際に画像が出ません    
"../dat/img/char/0.png"→"dat/img/char/0.png"

でもだめですか?


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

Name: とく  ..かけだし(1,390ポイント)   Date: 2010/01/21(木) 17:32   No:46814     
Title: Re:PSPに移植した際に画像が出ません    
上のように直しましたが、逆にフリーズして電源が切れてしまいます。
これは、画像を読みに行ったけど失敗したということでしょうか?

たびたびすいません。


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

Name: kazuoni [URL]  ..ハッカー(129,310ポイント)   Date: 2010/01/22(金) 06:09   No:46834     
Title: Re:PSPに移植した際に画像が出ません    
たぶん読み込めなかった場合の処理はDXPで処理してくれているとおもので、
ファイルパスは通ったように思います。

その他でまずい事をしているかもしれないので、
メインループで、まず初期化関数Loadだけで実行したらエラーが起きない

graph_main復帰

graph_mainの中の関数〜復帰

・・・

の様に順番に見ていってください。


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

Name: yu  ..熟練のプログラマー(41,974ポイント)   Date: 2010/01/22(金) 10:25   No:46841     
Title: Re:PSPに移植した際に画像が出ません    
直るかどうか分かりませんが
DXP の最新バージョンは VFPU を使っていたはずなので

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);



PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

に直してみてください


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

Name: とく  ..かけだし(1,516ポイント)   Date: 2010/01/22(金) 22:44   No:46864     
Title: Re:PSPに移植した際に画像が出ません    
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); 


上のように直したら、画像が出ました。


が、終了のSERECTボタンを押しても終了しません。(いまは、SERECTにしています。)
なので、HOMEボタンから戻ろうとしたら、

ブチンッ

という、なんとも恐ろしい音を立てて切れてしまいました。
すいませんが、何とかなりませんかね。
たびたびすいません。


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

Name: kazuoni [URL]  ..ハッカー(129,846ポイント)   Date: 2010/01/23(土) 02:51   No:46884     
Title: Re:PSPに移植した際に画像が出ません    
うーん。ソースコードパッと見大丈夫の様に思いますが。
強いてあげるなら画像の解放とか・・・。

他のキーを終了に割り当てると正常に終了しますか?


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

Name: とく  ..かけだし(1,738ポイント)   Date: 2010/01/23(土) 10:36   No:46889     
Title: Re:PSPに移植した際に画像が出ません    
他のボタンに変えましたが、結果は同じでした。

原因がどこなのか探るために、printf(sceDebugScreenPrintf)で、デバッグを行ってたのですが、
なぜか、if文に

        if(CheckStateKey(DXP_INPUT_SELECT)==1){
            sceDebugScreenPrintf("test 1:");
            break;//SELECTが入力されたらブレイク


のように入れたら、なぜかうまく動きました。
他のところはいじっていません。
どういうことでしょうかね・・・。


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

Name: kazuoni [URL]  ..ハッカー(130,328ポイント)   Date: 2010/01/24(日) 14:09   No:46960     
Title: Re:PSPに移植した際に画像が出ません    
自分はDXPをほとんど触った事がなので、適切な回答ができません。。
すみません。

本家で質問するのが一番良い気がしますが、
たしか制作者様は現在大学入試真っ最中だった気がするので、
気長に待つことが前提ですが。


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



Name:  ..ぴよぴよ(413ポイント)   Date: 2010/01/23(土) 22:26   No:46932       
Title: 画像が表示されません    
はじめまして
DXライブラリの設定を終え、入門編で画像表示をやっているのですが表示されません。
実行用のプログラムをコピーして試してみましたが黒い画面のままです。
図形や線は表示されましたが原因は何でしょうか

DxLib_VCフォルダはディスクトップに保存し、char画像も手順通り保存しました。


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


Name: SooA [URL]  ..プログラマー(27,186ポイント)   Date: 2010/01/24(日) 11:23   No:46947     
Title: Re:画像が表示されません    
画像ファイルの保存位置が正しくないと思われます。
ご使用の環境にあわせて保存位置を変更しましょう。

■VC5.0、VC6.0、BCC
コンパイルを行うとプロジェクトファイルを作成したフォルダ内に
デバッグコンパイルなら Debug
リリースコンパイルなら Release フォルダが作成され
実行時はそれぞれがカレントフォルダとなる。

■VC2005、2008
プロジェクトファイルを作成したフォルダがカレントフォルダとなる。


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

Name:  ..ぴよぴよ(442ポイント)   Date: 2010/01/24(日) 12:27   No:46951 解決!     
Title: Re:画像が表示されません    
画像を入れる場所が間違っていました
ありがとうございました


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



Name: cyc  ..ぴよぴよ(8ポイント)   Date: 2010/01/23(土) 21:46   No:46926       
Title: ちゃんと動点を中心とする円運動アルゴリズム    
 C言語を学習し始めて、まだ1年も経ってないぐらいの初心者なんですが、
円の動きについて困っています。
三角関数を使ってただ単に円の動きをさせることはできたんですが、
動転座標(ox,oy)を中心に半径rで円の動きをさせるやりかたが全然わかりません。
 webで調べても物理っぽい計算式での説明しかなかったので、投稿しました。
アルゴリズムかプログラムを教えてください。
(イメージとしては、四聖Plusのカラミティウィンドミルや混沌たる夢世界みたいな円の動き


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


Name: softya  ..ハッカー(102,945ポイント)   Date: 2010/01/23(土) 22:22   No:46931     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
動転座標って動点座標?
で、三角関数で原点(0,0)で円の動きが出きたなら、その座標にrを乗算すれば半径rの円になります。
さらにその座標にox,oyを足せば、ox,oyを中心とする半径rの円運動が実現出来ますよ。


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

Name: cyc  ..ぴよぴよ(0ポイント)   Date: 2010/01/23(土) 23:38   No:46938     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
 すみません動転じゃなくて動点です;
...自分がド低能なのか全然出来ません。
 bossのassistというものが、自分の周りを回りながら自機狙いのショットを撃つBOSS_SHOT_PATTERN05という関数の一部なんですが
アシストの移動成分を与えてやる箇所の、
boss.assist[i].ax=cos(boss.assist[i].angle);
boss.assist[i].ay=sin(boss.assist[i].angle);
boss.assist[i].angle+=radian(3);//角度から弧度へ変換する関数
の部分を
boss.assist[i].ax=cos(PI*boss.assist[i].cnt/70)*1.2+player.x;
boss.assist[i].ay=sin(PI*boss.assist[i].cnt/70)*1.2+player.y;

boss.assist[i].ax=cos(boss.assist[i].angle)*1.2+player.x;
boss.assist[i].ay=sin(boss.assist[i].angle)*1.2+player.y;
boss.assist[i].angle+=radian(3);
に変更したんですが、瞬間的にまっすぐ右下(上下逆のままだから)に行って、そのまま回ったりは一切しませんでした。この関数を抜けてからBOSS_ASSIST_MOVEという関数に入って
if(boss.assist[n].stop==0){//ストップフラグ
  if(boss.assist[n].nangle==0){//向くだけで成分移動したい時は角度無視フラグに1を
    boss.assist[n].x+=cos(boss.assist[n].angle)*boss.assist[n].speed;
    boss.assist[n].y+=sin(boss.assist[n].angle)*boss.assist[n].speed;
  }
  boss.assist[n].x+=boss.assist[n].ax*boss.assist[n].speed;
  boss.assist[n].y+=boss.assist[n].ay*boss.assist[n].speed;
}
を行うようにしているんですが、別々に分けると出来なくなるもんなんでしょうか...?


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

Name: たいちう  ..熟練のプログラマー(51,588ポイント)   Date: 2010/01/24(日) 09:18   No:46944     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
> を行うようにしているんですが、別々に分けると出来なくなるもんなんでしょうか...?

出来ないわけがありません。
理解していないから正しく分けることが出来ないのでしょう。


回転運動について、考え方が二通りあると思います。
直接計算する方法と差分を積み重ねて計算する方法です。

直接計算する方法は簡単ですが、運動の種類が変わるときには、
連続性を保つための計算が必要になります。
直線運動から回転運動に移る場合など。

差分で計算する場合は、運動がどのように変わろうと、
連続性は保証されますが、誤差が蓄積してしまい、
長時間回転していると、中心や半径が意図したものとは
違ってくる場合があります。
誤差の蓄積を避ける方法も当然ありますけど。

私の好みだとおそらく直接計算を選択しますが、
差分で計算している直線運動との共通点を多くするために、
差分を選択する場合もあるでしょう。
連続性の保証も誤差蓄積の排除も、基本的な原理を知らないと
自分ではできないでしょう。
逆にいえば、基本的な原理さえ押さえれば、自由自在です。
プログラムを作る前に、紙に図や式を書いて理解しましょう。


まずは画面中央を回転させることはできますか?
ボスは無視して良いですし、アシストは一機だけで結構です。
プログラム(ともし可能ならば計算過程の図)を載せて下さい。


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

Name: softya  ..ハッカー(102,939ポイント)   Date: 2010/01/24(日) 10:59   No:46946     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
ボスのアシストがプレイヤー中心で回るのかな?って疑問はあるんですがとりあえず振動ぐらいするはずですけどね。
x += ax;
この↑累積しているが問題ですね。
差分で移動しているのは何か意味があるんでしょうか?
たいちうさんも書いていますが、机上で計算してシミュレートしてみましたか?
なんとなく動くかなってのじゃだめですよ。

>(イメージとしては、四聖Plusのカラミティウィンドミルや混沌たる夢世界みたいな円の動き
どの弾の動きか分からないので、ごめなさい。
プレーヤー中心の動きなんでしょうか?


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

Name: cyc  ..ぴよぴよ(218ポイント)   Date: 2010/01/24(日) 11:31   No:46948     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
 差分移動させないフラグを立てて、直接
boss.assist[0].x=player.x+(cos(boss.assist[0].angle)*HANKEI)*boss.assist[0].speed;
boss.assist[0].y=player.y+((sin(boss.assist[0].angle)/2)*HANKEI)*boss.assist[0].speed;
boss.assist[0].angle+=radian(3);
座標に代入してやるとすんなりプレイヤーの回りを周ってくれました。
 差分にした理由は、
このボスのアシストというものは全部で50個用意してあって、
ボスアシストのメイン関数で50個分制御するんですが、それぞれの全く別の動きをさせる時に、
それぞれ成分に移動する値を入れてやって、その後一括に実際に移動させる ってな方法をとっていたんですが、
関数を分け隔てる必要性は無かったんですね。
すみません稚拙でした。


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

Name: cyc  ..ぴよぴよ(224ポイント)   Date: 2010/01/24(日) 11:33   No:46949 解決!     
Title: Re:ちゃんと動点を中心とする円運動アルゴリズム    
解決

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



Name: akio  ..ぴよぴよ(524ポイント)   Date: 2010/01/22(金) 14:01   No:46844       
Title: Windows Media Playerの視覚エフェクトを再現    
ここで聞いてよいのか分かりませんが
DXライブラリでWindows Media Playerの
視覚エフェクトのバッテリの「流星雨」を再現したいのですが、
全く出来ません。これ、どうやってるのでしょうか?


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


Name: Justy  ..伝説なるハッカー(495,087ポイント)   Date: 2010/01/23(土) 23:06   No:46936     
Title: Re:Windows Media Playerの視覚エフェクトを再現    
 ぱっと身、あれは

・ 音の解析をしている
・ 前のフレームの表示を拡大して重ね合わせて画面外に絵が流れるようにしている
・ 内部解像度を固定で上半分と下半分がちょうど反転した絵になっている。
・ +状のエフェクトを音に合わせて円上に配置、音量が小さいほど円が大きくなる

といった感じでしょうか。

 エフェクトの再現には音の解析が必要になるわけですが、絵的な再現だけれあれば
「前のフレームの表示を拡大して重ね合わせ」がうまくできればそれっぽい再現ができるかと思います。


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



Name: モス  ..ぴよぴよ(564ポイント)   Date: 2010/01/23(土) 22:59   No:46934       
Title: Dxライブラリを使って    
http://dixq.net/rakisuta.html
↑この記事について質問です。

一つ目のは成功しているようなのですが、二つ目を添付ファイルのようにコードを書き
デバッグ開始すると下のエラーメッセージがでます。
どのようにすれば、成功するのでしょうか?


------ ビルド開始: プロジェクト: dispAA, 構成: Debug Win32 ------
リンクしています...
dispAA.obj : error LNK2019: 未解決の外部シンボル "void __cdecl draw_setumei(int,int,int,int)" (?draw_setumei@@YAXHHHH@Z) が関数 _WinMain@16 で参照されました。
dispAA.obj : error LNK2019: 未解決の外部シンボル "void __cdecl draw_fps(int,int,int,int)" (?draw_fps@@YAXHHHH@Z) が関数 _WinMain@16 で参照されました。
dispAA.obj : error LNK2019: 未解決の外部シンボル "void __cdecl fps_wait(void)" (?fps_wait@@YAXXZ) が関数 _WinMain@16 で参照されました。
dispAA.obj : error LNK2019: 未解決の外部シンボル "void __cdecl check_key(char * const)" (?check_key@@YAXQAD@Z) が関数 _WinMain@16 で参照されました。
C:\AA\dispAA\Debug\dispAA.exe : fatal error LNK1120: 外部参照 4 が未解決です。
ビルドログは "file://c:\AA\dispAA\Debug\BuildLog.htm" に保存されました。
dispAA - エラー 5、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

よろしくお願いします。


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




Name: MK-22  ..ぴよぴよ(70ポイント)   Date: 2010/01/23(土) 21:50   No:46928       
Title: vc2008の表示について    
はじめまして。
初心者でこれからもお世話になるかと思います。
今、プログラミングの館の入門編をやっているのですが
いつもだとプロジェクトを作成すると画面右のプロパティ?に「ソースファイル」などがあり、そこに新規ファイルを作成するはずなんですが新しくプロジェクトを作ると見たことのないシートがありました(画像参照)。
元に戻すにはどうしたらよいのでしょうか?


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


Name: MK-22  ..ぴよぴよ(92ポイント)   Date: 2010/01/23(土) 21:57   No:46929 解決!     
Title: Re:vc2008の表示について    
すみません
自己解決できいました


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



Name: kai  ..中級者(13,150ポイント)   Date: 2010/01/23(土) 19:32   No:46919       
Title: cshotについて    
龍神録のcshot.cppについて分からない点があったので教えてください。
一部、丸ごとコピーします。
    if(ch.power>=100){
        for(int i=0;i<(ch.power<300?2:4);i++){
            if((k=search_cshot())!=-1){
                cshot[k].flag=1;
                cshot[k].cnt=0;
                cshot[k].angle=option0ang[i];
                cshot[k].spd=8;
                cshot[k].x=option_bb[i%2].x;
                cshot[k].y=option_bb[i%2].y;
                cshot[k].power=10-7*(i/2);        //マイナスにならないよう注意(50)
                cshot[k].knd=1;
                cshot[k].img=img_cshot[1];        //画像番号代入(49)
            }
        }
    }
この部分についてお聞きしたいのですが、
まず、
cshot[k].x=option_bb[i%2].x;
cshot[k].y=option_bb[i%2].y;
の「%2」とは、何のために%2を書いているのでしょうか?

もう一つ、
cshot[k].power=10-7*(i/2);        //マイナスにならないよう注意
の部分ですが、「マイナスにならないよう注意」と書いてあるにも関わらず、
ch.powerが300以上のときに、マイナスになると思うのですが、
10-7*(4/2)=-4
これは仕様なのでしょうか?
誰か、解説出来る方がいましたら、よろしくお願いします。


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


Name: ひよこ  ..比類無きプログラマー(78,396ポイント)   Date: 2010/01/23(土) 20:22   No:46920     
Title: Re:cshotについて    
(ch.power<300?2:4);でch.powerが300以上だと4を指しますが、
for文なので、iは3になります。
i%2は0,1を表します。GV.hにoption_bb[2];//オプション発射元ボンボン(49)と宣言されています。
cshot[k].power=10-7*(i/2);        //マイナスにならないよう注意 
はマイナスになりません。powerはint型で、おそらくint型の整数は計算途中でも小数点以下を切り捨てているからだと思います。
10-7*(3/2)=10-7*1.5=-0.5 ではなく、
10-7*(3/2)=10-7*1=3だと思います。


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

Name: softya  ..ハッカー(102,923ポイント)   Date: 2010/01/23(土) 20:26   No:46921     
Title: Re:cshotについて    
>の「%2」とは、何のために%2を書いているのでしょうか? 
交互に左右のボンボンから発射するためです。
%2は2で割った余りを求める演算です。

>ch.powerが300以上のときに、マイナスになると思うのですが、 
for(int i=0;i<(ch.power<300?2:4);i++){ 
の事ですか?
ch.powerが300以上の時は、
for(int i=0;i<(ch.power<4);i++){ 
となりますのでiは3を超えません。
なので、
0-7*(4/2)=-4 
はありえません。


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

Name: box  ..ハッカー(150,405ポイント)   Date: 2010/01/23(土) 20:28   No:46923     
Title: Re:cshotについて    
> cshot[k].x=option_bb[i%2].x;
> cshot[k].y=option_bb[i%2].y;
> の「%2」とは、何のために%2を書いているのでしょうか?

option_bb[0] か option_bb[1] のいずれかにアクセスするためでしょう。

> cshot[k].power=10-7*(i/2);        //マイナスにならないよう注意
> の部分ですが、「マイナスにならないよう注意」と書いてあるにも関わらず、
> ch.powerが300以上のときに、マイナスになると思うのですが、

>         for(int i=0;i<(ch.power<300?2:4);i++){

このとき、i のループは 0〜3 の間を回ります。
i が 4 になることはありません。したがって、

> 10-7*(4/2)=-4

こういう計算はしません。


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

Name: kai  ..中級者(13,272ポイント)   Date: 2010/01/23(土) 21:33   No:46924 解決!     
Title: Re:cshotについて    
>ひよこさん、softyaさん、boxさん
なるほど。
非常に分かりやすい解説のおかげで理解できました。
ありがとうございます!助かりました。


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



Name: クルトン  ..ぴよぴよ(77ポイント)   Date: 2010/01/23(土) 13:30   No:46904       
Title: DXライブラリでゲームの自キャラをマウス操作    
こんにちは。
現在、私はDXライブラリを使って、ゲームを作成しています。
そこで、自キャラをマウスで動かせるように設定したいのですが、
(マウスのカーソル部分が自キャラという状態)
どのようにしたらいいのか全くわかりません。

GetMousePointでマウスカーソルの位置を取得したりしてみましたが、
マウスでの操作はできませんでした。
GetMouseInputを使えばいいのでしょうか。

もしよろしかったら、細かく教えていただけると助かります。

とりあえず、自キャラがマウスで画面上を上下左右、
好きな場所へ移動できるようになればいいと思っています。

ご回答よろしくお願いします。


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


Name: softya  ..ハッカー(101,347ポイント)   Date: 2010/01/23(土) 13:45   No:46905     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
>GetMousePointでマウスカーソルの位置を取得したりしてみましたが、
>マウスでの操作はできませんでした。
>GetMouseInputを使えばいいのでしょうか。 

いまいち何が問題なのか分かりません。
>マウスでの操作はできませんでした。
とは何をしたかったのでしょうか?どの様な操作をしたいのか具体的に書いて下さい。

>とりあえず、自キャラがマウスで画面上を上下左右、
>好きな場所へ移動できるようになればいいと思っています。

この説明は、全然具体的ではありませんよ。
マウスをどういう操作したとき、自キャラが移動出来るのか書かれていません。
そのまま理解するとマウス座標の処に自キャラが表示できれば良いとしか思えませんので、GetMousePointで座標は得ているなら、それで表示できるはずです。
GetMouseInputで得られるのは、マウスのボタンの状態ですので不要だと思いますが。 編集済み


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

Name: クルトン  ..ぴよぴよ(321ポイント)   Date: 2010/01/23(土) 14:13   No:46906     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
説明がうまくできなくてすみません^^;。

自キャラをキーボード(方向キー)ではなく、マウスで操作できるようにしたいんです。


GetMousePointで座標は得ています。

私は、マウスのカーソル部分に自キャラを読み込めていません。
ゲームメインの部分にLoadGraphなどを入れてみましたが、できませんでした。

操作は、画面上でマウスを動かすと、自キャラがそのマウスが動いた通りに動くという状態にしたいです。
なので、最初にマウスの座標を読みとって、
もし、マウスの座標が変わったら、新しい座標を読み取り、その新しい座標に自キャラを表示させ、
前の座標に表示されていた自キャラは削除する。
これを繰り返すというものにしたいのです。

なんとなく、わかっていただけたでしょうか?

でも、その前に、マウスのカーソルを自キャラの画像にしなければなりませんでした。。


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

Name: softya  ..ハッカー(101,994ポイント)   Date: 2010/01/23(土) 14:43   No:46908     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
うーん。
DXライブラリの関数の役割がまだ理解出来ていない状態と言うことでしょうか?
LoadGraph()はグラフィックをロードする関数で、メインループに入れる事自体基本的に間違っています。
DrawGraph()が表示する関数で、この座標をマウスの座標にすればその位置に表示されます。

>もし、マウスの座標が変わったら、新しい座標を読み取り、その新しい座標に自キャラを表示させ、
>前の座標に表示されていた自キャラは削除する。
>これを繰り返すというものにしたいのです。 

ゲームとかちょっと複雑なDXライブラリの基本的な使い方は毎フレーム画面をクリアしてますので画像を削除する必要はありません。ただ表示するだけで良いです。

ゲームプログラミングの館の13c章。
http://dixq.net/g/15.html

>でも、その前に、マウスのカーソルを自キャラの画像にしなければなりませんでした。。
マウスカーソル自体を自キャラにするのは初心者には難しいのでやめた方が良いでしょう。
DXライブラリに関数もありませんので、Win32APIを使う必要があります。

13c章をベースにGetMousePoint()を処理するとこうなります。

#include "DxLib.h"
 
char Key[256];
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
 
        int image = LoadGraph("char.png");
        
        SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定
 
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理         ↑画面をクリア           ↑キーボード入力状態取得      ↑ESCが押されていない
 
                 int x,y;
                GetMousePoint( &x, &y );
                DrawGraph(x,y,image,TRUE);
 
                ScreenFlip();//裏画面を表画面に反映
        }
 
        DxLib_End();
        return 0;
}



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

Name: クルトン  ..ぴよぴよ(213ポイント)   Date: 2010/01/23(土) 15:23   No:46910     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
まだ理解できてない部分の方が大半です。
どういう関数が存在するのかもわかっていないです。
勉強不足ですみません。

>ゲームとかちょっと複雑なDXライブラリの基本的な使い方は毎フレーム画面をクリアしてますので画像を削除する必要はありません。ただ表示するだけで良いです。 

知りませんでした。ありがとうございます。


>マウスカーソル自体を自キャラにするのは初心者には難しいのでやめた方が良いでしょう。 

では、クリックしたところに自キャラが動くというプログラムも難しいですか?
例)アメーバピグのような動き。

この入力していただいたプログラムだと、どんな動作になるのですか?
マウスカーソル自体を自キャラにできるのですか?


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

Name: ムンバ  ..プログラマー(27,232ポイント)   Date: 2010/01/23(土) 16:24   No:46912     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
こんにちは。
横スレ、すみません。(謝

今、ちょうどゲームプログラミングの館で
DXライブラリの復習をしていた所なのですが
クルトンさんの質問に興味を持ちまして
No:46908のsoftyaさんのソースを実行してみた所
何も表示されないのですが、これでいいのでしょうか?
(変な意味は、ございませんので。^^)
 
WinXP、Microsoft Visual C++ 2008 Express Edition SP1
を使ってます。

↓編集部位
softyaさん、すみません。
マウスポインタを表示させるだけのソースだったのですね?^^;
表示できました。
おっちょこちょいで。<_ _>
横レス、すみませんでした。(謝 編集済み


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

Name: softya  ..ハッカー(102,608ポイント)   Date: 2010/01/23(土) 16:26   No:46913     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
>では、クリックしたところに自キャラが動くというプログラムも難しいですか?
>例)アメーバピグのような動き。

ごめんなさいアメーバピグが分かりません。

>クリックしたところに自キャラが動く。
今までの話にそんな機能は書かれていませんでしたよ?
自分の実現したいことは、ちゃんとまとめて説明出来ないと他の人には伝わりません。
どうやって伝えるか、どうやって理路整然と書くかを考えてみてください。
それがプログラムの機能をまとめる自分のための訓練にもなります。

それでは、簡単な物から始めてみましょう。
マウス無しと考えて特定の座標に向かってキャラクタが動くプログラムを作れますか?
※ 特定の座標は固定値です。
それ以前に、特定の座標にキャラクタを表示できますか?
基本的な事が出来て、その上で応用的なことができますので一足飛びにすごいものは作れませんよ。

>この入力していただいたプログラムだと、どんな動作になるのですか?
>マウスカーソル自体を自キャラにできるのですか?

試してみれば分かります。
すぐ試せない理由があるのでしょうか?
それに単純なプログラムなので、ソースコードを見れば分かると思うのですが。

もし分からないならDXライブラリの理解が浅すぎますので、
「ゲームプログラミングの館」
http://dixq.net/g/
の最初から、一行一行の意味を理解できる様に勉強して下さい。
それが思うものを作れるようになる一番の早道です。


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

Name: クルトン  ..ぴよぴよ(429ポイント)   Date: 2010/01/23(土) 17:05   No:46915     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
>クリックしたところに自キャラが動く。 
今までの話にそんな機能は書かれていませんでしたよ?

>マウスカーソル自体を自キャラにするのは初心者には難しいのでやめた方が良いでしょう。
とsoftyaさんがおっしゃったので、別の方法はどうでしょうか?と聞いてみただけです。



>マウス無しと考えて特定の座標に向かってキャラクタが動くプログラムを作れますか?
勝手に動いていくものは作れません。しかし、キー操作のものなら作りました。

>それ以前に、特定の座標にキャラクタを表示できますか?
これはできます。

私もうまく表示されませんでした。
私のやり方がおかしいのかもしれません。

簡単な部分からやりなおしてきます。
ありがとうございました。


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

Name: softya  ..ハッカー(102,767ポイント)   Date: 2010/01/23(土) 17:52   No:46917     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
>>ムンバさんへ。
>マウスポインタを表示させるだけのソースだったのですね?^^; 

マウスカーソル自体は変更していませんので、クルトンさん御望みのものとは違うと思いますが。

>私もうまく表示されませんでした。
>私のやり方がおかしいのかもしれません。 

char.pngが必要です。
書き忘れましたね。申し訳ないです。

マウスカーソルを変更する方法は、こちらにサンプルが有ります。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_102.htm
ある程度Win32APIを理解出来ていないと難しい処理です。
それとサイズ、色数にかなり制限があります。
http://msdn.microsoft.com/ja-jp/library/cc411027.aspx
 編集済み


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

Name: ムンバ  ..プログラマー(27,287ポイント)   Date: 2010/01/23(土) 18:11   No:46918     
Title: Re:DXライブラリでゲームの自キャラをマウス操作    
>>softyaさん
 了解です。ご解説ありがとうございました。

>>クルトンさん
 お邪魔しました。がんばって下さいねっ!w


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



Name: てと  ..ぴよぴよ(464ポイント)   Date: 2010/01/20(水) 18:37   No:46728       
Title: C,C++で音声認識    
こんにちは。

現在、C,C++で音声認識を行っている者です。音声認識といっても、一から作るのではなく、Microsoft Speech SDK 5.1 を使ってそれをいじっていく感じです。

今、Microsoft Speech SDK 5.1 を用いて、プログラムで音声入力内容を復唱させるようにしたいと考えています。システムの流れとしては

1.音声入力
2.テキストファイルに出力
3.出力されたテキストファイルを音声読み上げソフトで読み上げさせる

のような全体像を考えています。

そこで質問です。
1.音声入力内容をテキストファイルに出力する方法

2.出力されたテキストファイルを自動で音声読み上げソフトに渡す方法
 音声読み上げソフト側でも何かしなければならないと思うのですが、現時点ではソフトの導入もしていないので何ともいえません。そこで、何か参考になりそうなURLを提示していただけたら幸いです。(googleで"音声読み上げ C言語”で検索してもヒントとなるようなサイトが見つからなかったため)


OS:Windows XP 
私自身、C言語の基本的なことは分かるのですが、C++でこのようなプログラムは初めてです。

分かりづらいかもしれませんが、回答よろしくお願いします。

念のため添付ファイルとして、Microsoft Speech SDK 5.1 のサンプルプログラムを添付いたしました。


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


Name: 御津凪 [URL]  ..ハッカー(138,251ポイント)   Date: 2010/01/20(水) 18:45   No:46729     
Title: Re:C,C++で音声認識    
コマンドライン引数の指定で読み上げられる soktalk が良いのではないでしょうか?

(1. については Microsoft Speech SDK を触ったことも無いので答えようがありませんので、他の方からの回答をお待ち下さい)


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

Name: てと  ..ぴよぴよ(617ポイント)   Date: 2010/01/20(水) 19:14   No:46733     
Title: Re:C,C++で音声認識    
回答ありがとうございます。Googleでsoktalkと検索しましたが、それらしきソフトはありませんでした。
もしかして、softalkのことでしょうか。

1についてですが、自分でも質問内容が複雑な気がしてきました。
サンプルプログラム内の音声認識を行って、文字列に変換したあたりをいじればなんとなくできそうな気はするのですが・・・。


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

Name: たいちう  ..熟練のプログラマー(50,409ポイント)   Date: 2010/01/20(水) 19:44   No:46734     
Title: Re:C,C++で音声認識    
ソースコードから想像すると、case SPEI_RECOGNITION: の辺りで認識させているようです。
dstrTextはW2Tでwchar_t*に変換しているのだと思いますので、
そこでテキストファイルに書き込んでみてはいかがでしょうか。


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

Name: 御津凪 [URL]  ..ハッカー(138,230ポイント)   Date: 2010/01/20(水) 20:16   No:46738     
Title: Re:C,C++で音声認識    
> もしかして、softalkのことでしょうか。

打ち間違いでした。すみません。
softalk で合ってます。


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

Name: てと  ..ぴよぴよ(713ポイント)   Date: 2010/01/21(木) 18:41   No:46815     
Title: Re:C,C++で音声認識    
たいちう様へ

分かりました。テキストファイルへの出力の方法ですが、

fout.open ("filename.txt", ios::out);
if (!fout)
return -1; // ファイルオープンエラーの時
fout.close();

このような文を組み込めばよろしいでしょうか。




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

Name: たいちう  ..熟練のプログラマー(50,586ポイント)   Date: 2010/01/21(木) 20:55   No:46816     
Title: Re:C,C++で音声認識    
何がわかったでしょうか?
私は憶測で言っているのですよ。
試行錯誤のヒントを書いたつもりです。

> fout.open ("filename.txt", ios::out);
> if (!fout)
> return -1; // ファイルオープンエラーの時
> fout.close();

> このような文を組み込めばよろしいでしょうか。

「このような」の範囲にもよります。
失礼ですが、"Hello, world!"と、テキストファイルに
出力するプログラムは書けますか?


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

Name: てと  ..ぴよぴよ(981ポイント)   Date: 2010/01/22(金) 18:31   No:46854     
Title: Re:C,C++で音声認識    
>何がわかったでしょうか? 

言葉が足りませんでした、申し訳ありません。
「分かりました、試してみます」という意味で「分かりました」と言いました。

>礼ですが、"Hello, world!"と、テキストファイルに
>出力するプログラムは書けますか?

あえてC++らしく書くなら下のようになると思います。
**************************
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world." << endl;
    
    return 0;
}
**************************

C言語と同じ方法で表示させるなら、下のようになると思います。

**************************
#include <stdio.h>

int main()
{
  printf("Hello World\n"); 
  return 0;
}

**************************


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

Name: softya  ..ハッカー(100,332ポイント)   Date: 2010/01/22(金) 18:38   No:46855     
Title: Re:C,C++で音声認識    
これらはコンソールに表示する方法で、テキストファイル出力じゃないですよ。
>cout << "Hello world." << endl; 
>printf("Hello World\n");

まず、基本的なプログミングの勉強をされた方が良いと思いますが。


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

Name: てと  ..かけだし(1,191ポイント)   Date: 2010/01/23(土) 17:29   No:46916 解決!     
Title: Re:C,C++で音声認識    
softya様
回答ありがとうございます。

>これらはコンソールに表示する方法で、テキストファイル出力じゃないですよ。 
 質問内容を勘違いしてコンソールに表示する方を書いてしまいました。

>まず、基本的なプログミングの勉強をされた方が良いと思いますが。
 そうしたいと思います。


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



Name: とく  ..かけだし(1,940ポイント)   Date: 2010/01/23(土) 16:47   No:46914       
Title: PSPのボタン入力がうまくできません。    
PSPのボタン入力がうまくいかず困っています。
DXLibPや、pspctrlの中を見てみたら、同じ内容だったので、DXLibPを使っています。

が、DXP_INPUT_CROSSなどを書いてみても、うまく認識してくれません。

しかし、なぜだか、DXP_INPUT_SERECTと書くと、STARTボタンが反応します。

原因が僕には、よくわかりません。
教えてください。


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




Name: はげ  ..ぴよぴよ(64ポイント)   Date: 2010/01/22(金) 23:10   No:46866       
Title: 超初級C言語    
int main(void)
{
    if(isdigit('11') == 1){
        printf("数字");
    }
    else{
        printf("数字ではない");
    }
        
    return 0;
}

int isdigit(char ch)
{
    if(ch >= '0' && ch <= '9'){
        return 1;
    }
    else{
        return 0;
    }
}


このプログラムでcharがintになってるのですがこのプログラムはおかしいでしょうか?
軽くテストしてみましたが求める結果にはなります。




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


Name: sizuma [URL]  ..プログラマー(30,742ポイント)   Date: 2010/01/22(金) 23:20   No:46868     
Title: Re:超初級C言語    
本当に求めたい結果になりますか?

ところで、どこでcharからintになってると思っているのでしょうか?


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

Name: DVDM [URL]  ..熟練のプログラマー(50,640ポイント)   Date: 2010/01/22(金) 23:26   No:46869     
Title: Re:超初級C言語    
>>はげさん
>軽くテストしてみましたが求める結果にはなります。
どのような結果を望んているかが解らないため、
求めている結果になったのなら合っているのではないでしょうか?

正直、求めている結果になっていない気がしますけども。


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

Name: はげ  ..ぴよぴよ(272ポイント)   Date: 2010/01/23(土) 00:09   No:46874     
Title: Re:超初級C言語    
拙い知識で申し訳ないのですが'11'の所でintからcharに(逆でした)切り詰められます。
定数値が切り捨てられましたと警告が2つでます。

ちょっと頭をひねってみたのですがcharは1バイトです。'1'や'2'などの場合警告は出ません。
おそらく型の理解ができていないのだと思いますが・・
'11'は1バイトではないのでint型になりこの関数を使うと切り詰められるという話でしょうか?

求めたい結果はisdigitと同じなので数字かどうかの判断です。この場合は11が数字かどうかとか
aaが数字かどうかとか1aが数字かどうかとかそんな感じです


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

Name: box  ..ハッカー(150,268ポイント)   Date: 2010/01/23(土) 00:11   No:46875     
Title: Re:超初級C言語    
数字かどうかを判断するのは1バイトずつにしてください。

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

Name: hello world  ..ぴよぴよ(79ポイント)   Date: 2010/01/23(土) 00:35   No:46877     
Title: Re:超初級C言語    
多文字リテラル('11')が int 型だからでしょう。
設定される値は処理系依存となります。


取り得る値をちゃんと理解しているならよいのですが、
文字リテラルは1文字づつのほうが無難だと思います。

文字列が使いたかったのかな?とも推測しますが・・・。


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

Name: sizuma [URL]  ..プログラマー(31,012ポイント)   Date: 2010/01/23(土) 00:47   No:46878     
Title: Re:超初級C言語    
>ちょっと頭をひねってみたのですがcharは1バイトです。'1'や'2'などの場合警告は出ません
''は文字を囲む時に使います。'11'は文字列なので
char []str = "11";
保持するならこうですね。

>得られる値は処理系依存
そうなんですか。'文字列'とするなんて発想はなかったので、知らなかったです。
処理系依存のプログラムは出来るだけ避けた方がいいと僕は思います。
僕の環境だと、こうなりますね。

#include<stdio.h>

int isdigit(char ch);

int main(void){
    int intval = '11';
    int intval2 = '1';
    printf("'a1' = 0x%x\n'1'  = 0x%x\n",intval,intval2);
    printf("(char)intval  = %c\n(char)intval2 = %c",intval,intval2);
    return 0;
}

>'11' = 0x3131
>'1'  = 0x31
>(char)intval  = 1
>(char)intval2 = 1


#mainのreturn忘れてたので編集--; 編集済み


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

Name: はげ  ..ぴよぴよ(402ポイント)   Date: 2010/01/23(土) 00:58   No:46879 解決!     
Title: Re:超初級C言語    
なんとなくわかりました。
1バイトずつならこの関数だけでいけます
1111とか111aとかを判断したいのなら
char str[100] = "55544";
int len = strlen(str);
for(int i=0; i < len; i++){
    if(isdigit(str[i]) ==0){
             printf("数字以外の文字がある");
              return 0;
    }
}
    
printf("数字");
    
        
return 0;



こんな感じにすれば大丈夫かな
ありがとうございました。 編集済み


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

Name: softya  ..ハッカー(100,985ポイント)   Date: 2010/01/23(土) 01:14   No:46881     
Title: Re:超初級C言語    
C言語の場合、文字リテラルはint型ですね。
sizumaさんも試しておられる通り、'11'とするとちゃんと2バイト分の文字データが入っています。
ただ、処理系依存ですがchar型が1バイトの場合は、int型から切り捨てられます。
今回の質問者さんの場合は、'11'という文字定数ですので2バイトになるのが代入前には分かっているわけで、これをコンパイラがチェックしてくれてエラーを出してくれています。1バイトの定数ならエラーになりません。

で、C言語で文字列の処理を作る場合は、4文字までしか格納出来ないint型を使うのは面倒なので普通文字列型配列を使います。

補足事項も含めてまとめると
・char型が1バイトなのは処理系依存。
・文字が1バイトかどうかも処理系依存。
・int型が4バイトかどうかも処理系依存。
・不定長の文字の並びは、文字列として扱うのが効率的。
・文字列は、char型の配列で終端が'\0'
・代入時に切り捨てられる恐れがある場合、コンパイラによっては警告が出る。


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

Name: たかぎ [URL]  ..ハッカー(155,817ポイント)   Date: 2010/01/23(土) 09:04   No:46886     
Title: Re:超初級C言語    
isdigitと同じ意味の関数を作るのであれば...
#include <assert.h>
#include <limits.h>
#include <stdio.h>

int isdigit(int c)
{
  assert(0 <= c && c <= UCHAR_MAX || c == EOF);
  if ('0' <= c && c <= '9' && c != EOF)
    return 1;
  return 0;
}

ということになります。
引数の型はcharではなくintなので注意してください。
http://www.kijineko.co.jp/tech/superstitions/parameter-of-isalpha-is-char.html

ちなみに...

> ・char型が1バイトなのは処理系依存。

charは常に1バイトです。

> ・文字が1バイトかどうかも処理系依存。 

多バイト文字やワイド文字を除けば、文字は1バイトです。


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

Name: hello world  ..ぴよぴよ(153ポイント)   Date: 2010/01/23(土) 10:43   No:46890     
Title: Re:超初級C言語    
をぉなるほど。内容が変わるもんんだと、
勘違いで覚えてました。
型の話ですよねぇw

softyaさん、たかぎさん。詳細なご説明まで
ありがとうございました


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

Name: sizuma [URL]  ..プログラマー(31,067ポイント)   Date: 2010/01/23(土) 11:09   No:46892     
Title: Re:超初級C言語    
>charは常に1バイトです。 
sizeof(char)が1なのが定義されてるだけだと思ってました。

ということは、char型が9ビットの環境では、1バイト自体が9ビットの環境ってことなんでしょうか?


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

Name: sizuma [URL]  ..プログラマー(31,217ポイント)   Date: 2010/01/23(土) 11:16   No:46893     
Title: Re:超初級C言語    
>ということは、char型が9ビットの環境では、1バイト自体が9ビットの環境ってことなんでしょうか?
きじねこ様で見てみたら、そういうことみたいですね。

勝手にリンクを貼らせていただきます。
http://www.kijineko.co.jp/tech/superstitions/1-byte-is-8-bits.html

違う環境を体験しないと、すぐ忘れそうです・・・


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

Name: box  ..ハッカー(150,350ポイント)   Date: 2010/01/23(土) 11:27   No:46894     
Title: Re:超初級C言語    
> >charは常に1バイトです。 
> sizeof(char)が1なのが定義されてるだけだと思ってました。

charが常に1バイトであることを知らなくて、
sizeof(char)が1であることを定義していることは知っている、
という状況が理解できません。


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

Name: たかぎ [URL]  ..ハッカー(155,767ポイント)   Date: 2010/01/23(土) 11:29   No:46895     
Title: Re:超初級C言語    
> ということは、char型が9ビットの環境では、1バイト自体が9ビットの環境ってことなんでしょうか?

そうです。
http://www.kijineko.co.jp/tech/superstitions/1-byte-is-8-bits.html

添付画像はJIS X3010:2003からの引用です。
sizeof演算子の結果がオペランドのバイト数であり、sizeof(char)が1ですので、charのサイズは必ず1バイトになります。


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

Name: たかぎ [URL]  ..ハッカー(155,976ポイント)   Date: 2010/01/23(土) 11:40   No:46896     
Title: Re:超初級C言語    
> 違う環境を体験しないと、すぐ忘れそうです・・・

移植性に関しては、規格上がどうであるかは調べればすぐに分かるのですが、現実的な落とし所をどうするかは難しいところです。
C/C++迷信集ではそこまで突っ込んでいませんので、その手の話題は出版物で扱えればと考えています。
# ウェブ上のコンテンツと棲み分けが必要ですので。

今回の件に関しては、charが16ビットや32ビットなどの処理系は実際に存在するので、規格上の話と割り切ることはできません。
Windows(というかIntel互換の環境)しか扱わないのであれば気にすることはありませんが、DSPなどを使い始めると、そういった状況に遭遇します。


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

Name: たいちう  ..熟練のプログラマー(51,302ポイント)   Date: 2010/01/23(土) 11:58   No:46897     
Title: Re:超初級C言語    
> charが常に1バイトであることを知らなくて、
> sizeof(char)が1であることを定義していることは知っている、
> という状況が理解できません。

32ビットのchar型に対してsizeof(char)が1を返すとき、
このchar型が1バイトだと考えるのには私にも抵抗があります。
幸か不幸か私は経験が無いですが。

「sizeofはサイズを返すはずだよな、でも、
この1を1バイトと考えても良いのかな?」

という状況ではないでしょうか。


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

Name: sizuma [URL]  ..プログラマー(31,818ポイント)   Date: 2010/01/23(土) 12:16   No:46898     
Title: Re:超初級C言語    
>Windows(というかIntel互換の環境)しか扱わないのであれば気にすることはありませんが、DSPなどを使い始めると、そういった状況に遭遇します。 
携帯電話のソフトウェア開発をしてる会社を受ける予定もあるし、組込みの仕事だといろいろな環境があると思うので、処理系依存な言語使用はなるべく注意しておきたいと思ってます。

>Jis
規格はやっぱり読み難いです。
sizeof演算子を評価するのは可変長配列をオペランドにしたときだけなんですね。それ以外は評価しないということはマクロで整数に置き換えるのとほぼ同じということでしょうか。
プリプロセスみたいにコンパイル前に置き換わることはないと思うんですけど・・・・



>boxさん
>charが常に1バイトであることを知らなくて、
>sizeof(char)が1であることを定義していることは知っている、
>という状況が理解できません。
確かに全バイトのビットが変わらないとポインタ演算なんてごっちゃごちゃになりますね。
実はsizeof演算子を使ったことがない、って理由もあります。
charが8ビットより大きい環境だと、charだけが8ビットよりおおきいのかな?と思ってました。

例えばこんなイメージです
sizeof(char) = 9bit(1バイトより大きいけど、sizeofでは1が絶対返される)
sizeof(char[2])=18bit(2)
sizeof(int) = 32bit(4)
sizeof(int [2])=64bit(8)
たいちうさんの言ってるようなこと、といいたいですけど、ただchar型について勘違いしてたみたいですね。

C言語っていろんな処理系を想定してて、その処理系の最適な1バイトのビット数が違ったりするから、最低限表現できる範囲だけを決めている、ということでしょうか。
Javaみたいにきちっと決めてあると覚えるのは楽なんですけどね。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(156,144ポイント)   Date: 2010/01/23(土) 12:23   No:46899     
Title: Re:超初級C言語    
> sizeof演算子を評価するのは可変長配列をオペランドにしたときだけなんですね。それ以外は評価しないということはマクロで整数に置き換えるのとほぼ同じということでしょうか。 

sizeofは常に評価されます。
そうではなく、sizeofのオペランドが評価されない場合があるのです。必要なのは型だけですからね。
可変長配列の場合は、評価しないと型がわからないので評価されます。

> プリプロセッサみたいにコンパイル前に置き換わることはないと思うんですけど・・・・ 

可変長配列以外の場合は整数定数式になりますので、コンパイル時に解決されます。


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

Name: sizuma [URL]  ..プログラマー(32,159ポイント)   Date: 2010/01/23(土) 12:34   No:46900     
Title: Re:超初級C言語    
>sizeofは常に評価されます。
>そうではなく、sizeofのオペランドが評価されない場合があるのです。必要なのは型だけですからね。
なるほど。つまり

sizeof(char);//sizeofを評価するわけで、オペランドとして与えられてるcharが評価されるわけではない

char buf[n];
sizeof(buf);//オペランドであるbufを評価しないと、配列のサイズが分からない

ということですよね。

>可変長配列以外の場合は整数定数式になりますので、コンパイル時に解決されます
なるほど、、、こういうのを確認するときに、はきだされるアセンブリコードを読めるといいんですけどね。
CASLならある程度読めるんですけど(笑




#僕が上の記事を編集したので、プリプロセス→プリプロセッサ、になってしまいました。
#後で読んで、なんか訂正したいな、と思うことがあるので・・・誤字も多いですし。
#訂正するなら、プレビューで確認してから投稿しないとダメですね。失礼しました。


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

Name: softya  ..ハッカー(101,251ポイント)   Date: 2010/01/23(土) 12:39   No:46901     
Title: Re:超初級C言語    
私も汎用機(富士通)からゲーム機、パソコン、一部のワンチップマイコンなどの開発経験してますが、1バイト=8ビットの環境以外を使ったことが無いですね。
なのでC言語の移植要件もINTEL系CPUを使ったWindowsとLinuxで動くこととか、PowerPCとINTELの両方で動くこととか程度の経験しかないです。


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

Name: たかぎ [URL]  ..ハッカー(156,334ポイント)   Date: 2010/01/23(土) 12:44   No:46902     
Title: Re:超初級C言語    
> なるほど、、、こういうのを確認するときに、はきだされるアセンブリコードを読めるといいんですけどね。 

それは間違いありません。
不幸なのは、IA32のアセンブリコードは非常に読みにくく、アセンブリ言語に不慣れな人は大抵挫折します。
最初は、H8とかMIPSとかV850とか、そのあたりから入った方が結局は近道です。
ARMやSHも最初は読みにくいので、避けた方がよいかもしれません。

今、↓の続編を考えています。いつになるか分かりませんが、参考になるようにしたいですね。
http://www.kijineko.co.jp/node/649


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

Name: たかぎ [URL]  ..ハッカー(156,652ポイント)   Date: 2010/01/23(土) 12:55   No:46903     
Title: Re:超初級C言語    
連続投稿が多くてすみません。

> CASLならある程度読めるんですけど(笑

CASL用のCコンパイラを作るとしたらどうします?
sizeof(char) = sizeof(short) = sizeof(long) = 1 かつ CHAR_BIT = 16 にするのが一番簡単で効率もよいですね。

これを強引に1バイト = 8ビットにしようとすると、charでメモリアクセスするには、1ワードを上位下位に分割しなければならなくなります。
結果的に、char*とvoid*はint*等より少なくとも1ビット多くの情報が必要になるため、sizeof(char*) = sizeof(void*) = 2 かつ sizeof(int*) = 1 になるのではないでしょうか?

私の場合は、TOPPERSプロジェクト(http://www.toppers.jp/)でいろいろな環境への移植を検討してきましたので、その中にはcharが16ビットのものも含まれています。
汎整数拡張されない処理系とか、constの有無でポインタサイズが変わる処理系とか、構造体のメンバの配置順が記述順にならない処理系とか、sizeof(float) = sizeof(double) = 4(32ビット)の処理系とか、long longが32ビットの処理系とか、いろいろな非標準処理系も検討してきたわけです。


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

Name: sizuma [URL]  ..プログラマー(32,387ポイント)   Date: 2010/01/23(土) 14:27   No:46907     
Title: Re:超初級C言語    
うむむ、、、
つまりその処理系がリアルタイム性(処理速度)が求められる場合は、1バイトを8ビットとしてコンパイルするとなんかいろいろ面倒ってことでしょうか。

sizeof(char)が1バイトを表すんで、CHAR_BIT=16とした場合に強引に1バイト=8ビットにしようとすることはないのでしょうけど
>sizeof(char*) = sizeof(void*) = 2 かつ sizeof(int*) = 1 
うわーごちゃごちゃしてわけがわからなくなってきた・・・
char*はなぜint*より1ビット多く必要なのでしょうか?
とりあえず、リンク先を読んで勉強してきます!


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

Name: たかぎ [URL]  ..ハッカー(156,887ポイント)   Date: 2010/01/23(土) 16:12   No:46911     
Title: Re:超初級C言語    
> つまりその処理系がリアルタイム性(処理速度)が求められる場合は、1バイトを8ビットとしてコンパイルするとなんかいろいろ面倒ってことでしょうか。 

リアルタイム性というのは、処理速度が速いかどうかではなく、処理にかかる時間が予想できるということです。
今回の件については、速度やサイズなどの効率を上げるには、CASL(というかCOMMET)のCコンパイラは1バイトが16ビットでなければなりません。

COMMETは、16ビットワードを単位としてアドレスが割り振られています。アドレスは16ビットです。
これを強引に1バイト=8ビットとして処理系を実装する場合...

データは16ビット単位でしか読み書き出きませんから、8ビットごとのアドレスを割り振るには、COMMETのアドレスにもう1ビット追加しなければなりません。
つまり、char*やvoid*は17ビットが必要になります。これに対して、shortやintなどは16ビットで済みます。

> sizeof(char*) = sizeof(void*) = 2 かつ sizeof(int*) = 1 になるのではないでしょうか? 

これは私にも混乱がありました。
1バイト=8ビットにしようというのですから、sizeof(char*) = sizeof(void*) = 4バイト = 32ビットであり、sizeof(short*) = sizeof(int*) = 2バイト = 16ビットですね。
char*を24ビット(うち7ビットが詰め物ビット)にすることもできますが、それでは非常に効率が悪くなります。


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



Name: rokoroko  ..ぴよぴよ(213ポイント)   Date: 2010/01/19(火) 21:04   No:46617       
Title: windows.hが開けないエラーについて    
いま、参考書を元にしたプログラムをビルドしてみたところ、windows.hがみつかりませんというエラーが発生しました。
PlatformSDKをインストールしたのですが、それでもダメでした。

パスを通していないとかそういう問題なのでしょうか?
一応、windows.hを検索したのですが、それでも見つかりませんでした。
なので、この考えがあってるならば、どこにあるのか教えていただけたら幸いです。

環境はwindowsvista VC++2008 です。


それと追加の質問で申し訳ないのですが、龍神録のプロジェクトを一括ダウンロードをしても、自分でプロジェクトを新しく作ってDirectXを使いたい場合DirectX SDKのインストールはしなくてはいけないのですよ。

質問が多くて申し訳ないのですが、どうぞ宜しくお願いします。


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


Name: KKXY  ..入門者(3,074ポイント)   Date: 2010/01/19(火) 21:58   No:46621     
Title: Re:windows.hが開けないエラーについて    
Visual C++をもう一回インストールすれば
解決すると思います。
自分は同じことがおきたとき、そうやって治しました。


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

Name: rokoroko  ..ぴよぴよ(242ポイント)   Date: 2010/01/23(土) 01:02   No:46880     
Title: Re:windows.hが開けないエラーについて    
再インストールしなおしてみましたが、だめでした……
設定とか、なにか他にもないでしょうか?


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

Name: MNS  ..プログラマー(29,979ポイント)   Date: 2010/01/23(土) 14:43   No:46909     
Title: Re:windows.hが開けないエラーについて    
http://mag.autumn.org/Content.modf?id=20081231142839
このサイトの方法ではどうでしょうか?


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



Name: 少年X  ..ぴよぴよ(483ポイント)   Date: 2010/01/22(金) 22:25   No:46863       
Title: extern宣言とMakefile    
ソースファイルが長くなってきたために、extern宣言を使って分割コンパイルをしようと考えました。今までは分割しないで書いてきたのですが、限界に達しました(汗) 試しに、短いプログラムでコンパイルしたのですが、エラーが出ます。誰か助言をお願いします。ちなみにDXPです。

main.cpp内
#include <pspkernel.h>
#include "dxlibp.h" 
#include "GV.h"
PSP_MODULE_INFO("DX LIB TEST", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

extern void graph_main();

void main(){
    DxLib_Init();
    SetDrawBlendMode(DX_BLENDMODE_ALPHA,255);
    SetGraphMode(480,272,16);
    while(ProcessMessage() != -1){
        ClearDrawScreen();
        graph_main();
        ScreenFlip();
        stage_count++;
    }
    DxLib_End();
}

GV.h内
//グローバル変数
int Key[12];//keyの設定
int stage_count;//カウンタ
int img_board[40];//ボード
int img_ch[12];//キャラクター

graph.h内
#include "dxlibp.h" 
#include "function.h"
void graph_main(){
//描写内容
}

function.h内
//グローバル変数
extern int Key[12];//keyの設定
extern int stage_count;//カウンタ
extern int img_board[40];//ボード
extern int img_ch[12];//キャラクター

Makefile内
TARGET = TestProject
OBJS = test.o
OBJS += graph.o

INCDIR = 
CFLAGS = -O3 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =

LIBS = 
LIBS = dxlibp.a -lpspaudiolib -lpspaudio -lpspmpeg -lpspaudiocodec -lpspgu -lpng -lz -lm -lpspvalloc -lpsppower -lpsprtc -lpspgum -lpspjpeg#DXライブラリPortable使用時に追加


EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Title

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

all:
    @rm -f *.o
    @rm -f *.elf
    @rm -f *.BAK
    @rm -f *.SFO

エラー内容
undefined reference to `graph_main'


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


Name: ぽこ  ..初心者(6,082ポイント)   Date: 2010/01/22(金) 22:47   No:46865     
Title: Re:extern宣言とMakefile    
extern宣言はヘッダファイル(*.h)に、定義はソースファイル(*.cpp)にしましょう。
具体的には、

GV.hに記述されているグローバル変数の定義をGV.cpp(新規ファイル)に移動。
function.hに記述されているグローバル変数のextern宣言をGV.hに移動。
graph.hに記述されている関数graph_main()の定義をgraph.cpp(新規ファイル)に移動。
main.cppに記述されているextern void graph_main();をgraph.hに移動。

1.*.cppファイルにはextern宣言をしないこと。
2.*.hファイルには変数の定義や関数の定義を行わないこと。

これを基本的に守りましょう。


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

Name: box  ..ハッカー(150,244ポイント)   Date: 2010/01/23(土) 00:01   No:46873     
Title: Re:extern宣言とMakefile    
>コンパイルしたのですが、エラーが出ます。

コンパイル時のエラーではないことは理解しているかな?
graph.hをどこでインクルードしているのかな? 編集済み


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

Name: 少年X  ..ぴよぴよ(566ポイント)   Date: 2010/01/23(土) 10:27   No:46888     
Title: Re:extern宣言とMakefile    
>graph.hをどこでインクルードしているのかな?
Makefileで記述しているつもりです。Makefileの最初の方で

Makefile内
TARGET = TestProject
OBJS = test.o
OBJS += graph.o

の部分で解決しているつもりです。


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

Name: box  ..ハッカー(150,284ポイント)   Date: 2010/01/23(土) 10:56   No:46891     
Title: Re:extern宣言とMakefile    
> >graph.hをどこでインクルードしているのかな?
> Makefileで記述しているつもりです。Makefileの最初の方で

それは、前回のmake時以降にgraph.cppに対して修正があったとき、
次回のmakeでgraph.cppを間違いなくコンパイルしてgraph.oを更新する、
ということでしょう?

ソースファイルの中に
#include "graph.h"
という記述がなくて「本当に」いいんですか?
 編集済み


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

Name: 少年X   Date: 2010/02/04(木) 15:40   No:468631265265608 解決!     
Title: Re:extern宣言とMakefile    
解決しました



Name: 電気屋  ..初心者(8,164ポイント)   Date: 2010/01/22(金) 15:12   No:46845       
Title: バグなのですが    
どうも電気です。
今回は、プログラム作り中のバグなのですがどうしても直りません。
手助けをの願いしたいのですが?


載せているプログラムはPLAYヤー2から発射される弾の描画などのプログラムと敵の描画です。
このプログラムが一緒に実行されたときのみ、バグとして弾がx座標がランダム、y座標0でプレイヤーの向きに弾が発射されます。

メインです

void Battle(){
    battle_loop=1;
    kaiwa_flag=1;
    SetFontSize( 16 ) ;    
    SetMainWindowText( "バトル" ) ;
    while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0 && battle_loop!=2){
        ClearDrawScreen();
        Background2();
        Dun();
        //PlayerControl();
        //PlayerControl2();
        //PlayerDraw(ch1.x,ch1.y,ch1.muki);
        //PlayerDraw2(ch2.x,ch2.y,ch2.muki);
        //PlayerShotDisp();
        PlayerShotDisp2();
        //PlayerShotCalc();
        //PlayerShotCalc2();
        //Point();
///////////////////////////////////////////////////////////////////////////////
        //CollisionDetection();
        //CollisionDetection2();
/////////////////////////////////////////////////////////////////////////////
        //EnemyControl();
        EnemyCalcDisp();                
        //fps();
        counter++;
///////////////////////////////////////////////////////////////////////////////
        if( CheckHitKey( KEY_INPUT_ESCAPE ) || (GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_C) !=0 )
            break ;                                        //ESCボタンで終了
        if( ProcessMessage() == -1 )
            break ;
        wait_func();
        ScreenFlip() ;                                    //裏画面データを表画面へ反映
    }
}


どうかお願いします 編集済み


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


Name: ぽこ  ..初心者(5,857ポイント)   Date: 2010/01/22(金) 20:34   No:46859     
Title: Re:バグなのですが    
実行可能なソースコードがないと、誰もデバッグ出来ないと思いますよ。

サラッと眺めて思ったことは、
関数PlayerShotCalc2()やPlayerShotDisp2で
配列PlayerShot2ではなくてPlayerShotにアクセスしている箇所がありますが、
大丈夫なのでしょうか?

#電気屋さんが仰っている現象に結びつくかハテナですが。


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

Name: softya  ..ハッカー(100,567ポイント)   Date: 2010/01/22(金) 23:17   No:46867     
Title: Re:バグなのですが    
少しづつ、自分でバグを見つけるテクニックを身に付けた方が良いでしょう。
長いコードを提示してもらっても他の人が全部を見るのは簡単なことではありません。

>バグとして弾がx座標がランダム、y座標0でプレイヤーの向きに弾が発射されます。 
そこまで分かっているなら、プレーヤーの向きの弾を発生している場所を調べてみるべきですね。
発生する時、座標がちゃんと入っているか確認しましたか?
バグを修正する過程で、よりC言語の理解が深まりますよ。

バグを出さないには、こんな本も読んでみると良いでしょう。
http://www.amazon.co.jp/dp/4774133620 編集済み


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

Name: sizuma [URL]  ..プログラマー(30,705ポイント)   Date: 2010/01/22(金) 23:29   No:46870     
Title: Re:バグなのですが    
VC++なら、ブレークポイントをはって、変数の中身をチェックできますよ。

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

Name: sizuma [URL]  ..プログラマー(30,755ポイント)   Date: 2010/01/22(金) 23:50   No:46872     
Title: Re:バグなのですが    
めちゃ簡単だけど、すげー便利なブレークポイントの設定方法
↓ちょっと書いてみたです。
http://tsizu.blog45.fc2.com/blog-entry-85.html


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

Name: 電気屋  ..初心者(8,184ポイント)   Date: 2010/01/23(土) 09:53   No:46887 解決!     
Title: Re:バグなのですが    
ありがとうございます。がんばってみたいと思います。

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



Name: 惰眠  ..ぴよぴよ(233ポイント)   Date: 2010/01/22(金) 07:22   No:46835       
Title: マップのスクロールについて    
おはようございます。
初めまして、惰眠と申します。
横スクロールアクションの製作中に詰まってしまったので、今回質問させて頂きます。
私はC言語暦は約一ヶ月、ゲーム製作は約二週間のまだまだ未熟な者です。
環境は、BorlandC++Compiler5.5+BCCDeveloperです。
質問はマップスクロールの作り方についてです。
マップに画像を描画する事は出来たのですが、
その後、マップをどうやってスクロールさせれば良いのかわかりません。
具体的には、今の状態では2の画像まで辿り着く事が出来ないので、
キャラがウィンドウの中心に到達したら、キャラを中心にマップがスクロールする様にしたいのです。(往復は可能で)
いろいろなサイトを閲覧し、試行錯誤を重ねてはみたのですが上手くいきませんでした。
もし宜しければ、ヒントだけでも教えて頂けないでしょうか。

メッセージが長いとエラーが出たので↓にソースを張ります。


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


Name: 惰眠  ..ぴよぴよ(0ポイント)   Date: 2010/01/22(金) 07:24   No:46836     
Title: Re:マップのスクロールについて    
(以下ソースです)

#include "DxLib.h"

//画面の大きさ
#define WINDOW_SIZE_X 640
#define WINDOW_SIZE_Y 480
//表示するチップの最大数
#define MAP_WIDTH 20
#define MAP_HEIGHT 15
//全体のチップの数
#define MAP_MAX_WIDTH 40
#define MAP_MAX_HEIGHT 15
//マップチップの大きさ
#define MAPCHIP_SIZE 32
 
typedef struct{
        int x,y,img;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    
    char Key[256];
    ch_t ch;
 
    if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||DxLib_Init()==-1)return-1;
 
    ch.x    =32;
    ch.y    =416;
 
    SetDrawScreen( DX_SCREEN_BACK );
    
    int img_box[2];
    img_box[1] = LoadGraph("box.jpg");//茶の■を読み込み
    img_box[2] = LoadGraph("box2.jpg");//緑の■を読み込み
    
    int chara;
    chara = LoadGraph("char.jpg");//青の■(キャラ)を読み込み
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
        int map[MAP_MAX_HEIGHT][MAP_MAX_WIDTH]={
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
for(int b=0; b<MAP_MAX_HEIGHT;b++){
    for(int a=0; a<MAP_MAX_WIDTH;a++)
        switch(map[b][a]){
                case 1:
            DrawRectGraph(a*32,b*32,0,0,32,32,img_box[1],TRUE,FALSE);//茶の■を設置
            break;
            
            case 2:
            DrawRectGraph(a*32,b*32,0,0,32,32,img_box[2],TRUE,FALSE);//緑の■を設置
            break;
    }
    } 
 
        if(Key[KEY_INPUT_RIGHT]==1)
            ch.x++;
    else if(Key[KEY_INPUT_LEFT]==1)
            ch.x--;
 
        ch.img=chara;//青の■(キャラ)
 
        DrawGraph(ch.x,ch.y,ch.img,TRUE);//キャラを描画
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}


※1と2の画像に当たり判定はつけていません

初めての投稿で至らない点もあるとは思いますが、お手柔らかに御指導の程宜しくお願い致します。
連投すみませんでした。


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

Name: kazuoni [URL]  ..ハッカー(129,760ポイント)   Date: 2010/01/22(金) 09:20   No:46838     
Title: Re:マップのスクロールについて    
この問題は簡単そうに思えて意外と面倒だったりします。

以前ここの回答者であるJustyさんがそのサンプルを生成していて、
今自分の手元にそのファイルがあります。
さすがに無断掲載はできないので、
Justyさんのgoサインが出てからアップしようかと思います。
なのでしばし御持ちを。

自分でも作ってみますが、Justyさんのサンプルが
綺麗に管理されていて、自分ではこれ以上うまく書けない気がするので、
こんなスレになってしまいました^^;ごめんなさい。。

#最近Justyさんの姿をみないからもしかしたら
忙しいのかもしれないので、確認をすぐにとれない可能性があるのでご了承を。


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

Name: SooA [URL]  ..プログラマー(26,910ポイント)   Date: 2010/01/22(金) 10:02   No:46839     
Title: Re:マップのスクロールについて    
スクロールさせる仕組みは解りますか?
添付画像を見て下さい。

青線枠の外が見えない部分だと思って下さい。
画像の左のマップを右から左に流れるように
スクロールさせる場合、画像右のようにずらして
描画していきます。


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

Name: たいちう  ..熟練のプログラマー(51,233ポイント)   Date: 2010/01/22(金) 10:23   No:46840     
Title: Re:マップのスクロールについて    
このような関数を作ってみると考えやすいのではないかと。
void DrawMap(int a0) {
    for(int b=0; b<MAP_HEIGHT;b++){
        for(int a=0; a<MAP_WIDTH;a++){ // 範囲の違いに注意
            switch(map[b][a0+a]){      // mapの見る位置を変更
            case 1:
                DrawRectGraph(a*32,b*32,0,0,32,32,img_box[1],TRUE,FALSE);//茶の■を設置
                break;
            case 2:
                DrawRectGraph(a*32,b*32,0,0,32,32,img_box[2],TRUE,FALSE);//緑の■を設置
                break;
            }
        }
    }
}
キャラクタのy座標を元にa0を決定してください。 例えばこう。※動作確認などしていないので、おかしいかも。
if (ch.y / 32 < MAP_WIDTH / 2)
    a0 = 0;
else
    a0 = MAP_WIDTH / 2 - ch.y / 32;


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

Name: softya  ..ハッカー(100,021ポイント)   Date: 2010/01/22(金) 13:09   No:46843     
Title: Re:マップのスクロールについて    
私からの提案としては、作るときに良く分からい場合は、まず単純化してから作る様にすると解決出来たりします。今後ゲームを作っていくときに使えるテクニックだと私は思いますので検討してみて下さい。

単純化するため、まずキャラクタは表示しない。または動かさず放置。※ややこしくなるから。
マップのパーツを単純に横スクロールしてみる。※キー制御があるとややこしいでコメントアウト。
足らなくなったパーツの処理はしないので20x15のブロックがそのまま横に流れていくだけです。※当然ながら20x15のパーツ外は表示しないので、真っ黒なままです。
これが第一段階です。

第二段階としては、キー入力でマップを自在にスクロール出来るようにします。
この場合も20x15のブロックのまま自在に動くだけです。

こっから先は難しくなるので、まずここまでやってみましょうか。
※ みなさんの答えを見せてから考えて貰うと言う方法の真逆です。どっちが良いかは御本人が決めて下さい。


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

Name: 惰眠  ..ぴよぴよ(297ポイント)   Date: 2010/01/22(金) 19:26   No:46857 解決!     
Title: Re:マップのスクロールについて    
kazuoniさん
おお、是非見てみたいですね。
全く急いではいないので、気長にお待ちしています!

SooAさん
画像(背景)を使用してのスクロールは出来ていたのですが、
マップを使用してのスクロールの仕組みがわからなかったのです・・・。

たいちうさん
作って頂いた関数を使用させて頂いたところ、マップのスクロールに成功致しました!
今まで微動だにしなかったので感激です。
私好みに修正を加えながら、使わせて頂きたいと思います。

softyaさん
確かに答えを見せてもらうのと比べると、遥かに自分の為になりそうですね。
今回は解決出来ましたが、また詰まる様な事があれば単純化して考えたいと思います!
単純化させてもわからなかった時は、また質問させて頂きますね。

返答が遅れてしまい申し訳ありませんでした。
ネットでの質問は初めてで内心不安でしたが、皆様お優しい回答で嬉しかったです!
また何かあった時は質問させて頂きますので、その時はまた宜しくお願いします。
回答を下さった皆様方、本当に有難う御座いました。


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

Name: SooA [URL]  ..プログラマー(27,036ポイント)   Date: 2010/01/22(金) 23:45   No:46871     
Title: Re:マップのスクロールについて    
>マップを使用してのスクロールの仕組みがわからなかったのです・・・。
う〜ん、そのつもりでの説明だったのですが^^;

MAP内を移動するだけのサンプルです。
VC++2008ですが、主要な部分は main.cpp に全て書いてあります。
http://www42.tok2.com/home/tuk2nd/bbs/img/34.zip

キャラ画像 data/char.png は 『角屋』様からお借りしました。
http://deli.cubic2.net/member/taoc/kadoya/

追記
カーソルキーで移動します。 編集済み


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

Name: Justy  ..伝説なるハッカー(494,591ポイント)   Date: 2010/01/23(土) 00:20   No:46876     
Title: Re:マップのスクロールについて    
kazuoniさん
> ここの回答者であるJustyさんがそのサンプルを生成していて
> 〜
>さすがに無断掲載はできないので

 あーと、これですかね。

http://www.play21.jp/board/formz.cgi?action=res&resno=11226&page=&lognum=35&id=dixq&rln=11335
http://www.play21.jp/board/formz.cgi?action=res&resno=35013&page=&lognum=107&id=dixq&rln=35276

 別に私的には掲載していただいても一向に構わないです。
 ただ、たしかこれは元々の質問者さんのコードを改変して作ったものなので、厳密には私だけのコードではありません。
 まぁそれを言い出したらさらに元は Dixqさんのコードということになるのですが。


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

Name: 惰眠  ..ぴよぴよ(525ポイント)   Date: 2010/01/23(土) 02:48   No:46882     
Title: Re:マップのスクロールについて    
SooAさん
私には読解力が不足している様です・・・。すみませんでした。
もう一度よく読み返してみます!
それとサンプルのzip頂きました。有難う御座います!
自分の作った物と見比べて、より良い物を作れる様頑張りたいと思います。

Justyさん
リンク先を全文読ませて頂きました。
カメラの概念が非常に分かり易いと思いました。

頂いた沢山の資料を基に、精進して行きたいと思います。
解決後にも関わらず、回答をして頂き有難う御座いました。




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

Name: kazuoni [URL]  ..ハッカー(129,788ポイント)   Date: 2010/01/23(土) 02:48   No:46883     
Title: Re:マップのスクロールについて    
では早速。っといいながら、もう解決していますが^^;

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

Name: 惰眠  ..ぴよぴよ(609ポイント)   Date: 2010/01/23(土) 02:56   No:46885     
Title: Re:マップのスクロールについて    
kazuoniさん
早速頂きました!
解決はしましたが、いろいろな資料を見れるのは大変嬉しいです。
zipの添付と二度のレス、どうも有難う御座いました!




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



Name: たこやき  ..初心者(8,421ポイント)   Date: 2010/01/20(水) 06:40   No:46660       
Title: プログラマの人に質問です    
単純な質問なのですが。http://www.geocities.jp/kenji_y0328/crenshu/renshu/r093.html
サイトの問題はどれくらいの時間で出来ますか?


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


Name: non  ..比類無きプログラマー(88,622ポイント)   Date: 2010/01/20(水) 09:35   No:46671     
Title: Re:プログラマの人に質問です    
プロではないけど、画面の処理をしなくて良いのなら1時間もあれば良いかと。
ただ、画面のスクロール処理や色をつけることを考えると、環境がわからないと、わからない。


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

Name: たいちう  ..熟練のプログラマー(49,918ポイント)   Date: 2010/01/20(水) 10:17   No:46679     
Title: Re:プログラマの人に質問です    
プロだけど、XP & VC++ならば、実質1〜2時間かな。
但し、データ件数が100万件の場合にどのように表示するか、
エラー処理をどうするか等、問題に記述されていない部分があるので、
それを私の裁量で決定してよい場合。

プロとして引き受ける場合、仕様が曖昧な部分を詰めてから
工数見積もりを出したいところだけど、実際は曖昧なまま返答しなくては
ならないことも多いので、打ち合わせ・テスト・仕様変更・資料作成
・納品等の時間も考慮して1〜2日程の工数見積もりにします。

実際に顧客に請求する金額は必ずしもこれに比例しないですが。


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

Name: たかぎ [URL]  ..ハッカー(155,009ポイント)   Date: 2010/01/20(水) 17:27   No:46717     
Title: Re:プログラマの人に質問です    
プログラミングにかかる時間は、皆さんと大体同じです。
仕事として引き受ける場合、商談・見積もりから始まって、契約書の作成、仕様の打ち合わせ、実装、テスト、(必要なら)ドキュメント作成、納品作業、請求書作成、そして瑕疵担保責任と(前払いでない場合、相手によっては)回収リスクを考慮した上で請求します。
あえて金額を挙げるなら、安く見積もっても、20万〜30万円(税別)でしょうね。

# でも、実際の見積もりは、ブラックジャックと同じぐらいアバウトなのですが...


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

Name: sizuma [URL]  ..プログラマー(29,911ポイント)   Date: 2010/01/20(水) 17:43   No:46718     
Title: Re:プログラマの人に質問です    
専門学校2年、プログラム歴1年ですが、C言語でデータの編集だけできればいいなら3,4時間でしょうか。
コンソールアプリでいいなら色つけて画面表示するくらい簡単にできそうです。
VC++かVC#とmysqlでデータベース使っていいなら半分くらいの時間で出来そうですね。
ベタベタなフォームアプリみたいな感じで好きにインターフェース作っていいなら、ですが。

もちろん設計とかしないで、テストも動けばいいってレベルなので、上のお三方と比べられるクオリティにはなりません。


#っていうかnonさんはプロじゃなかったんですね!?
#登録したら、経歴とか年齢などのちょっとしたプロフィールが分かればいいんですが・・・
#そしたら初見の人にも自分が初心者だってわかってもらえますし。


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

Name: non  ..比類無きプログラマー(88,857ポイント)   Date: 2010/01/20(水) 17:58   No:46720     
Title: Re:プログラマの人に質問です    
>#っていうかnonさんはプロじゃなかったんですね!? 
職業は内緒です。ですから、経歴などのプロフィールはご勘弁を。
例会の時も、知らぬ存ぜぬを通しました。
プログラムでお金をもらったことはありますが、職業プログラマではありません。


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

Name: たこやき  ..初心者(8,664ポイント)   Date: 2010/01/20(水) 18:05   No:46721     
Title: Re:プログラマの人に質問です    
みなさん回答有難うございます。
色とかはつけなくて大丈夫です。データベースは使ってはダメです。
この通りコンソールアプリでこの様に(色を付けないで)書ければそれだけでいいです。


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

Name: dic  ..熟練のプログラマー(48,943ポイント)   Date: 2010/01/21(木) 07:43   No:46775     
Title: Re:プログラマの人に質問です    
おもいっきりデータベース関連の問題なんですが
私は1週間以内ですね


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

Name: mnkr  ..入門者(3,451ポイント)   Date: 2010/01/21(木) 08:05   No:46780     
Title: Re:プログラマの人に質問です    
ぱっと見cobolかと思いましたがC言語ですか。。。
1日でできるかなー?ぐらいです。


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

Name: たこやき  ..初心者(8,725ポイント)   Date: 2010/01/21(木) 22:10   No:46819     
Title: Re:プログラマの人に質問です    
データベースというかmysqlを使ってはダメということです。
テキストファイルを使ってやってください。補足が必要ならば
言ってください。


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

Name: たいちう  ..熟練のプログラマー(50,599ポイント)   Date: 2010/01/21(木) 22:34   No:46824     
Title: Re:プログラマの人に質問です    
> テキストファイルを使ってやってください。補足が必要ならば
> 言ってください。

ひょっとして作ってほしいの?
他の人だとどの位時間がかかるか知りたかっただけだと思ってたんだけど。


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

Name: たこやき  ..初心者(8,812ポイント)   Date: 2010/01/22(金) 00:18   No:46831     
Title: Re:プログラマの人に質問です    
返信ありがとうございます。説明不足で申し訳ありません。
>ひょっとして作ってほしいの? 
そういう意味ではありません。
ご察しの通りどの位かかるか知りたいだけです。


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

Name: たいちう  ..熟練のプログラマー(50,866ポイント)   Date: 2010/01/22(金) 08:53   No:46837     
Title: Re:プログラマの人に質問です    
私の聞き方もまずかったですね。
「テキストファイルを使ってやってください。」
という書き方が気になったので質問したのです。
「テキストファイルを使う条件で、作成予想時間を教えてください。」
という意味ですよね?

たこやきさんが知りたいのが、予想の時間ならば、
私を含めて既に皆さんが書かれている通り。
たこやきさんが知りたいのが、実際の時間ならば、
プログラムを作らないといけません。

工数見積もりは大小色々やってきましたが、
プロといえども予想と実際は大きく違うことも多いのです。
下手をすると何十倍も。
下手をすると何百人月も。(←私が直接知っているのはこの程度まで)


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

Name: たこやき  ..初心者(8,728ポイント)   Date: 2010/01/22(金) 17:08   No:46848     
Title: Re:プログラマの人に質問です    
返信ありがとうございます。予想の時間が知りたいのですが、
出来れば実際の時間も知りたいです。やっぱり予想どおりの時間より
かかってしまうものなのでしょうか?その逆はないのでしょうか?


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

Name: non  ..比類無きプログラマー(89,045ポイント)   Date: 2010/01/22(金) 17:11   No:46849     
Title: Re:プログラマの人に質問です    
他人が、どれだけ時間がかかるかってことを知って何か意味がある?
たこやきさんは、どれくらいかかるの?


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

Name: softya  ..ハッカー(100,111ポイント)   Date: 2010/01/22(金) 17:12   No:46850     
Title: Re:プログラマの人に質問です    
>出来れば実際の時間も知りたいです。やっぱり予想どおりの時間より
>かかってしまうものなのでしょうか?その逆はないのでしょうか?

そんなのは日常生活と同じですよ。
予定より早く終わることもありますが、大抵は時間がかかります。
たこやきさん、宿題にかかる時間はやる前にきっちり予想できますか? 編集済み


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

Name: たこやき  ..初心者(8,753ポイント)   Date: 2010/01/22(金) 17:36   No:46851     
Title: Re:プログラマの人に質問です    
きっちりは予想はできません(汗)
そうですよね。確かにわかりませんよね。


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

Name: softya  ..ハッカー(100,225ポイント)   Date: 2010/01/22(金) 17:41   No:46852     
Title: Re:プログラマの人に質問です    
>きっちりは予想はできません(汗)
>そうですよね。確かにわかりませんよね。 

同じような宿題は経験を積めば予想は正確になっていきますが、予想外は何処にでも存在します。
それが始めての物や、手間のかかるものだった場合は予想はより不正確になります。
プログラミングの見積もりもそれと同じことです。

経験、勘、出来るだけ詳しい作業の予想、リスク・マージンなどなどを考慮して作業時間を見積もりするわけですが、仕事の相場もありますので無茶な作業時間の見積もりは出来ません。
余裕を取ったつもりが、いつも足らなくなるってのが良くある話ですね。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(155,670ポイント)   Date: 2010/01/22(金) 18:24   No:46853     
Title: Re:プログラマの人に質問です    
> 出来れば実際の時間も知りたいです。

少なくとも1回、状況によってはそれ以上、打ち合わせに来る覚悟がありますか?
予算がないのでこちらから出向くわけにはいきませんので。


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

Name: たこやき  ..初心者(8,788ポイント)   Date: 2010/01/22(金) 20:55   No:46860     
Title: Re:プログラマの人に質問です    
返信ありがとうございます。いや、それはないです。実際の時間でもなくてもいいです。

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

Name: たかぎ [URL]  ..ハッカー(155,676ポイント)   Date: 2010/01/22(金) 21:35   No:46861     
Title: Re:プログラマの人に質問です    
> いや、それはないです。実際の時間でもなくてもいいです。

それだと、実際に近い時間を出すのも困難ですね。
(5) 処理内容には、m_codeやt_codeといった定義なしに出現している名前もあり、この辺りの仕様を決定するための作業がまず必要になりますから。
そもそも処理系不明ですので、表示やキー入力の受付方法、文字コードなども特定できません。


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

Name: たこやき  ..初心者(8,890ポイント)   Date: 2010/01/22(金) 21:56   No:46862     
Title: Re:プログラマの人に質問です    
返信ありがとうございます。処理系はVC++です。
定義については自由です。だいたいどれくらいで出きるのか聞いているので。実際に近い時間じゃなくても大丈夫です。
自分だったらどれくらいでできるかな?くらいでいいです。


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



Name: KA  ..ぴよぴよ(702ポイント)   Date: 2010/01/21(木) 21:06   No:46817       
Title: DirectXで・・・    
DirectX9のプログラミングの勉強をしているのですが、フルスクリーンとウィンドウモードの切り替えがどうしてもうまくいきません。

ネットであちこち探し回っているうちにわからなくなってきたのですが、Resetメソッドを呼び出した後にCreateDevice関数を呼ばないといけないんですか?


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


Name: kazuoni [URL]  ..ハッカー(129,214ポイント)   Date: 2010/01/22(金) 05:59   No:46833     
Title: Re:DirectXで・・・    
・現在どの様に記述していて(コード掲載)
・どの様な動作を期待しているが
・現在はこの様にしか動かない

を補足してください。


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

Name: KA  ..かけだし(1,398ポイント)   Date: 2010/01/22(金) 20:13   No:46858     
Title: Re:DirectXで・・・    
いまいち頭の中で整理できていない状態で質問してしまいました。すいません。

LPDIRECT3D9             Dx3D_9;
D3DPRESENT_PARAMETERS   Dx3D_PP;
LPDIRECT3DDEVICE9       Dx3D_9Dev;
D3DDISPLAYMODE          Dx3D_9Disp;
//以上は初期化済み
//while内・Clear,BeginSceneメソッド実行後
if(CheckKeyState(KEY_INPUT_W)==1)
{
    //リソース開放処理(作ってないので無記述)
    //以下の関数でDx3D_PPに値を代入します。(ウィンドウ初期化時にも使用・FALSEはフルスクリーンフラグです)
    Init_PRESENT_PARAMETERS(Dx3D_PP,Window_size_X,Window_size_Y,FALSE,Dx3D_9Disp);
    while(Dx3D_9Dev->Reset(&Dx3D_PP)==D3DERR_DEVICELOST)
    {
        GetMessage(&msg,NULL,0,0);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    if(FAILED(Dx3D_9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,&Dx3D_PP,&Dx3D_9Dev)))
    {
        MessageBox(NULL,"エラー","DirectX9Error",MB_ICONERROR);
        break;
    }
    //リソース作成処理(作ってないので無記述)
}


以上のコードでフルスクリーンとウィンドウの切り替え(上のコードではデバックのためウィンドウからフルスクリーンのみ)の動作を望んでいるのですが、CreateDeviceでエラーが出ます。

デバイスロスト時の復帰プログラムを改造(Init_PRESENT_PARAMETERSの追加)しただけです。
しかし、こっちのソースではエラーが出てしまいます。(復帰は成功) 編集済み


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



Name: Hwe  ..ぴよぴよ(42ポイント)   Date: 2010/01/22(金) 15:47   No:46846       
Title: DNSサーバ「    
現Linuxでサーバの構築を行っています
DNSサーバで、
逆引きゾーンの設定を行いたいのですが、


IP 192.168.1.254
マスク 255.255.255.0

であったら、どのように逆引きゾーンは、
254.1.168.192.in-addr.arpa

となると思っていたのですが。違うのでしょうか?

ご教授お願いします。


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


Name: softya  ..ハッカー(100,392ポイント)   Date: 2010/01/22(金) 18:42   No:46856     
Title: Re:DNSサーバ「    
少なくともyahoo知恵袋やokwaveなどのQ&Aサイトで質問された方がよろしいかと。
こちらは、C/C++系の質問サイトですので。
http://okwave.jp/c696.html
http://list.chiebukuro.yahoo.co.jp/dir/list/d2078297643/new


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



Name: ゆう  ..ぴよぴよ(233ポイント)   Date: 2010/01/22(金) 16:37   No:46847       
Title: PlaySound関数で    
[1] 質問文
 while文でループしている中にPlaySound関数を用いて例えばa.wavが鳴り終わったらb.wavを鳴らすという連続して音を出すやり方が分かりません。while文の中には別にずっと処理をし続ける物もあるので、ループの流れを止めずに非同期で行いたいと思ってます。
      
[2] 環境  
 [2.1] OS : WindowsVista
 [2.2] VC++
[3] その他 
 ・どの程度C言語を理解しているか
   複雑な物になると分かりませんが、基本的なところは理解してるつもりです。
 ・ライブラリを使っている場合は何を使っているか
  OpenCV


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




Name: クリス  ..ぴよぴよ(202ポイント)   Date: 2010/01/19(火) 18:35   No:46602       
Title: 助けてください..    

EGGXを使っています。 本当に初心者です。

これは課題です。期限までに提出しなければ留年が確定します...
助けて下さい。 


アニメーションのプログラムでわからない所があるので質問しました。画像にあるように二つの回路を書き、同時に両方の回路に電流を流して電球をつけ、直路の電池は並列の電池よりも早く無くなり電球が消えるというプ
プログラムを作っているのですが、今の段階では回路と電球しか書けていない状態です。電流を流れているように見せるには 
for(x=10.0; x<380.0; x+=10.0) { 
gclr(win); 
fillrect(win, x, 30.0, 10.0, 10.0); 
msleep(50); 

↑で出来ます。これを複数出すにはどうすれば良いのでしょうか?

あと直列回路の右上に電流が来た時にどうしたら下に流れるのでしょうか?

ちなみに

直列の電流の初めの座標はX=243.0 Y=500.0で 並列の電流の初めの座標はX=777.0 Y=500.0です。直列回路の電流が通る右上の座標はX=528.0 Y=500.0 、右下の座標はX=528.0 Y=95.0、左下の座標はX=133.0 Y=95.0、左上の座標はX=133.0 Y=500.0、直列の電流の終わりの座標X=228.0 Y=500.0です。
並列は、右上の座標はX=1062.0 Y=500.0 、右下の座標はX=528.0 Y=200.0 ...........てな感じです あと並列回路の分かれている部分に来た時にどうしたら分かれて流れているように見えるのでしょうか?

全ての質問に答えてもらえると光栄です。 具体的にプログラムを書いてもらえるとうれしいです。お願いします


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


Name: クリス  ..ぴよぴよ(218ポイント)   Date: 2010/01/19(火) 18:40   No:46604     
Title: 追記    
osはマックです

提出は1月24日までです...


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

Name: softya  ..比類無きプログラマー(96,016ポイント)   Date: 2010/01/19(火) 18:47   No:46605     
Title: Re:助けてください..    
マルチポストですので、まず規約を良くお読み下さい。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1335527653
その他にもお聞きしたいことがあります。

質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
 ・ 使用している環境やコンパイラ(VisualC++2008ExpressEdition等)、自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を教えて下さい。
 ・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね。
 ・ 自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
 詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html

まず規約違反を解消いただければ、出来るだけお手伝いいたします。


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

Name: クリス  ..ぴよぴよ(0ポイント)   Date: 2010/01/19(火) 19:31   No:46610     
Title: Re:助けてください..    
環境   
  OS .. Mac OS X 
 コンパイラ .. egg

自分が習っている言語.... C-言語

学校で習った範囲は基本的なことです。自由テーマの課題なので使って良い関数の制限はないとおもいます。 

規約違反ですいませんでした。


今書いてるソースプログラムは一つの四角が動いている感じです。

長いので分けます

#include <stdio.h>
#include <stdlib.h>
#include <math.h> 
#include <eggx.h>

int win,win2,i,j;
  void kairo(void){
  newpen(win, 1); 
 
  //直列回路の回路
  line(win, 138, 500, PENUP);
  line(win, 233, 500, PENDOWN);
  line(win, 133, 505, PENUP);
  line(win, 233, 505, PENDOWN);
  line(win, 243, 505, PENUP);
  line(win, 533, 505, PENDOWN);
  line(win, 243, 500, PENUP);
  line(win, 528, 500, PENDOWN);
  line(win, 528, 500, PENUP);
  line(win, 528, 100, PENDOWN);
  line(win, 533, 505, PENUP);
  line(win, 533, 95, PENDOWN);
  line(win, 528, 100, PENUP);
  line(win, 453, 100, PENDOWN);
  line(win, 533, 95, PENUP);
  line(win, 453, 95, PENDOWN);
  line(win, 133, 505, PENUP);
  line(win, 133, 95, PENDOWN);
  line(win, 138, 500, PENUP);
  line(win, 138, 100, PENDOWN);
  line(win, 133, 95, PENUP);
  line(win, 218, 95, PENDOWN); 
  line(win, 138, 100, PENUP);
  line(win, 218, 100, PENDOWN);
  line(win, 233, 535, PENUP);
  line(win, 233, 475, PENDOWN);
  line(win, 243, 520, PENUP);
  line(win, 243, 490, PENDOWN);
  line(win, 263, 95, PENUP);
  line(win, 403, 95, PENDOWN);
  line(win, 263, 100, PENUP);
  line(win, 403, 100, PENDOWN);
  
  //並列回路の回路

  line(win, 652, 505, PENUP);
  line(win, 767, 505, PENDOWN);
  line(win, 657, 500, PENUP);
  line(win, 767, 500, PENDOWN);
  line(win, 767, 535, PENUP);
  line(win, 767, 475, PENDOWN);
  line(win, 777, 520, PENUP);
  line(win, 777, 490, PENDOWN);
  line(win, 777, 505, PENUP);
  line(win, 1067, 505, PENDOWN);
  line(win, 777, 500, PENUP);
  line(win, 1062, 500, PENDOWN);
  line(win, 1062, 500, PENUP);
  line(win, 1062, 205, PENDOWN);
  line(win, 1067, 505, PENUP);
  line(win, 1067, 200, PENDOWN);
  line(win, 1062, 205, PENUP);
  line(win, 1017, 205, PENDOWN);
  line(win, 1067, 200, PENUP);
  line(win, 1017, 200, PENDOWN);
  line(win, 1017, 205, PENUP);
  line(win, 1017, 305, PENDOWN); 
  line(win, 1017, 200, PENUP);
  line(win, 1017, 95, PENDOWN);
  line(win, 1012, 300, PENUP);
  line(win, 1012, 100, PENDOWN); 
  line(win, 1017, 305, PENUP);
  line(win, 890,  305, PENDOWN);
  line(win, 1012, 300, PENUP);
  line(win, 880,  300, PENDOWN);
  line(win, 1017, 95, PENUP);
  line(win, 880,  95, PENDOWN);
  line(win, 1012, 100, PENUP);
  line(win, 890,  100, PENDOWN);
  line(win, 707, 305, PENUP);
  line(win, 850, 305, PENDOWN);
  line(win, 712, 300, PENUP);
  line(win, 842, 300, PENDOWN); 
  line(win, 712, 300, PENUP);
  line(win, 712, 100, PENDOWN);
  line(win, 707, 305, PENUP);
  line(win, 707, 205, PENDOWN); 
  line(win, 707, 205, PENUP);
  line(win, 657, 205, PENDOWN);
  line(win, 707, 200, PENUP);
  line(win, 652, 200, PENDOWN); 
  line(win, 707, 200, PENUP);
  line(win, 707, 95, PENDOWN);
  line(win, 712, 100, PENUP);
  line(win, 837, 100, PENDOWN); 
  line(win, 707, 95, PENUP);
  line(win, 837, 95, PENDOWN);
  line(win, 657, 205, PENUP);
  line(win, 657, 500, PENDOWN); 
  line(win, 652, 200, PENUP);
  line(win, 652, 505, PENDOWN);
}




1,438ポイント を落としてしまった。

Name: クリス  ..かけだし(1,911ポイント)   Date: 2010/01/19(火) 19:32   No:46611     
Title: Re:助けてください..    

// 直列回路の電球
void denkyu(void){
  newpen(win, 9);  


    fillrect(win, 218, 75, 50, 50);
    fillrect(win, 403, 75, 50, 50);
for(i = 0; i < 60; i++){
    newrgbcolor(win, i*7, i*15, i*10);
    fillarc(win, 243, 170, 50-i, 50-i, 0.0, 360.0, 1);
    fillarc(win, 428, 170, 50-i, 50-i, 0.0, 360.0, 1);}
  line(win, 223, 165, PENUP);
  line(win, 223, 125, PENDOWN);
  line(win, 265, 165, PENUP);
  line(win, 265, 125, PENDOWN);
  
  line(win, 223, 165, PENUP);
  line(win, 230, 155, PENDOWN);
  line(win, 235, 165, PENDOWN);
  line(win, 240, 155, PENDOWN);
  line(win, 245, 165, PENDOWN);
  line(win, 250, 155, PENDOWN);
  line(win, 255, 165, PENDOWN);
  line(win, 260, 155, PENDOWN);
  line(win, 265, 165, PENDOWN);

  line(win, 450, 165, PENUP);
  line(win, 450, 125, PENDOWN);
  line(win, 408, 165, PENUP);
  line(win, 408, 125, PENDOWN);

  line(win, 408, 165, PENUP);
  line(win, 413, 155, PENDOWN);
  line(win, 418, 165, PENDOWN);
  line(win, 423, 155, PENDOWN);
  line(win, 428, 165, PENDOWN);
  line(win, 433, 155, PENDOWN);
  line(win, 438, 165, PENDOWN);
  line(win, 443, 155, PENDOWN);
  line(win, 450, 165, PENDOWN);

}




  void denkyu2(void){
  //並列回路の電球
                newpen(win,9);    
fillrect(win, 839, 75, 50, 50);
fillrect(win, 839, 280, 50, 50);
for(i = 0; i < 60; i++){
    newrgbcolor(win, i*7, i*8, i*3);

    fillarc(win, 863, 169, 50-i, 50-i, 0.0, 360.0, 1);

    fillarc(win, 863, 374, 50-i, 50-i, 0.0, 360.0, 1);}

  line(win, 842, 165, PENUP);
  line(win, 842, 125, PENDOWN);
  line(win, 885, 165, PENUP);
  line(win, 885, 125, PENDOWN);

  line(win, 842, 165, PENUP);
  line(win, 847, 155, PENDOWN);
  line(win, 853, 165, PENDOWN);
  line(win, 860, 155, PENDOWN);
  line(win, 865, 165, PENDOWN);
  line(win, 872, 155, PENDOWN);
  line(win, 876, 165, PENDOWN);
  line(win, 880, 155, PENDOWN);
  line(win, 885, 165, PENDOWN);

  line(win, 842, 365, PENUP);
  line(win, 842, 300, PENDOWN);
  line(win, 885, 365, PENUP);
  line(win, 885, 300, PENDOWN);

  line(win, 842, 365, PENUP);
  line(win, 847, 355, PENDOWN);
  line(win, 853, 365, PENDOWN);
  line(win, 860, 355, PENDOWN);
  line(win, 865, 365, PENDOWN);
  line(win, 872, 355, PENDOWN);
  line(win, 876, 365, PENDOWN);
  line(win, 880, 355, PENDOWN);
  line(win, 885, 365, PENDOWN);
}




float x,y,dx,dy;
void denryu(){
  // 電流の動き
  dx= 0.8;
  dy= 0.4;
  newpen(win, 1); 
 
  y=500;
fillrect(win, x, y, 5, 5);
 msleep(5);}



 
 


int main() {
 
  win=gopen(1200,600);  /* 描画ウィンドウを開く */
  winname(win, "sample 1"); /* 名前をつける */
  layer(win, 0, 1); 
  for(x=243; x<530; x++){   
    gclr(win);
    
   kairo();
 denryu();
 denkyu();
 denkyu2();
 
 copylayer(win, 1, 0);
}
 
ggetch(win); /* キー入力を待つ */
  gclose(win); /* 描画ウィンドウを閉じる */

  return 0;

}


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

Name: クリス  ..かけだし(1,928ポイント)   Date: 2010/01/19(火) 22:11   No:46623     
Title: Re:助けてください..    

提出期限が22日でした....

すいません...


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

Name: バグ  ..ハッカー(183,874ポイント)   Date: 2010/01/19(火) 22:27   No:46625     
Title: Re:助けてください..    
どうして、こんなギリギリまで放っておいたのかが不思議でしようがないのは私だけでしょうか?
ぶっちゃけ、留年したとしても、自業自得じゃないかな?


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

Name: クリス  ..かけだし(1,997ポイント)   Date: 2010/01/19(火) 22:33   No:46627     
Title: Re:助けてください..    
プログラミングが苦手で悪戦苦闘して自分でやろうと冬休みから努力した結果がこれです。最終手段にここで質問してはいけないのでしょうか?   助けて下さい。 春休み必死で努力して克服すると誓うので手伝って下さい...

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

Name: shilfia  ..入門者(3,491ポイント)   Date: 2010/01/19(火) 22:37   No:46628     
Title: Re:助けてください..    
ギリギリまで考えていたけど結局わからなかった、という見方もできますよ。

(編集追記↓)
あ、すでに本人が答えられてましたね、失礼しました。 編集済み


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

Name: softya  ..比類無きプログラマー(96,542ポイント)   Date: 2010/01/19(火) 23:11   No:46638     
Title: Re:助けてください..    
さすがに、こちらにはMACもないし、Linuxを準備している暇もないので時間的に厳しいですね。
EGGX使ったことが無いので細かいこと不明なのもツライところ。
土日挟んでいれば、まだなんとかなったかも。

うーん。
とりあえずC言語のアルゴリズムがまともに組めないみたいですね。
電流が通る座標が全て分かるのなら、座標構造体のテーブルにしてしまえば良いです。

例えば、
// 電流マークの位置
typedef strcut {
 float x;
 float y;
} e_point;
と構造体を定義して、全部の位置をテーブル化します。

// もっと効率の良い方法もありますが、簡単で動けば良いって方向で作ります。
e_point line1[] = {
 {10.0,30.0}
 {20.0,30.0}
 : 全部の電流マークのポイントを記述して下さい。曲がり角があってもラインの最後まで書いて下さい。
};
// おなじ要領で他のラインも定義します。

// で配列を参照して電流の流れを作ります。
while(1) {
 gclr(win); 
 // 3つ置おきに表示
 for(i=0; i<配列の数の最大の物; i+=3 ) {
  if( i<line1の配列数 ) {
   fillrect(win, line1[i].x, line1[i].y, 10.0, 10.0); 
  } 
  if( i<line2の配列数 ) {
   fillrect(win, line2[i].x, line2[i].y, 10.0, 10.0); 
  } 
   ↓以下ラインの数だけ続
 }
 msleep(50); 
}
とりあえず、これで流れる電流は表せると思います。


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

Name: softya  ..比類無きプログラマー(96,776ポイント)   Date: 2010/01/19(火) 23:18   No:46639     
Title: Re:助けてください..    
>あと並列回路の分かれている部分に来た時にどうしたら分かれて流れているように見えるのでしょうか? 

流れる電流のマークが二手に分かれているだけで、それらしく見えると思います。
凝るのなら、表示する電流のマークの面積を半分にすれば良いでしょう。


>同時に両方の回路に電流を流して電球をつけ、直路の電池は並列の電池よりも早く無くなり電球が消えるというプログラムを作っているのですが.

これをアニメーションでどう表現するか決まっていますか?
アニメの速度を遅くするのか、電流のマークの数を減らすのか、それとももっと別のアイデアがあるのか? 編集済み


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

Name: クリス  ..かけだし(2,041ポイント)   Date: 2010/01/19(火) 23:22   No:46640     
Title: Re:助けてください..    
ありがとうございます。

すいませんが具体例をかいてもらってもいいですか? 本当にすいません...


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

Name: softya  ..比類無きプログラマー(96,812ポイント)   Date: 2010/01/19(火) 23:24   No:46641     
Title: Re:助けてください..    
>すいませんが具体例をかいてもらってもいいですか? 本当にすいません...

えっ?
具体的に書いていますが???


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

Name: クリス  ..かけだし(2,058ポイント)   Date: 2010/01/19(火) 23:25   No:46642     
Title: Re:助けてください..    
タイマー的な機能はあるのですか?

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

Name: softya  ..比類無きプログラマー(96,865ポイント)   Date: 2010/01/19(火) 23:30   No:46643     
Title: Re:助けてください..    
>タイマー的な機能はあるのですか?

それを考える前に、まず電流を流して下さい。
いっぺんに教えても混乱するだけなのでわざと書いていません。


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

Name: クリス  ..かけだし(2,068ポイント)   Date: 2010/01/19(火) 23:35   No:46645     
Title: Re:助けてください..    
もうプログラミングをしようとしたら手が震えるんですよ..   
先生にメールした所 土曜の23時59分まで待ってくれるということでした。



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

Name: light  ..ぴよぴよ(67ポイント)   Date: 2010/01/19(火) 23:38   No:46646     
Title: Re:助けてください..    
もう答えをくれ、それ以外のコメントはどうでもいい、そんな感じではせっかく答えてくれる人も減りますよ。
まだ土曜日まで時間があるのだから着実にやっていっては


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

Name: softya  ..比類無きプログラマー(97,023ポイント)   Date: 2010/01/19(火) 23:50   No:46648     
Title: Re:助けてください..    
>もうプログラミングをしようとしたら手が震えるんですよ..   
こう書かれると、それはもう脅迫なんですよ。ホントですよね?
はっきり言うと、本当にこういう症状が出ているならプログラミングに向いている性格とは思えません。
早いうちに進路変更をオススメします。
留年するとか言っている場合でなくて、うつ病とかになる心配をすべきです。
IT業界はこのぐらい追い込まれるの仕事では当たり前なんで、とても無理だと思います。
これは、クリスさんの為を思っての忠告です。

うつ病一番多い業界だと言われてますからね。 編集済み


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

Name: クリス  ..かけだし(2,126ポイント)   Date: 2010/01/19(火) 23:59   No:46649     
Title: Re:助けてください..    
脅迫なんてしていません..  語弊あ生じてすいません。

将来はちがう業界に行こうとしてます。大学は、卒業したいと考えております。すいません。



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

Name: softya  ..比類無きプログラマー(97,093ポイント)   Date: 2010/01/20(水) 00:06   No:46651     
Title: Re:助けてください..    
>将来はちがう業界に行こうとしてます。大学は、卒業したいと考えております。すいません。 
え?
これ卒研か何かですか?

どちらにしても、私が全部のコード書く時間は申し訳ないですがありません。
出来るだけお手伝いしたかったんですが、私では御役に立てない様なので。
他の時間のとれる方にお任せします。


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

Name: ぽこ  ..初心者(5,205ポイント)   Date: 2010/01/20(水) 00:09   No:46652     
Title: Re:助けてください..    
なんか、一番面倒な処理を最初にやろうとしていませんか?

というか、進め方間違ってますよ。
クリスさんが自分で決めたテーマはなんですか?
質問文から推測するに
「回路に電流が流れている様子を視覚的に見せる」
ですよね?
別に電池容量が減っていく様をシミュレートする訳じゃないですよね?

だったら、もう時間が無いのだからハリボテでも作ることをお勧めします。

1.二つの電球を光らせる。
2.一定時間たったら、直列回路の方の電球の光を消す。
3.さらに時間がたったら、並列回路の方の電球の光を消す。

まずはこれを作ってみては?
もう1は出来ているみたいですし。

んで、ハリボテとして電流が流れている期間(直列回路は1と2、並列回路は1から3)の間
「危険!電流が流れています!!!」
とか適当に字幕を表示させておけば、「視覚的に電流が流れている」ことは表現出来ますよね?

まずはここまで作って、残り時間で、この掲示板で求めている細かいアニメーション作り込むように
すると、精神的にも楽なのでは?

レポートには、
「本当はこういう事をやりたかったが、出来なかった、残念」
て書いておけば良いでしょう?

#勿論、ハリボテでNGだった場合の責任は取れませんが。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,141,046ポイント)   Date: 2010/01/20(水) 07:54   No:46662     
Title: Re:助けてください..    
せっかく高いお金払って大学(か専門学校?)で情報を学んでいるのに勉強せず、将来にも役立てないなんてもったいないですよ・・。
手が震えるというのは何かの例えですか?それとも本当のこと?
プログラムの楽しさがわかれば全くそんなことはないと思うんですけどね・・。


ところで、Macで動かないといけないというのは制約なんですか?
eggxってライブラリは有名なんでしょうか?私は知りませんでしたが;

DXライブラリでよければちゃちゃっと作れそうですが、eggxは使ったことがありません・・。

しかし自由テーマなのに、何故出来ないことを選択したのでしょう?
自分が興味持てて、出来そうな仕様にすればよかったのでは?
今から仕様を変えちゃだめなんですか?


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

Name: バグ  ..ハッカー(184,017ポイント)   Date: 2010/01/20(水) 08:33   No:46664     
Title: Re:助けてください..    
皆さんが好意的に解釈している事に驚いています。
進級もしくは卒業する為に必要な権利を得る為の課題なんですよね?
将来はともかく、現在の状況は自身が望んでなったんですよね?
その挙句に『卒業はしたい、でもプログラムを書くのは無理だから、答えだけ教えてくれ』というのはムシがよすぎだと感じるのは不自然でしょうか?


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

Name: クリス  ..かけだし(2,226ポイント)   Date: 2010/01/20(水) 08:36   No:46665     
Title: Re:助けてください..    
大学です。 
例えでなく本当のことです。


Macで動かないといけないのです。 eggxはマイナーだと思います。 DXライブラリって何ですか?


簡単そうだと思い選択しました....  

変えれないんです↓


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

Name: クリス  ..かけだし(2,235ポイント)   Date: 2010/01/20(水) 08:39   No:46666     
Title: Re:助けてください..    
バグさん

進級がかかっています。

ある事情より今の学部にいます。


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

Name: non  ..比類無きプログラマー(88,557ポイント)   Date: 2010/01/20(水) 08:45   No:46667     
Title: Re:助けてください..    
失敗をバネに生きていくのも大事なこと。留年しましょう。
ところで、就職は決まっているのかな?


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

Name: たいちう  ..熟練のプログラマー(49,666ポイント)   Date: 2010/01/20(水) 09:14   No:46668     
Title: Re:助けてください..    
質問者の姿勢はともかくとして、現実問題誰かが替わりにやってあげることは
不可能に近いのではないかと思うのですが。
回答者は動作確認することが困難だし、それっぽいプログラムを書いても、
実際の環境で質問者が検証し、不具合を報告するということも期待できなそう。

私の見立てが正しいならば同じ課題を履修している友人に頼んだりするしかないと思うな。


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

Name: クリス  ..かけだし(2,243ポイント)   Date: 2010/01/20(水) 09:59   No:46675     
Title: Re:助けてください..    
nonさん

まだ1年です。


たいちうさん


友達は自分のことでいっぱいいっぱいそうです。


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

Name: non  ..比類無きプログラマー(88,812ポイント)   Date: 2010/01/20(水) 10:07   No:46677     
Title: Re:助けてください..    
どうのようなシステムの大学か知りませんが、
1年ならこの単位だけ落としても留年にならないのではないの?
それより、将来の方向が違うなら、早く方向転換した方がいいと思う。
長い人生なんだから、1年ぐらい遅れても大丈夫。自分が本当に進みたい方向に
目指しましょう。その能力と根性があればですが。
やる気のない学部で残りを過ごしても、お金と時間がもったいないだけです。


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

Name: 山崎  ..プログラマー(35,003ポイント)   Date: 2010/01/20(水) 10:10   No:46678     
Title: Re:助けてください..    
どうもこんにちは、山崎です。

ものすごく切羽詰っているようですね・・・。

留年となると、それから先の進路、ひいては就職に及ぼす影響は無視できないはず・・・。
仮に自業自得で留年の危機に瀕してしまっているとしても、
その人のその先の人生に関わってしまう問題ですので気軽に見捨てられませんね・・・。
(nonさんのご意見を非難しているわけではございませんので、どうかご理解を)

ただ、私は他の皆さんのように熟練していないので、
まずは私が手助けできる課題なのかどうか判断させて頂けないでしょうか。
いくつか質問させてください。

1、EGGXの使用は必須なんですか?
2、CあるいはC++はどのくらいまでわかっておられるのでしょう。
  どんなことならできますか?具体的な例をいくつか挙げて頂けるとこちらはつかみやすいです。
3、仕様の変更は認められるのでしょうか?
  「並列と直列の回路を作り、電流が流れるようなアニメーションをさせ、
  直列のほうが早く電球の明かりが消える」
  という事柄を満たせば、後はどのようにしてもよいのでしょうか?
4、ご自身がプログラムを書くのでしょうか。
  それとも、私たち回答者が全てのプログラムを書くのでしょうか。
5、仮に私たち回答者がプログラムを書いたとして、そのプログラムを先生に提出したとしたら、
  それでも単位が出るのでしょうか?
6、そもそも、違う課題に変更することは絶対に不可能なのですか?
7、この課題ができなければ、本当に絶対留年なんですか?

もし上の質問にご回答頂いても、場合によっては私では手助けできないこともあります。
どうか、それだけはご了承ください。


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

Name: クリス  ..かけだし(2,253ポイント)   Date: 2010/01/20(水) 10:20   No:46680     
Title: Re:助けてください..    
nonさん

留年してしまいます。  2年に進級できたれ転学部するつもりです。


山崎さん

1...必須です。
2...条件分岐などはできるレベルです。
3...そういうことです。
4...努力してこの結果なので自分では手がつけれないんです..
5... おそらくそうだと思います...
6... 不可能です。
7...留年です...


みなさん本当にありがとうございます。


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

Name: softya  ..比類無きプログラマー(97,351ポイント)   Date: 2010/01/20(水) 10:23   No:46681     
Title: Re:助けてください..    
>まだ1年です。 
1年でこの調子じゃ、4年間など絶対無理です。
進路について考えなおすべきでしょう。

今ハッキリしているのは、ここにはEGGXを知っている人はだれもいないと言うことです。
なので、クリスさんがプログラムを作らなきゃいけませんし、テストもしなくてはいけません。
※ 当たり前のことなんですけどね。
あれから何のプログラムもしてないと思われます。違いますか?

精神的な問題で出来ないと言うなら、神経内科などで診断書を書いてもらって教授に提出して課題の変更をお願いして下さい。その方が建設的行動です。
なにもせず、このまま時間が過ぎて行くだけでは何も良いことは生まれませんよ。

なので、どうするか決めて下さい。
(1)とにかくプログラムを始めて、こちらのアドバイスを受けながらなんとかやり遂げる。
(2)神経内科などで診断書を書いてもらって教授に提出して課題の変更をお願いする。
(3)このままこの無駄なやりとりを続けて、締切まで時間を浪費する。
(4)学部の変更など進路について考え直す。この課題については放棄で留年を覚悟する。



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

Name: バグ  ..ハッカー(184,058ポイント)   Date: 2010/01/20(水) 10:41   No:46684     
Title: Re:助けてください..    
EGGXってこれかな?

http://www.ir.isas.jaxa.jp/~cyamauch/eggx_procall/


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

Name: たいちう  ..熟練のプログラマー(50,066ポイント)   Date: 2010/01/20(水) 10:43   No:46686     
Title: Re:助けてください..    
友人に頼めないならば、こんな選択肢もあります。

(5)お金で解決する。

電話帳などで近所の小さなソフトハウスを探してください。
丁度手が空いている人がいる、とか、
小額であっても売り上げをあげたいとかという理由で、
引き受けてくれる会社が見つかるかもしれません。

但し小額というのは企業にとってです。
普通は1日当たり3万円というのが最低の人件費ですので、
目安にしてください。


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

Name: asd  ..上級者(19,862ポイント)   Date: 2010/01/20(水) 10:58   No:46688     
Title: Re:助けてください..    
既に多くの方が回答されていますが、「留年」することを盾にして課題作成依頼を出しているようにしか見えません。

人生に関わるから簡単に見捨てられないという意見の方もいるようですが、
正直今のままの考えで就職されても、期限(納期)ぎりぎりまで放っておいて「私の首が掛かっています。もう仕様、期限(納期)の変更はできません。プログラムを作ってください」と言い出しそうで怖いです。

また、留年なんかよりうつ病発症により人生を台無しにすることのほうがよっぽど問題です。
ですので早めの進路変更または、心療内科にかかり診断書を書いていただき、休学などの手続きをとることをお勧めします。

現在の状況を見る限り(文面から読み取れる情報のみですが・・)
手が震えるなど心身に影響が出ていますので、早急に心療内科にかかってください。


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

Name: Ma  ..プログラマー(31,341ポイント)   Date: 2010/01/20(水) 11:27   No:46692     
Title: Re:助けてください..    
>5、仮に私たち回答者がプログラムを書いたとして、そのプログラムを先生に提出したとしたら、 
  それでも単位が出るのでしょうか?
>5... おそらくそうだと思います... 


私にとって大学はこれからなので、よくわかりませんが、
他人がやった作業を自分のものにして単位が出ると?本気ですか?
それは先生に誰かが作ってくれたプログラムだということを黙っていた場合、というわけではないですよね?

もし、教授だか先生だかがそれを知っていて単位が出るというなら私はその教育システムにがっかりですね…。

私語失礼しました。
どうしても、これは言いたかったのでお許しください。


*追記

皆さんが言っているようにあなたの環境はココにいる方と比べてかなり特殊です。
切羽詰っているから手伝ってあげたいと思うところですが、
知らないライブラリ、知らない環境では残念ながら助けられません・・・。
というのは、ここにいる人の多くは、助けるためにはMACを買って件のライブラリをダウンロードして
1から覚えないといけないという状態に近いと思います。

ともかく課題を終わらせたいだけなら、ここは本当に大学の教職員に教えてもらうか、お金でも使って誰かに頼るかしたほうがいいのかもしれません。
(ただし、それがばれて留年や退学しても責任は負えませんが…) 編集済み


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

Name: 通りすがり  ..上級者(18,685ポイント)   Date: 2010/01/20(水) 11:35   No:46693     
Title: Re:助けてください..    
(6)教員にお願いして教えてもらうか,誰かを紹介してもらう

友達に教えてもらえないのなら,教員に聞くのが順当だと思います.
もちろん,ある程度の叱責があるのは覚悟の上で.
(最近は,手が出ることも無いと思いますし.)

教員が忙しくても,就活もなく,卒論や修論も書いていない,
進学組のB3やM1を紹介してくれるかもしれません.
遠くの他人より,近くの他人を頼って下さい.

ただ,「頼る」と言っても,ここでの投稿ように,
完全に他力本願というのではなく,
あくまで「教えてもらう」という意味です.
決して「作ってもらう」という意味ではありません.

それこそ,お金でも払わない限り,
そんな身勝手な人を助けようという人は,
そういるものではありません.


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

Name: SooA [URL]  ..プログラマー(26,497ポイント)   Date: 2010/01/20(水) 12:01   No:46696     
Title: Re:助けてください..    
どんな事情があろうと、能力を測るための課題なのですから
できなければ留年というのは当たり前の事。

課題が出題されたのは何時のことですか?
完成させるまでの見透しが甘かったとしか言えません、
自分には何ができて何が出来ないか、
もっと早い段階で限界を把握し、解らないところの
教えを受けていれば結果は違ったはず。

リミットまでまだあります、学ぶ心を持って
基本的な命令文から始めてみてはどうでしょう。

取りあえず、y = 500 ; の一行を消して実行してみてはどうかな?
x と y をどうにかすれば電流の描画される位置が変わることが解るはず。


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

Name: たいちう  ..熟練のプログラマー(50,358ポイント)   Date: 2010/01/20(水) 12:05   No:46697     
Title: Re:助けてください..    
Maさん

> もし、教授だか先生だかがそれを知っていて単位が出るというなら
> 私はその教育システムにがっかりですね…。

Wikipediaによると大学進学率は45.5%(2006)だそうです。
学生の質の低下も当然でしょう。
質の低い学生をどんどん留年・退学させていけば、
「遊べない大学」などというレッテルが貼られ、
志望者が減って経営できなくなるのではないかな。
存在意義が問われているわけです。


> それは先生に誰かが作ってくれたプログラムだということを黙っていた場合、
> というわけではないですよね?

質問者が「プログラム作成にあたりインターネットを活用しました」
と提出しても全然驚きません。丸投げしている時点で。
自分の研究室の学生ならともかく、1年生の担当教官ならば、
本人が全く理解していないと判っても、黙認するかもしれません。
その学生に実力が付かなくても教官は困らないでしょうから。


# かつて私が非常に質の悪い学生であって留年も経験していることは
# ここには書かないでおこう。


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

Name: Naohiro19  ..入門者(3,416ポイント)   Date: 2010/01/20(水) 12:08   No:46698     
Title: Re:助けてください..    
Dixqさん>
eggxライブラリはアップルコンピュータ社が開発したMac用のグラフィックライブラリなのでMacでしか動きません。


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

Name: Ma  ..プログラマー(31,675ポイント)   Date: 2010/01/20(水) 12:15   No:46701     
Title: Re:助けてください..    
>質問者が「プログラム作成にあたりインターネットを活用しました」 
>と提出しても全然驚きません。丸投げしている時点で。 
>自分の研究室の学生ならともかく、1年生の担当教官ならば、 
>本人が全く理解していないと判っても、黙認するかもしれません。 
>その学生に実力が付かなくても教官は困らないでしょうから。 


なるほど…それが多くの大学の実態なんですね。
やはり、高校までは先生が生徒を気にしてくれているっていう優しさがあるんですね。
大学での生徒への無関心さに、なまけないようにしたいものです・・・。
勉強になりました。ありがとうございます。<(_ _)>

># ここには書かないでおこう。

wwwwwwww
たいちうさんって面白い方ですね。(笑

*追記
おっと、本題からずれてしまい申しわけないです。 編集済み


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

Name: Dixq (管理人)  ..ウィザード(1,142,040ポイント)   Date: 2010/01/20(水) 12:43   No:46702     
Title: Re:助けてください..    
なるほど、マックでしか動かないのですか。
それならたかぎさんのでば…(ry

>クリスさん
将来を考えろとか、精神科に行けという意見は聞きたくないような話かもしれませんが、
もし今までのクリスさんの話が全て本当ならすごく大事な話だと思いますよ。
普通の人は少し位苦手な課題が出ても手が震えたりしません「震えるほど嫌い」という例えではなく、本当なら精神的に異常があります。
高校や大学になれていると、風邪や病気は大して怖くないでしょう。親が払う金で病院へ行き、風邪でした、病気でしたと言えば教育機関は最大限補助してくれますから。
でも社会に出たらそうはいきません。精神的にやられると特にひどいです。
社会にでたストレスで、精神病になった友達がいますが、これから先絶望的だと言ってます。精神的な病気は生涯を狂わせます。という事で、治療も本気で考えましょう。

また、ここはプログラムが好きな人が集まる場です。少なくとも回答者さんはそうでしょう。
やる気のある、勉強する意欲のある人に対しては応援したい気持ちになると思います。
しかし、やる気もないし、今後勉強するつもりもない。(プログラムが好きな人達が集まる場で)「プログラムなんか大嫌いだ」という発言をしていては消極的になって当然です。
例えば誰かにプレゼントするとき、相手が嫌いなものを、高いお金払って買う気にならないだろうことと同じです。

ということで、

プログラムによって本気で精神的に異常をきたすのならいますぐやめるべきです。先生に相談しましょう。

少し苦手な位ならがんばりましょう。もっと意欲的に取り組めば克服出来るはずです。
逃げ出す前に一度は全力で頑張ってから判断してみては。


ところで、eggxじゃないとダメなんですか?
マルチプラットフォーム対応で2Dライブラリというと私はSDLしか使えません…。
それでよければ助けられるかも。


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

Name: softya  ..比類無きプログラマー(98,774ポイント)   Date: 2010/01/20(水) 12:54   No:46703     
Title: Re:助けてください..    
eggxってこれとは違うんでしょうかね?
ターゲットにMAC OSXも入っていますし。
http://www.ir.isas.jaxa.jp/~cyamauch/eggx_procall/

もしこれだとしても、導入に手間が掛かりそうですが。
cygwinにX11が必要でって言われても入れた事ないのでどれだけ手間がかかるかわかんないですが。
私のサポートしているもうひとりの人が同じライブラリっぽいので、インストールを始めてみましたが今日中に終わるかどうか(汗)。片手間にやってみてます。
http://www.play21.jp/board/formz.cgi?action=res&resno=46097&page=&id=dixq&rln=46700
このライブラリ、一部の大学で人気なんでしょうか?

※インストールしたからと言って、クリスさんのコードを書くことが出来る時間がある訳じゃないので誤解なき様に。 編集済み


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

Name: 山崎  ..プログラマー(35,293ポイント)   Date: 2010/01/20(水) 12:57   No:46704     
Title: Re:助けてください..    
おっと、私が画像処理の授業を受けている間に多くの返信があったようですね。

私の質問の4つ目はクリスさんのやる気があるかどうか見るという意図があったのですが…。
どうやら、もうご自身でコードを書く気は尽きている、と受け取ってよろしいでしょうかな…。

EGGXの使用が必須だとすると、残念ながら私では手助けすることはできないようです。
他の皆さんと同じように、EGGXを動かす環境を整えることができません。

今残っている選択肢は、softyaさんやたいちうさんがおっしゃるようなものだけでしょう。
あるいは、通りすがりさんがおっしゃるように、
担当の先生に泣きついて教えてもらうか、焼き肉でもおごって友達に頼るかでしょう。
早めに先生に「どうしてもできません」と相談して指示を仰ぐのが、一番現実的ではないでしょうか。

厳しい意見も多く出ていますが、どうか頑張ってください。
お手伝いできず申し訳ないです。


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

Name: Ma  ..プログラマー(31,805ポイント)   Date: 2010/01/20(水) 13:01   No:46705     
Title: Re:助けてください..    
Dixqさんが、いい感じにみんなの意見をまとめてくれたと思います

>ところで、eggxじゃないとダメなんですか?
だめらしいです。(↑参照:どこかのQ&Aにかいてあった。)

>このライブラリ、一部の大学で人気なんでしょうか?
どうなんでしょうね。
先のプログラムを見たところline 関数が多発しててとても使いづらいライブラリのような印象をもちましたが・・・ね。
とはいえ間違った使い方をしたコードだったのかもしれませんが。

それにしても、softyaさんすごい協力的で感動><


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

Name: ラーグ  ..入門者(4,904ポイント)   Date: 2010/01/20(水) 13:20   No:46707     
Title: Re:助けてください..    
まるで自分の事の様でみなさんのコメントを見ていかに自分が甘いか分かります…

自分も今いっぱいいっぱいでソース教えてもらえるなら教えて欲しいみたいな気持ちもありますがが、反面アドバイスを頂いて少しでも目標のプログラムに近づいた時はプログラミング楽しいと感じます
正直アドバイスに頼りすぎてしまっているというのも痛感していますが…

トピ違いの内容なのに横から口出しすいませんでしたm(__)m


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

Name: SooA [URL]  ..プログラマー(26,623ポイント)   Date: 2010/01/20(水) 13:38   No:46708     
Title: Re:助けてください..    
>先のプログラムを見たところline 関数が多発してて

line に関してはおそらく LineTo と同じですね。
PENUP が無い場合は最後に PENDOWN した座標から
続けて線が引けるんじゃないかと思います。
(電球球部分はそうなってますし。)

画像からラインの座標を合わせてて気がついたんですが
左下の座標が 0,0 右上方向プラス値になってるぽいですね。

塗りつぶし四角形の描画に関しては
fillrect( x,y, hx, hy ) ;
x,y 開始位置
hx,hy 開始位置からの幅
hx, hy も 右上にプラス値(訂正しました)

混乱しそう。 編集済み


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

Name: Ma  ..プログラマー(31,879ポイント)   Date: 2010/01/20(水) 13:58   No:46710     
Title: Re:助けてください..    
>(電球球部分はそうなってますし。) 
絶対画像にしたほうが楽だと思う件。
とはいえ、例のライブラリが画像にどう対応しているのか知らないので実際のところどうなのか分かりませんが…。


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

Name: 通りすがり  ..上級者(18,693ポイント)   Date: 2010/01/20(水) 14:46   No:46713     
Title: Re:助けてください..    
ところで当の本人はどこにいった?

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

Name: shilfia  ..入門者(3,547ポイント)   Date: 2010/01/20(水) 15:14   No:46715     
Title: Re:助けてください..    
いつのまにか返信数がすごいことに・・・。
大学一年生で、この授業(?)を落としたら留年って凄く厳しいですね。
必修科目でも来年取ればいいっていうのがメジャーだと思うんですが。
仕組みが良く分からないです。

自分はEGGXなんて初めて知ったし、プログラミング技術もみなさんと比べればかなり低いので課題自体のアドバイスはできませんが・・・。
簡単そうだからって理由での進路選択は危険だと思いますよ。
まだやり直せる時期だと思うのでいろいろ考えてみてください。


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

Name: たかぎ [URL]  ..ハッカー(155,208ポイント)   Date: 2010/01/20(水) 17:18   No:46716     
Title: Re:助けてください..    
> それならたかぎさんのでば…(ry 

呼びました?
まあ、うちの会社は、困っている人には必ず手を差し伸べるのが主義ですので、やってもいいですよ。
ただし、クリスさんに進級がかかっているように、私も生活がかかっていますので、ただで引き受けるわけにはいきません。
急ぎの仕事ですのでかなり無理をしないといけませんが、「金に糸目はつけないのでやってくれ!」というなら、そうおっしゃってください。


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

Name: softya  ..比類無きプログラマー(99,174ポイント)   Date: 2010/01/20(水) 18:19   No:46725     
Title: Re:助けてください..    
cygwinにx11入れて、さらにeggxは導入時に多少エラーが出ましたね。なんとか終わりましたけど。
これでラーグさんの件は、サポートしやすくなりました。
半日ぐらいの時間(大半はcygwinの再インストール時間)とUnix/Linuxの環境構築の知識が必要なので始めての人は導入はオススメ出来ませんね。


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

Name: sizuma [URL]  ..プログラマー(30,246ポイント)   Date: 2010/01/20(水) 18:22   No:46726     
Title: Re:助けてください..    
>金に糸目はつけないのでやってくれ!
さすがに担当教授もコーディングのレベルが違いすぎてなんか言われるのでは・・・
提出期限も延ばしてもらってるようですし。
わざと適当な書き方で書いて上げられるなら大丈夫かもしれませんけど。
それに、困ってる人に手を差し伸べる、っていってもカンニング手伝いみたいな感じで、僕の倫理観からしたらどーかな?って思いますね。



>直路の電池は並列の電池よりも早く無くなり電球が消えるというプログラム
電子の消耗の仕方とかそもそも電池の詳しい消耗メカニズムも知らないんですが、結局はどちらが多く何Wを消費するのかの式があって、電池の容量がなくなる時間を計算して、その時間に光を消せばいいってだけなのではないのかと僕は思ったのですが?
電流は詳しくないので見当なのでしょうかね。


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

Name: たかぎ [URL]  ..ハッカー(155,021ポイント)   Date: 2010/01/20(水) 18:30   No:46727     
Title: Re:助けてください..    
> それに、困ってる人に手を差し伸べる、っていってもカンニング手伝いみたいな感じで、僕の倫理観からしたらどーかな?って思いますね。 

そんなにマジレスしなくても...


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

Name: sizuma [URL]  ..プログラマー(30,323ポイント)   Date: 2010/01/20(水) 18:49   No:46730     
Title: Re:助けてください..    
>そんなにマジレスしなくても... 
失礼しました。
別にそんなに真面目に書いたつもりはなかったんですが、自分の文章よんだら確かにすごいマジな感じですね^^;


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

Name: たかぎ [URL]  ..ハッカー(155,083ポイント)   Date: 2010/01/20(水) 19:54   No:46737     
Title: Re:助けてください..    
EGGSも結構面白そうですね。
ちょっとしたものを作るのであれば、それなりに使えそうです。
ちょうど、本日最新バージョンがリリースしたようですし。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,142,248ポイント)   Date: 2010/01/20(水) 22:57   No:46745     
Title: Re:助けてください..    
>> たかぎさん

すごい、全部読んでるんですね^^;

結局今日はSDLでよいのやら悪いのやらわからなかった・・。
クリスさんが来ないので何をしてよいかわからないですね・・。

すごい切羽詰まったみたいな感じだったけど、もう諦めちゃったのかな?


そういえばラーグさんの課題と似てますね。eggxだし、提出期限も・・。


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

Name: ぽこ  ..初心者(5,325ポイント)   Date: 2010/01/20(水) 23:56   No:46754     
Title: Re:助けてください..    
> すごい切羽詰まったみたいな感じだったけど、もう諦めちゃったのかな?

これに一票。
夜更かしして頑張った様子もないし、最初からやる気もなかったのでは?
#まあ、かなり非難浴びちゃったから、別の掲示板やコミュニティに行ったかもしれませんが。。

クリスさんが投稿したソースを実行した第一印象は、「あとチョットじゃん」なんですけどねぇ。
勿体無い。


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

Name: たかぎ [URL]  ..ハッカー(155,037ポイント)   Date: 2010/01/21(木) 00:05   No:46755     
Title: Re:助けてください..    
EGGXも面白そうなので、ちょっと作ってみました(でも公開しない)。

> クリスさんが投稿したソースを実行した第一印象は、「あとチョットじゃん」なんですけどねぇ。

実際に作ってみた感想としては、まだまだこれからが本番です。


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

Name: softya  ..比類無きプログラマー(99,478ポイント)   Date: 2010/01/21(木) 01:11   No:46760     
Title: Re:助けてください..    
>>クリスさんが投稿したソースを実行した第一印象は、「あとチョットじゃん」なんですけどねぇ。 
>実際に作ってみた感想としては、まだまだこれからが本番です。

実際には動的な部分がまったく出来ていないので、まだまだですね。

クリスさんは戻ってきませんね。
>No:46627 助けて下さい。 春休み必死で努力して克服すると誓うので手伝って下さい...
>No:46645 もうプログラミングをしようとしたら手が震えるんですよ..   
>No:46649 将来はちがう業界に行こうとしてます。大学は、卒業したいと考えております。すいません。  
>No:46666 ある事情より今の学部にいます。
>No:46680 留年してしまいます。2年に進級できたれ転学部するつもりです。 
発言を並べてみると、その場限りの適当な返答をしているとしか思えません。
クリスさんの釈明を伺いたいところです。


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

Name: ぽこ  ..初心者(5,425ポイント)   Date: 2010/01/21(木) 01:15   No:46761     
Title: Re:助けてください..    
>実際に作ってみた感想としては、まだまだこれからが本番です。

アニメーションの質が大分違うんですかね?
私は、電流が流れているアニメーションは2枚の絵を切り替えることで実現しようと思ったので。。


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

Name: たかぎ [URL]  ..ハッカー(155,059ポイント)   Date: 2010/01/21(木) 01:21   No:46762     
Title: Re:助けてください..    
> 私は、電流が流れているアニメーションは2枚の絵を切り替えることで実現しようと思ったので。。

電流は、正方形を移動させる必要があるみたいですね。

今回EGGXを使ってみて、かなり使い易かったので、もっといろんなことを試してみたいと思います。


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

Name: softya  ..比類無きプログラマー(99,501ポイント)   Date: 2010/01/21(木) 01:22   No:46763     
Title: Re:助けてください..    
>私は、電流が流れているアニメーションは2枚の絵を切り替えることで実現しようと思ったので。。

2枚の絵だと、電流がどちらの方向に流れているか分からないのではないでしょうか?
せめて3枚必要だと思いますよ。


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

Name: たかぎ [URL]  ..ハッカー(155,116ポイント)   Date: 2010/01/21(木) 01:29   No:46765     
Title: Re:助けてください..    
こういう感じに、並列つなぎの場合は電流を二股に分ける必要があるので、プログラミングが苦手な人にはちょっと難しいですね。


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

Name: たかぎ [URL]  ..ハッカー(155,131ポイント)   Date: 2010/01/21(木) 01:32   No:46766     
Title: Re:助けてください..    
せっかくなので、電池が消耗したところの画像も貼っておきます。


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

Name: たかぎ [URL]  ..ハッカー(155,180ポイント)   Date: 2010/01/21(木) 01:36   No:46767     
Title: Re:助けてください..    
今気づきましたが、なぜ直列つなぎの方が並列つなぎより電池が早くなくなるのか謎ですね。
# 何も考えずに書いてある通り作ってしまいました。


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

Name: ぽこ  ..初心者(5,614ポイント)   Date: 2010/01/21(木) 01:38   No:46768     
Title: Re:助けてください..    
>たかぎさん
>電流は、正方形を移動させる必要があるみたいですね。

この要件、正直疑問なんですよね。
制御文程度しか教えていない大学1年生にここまで要求しているとは思えず、
クリスさんの思い込みなんじゃないかな〜と。

>softyaさん
>2枚の絵だと、電流がどちらの方向に流れているか分からないのではないでしょうか? 
>せめて3枚必要だと思いますよ。

アニメーションの質に関しては目を瞑ってください。
方向が分からなきゃダメなら正方形じゃなくて、三角形か矢印を描画すれば
2枚の絵でも方向は判るはず。。


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

Name: たかぎ [URL]  ..ハッカー(155,268ポイント)   Date: 2010/01/21(木) 01:41   No:46769     
Title: Re:助けてください..    
そういえば電流の方向も辺です。
これも何も考えずに、元のソースと同じ方向に正方形を移動させたのですが、これでは陰極から陽極に電流が流れることになってしまいます。
なんか、よく見ると突っ込みどころ満載ですね。



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

Name: ぽこ  ..初心者(5,716ポイント)   Date: 2010/01/21(木) 01:42   No:46770     
Title: Re:助けてください..    
>今気づきましたが、なぜ直列つなぎの方が並列つなぎより電池が早くなくなるのか謎ですね。

私もクリスさんの最初の投稿を見たとき、それを疑問に思っていましたが、
きっと直列回路側の電池は中古なんですよ。


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

Name: たかぎ [URL]  ..ハッカー(155,279ポイント)   Date: 2010/01/21(木) 01:43   No:46771     
Title: Re:助けてください..    
> きっと直列回路側の電池は中古なんですよ。

電球の消費電力が違うのかも。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,142,939ポイント)   Date: 2010/01/21(木) 07:58   No:46777     
Title: Re:助けてください..    
なんだ、Unix環境なら使えるんじゃん!><
Macでしか使えない制限があるのかと思ってダメだと思ってましたけど、手もとのLinuxでも動きそうですね・・。

たかぎさんが絶賛していらっしゃるので、私もちょっと興味があります。
使ってみようかな?

実行速度や、出来る事の幅としてはどの程度でした?
リファレンスをザッと見た感じでは、関数はあまり多くないので、
(音楽関連は?変形描画は?αブレンド描画は?と言った感じ・・?)
出来る事は限られそうな気がしますが、
DXライブラリのように非公開関数を使って細かい事も出来るようになるのでしょうか。

----

クリスさん、いらっしゃらなくなりましたね。
友達に教えてもらってもう解く必要がなくなったのかな?


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

Name: たかぎ [URL]  ..ハッカー(155,413ポイント)   Date: 2010/01/21(木) 08:04   No:46779     
Title: Re:助けてください..    
> 実行速度や、出来る事の幅としてはどの程度でした? 

この電球プログラムぐらいでは、実行速度まではわからないですね。
普通のXアプリと比べて遜色はないと思いますが...

> リファレンスをザッと見た感じでは、関数はあまり多くないので、出来る事は限られそうな気がしますが、 
> DXライブラリのように非公開関数を使って細かい事も出来るようになるのでしょうか。

EGGXだけでできることは限られています。
非公開関数というより、どうしてもということなら自分でXを直接呼ぶ関数を作った方がよいかもしれません。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,002ポイント)   Date: 2010/01/21(木) 08:09   No:46781     
Title: Re:助けてください..    
こんな朝早く即レス頂けるとは思いませんでした^^;

なるほど、そうですか。
音楽関連、変形描画、αブレンド関数は最低限欲しいところですね・・。
ただちょこっとした物を作るにはよさそうですね。


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

Name: ラーグ  ..入門者(4,990ポイント)   Date: 2010/01/21(木) 08:15   No:46782     
Title: Re:助けてください..    
>そういえばラーグさんの課題と似てますね。eggxだし、提出期限も・・。

自分も思いました
提出期限が自分と非常に近い点と環境がほぼ一緒だし…

これだけははっきりしておきますが同一人物では無いですよ
疑いかけられるのも嫌なんで…


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

Name: たかぎ [URL]  ..ハッカー(155,433ポイント)   Date: 2010/01/21(木) 08:17   No:46783     
Title: Re:助けてください..    
> 音楽関連、変形描画、αブレンド関数は最低限欲しいところですね・・。

そのレベルのことをやるならSDLの方がよいと思います。


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

Name: non  ..比類無きプログラマー(89,041ポイント)   Date: 2010/01/21(木) 08:41   No:46784     
Title: Re:助けてください..    
>今気づきましたが、なぜ直列つなぎの方が並列つなぎより電池が早くなくなるのか謎ですね。

確かにそうですね。並列の方が早くなくなるはずですね。
また、最初の状態(電池満タン)で、直列と並列では、明るさが違わなくてはいけません。

 


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

Name: クリス  ..かけだし(2,281ポイント)   Date: 2010/01/21(木) 08:45   No:46785     
Title: Re:助けてください..    
みなさん ありがとうございます。

諦めようと思います。


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

Name: light  ..ぴよぴよ(85ポイント)   Date: 2010/01/21(木) 08:56   No:46786     
Title: Re:助けてください..    
これだけレスもらってそれはないんじゃw

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

Name: dic  ..熟練のプログラマー(48,949ポイント)   Date: 2010/01/21(木) 09:26   No:46787     
Title: Re:助けてください..    
学生用ライブラリで
つっこんだ内容までは作ってないんでは?
scanfみたいに


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

Name: conio [URL]  ..比類無きプログラマー(78,067ポイント)   Date: 2010/01/21(木) 12:06   No:46788     
Title: Re:助けてください..    
あれ、やけにアッサリ試合終了してしまいましたね。

んー
「冬休みから直前まで ずっと自力で何とかしようとしていた」という
根気のある人らしからぬ決断です。

間に合うかどうかは置いておいて、
最後までやろうという意思は持つべきなのではないのでしょうか?


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

Name: softya  ..比類無きプログラマー(99,628ポイント)   Date: 2010/01/21(木) 12:15   No:46789     
Title: Re:助けてください..    
>今気づきましたが、なぜ直列つなぎの方が並列つなぎより電池が早くなくなるのか謎ですね。 

マジレスすると電気の基礎知識がないとしか思えませんね。
電子工学系の学生だとしたら、そっちの方が問題ですね。

>みなさん ありがとうございます。
>諦めようと思います。

あっさりですね。
とりあえず、自分でプログラミングする気はなかったって事でしょうね。


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

Name: 通りすがり  ..上級者(18,767ポイント)   Date: 2010/01/21(木) 12:16   No:46790     
Title: Re:助けてください..    
発言がその場その場で適当でしたから、ずっと頑張っていたのではなく、直前になってあわてふためき、途中まで誰かに教えてもらったと思われても仕方ありませんね。

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

Name: たかぎ [URL]  ..ハッカー(155,473ポイント)   Date: 2010/01/21(木) 12:24   No:46791     
Title: Re:助けてください..    
> 電子工学系の学生だとしたら、そっちの方が問題ですね。 

いや、小学生レベルの内容ですからね。
それとも、ゆとり教育では習わないのでしょうか?


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

Name: Dixq (管理人)  ..ウィザード(1,143,110ポイント)   Date: 2010/01/21(木) 12:27   No:46792     
Title: Re:助けてください..    
eggxの導入終わり、簡単なプログラムが実行出来るようになりました〜……って、え〜、諦めるんですか……。
残念…。

>ラーグさん

あぁ、そのようなつもりはありませんでした。
変に誤解を招くような事を言ってすみません。
もしかしたら同じクラスの人だったりしてって意味でした。

世間は狭いもんですし、ここにいる人達も、案外色んな人がご近所さんだったりするかもしれませんね。


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

Name: ラーグ  ..初心者(5,045ポイント)   Date: 2010/01/21(木) 13:15   No:46794     
Title: Re:助けてください..    
>もしかしたら同じクラスの人だったりしてって意味でした。

大いにありそうですね…

自分は諦められる根性も座ってないんでなんとかギリギリまで粘る気ですけどね…(テストは壊滅しそうですが)


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

Name: SooA [URL]  ..プログラマー(26,705ポイント)   Date: 2010/01/21(木) 13:21   No:46795     
Title: Re:助けてください..    
>みなさん ありがとうございます。 
>諦めようと思います。

ではメモ帳に書いたソースDELっと。


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

Name: たかぎ [URL]  ..ハッカー(155,491ポイント)   Date: 2010/01/21(木) 13:32   No:46798     
Title: Re:助けてください..    
> 自分は諦められる根性も座ってないんでなんとかギリギリまで粘る気ですけどね…

その辺が留年を繰り返す人とそうでない人の差です。


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

Name: たいちう  ..熟練のプログラマー(50,512ポイント)   Date: 2010/01/21(木) 13:53   No:46799     
Title: Re:助けてください..    
。゜(゜´Д`゜)゜。ウァァァン 

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

Name: sizuma  ..プログラマー(30,553ポイント)   Date: 2010/01/21(木) 14:17   No:46801     
Title: Re:助けてください..    
>たいちうさん
同じく。゜(゜´Д`゜)゜。


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

Name: dic  ..熟練のプログラマー(48,958ポイント)   Date: 2010/01/21(木) 14:21   No:46804     
Title: Re:助けてください..    
これはひどい

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

Name: たかぎ [URL]  ..ハッカー(155,537ポイント)   Date: 2010/01/21(木) 14:25   No:46805     
Title: Re:助けてください..    
たいちうさんやsizumaさんは留年を繰り返すんですか?
まだ時間があるのに簡単に諦めてしまうようだと、留年しかないですね。

追記
たいちうさんとsizumaさんの発言は、タイミング的に私に対するレスかと思いましたが、よく考えてみると違いますね。
失礼しました。
 編集済み


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

Name: shilfia  ..入門者(3,613ポイント)   Date: 2010/01/21(木) 14:25   No:46806     
Title: Re:助けてください..    
>それとも、ゆとり教育では習わないのでしょうか? 

自分もゆとり世代ですが、電力の話は一通り学びましたよ。
単純に質問者様が忘れてたか授業聞いてなかったか、そのへんだとおもいます。


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

Name: asd  ..上級者(19,848ポイント)   Date: 2010/01/21(木) 14:31   No:46807     
Title: Re:助けてください..    
>みなさん ありがとうございます。
>諦めようと思います。

はぁ。
そんな簡単に諦めるのなら「進級がかかっている」とか「手が震える」とか
代理作成を強要するようなことを書く必要なかったんじゃないですか?
---
以下、雑談です。

1年次で留年確定するのが不思議と思われている方もいらっしゃいますが、
私の卒業した大学では、2年次に進級する際に、

・特定の授業の単位を取得していること
・単位数が一定以上あること

が求められてました。
(情報系の学科だったので情報系基礎の科目がほとんどです)
なので1年で留年が確定する大学もあると思いますよー。
基礎ができていないのに進級させても結局は挫折してしまうという判断からそうなっているそうです。


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

Name: たかぎ [URL]  ..ハッカー(155,566ポイント)   Date: 2010/01/21(木) 14:31   No:46808     
Title: Re:助けてください..    
> 自分もゆとり世代ですが、電力の話は一通り学びましたよ。
> 単純に質問者様が忘れてたか授業聞いてなかったか、そのへんだとおもいます。

そうですよね。
この程度のことが分からないと日常生活にもときどき支障が出ます。


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

Name: sizuma  ..プログラマー(30,778ポイント)   Date: 2010/01/21(木) 14:33   No:46809     
Title: Re:助けてください..    
>たかぎさん
過去にあきらめて単位を落としたことがありました・・
たいちうさんも、昔はそんなことがあった、って意味だと思います。


>電力
塾講師と家庭教師をしてますが、オームの法則レベルは教えますよ。
高校生の理科は教えてないですが、僕の時代(5年間くらい)はやった気がしますね。
コンデンサとか。簡単なものでしたがね。


>必要単位
大学次第なんでしょうね。
僕は3年に必要単位、だったかな。だから1年のは2年の授業に被らなければセーフでしたね。


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

Name: たかぎ [URL]  ..ハッカー(155,598ポイント)   Date: 2010/01/21(木) 14:39   No:46810     
Title: Re:助けてください..    
> 過去にあきらめて単位を落としたことがありました・・

単位を落とすぐらいはあるでしょうが、留年となるとよほどのことです。

> 塾講師と家庭教師をしてますが、オームの法則レベルは教えますよ。 

それで当然だと思います。
まあ、オームの法則は公式だけ覚えて、意味を理解しないことは多々あるでしょうが...


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

Name: shilfia  ..入門者(3,781ポイント)   Date: 2010/01/21(木) 14:44   No:46811     
Title: Re:助けてください..    
>単位

なるほど。
自分のところは卒業までに必要な単位を取っていれば大丈夫という方式です。
ただし、三年次以降は一、二年次の知識を活用するのである程度理解していないと大変苦しいです。
情報系だと基礎ができていない人から脱落していく傾向が強いのかな。
プログラムに理想を抱いて、実際にやって挫折するひとがちらほらいます・・・。


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

Name: ぽこ  ..初心者(5,725ポイント)   Date: 2010/01/22(金) 00:08   No:46830     
Title: Re:助けてください..    
諦めちゃいましたか。
残念です。


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



Name: 256bit  ..入門者(2,931ポイント)   Date: 2010/01/21(木) 22:04   No:46818       
Title: 「32. 乱数の初期化の仕方。 」が開きません    
 C言語プログラミングの館の32節がクリックしても開きません。
 クリックできるかどうか確認をお願いします。
 


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


Name: SooA [URL]  ..プログラマー(26,853ポイント)   Date: 2010/01/21(木) 22:11   No:46820     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
開きませんね。

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


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

Name: たかぎ [URL]  ..ハッカー(155,610ポイント)   Date: 2010/01/21(木) 22:16   No:46821     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
開きました。
証拠写真付き


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

Name: 256bit  ..入門者(2,959ポイント)   Date: 2010/01/21(木) 22:38   No:46826 解決!     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
 http://dixq.net/g/#35.htmlの「#」を取り除いたら、アクセスできました。^^

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

Name: wing  ..入門者(4,519ポイント)   Date: 2010/01/21(木) 22:54   No:46827     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
私も開きません。

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

Name: softya  ..比類無きプログラマー(99,655ポイント)   Date: 2010/01/21(木) 23:09   No:46828     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
>http://dixq.net/g/#35.html

少なくとも#が入っているのはリンクの書き方を間違ってますね。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,279ポイント)   Date: 2010/01/21(木) 23:23   No:46829     
Title: Re:「32. 乱数の初期化の仕方。 」が開きません    
ご報告ありがとうございます。
"#"はいりませんね;修正しました。

以前までのゲームプログラミングの館は1ページに全て書いてあったのですが、
重いのでわけてくれとの要望があり、わけました。
しかし量が多かった為、適当にCでページわけるプログラム作って分割したのであちこちおかしいかもしれません;
他にもおかしいところもしあれば教えてくださいm(_ _)m

そもそも日本語があちこちおかしいという指摘があるかもしれませんが^^;


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



Name: guri  ..ぴよぴよ(68ポイント)   Date: 2010/01/21(木) 22:16   No:46822       
Title: 無題    
大学のレポートで、「整数を入力してから配列に格納してマージ・ソートを用いてソートせよ。」
というプログラムを書こうとしたのですが、なかなかうまくいきません。訂正すべき箇所を教えていただけないでしょうか?よろしくお願いします。(下手ですがよろしくお願いします。)


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


Name: shilfia  ..入門者(4,049ポイント)   Date: 2010/01/21(木) 22:22   No:46823     
Title: Re:無題    
 「うまくいきません」という質問は大抵回答に困ります。

  1. 自分は今何がしたくて

  2. どう取り組んで(作ったプログラムはどれで

  3. どのようなエラーやトラブルで困っていて

  4. 自分は何が解らないのか、知りたいのか

  5. 今のCの知識はどの程度なのか

この5点をしっかりと明記して下さい。

環境に依存する場合やライブラリを使っているときは

使っているOS名・コンパイラ名・ライブラリ名も明記しましょう。

コンパイルエラーの質問時は必ず最低限のエラーメッセージも書きましょう。


詳しくは回答者が困る質問例をご覧下さい。
http://dixq.net/board/board.html


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

Name: たいちう  ..熟練のプログラマー(50,606ポイント)   Date: 2010/01/21(木) 22:36   No:46825     
Title: Re:無題    
> 訂正すべき箇所

まずはタイトルと質問の仕方


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



Name: jay  ..上級者(16,579ポイント)   Date: 2010/01/19(火) 17:56   No:46598       
Title: 管理人さんへ質問    
龍神録プログラミングの館の利用規約について分からないことがあったので。

※2
専門学校の卒業制作や何かの制作物として教育機関などに提出される際は一度ご連絡ください。
その際は提出先とお名前をご連絡内容に添えて下さい。

と書いてあるのですが。
提出先=教育機関の名称
お名前=ハンドルネームでは無く自身の本名

という解釈でよろしいのでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,140,814ポイント)   Date: 2010/01/19(火) 19:57   No:46613     
Title: Re:管理人さんへ質問    
>>joyさん

ご報告ありがとうございます。
メールに書いて頂いた内容で大丈夫です。

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


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

Name: jay  ..上級者(16,626ポイント)   Date: 2010/01/21(木) 17:26   No:46813 解決!     
Title: Re:管理人さんへ質問    
ありがとうございます
それと返信遅れてすいません。


規約にも書いてあったので、お礼の意味でも
色々と落ち着いたら、出来たゲームは掲示板に載せてみますね。


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



Name: ttt  ..ぴよぴよ(509ポイント)   Date: 2010/01/21(木) 13:24   No:46796       
Title: アクセス違反で困ってます・・・。    
 DxLibで、ビットマップイメージの画像を、スクリーン上で移動させようとしたら、”アクセス違反が発生しました”となって、中断されてしまいます。
 コードはこれです↓

 #include "DxLib.h"
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
    ChangeWindowMode(TRUE);
    if( DxLib_Init() == -1 ) return -1;

    int ghandle = LoadGraph( "testplayer.bmp" );
    SetDrawScreen( DX_SCREEN_BACK );
    for( int x = 0; x < 320; x++){
        
        ClsDrawScreen();
        DrawGraph( x, 205, ghandle, TRUE );
        ScreenFlip();
    }

    WaitKey();
    DxLib_End();
    return 0;
}
 c言語は始めたばかりで、どうやったらいいのかわかりません。
解決方法を教えてはいただけないでしょうか? 


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


Name: wing  ..入門者(4,413ポイント)   Date: 2010/01/21(木) 14:03   No:46800     
Title: Re:アクセス違反で困ってます・・・。    
細かい指摘はめんどうなので、まず、ゲームプログラミングの館の41
毎回書くプログラムの骨格をコピーアンドペーストしてください。

while(ProcessMessage()==0 &&......の上で初期化とか画像のロードを行います。
下で実際にしたいことを書きます。つまり、

...............
   x = 0;
      y = 205;
      int ghandle = LoadGraph( "testplayer.bmp" );
while(ProcessMessage()==0 &&..........
      x++;
      if(x>320)
          x=320;
      DrawGraph( x, y, ghandle, TRUE );
      .............


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

Name: ttt  ..ぴよぴよ(82ポイント)   Date: 2010/01/21(木) 14:19   No:46802     
Title: Re:アクセス違反で困ってます・・・。    
ありがとうございました〜。
 


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

Name: ttt  ..ぴよぴよ(89ポイント)   Date: 2010/01/21(木) 14:20   No:46803 解決!     
Title: Re:アクセス違反で困ってます・・・。    
マーク押し忘れました><


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

Name: wing  ..入門者(4,507ポイント)   Date: 2010/01/21(木) 14:56   No:46812     
Title: Re:アクセス違反で困ってます・・・。    
失礼しました。
よく見たらゲームプログラミングの館の12画像を動かすの
質問のようですね。
適切な回答ではなかったようです。
一般的な質問と勘違いしてしまいました。

あと訂正です。
x=0;
y=205;

int x=0;
int y=205;
に訂正します。
これでエラーが出ないと思います。


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



Name: no  ..かけだし(1,300ポイント)   Date: 2010/01/19(火) 23:48   No:46647       
Title: 音楽再生について    

現在、以下のファイルがあります。
・a.wav
・b.wav
両者ともWMPで再生可能です。
しかしながら、DXライブラリを使用し、再生させてみるとb.wavファイルは再生されません。
記述ルール、ファイルの場所、名前指定は何度も確認したので間違いは無いと思います。

して、質問です。

1. b.wav は仮に、b.mid・b.mp3、から名前を変更するだけでb.wavにしてしまったようなファイルだと、
 何らかの破損が現われ、WMP上で再生できても、DXライブラリでは再生できないものなのか。

2.解決方法にはどのようなものがあるのか。

以上です。ご存知の方、どうかよろしくお願いします。


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


Name: SooA [URL]  ..プログラマー(26,066ポイント)   Date: 2010/01/20(水) 00:19   No:46654     
Title: Re:音楽再生について    
1
wav mp3 ogg は全て記録されている形式が違います。
一部のプレイヤーはファイルのヘッダーを読み込みこんで、
自動で形式判別し、拡張子に関係なく中身がmp3ならmp3として
再生できまが、それ以外は中身が違えば当然扱えません。

2
波形データなら変換して利用
http://pino.to/audico/


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,141,270ポイント)   Date: 2010/01/20(水) 08:04   No:46663     
Title: Re:音楽再生について    
ファイルの名前変えただけじゃだめですよ
ラベルの名前を変えただけで中身も変わるはずがない・・というのは例えば

食卓に「醤油」と書かれた醤油の入った入れ物が置いてあったとします。
でも今ソースが欲しいんです・・。そう思って入れ物に書いてある「醤油」という文字を消して「ソース」と書き直したら
中身はソースに変わりますか?

そんなはずないですよね。
ついている名前を変えただけでは中身は変わりません。

例えばmp3をwavに変換したいなら
http://www.google.co.jp/search?hl=ja&source=hp&q=mp3+wav+%E5%A4%89%E6%8F%9B&lr=&aq=f&oq=
こんな感じで変換します。

もしiPod使っているならiTuneでも出来ますね。

なお、名前を変えてもWMPはそのファイルを「wav」だと認識はしていないのですよ。
WMPは「ソース」と書いてあっても、俺はだまされないぞと、味見をしてから中身を判断するので醤油とわかってしまうのです。
wavではないと認識していますが、wavではない設定でうまく再生してくれるのです。

仮に画像ファイル

aa.jpg

みたいなファイルを

aa.abc

みたいな意味不明な拡張子に変更して、ペイントで開いてみてください。
同様に開けますから


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

Name: tkmakwins15  ..比類無きプログラマー(99,055ポイント)   Date: 2010/01/20(水) 10:26   No:46682     
Title: Re:音楽再生について    
えっ、DXライブラリは中身を見て処理方法を決定しているはずですが…
中身がMP3のファイルであればMP3として処理するはずです。


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

Name: SooA [URL]  ..プログラマー(26,163ポイント)   Date: 2010/01/20(水) 10:42   No:46685     
Title: Re:音楽再生について    
そうですか、では mid形式を波形形式の拡張子にして
Sound系関数で再生しようとしているのかも知れませんね。


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

Name: no  ..かけだし(1,611ポイント)   Date: 2010/01/20(水) 22:47   No:46743     
Title: Re:音楽再生について    
入手した b.mp3 ファイルはPlaySoundFileでは再生されず、PlayMusicで再生されました。
そのため、midファイルではないかと思い、拡張子をmidに変更し、午後のこーだでwavファイルに変換しました。
更に、そのwavファイルを「旧シューティングの館」に記されているogg変換用のツールでoggファイルに変換し、最終的に b.ogg ファイルが手元にあります。

しかしながらこれでもPlaySoundFileでは再生されず、PlayMusicで再生できます。
また、LoadSoundMemで読み込ませた後、PlaySoundMemで再生できません。
そして、LoadMusicMemで読み込ませ、PlayMusicMemでも再生できません。

流れからすると一番最後のパターンで再生できるような気がするのですが、いったいどこに問題があるのでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,142,160ポイント)   Date: 2010/01/20(水) 22:55   No:46744     
Title: Re:音楽再生について    
何がなんのファイルやらわからなくなってしまっているのでは・・。

変換する前の元のファイルのファイルヘッダを見てみましょう。

http://www.zob.ne.jp/~c.mos/soft/bz.html

こんなバイナリエディタで開いて先頭の10バイト位に何が書いてあるか教えてください。


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

Name: no  ..かけだし(1,707ポイント)   Date: 2010/01/20(水) 23:02   No:46746     
Title: Re:音楽再生について    
+0 +1 +2 +3 +4 +5
49 44 33 03 00 00

先頭の10バイトがどこを指すのかわかりませんが、こんな感じになっています。
見当違いの解答のようでしたら、言ってください。すいません・・・


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

Name: SooA [URL]  ..プログラマー(26,674ポイント)   Date: 2010/01/20(水) 23:23   No:46748     
Title: Re:音楽再生について    
名前の変更だけではなく、データ変換も行っているのですね?
最終的に変換した ogg変換が怪しいかもしれません。
一度WAVE形式で保存してそのデータに対して、
別の変換ツールを試してみてください。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,142,392ポイント)   Date: 2010/01/20(水) 23:24   No:46749     
Title: Re:音楽再生について    
49 44 33 ということはID3v2タグの先頭文字列"ID3"を意味するので、mp3であっていると思います。

mp3ファイルを

http://www.forest.impress.co.jp/lib/pic/music/soundedit/audacity.html

こちらのソフトで開き、oggで保存し、LoadSoundMemで読み込んでみてもらえますか?
読めこめるはずだと思います。


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

Name: no  ..かけだし(2,051ポイント)   Date: 2010/01/21(木) 01:08   No:46758     
Title: Re:音楽再生について    

変換いたしました。b.oggファイルは、以下の状態です。
+0 +1 +2 +3 
4F 67 67 53
見た感じしっかりogg形式になっているようにみえます。

で、現在の状態です。

PlayMusic → 再生される
PlaySoundFile → 再生されない
LoadSoundMemでロード → PlaySoundMem → 再生されない
LoadMusicMemでロード → PlayMusicMem → 再生されない


ちと解決策が見つからないので、問題ないか添削お願いしたいです。
*再生関数関係はすべてコメント文にしています。





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

Name: no  ..かけだし(2,079ポイント)   Date: 2010/01/21(木) 01:10   No:46759     
Title: Re:音楽再生について    
こちらが音楽ファイルになります。

……と思ったら大きすぎて乗せれなかったです


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,142,593ポイント)   Date: 2010/01/21(木) 07:46   No:46776     
Title: Re:音楽再生について    
4F 67 67 = O g g
なので、ファイルはあっているようですね。

こうなるとプログラムの方が違うか、ボリュームコントローラーが下がっているのではないかと思います。

OSは何ですか?
ボリュームコントローラーを確認して、
MIDI以外のボリュームが下がっていないか確認して下さい。

後、添付されたコードのどの部分の注釈を外すすのでしょう?
oggを再生する時に外す注釈部分を教えてください。

Sound = LoadSoundMem( "b.ogg" );
PlaySoundMem( Sound , DX_PLAYTYPE_NORMAL );

正解はこうですね。
プレイタイプはDX_PLAYTYPE_BACKの方がいいですよ。
キー入力で好きな時に終了出来ますし。

_NORMALは使う機会があるんだろうかという気が・・。


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

Name: no  ..入門者(2,568ポイント)   Date: 2010/01/21(木) 13:08   No:46793     
Title: Re:音楽再生について    
OSはウィンドウズXPで、コンパイラはVC++です。

音楽ファイルを添付して、問題を認識しやすいように全パターンを試すことができるプログラムを
添付したつもりでしたが……音楽ファイルが載せられなかったので意味の分からないものになりました。
申し訳ないです。

あと個人的な認識として、_NORMAL は再生が終了しないとWaitKeyまでたどり着かないと考えています。
音楽ファイルの長さは2分程度の為、
ボリュームがただ単に小さいだけなら起動後2分間はどのキーを押しても反応しないと考え、
ボリュームの問題か、そうではないかの見極めのために _NORMAL 使用しています。

その結果、二分をまたずしてWaitKeyに達していることが分かり、ボリューム関係の問題ではないと
勝手に考えていましたが……この認識は当たっているのかな、すいませんあまり自信ないです。
(具体的には数秒でWaitKeyに達します)

あ、正解のことも認識しています。


@PlayMusic → 再生される 
APlaySoundFile → 再生されない 
BLoadSoundMemでロード → PlaySoundMem → 再生されない 
CLoadMusicMemでロード → PlayMusicMem → 再生されない 

現在の症状としては、↑のような感じになります。
Aで再生されないのも正直変な話ですが、@とCの関係もちょっとおかしいなぁと思ったり……

うーん、どこかのアップローダに音楽ファイル載せて、みてもらった方がよいでしょうか?



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

Name: SooA [URL]  ..プログラマー(26,834ポイント)   Date: 2010/01/21(木) 13:26   No:46797     
Title: Re:音楽再生について    
>うーん、どこかのアップローダに音楽ファイル載せて、みてもらった方がよいでしょうか?
問題が出ているのはそのファイルだけなのでしょうか?

最悪音質が低下してもかまわないのでしたら
再生できる状態にできると思いますが。
http://www.axfc.net/uploader/


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



Name: すのう  ..ぴよぴよ(840ポイント)   Date: 2010/01/19(火) 20:20   No:46614       
Title: エラーが・・・。    
こんばんわ、質問させていただきます。
MIDIプレイヤー的なものを作っているのですが、エラーが出てしまって直らなくなってしまいました。
1週間くらい前は普通にビルドできたのですが、間にちょっと他のプログラムを試したりしてたらできなくなってしまいました。

エラーは以下の通りです。
見られてまずいところは*に変えてあります。


MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMTD.lib(typinfo.obj) で定義されています。
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMTD.lib(typinfo.obj) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
C:\Documents and Settings\*\My Documents\Visual Studio 2008\Projects\midi_player\Debug\midi_player.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ビルドログは "file://c:\Documents and Settings\*\My Documents\Visual Studio 2008\Projects\midi_player\Debug\BuildLog.htm" に保存されました。
midi_player - エラー 3、警告 1


他のプログラムというのは、DirectxGraphicsをやろうとしてたんです。
即効挫折しましたが・・・。
自分のパソコンに入っていたDirectXが9.0だったので、それにあわせてSDKを古いバージョンに変えたのですが、それは何か影響あったりしますか?

あ、DXライブラリの設定はしなおしてあります。
ランタイムライブラリなんかも、見直したので、初期設定の問題はないと思うのですが・・・。
どなたかお願いいたします。


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


Name: kazuoni [URL]  ..ハッカー(129,116ポイント)   Date: 2010/01/20(水) 23:47   No:46753     
Title: Re:エラーが・・・。    
この手のことはあまり詳しくないので、専門的な事は回答できないですけど、
エラー内容をググったら
以下のような解決策が書いてありました。

構成プロパティ」→「C/C++」→「コード生成」の「ランタイムライブラリ」の項を「シングルスレッド (/ML)」から「マルチスレッド デバッグ DLL (/MDd)」に変更

試してみてください。


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

Name: すのう  ..ぴよぴよ(763ポイント)   Date: 2010/01/21(木) 05:43   No:46773 解決!     
Title: Re:エラーが・・・。    
プロジェクト全体でその操作をしていたと思っていたのですが、ひとつだけなぜか出来ていなかったcppファイルがあって、それが原因だったようです。
どうもありがとうございました!


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



Name: とく  ..かけだし(2,037ポイント)   Date: 2010/01/20(水) 19:47   No:46735       
Title: PSP移植について    
質問です。

PSPに移植するさいに画像などを、PSP用のサイズに変換したほうがいいですですよね?

初歩的な質問してすいません。


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


Name: kazuoni [URL]  ..ハッカー(128,839ポイント)   Date: 2010/01/20(水) 23:32   No:46751     
Title: Re:PSP移植について    
> PSPに移植するさいに画像などを、PSP用のサイズに変換したほうがいいですですよね?

はい。
XMBのキャプチャを見るからに、480*272が最大のサイズなのかな?
っとか思いますが、実際は知らないので、SDKのサイトをみるなりしてください。


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

Name: とく  ..かけだし(2,052ポイント)   Date: 2010/01/21(木) 00:53   No:46757     
Title: Re:PSP移植について    
わかりました。
ありがとうございました。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +