学习的第一个可以玩的小程序。虽然很简单,但是自己写了之后再运行的时候感觉还是不错的。
- #include <stdio.h>
- //把地图数组的行数和列数定义成宏。
- #define COL 6
- #define ROW 6
- /**
- * 打印地图
- *
- * @param map1 地图的数组
- */
- void print_map(char map1[COL][ROW]){
- for (int i =0; i<COL; i++) {
- for (int j =0; j<ROW; j++) {
- printf("%c",map1[i][j]);
- }
- printf("\n");
- }
-
- }
- /**
- * 判断小人是否移动
- *
- * @param map 地图数组
- * @param old_x 小人原来位置的X轴
- * @param old_y 小人原来位置的Y轴
- * @param new_x 小人要走位置的X轴
- * @param new_y 小人要走位置的Y轴
- */
- void personMove(char map[COL][ROW],int old_x,int old_y,int new_x,int new_y){
- char temp;
- temp=map[old_x][old_y];
- map[old_x][old_y]=map[new_x][new_y];
- map[new_x][new_y]=temp;
- }
- int main(int argc, const char * argv[]) {
- char map[COL][ROW]={
- {'#','#','#','#','#','#'},
- {'#','0','#',' ',' ',' '},
- {'#',' ','#','#',' ','#'},
- {'#',' ',' ','#',' ','#'},
- {'#','#',' ',' ',' ','#'},
- {'#','#','#','#','#','#'}};
- char dir;
- char ch;
- print_map(map);
- //x和y是小人位置的下标
- int x,y;
- x=y=1;
- printf("请输入一个方向:w或W表示上,s或S表示下,a或A表示左,d或D表示右,q或Q代表退出!\n");
- while (1) {
- scanf("%c",&dir);
- scanf("%c",&ch);
- switch (dir) {
- case 'w':
- case 'W':
- if (map[x-1][y]==' ') {
- personMove(map, x, y, x-1, y);
- print_map(map);
- x--;
- }
- break;
- case 's':
- case 'S':
- if (map[x+1][y]==' ') {
- personMove(map, x, y, x+1, y);
- print_map(map);
- x++;
- }
- break;
- case 'A':
- case 'a':
- if (map[x][y-1]==' ') {
- personMove(map, x, y, x, y-1);
- print_map(map);
- y--;
- }
- break;
- case 'd':
- case 'D':
- if (map[x][y+1]==' ') {
- personMove(map, x, y, x, y+1);
- print_map(map);
- y++;
- }
- break;
- case 'q':
- case 'Q':
- return 0;
- default:
- break;
- }
- if (y==5) {
- printf("恭喜你,你出来了!\n");
- return 0;
- }
- }
- return 0;
- }
复制代码
|
|