亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于走出迷宮案例的疑問

老師你好,這個案例我最終是做出你演示的效果了,但是實現的方法不太好,其中遇到了一些問題。


1、我最終的程序沒有在MyMazer類里面寫start()函數,原因是我發現這里面我需要調用到另一個類中的檢查邊界函數,我不明白這要怎么實現;

2、我在 ?源.c 這個文件里面除了寫了main()函數,還寫了檢查邊界函數,之所以沒有把這個函數放在迷宮類里面,是因為我在這個函數中需要使用到MyMazer類中的成員(具體我用到的是人的位置和方向,我是不停的檢測當前所處位置的邊界情況)

因為這兩點,程序比較亂,感覺完全沒有發揮出c++中類的優勢。。我自己總結了一下,造成這兩點的主要原因在于:我在寫一個類的成員函數的時候,經常遇到需要調用另一個類的成員參數的情況,我百度了一下,沒有發現什么好的方法,仔細想想,這樣的做法確實不太合理。希望老師或者其他同學可以指導一下,謝謝!


PS:老師能不能給出你的程序,我想看看您的start() 和檢查邊界函數是怎么實現的。

正在回答

1 回答

#include?<iostream>
#include?<stdio.h>
#include?"MyMazer.h"
#include?"MyMazeMap.h"
#include?<Windows.h>
using?namespace?std;
int?checkEdge(MyMazer?*p,?MyMazeMap?*q,?char?dir,?int?x,?int?y);//迷宮邊界檢查函數

int?main()
{
	int?WALL?=?1;
	int?ROAD?=?0;
	int?map[8][9]?=?{
		{?WALL,?WALL,?WALL,?WALL,?WALL,?WALL,?WALL,?WALL,?WALL},
		{?WALL,?WALL,?ROAD,?WALL,?ROAD,?ROAD,?WALL,?ROAD,?WALL},?
		{?WALL,?WALL,?ROAD,?ROAD,?ROAD,?WALL,?ROAD,?ROAD,?WALL},
		{?WALL,?WALL,?ROAD,?WALL,?ROAD,?WALL,?ROAD,?WALL,?WALL},
		{?WALL,?WALL,?ROAD,?WALL,?ROAD,?ROAD,?ROAD,?WALL,?WALL},
		{?WALL,?WALL,?ROAD,?WALL,?ROAD,?WALL,?ROAD,?ROAD,?WALL},
		{?WALL,?ROAD,?ROAD,?WALL,?ROAD,?WALL,?WALL,?ROAD,?WALL},
		{?WALL,?ROAD,?WALL,?WALL,?WALL,?WALL,?WALL,?ROAD,?WALL}
	};
	MyMazeMap?maze;
	maze.setMazeMap(&map[0][0],?8,?9);
	maze.setMazeWall("*");
	maze.drawMap();
	MyMazer?mazer;
	mazer.setPersonPosition(7,?1);
	mazer.setPersonChar('T');

	mazer.gotoxy(mazer.getX(),?mazer.getY());
	mazer.printPer();
	Sleep(1000);
	do
	{
		Sleep(200);
		if?(checkEdge(&mazer,?&maze,?'L',?mazer.getX(),?mazer.getY())?==?0)
		{
			mazer.changeDirection(0);//左邊是0,左轉
			mazer.gotoxy(mazer.getX(),?mazer.getY());
			cout?<<?"?";
			mazer.goOneStep();
			mazer.gotoxy(mazer.getX(),?mazer.getY());
			mazer.printPer();
			continue;
		}
		else
		{
			if?(checkEdge(&mazer,?&maze,?'A',?mazer.getX(),?mazer.getY())?==?0)
			{
				mazer.gotoxy(mazer.getX(),?mazer.getY());
				cout?<<?"?";
				mazer.goOneStep();
				mazer.gotoxy(mazer.getX(),?mazer.getY());
				mazer.printPer();
				continue;
			}
			else
			{
				mazer.changeDirection(1);
				continue;
			}
		}
	}?while?(mazer.getX()?!=?0?&&?mazer.getY()?!=?0?&&?mazer.getX()?!=?7?&&?mazer.getY()?!=?8);

	mazer.gotoxy(15,?0);
	cout?<<?"O(∩_∩)O"?<<?endl;
	cout?<<?endl?<<?endl?<<?endl?<<?endl?<<?endl;


	system("pause");
	return?0;
}

int?checkEdge(MyMazer?*p,?MyMazeMap?*q,?char?dir,?int?x,?int?y)
{
	int?temp;
	if?(dir?==?'L')
	{
		if?(p->getDir()?==?1)
		{
			temp?=?*(q->getm_pMazeMap()?+?x?*?9?+?y?-?1);
			return?temp;
		}
		else
		{
			if?(p->getDir()?==?2)
			{
				return?*(q->getm_pMazeMap()?+?(x?-?1)?*?9?+?y);
			}
			else
			{
				if?(p->getDir()?==?3)
				{
					return?*(q->getm_pMazeMap()?+?x?*?9?+?y?+?1);
				}
				else
				{
					return?*(q->getm_pMazeMap()?+?(x?+?1)?*?9?+?y);
				}
			}
		}
	}
	else
	{
		if?(p->getDir()?==?1)
		{
			return?*(q->getm_pMazeMap()?+?(x?-?1)?*?9?+?y);
		}
		else
		{
			if?(p->getDir()?==?2)
			{
				return?*(q->getm_pMazeMap()?+?x?*?9?+?y?+?1);
			}
			else
			{
				if?(p->getDir()?==?3)
				{
					return?*(q->getm_pMazeMap()?+?(x?+?1)?*?9?+?y);
				}
				else
				{
					return?*(q->getm_pMazeMap()?+?x?*?9?+?y?-?1);
				}
			}
		}
	}
}


3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之封裝篇(下)
  • 參與學習       70902    人
  • 解答問題       534    個

封裝--面向對象三大特征之一,通過案例讓C++所學知識融會貫通

進入課程

關于走出迷宮案例的疑問

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號