#include <stdio.h>
#include <stdlib.h>
#define Hang 12
#define Lie 11
/*
思路:
1,输出地图
用二维数组保存地图,好几个地方都会用到,用全局变量
2,用户输入
3,小人移动
全局变量,保存小人的位置
*/
char arr[Hang][Lie] = {
{ '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
{ '#', 'O', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', '#', ' ', '#', '#', '#', '#', '#', ' ', '#' },
{ '#', ' ', '#', ' ', '#', '#', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', '#', ' ', '#', '#', ' ', '#', '#', '#', '#' },
{ '#', ' ', '#', ' ', '#', '#', ' ', ' ', ' ', ' ', '#' },
{ '#', ' ', '#', ' ', '#', '#', '#', '#', '#', ' ', '#' },
{ '#', ' ', '#', ' ', '#', '#', '#', '#', ' ', ' ', '#' },
{ '#', ' ', '#', ' ', '#', ' ', ' ', ' ', ' ', '#', '#' },
{ '#', ' ', '#', ' ', '#', ' ', '#', '#', '#', '#', '#' },
{ '#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ' },
{ '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }
};
//定义全局,来保存小人的位置
int person_x = 1;
int person_y = 1;
//终点坐标
int end_x = 10;
int end_y = 10;
//显示地图
void showMap(){
for (int i = 0; i < Hang; i++){
for (int j = 0; j < Lie; j++){
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
//用户输入
char Input(){
char key = 'a';
printf("请输入方向,w.上 s.下 a.左 d.右:");
scanf("%c", &key);
rewind(stdin);
return key;
}
//小人移动
//上
void UP(){
//根据现在小人的坐标,来判断小人下一个位置的坐标
//再判断下一个坐标的,是路还是墙
//向上移动,只是移动行坐标
//定义下一个坐标,
int next_x = person_x - 1;
int next_y = person_y;
//来判断下个位置是不是路
if (arr[next_x][next_y] == ' '){
//小人的位置变路,下个位置变小人
arr[next_x][next_y] = 'O';
arr[person_x][person_y] = ' ';
//然后把现在小人的位置,在赋值给外面的全局变量
person_x = next_x;
person_y = next_y;
}
}
//下
void DOWN(){
//根据现在小人的坐标,来判断小人下一个位置的坐标
//再判断下一个坐标的,是路还是墙
//向上移动,只是移动行坐标
//定义下一个坐标,
int next_x = person_x + 1;
int next_y = person_y;
//来判断下个位置是不是路
if (arr[next_x][next_y] == ' '){
//小人的位置变路,下个位置变小人
arr[next_x][next_y] = 'O';
arr[person_x][person_y] = ' ';
//然后把现在小人的位置,在赋值给外面的全局变量
person_x = next_x;
person_y = next_y;
}
}
//左
void LEFT(){
//根据现在小人的坐标,来判断小人下一个位置的坐标
//再判断下一个坐标的,是路还是墙
//向上移动,只是移动行坐标
//定义下一个坐标,
int next_x = person_x;
int next_y = person_y - 1;
//来判断下个位置是不是路
if (arr[next_x][next_y] == ' '){
//小人的位置变路,下个位置变小人
arr[next_x][next_y] = 'O';
arr[person_x][person_y] = ' ';
//然后把现在小人的位置,在赋值给外面的全局变量
person_x = next_x;
person_y = next_y;
}
}
//右
void RIGHT(){
//根据现在小人的坐标,来判断小人下一个位置的坐标
//再判断下一个坐标的,是路还是墙
//向上移动,只是移动行坐标
//定义下一个坐标,
int next_x = person_x;
int next_y = person_y + 1;
//来判断下个位置是不是路
if (arr[next_x][next_y] == ' '){
//小人的位置变路,下个位置变小人
arr[next_x][next_y] = 'O';
arr[person_x][person_y] = ' ';
//然后把现在小人的位置,在赋值给外面的全局变量
person_x = next_x;
person_y = next_y;
}
}
int main(){
//要想让地图刷新,死循环这几句
while (1){
system("clear");
//输出地图
showMap();
//判断是否到重点
if ('O' == arr[end_x][end_y]){
printf("游戏结束!\n");
return 0;
}
//用户输入
char key = Input();
//小人移动
switch (key)
{
case 'w':
case 'W':UP(); break;
case 's':
case 'S':DOWN(); break;
case 'a':
case 'A':LEFT(); break;
case 'd':
case 'D':RIGHT(); break;
case 'q':
case 'Q':printf("游戏结束!\n"); return 0; break;
}
}
return 0;
} |
|