মূল বিষয়বস্তু
কম্পিউটার প্রোগ্রামিং
কোর্স: কম্পিউটার প্রোগ্রামিং > অধ্যায় 4
পাঠ 4: সাইড স্ক্রলার তৈরী করা: লাফানো ভোঁদড়লাঠি সংগ্রহ করা
আমাদের ভোঁদড়টি লাফাচ্ছে, লাঠিগুলো (sticks) দেখা যাচ্ছে, এখন এই দুইটি জিনিসের মধ্যে সমন্বয় করতে হবে। ভোঁদড়টি যখনই লাঠির ঠিক উপরে উঠতে পারবে আমরা সেটাকে সফলভাবে লাঠি সংগ্রহ হিসেবে ধরব। অর্থাৎ, দুইটি বস্তুর মধ্যে সংঘর্ষ (collision) যাচাই করতে হবে। যেহেতু এখানে দুইটি অবজেক্ট নিয়ে কাজ করা হচ্ছে, আমরা অনেকভাবেই এই সংঘর্ষ যাচাই করার কোড করতে পারি - সার্বজনীন ফাংশন হিসেবে, লাঠির অবজেক্টের মেথড হিসেবে, ভোঁদড় অবজেক্টের মেথড হিসেবে। এখন ভোঁদড় অবজেক্টের মেথড হিসেবে ব্যবহার করা যাক:
Beaver.prototype.checkForStickGrab = function(stick) {
// যদি ভোঁদড় লাঠির উপরে থাকে, তাহলে ভোঁদড়টি নির্ধারিত কোন কাজ করবে
};
উপরের ফাংশনে, প্রথমে একটি শর্ত লিখতে হবে যা ভোঁদড় এবং লাঠির সংঘর্ষ হলে সত্য (true) হবে এবং সংঘর্ষ না হলে মিথ্যা (false) হবে। আমরা এটাকে জটিল করতে পারি, উদাহরণস্বরূপ ভোঁদড়ের হাতের অবস্থানের উপর নির্ভর করে শর্তটি আমরা যাচাই করতে পারি, কিন্তু সহজভাবেই আমরা এখন কাজটি করি। তাদের মধ্যে "সংঘর্ষ" ঘটবে যদি:
- লাঠির কেন্দ্রের x এর অবস্থান যদি ভোঁদড়ের দুই পাশের মধ্যে হয়ে থাকে।
- লাঠির কেন্দ্রের y এর অবস্থান, ভোঁদড়ের অবস্থানের উপরে এবং নিচের মাঝামাঝি হয়ে থাকে।
লাঠিটি
rect
দিয়ে আঁকা হয়েছে, সাধারণত, এর মানে হল এটার x
এবং y
যথাক্রমে উপর ও নিচের দিকের স্থানাঙ্ককে নির্দেশ করে। যাই হোক, সহজে সংঘর্ষ যাচাই করার জন্য, আমরা এমন একটি মোড (mode) নিতে পারি যা rect
কে কেন্দ্র থেকে আঁকে:rectMode(CENTER);
rect(this.x, this.y, 5, 40);
স্বয়ংক্রিয়ভাবে ভোঁদড়ের ছবিটি উপরের বাম দিক থেকে আঁকা হয়েছে, কিন্তু আমরা এই মোডেই থাকব, কারণ এটা যাচাই করার ক্ষেত্রে বেশ ভালো কাজ করে। প্রথম শর্তটি যাচাই করার জন্য, x অবস্থানে, আমরা এরকমভাবে যাচাই করতে পারি, যেখানে লাঠির x বিভারের বাম পাশ (x) হতে বড় না সমান এবং ডান পাশ (x+ 40) হতে ছোট না সমান যাচাই করা যায়।
stick.x >= this.x && stick.x <= (this.x + 40)
y অবস্থান যাচাই করার জন্য, আমরা একই ধরনের কাজ করতে পারি, যেখানে লাঠির y এর অবস্থান ভোঁদড়ের উপরের অংশ (y) থেকে বড় না সমান এবং ভোঁদড়ের নিচের অংশ (y+40) থেকে ছোট না সমান যাচাই করা যায়।
stick.y >= this.y && stick.y <= (this.y + 40)
এখন, লাঠি এবং ভোঁদড়ের সংঘর্ষ সনাক্ত করার পর আসলে আমরা কি করব? আমরা কার্যকরভাবে লাঠিকে স্ক্রিন থেকে সরিয়ে ফেলতে চাচ্ছি এবং পরবর্তী সংঘর্ষ হতে বিরত রাখতে চাচ্ছি। একটি সহজ উপায় হল y স্থানাঙ্কটি পরিবর্তন করে শুধুমাত্র লাঠিটিকে পর্দা থেকে সরিয়ে ফেলা:
stick.y = -400;
একই সময়ে, ভোঁদড় কয়টি লাঠি "ধরতে" পেরেছে তা মনে রাখতে হবে, এজন্য আমরা লাঠির অভ্যন্তরীণ বৈশিষ্ট্য বৃদ্ধি করব:
this.sticks++;
অবশেষে, আমাদের এটাকে একটি সুবিধাজনক সময়ে কল করা দরকার - প্রতিটা লাঠি আঁকার পরপরই কল করলে কেমন হয়?
for (var i = 0; i < sticks.length; i++) {
sticks[i].draw();
beaver.checkForStickGrab(sticks[i]);
sticks[i].x -= 1;
}
এখানে সম্পূর্ণ প্রোগ্রাম আছে - দেখে নেওয়া যাক, যখনই লাঠির উপর লাফ দেওয়া হয়, লাঠিটি ঠিক তখনই অদৃশ্য হয়ে যাবে!
আলোচনায় অংশ নিতে চাও?
কোন আলাপচারিতা নেই।