বড় হয়ে আমার প্রথম কনসোল গেম সিস্টেমটি ছিল একটি অ্যাটারি 2600 এবং আমি ছোটবেলায় আমার এত আনন্দিত games গেমগুলির প্রতি আমার সর্বদা একটি ভালবাসা থাকবে। গ্রাফিক্সের অনেকগুলি এখনও স্মরণীয়, এমনকি আইকনিকও।
দেখা যাচ্ছে যে এই স্প্রাইটগুলি খুব সরল বিটম্যাপস, 8 পিক্সেল প্রস্থের সাথে ভেরিয়েবল উচ্চতা যেখানে বাইনারি প্রতিনিধিত্ব পিক্সেলগুলির বিন্যাস।
উদাহরণস্বরূপ, হেক্স বাইটস 0x18, 0x24, 0x18 এর মতো একটি ক্রুড সার্কেল আঁকবে:
0x18: 00011000
0x24: 00100100
0x18: 00011000
8 পিক্সেল প্রশস্ত যেমন মোটামুটি ছোট গ্রাফিক্স তৈরি করে (এমনকি আতারি 2600 স্ট্যান্ডার্ড দ্বারা) একই চিত্রের বৃহত্তর (যদিও আরও অবরুদ্ধ এবং বিকৃত) সংস্করণ তৈরি করতে দ্বিগুণ বা চতুর্থাংশ উভয়ই সাধারণ ছিল। এগুলি সাধারণত প্লেয়ার স্প্রাইটস এবং প্লেফিল্ড উভয়ের জন্য উল্লম্ব বা অনুভূমিকভাবে উল্টানো হবে। গেমস কমব্যাট এর একটি ভাল উদাহরণ।
চ্যালেঞ্জটি হ'ল, এএসসিআইআই ফর্মের এই স্প্রিটগুলি "গ্রাফিক্স" হিসাবে প্রদর্শন করার জন্য কোডটি লিখতে, তাদেরকে উল্লম্বভাবে, অনুভূমিকভাবে বা উভয় প্রসারিত বা ফ্লিপ করার ক্ষমতা সহ। এটি অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম, বা কলযোগ্য ফাংশনের আকারে থাকতে হবে।
ইনপুট:
- বাইটের একটি অ্যারে, প্রতিটি সেই লাইনের জন্য অনুভূমিক বিট উপস্থাপন করে।
- প্রতিটি দিকের জন্য একটি অ-শূন্য পূর্ণসংখ্যার মান, অনুভূমিক এবং উলম্ব যে দিকটির জন্য স্কেলিং ফ্যাক্টরটি উপস্থাপন করে।
- একটি নেতিবাচক মান নির্দেশ করে যে মাত্রাটি এটি অক্ষের সাথেও উল্টাতে হবে।
আউটপুট:
- কালো (0) পিক্সেলের জন্য একটি স্পেস অক্ষর এবং সাদা (1) পিক্সেলের জন্য আপনার পছন্দসই কোনও মুদ্রণযোগ্য, অ-স্থানের অক্ষর ব্যবহার করে, STDOUT বা একটি নতুন লাইন দ্বারা পৃথক স্ট্রিংয়ের ASCII প্রতিনিধিত্ব।
পরীক্ষার ডেটা:
bmp1 = [ 0x06, 0x0F, 0xF3, 0xFE, 0x0E, 0x04, 0x04, 0x1E, 0x3F, 0x7F, 0xE3, 0xC3, 0xC3, 0xC7, 0xFF, 0x3C, 0x08, 0x8F, 0xE1, 0x3F ]
bmp2 = [ 0x07, 0xFD, 0xA7 ]
bmp3 = [ 0x00, 0x8E, 0x84, 0xFF, 0xFF, 0x04, 0x0E, 0x00 ]
bmp4 = [ 0x00, 0xFC, 0xFC, 0x38, 0x3F, 0x38, 0xFC, 0xFC]
দ্রষ্টব্য: উপরে বাইটগুলির ইনপুট অ্যারেগুলি হেক্স হিসাবে সরবরাহ করা হয়। যদি আপনার প্ল্যাটফর্মটি বাইট উপস্থাপনের জন্য হেক্স লিটারেলগুলি গ্রহণ না করে আপনি এগুলি একটি স্থানীয় বাইট সমতুলীয় আক্ষরিক রূপান্তর করতে পারেন।
উদাহরণ আউটপুট:
f( bmp1, 1, 1 ) =>
--------
XX
XXXX
XXXX XX
XXXXXXX
XXX
X
X
XXXX
XXXXXX
XXXXXXX
XXX XX
XX XX
XX XX
XX XXX
XXXXXXXX
XXXX
X
X XXXX
XXX X
XXXXXX
--------
f( bmp1, -2, 1 ) =>
----------------
XXXX
XXXXXXXX
XXXX XXXXXXXX
XXXXXXXXXXXXXX
XXXXXX
XX
XX
XXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXX XXXXXX
XXXX XXXX
XXXX XXXX
XXXXXX XXXX
XXXXXXXXXXXXXXXX
XXXXXXXX
XX
XXXXXXXX XX
XX XXXXXX
XXXXXXXXXXXX
----------------
f( bmp2, 1, 2 ) =>
--------
XXX
XXX
XXXXXX X
XXXXXX X
X X XXX
X X XXX
--------
f( bmp2, 2, 1 ) =>
----------------
XXXXXX
XXXXXXXXXXXX XX
XX XX XXXXXX
----------------
f( bmp2, -2, -2 ) =>
----------------
XXXXXX XX XX
XXXXXX XX XX
XX XXXXXXXXXXXX
XX XXXXXXXXXXXX
XXXXXX
XXXXXX
----------------
f( bmp3, 1, -1 ) =>
--------
XXX
X
XXXXXXXX
XXXXXXXX
X X
X XXX
--------
f( bmp3, 3, 3 ) =>
------------------------
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXX
XXX XXX
XXX XXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXX
XXX
XXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
------------------------
f( bmp4, -1, -1 ) =>
--------
XXXXXX
XXXXXX
XXX
XXXXXX
XXX
XXXXXX
XXXXXX
--------
f( bmp4, 4, 2 ) =>
--------------------------------
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------
দ্রষ্টব্য: উপরের এবং নীচে অনুভূমিক রেখাগুলি আউটপুটটির শুরু এবং শেষ দেখানো হবে। আউটপুটগুলিতে এগুলি প্রয়োজন হয় না, তবে শুরুর দিকে এবং / অথবা শেষের দিকে খালি লাইনগুলি (সমস্ত জিরো / স্পেস দ্বারা প্রতিনিধিত্ব করা) প্রয়োজন হয়, যেমন প্রদর্শিত হয়েছে।
দ্রষ্টব্য 2: এই পরীক্ষার বিটম্যাপগুলি অনুপ্রাণিত হয়েছিল এবং উইকিপিডিয়ায় "ন্যায্য ব্যবহার" হিসাবে ট্যাগ করা গেমের স্ক্রিনশটগুলির উপর ভিত্তি করে পুনরায় আঁকানো / কোডেড হয়েছিল।

