使用兩個數組,以建立一個地圖的方向邁出第一步:
// orientation
//
// 7 8 9
// \|/
// 4- -6
// /|\
// 1 2 3
// 0 1 2 3 4 5 6 7 8 9
const int dir_x[] = { 0, -1, 0, 1, -1, 0, 1, -1, 0, 1 };
const int dir_y[] = { 0, 1, 1, 1, 0, 0, 0, -1, -1, -1 };
之前將新的船,如果這個地方是empty
首先你應該測試。
#define BOAT 'B'
#define BOARD_SIZE 10
bool userboat(char boatArray[][BOARD_SIZE], int x, int y, int orientation, int boat_length)
{
if (orientation < 1 || orientation > 9 || orientation == 5 || boat_length < 1)
return false;
int dx = dir_x[orientation];
if (x < 0 || x >= BOARD_SIZE ||
x + dx * boat_length < 0 || x + dx * boat_length > BOARD_SIZE) // test if x is in bounds
return false;
int dy = dir_y[orientation];
if (y < 0 || y >= BOARD_SIZE ||
y + dy * boat_length < 0 || y + dy * boat_length > BOARD_SIZE) // test if y is in bounds
return false;
// test if the boat can be placed
for (int i = 0; i < boat_length; ++ i)
if (boatArray[x+dx*i][y+dy*i] == BOAT) // test if a boat is already there
return false;
// the boat can be placed
for (int i = 0; i < boat_length; ++ i)
boatArray[x+dx*i][y+dy*i] = BOAT;
return true;
}
注意,一個C++解決方案可能是這樣的:
const char BOAT = 'B';
const int BOARD_SIZE = 10;
using TBoard = std::array<std::array<char, BOARD_SIZE>, BOARD_SIZE>;
bool userboat(TBoard &boatArray, int x, int y, int orientation, int boat_length)
{
static const std::array<int, 10> dir_x{ 0, -1, 0, 1, -1, 0, 1, -1, 0, 1 };
static const std::array<int, 10> dir_y{ 0, 1, 1, 1, 0, 0, 0, -1, -1, -1 };
try
{
int dx = dir_x.at(orientation);
int dy = dir_y.at(orientation);
// test if the boat can be placed
for (int i = 0; i < boat_length; ++ i)
if (boatArray.at(x+dx*i).at(y+dy*i) == BOAT) // test if a boat is already there
return false;
// the boat can be placed
for (int i = 0; i < boat_length; ++ i)
boatArray[x+dx*i][y+dy*i] = BOAT;
}
catch (...)
{
return false;
}
return true;
}
那麼,什麼是您的實際問題?什麼部分不工作或者你不知道如何檢查這些條件? – NathanOliver
整個代碼工作不正常,它沒有返回正確的值。這是我對解決方案的嘗試,但我想不出其他任何東西 – noobprogger
這聽起來像您可能需要學習如何使用調試器來逐步執行代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver