簡體   English   中英

對兩個對象進行建模的好方法是什么,但它們有兩個不同的功能?

[英]What is a good way to model two objects that are the same thing, but have two different functionalities?

我正在尋找一種模擬棋盤游戲中“移動”的好方法。 我希望能夠向玩家詢問他們的舉動是什么並讓他們做出回應,然后能夠根據他們的舉動在棋盤上執行正確的動作。 問題是,有幾種類型的移動,每種移動都有自己的數據集。 例如,在Scrabble中,你可以播放一個單詞,它應該返回單詞,它的位置和方向(或一組帶有位置或任何東西的平鋪),但你也可以交換平鋪(這將涉及返回你想要的平鋪交換)或通過。

同樣在國際象棋中,你通常移動一塊,它應該返回一個移動與該塊和它去的地方,但你也可以城堡,其中包括指示兩個部分及其位置,或一側(國王/王后),或其他除了件/位置之外的一條信息。

我假設玩家返回Move對象是最好的方式,但我也可以接受任何其他建模選擇或建議。

謝謝!

這些可能不是你想要的,但在這篇舊帖子上似乎有很多很棒的想法:

用於建模棋盤游戲的任何模式?

一些答案包括Move實現的建議,並希望能給你一些新的想法。

根據經驗,如果你想擁有一個共同的類型但是對於一個東西有不同的行為 - 這里是一個Move - 你需要讓這個東西實現這個行為。 因此,不應詢問電路板如何以不同方式解釋兩種不同的移動,而應考慮如何在執行移動時以不同方式使用電路板。

所以:基類(應該是接口)是一個Move,它有一個perform()方法,這兩種移動有不同的perform()方法實現。

一個好的模型總是基於需求,數據流,控制流,整體系統架構等的詳細知識。 通過手工和哲學論證來設計應用程序並不是很有成效。

關於你的特定問題,一個普遍合法的模型是玩家返回一個Move ,但根據完整的細節,它的實際價值可能從總成功到總災難。

在游戲中移動並不是真正的對象。 這是一個事件。

你的國際象棋示例是最簡單的。 移動返回棋盤上的棋子和新位置,但它也可以返回城堡事件,捕獲事件和/或片段促銷事件。

類似地,在Scrabble游戲中,移動可以返回文字游戲事件,交換區塊事件或傳遞事件。

將事件視為對游戲其余部分的信息。 您可以像對待課程一樣對事件進行編碼。 此事件類必須能夠訪問各種游戲類,以便模型可以創建消息。

事件處理程序類處理所有游戲事件。 這個類將是操縱其他游戲類的類。 這些事件必須全部采用事件處理程序可以處理的格式。

如果不同的實現沒有任何共同點,除了它們如何呈現給外部世界,哪種類型來自你的解釋,Move應該是一個松散定義的接口,每個實現在不同的游戲中做自己的事情。

但我的主要問題是,是否真的有理由在不同的游戲中使用這個界面。 如果沒有某種類型的共享處理程序,它需要在不同游戲中使用某些動作格式,我就不會費心並簡單地定義不同的游戲特定的Move類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM