সি # একটি সাধারণ সাপের গেম তৈরি করছে


12

আমি সি # এর সাথে একটি সাপের খেলা তৈরি করার কথা ভাবছিলাম, তাই আমি আমার মাথায় ধারণাগুলি চালিয়েছিলাম এবং কিছু সমস্যা এসেছিল।

সাপের মাথার পরে যে ব্লকগুলি চলতে পারে আমি কীভাবে সঠিক স্থানে ট্র্যাক এবং আউটপুট দিতে পারি?

যদি সাপটি পাঁচটি ব্লক দিয়ে তৈরি হয় এবং ব্যবহারকারী একটি বৃত্তে যেতে শুরু করে, তবে আমি কীভাবে সাপটির শরীরটি সঠিক স্থানে মুদ্রণ করতে পারি?

এছাড়াও, আমি কীভাবে এমন একটি ক্রিয়া তৈরি করতে পারি যা পটভূমিতে চলবে, যা সাপকে এগিয়ে নিয়ে যাবে, ব্যবহারকারী যা কিছু করেন না কেন?

আমার কোডটি কী কাঠামোযুক্ত হওয়া উচিত? (কোড ডিজাইনের কাঠামো)

এটি কনসোল অ্যাপ্লিকেশন হওয়া উচিত, যেহেতু এটিই আমি পরিচিত am

আমি সমাপ্ত কোডটি খুঁজছি না, যেহেতু আমি সত্যিই এটি কীভাবে কাজ করা উচিত তা বুঝতে চাই।

উত্তর:


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

আপনি চরিত্রের মাথা (তালিকার প্রথম উপাদান) এবং লেজ (তালিকার শেষ উপাদান) এবং এমনকি সংলগ্ন ব্লকগুলির অবস্থানের উপর নির্ভর করে এগুলি ওরিয়েন্টের জন্য বিভিন্ন অক্ষর চয়ন করে আরও জটিল হয়ে উঠতে পারেন। তবে শুরু করার জন্য, সমস্ত কিছুকে #কিছু বা কিছু হিসাবে কেবল রেন্ডার করুন ।

আপনি উদাহরণস্বরূপ 2D চর অ্যারে দিয়ে ব্যাকগ্রাউন্ড সহ এটি শুরু করতে পারেন:

// 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. কাঠামোর জন্য ক্লাস এবং উত্তরাধিকার ব্যবহার করুন


এটি খুব অস্পষ্ট উত্তর is তিন ধাপ বিশেষত তাই।
মাইকেলহাউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.