推箱子
一、修改linux终端的背景色,字体色等属性
1、printf("\33[%dm", num);
1)30 30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
2)40 40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
2、printf("\33[?25l") 隐藏光标
3、printf("\33[%d;%dH", x, y) 控制光标的位置
x >= 1 y>=1
二 、游戏设置
1、用一个二维数组表示游戏区
int flag[8][8]={
{0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 2, 1, 0, 0, 0},
{0, 0, 1, 0, 1, 1, 1, 1},
{1, 1, 1, 3, 0, 3, 2, 1},
{1, 2, 0, 3, 4, 1, 1, 1},
{1, 1, 1, 1, 3, 1, 0, 0},
{0, 0, 0, 1, 2, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0}
};
2、数组中为1的地方是边框,为2的地方是目的地,为3的地方是箱子,为4的地方是人,为0的地方是空
三、边框
/*
打印边框,游戏区是8x8的正方形区域
用两层for循环打印,在border数组中为1的地方打印"++"
注意:打印的时候行每次加1,列每次加2
*/
void draw_border()
{
int i,j;
for(i=0; i {
for(j=0; j {
if(flag[i][j] == 1)
{
printf("\33[%d;%dH", START_ROW+i, START_COL+j*2); //确定坐标
printf("\33[40m"); //修改背景色:黑
printf("||");
printf("\33[47m"); //
}
}
}
}
四、判断能否人移动
1、能否向左
如果 左边没有东西(0,2) 那么可以向左
如果 左边有东西
如果左边是墙(1),那么不可移向左
如果左边是箱子(3)
如果箱子的左边没东西(0,2),那么可以向左
如果箱子左边有东西(1,3),那么不能向左
2、右
3、上
4、下
五、人移动
1、人向左移
如果人能左移
1)flag[people.row][people.col] = 0
2) flag[people.row][people.col-1] = 4
3) 如果左边有箱子
flag[people.row][people.col-2] = 3
4) peolple.col--; //人的坐标移动
2、
六、过关
如果flag[][]没有2,过关
一、修改linux终端的背景色,字体色等属性
1、printf("\33[%dm", num);
1)30 30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
2)40 40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
2、printf("\33[?25l") 隐藏光标
3、printf("\33[%d;%dH", x, y) 控制光标的位置
x >= 1 y>=1
二 、游戏设置
1、用一个二维数组表示游戏区
int flag[8][8]={
{0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 2, 1, 0, 0, 0},
{0, 0, 1, 0, 1, 1, 1, 1},
{1, 1, 1, 3, 0, 3, 2, 1},
{1, 2, 0, 3, 4, 1, 1, 1},
{1, 1, 1, 1, 3, 1, 0, 0},
{0, 0, 0, 1, 2, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 0, 0}
};
2、数组中为1的地方是边框,为2的地方是目的地,为3的地方是箱子,为4的地方是人,为0的地方是空
三、边框
/*
打印边框,游戏区是8x8的正方形区域
用两层for循环打印,在border数组中为1的地方打印"++"
注意:打印的时候行每次加1,列每次加2
*/
void draw_border()
{
int i,j;
for(i=0; i {
for(j=0; j {
if(flag[i][j] == 1)
{
printf("\33[%d;%dH", START_ROW+i, START_COL+j*2); //确定坐标
printf("\33[40m"); //修改背景色:黑
printf("||");
printf("\33[47m"); //
}
}
}
}
四、判断能否人移动
1、能否向左
如果 左边没有东西(0,2) 那么可以向左
如果 左边有东西
如果左边是墙(1),那么不可移向左
如果左边是箱子(3)
如果箱子的左边没东西(0,2),那么可以向左
如果箱子左边有东西(1,3),那么不能向左
2、右
3、上
4、下
五、人移动
1、人向左移
如果人能左移
1)flag[people.row][people.col] = 0
2) flag[people.row][people.col-1] = 4
3) 如果左边有箱子
flag[people.row][people.col-2] = 3
4) peolple.col--; //人的坐标移动
2、
六、过关
如果flag[][]没有2,过关