黑马程序员技术交流社区
标题:
学了一个走出迷宫游戏,代码奉献
[打印本页]
作者:
缘之有缘
时间:
2016-4-5 22:06
标题:
学了一个走出迷宫游戏,代码奉献
#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;
}
作者:
缘之有缘
时间:
2016-4-5 22:15
上下左右代码是一样的,只是换了一下行跟列
作者:
15670379287
时间:
2016-4-5 22:17
看起来挺不错的.
作者:
wx_rMI3RFr8
时间:
2016-4-6 00:56
先马一下,回头有空再来看看!
作者:
堕落天使
时间:
2016-4-7 10:20
加油!你可以的
作者:
hy415161
时间:
2016-4-7 18:44
有空试试,看起来挺好的
作者:
张立鹏
时间:
2016-4-7 19:54
好像还挺好玩的,试一试
作者:
烛风小糊涂
时间:
2016-4-8 15:49
#include <stdio.h>
#define W '#' //wall
#define R ' ' //road
#define M 'O' //man
#define ROW 6
#define COL 6
int main(){
char map[ROW][COL]={ //map[i][j]: w---map[i-1][j]
{W,W,W,W,W,W}, // a---map[i][j-1]
{W,M,W,W,R,R}, // s---map[i+1][j]
{W,R,W,W,R,W}, // d---map[i][j+1]
{W,R,R,W,R,W},
{W,W,R,R,R,W},
{W,W,W,W,W,W}
};
char direction;
char ch;
for (int i = 0; i<ROW; i++) { // map print
for (int j = 0; j<COL; j++) {
printf("%c",map[i][j]);
}
printf("\n");
}
int m=1,n=1;
while (m!=1 || n!=5) {
printf("Please enter direction(w-Up,a-Left,s-Down,d-Right,q-Quit Game):\n");
scanf("%c%c",&direction,&ch);
if (direction=='w') {
if (map[m-1][n]==W);
else {
char temp = map[m][n];
map[m][n] = map[m-1][n];
map[m-1][n] = temp;
m=m-1;
}
}else if (direction=='a'){
if (map[m][n-1]==W);
else {
char temp = map[m][n];
map[m][n] = map[m][n-1];
map[m][n-1] = temp;
n=n-1;
}
}else if (direction=='s'){
if (map[m+1][n]==W);
else {
char temp = map[m][n];
map[m][n] = map[m+1][n];
map[m+1][n] = temp;
m=m+1;
}
}else if (direction=='d'){
if (map[m][n+1]==W);
else {
char temp = map[m][n];
map[m][n] = map[m][n+1];
map[m][n+1] = temp;
n=n+1;
}
}
else if(direction == 'q'){
printf("Now quit...\n");
return 0;
}
for (int i = 0; i<6; i++) { // map print
for (int j = 0; j<6; j++) {
printf("%c",map[i][j]);
}
printf("\n");
}
}
printf("Congratulations! You win!\n");
return 0;
}
哈哈,我自学的时候也写了一个。
地图是COPY视频里的,吸收字符也是后来看了视频的才知道。话说自己想了半天也不知道有吸收字符这么回事儿~!
本人比较懒,用了好几个宏定义~
代码比较乱,算是自己写的草稿本吧~!
作者:
ySssssssss
时间:
2016-4-8 22:28
感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2