zoj1056

来源:互联网 发布:中国人的智慧知乎 编辑:程序博客网 时间:2024/05/27 20:14

题目大意:

模拟一个简单的贪吃蛇游戏,有东(E)南(S)西(W)北(N)四个方向,当走到自己内部或者一个障碍物时结束

解题思路:

模拟移动过程

代码如下:

#include<iostream>#include<stdio.h>#include<string.h>using namespace std;typedef struct{  int row,col;}ro;ro road[25];char worm[50];int head,tail;int move_and_judge(char c){  int headrow,headcol,i;  if(c=='E')  {    headcol=road[1].col+1;headrow=road[1].row;    if(headcol>50||headcol<1||headrow>50||headrow<1)    {      return -1;    }    for(i=20;i>1;i--)    {      road[i].row=road[i-1].row;      road[i].col=road[i-1].col;      if(headrow==road[i].row&&headcol==road[i].col)      {        return 1;      }    }    road[1].row=headrow;road[1].col=headcol;  }  else if(c=='W')  {    headrow=road[1].row;headcol=road[1].col-1;    if(headcol>50||headcol<1||headrow>50||headrow<1)    {      return -1;    }    for(i=20;i>1;i--)    {      road[i].row=road[i-1].row;      road[i].col=road[i-1].col;      if(headrow==road[i].row&&headcol==road[i].col)      {        return 1;      }    }    road[1].row=headrow;road[1].col=headcol;  }  else if(c=='S')  {    headrow=road[1].row+1;headcol=road[1].col;    if(headcol>50||headcol<1||headrow>50||headrow<1)    {      return -1;    }    for(i=20;i>1;i--)    {      road[i].row=road[i-1].row;      road[i].col=road[i-1].col;      if(headrow==road[i].row&&headcol==road[i].col)      {        return 1;      }    }    road[1].row=headrow;road[1].col=headcol;  }  else if(c=='N')  {    headrow=road[1].row-1;headcol=road[1].col;    if(headcol>50||headcol<1||headrow>50||headrow<1)    {      return -1;    }    for(i=20;i>1;i--)    {      road[i].row=road[i-1].row;      road[i].col=road[i-1].col;      if(headrow==road[i].row&&headcol==road[i].col)      {        return 1;      }    }    road[1].row=headrow;road[1].col=headcol;  }  return 0;}int main(){  char dir[120];  int n;  while(scanf("%d",&n)!=EOF&&n)  {    int i,mark,flag=0,j;    scanf("%s",dir);    j=11;    for(i=20;i>=1;i--)    {      road[i].row=25;      road[i].col=j++;    }    for(i=0;i<strlen(dir);i++)    {      mark=move_and_judge(dir[i]);      if(mark>0)      {        printf("The worm ran into itself on move %d.\n",i+1);        flag=1;        break;      }      else if(mark<0)      {        printf("The worm ran off the board on move %d.\n",i+1);        flag=1;        break;      }    }    if(flag==0)    {      printf("The worm successfully made all %d moves.\n",strlen(dir));    }  }  return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 德国预科不能毕业怎么办 想出国打工怎么办手续 终结执行了该怎么办 网银界面打不开怎么办 abr检查结果异常怎么办 大排畸胎儿位置不好怎么办 交社保中途死了怎么办 不知道社保密码怎么办 社保卡没有信息怎么办 医保卡没有信息怎么办 信访局不受理怎么办 没身份证怎么办健康证 海峡银行怎么办医保卡 小学借读生学籍怎么办 光头也有头皮屑怎么办 情侣没话题了怎么办 月经前后有异味怎么办 头发里有湿疹怎么办 公务员退休职业年金怎么办 迅雷打不开怎么办安卓 苹果迅雷闪退怎么办 青羊区爱君家政欺骗学员怎么办 工地拿不到钱怎么办 包工头拿不到工程款怎么办 华夏盾密码错六次怎么办 怀孕六个月有孕纹了怎么办 课堂上不会讲课怎么办 怀孕吃薏米粥怎么办 吃了薏米肚子痛怎么办 孕期吃了薏米怎么办 怀孕误食薏米水怎么办 薏米吃多了怎么办 花生米炸糊了怎么办 经期吃了薏米怎么办 身体湿气很重怎么办 肠胃不好湿气重怎么办 我湿气特别重怎么办 脾胃不好湿气重怎么办 孕妇身体有湿气怎么办 孕妇身上有湿气怎么办 孕妇身上湿气重怎么办