合計 昨日 今日

c言語わくわくゲームプログラミング教室の3-01で…

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: draw
[URL]
Date: 2017年12月26日(火) 20:50
No: 1
(OFFLINE)

 c言語わくわくゲームプログラミング教室の3-01で…

DXライブラリ初心者です
現在14歳からはじめるc言語わくわくゲームプログラミングで学習中なのですが、74ページのテストプログラムのメイクは出来て、実行結果がウィンドウの左上に水色の四角形で描かれるはずなのに、全体が真っ黒のままで解決策がわかりません
解決策を教えてください

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月26日(火) 21:42
No: 2
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

うちのサイトはその本となんの縁もないですし、私も本を持っていないのでいきなり74ページといわれても全く分からないです。
具体的にどんなコードでどういう環境なのでしょうか。

Name: draw
[URL]
Date: 2017年12月26日(火) 23:55
No: 3
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

Dixq (管理人) さんが書きました:うちのサイトはその本となんの縁もないですし、私も本を持っていないのでいきなり74ページといわれても全く分からないです。
具体的にどんなコードでどういう環境なのでしょうか。

Dixpさん、ご指摘ありがとうございました
次から気をつけます

環境はBorland C++ コンパイラ 5.5
drawbox関数のコードで
#include”DxLib.h”

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC )
{
ChangeWindowMode( TRUE );
if(DxLib_Init == -1) return(-1);
DrawBox( 0 , 0 , 120 , 120 , 65535 , TRUE );
WaitKey( );
DxLib_End( ) ;
return( 0 );
}

というプログラムです
上記のプログラムのメイクは出来ましたが、実行結果でウィンドウの左上に水色が描かれるはずなのに、全体が真っ暗でウィンドウが表示されます
解決策を教えてください

Name: みけCAT
[URL]
伝説なるハッカー(689,686 ポイント)
Date: 2017年12月26日(火) 23:57
No: 4
(ONLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

色を65535のようなマジックナンバーで指定すると環境依存になり、よくないです。
色はGetColor関数を用いて指定するといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: draw
[URL]
Date: 2017年12月27日(水) 00:29
No: 5
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

みけCAT さんが書きました:色を65535のようなマジックナンバーで指定すると環境依存になり、よくないです。
色はGetColor関数を用いて指定するといいでしょう。

先ほどのプログラムの65535をGetColor( 255, 255, 0 )に変えたり、
int col = Getcolor (255,255,0)と先に定義して、
65535をcolに変えて、リンクして、実行したのですが、やはり全体が真っ黒になります

Name: Math
[URL]
Date: 2017年12月27日(水) 00:51
No: 6
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

DXライブラリ置き場 http://dxlib.o.oo7.jp/
にある 大槻 有一郎先生の本 と思いますが いま手元にないのですが 過去ログに何度か答えた記憶があります。VisualStudio用に書かれた本なのでVisualStudioが使える環境だとわかりやすいとおもいます。(一時期他の方が答えられていましたがよく質問があったはずです)
ゲームのソースコードもダウンロードできますよ(^^;。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <DxLib.h> 
 
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC) {
 
//DXライブラリ初期化
if (DxLib_Init() == -1) return -1;
 
 //ボックスを描画
DrawBox(0, 0, 120, 120, 0x00FFFF, TRUE);
 
 //待機
WaitKey();
 
 //DXライブラリの終了
DxLib_End();
 return 0;
 }

でいいはずです。Borland C++ コンパイラ 5.5がよくわかりませんがメイクは出来たということですが Makefileはどの様にされましたでしょうか。

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月27日(水) 00:57
No: 7
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

そのコード色々と変なので、そのままだとコンパイル通らないと思いますが、それ実行したコードのコピペですか?
このように書いて私の環境で実行したらちゃんと期待の動作をしました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "DxLib.h"
 
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
    ChangeWindowMode(TRUE);
    if (DxLib_Init() == -1) {
        return -1;
    }
    DrawBox(0, 0, 120, 120, GetColor(255, 255, 255), TRUE);
    WaitKey();
    DxLib_End();
    return 0;
}


その本以前少しだけ見たの思い出しました。
何故かこの人色の指定を間違った方法で記載してるんですよね、ちょいちょい間違ったコードがかかれているので注意です。

このコードを書いてもなお、画面が真っ暗なのであれば、
かいているコードとプロジェクトのコードが違うとかのケアレスミスじゃないでしょうか。
ちゃんと書いているファイルは実行対象のファイルですか?

printfDx("テスト");

のようなログを仕込んでも表示されないのであればファイルが違うなどのケアレスミスでありましょう。

Name: Math
[URL]
Date: 2017年12月27日(水) 01:13
No: 8
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

いまVisualStudio2017で正常に動作するのを確認しました。

Name: Math
[URL]
Date: 2017年12月27日(水) 01:20
No: 9
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

Makefileは(VS2017)
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
TARGETNAME=g1
 
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT  /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3
 
LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
 
ALL:
    cl $(C_FLAGS) $(TARGETNAME).cpp
    link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
    $(TARGETNAME).exe

実行
コード[C++]: 全て選択
1
nmake -f g.mak

です。

Name: draw
[URL]
Date: 2017年12月27日(水) 07:21
No: 10
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

Dixq (管理人) さんが書きました:そのコード色々と変なので、そのままだとコンパイル通らないと思いますが、それ実行したコードのコピペですか?
このように書いて私の環境で実行したらちゃんと期待の動作をしました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "DxLib.h"
 
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
    ChangeWindowMode(TRUE);
    if (DxLib_Init() == -1) {
        return -1;
    }
    DrawBox(0, 0, 120, 120, GetColor(255, 255, 255), TRUE);
    WaitKey();
    DxLib_End();
    return 0;
}


その本以前少しだけ見たの思い出しました。
何故かこの人色の指定を間違った方法で記載してるんですよね、ちょいちょい間違ったコードがかかれているので注意です。

このコードを書いてもなお、画面が真っ暗なのであれば、
かいているコードとプロジェクトのコードが違うとかのケアレスミスじゃないでしょうか。
ちゃんと書いているファイルは実行対象のファイルですか?

printfDx("テスト");

のようなログを仕込んでも表示されないのであればファイルが違うなどのケアレスミスでありましょう。


printfDx(”テスト”); を仕込んでも表示されないので、ファイルが違うなどのケアレスミスだと思うんですけど、どのような手順で目的の実行対象のファイルを実行できますか?

Name: draw
[URL]
Date: 2017年12月27日(水) 07:29
No: 11
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

Math さんが書きました:Makefileは(VS2017)
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
TARGETNAME=g1
 
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT  /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3
 
LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
 
ALL:
    cl $(C_FLAGS) $(TARGETNAME).cpp
    link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
    $(TARGETNAME).exe

実行
コード[C++]: 全て選択
1
nmake -f g.mak

です。


すいません
自分でMakefileについて調べたのですが、Makefileがわかりません
できれば教えてください

Name: Math
[URL]
Date: 2017年12月27日(水) 08:15
No: 12
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

>色を65535のようなマジックナンバーで指定すると環境依存になり、よくないです。

>何故かこの人色の指定を間違った方法で記載してるんですよね、ちょいちょい間違ったコードがかかれているので注意です。

0~1670万の間の数値なら問題ないと思いますが。(詳しくは256 x 256 x 256 = 16 777 216まで)
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <DxLib.h> 
 
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC) {
 
 unsigned int col;
 
//DXライブラリ初期化
if (DxLib_Init() == -1) return -1;
 
col=GetColor(0, 255, 255);
 
printfDx("テスト%x",col);
 
 
 //ボックスを描画
DrawBox(0, 0, 120, 120, 65535, TRUE);
 
 //待機
WaitKey();
 
 //DXライブラリの終了
DxLib_End();
 return 0;
 }

VS2017で動作確認済みです。256 x 256 = 65 536 ですね。

Name: uni
[URL]
Date: 2017年12月27日(水) 08:26
No: 13
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

本のページだけでは伝わらないことくらいすぐに分かるでしょう
回答してあげる側の手を煩わせないよう、完全な質問にしてから聞いてください

Makefileも調べが足りないのではないでしょうか?
どう調べたかなど言ってもらわないと、分かってない以上は調べてないと思われても不思議ではありません

Name: Math
[URL]
Date: 2017年12月27日(水) 08:31
No: 14
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

ここhttp://dxlib.o.oo7.jp/use/dxuse_bcc.html#R1の設定を途中までやってみましたがとても面倒なのでやめました。(><)

この設定で実行されていると思われますがコンフィグ・ファイルが私には理解できないので 時間がありません。VisualStudio用なら詳しく説明できるのですが…
(再度設定を確認されると解決するかもしれませんね)

Name: Math
[URL]
Date: 2017年12月27日(水) 09:22
No: 15
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

>色を65535のようなマジックナンバーで指定すると環境依存になり、よくないです。

HTML等では色を数値であらわすのが一般的とおもいます。https://www.colordic.org/

Name: Math
[URL]
Date: 2017年12月27日(水) 09:44
No: 16
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

>本のページだけでは伝わらないことくらいすぐに分かるでしょう
偶然てあるものですね。そのページのプログラムがあったのです。(^^;
藁にもすがりたいときは いってみるものですね…。(確率的にここには質問が多そうな問題ではありますね)

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月27日(水) 10:26
No: 17
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

uniさん

自分のトピック内で面白おかしく話を展開するのはまだ許せますが
他のトピックで遊ぶのは見逃せません。
もし次に似たような記述をしたら削除します。

ここに返答を書かないで下さい。
もし反論があれば、この言動の元となったトピックに書いて下さい。

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月27日(水) 14:51
No: 18
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

drawさん

普通VisualStudioで作るのでmakefileが分からないなら
VisualStudioの環境でコンパイルしてみてください。


Mathさん

色コードは画面のカラービット数が変化すると変わるはずです。
リファレンスにも関数を利用するように書かれています。
http://dxlib.o.oo7.jp/function/dxfunc_graph3.html#R4N5

Name: draw
[URL]
Date: 2017年12月27日(水) 18:22
No: 19
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

多分、visual studioの環境でする人が多い(←偏見)ので、
今の環境から、visual studioの環境に変えて、また1から出直そうかと思います

(そちらのほうがスムーズに受け答えできると思うので)

もし、ゲームプログラミングが目的でしていたという人で、visual studioの環境でどんな手順を踏んで学んだか、オススメの本など教えてください

例)手順1:~~という本でC言語を勉強
手順2:~~という本でゲームプログラミングを勉強
手順3:自作ゲームを作成

最初の話と全然変わってしまい、申し訳ありません

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,492,118 ポイント)
Date: 2017年12月27日(水) 18:40
No: 20
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

私はひたすらDXライブラリーのリファレンスを読んで勉強しましたが、
私のノウハウを当サイトで公開してますので、よかったら参考にして下さい

http://dixq.net/g

http://dixq.net/rp2

Name: draw
[URL]
Date: 2017年12月28日(木) 08:19
No: 21
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

[解決!]

Dixqさん、参考にしてみます

また、主にご協力してくれたDixqさん、Mathさん、ありがとうございました

Name: Math
[URL]
Date: 2018年1月06日(土) 22:04
No: 22
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

[雑談]突然ですが
正誤表 と ソースコードがここにあります。(^^;
http://www.rutles.net/download/411/

Name: Math
[URL]
Date: 2018年1月11日(木) 06:31
No: 23
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

http://dixq.net/forum/viewtopic.php?f=3&t=19901
画像
http://dxlib.o.oo7.jp/use/dxuse_cpp_builder.html

C++Builder はDelphiのC++版である。
https://ja.wikipedia.org/wiki/C%2B%2B_Builder
「FireMonkey や Visual Component Library (VCL) を利用するIDEを持つDelphiのC++版である。」

C#はDelphiをベースにしている。
https://ja.wikipedia.org/wiki/C_Sharp

https://ja.wikipedia.org/wiki/C%2B%2B_Builderによると 「Borland C++ コンパイラ 5.5」は C++Builderに受け継がれているようでしかも旧いらしい。
画像

「Borland C++ コンパイラ 5.5」を使うより「C++Builder」使えば設定はしなくてもつかえますよ。


Name: Math
[URL]
Date: 2018年1月12日(金) 09:17
No: 25
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

「C++Builder」テストしてみました。VisualStudio2015のprogramがそのまま動きました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <math.h>
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine, int nCmdShow )
{
    int x;
    int y;
    double dx;
    double dy;
    /////////////////////////////////////////////////////////////
    //コンソールを作成し,標準入出力に割り当てる
    AllocConsole();
    freopen("CONOUT$", "w", stdout); //標準出力をコンソールにする
    /////////////////////////////////////////////////
    //コンソールを作成し,標準入出力に割り当てている
    printf("WinMain:start\n");
 
    ChangeWindowMode(TRUE);          // ウインドウモードに設定
 
    if( DxLib_Init() == -1 )        // DXライブラリ初期化処理
    {
        return -1 ;         // エラーが起きたら直ちに終了
    }
 
    UINT White = GetColor(255, 255, 255);  // 白色の取得
    DrawString(30, 20, "*** 正弦波 余弦波 ***", White);  // 文字を書く
 
    LoadGraphScreen(30, 50, "D:\\img\\pc01.png", TRUE);  // 画像を描画する
 
    printf("軸線:start\n");
    y = 240;
    for(x=0; x < 640; x++){
        DrawPixel( x, y, White ) ;  // 点を打つ
    }
    printf("正弦波:start\n");
    for(x=0; x < 640; x++){
        dy = -240 * sin( (3.14 / 180) * x );
        y = (int)dy;
        y = 240 + y;
        DrawPixel( x, y, GetColor( 0,255,255 ) ) ;  // 点を打つ
    }
    printf("余弦波:start\n");
    for(x=0; x < 640; x++){
        dy = -240 * cos( (3.14 / 180) * x );
        y = (int)dy;
        y = 240 + y;
        DrawPixel( x, y, GetColor( 255,255,0) ) ;   // 点を打つ
    }
    printf("WaitKey:start\n");
    WaitKey() ;             // キー入力待ち
    printf("DxLib_Init:end\n");
 
    printf("WaitKey:start\n");
    DxLib_End() ;               // DXライブラリ使用の終了処理
    printf("DxLib_Init:end\n");
 
    printf("WinMain:end\n");
    return 0 ;              // ソフトの終了
}

http://www2.koyoen.birdview.co.jp/~abcxyz/c2.jpg
http://www2.koyoen.birdview.co.jp/~abcxyz/c1.jpg

Name: Math
[URL]
Date: 2018年1月14日(日) 16:45
No: 26
(OFFLINE)

 Re: c言語わくわくゲームプログラミング教室の3-01で…

http://dixq.net/g/
3d.01 3Dモデルを表示してみよう をお借りして
「C++Builder」テストしてみました。そのまま動きました。

http://www2.koyoen.birdview.co.jp/~abcxyz/k.jpg

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// ここにサンプルプログラムをペーストしてください
/***** main.cpp *****/
 
#include <DxLib.h>
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
 
    //3Dモデルの読み込み
    int ModelHandle = MV1LoadModel( "G:/dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;
 
    //奥行0.1~1000までをカメラの描画範囲とする
    SetCameraNearFar( 0.1f, 1000.0f ) ;
 
    //(0,10,-20)の視点から(0,10,0)のターゲットを見る角度にカメラを設置
    SetCameraPositionAndTarget_UpVecY( VGet( 0, 10, -20 ), VGet( 0.0f, 10.0f, 0.0f ) ) ;
 
    while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()){
 
        // 3Dモデルの描画
        MV1DrawModel( ModelHandle ) ;
 
    }
 
    DxLib_End();
    return 0;
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]