黑马程序员技术交流社区
标题:
迷宫游戏
[打印本页]
作者:
yuyang
时间:
2015-1-5 23:35
标题:
迷宫游戏
//
// main.c
// 17-迷宫游戏优化
//
// Created by mac on 15-1-5.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
#define COL 12
#define ROW 6
/**
* 打印地图
*
* @param map 地图的数组
*/
void printMap(char map[ROW][COL]){
for (int i=0; i<ROW; i++) {
for (int j=0; j<COL; j++) {
printf("%c",map[i][j]);
}
printf("\n");
}
}
/**
* 实现了小人的移动
*
* @param map 地图的数组
* @param oldX 小人的原来位置X坐标
* @param oldY 小人的原来位置Y坐标
* @param newX 小人的将要移动到位置X坐标
* @param newY 小人的将要移动到位置Y坐标
*/
void personMove(char map[ROW][COL],int oldX,int oldY,int newX,int newY){
char temp;
temp = map[oldX][oldY];
map[oldX][oldY] = map[newX][newY];
map[newX][newY] = temp;
}
int main(int argc, const char * argv[]) {
//****** 定义变量 **********
//1、定义变量,地图、存储用户输入的方向、小人的位置
char map[ROW][COL]={
{'#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','O','#','#',' ',' ',' ','#','#','#','#','#'},
{'#',' ','#','#',' ','#',' ','#',' ',' ',' ','#'},
{'#',' ',' ','#',' ','#',' ','#',' ','#',' ','#'},
{'#','#',' ',' ',' ','#',' ',' ',' ','#',' ',' '},
{'#','#','#','#','#','#','#','#','#','#','#','#'}
};
//保存用户输入的方向
char direction;
//定义变量保存小人的当前的位置
int currentX=1;
int currentY=1;
//定义变量保存路
char street = ' ';
//2、先打印一遍地图
printMap(map);
//3、提示用户游戏玩法
printf("请控制小人移动: w.上 s.下 a.左 d.右 q.退出\n");
//****** 要进行循环控制 *********
while (1) {
//4、接收用户输入的方向
scanf("%c",&direction);
getchar(); //吸收多余的 \n
//5、判断用户输入了什么方向
switch (direction) {
case 'w':
case 'W':
//****** 判断小人能否移动 ********
//6、判断小人是否能够移动
if (map[currentX-1][currentY]==street) {
// 核心要知道小人的下一个位置是否是路
// 是路
// 让小人开始移动,移动的核心:小人和路交换
// map[currentX][currentY]; 小人当前位置
// map[currentX-1][currentY];小人的下一个位置
personMove(map,currentX,currentY,currentX-1,currentY);
//重新记录小人的当前位置
currentX--;
}
// 不是路 ,什么也不干
break;
case 's':
case 'S':
if (map[currentX+1][currentY]==street) {
// 核心要知道小人的下一个位置是否是路
// 是路
// 让小人开始移动,移动的核心:小人和路交换
personMove(map,currentX,currentY,currentX+1,currentY);
//重新记录小人的当前位置
currentX++;
}
break;
case 'a':
case 'A':
if (map[currentX][currentY-1]==street) {
// 核心要知道小人的下一个位置是否是路
// 是路
// 让小人开始移动,移动的核心:小人和路交换
personMove(map,currentX,currentY,currentX,currentY-1);
//重新记录小人的当前位置
currentY--;
}
break;
case 'd':
case 'D':
if (map[currentX][currentY+1]==street) {
// 核心要知道小人的下一个位置是否是路
// 是路
// 让小人开始移动,移动的核心:小人和路交换
personMove(map,currentX,currentY,currentX,currentY+1);
//重新记录小人的当前位置
currentY++;
}
break;
case 'q':
case 'Q':
return 0;
break;
default:
break;
}
//7、重绘地图
printMap(map);
//****** 判断是否走出来 ********
//判断 y 的值是否 == 5
if (currentY==COL-1) {
printf("哇哦,你出来了!\n");
break;
}
// 提示走出迷宫了
// break;游戏要结束
}
return 0;
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2