我想搞一个能让'2'用指令的方式进行移动,并且将路径保留下来(类似Python的turtle库),尝试用C++的数组实现,但是这个转弯的部分我不太会,dalao们能指点一下吗?谢谢
#include <bits/stdc++.h>
using namespace std;
long long INF = 0x7fffffff;
int a[32][32];
void fd(int x){
int dx, dy;
for(int i = 0; i <= 32; i++){
for(int j = 0; j <= 32; j++){
if(a[i][j] == 2){
dx = i;
dy = j;
}
}
}
if(dx + x > 32){
a[dx][dy] = 1;
a[32][dy] = 2;
for(int i = 1; i < x && (dx + i) <= 32; i++) if(a[dx + x][dy] != 2) a[dx + i][dy] = 1;
}else{
a[dx][dy] = 1;
a[dx - x][dy] = 2;
for(int i = 1; i < x; i++) a[dx - i][dy] = 1;
}
}
void back(int x){
int dx, dy;
for(int i = 0; i <= 32; i++){
for(int j = 0; j <= 32; j++){
if(a[i][j] == 2){
dx = i;
dy = j;
}
}
}
if(dx + x > 32){
a[dx][dy] = 1;
a[32][dy] = 2;
for(int i = 1; i < x && (dx + i) <= 32; i++) if(a[dx + x][dy] != 2) a[dx + i][dy] = 1;
}else{
a[dx][dy] = 1;
a[dx - x][dy] = 2;
for(int i = 1; i < x; i++) a[dx - i][dy] = 1;
}
}
void left(int y, int jd){
int dx, dy;
for(int i = 0; i <= 32; i++){
for(int j = 0; j <= 32; j++){
if(a[i][j] == 2){
dx = i;
dy = j;
}
}
}
if(jd == 90){
if(dy - y < 0){
a[dx][0] = 2;
a[dx][dy] = 1;
for(int i = 1; i < y && (dy - y) >= 0; i++) if(a[dx][dy - y] != 2) a[dx][dy - i] = 1;
}else{
a[dx][dy - y] = 2;
a[dx][dy] = 1;
for(int i = 1; i < y; i++) a[dx][dy - i] = 1;
}
}else if(jd == -90){
if(dy + y > 32){
a[dx][32] = 2;
a[dx][dy] = 1;
for(int i = 1; i < y && (dy + y) <= 32; i++) if(a[dx][dy + i] != 2) a[dx][dy + i] = 1;
}else{
a[dx][dy - y] = 2;
a[dx][dy] = 1;
for(int i = 1; i < y; i++) a[dx][dy + i] = 1;
}
}else if(jd == 45){
if(dx + y > 32 || dy - y < 0){
a[dx][0] = 1;
if(dx + y > 32){
int oooooo;
for(oooooo = 1; oooooo <= y; oooooo++){
if(dx + oooooo <= 32) a[dx + oooooo][dy + oooooo] = 1;
else a[32][oooooo] = 1;
}
a[32][oooooo] = 2;
}else if(dy - y < 0){
int oooooo;
for(oooooo = 1; oooooo <= y; oooooo++){
if(dy + oooooo <= 32) a[dx + oooooo][dy - oooooo] = 1;
a[dx + oooooo][0] = 1;
}
a[oooooo][0] = 2;
}else if(dx + y > 32 && dy - y < 0){
int oooooo;
for(oooooo = 1; oooooo <= y; oooooo++){
if(dx + oooooo <= 32 && dy + oooooo <= 32) a[dx + oooooo][dy - oooooo] = 1;
else if(dx + oooooo > 32 && dy + oooooo <= 32) a[32][dy - oooooo] = 1;
else if(dx + oooooo <= 32 && dy + oooooo > 32) a[dx + oooooo][0] = 1;
else break;
}
a[32][32] = 2;
}else{
int oooooo;
for(oooooo = 1; oooooo <= y; oooooo++) a[dx + oooooo][dy - oooooo] = 1;
a[dx + oooooo][dy - oooooo] = 2;
}
}
}else if(jd == -45){
int sp;
for(sp = 1; sp <= y; sp++){
if(dx + sp >= 0 && dy + sp >= 0) a[dx + sp][dy + sp] = 1;
else if(dx + sp >= 0 && dy + sp < 0) a[dx + sp][0] = 1;
else if(dx + sp < 0 && dy + sp >= 0) a[0][dy + sp] = 1;
else break;
}
a[0][0] = 2;
}
}
void right(int y, int jd){
int dx, dy;
for(int i = 0; i <= 32; i++){
for(int j = 0; j <= 32; j++){
if(a[i][j] == 2){
dx = i;
dy = j;
}
}
}
if(jd == 90){
if(dy + y > 32){
int i;
for(i = 1; i <= y && (dy + i <= 32); i++) a[dx][dy + i] = 1;
a[dx][dy + i] = 2;
}else{
int i;
for(i = 1; i <= y; i++) a[dx][dy + i] = 1;
a[dx][dy + i] = 2;
}
}else if(jd == 45){
int i;
for(i = 1; i <= y; i++){
if(dx + i <= 32 && dy + i <= 32) a[dx + i][dy + i] = 1;
else if(dx + i > 32 && dy + i <= 32) a[32][dy + i] = 1;
else if(dx + i <= 32 && dy + i > 32) a[dx + i][32] = 1;
else break;
}
a[32][32] = 2;
}else if(jd == -45){
int i;
for(i = 1; i <= y; i++){
if(dx - i >= 0 && dy + i <= 32) a[dx - i][dy + i] = 1;
else if(dx - i < 32 && dy + i <= 32) a[32][dy + i] = 1;
else if(dx - i >= 0 && dy + i > 32) a[dx - i][32] = 1;
else break;
}
a[0][32] = 2;
}
}
int main(){
a[16][16] = 2;
int n, bx, jiaodu;
string tmp;
scanf("%d", &n);
for(int i = 0; i < n; i++){
cin >> tmp;
cin >> bx;
if(tmp == "fd") fd(bx);
else if(tmp == "back") back(bx);
else if(tmp == "left"){
scanf("%d", &jiaodu);
left(bx, jiaodu);
}else if(tmp == "right"){
scanf("%d", &jiaodu);
right(bx, jiaodu);
}else printf("语法错误");
}
for(int i = 0; i <= 32; i++){
for(int j = 0; j <= 32; j++){
printf("%d", a[i][j]);
}
printf("\n");
}
return 0;
}