2012-09-23 64 views
1

所以我基本上在這裏尋找最簡單的方法,結果我想要的是一個遊戲中的linux-shell(將使用opengl和sfml渲染),它將模擬/模擬一個linux盒子。 它不需要那麼花哨,我優先考慮的是基礎知識(ls,grep,cat,echo ..),某種編輯器(vim/nano-like),並且遊戲邏輯可以與/ dev,/ etc等等在C++中模擬linux/bash shell?

我已經考慮了chrooting環境,但我看到的問題比解決方案更多。還想過是否有某種用C++編寫的流行linux模擬器,它可以與主代碼緊密集成,這是一個很長的時間,我還沒有發現任何東西。

任何幫助讓我走上正確的道路非常感謝!

PS。最終產品將是跨平臺的(至少對於win/linux)

回答

3

您可能對BusyBox感興趣,它是Linux命令行許多功能的小型免費實現實現。您應該可以將它嵌入到遊戲中,而不會有太多麻煩。當然,你還必須分別建立文件系統和tty接口的模型。

+0

還沒有想過busybox的!也許我可以用它的源代碼來構建我自己的「集成的遊戲操作系統」,並維護代碼跨平臺。謝謝! –

0

下面是我該怎麼做。

我會實現目錄結構作爲節點的樹(有點像鏈接列表,但是,每個父節點可以有任意數量的子節點)。然後,如果你想運行下面的命令(我知道,這些都不是在Linux中的所有命令,但是這應該還是給你我所說的是一個好主意),他們應該表現爲這樣:

  • ls - 簡單看一下當前節點,並列出所有兒童

  • ls -R - 看當前節點,並列出所有孩子遞歸(見wikipedia's tree traversal page

  • cd /some/path - 基於拆分s,然後嘗試將當前工作目錄(這應該實現爲指向節點的指針)更改爲用戶指定的路徑。如果路徑是絕對的(即/開始其在目錄結構中的成員應該是容易覈查只是通過嘗試從根節點找到它。

這使我想到另一點。由於您的結構是一個節點的樹,你應該有兩種類型的節點:。代表文件的節點,以及那些代表目錄的目錄可能有孩子,文件可能無法此外,文件中的節點可能有關聯的一組數據(可能是一個字符串),可以是文件的內容(因爲你想能夠編輯文件)

  • rm somefile - 如果它在當前工作目錄中簡單地勾銷一個子節點。

  • mkdir somedir - 將一個新的目錄節點附加到當前正在工作的iff somedir尚不存在。

  • rmdir somedir - 刪除從當前工作目錄中名爲somedir目錄節點,如果它沒有孩子。

現在上面只有真正談論的目錄結構,我可以繼續列舉命令以及他們將如何實施,但我想你明白了爲止。所以,我會談談您列出的其他命令(grep,cat,echo,vim/nano)。

  • 就實施grep而言,以我的上述結構,做出一個非常原始的實現將相當容易。您只需循環遍歷文件的每一行(在這種情況下,這將是與文件節點關聯的數據)並在每一行上進行字符串比較,打印匹配。如果你准許正則表達式,那麼我不能幫你,我建議看看c++ regular expressions library。不過,還有一個選擇。grep是開源的,因此您可以使用它的源代碼或者只是閱讀它並理解它是如何實現的。 Grep's source code

  • 使用上面的樹形結構「catting」一個或多個文件會很簡單。所有與文件節點相關的數據都將按順序排列。而且,就像grep貓一樣是OSS(開源軟件)。

  • echo應該是相當微不足道的實施。只需打印回它的論點。至少有回聲的補救形式(雖然我真的不知道回聲得到比這更復雜。

  • 至於實施VIM /納米或類似的東西。我真的不能幫你。我再次傾斜引導你走向自己的源代碼(vimnano)。不過,我知道這可能不是非常有幫助的,因爲兩者都是大項目。

+0

PS,我知道我有很多隻是使用/閱讀上面的源類型註釋。我相信(和其他人一樣)對編碼良好的項目的來源(以及針對該問題的編碼不佳的項目)是作爲程序員學習和發展的最佳途徑之一。 – mjgpy3

+0

我曾考慮過這個問題,但這需要大量的工作。我同意作爲程序員晉升的最好方法是研究其他人的工作,但這是太多的學習/工作;遊戲的這部分內容對我來說並不是一個足夠大的資產,因此我花了很多時間去研究它。另外我的目標是創建一個真實的bash shell和一個linux系統的感覺,讓用戶可以根據他對bash/linux的真實知識贏得遊戲,以及他對如何使用某些命令的偏好(認爲真的很複雜例如,grep-arguments)。 –

+0

這是非常可以理解的。快樂的編碼,朋友。 – mjgpy3