自分に出された課題で、三角形やダイヤ型といった実行画面例をfor文を使って解いたのですが、
画像の実行例題7・8は法則がまったくわからなくて困っています><;
関数の定義など、基礎の基礎は一応理解しているのですがこの2問はどうしても解けません。
ヒントだけでも全然構いません。解法の道筋だけでも教えて頂けたら幸いに思います;;
どうかよろしくお願いいたします<(_ _)>




#include <stdio.h>
#define MAX 100
int main(void)
{
char buf[MAX][MAX] = {1};
int mass, dire = 0;
int x = 0, y = 0, c = 0;
scanf("%d", &mass);
while(c++ < mass){
switch(dire){
case 0: while(x == mass - 2 || x < mass - 2 && !buf[x + 2][y]) buf[x += 1][y] = 1; dire++; break;
case 1: while(y == mass - 2 || y < mass - 2 && !buf[x][y + 2]) buf[x][y += 1] = 1; dire++; break;
case 2: while(x == 1 || x > 0 && !buf[x - 2][y]) buf[x -= 1][y] = 1; dire++; break;
case 3: while(y == 1 || y > 0 && !buf[x][y - 2]) buf[x][y -= 1] = 1; dire = 0; break;
}
}
for(y = 0;y<mass;y++){
for(x = 0;x<mass;x++){
printf("%s", buf[x][y] ? "*" : " ");
}
printf("\n");
}
return 0;
}