黑马程序员技术交流社区
标题:
分享一个走迷宫的c代码,提高学习C的兴趣
[打印本页]
作者:
smilejoke
时间:
2015-8-30 21:07
标题:
分享一个走迷宫的c代码,提高学习C的兴趣
//
// main.c
// 17-《迷宫》游戏优化
//
// Created by apple 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;
}
复制代码
作者:
靳小龙
时间:
2015-8-30 22:10
。。。。。。。。。。
作者:
郭占岭
时间:
2015-8-30 23:16
看着好屌的样子,还没看到呢,学到了试试.
作者:
颖峰
时间:
2015-8-31 21:01
这是死循环实现的嘛 还没学到呢 谢谢分享
作者:
来自星星
时间:
2015-8-31 21:30
好厉害,对C没有兴趣的路过
作者:
来自星星
时间:
2015-8-31 21:33
好厉害,对C没有兴趣的路过,谢谢分享
作者:
Vigor
时间:
2015-8-31 23:01
谢谢分享!
作者:
38740820
时间:
2015-8-31 23:08
哇哈哈 我昨天刚打完 但是还没有优化
作者:
fangshiqi
时间:
2015-8-31 23:15
看起来好牛逼的样子,新手,慢慢来
作者:
Judyisapunk
时间:
2015-9-1 21:53
推箱子要更难一点,逻辑类似
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2