学习记录第二周day1(补)

一、Windows下获取方向键

1、导入#include<conin.h>

2、通过getch()返回值获取键盘上的键值

上:72 下:80 左:75 右:77

二、Linux下获取方向键:

1、在Windows中把getch.h文件放入共享文件夹中

2、把getch.h放入C标准库默认路径中,在Linux

sudo cp /media/sf_share/getch.h /usr/include/

3、给getch.h加读权限

sudo chmod +r /usr/include/getch.h

上:183 下:184 左:186 右:185

getch.h文件

(3条消息) Linux系统中获取键盘输入-Linux文档类资源-CSDN文库

三、走迷宫练习

数据分析:

1、定义字符型的二维数组作为地图

2、定义记录角色位置变量

逻辑分析:

进入死循环

1、显示地图

2、获取方向键并处理

前方是墙 不需要处理

前方是路 可以移动

前方位置变成'@'

原来位置变成' '

更新坐标变量

3、判断是否到达出口

如果是:程序结束

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <getch.h>
void up(void);
void down(void);
void right(void);
void left(void);
void show(void);
bool is_win(void);
bool is_move=true;
int x=4,y=4;    
int x_z=9,y_z=8;
int time1,time2;
    //1、定义地图二维数组
    char map [10][10]={
        {' ','#','#','#','#','#','#','#','#','#'},
        {' ',' ','#','#','#','#','#','#','#','#'},
        {'#',' ',' ','#','#','#','#','#','#','#'},
        {'#','#',' ',' ','#','#','#','#','#','#'},
        {'#','#','#',' ','@','#','#','#','#','#'},
        {'#','#','#','#',' ',' ','#','#','#','#'},
        {'#','#','#','#','#',' ',' ','#','#','#'},
        {'#','#','#','#','#','#',' ',' ','#','#'},
        {'#','#','#','#','#','#','#',' ',' ','#'},
        {'#','#','#','#','#','#','#','#',' ','#'},
        };
    //2、定义记录角色位置变量
int main()
{
    for(;;)
    {
        time1=time(NULL);
        show();
        int dir=getch();
        is_move=false;
        switch(dir)
        {
            case 183:up();break;
            case 184:down();break;
            case 186:left();break;
            case 185:right();break;

        }
        if(is_win())
        {
            show();
            time2=time(NULL);
            printf("游戏胜利,用时%d秒",time2-time1);
            return 0;
        }
    }
}

void show(void)
{
    system("clear");
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            printf("%c ",map[i][j]);
        }
        printf("\n");
    }
}

void right(void)
{
    if(y+1<10)
    {
    
        if(map[x][y+1]==' ')
        {
            map[x][y]=' ';
            map[x][y+1]='@';
            y=y+1;
            is_move=true;
        }
    }
}

void left(void)
{
    if(y-1>=0)
    {
    
        if(map[x][y-1]==' ')
        {
            map[x][y]=' ';
            map[x][y-1]='@';
            y=y-1;
            is_move=true;
        }
    }
}

void up(void)
{
    if(x-1>=0)
    {
    
        if(map[x-1][y]==' ')
        {
            map[x][y]=' ';
            map[x-1][y]='@';
            x=x-1;
            is_move=true;
        }
    }
}

void down(void)
{
    if(x+1<10)
    {
    
        if(map[x+1][y]==' ')
        {
            map[x][y]=' ';
            map[x+1][y]='@';
            x=x+1;
            is_move=true;
        }
    }
}

bool is_win(void)
{
    if(x==x_z&&y==y_z)
    {
        return true;
    }
    else
    {
        return false;
    }
}

四、推箱子练习

数据分析:

0 路

1 墙壁

2 人

3 箱子

4 目标点

6 人(目标点)

7 箱子(目标点)

1、定义整数类型的二维数组

2、定义记录人的位置变量 x,y

3、定义记录步数的变量

for(;;)

{

1、清屏、显示界面

2、获取方向键并处理

1、前方是路或者目标点

参考走迷宫 前方+2 原位置-2

2、人的前方是箱子,箱子的前方是路或目标点

3、判断在目标点上箱子的数量是否==4

是:结束程序

}

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
#include <stdbool.h>
void show(void);
void up(void);
void down(void);
void right(void);
void left(void);
bool is_wim(void);
int x=6,y=3,step=0;;
int arr[8][8]={
            {1,1,1,1,1,1,1,1},
            {1,1,1,4,4,1,1,1},
            {1,1,1,0,4,1,1,1},
            {1,1,0,0,3,4,1,1},
            {1,1,0,3,0,0,1,1},
            {1,0,0,1,3,3,0,1},
            {1,0,0,2,0,0,0,1},
            {1,1,1,1,1,1,1,1},
    };
int main()
{
    for(;;)
    {
        show();
        switch(getch())
        {
            case 183: up();break;
            case 184: down();break;
            case 185: right();break;
            case 186: left();break;
        }
        if(is_wim())
        {
            show();
            printf("共用了%d步",step);    
            return 0;
        }
    }
}

void show(void)
{
    system("clear");
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            if(arr[i][j]==0)
            {
                printf("  ");
            }
            if(arr[i][j]==1)
            {
                printf("# ");
            }
            if(arr[i][j]==2)
            {
                printf("@ ");
            }
            if(arr[i][j]==3)
            {
                printf("$ ");
            }
            if(arr[i][j]==4)
            {
                printf("O ");
            }
            if(arr[i][j]==6)
            {
                printf("@ ");
            }
            if(arr[i][j]==7)
            {
                printf("$ ");
            }
        }
        printf("\n");
    }
}

void up(void)
{
    if(arr[x-1][y]==0||arr[x-1][y]==4)
    {
        arr[x-1][y]+=2;
        arr[x][y]-=2;
        x-=1;
        step++;
    }
    else if((arr[x-1][y]==7||arr[x-1][y]==3)&&(arr[x-2][y]!=1&&arr[x-2][y]!=3&&arr[x-2][y]!=7))
    {
        arr[x-1][y]-=1;
        arr[x-2][y]+=3;
        arr[x][y]-=2;
        x-=1;
        step++;
    }
}

void down(void)
{
    
    if(arr[x+1][y]==0||arr[x+1][y]==4)
    {
        arr[x+1][y]+=2;
        arr[x][y]-=2;
        x+=1;
        step++;
    }
    else if((arr[x+1][y]==7||arr[x+1][y]==3)&&(arr[x+2][y]!=1&&arr[x+2][y]!=3&&arr[x+2][y]!=7))
    {
        arr[x+1][y]-=1;
        arr[x+2][y]+=3;
        arr[x][y]-=2;
        x+=1;
        step++;
    }
}

void right(void)
{
    
    if(arr[x][y+1]==0||arr[x][y+1]==4)
    {
        arr[x][y+1]+=2;
        arr[x][y]-=2;
        y+=1;
        step++;
    }
    else if((arr[x][y+1]==7||arr[x][y+1]==3)&&(arr[x][y+2]!=1&&arr[x][y+2]!=3&&arr[x][y+2]!=7))
    {
        arr[x][y+1]-=1;
        arr[x][y+2]+=3;
        arr[x][y]-=2;
        y+=1;
        step++;
    }
}

void left(void)
{
    
    if(arr[x][y-1]==0||arr[x][y-1]==4)
    {
        arr[x][y-1]+=2;
        arr[x][y]-=2;
        y-=1;
        step++;
    }
    else if((arr[x][y-1]==7||arr[x][y-1]==3)&&(arr[x][y-2]!=1&&arr[x][y-2]!=3&&arr[x][y-2]!=7))
    {
        arr[x][y-1]-=1;
        arr[x][y-2]+=3;
        arr[x][y]-=2;
        y-=1;
        step++;
    }
}

bool is_wim(void)
{
    int i=0;
    for(int j=0;j<8;j++)
    {
        for(int k=0;k<8;k++)
        {
            if(arr[j][k]==7)
            {
                i+=1;
            }
        }
    }
    if(i==4)
    {
        return true;
    }
    else
    {
        return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值