質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.86%

  • C

    3195questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3009questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1549questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • DXライブラリ

    49questions

    DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

「'('が必要です」とたくさん出ます><

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 380

choko103478

score 0

イメージ説明### 前提・実現したいこと

何故エラーが出るのか分かりません;
投げやりな質問の仕方で申し訳ありませんがエラーの原因を教えて頂けれるとありがたいです;;
友達から貰ったコードなのですが、諸事情で連絡が取ることができないので助けて頂けると幸いです。

 発生している問題・エラーメッセージ

何故エラーが出るのか分かりません;
投げやりな質問の仕方で申し訳ありませんがエラーの原因を教えて頂けれるとありがたいです;;

 該当のソースコード

#include"DxLib.h"
//キャラクタ型宣言
struct CharaData
{
    int x;
    int y;
    int ghandle;
    int life;
    int image_w;
    int image_h;
    int bounds_w;
    int bounds_h;
};
//プロトタイプ宣言
void MyMove(int movable);
void JitamaMove(void);
void TekiMove(void);
int IsAtari(CharaData, CharaData);
int AtariHantei(void);
void GameOver(void);
void GameClear(void);
void ChaInit(void);
//構造化設定
struct CharaData jikidata;
struct CharaData jitama[7];
struct CharaData tekidata[5];
int trigger = 0;
//メインプログラム
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
    ChangeWindowMode(true); //ウィンドウモードで起動
    if (DxLib_Init() == -1) return -1; //DXライブラリの初期化

    ChaInit();

    SetDrawScreen(DX_SCREEN_BACK);

    while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
    {
        ClsDrawScreen(); //画面消去
        MyMove(true);
        JitamaMove();
        TekiMove();
        GameOver();
        GameClear();
        if (AtariHantei() == 1)break;
        ScreenFlip();
    }
    DxLib_End();
    return 0;
};

//キャラクタ初期設定
void ChaInit(void)
{
    //自分キャラクタの初期設定
    jikidata.ghandle = LoadGraph("自キャラ.bmp");
    jikidata.x = 0;
    jikidata.y = 0;
    jikidata.image_w = 48;
    jikidata.image_h = 32;
    jikidata.bounds_w = 32;    
    jikidata.bounds_h = 20;

    //自弾の初期設定
    int g = LoadGraph("自弾.bmp");
    for (int i = 0; i<7; i++)
    {
        jitama[i].ghandle = g;
        jitama[i].image_w = 64;
        jitama[i].image_h = 16;
        jitama[i].bounds_w = 48;
        jitama[i].bounds_h = 12;
    }

    //敵キャラクタデータの初期化
    int k = LoadGraph("敵キャラ.bmp");
    for (int i = 0; i<5; i++)
    {
        tekidata[i].ghandle = k;
        tekidata[i].life = 1;
        tekidata[i].x = GetRand(100) + 500;
        tekidata[i].y = GetRand(448);
        tekidata[i].image_w = 32;
        tekidata[i].image_h = 32;
        tekidata[i].bounds_w = 20;
        tekidata[i].bounds_h = 20;
    }


}

//自キャラクタ移動関数
void MyMove(int movable)
{
    int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
    if (key&PAD_INPUT_UP) jikidata.y = jikidata.y - 4 * (movable == TRUE);
    if (key&PAD_INPUT_DOWN) jikidata.y = jikidata.y + 4 * (movable == TRUE);
    if (key&PAD_INPUT_LEFT) jikidata.x -= 4 * (movable == TRUE);
    if (key&PAD_INPUT_RIGHT)jikidata.x += 4 * (movable == TRUE);
    if (jikidata.x<0) jikidata.x = 0;
    if (jikidata.x>640 - 32) jikidata.x = 640 - 32;
    if (jikidata.y<0) jikidata.y = 0;
    if (jikidata.y>480 - 32) jikidata.y = 480 - 32;
    DrawGraph(jikidata.x, jikidata.y, jikidata.ghandle, TRUE);
}

//自キャラクタ弾の移動関数
void JitamaMove(void)
{
    int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
    if ((key&PAD_INPUT_A) && (trigger == 0))
    {
        for (int i = 0; i<7; i++)
        {
            if (jitama[i].life == 0)
            {
                jitama[i].life = 1;
                jitama[i].x = jikidata.x + 24;
                jitama[i].y = jikidata.y + 0;
                break;
            }
        }
        trigger = 10;
    }
    if (trigger>0) trigger = trigger - 1;
    for (int i = 0; i<7; i++)
    {
        if (jitama[i].life>0)
        {
            jitama[i].x = jitama[i].x + 10;

            DrawGraph(jitama[i].x, jitama[i].y, jitama[i].ghandle, TRUE);
            if (jitama[i].x>640) jitama[i].life = 0;
        }
    }
}

//敵キャラクタ移動関数
void TekiMove(void)
{
    for (int i = 0; i<5; i++)
    {
        if (tekidata[i].life >0)
        {
            int teki_y = GetRand(40) - 20;
            int teki_x = GetRand(4) - 1;
            tekidata[i].x = tekidata[i].x - teki_x;
            tekidata[i].y = tekidata[i].y - teki_y;
            if (tekidata[i].x<-32) tekidata[i].x = -32;
            if (tekidata[i].y<0) tekidata[i].y = 0;
            if (tekidata[i].y>480 - 32) tekidata[i].y = 480 - 32;

            DrawGraph(tekidata[i].x, tekidata[i].y, tekidata[i].ghandle, TRUE);
        }
    }
}

//当たり判定チェック
int IsAtari(CharaData a, CharaData b)
{
    int retval = 0;
    int ax1 = a.x + (a.image_w - a.bounds_w) / 2;
    int ay1 = a.y + (a.image_h - a.bounds_h) / 2;
    int ax2 = a.x + (a.image_w + a.bounds_w) / 2;
    int ay2 = a.y + (a.image_h + a.bounds_h) / 2;
    int bx1 = b.x + (b.image_w + b.bounds_w) / 2;
    int by1 = b.y + (b.image_h + b.bounds_h) / 2;
    int bx2 = b.x + (b.image_w + b.bounds_w) / 2;
    int by2 = b.y + (b.image_h + b.bounds_h) / 2;
    if ((ax1<bx2) && (bx1<ax2) && (ay1<by2) && (by1<ay2))
    {
        retval = 1;
    }
    return (retval);
}

//当たり判定メイン
int AtariHantei()
{
    for (int i = 0; i<50; i++)
    {
        if (tekidata[i].life>0)
        {
            if (IsAtari(jikidata, tekidata[i]) == 1) return(1);
            for (int j = 0; j<3; j++)
            {
                if (jitama[j].life>0)
                {
                    if (IsAtari(jitama[j], tekidata[i]) == 1)
                    {
                        jitama[j].life = 0;
                        tekidata[i].life = 0;
                    }
                }
            }
        }
    }
    return (0);
}

//ゲームオーバーチェック関数
void GameOver(void)
{
    MyMove(FALSE);
    for (int i = 0; i<5; i++)
    {
        if (tekidata[i].x<64)
        {
            int col = GetColor(255, 0, 0);
            SetFontSize(100);
            SetFontThickness(9);
            ChangeFontType(DX_FONTTYPE_EDGE);
            int x = 320 - GetDrawStringWidth("GAMEOVER", 8) / 2;
            DrawString(x, 160, "GAMEOVER", col);
        }
    }
}

//ゲームクリアチェック関数
void GameClear(void)
{
    int count = 0;
    for (int i = 0; i<5; i++)
    {
        if (tekidata[i].life<1)
        {
            count++;
        }
    }
    if (count >= 5)
    {
        int col = GetColor(255, 255, 0);
        SetFontSize(100);
        SetFontThickness(9);
        ChangeFontType(DX_FONTTYPE_EDGE);
        int x = 320 - GetDrawStringWidth("GAMECLEAR", 8) / 2;
        DrawString(x, 160, "GAMECLEAR", col);
    }
}

 補足情報(FW/ツールのバージョンなど)

VisualStudio 2015

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • choko103478

    2018/06/06 19:50

    ooaさんのご回答でエラーの解決はしましたが自分でプロジェクトを立ち上げるとどうもうまくいきません。 エラーが再発します。 サンプルプログラム内でのみビルド通ります。

    キャンセル

  • MMashiro

    2018/06/06 21:21

    プロジェクトを新しく立ち上げてもエラーは発生しますか?

    キャンセル

  • choko103478

    2018/06/06 21:48 編集

    エラーでます。ですが、新しくプロジェクトフォルダ内にDxライブラリのプロジェクトに追加すべきファイルとToolを入れるとビルド成功します。それにその方法で実行してもDebugフォルダが生成されません。

    キャンセル

回答 4

0

使用しているコンパイラの種別(VisualStudioのなにか?)を教えていただけますか。

また、ソースコードの文字コードはUTF-8(BOMなし)ではないでしょうか。
2013あたりのVisual Studioで、BOMなしのUTF-8のソースコードが適切に日本語を読み込めず、次の行を壊す、という現象に遭遇したことがあります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/06 17:57

    VisualStudio 2015を使っていて文字コードは日本語です!

    キャンセル

  • 2018/06/06 17:58

    文字コードの意味を取り違えてらっしゃいます。
    Shift_JISとか、UTF-8とか、ご存じないでしょうか。

    キャンセル

  • 2018/06/06 18:03

    メニューの「ファイル」→「保存オプションの詳細設定...」で現在のエンコードを確認できます。

    キャンセル

  • 2018/06/06 18:03

    日本語(シフト_JIS)です。

    キャンセル

  • 2018/06/06 18:08

    なるほど、おそらくお友達からソースをもらった段階ではUTF-8で、それをそのままビルドした状態では例に挙げた状態でエラーとなり、いちど貼りなおした状態でShift_JISになったので正常にビルドできるようになった、ということになりますかね。

    キャンセル

  • 2018/06/06 18:16

    Dxライブラリのサンプルプログラムなら正常にビルド通るんですが、自分でプロジェクト立ち上げてビルドするとエラーになります。。

    キャンセル

  • 2018/06/06 18:19

    サクラエディタなどの文字コードの判別が可能なテキストエディタをインストールすることはできますか?
    それでそれぞれのソースを見てみれば、分かりやすいかと思います。

    キャンセル

  • 2018/06/06 18:37

    サクラエディタで確認したところどちらもSJISでした。

    キャンセル

  • 2018/06/06 18:51

    どちらも、とは、どれを指しますか?
    今、登場人物は三人です。

    - ビルドが通らないソース
    - コピペしてビルドが通るようになったソース
    - DXライブラリのサンプルソース

    まぁ、ビルド通るようになったのなら気にすることでも無いとは思うのですけど、はっきりさせといたほうが気分がスッキリしますね。

    キャンセル

  • 2018/06/06 19:09

    ビルドが通らないソース
    コピペしてビルドが通るようになったソース
    です!

    キャンセル

  • 2018/06/06 19:23

    ご回答ありがとうございました!

    キャンセル

  • 2018/06/06 19:49

    ooaさんのご回答でエラーの解決はしましたが自分でプロジェクトを立ち上げるとどうもうまくいきません。
    エラーが再発します。
    サンプルプログラム内でのみビルド通ります。

    キャンセル

  • 2018/06/06 19:49

    すみません。
    打つところ間違えました。

    キャンセル

0

新しく立ち上げる際にooaさんの補足コメント通りに作成しましたか?
VS2015だとWeb上で手順を確認できます。 
下記手順通りにしないと動かないので再度プロジェクトの作り方から確認お願いします
http://dxlib.o.oo7.jp/use/dxuse_vscom2015.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ソースコードの文字コードはUTF-8 with BOMにしましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)

の関数の終わりの閉じカッコにセミコロンついてる


ではエラーでないですねー

おおかた、ヘッダファイルで関数宣言のセミコロン忘れとか、Define でカッコ忘れとかじゃね?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/06 17:58

    Dxライブラリのサンプルプログラムでビルドすると通るんですよね。。

    キャンセル

  • 2018/06/06 18:01

    いまきがついたけど、
    最初の行の #define のあとにスペースいれてみよう

    キャンセル

  • 2018/06/06 18:07

    int IsAtari(CharaData, CharaData);
    これ、
    int IsAtari(struct CharaData, struct CharaData);
    でしょ

    キャンセル

  • 2018/06/06 18:12

    あと、TRUEとFALSEの定義を確認してみれ。
    って、これぐらいかなあ

    まあしかし、VisualStudioならソース画面でエラー出してくれるだろうからこれでもないか

    キャンセル

  • 2018/06/06 19:23

    ご回答ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3195questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3009questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1549questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • DXライブラリ

    49questions

    DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。