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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

DXライブラリ

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

Q&A

解決済

1回答

1053閲覧

構文エラーになってしまう。

ozawa252521

総合スコア7

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

DXライブラリ

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

0グッド

0クリップ

投稿2020/10/21 05:24

編集2020/10/21 05:26

https://bituse.info/game/shot/4
こちらのサイトのシューティングゲームのキャラの移動制御の内容を書いているのですが
構文エラーになってしまいます。

この前の章で書いたプログラムの内容が

#include "pch.h" #include "player.h" PLAYER::PLAYER() { //画像読み込み if(-1==LoadDivGraph("charall.png",12,3,4,29,40,gh)){ MSG("エラー発生"); } width=29; height=40; //移動係数 move=1.0f; //横方向と縦方向のカウント数。 xcount=0,ycount=0; //添字用変数 ix=0,iy=0,result=0; //初期位置 x=180; y=400; life=true; } void PLAYER::Move() { if(key[KEY_INPUT_LEFT]==1 || key[KEY_INPUT_RIGHT]==1){ if(key[KEY_INPUT_UP]==1 || key[KEY_INPUT_DOWN]==1){ //移動係数を0.71に設定 move=0.71f; }else{ //斜めじゃなければ1.0に設定 move=1.0f; } }else if(key[KEY_INPUT_UP]==1 || key[KEY_INPUT_DOWN]==1){ move=1.0f; } if(key[KEY_INPUT_LEFT]==1){ x-=(int)PLAYER_SPEED*move; } if(key[KEY_INPUT_RIGHT]==1){ x+=(int)PLAYER_SPEED*move; } if(key[KEY_INPUT_UP]==1){ y-=(int)PLAYER_SPEED*move; } if(key[KEY_INPUT_DOWN]==1){ y+=(int)PLAYER_SPEED*move; } //左キーが押されてて、かつxcountが0以上なら0にしてから1引く。 //それ以外は1引く if(key[KEY_INPUT_LEFT]==1){ if(xcount>0) xcount=0; --xcount; } //右キーが押されてて、かつxcountが0以下なら0にしてから1足す。 //それ以外は1引く if(key[KEY_INPUT_RIGHT]==1){ if(xcount<0) xcount=0; ++xcount; } //上キーが押されてて、かつycountが0以上なら0にしてから1引く。 //それ以外は1引く if(key[KEY_INPUT_UP]==1){ if(ycount>0) ycount=0; --ycount; } //下キーが押されてて、かつycountが0以下なら0にしてから1足す。 //それ以外は1足す if(key[KEY_INPUT_DOWN]==1){ if(ycount<0) ycount=0; ++ycount; } //カウント数から添字を求める。 ix=abs(xcount)%30/10; iy=abs(ycount)%30/10; //xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。 if(xcount>0){ ix+=3; result=ix; }else if(xcount<0){ //マイナスなら左向きなので、4行目の先頭添字番号を足す。 ix+=9; result=ix; } //yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。 if(ycount>0){ iy+=6; result=iy; }else if(ycount<0){ //1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました) iy+=0; result=iy; } //斜め移動の場合は横顔を優先 if(move==0.71f) result=ix; //押されてなければカウントをゼロにする。 if(key[KEY_INPUT_LEFT]!=1 && key[KEY_INPUT_RIGHT]!=1){ xcount=0; } if(key[KEY_INPUT_UP]!=1 && key[KEY_INPUT_DOWN]!=1){ ycount=0; } } void PLAYER::Draw() { //生きてれば描画 if(life){ //描画 DrawGraph(x-width/2,y-height/2,gh[result],TRUE); } } void PLAYER::All() { Move(); Draw(); }

こちらで、このプログラムだとうまくデバックができ動かすことができました。
そして次の章で移動制御のために追加すべきてあろう内容が

<span class = "stress"> //キャラの移動制御 if (x > 400 - MARGIN) { x = 400 - MARGIN; } else if (x < MARGIN) { x = MARGIN; } if (y > 480 - height / 2 - MARGIN) { y = 480 - height / 2 - MARGIN; } else if (y < height / 2 + MARGIN) { y = height / 2 + MARGIN; } < / span>

こちらの文でそれを追加したものがこちらになります。↓

#include "pch.h" #include "player.h" PLAYER::PLAYER() { //画像読み込み if (-1 == LoadDivGraph("shot_chara.png", 12, 3, 4, 29, 40, gh)) { MSG("エラー発生"); } width = 29; height = 40; //移動係数 move = 1.0f; //横方向と縦方向のカウント数。 xcount = 0, ycount = 0; //添字用変数 ix = 0, iy = 0, result = 0; //初期位置 x = 180; y = 400; life = true; } void PLAYER::Move() { if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) { if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) { //移動係数を0.71に設定 move = 0.71f; } else { //斜めじゃなければ1.0に設定 move = 1.0f; } } else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) { move = 1.0f; } if (key[KEY_INPUT_LEFT] == 1) { x -= (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_RIGHT] == 1) { x += (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_UP] == 1) { y -= (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_DOWN] == 1) { y += (int)PLAYER_SPEED * move; } <span class = "stress"> //キャラの移動制御 if (x > 400 - MARGIN) { x = 400 - MARGIN; } else if (x < MARGIN) { x = MARGIN; } if (y > 480 - height / 2 - MARGIN) { y = 480 - height / 2 - MARGIN; } else if (y < height / 2 + MARGIN) { y = height / 2 + MARGIN; } < / span> //左キーが押されてて、かつxcountが0以上なら0にしてから1引く。 //それ以外は1引く if (key[KEY_INPUT_LEFT] == 1) { if (xcount > 0) xcount = 0; --xcount; } //右キーが押されてて、かつxcountが0以下なら0にしてから1足す。 //それ以外は1引く if (key[KEY_INPUT_RIGHT] == 1) { if (xcount < 0) xcount = 0; ++xcount; } //上キーが押されてて、かつycountが0以上なら0にしてから1引く。 //それ以外は1引く if (key[KEY_INPUT_UP] == 1) { if (ycount > 0) ycount = 0; --ycount; } //下キーが押されてて、かつycountが0以下なら0にしてから1足す。 //それ以外は1足す if (key[KEY_INPUT_DOWN] == 1) { if (ycount < 0) ycount = 0; ++ycount; } //カウント数から添字を求める。 ix = abs(xcount) % 30 / 10; iy = abs(ycount) % 30 / 10; //xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。 if (xcount > 0) { ix += 3; result = ix; } else if (xcount < 0) { //マイナスなら左向きなので、4行目の先頭添字番号を足す。 ix += 9; result = ix; } //yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。 if (ycount > 0) { iy += 6; result = iy; } else if (ycount < 0) { //1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました) iy += 0; result = iy; } //斜め移動の場合は横顔を優先 if (move == 0.71f) result = ix; //描画 DrawGraph(x - width / 2, y - height / 2, gh[result], TRUE); //押されてなければカウントをゼロにする。 if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) { xcount = 0; } if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) { ycount = 0; } } void PLAYER::Draw() { //生きてれば描画 if (life) { //描画 DrawGraph(x - width / 2, y - height / 2, gh[result], TRUE); } } void PLAYER::All() { Move(); Draw(); }

それで実行しますと

1>

11>player.cpp 21>C:\Users\rikua\source\repos\gamegame\player.cpp(66,2): error C2059: 構文エラー: '<' 31>C:\Users\rikua\source\repos\gamegame\player.cpp(66,14): error C2332: 'class': タグ名がありません 41>C:\Users\rikua\source\repos\gamegame\player.cpp(68,25): error C2143: 構文エラー: ';' が '{' の前にありません。 51>C:\Users\rikua\source\repos\gamegame\player.cpp(71,3): error C2181: else 文が if と一致しません。 61>C:\Users\rikua\source\repos\gamegame\player.cpp(81,2): error C2059: 構文エラー: '<' 71>C:\Users\rikua\source\repos\gamegame\player.cpp(85,33): error C2143: 構文エラー: ';' が '{' の前にありません。 81>プロジェクト "gamegame.vcxproj" のビルドが終了しました -- 失敗。 9========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== 10 11

とエラーが出てしまい移動制御ができません・・・
サイトの説明に書いてあった他のdefine.hというファイルに
define MARGIN 10と追加もしたのですがうまくいかずに行き詰ってます・・

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C++ のコードとしてはあきらかに異質な <span class = "stress">< / span> という html タグらしきものが混ざっていますね。 エラーメッセージは読んでください。

投稿2020/10/21 05:28

SaitoAtsushi

総合スコア5444

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozawa252521

2020/10/21 05:38

こちらお手本のサイトの構文の画像なのですが https://dotup.org/uploda/dotup.org2286342.png これはhtmlの文章が間違って使われているという認識でよろしいでしょうか・・? もしその場合だと class="stress" //キャラの移動制御 if(x>400-MARGIN){ x=400-MARGIN; }else if(x<MARGIN){ x=MARGIN; } if(y>480-height/2-MARGIN){ y=480-height/2-MARGIN; }else if(y<height/2+MARGIN){ y=height/2+MARGIN; } のような形に変わる感じですかね・・?
SaitoAtsushi

2020/10/21 05:55

<span class = "stress"> と < / span> は除去してください。 これで囲まれた範囲を強調するために入れられているタグなので通常は表示されるものではないはずですが、 JavaScript のシンタクスハイライタが処理するにあたって誤ってコードの一部と認識してしまったせいで表示されているようです。
ozawa252521

2020/10/21 06:41

なるほど!わかりました!
ozawa252521

2020/10/21 06:43

できました!ありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問