###前提・実現したいこと
将来的にゲームを作りたいと思っています。
そのため、まずC言語でキーボード入力でキャラクターの座標を動かすプログラムを作成しようと思いました。
###発生している問題・エラーメッセージ
数字の0,1,2,それ以外で上下左右の方向に移動するように割り当てたのですが、どの数字をキーボードで入力してもxy座標が(75,-25)になってしまい、なおかつ変わりません。
ここで行き詰ってしまったので、ぜひ皆さんの知恵を貸してください!
###ソースコード
C
1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3#include <stdlib.h> 4#include <time.h> 5#define _USE_MATH_DEFINES 6#include <math.h> 7 8typedef struct car { 9 int x; //現在位置x 10 int y; //現在位置y 11 double max_x; //xの最大値 12 double max_y; //yの最大値 13 int L = 50; 14}car; 15 16int move(car car, int a, int area); 17 18int main() { 19 FILE *file; 20 file = fopen("car.csv", "w"); 21 car car; 22 23 int num_step; //ステップ数 24 int j; 25 int a, sd; 26 int area; 27 28 int reward; 29 30 int num_a; //行動 31 int num_s; //状態 32 33 34 car.max_x = 250; 35 car.max_y = 250; 36 num_a = 4; 37 38 //エリアの数 39 num_s = 25; 40 41 //初期設定 42 car.x = 25; 43 car.y = 25; 44 area = car.x / 50 + car.y / 50 * 5; 45 46 for (j = 0; j < 10; j++) { 47 fprintf(file, "j=%d\n", j); 48 49 scanf("%d", &a); 50 sd = move(car, a, area); 51 52 //ここで障害物の設定 53 //障害物があるareaに入るとrewardに-10が入り試行を終了する 54 //Goalに入るとrewardに+10が入り試行を終了 55 //その他はreward=0なのでそのまま続行 56 if (area = 24) { 57 reward = 10; 58 } 59 else if (area = 5 || 8 || 13 || 22) { 60 reward = -10; 61 } 62 else { 63 reward = 0; 64 } 65 //もしxとyが環境の範囲からでたらreward=-1を入れる 66 if (car.x < 0 || car.max_x < car.x || car.y < 0 || car.max_y < car.y) { 67 reward = -1; 68 } 69 70 if (reward < 0) { 71 //失敗 72 car.x = 0; 73 car.y = 0; 74 area = car.x / 50 + car.y / 50 * 5; 75 break; 76 } 77 else if (reward < 0) { 78 79 //成功 80 car.x = 0; 81 car.y = 0; 82 area = car.x / 50 + car.y / 50 * 5; 83 break; 84 } 85 else { 86 //続行 87 area = sd; 88 }fprintf(file, "%d,%d,%d,%d,%d\n", car.x, car.y, a, sd, area); 89 } 90 fclose(file); 91 return 0; 92} 93 94int move(car car, int a,int area) { 95 if (a = 0) { 96 car.y = car.y + 50; 97 } 98 if (a = 1) { 99 car.x = car.x + 50; 100 } 101 if (a = 2) { 102 car.y = car.y - 50; 103 } 104 else { 105 car.x = car.x - 50; 106 } 107 108 printf("%d,%d\n", car.x, car.y); 109 int sd; 110 //sdはアクションが起こった後のareaを表す 111 sd = car.x / 50 + car.y / 50 * 5; 112 113 return area; 114}
###補足情報(言語/FW/ツール等のバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/24 12:09