お世話になっております。
現在カニ(これです-> V..V)を動かすソースを作成しています。
しかし、実際実行してみると、Vの右側が出力されないものが出てきます。
【出力結果】
V.. V.. V.. V..VV..V
昨日今日で調査をしていて、move_enemy関数に何かバグが潜んでいるんじゃないかなと思っているのですが、
まだ何となくの段階で原因も突き止められていません。
少々ソースが長く申し訳ありませんが、お分かりになる方、アドバイスをお願いいたします。
#include <stdio.h> #define DISPLAYROWMAX (35) #define DISPLAYCOLMAX (71) #define ENEMYMAX (5) typedef struct{ int row; int col; }enemyposition_t ; /***************************************************************************************************/ /* 呼び出し用 ***************************************************************************************/ void create_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[] , int enemynum) ; void move_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[]); /***************************************************************************************************/ void clear_screen(){ int loopcnt_row ; for(loopcnt_row =0 ;loopcnt_row < DISPLAYROWMAX ;loopcnt_row++){ printf("\x1b[2K"); printf("\x1b[1F"); } } void enemy_main(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[],int *turncnt, char *enemycnt){ int loopcnt_enemy ; *turncnt = 0; for(loopcnt_enemy = 0; loopcnt_enemy < ENEMYMAX ;loopcnt_enemy++){ if(0 == position[loopcnt_enemy].row){ if(' ' == display[1][3]){ create_enemy(display, position, loopcnt_enemy); } } move_enemy(display, position); } } void create_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[] ,int enemynum){ position[enemynum].row = 1 ; position[enemynum].col = 0 ; display[position[enemynum].row][position[enemynum].col] = 'V' ; display[position[enemynum].row][position[enemynum].col +1] = '.' ; display[position[enemynum].row][position[enemynum].col +2] = '.' ; display[position[enemynum].row][position[enemynum].col +3] = 'V' ; } void move_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[]){ int loopcnt_enemy ; for(loopcnt_enemy = 0; loopcnt_enemy < ENEMYMAX ; loopcnt_enemy++){ if(position[loopcnt_enemy].row != 0){ display[position[loopcnt_enemy].row][position[loopcnt_enemy].col] = ' ' ; //現在地クリア display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +1] = ' ' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +2] = ' ' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +3] = ' ' ; if(DISPLAYROWMAX -1 == position[loopcnt_enemy].row){ ; }else if(66 == position[loopcnt_enemy].col){ //端まで来たら改行 position[loopcnt_enemy].row += 1 ; position[loopcnt_enemy].col = 0 ; }else{ //それ以外は1マス進む position[loopcnt_enemy].col += 1 ; } display[position[loopcnt_enemy].row][position[loopcnt_enemy].col] = 'V' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +1] = '.' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +2] = '.' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +3] = 'V' ; } } } int main(void){ char display[DISPLAYROWMAX][DISPLAYCOLMAX] ; enemyposition_t position[ENEMYMAX] = {0}; int turncnt; char enemycnt; int loopcnt_row ; int loopcnt_col ; for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col++){ if(loopcnt_row == 0 && loopcnt_col != DISPLAYCOLMAX -1){ display[loopcnt_row][loopcnt_col] = '-'; }else if(loopcnt_col == DISPLAYCOLMAX -1){ display[loopcnt_row][loopcnt_col] = '\n'; }else{ display[loopcnt_row][loopcnt_col] = ' '; } } } while(1){ if(0xFFFFFF == turncnt){ enemy_main(display, position, &turncnt, &enemycnt) ; clear_screen(); for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col ++){ printf("%c", display[loopcnt_row][loopcnt_col]); } } } turncnt += 1; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/06 06:07