सी # एक सरल साँप खेल बना रहा है


12

मैं C # के साथ एक सांप का खेल बनाने के बारे में सोच रहा था, इसलिए मैंने अपने दिमाग में विचार चलाए, और कुछ समस्याएं सामने आईं।

मैं सांप के सिर के बाद चलने वाले ब्लॉक को सही स्थान पर कैसे ट्रैक और आउटपुट कर सकता हूं?

यदि सांप पांच ब्लॉक से बना है, और उपयोगकर्ता एक सर्कल में जाना शुरू करता है, तो मैं सही स्थान पर सांप के शरीर को कैसे प्रिंट कर सकता हूं?

इसके अलावा, मैं एक एक्शन कैसे बना सकता हूं जो पृष्ठभूमि पर चलेगा, जो सांप को आगे बढ़ाएगा, कोई फर्क नहीं पड़ता कि उपयोगकर्ता क्या करता है?

मेरे कोड में क्या संरचना होनी चाहिए? (कोड डिजाइन संरचना)

यह एक कंसोल एप्लिकेशन होना चाहिए, क्योंकि यह एकमात्र ऐसा ढांचा है जिससे मैं परिचित हूं।

मैं समाप्त कोड की तलाश में नहीं हूं, क्योंकि मैं वास्तव में समझना चाहता हूं कि यह कैसे काम करना चाहिए।

जवाबों:


23

नाग का प्रतिनिधित्व

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

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

// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();

इस बिंदु पर, आपकी सूची खाली है, इसलिए आपके साँप का कोई शरीर नहीं है। मान लें कि आप 5 की लंबाई वाला सांप चाहते हैं और सिर को स्थिति (5,2) में शुरू करना चाहिए और नीचे की तरफ बढ़ना चाहिए। उदाहरण के लिए, खेल शुरू होने पर उन पदों को सूची में जोड़ें:

// Initialize the snake with 5 blocks starting downwards from (5,2)
for(int i=0; i<5; ++i)
{
    body.Add(new Point(5, 2 + i));
}

साँप का प्रतिपादन

रेंडरिंग के लिए सिर्फ बॉडी लिस्ट की प्रत्येक पोजीशन पर एक कैरेक्टर बनाएं। उदाहरण के लिए ऊपर दिया गया उदाहरण निम्नानुसार खींचा जा सकता है:

...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
     |
     x = 5

आप चरित्र के सिर (सूची पर पहला तत्व) और पूंछ (सूची पर अंतिम तत्व) के लिए विभिन्न पात्रों को चुनकर और अधिक जटिल हो सकते हैं और यहां तक ​​कि उन्हें आसन्न ब्लॉकों के पदों के आधार पर उन्मुख कर सकते हैं। लेकिन शुरुआत के लिए, बस एक #या कुछ के रूप में सब कुछ प्रस्तुत करना।

आप उदाहरण के लिए एक 2 डी चार सरणी के साथ शुरू कर सकते हैं जिसमें पृष्ठभूमि इस तरह है:

// Array with map characters
char[,] render = new char[width, height];

// Fill with background
for(x=0; x<width; ++x)
    for(y=0; y<height; ++y)
        render[x,y] = '.';

और फिर साँप के शरीर पर सरणी के लिए इसे खींचकर:

// Render snake
foreach(Point point in body)
    render[point.X, point.Y] = '#';

और अंत में फिर से सरणी पर पुनरावृति करें और प्रत्येक वर्ण को कंसोल पर लिखें, प्रत्येक पंक्ति के अंत में एक लाइनब्रेक के साथ।

// Render to console
for(y=0; y<height; ++y)
{
    for(x=0; x<width; ++x)
    {
        Console.Write(render[x,y]);
    }
    Console.WriteLine();
}

साँप को हिलाना

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

// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }

और सांप को स्थानांतरित करने का कार्य केवल सूची से अंतिम ब्लॉक को हटाकर और सामने की तरफ जोड़कर, सही दिशा में किया जा सकता है । दूसरे शब्दों में कुछ इस तरह:

// Remove tail from body
body.RemoveAt(body.Count - 1);

// Get head position
Point next = body[0];

// Calculate where the head should be next based on the snake's direction
if(direction == Direction.Left) 
    next = new Point(next.X-1, next.Y);
if(direction == Direction.Right) 
    next = new Point(next.X+1, next.Y);
if(direction == Direction.Up) 
    next = new Point(next.X, next.Y-1);
if(direction == Direction.Down) 
    next = new Point(next.X, next.Y+1);

// Insert new head into the snake's body
body.Insert(0, next);

5
आंदोलन के लिए अंतिम ब्लॉक को आगे बढ़ने पर अच्छा कॉल!
स्पार्टनडोनट

बहुत बढ़िया जवाब। मुझे प्यार है कि आप सांप को कैसे घुमा रहे हैं - यह काफी सुरुचिपूर्ण है।
साइरफ

-3
  1. हर बार एक टाइमर जब आप साँप के स्थान को अपडेट करते हैं और नए स्थानों पर आकृतियाँ खींचते हैं

  2. साँप को स्थानांतरित करने के लिए गेम को ट्रिगर करने के लिए पृष्ठभूमि की कार्रवाई के लिए एक System.Windows.Forms.Timer का उपयोग करें।

  3. संरचना के लिए कक्षाओं और विरासत का उपयोग करें


यह बहुत अस्पष्ट जवाब है। चरण संख्या तीन विशेष रूप से ऐसा है।
MichaelHouse
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.