c语言小游戏控制移动


#include<stdio.h>
#include<conio.h>
#include<windows.h>
int row=20;//宽 
int line=20;//高 
char a[40][40];
void xiaoren()
{
    for(row=0;row<20;row++)
    {
        for(line=0;line<20;line++)
        {
            printf(" ");
        }
    }
    a[20][20]='o'; 
    printf("%c",a[row][line]);
}
void yidong()
{
    xiaoren();
    int z;
    for(z=0;z<20;z++)
    {
        z=_getch();
    }
    while(1)
    {
    switch(z)
      {
          case 'w' :
              a[row][line]=' ';
              row=row-1;
              a[row][line]='o';
              break;
              case 'a' :
                  a[row][line]=' ';
                  line=line-1;
                  a[row][line]='o';
                  break;
                  case 's' :
                          a[row][line]=' ';
                          row=row+1;
                          a[row][line]='o';
                          break;
                          case 'd':
                              a[row][line]=' ';
                              line=line+1;
                              a[row][line]='o';
                              break;
                          
        
       }    
    }
}
int main()
{
 yidong();
}

他不会动~还有没有什么其他更好的办法去控制

  1. 应该把getch放到while循环里,循环读取,并在打印前清空控制台
  2. xiaoren函数用来打印,不应该在xiaoren函数里修改"o"的位置
  3. 移动时应该判断row和line是否越界
  4. 应该设置一个按键用于退出循环

下面是修改后的代码


#include<stdio.h>
#include<conio.h>
#include<windows.h>
int row=20;//宽
int line=20;//高
char a[40][40];
void xiaoren()
{
    for(int i=0;i<40;i++){
        for(int j=0;j<40;j++){
            printf("%c",a[i][j]);
        }
        printf("\n");
    }
}
void yidong()
{
    xiaoren();
    char z;
    while(1)
    {
        z=getch();
        printf("%c",z);
        switch(z)
        {
            case 'w' :
                if(row != 0){
                    a[row][line]=' ';
                    row=row-1;
                    a[row][line]='o';
                }
                break;
            case 'a' :
                if(line != 0){
                    a[row][line]=' ';
                    line=line-1;
                    a[row][line]='o';
                }
                break;
            case 's' :
                if(row != 39){
                    a[row][line]=' ';
                    row=row+1;
                    a[row][line]='o';
                }
                break;
            case 'd':
                if(line != 39){
                    a[row][line]=' ';
                    line=line+1;
                    a[row][line]='o';
                }
                break;
            case 'q':
                return;
            default:
                break;
        }
        system("cls");
        xiaoren();
    }
}
int main()
{
    for(int i=0;i<40;i++){
        for(int j=0;j<40;j++){
            a[i][j] = ' ';
        }
    }
    a[row][line] = 'o';
    yidong();
}

你应该把while循环里面的switch语句,放进24行的那个for语句里面呀,不然while一直在循环,但是z始终不变(因为z只在for循环被改变)

img