推箱子小游戏

#include <stdio.h>
#include<stdbool.h>
#include “get_keyboard.h”
//座位 排 每一排 多少列 7行8列 两个维度 行和列 编号索引 行[0-6] 列[0-7]
//0 路
//1 墙
//2 箱子
//3 终点
//4 小老鼠
//5 小老鼠站在终止上
//6 箱子到达终点上
//7
int g_boards[7][8] =
{
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,1},
{1,3,0,1,1,2,0,1},
{1,0,3,3,2,0,0,1},
{1,0,0,1,2,0,0,1},
{1,0,0,4,0,1,1,1},
{1,1,1,1,1,0,0,0}
};
int boards[7][8];
//记录小老鼠的位置 控制移动 改变小老鼠在地图中的位置
int row = 0;
int col = 0;
int cnt = 0;//箱子 个数

//数组 容器
//一维 只有一行 有多少个取决于长度 编号索引 [0-数组长度-1]
//二维 行和列
void showboard(){
system(“clear”);
int i=0,j=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
switch(boards[i][j]){
case 0:printf(" “);break;
case 1:printf(”#");break;
case 6:
case 2:printf("@");break;
case 3:printf(“o”);break;
case 5:
case 4:printf("$");break;
}
}
printf("\n");
}
}
void move(int nrow,int ncol,int nnrow,int nncol){
int body=boards[nrow][ncol];
switch(boards[nrow][ncol]){
case 0://前方为路
boards[row][col]=boards[row][col]4?0:3;
row=nrow;
col=ncol;
boards[row][col]=4;
break;
case 6:
case 2:{//前方为箱
int nn=boards[nnrow][nncol];
if(nn
0||nn3){
if(nn
0){
boards[nnrow][nncol]=2;
if(body6){
cnt++;
}
}else if(nn
3){
boards[nnrow][nncol]=6;
if(body!=6){
cnt–;
}
}

			boards[row][col]=boards[row][col]==4?0:3;
			row=nrow;
			col=ncol;
			boards[row][col]=(body==2)?4:5;
		}
		break;
		
	}	
	case 3://前方为终点
		boards[row][col]=boards[row][col]==4?0:3;
		row=nrow;
		col=ncol;
		boards[row][col]=5;
		break;
/*	case 6://箱子在终点上
		if(boards[nnrow][nncol]==0){
			boards[nnrow][nncol]=2;
			boards[row][col]=boards[row][col]==4?0:3;
			row=nrow;
			col=ncol;
			boards[row][col]=5;
		}else if(boards[nnrow][nncol]==3){
			boards[nnrow][nncol]=6;
			boards[row][col]=boards[row][col]==4?0:3;
			row=nrow;
			col=ncol;
			boards[row][col]=5;
		}
		break;*/
}

}
void init(){
int i=0,j=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
if(boards[i][j]==4){
row=i;
col=j;
}
if(boards[i][j]2){
cnt++;
}
}
}
}
void reset(){
int i=0,j=0;
cnt=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
boards[i][j]=g_boards[i][j];
}
}
init();
}
void start(){
while(true){
showboard();
if(cnt
0){
printf(“congratulation!\n”);
exit(0);
}
int opt=get_keyboard();
switch(opt){
case KEY_UP:move(row-1,col,row-2,col);break;
case KEY_DOWN:move(row+1,col,row+2,col);break;
case KEY_LEFT:move(row,col-1,row,col-2);break;
case KEY_RIGHT:move(row,col+1,row,col+2);break;
case KEY_ENTER:reset();break;
case KEY_q:return;break;
}
}
}
int main(){
reset();
start();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值