2011-12-08 48 views
2

我寫一個程序dots and boxes一類,並有最一切準備好了,除了我無法打印的網格。打印點格棋

注:網格中的任何大小可以從2x2至9x9的。兩兩格必須打印這樣到標準輸出:

a + + + //after some moves: a +-+ + 
            |P| 
b + + +       b +-+ + 

c + + +       c + + + 
    1 2 3       1 2 3 

我有一個點,邊和箱子的數據結構。並且網格對象對於每個類具有一維矢量。

即點是網格上所有點的向量,邊緣是網格上所有邊的向量(每條邊有兩個點) 方格是網格上所有方格的向量( )每個盒子有四條邊)

盒子有一個enum誰擁有盒子玩家或計算機 和邊緣有一個布爾如果他們被採取或不,也是一個布爾如果他們是垂直或不。

當我試圖打印網格,因爲網格可以是多種尺寸,我感到困惑。由於(大小)邊緣在偶數(水平)行上打印,而(奇數)(垂直)上的(大小+ 1)打印。

我希望我清楚地解釋這一點。

謝謝!

+0

您是否嘗試過無邊框打印網格? (嵌套for循環,即對於(int y = 0; y <...)for(int x = 0; x <... –

+0

是否意味着沒有axi標籤?如果是這樣,那麼是,如果不是,那麼否。 – mcudm001

回答

3

把你的邊緣放在一個序列(矢量)中。

gridsize = 2 : hh vvv hh vvv hh 

這就是你水平= 2,垂直=尺寸注意到+ 1

現在找出算法得到不同的值不同的邊緣。這裏是我所存儲的邊緣成基於你例的矢量:

Your first (empty) 2x2 grid: 00 000 00 000 00 
Your second 2x2 grid:  10 110 10 000 00 

當我打印出網格,我使用的for循環中的行和列。

// I consider the (row, col) to be the box. 
// Each row loop prints one horizontal line and (possibly) one vertical line. 
// Access to the edge vector is based on this (row, col) pair. 
for (int row = 0; row < size + 1; row++) /* +1 to draw the bottom line. */ 
{ 
    if (row < size) /* Bottom most horizontal row not followed by vertical. */ 
     for (int col = 0; col < size + 1; col++) /* +1 to draw rightmost line. */ 
} 

從b1到b2的邊緣存儲在位置5(從0開始計數可能的邊緣)。你如何得到這個職位?

你可能想要停下來,自己找出其他的東西。我用筆和紙!

從b1到b2(根據我的算法)的邊緣是第二行第一列(1,0)的一部分。當打印水平邊緣時,以下介紹如何計算矢量中邊緣的位置。

Horizontal edge: pos = (row * (size + size + 1)) + col 

從a2到b2的邊緣是第一行第二列(0,2)的一部分。當打印的垂直邊緣,你需要調整它

Vertical edge: pos = (row * (size + size + 1)) + size + col 
+0

I也不要以爲你需要跟蹤點,因爲它們是固定的。 –

+0

我喜歡這個邊緣的一維數組/矢量解,但我不明白它是如何處理'P'的,這對遊戲至關重要。我認爲它需要擴展到'hh vcvcv hh vcvcv hh',其中'c'的意思是'cell'。我個人更喜歡2D方法,特別是因爲也需要渲染點:'dhdhd vcvcv dhdhd vcvcv dhdhd'。 –

0

我只用細胞的二維模型(每邊的列表),加上所有的獨立的2D視圖模型實現了這個遊戲的HTML + JS版四件事(h,v,c,d)。查看代碼片段以及完整代碼和可玩遊戲的鏈接:https://stackoverflow.com/a/30387118/1593924

已在底層模型,這需要理解完全不同的東西分離UI狀態/顧慮,這與渲染做的,從「真實數據」的好處:

  • 每個細胞「觸摸」四個邊和股價上漲到他們倆與其他細胞,

  • 細胞如何變成「充滿」,並

  • 如何處理球員和額外回合,當一個球員填補一個(或兩個!)單元格給出回合。

事實上,UI可以呈現所有四個種元素 - 頂點,V-邊緣,H-邊緣,和細胞 - 爲矩形在單個網格,雖然附接至它們的行爲是不同的在單元格和邊之間(並且頂點省略)。