case 'd':
book++; //如果人前面是空地。 if(map[j+1]==0) { map[j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。 if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。 else map[j]=0; //否则原地ID修改为空地ID 。 } //如果人前面是目的地。 else if(map[j+1]==3) { map[j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。 if(map[j]==9) //如果原地也是目的地(ID为)。 map[j]=3; //人走后把原地ID修改回目的地ID。 else map[j]=0; //否则原地ID修改为为空地ID } //如果人前面是箱子。 else if(map[j+1]==4) { //如果人前面是箱子,而箱子前面是空地。 if (map[j+2]==0) { map[j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[j+1]==7) //如果箱子原地为目的地。 map[j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[j]==9) //如果之前是目的地。 map[j]=3; //人走了之后修改回目的地ID。 else map[j]=0; //否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 else if (map[j+2]==3) { count++; map[j+2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 //下面是对箱子原先位置的判断,同上。 if(map[j+1]==7) map[j+1]=9; else map[j+1]=6; //下面是对人原先位置进行判断,同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 else if(map[j+1]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[j+2]==0) { count--; map[j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[j+1]=9; //人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[j+2]==3) { map[j+2]=7; //把箱子推入了另一目的地,自然,ID也应是。 map[j+1]=9; //人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } break; } if(count==target) //如果分数达到分 { system("CLS"); //清屏 draw_map(map); break; //退出死循环 } } Sleep (2000); printf("\nYOU WIN!!!\n"); //过关提示 printf("\nYou took %d steps to compelete the game!\n",book); Sleep (3000); } void Hrun() { char input; int i,j,target,count,a,book=0; //定义记分变量 FILE *fin=fopen("map2.txt","r"); if(fin==NULL){ printf("read file error"); } fscanf(fin,"%d%d%d%d",&row,&col,&target,&count); for(i=1;i<=row;i++) for(j=1;j<=col;j++) fscanf(fin,"%d",&map[j]); while (1) //死循环,等待用户命令 { system("CLS"); draw_map(map); printf("step:%d\n",book); printf("score:%d/%d\n",count,target); //找初始位置 for(i=1;i<=row;i++){ for(j=1;j<=col;j++){ if (map[j]==6||map[j]==9) break; } if (map[j]==6||map[j]==9) break; } printf("coordinate%d,%d)\n",i,j); input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。 switch (input) { case 'w': book++; //如果人前面是空地。 //0代表空地 6代表人 3代表目的地 if(map[i-1][j]==0) { map[i-1][j]=6+0; //人往前走一步,ID为人的ID加上空地的ID。 if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID加上目的地ID)。 map[j]=3; //将人往前走一步后原地的ID修改为目的地ID。 else map[j]=0; //否则原地ID修改为空地ID。 } //如果人前面是目的地。 else if((map[i-1][j]==3)||(map[i-1][j]==9)) { map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。 if(map[j]==9) //如果原地也是目的地(ID为9)。 map[j]=3; //人走后把原地ID修改回目的地ID。 else map[j]=0; //否则原地ID修改为为空地ID } //如果人前面是箱子。//4代表箱子 7箱子进入目的地 else if(map[i-1][j]==4) { //如果人前面是箱子,而箱子前面是空地。 if (map[i-2][j]==0) { map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID //下面是对箱子原地进行判断 if(map[i-1][j]==7) //如果箱子原地为目的地。 map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[j]==9) //如果之前是目的地。 map[j]=3; //人走了之后修改回目的地ID。 else map[j]=0; //否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 else if (map[i-2][j]==3) { map[i-2][j]=7; //ID为(目的地ID+箱子ID=7),表示已经把箱子推入了目的地。 count++; //下面是对箱子原先位置的判断,同上。 if(map[i-1][j]==7) map[i-1][j]=9; else map[i-1][j]=6; //下面是对人原先位置进行判断,同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 else if(map[i-1][j]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i-2][j]==0) { count--; map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i-2][j]==3) { map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。 map[i-1][j]=9; //人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } break; case 's': book++; //如果人前面是空地。 if(map[i+1][j]==0) { map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。 if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。 else map[j]=0; //否则原地ID修改为空地ID 。 } //如果人前面是目的地。 else if(map[i+1][j]==3) { map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。 if(map[j]==9) //如果原地也是目的地(ID为)。 map[j]=3; //人走后把原地ID修改回目的地ID。 else map[j]=0; //否则原地ID修改为为空地ID } //如果人前面是箱子。 else if(map[i+1][j]==4) { //如果人前面是箱子,而箱子前面是空地。 if (map[i+2][j]==0) { map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[i+1][j]==7) //如果箱子原地为目的地。 map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[j]==9) //如果之前是目的地。 map[j]=3; //人走了之后修改回目的地ID。 else map[j]=0; //否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 else if (map[i+2][j]==3) { map[i+2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 count++; //下面是对箱子原先位置的判断,同上。 if(map[i+1][j]==7) map[i+1][j]=9; else map[i+1][j]=6; //下面是对人原先位置进行判断,同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 else if(map[i+1][j]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i+2][j]==0) { count--; map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i+2][j]==3) { map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。 map[i+1][j]=9; //人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } break; case 'a': book++; //如果人前面是空地。 if(map[j-1]==0) { map[j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。 if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。 else map[j]=0; //否则原地ID修改为空地ID 。 } //如果人前面是目的地。 else if(map[j-1]==3) { map[j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。 if(map[j]==9) //如果原地也是目的地(ID为)。 map[j]=3; //人走后把原地ID修改回目的地ID。 else map[j]=0; //否则原地ID修改为为空地ID } //如果人前面是箱子。 else if(map[j-1]==4) { //如果人前面是箱子,而箱子前面是空地。 if (map[j-2]==0) { map[j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[j-1]==7) //如果箱子原地为目的地。 map[j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[j]==9) //如果之前是目的地。 map[j]=3; //人走了之后修改回目的地ID。 else map[j]=0; //否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 else if (map[j-2]==3) { count++; map[j-2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 //下面是对箱子原先位置的判断,同上。 if(map[j-1]==7) map[j-1]=9; else map[j-1]=6; //下面是对人原先位置进行判断,同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 else if(map[j-1]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[j-2]==0) { count--; map[j-2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[j-1]=9; //人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[j-2]==3) { map[j-2]=7; //把箱子推入了另一目的地,自然,ID也应是。 map[j-1]=9; //人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } break; case 'd': book++; //如果人前面是空地。 if(map[j+1]==0) { map[j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。 if(map[j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[j]=3; //将人往前走一步后原地的ID修改为空地ID()。 else map[j]=0; //否则原地ID修改为空地ID 。 } //如果人前面是目的地。 else if(map[j+1]==3) { map[j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。 if(map[j]==9) //如果原地也是目的地(ID为)。 map[j]=3; //人走后把原地ID修改回目的地ID。 else map[j]=0; //否则原地ID修改为为空地ID } //如果人前面是箱子。 else if(map[j+1]==4) { //如果人前面是箱子,而箱子前面是空地。 if (map[j+2]==0) { map[j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[j+1]==7) //如果箱子原地为目的地。 map[j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[j]==9) //如果之前是目的地。 map[j]=3; //人走了之后修改回目的地ID。 else map[j]=0; //否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 else if (map[j+2]==3) { count++; map[j+2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 //下面是对箱子原先位置的判断,同上。 if(map[j+1]==7) map[j+1]=9; else map[j+1]=6; //下面是对人原先位置进行判断,同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 else if(map[j+1]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[j+2]==0) { count--; map[j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[j+1]=9; //人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[j+2]==3) { map[j+2]=7; //把箱子推入了另一目的地,自然,ID也应是。 map[j+1]=9; //人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[j]==9) map[j]=3; else map[j]=0; } } break; } if(count==target) //如果分数达到分 { system("CLS"); //清屏 draw_map(map); break; //退出死循环 } } Sleep (2000); printf("\nYOU WIN!!!\n"); //过关提示 printf("\nYou took %d steps to compelete the game!\n",book); Sleep (3000); }
|