yiwan 发表于 2016-5-17 15:09:11

编写推箱子! 移动的人和地图

本帖最后由 yiwan 于 2016-5-17 15:22 编辑


#include <stdio.h>
#include <stdlib.h>
#incluse <conio.h>

#define H 10 //地图高
#define W 10 //地图宽

typedef struct
{
   char person_x;
   char person_y;
}BOY;

int map={0};

void initmap(void); //初始化地图!
void pmap(void);
BOY person(void);//当前人物位子!
void move(BOY,char ch);    //移动坐标!

int main()
{
    char ch;
    initmap();
    pmap();

    while(1)
    {
    ch=getch();
    if(ch==27)
    {
      break;
    }
    while(ch=='a'&&ch=='s'&&ch=='d'&&ch=='w')
    {
    ch=getch();
    }
    move(person(),ch);
    pmap();
    }


}

void initmap(void)
{
    int i,j;
    for(i=0;i<H;i++)
    {
      for(j=0;j<W;j++)
      {
            if(i==0||i==H-1||j==0||j==W-1)
            {
                map=9;
            }
            else if(i==4&&j==5)
            {
                map=5;
            }
      }
    }
}

void pmap()
{
    int i,j;
    system("cls");
    for(i=0;i<H;i++)
    {
      
      for (j=0;j<W;j++)
      {
         if(map==9)
         {
                printf("□");
         }
         else if(map==0)
         {
               printf("");
         }
         else if(map==5)
         {
               printf("♀");
         }
      }
         printf("\n");
    }

}

BOY person(void)
{
    BOY son;
    int i,j;
    for(i=0;i<H;i++)
    {
      for(j=0;j<W;j++)
      {
            if(map==5)
            {
                son.person_y=i;
                son.person_x=j;
            }
      }
    }
    return son;
   
}

void move(BOY boy,char ch)
{
    BOY boy2=boy; //保存当前人物位置;
    map=0;
    switch(ch)
    {
    case 'a':
    case 'A':boy.person_x-=1;break;
    case 's':
    case 'S':boy.person_y+=1;break;
    case 'd':
    case 'D':boy.person_x+=1;break;
    case 'w':
    case 'W':boy.person_y-=1;break;
    }

    if(map==9) //撞墙检测
    {
      map=5;
    }
    else
    {
      map=5;
    }
}

yiwan 发表于 2016-5-17 15:10:04

后续编写中!
页: [1]
查看完整版本: 编写推箱子! 移动的人和地图