2010-08-09 12 views
5

चतुर्भुज विमान (वर्गों का एक गुच्छा) का प्रतिनिधित्व करने का सबसे बुनियादी तरीका एक द्वि-आयामी सरणी का उपयोग करना है।हेक्सागोनल प्लेन का फॉर्म और मूवमेंट प्रस्तुति

सी # में हम int[,] के रूप में इस घोषणा और के रूप में बड़ी हम चाहते हैं के रूप में हमारे विमान बना सकते हैं:

string[3,3] => tic-tac-toe board (or similar) 
string[8,8] => chess or checkers board 

"चाल" विमान पर एक आइटम है, हम बस यह toa नया "स्थिति"

asign होगा करने के लिए
//using our tic-tac-toe board: 
string[0,0] = "x"; //top-left 
string[1,1] = "o"; //middle-middle 

//to move 
string[0,1] = bN; //Black Knight's starting positon 
string[2,2] = bN; //Black Knight moves 
string[0,1] = String.Empty; 

तो, आप हेक्सागोनल प्लेन (हेक्सागोन का एक गुच्छा) का प्रतिनिधित्व कैसे करेंगे और अगले स्थान पर एक स्थिति से आंदोलन कैसे संभाला जाएगा?

नोट: यह पूरी तरह से सैद्धांतिक नहीं है, क्योंकि मेरे पास मेरे सिर में एक छोटे से खेल के लिए एक विचार है जिसके लिए इस तरह के आंदोलन की आवश्यकता होगी, लेकिन मैं अपने सिर को लपेट नहीं सकता कि यह कैसे किया जाएगा। मैंने यहां कुछ अन्य प्रश्नों को देखा है, लेकिन वास्तव में एक अच्छा मैच नहीं मिल सकता है ...

+0

आपने एक "चौकोर विमान" समझाया है, लेकिन फिर हेक्सागोनल विमान क्या है? एक 6 आयामी विमान? या यह एक 2 आयामी विमान है जो एक हेक्सागोन की तरह आकार दिया गया है जिसमें कोण वाले किनारों पर आधा वर्ग स्लाइस का गुच्छा है? कटा हुआ वर्ग उपलब्ध पदों हैं? –

+0

@ जिमी हॉफा बोर्ड का उदाहरण। http://www.mrlsmath.com/wp-content/uploads/2009/02/hex-game-11x11.gif –

+0

बहुत मजाकिया है कि आपने यह प्रश्न उठाया है।मैंने पिछले सप्ताह के अंत में 2 डी हेक्सागोन टाइल गेम पर काम करना शुरू कर दिया था। –

उत्तर

7

मुझे नहीं पता कि यह इष्टतम समाधान है, लेकिन मैं क्या करूँगा बोर्ड का एक नया वर्ग बोर्ड "कोशिकाओं" का संग्रह होगा, प्रत्येक कोशिका में उसके प्रत्येक पड़ोसी सेल में पॉइंटर होगा (या सेल अगर किनारे पर है तो शून्य)। आप बोर्ड कक्षा पर कुछ इटरेटर लागू कर सकते हैं जो कोशिकाओं पर चलेंगे।

आपको इसे एक वेक्टर की बजाय सूची की तरह अधिक व्यवहार करना होगा। लेकिन यह कम से कम एक शुरुआत है।


एक अन्य समाधान के लिए निर्धारित है तो आप इस alt text http://img833.imageshack.us/img833/4739/hexgame11x11.gif

तरह बोर्ड और अभी भी सिर्फ [,] प्रत्येक कोशिका पहुँचने के लिए उपयोग, लेकिन यह थोड़ा और गणित ले यह पता लगाने की अगर आप कोशिकाओं traversing कर रहे हैं (ऊपर दाएं [+ 1, -1] है, दाएं [+1,0] है, नीचे दाएं [0, + 1] है, नीचे बाएं [-1, + 1] है, बाएं [-1,0] है, ऊपर छोड़ दिया है [0, -1])

संपादित

यदि आप एक के बजाय खड़ी दीवारों चाहते स्लंट बस अपनी चौड़ाई (एक्स) बराबर एक्स + वाई * 2 बनाते हैं, फिर प्रत्येक पंक्ति पर वर्तमान पंक्ति संख्या (वाई) बनाते हैं और कोशिकाओं को वाई-वाई और एक्स-वाई से एक्स तक सीमा बनाते हैं।

उदाहरण:

const int X = 10; 
const int Y = 10; 
int grid[,] = new int[X+(2*Y), Y]; 

bool IsCellOffLimits(int x, int y) 
{ 
    return (x < Y-y || x > X-y || y < 0 || y > Y); 
} 

आप एक छोटे स्मृति स्थान बर्बाद लेकिन यह आप इस alt text http://img192.imageshack.us/img192/5580/gridw.png

की तरह एक बोर्ड देता है तुम बहुत चालाक © तुम सिर्फ सामान्य स्थान का उपयोग कर सकते हैं लेकिन अभी कर रहे हैं, तो आपके कोड में वाई या एक्सई रेंज बोर्ड के विपरीत तरफ कुछ भी है। लेकिन बीमार उस पाठक को कोड छोड़ दें।

+0

यह शायद आपका सबसे अच्छा समाधान है। वर्गों के बोर्ड और हेक्स बोर्ड के बीच एकमात्र असली अंतर यह है कि आप इसे कैसे प्रदर्शित करते हैं, न कि आप इसे कैसे स्टोर करते हैं। –

0

तीन दिशाएं, बाएं/दाएं, ऊपर/नीचे, हास्यास्पद कोण एक तरफ/अन्य तरीके।

public class Player 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 

    public void MoveLeft() { X++; } 
    public void MoveRight() { X--; } 

    public void MoveUp() { Y++; } 
    public void MoveDown() { Y--; } 

    public void MoveFunny() { Y++; X++; } 
    public void MoveOtherFunny() { Y--; X--; } 
} 
संबंधित मुद्दे