現在のコード
char.cpp
#include "../include/GV.h"
void ch_init() {
ch.first_x = (FIELD_WIDTH - 50) / 2;
ch.first_y = 500;
}
void calc_ch() {
ch.cnt++;
ch.img=(ch.cnt % 24) / 6;
}
void ch_move() {
int joge_flag = 0, sayu_flag = 0; //左右上下の押下フラグ
double x, y, mx, my, naname = 1; //x座標y座標、動いたx距離、動いたy距離
double move_x[4] = {-4.0, 4.0, 0.0, 0.0}, move_y[4] = {0.0, 0.0, -4.0, 4.0}; //{左右上下}の移動スピード
int input_key[4]; //左右上下のキー格納
input_key[0] = CheckHitKey(KEY_INPUT_LEFT); input_key[1] = CheckHitKey(KEY_INPUT_RIGHT); //左右方向のキー入力
input_key[2] = CheckHitKey(KEY_INPUT_UP); input_key[3] = CheckHitKey(KEY_INPUT_DOWN); //上下方向のキー入力
/*
//左右キ-が押されていなかったら
for (int i = 0; i < 2; i++) { //左右分のループ
if (input_key[i] == 0) { //もしi番目(左右)が押されていなかったら
if (frame_cnt % 15 == 0) { //もしframe_cntを15で割った余りが0ならば
if (ch.img == NEUTRAL_CH_IMG_MAX) //もしキャラの画像が3(最大)だったのなら
ch.img = FIRST_NEUTRAL_CH_IMG; //元の番号に戻す
ch.img++; //キャラ画像をプラスする
}
}
}
if (input_key[0] == 1) { //左方向キーが押されていたら
ch.img = FIRST_LT_CH_IMG; //画像をはじめの左向き画像に
if (frame_cnt % 15 == 0) { //もしframe_cntを15で割った余りが0ならば
if (ch.img == LT_CH_IMG_MAX) //もしキャラの画像が11(最大)だったのなら
ch.img = FIRST_LT_CH_IMG; //元の番号に戻す
ch.img++; //キャラの画像番号をプラスする
}
} else if (input_key[1] == 1) { //右方向キーが押されていたら
ch.img = FIRST_RT_CH_IMG; //左向きの初期値
if (frame_cnt % 15 == 0) { //もしframe_cntを15で割った余りが0ならば
if (ch.img == RT_CH_IMG_MAX) //もしキャラの画像が8(最大)だったのなら
ch.img = FIRST_RT_CH_IMG; //元の番号に戻す
ch.img++; //キャラの画像番号をプラスする
}
}
*/
/*
// 左右キーの入力の状況によって、アニメーションに使う画像の範囲を決める
if (input_key[0] == 1) { //左方向キーが押されていたら
first_img = FIRST_LT_CH_IMG;
last_img = LT_CH_IMG_MAX;
} else if (input_key[1] == 1) { //右方向キーが押されていたら
first_img = FIRST_RT_CH_IMG;
last_img = RT_CH_IMG_MAX;
} else { //左右キ-が押されていなかったら
first_img = FIRST_NEUTRAL_CH_IMG;
last_img = NEUTRAL_CH_IMG_MAX;
}
// アニメーションをする
if (ch.img < first_img || last_img < ch.img) { //前の状態が異なる範囲だったら
//今の範囲の最初の画像にする
ch.img = first_img;
}
if (frame_cnt % 15 == 0) { //もしframe_cntを15で割った余りが0ならば (frame_cntは0で初期化してその後変更されないので、絶対0のはずだけど)
if (ch.img == last_img) //もしキャラの画像が最大だったのなら
ch.img = first_img; //元の番号に戻す
ch.img++; //キャラの画像番号をプラスする
}
*/
if(input_key[0] == 1)//左キーが押されていたら
ch.img += 4 * 2;//画像を左向きに
else if(input_key[1] == 1)//右キーが押されていたら
ch.img += 4 * 1;//画像を右向きに
for (int i = 0; i < 2; i++) //左右二回分
if (input_key[i] == 1) //左右どちらかの入力があれば
sayu_flag = 1; //左右フラグを1にする
for (int i = 2; i < 4; i++) //左右二回分
if (input_key[i] == 1) //上下どちらかの入力があれば
joge_flag = 1; //上下フラグを1にする
if (sayu_flag == 1 && joge_flag == 1) //どちらも入力があれば
naname = sqrt(2.0); //斜めを1√2に
for (int i = 0; i < 4; i++) { //左右上下の4回分繰り返す
if (input_key[i] == 1) { //i番目のキーの入力があれば
x = ch.x, y = ch.y; //現在の座標を取り敢えず代入
mx = move_x[i], my = move_y[i]; //i番目の移動分をmx,myに代入
x += mx / naname, y += my / naname; //現在の座標と移動分を足す
if (x < FIELD_WIDTH && x > 0 &&
y < FIELD_HEIGHT && y > 0)
ch.x = x, ch.y = y;
}
}
}
みけCATさんに言われたとおり、||を&&にしたのですが、プレイヤーの周りに当たり判定ができて、動けません。
C言語の館(9章)では、||になっていたのですがどういうことでしょうか?
また、C言語の館は初期の位置がちゃんと下の方の真ん中で、どこで初期のx,yを定義しているのでしょうか?
度々質問してしまい、すみません。お願いします。