Home About-us Privacy Policy Contact-us Services

কী কেন কীভাবে লেবেলটি সহ পোস্টগুলি দেখানো হচ্ছে৷ সকল পোস্ট দেখান
কী কেন কীভাবে লেবেলটি সহ পোস্টগুলি দেখানো হচ্ছে৷ সকল পোস্ট দেখান

বাংলালিংক গলা কাটা সিম এর রহস্য

By
অনেকদিন থেকেই ভাবছি বিষয়টা নিয়ে লেখা দরকার, কিন্তু লেখা হয়নি। আজ ন লিখে পারলাম না ।
আমার ধারণা আমাদের দেশের ৯০%-এর বেশী মোবাইল ফোন গ্রাহক প্রিপেইড মোবাইল সংযোগ ব্যবহার করেন, যার কারনে এই বিষয়টা নিয়ে সেরকম মাথা ব্যাথা কারও নেই। অথচ একসময় মোবাইল অপারেটাররা অনেক মুলা ঝুলিয়ে পোস্টপেইড সংযোগগুলি বিক্রি করেছে গ্রাহকদের কাছে, যার খেসারত এখনো দিতে হচ্ছে। আমি নিজে বাংলালিংক পোস্টপেইড নিয়ে ধরা খেয়েছি।
 দু-একটা অপারেটর বাদে, বেশীরভাগ অপারেটরের পোস্টপেইড সংযোগে কলচার্জ বেশী। বাংলালিংক  এর তো কথা ই নাই । প্রতি মিনিট  ১.৪১ টাকা যেখানে প্রিপেইড এ  ০.৬৬ টাকা মিনিট ।  আমি ফোন এ অনেক কম ই কথা বলি কিন্তূ  ফোন এর বিল দেখে মাথা খারাপ  । প্রিপেইড এ অনেক অফার দেয় তা ও আবার বাটপারি মিক্স  , যেমন  ৫৮ টাকা রিচার্জ এ ১০০০ মিনিট   কিন্তু ৫৮ টাকা রিচার্জ যখন করবেন দেখবেন ১০০ মিনিট ।  কিন্তু  পোস্টপেইড এ কোন অফার দেয় না।  দিবে  কেন বলুন পোস্টপেইড ইউজারদের এ অফার দিলে তো তারা টাকা কাটার জায়গা পাবে না।  পোস্টপেইড নিয়ে ই যেন ধরা খেয়েছে সবাই । আসলে ই তাই   নাম্বার  এক বার পরিচিত হয়ে গেলে পরিবর্তন করা কষ্টকর  আর এই সুযোগ নিয়ে  এরা বাটপারি করে ।
বাংলালিংক এর কল চার্জ ঃ বাংলালিংক এফ এন এফ  প্রতি মিনিটে ০.৬৯ টাকা  ,
বাংলালিংক  টু অন্য অপারেটরেএফ এন এফ  প্রতি মিনিটে ০.৯৭ টাকা  ,
বাংলালিংক  টু বাংলালিংক প্রতি মিনিটে ১.১৪ টাকা ( 12 am to 5 pm)
বাংলালিংক  টু বাংলালিংক প্রতি মিনিটে ১.৪১টাকা ( 5 pm to 12am)
বাংলালিংক  টু অন্য অপারেটরে  প্রতি মিনিটে ১.১৪ টাকা ( 12 am to 5 pm)
বাংলালিংক  টু অন্য অপারেটরে প্রতি মিনিটে ১.৪১টাকা ( 5 pm to 12am)

শুধু বিল ছাড়াও পোস্টপেইড সংযোগ চালানোর আরও কিছু ঝামেলা আছে। এদের মধ্যে সবচাইতে বিরক্তিকর কয়েকটি হলো –
  • ক্রেডিট লিমিট থাকলেও কোম্পানি ভেদে ৭০-৮০% ব্যবহার হয়ে যাবার পরে কল করতে না দেয়া,
  • ক্রেডিট লিমিট পার হওয়ায় কোনো নোটিফিকেশন না আসা,
  • নগদ টাকা জমা রেখে ক্রেডিট লিমিট বাড়ানো,
  • ব্যাংকে বিল দিলেও সেটা সময়মতো এডজাস্ট না হওয়া,
  • ক্রেডিটকার্ড দিয়ে অটোডেবিট চালু করে রাখলেও সময়মত বিল না নিয়ে লাইন বন্ধ করে দেয়া, ইত্যাদি।
বিদেশে পোস্টপেইড সংযের সুযোগ-সুবিধা অনেক বেশী। যেমন –
  • একজন পোস্টপেইড গ্রাহক অপারেটরের কাছ থেকে কিস্তিতে একটা দামী ফোন নিতে পারে, যা মাসের বিলের সাথে পরিশোধ করতে হয়।
  • প্রতি মিনিট বিল না গুনে নিজের ব্যবহারের উপর আন্দাজ করে একটা বান্ডেল কিনতে পারে, যাতে সে কল, এসএমএস, ইন্টারনেট সহ সব সুবিধা অনেক সাশ্রয়ী মূল্যে পায়।
  • বছরে নতুন নতুন উপহার সহ অনেক কিছু।
বিটিআরসি অনেক কাজ করলেও আমার ধারণা এগুলিতে সমতা আনার জন্য কিছু করেনা, বা কখনো চোখেও দেখেনি যে এরকম একটা অসম ব্যবসা করে যাচ্ছে মোবাইল অপারেটরগুলি দিনের পর দিন।
পোস্টপেইড সংযোগ কিন্তু সাধারণ ব্যবহারকারীরা ব্যবহার করেনা, যারা ব্যবহার করে, তাদের নুন্যতম কমিটমেন্ট থাকে অপারেটরের সাথে। পোস্টপেইড সিম কিনতে হয় বেশী টাকা দিয়ে, আবার সিকিউরিটি ডিপোজিট রাখতে হয়।
 কিন্তু তারপর কি লাভ!!
Read More

কখনও গেম তৈরী করার কথা ভেবেছেন? আসুন এবার একটা গেম তৈরী করি । ছোটবেলার সেই “Space Impact” গেম ।

By

ভূমিকা

রাত ৯ টা হবে । আমরা এলাকার ছেলেপেলে আর কিছু সিনিয়র ভাই ব্যাডমিন্টন খেলছি । আমি তখন ক্লাস নাইনে । ব্যাডমিন্টন খেলায় অন্য সবার চেয়ে দুর্বল ছিলাম আমি । ইভেন এখনও আছি । তাই একেকটা গেম খেলে হেরে অনেকক্ষণ বসে থাকতে হচ্ছিলো । সেই বোরিং সময়টা পার করার জন্য “মোবাইল গেম” এর চেয়ে ভালো আর কি হতে পারতো? তবে খেলার পাশাপাশি আমার সত্যিকার অর্থেই মনে প্রশ্ন জাগতো, এতো সুন্দর কাজ করছে গেমগুলো । কোনো ভুল নেই । এগুলো আসলে কিভাবে বানায়? আর আজ যখন এই বিষয়গুলো নিয়ে টুকটাক কাজ করছি, তখন সত্যিই মনে হয়, জীবন থেকে এর চেয়ে বেশী আর কি চাওয়ার থাকতে পারে?
প্রথমে কৌশিক দা কে অনেক ধন্যবাদ জানাই ওনার গ্রাফিক্স এর জন্য । ওনাকে জাস্ট বললাম ভাই গেমের একটু ডিজাইন করে দিতে হবে । উনি সরাসরি ভেক্টর গ্রাফিক্স নিয়ে কাজ করে পরের দিন আমার গেমের জন্য প্রয়োজনীয় ইলিমেন্ট ডিজাইন করে দিয়ে দিলেন । ওনাদের এতো স্নেহ না পেলে হয়তোবা গেমটা এতো চমকপদ হতোনা ।
আমি ইদানিং “প্রোগ্রামিং” এর সাথে দৈনন্দিন জীবনের ব্যবহৃত পদার্থ, গণিত প্রভৃতি বিষয় নিয়ে লেখালিখি করছি । আজকের বিষয়টা প্রোগ্রামিং এর সাথে সাইন্সের কোনো সাবজেক্টের প্রয়োজনীয়তা নিয়ে নয় । আজকে আমরা দেখব প্রোগ্রামিং এর জন্য “লজিকাল থিংকিং” বা যুক্তিবাদী চিন্তাধারার সম্মেলন এবং বরাবরের মতোই চাক্ষুশ প্রমাণ । আর সবশেষে, আমরা তৈরী করব একটা “গেম” । জলজ্যান্ত । তো চলুন আজকের এক্সপেরিমেন্ট শুরু করা যাক ‘আলোচনার বিষয়’ দিয়ে ।

আলোচনার বিষয়

আজকের আলোচনায় আমি একটা গেম তৈরী করার চেয়ে গেমগুলো মুলত কিভাবে তৈরী করা হয় তা নিয়ে বেশী ফোকাস করার চেষ্টা করেছি । এক নজরে দেখে নেই আজকের আলোচনার বিষয়গুলোঃ-
১। প্রোগ্রামিং এর সাথে “লজিকাল থিংকিং” এর প্রয়োজনীয়তা
২। গেম ডেভেলপমেন্ট কিভাবে হয়ে থাকে
৩। ছোটবেলায় খেলা “নকিয়া ৩৩১০” মোবাইলের “Space Impact” গেমটার রিমেক করে দেখব গেমটা কিভাবে তৈরী হয়েছিলো ।
[দ্রষ্টব্যঃ যদিও আমরা “স্পেস ইম্প্যাক্ট” গেমটা রিমেক করব । তবে তার চেয়ে সামান্য উন্নতমানের হবে আমাদের গেমটা । আর বিশেষ কিছু ক্ষেত্রে কিছুটা পার্থক্য এনেছি “নকিয়া”র কপিরাইট যেন লঙ্ঘিত না হয় তার জন্য ।]

গেম ডেভেলপমেন্ট

গেম ডেভেলপমেন্ট “কম্পিউটার সাইন্স” এর একটা বিশেষ অংশ । মূলত, শিশু থেকে শুরু করে বয়স্ক পর্যন্ত সবার অবসরের সঙ্গী হল “গেমস” । তাই এর গুরুত্বও অনেক বেশী । গেম ডেভেলপমেন্টের জন্য দুইটা জিনিস প্রয়োজন হয় । এক, দক্ষ প্রোগ্রামার । দুই, দক্ষ ডিজাইনার । ভালো ডিজাইন এবং ইন্টারেকশনের সমন্বয়েই তৈরী হয়ে থাকে একটা পুর্ণাংগ গেম । আর অবশ্যই, প্রত্যেকটা গেমে ফিজিক্সের নিয়ম মান্য করা আবশ্যক । এর জন্য তৈরী হয়েছে ফিজিক্সের অসংখ্য লাইব্রেরী । গেম ডেভেলপমেন্টের জন্য “প্রোগ্রামিং ল্যাঙ্গুয়েজ” সম্পর্কে সম্পূর্ণভাবে ধারণা থাকা আবশ্যক । একটা গেম ডেভেলপমেন্টের জন্য “প্রোগ্রামিং” এর চেয়ে “এলগরিদম” এ পরিশ্রম অনেক বেশী হয়ে থাকে । এলগরিদম বলতে প্লান করা । কোথা থেকে কি হবে তা ঠিক করা ।
গেম তৈরীর জন্য আমাদের প্রথমে গেমটা কিভাবে কাজ করবে তা নির্ধারণ করতে হবে । অর্থাৎ, গেমটা কি হবে, কিভাবে চলবে ইত্যাদি নিয়ে কাজ করাই প্রথম ধাপ । তার পরের ধাপে গেমের এলগরিদম করতে হয় । তারপর গেম তৈরী এবং ডিজাইন । তাহলে চলুন আজকে আমরা এক্সপেরিমেন্ট করব শৈশবে খেলা সবচেয়ে জনপ্রিয় গেম “স্পেস ইম্প্যাক্ট” এর তৈরীর প্রক্রিয়া নিয়ে ।

গেমের ক্রিয়াকলাপ (দর্শন)

যাদের মনে আছে গেমটা কিভাবে কাজ করে তারা এটা ভালোমতই জানেন । স্ক্রিনের শুরুর দিকে একটা নায়ক থাকে । ১ এবং ৩ বাটন দিয়ে গুলি করতে হয় । আর ৮ আর ০ দিয়ে উপরে-নিচে ওঠানামা করতে হয় । ডানদিক থেকে শত্রু আসে যাদের গুলি করতে হয় । তারপর আসে বস । অনেকটা নিচের মতোই (আজকের এক্সপেরিমেন্টের ফলাফল) হয় গেমটাঃ
 
(চিত্রঃ আজকের গেম)
এখানে বামের টা “নায়ক” । ডানের টা “শত্রু” । আর নীল এবং লাল গুলিগুলো তাদের গুলি । উপরে দেখা যাচ্ছে কার লাইফ কতটুকু আছে । এই গেমটাই আমরা আজকে তৈরী করব । তো চলুন শুরু করা যাক ।

গেম তৈরী (স্পেস ইম্প্যাক্ট-রিমেক)

গেম তৈরীর জন্য মুলত গেম ইঞ্জিন ব্যবহার করা হয়ে থাকে । আর অনলাইন গেমের জন্য আমরা “ফ্ল্যাশ” অথবা “ক্যানভাস” ব্যবহার করে থাকি । “ওয়েবজিএল”-ও একটা জনপ্রিয় অনলাইন গ্রাফিক্স ইঞ্জিন । এগুলো দিয়েই গেম বানানো হয় । তবে আমি এগুলোর ব্যবহার না করে শুধু এইচটিএমএল, সিএসএস, জাভাস্ক্রিপ্ট আর জেকুয়েরি দিয়েই গেম তৈরী করব । গ্রাফিক্স ইঞ্জিন নিয়ে অনেক ডেভেলপার জ্ঞান রাখেন না কারণ মার্কেটপ্লেসে এগুলোর দরকার হয় না । তবে গেম যে সিএসএস দিয়েও ডিজাইন করা যায় তা আজকে দেখাব । হয়তোবা আমিই প্রথম ইডিয়েট যে কিনা “ক্যানভাস” বা “ওয়েবজিএল” ব্যবহার না করে সিএসএস দিয়ে গেম ডিজাইন করে । তবে আমি এক্সপেরিমেন্টের জন্য সবচেয়ে সহজ মাধ্যমটাই বেছে নিতে বেশী পছন্দ করি যা সবচেয়ে বেশী মানুষের বোধগম্য হবে । তো চলুন গেম শুরু করা যাক ।
প্রথমে গেমের একটা কন্টেইনার তৈরী করে নিই । একটা “ডিভ” তৈরী করে নেব যেখানে আমাদের গেমের সব কাজ করব । অর্থাৎ, আমাদের গেমটা সেই ডিভের মধ্যেই সীমাবদ্ধ । এর জন্য নিচের কোড ইউজ করব । কোড দেখলেই যে কেউ এর কাজ বুঝবেন ।
<div>
<div class="hero"></div>
<div class='result'><button type="button" class="start">Start Game</button></div>
</div>
<div>
<span class="herolife"></span>
<span class="enemylife"></span>
</div>

আর সিএসএস এঃ-
* {margin:0;padding:0;}html {width:100%;height:100%;overflow:hidden;background:gray;}.game width:480px;height:360px;border:0px solid black;position:absolute;left:50px;top:50px;overflow:hidden;background:url('bckgrnd.png') repeat;}.info{width:480px;background:url('bckgrnd.png');height:20px;position:absolute;left:50px;top:31px;color:whit;font-family:verdana;font-weight:normal;color:#f1f1f1;}.info .herolife {float:left;height:18px;width:100px;background:royalblue;margin:5px;}.info .enemylife float:right;height:18px;width:100px;background:tomato;margin:5px;}.result {width:100%;font-size:30px;margin:auto;text-align:center;padding-top:30%;color:grey;font-family:verdana;}.start {display:block;padding:8px;color:grey;font-size:25px;margin:auto;background:#464646;color:white;border:0px solid black;cursor:pointer;}
ব্যাস, বেসিক ডিজাইন কমপ্লিট । উপরের “গেম” ডিভের মধ্যে “হিরো” ডিভ নিয়ে আমরা নায়কটাকে তৈরী করেছি । ভিলেন এবং বস তৈরী হবে জাভাস্ক্রিপ্টের মধ্যে । তবে তাদের ডিজাইন হবে সিএসএস দিয়েই । এবার নায়ক, ভিলেন এবং বস ডিজাইন করব নিচের কোড দিয়েঃ-
.hero {width:24px;height:30px;background:url('arif2.png');position:absolute;bottom:160px;left:20px;}
.enemy {width:20px;height:40px;background:url('enemy.png');}.boss {width:80px;height:150px;background:url('boss.png');}
এই কোডের কাজ তো দেখেই বুঝতে পারছেন । এখানে ব্যবহৃত ইমেজগুলো নিচে লিংক দিয়ে দিয়েছি সেখান থেকে ডাউনলোড করে নিতে পারবেন । তাছাড়া লাইভ ডেমোতেই সবকিছু দেয়া থাকবে ।
মোটামুটি গেমের ডিজাইন কমপ্লিট । এবার মূল কাজ, অর্থাৎ প্রোগ্রামিং ।
যার জন্য আমরা ব্যবহার করব জাভাস্ক্রিপ্ট এবং জেকুয়েরি । তাহলে চলুন শুরু করা যাক ।
প্রথমে গেমটাকে কনফিগার করে নেব । এখানে আমরা কে কয়টা গুলি করল, কার লাইফ কত বাকী আছে ইত্যাদি তথ্য জমা রাখব । কনফিগারেশনের কোড নিম্নরুপঃ-
var bNum=1;var ebNum=1;var totalB=0;var totalG=0;var totalEnemy=0;var EnemyCapacity=25;var Life=5;var bossActive="no";var bossLife=50;
নায়ক ৫ টা গুলি খেলেই মারা যাবে । আর বসকে মারতে লাগবে ৫০ টা গুলি । উপরের কোড দিয়ে তাই বুঝিয়েছি ।
এবার নায়ক, ভিলেন, এবং বসের আকৃতি কত তা স্ক্রিপ্টে কনফিগার করব নিচের কোড দিয়েঃ-
heroHeight=30;heroWidth=24;enemyHeight=40;enemyWidth=20;bossHeight=150;bossWidth=80;bulletHeight=3;bulletWidth=10;
গেমের কনফিগারেশনের সব কাজ কমপ্লিট । এবার গেম শুরু করব । উপরে এইচটিএমএল এ করা “স্টার্ট” বাটনে ক্লিক করলে যেন গেম শুরু হয় তার জন্য আমরা নিচের জেকুয়েরী কোড লিখবঃ-
$(".start").click(function(){
$(".result").remove();
sendEnemy(1);
});

স্টার্ট বাটনে ক্লিক করলেই শত্রু আসা শুরু হবে । নতুবা গেম শুরু হবেনা । স্টার্ট বাটনে ক্লিক করলে “স্টার্ট” লেখাটা মুছে দিয়ে সেখানে একটা শত্রু পাঠাবে । এই কোডের কাজ এতোটুকুই । sendEnemy() ফাংশনটা আমরা কিছুক্ষণ পর তৈরী করব ।
একটা গেমের তিনটা পার্ট থাকে ।
১। ইনপুট
২। ইনিশিয়ালাইজ
৩। আউটপুট
ইনপুটের মাধ্যমে আমরা কিবোর্ডের বিভিন্ন বাটনের মাধ্যমে তথ্য নিই যে কোন বাটন প্রেস করা হল । তারপর সেই বাটন কি কাজ করবে তা নির্ধারণ করি ইনিশিয়ালাইজ এ এবং তা প্রদর্শন করি আউটপুট এ।
তাই, কিবোর্ডের উপরে,নীচে,ডানে,বামে বাটনগুলো চাপলে যেন নায়ককে সরানো যায় তার কোড লিখব আমরা এখন । এজন্য জাভাস্ক্রিপ্টের কি-কোড অবজেক্ট ইউজ করব । এর মাধ্যমে ইউজার কখন কি বাটন প্রেস করছে তা ট্রেস করা যায় । নিচের কোডটা দেখুনঃ-
$(window).keydown(function(e){
hero=$(".hero");
heroY=parseInt(hero.css("bottom"));
heroX=parseInt(hero.css("left"));
if (e.keyCode === 38 && (heroY+10)<340){
hero.css("bottom",heroY+10); // Up
}
else if (e.keyCode === 40 && (heroY)>0){
hero.css("bottom",heroY-10); // Down
}
else if (e.keyCode === 37 && (heroX)>0){
hero.css("left",heroX-10); // Left
}
else if (e.keyCode === 39 && (heroX+10)<440){
hero.css("left",heroX+10); // Right
}
else if (e.keyCode === 90){ // When the "z" button is pressed
fire();
}
});

প্রথমে আমরা দেখেছি ওখানে কোনো বাটন প্রেস করা হয়েছে কি-না । বাটন প্রেস করলে সেই মুহূর্তে নায়ক কোথায় অবস্থান করছে তা নির্ণয় করেছি । তারপর বাটন অনুযায়ী নায়ক উপরে-নিচে ইত্যাদির মধ্যে কোনদিকে যাবে তা নির্ধারণ করেছি তার সিএসএস প্রোপার্টিতে পজিশন চেঞ্জ করে । আর সবশেষে “Z” বাটন ক্লিক করলে যেন গুলি করে তার জন্য ৯০ নাম্বার বাটনে (জেড বাটনে) ফায়ার ফাংশন কল করেছি । অর্থাৎ, “Z” বাটন চাপলেই fire() নামের একটা ফাংশন কাজ করবে । এই ফাংশনটা হল নায়কের গুলি করার ফাংশন ।
এবার, ফায়ার ফাংশনটা দিয়ে নায়ক গুলি করবে । তার মানে, নায়ক কোথায় আছে তা নির্ধারণ করবে । তারপর নায়কের সামনে একটা গুলি তৈরী করবে । নিচের কোডগুলো দেখুনঃ-
function fire(){
hero=$(".hero");
heroY=parseInt(hero.css("bottom"));
heroX=parseInt(hero.css("left"));
bullet=document.createElement("div");
bClass="bullet"+bNum;
bullet.classList.add(bClass);
bullet.classList.add("bullet");
document.querySelector(".game").appendChild(bullet);
bNum+=1;totalB+=1;
$("."+bClass).css({"position":"absolute","width":bulletWidth,"height":bulletHeight,"background":"royalblue","left":heroX+heroWidth,"bottom":heroY+(heroHeight/2)});
bulletGo("."+bClass);
}

যেহেতু প্রতিবার “Z” বাটন চাপলেই এই ফাংশনটা কাজ করবে । তার মানে প্রতিবার জেড বাটন চাপলেই একটা করে গুলি নায়কের সামনে তৈরী হবে ।
ফাংশনটাতে প্রথমে নায়কের স্ক্রিনে অবস্থান নির্ণয় করেছি । তারপর একটা নতুন ডিভ তৈরী করেছি যেটা গুলি হিসেবে কাজ করবে । গুলিটাকে সিএসএস ডিজাইন করে নায়কের সামনে বসিয়েছি । কিন্তু গুলি বানালেই তো হবেনা । গুলিটাকে চালাতে হবে । আর তার জন্য আমরা একটা ফাংশন বানাবো যা নির্দিষ্ট সময় পরপর গুলিটাকে এক ঘর করে সামনে নিয়ে যাবে । আর বুলেট চলতে চলতে যদি সামনে কোনো শত্রুর সাথে ধাক্কা লাগে তাহলে সেই শত্রুটাকে মেরে ফেলাও এই ফাংশনেরই কাজ । সেটা হল bulletGo() ফাংশন । bulletGo() ফাংশনটা দিয়ে গুলিকে চলতে লাগিয়ে দিয়েছি । তাহলে এবার আমরা তৈরী করব বুলেটগো ফাংশনটা । এই ফাংশনের কাজ হবে গুলিকে নিউটনের প্রথম সূত্র মেনে (গতিশীল বস্তু চিরকাল গতিশীল) গুলিকে এগিয়ে নিয়ে যাওয়া । ফাংশনটা নিচের মতঃ-
function bulletGo(elem){
$(elem).animate({"left":parseInt($(elem).css("left"))+10},100,function(){bulletGo(elem);});//নির্দিষ্ট সময় পরপর গুলিকে সামনে নিয়ে যাবে
if (parseInt($(elem).css("left"))>=470){$(elem).remove();totalB-=1;} //স্ক্রিনের শেষে গেলে সেখান থেকেই গুলি ডিলেট করে দিয়েছি
if (bossActive!="yes"){ //বস আছে কিনা চেক করেছি, না থাকলে নিচের কোড কাজ করবে
bulletk=$(elem);
bE=parseInt(bulletk.css("left"))+bulletWidth;
bT=parseInt(bulletk.css("bottom"))+bulletHeight;
bB=parseInt(bulletk.css("bottom"));
for (i=1;i<=enemy.length-1;i++){ //প্রত্যেকটা শত্রুর জন্য আলাদা আলাদাভাবে চেক করেছি যে গুলি শত্রুর গায়ে লাগলো কিনা
shotru=$(".enemy"+i);
eS=parseInt(shotru.css("left"));
eT=parseInt(shotru.css("bottom"))+enemyHeight;
eB=parseInt(shotru.css("bottom"));
if ((bE>eS && bE<eS+15) && ((bT>eT && bT>eB && bB<eT && bB>eB) || (bT<eT && bT>eB && bB<eT && bB>eB) || (bT<eT && bT>eB && bB<eT && bB<eB))){ //গুলি যদি শত্রুর গায়ে লাগে তাহলে যা করবেঃ-
shotru.remove();$(elem).remove();
if (totalEnemy<=EnemyCapacity){
sendEnemy(1);
}
else {
for (i=1;i<=enemy.length-1;i++){
$(".enemy"+i).remove();
}
for (i=1;i<=document.getElementsByClassName("boss").length;i++){
$(".boss").remove();
}
sendBoss();
bossActive="yes";
}
}
}
}
else if (bossActive=="yes"){ //যদি বস থাকে তাহলে বসকে মারবে
bulletk=$(elem);
bE=parseInt(bulletk.css("left"))+bulletWidth;
bT=parseInt(bulletk.css("bottom"))+bulletHeight;
bB=parseInt(bulletk.css("bottom"));
boss=$(".boss");
eS=parseInt(boss.css("left"));
eT=parseInt(boss.css("bottom"))+47.5+55;
eB=parseInt(boss.css("bottom"))+47.5;
if ((bE>eS && bE<eS+10) && ((bT>eT && bT>eB && bB<eT && bB>eB) || (bT<eT && bT>eB && bB<eT && bB>eB) || (bT<eT && bT>eB && bB<eT && bB<eB))){ //বসের গায়ে গুলি লাগলে লাইফ কমবে
if (bossLife>=1){bossLife-=1;$(elem).remove();$(".enemylife").css("width",parseInt($(".enemylife").css("width"))-2);}else {gameWin();}
}
}
}

এই ফাংশনের প্রথম লাইনে আমরা গুলিটাকে একটা নির্দিষ্ট বেগে গতিশীল রেখেছি । দ্বিতীয় লাইনে গুলিটা স্ক্রিনের বাইরে চলে গেলে ডিলেট করে দিয়েছি । তারপরের ইফ স্টেটমেন্টের ভেতরে প্রথমে নির্ণয় করেছি স্ক্রিনে বস আছে নাকি এমনি শত্রু আছে । যদি এমনি শত্রু থাকে তাহলে স্ক্রিনের কোথায় আছে তা নির্ধারণ করেছি । তারপর কোনো গুলির অবস্থান যদি শত্রুর সামনে হয় অর্থাৎ শত্রুর গায়ে লাগে তাহলে শত্রুটাকে মেরে ফেলেছি । আর গুলির অবস্থান যদি বসের গায়ে হয় অর্থাৎ গুলিটা বসের গায়ে লাগে তাহলে বসের লাইফ কমিয়েছি ।
মোটামুটি নায়কের সব কাজ শেষ । এবার আমরা শত্রু তৈরী করব । যেহেতু শত্রু অনেকগুলো থাকবে, তাই তাদের একটা অ্যারে বানিয়ে নিয়েছি ।
var enemy=new Array();
তারপর আমরা শত্রুকে স্ক্রিনে পাঠানোর জন্য নিচের ফাংশন বানিয়েছি ।
function sendEnemy(quantity){
for (i=1;i<=quantity;i++){
enemy[i]="<div class='enemy enemy"+i+"'></div>";
$(".game").append(enemy[i]);
totalEnemy+=1;
pos=Math.random()*350;
bottom=Math.round(pos);
$(".enemy"+i).css({"position":"absolute","left":495,"bottom":bottom});
activate(".enemy"+i); // Gives life to 'i' number Enemy. Generates ".enemy1"
}
}

এই ফাংশনের মাধ্যমে স্ক্রিনের ডানদিকে একটা র‍্যান্ডোম জায়গায় শত্রু তৈরী হবে । তারপর একটিভেট নামের আরেকটা ফাংশনের কাছে সেই শত্রুটাকে চালানোর দায়িত্ব দেব ।
একটিভেট ফাংশনের কাজ হবে শত্রুটাকে জীবন দেয়া । অর্থাৎ স্ক্রিনের বিভিন্ন জায়গায় স্বয়ংক্রিয়ভাবে নিয়ে যাওয়া । নায়ক কোথায় আছে তা খুঁজে বের করা এবং নায়ককে গুলি করা । ফাংশনটা নিচের মতঃ-
function activate(enemy){
posY=Math.random()*100;
posY=Math.round(posY);
posY=parseInt($(".hero").css("bottom"))+(heroHeight/2)-50+posY;
if (posY<0){posY=0;} else if (posY>340){posY=340;}
posX=Math.random()*200;
posX=Math.round(posX);
posX=230+posX;
$(enemy).animate({"left":posX,"bottom":posY},1500,function(){setTimeout(function(){activate(enemy);eFire(enemy);},200);});
}

শত্রুকে গুলি করিয়েছি আমরা eFire() নামের আরেকটা ফাংশনের মাধ্যমে । এই ফাংশনের কাজ অনেকটা fire() ফাংশনের অনুরূপ । তবে এক্ষেত্রে গুলিটা বাম থেকে ডানে না গিয়ে ডান থেকে বামে যায় । ফাংশনটা নিম্নরুপঃ-
function eFire(enemy){
enemyY=parseInt($(enemy).css("bottom"));
enemyX=parseInt($(enemy).css("left"));
guli=document.createElement("div");
bClass="guli"+ebNum;
guli.classList.add(bClass);
guli.classList.add("guli");
document.querySelector(".game").appendChild(guli);
ebNum+=1;
totalG+=1;
$("."+bClass).css({"position":"absolute","width":bulletWidth,"height":bulletHeight,"background":"tomato","left":enemyX-bulletWidth,"bottom":enemyY+(enemyHeight/2)});
guligo("."+bClass);
}

ফাংশনটা শত্রুর সামনে একটা গুলি তৈরী করে এবং গুলিটাকে চালানোর জন্য guligo() নামের আরেকটা ফাংশনকে কল করে । গুলিগো ফাংশনটাও অনেকটা bulletGo() এর অনুরুপ । এটা শুধু বাম থেকে ডানে না গিয়ে ডান থেকে বামে যায় এবং নায়কের গায়ে লাগলে নায়কের লাইফ কমিয়ে দেয় ।
function guligo(elem){
$(elem).animate({"left":parseInt($(elem).css("left"))-10},100,function(){guligo(elem);});
if (parseInt($(elem).css("left"))< 0){$(elem).remove();totalG-=1;}
bulletg=$(elem);
gS=parseInt(bulletg.css("left"));
gT=parseInt(bulletg.css("bottom"))+bulletHeight;
gB=parseInt(bulletg.css("bottom"));
Hero=$(".hero");
hE=parseInt(Hero.css("left"))+heroWidth;
hT=parseInt(Hero.css("bottom"))+heroHeight;
hB=parseInt(Hero.css("bottom"));
if ((gS<hE && gS>hE-10) && ((gT>hT && gT>hB && gB<hT && gB>hB) || (gT<hT && gT>hB && gB<hT && gB>hB) || (gT<hT && gT>hB && gB<hT && gB<hB))){
if (Life>=1){Life-=1;$(elem).remove();$(".herolife").css("width",parseInt($(".herolife").css("width"))-20);} else {gameOver();}
}
}

এবার আমরা বসের ফাংশন তৈরী করব । নায়ক যদি ১৫ টা শত্রুকে গুলি করে মারতে পারে তাহলে স্ক্রিনে বস আসবে । বস আনার জন্য ফাংশন নিম্নরুপঃ-
function sendBoss(){
boss="<div class='boss'></div>";
$(".game").append(boss);
pos=Math.random()*350;
bottom=Math.round(pos);
$(".boss").css({"position":"absolute","left":480+bossWidth,"bottom":bottom});
activeBoss();
bossUltra();
}

এই ফাংশন স্ক্রিনের ডানে একটা র‍্যনডোম জায়গায় বস কে তৈরী করে ।
তারপর activeBoss() ফাংশনটা নায়ককে জীবন দেয় । এই ফাংশনটা নায়ক কোথায় আছে তা নির্ধারণ করে এবং নায়কের গায়ে এইম করে গুলি করে ।
function activeBoss(){
//posY=Math.random()*10;
//posY=Math.round(posY);
posY=parseInt($(".hero").css("bottom"))+(heroHeight/2)-(bossHeight/2);
if (posY<0){posY=0;} else if (posY>210){posY=210;}
posX=Math.random()*200;
posX=Math.round(posX);
posX=230+posX;
$(".boss").animate({"left":posX,"bottom":posY},1500,function(){setTimeout(function(){activeBoss();},200);});
}

নায়ককে গুলি করার ফাংশন হল bossFire() । এই ফাংশনটা নিম্নরুপঃ-
function bossFire(){
bossY=parseInt($(".boss").css("bottom"));
bossX=parseInt($(".boss").css("left"));

guli=document.createElement("div");
bClass="guli"+ebNum;
guli.classList.add(bClass);
guli.classList.add("guli");
document.querySelector(".game").appendChild(guli);
ebNum+=1;
totalG+=1;
posY=Math.random()*55;
posY=Math.round(posY);
posY=bossY+47.5+posY;
$("."+bClass).css({"position":"absolute","width":bulletWidth,"height":bulletHeight,"background":"tomato","left":bossX-bulletWidth,"bottom":posY});
guligo("."+bClass);
}

এবার bossUltra() ফাংশন তৈরী করব যা নায়ককে এইম করে নির্দিষ্ট সময় পরপর বসকে গুলি করায় ।
function bossUltra(){
bossFire();
var t=setTimeout(function(){bossUltra();},600);
}

এবার নায়ক মারা গেলে gameOver() এবং বস মারা গেলে gameWin() ফাংশনকে কল করার মাধ্যমে আমরা গেম শেষ করব ।
function gameWin(){
$(".game").html("<div class='result'>You Win</div>");
$("bullet").css("display","none");
}
function gameOver(){
$(".game").html("<div class='result'>Game Over</div>");
$("bullet").css("display","none");
}

ব্যস, তৈরী হয়ে গেল আমাদের গেম । সবশেষে আমরা উপরের চিত্রের মত একটা গেম পাই ।
ফলাফল
উপরের তৈরী করা গেমটা এবার লাইভ খেলে দেখব আমরা । গেমটার লাইভ ডেমো দেখতে নিচের লিংকে যানঃ-
Live Demo with Codes
Live Demo Only (No Codes)

উপসংহার

আপনাদের হয়তো মনে হতে পারে গোটা আর্টিকেলটাই মাথার উপর দিয়ে গেল । তবে যারা জাভাস্ক্রিপ্ট এবং জেকুয়েরি ভালো জানেন তারা নিশ্চয়ই কোডের প্রত্যেকটা লাইন কি কাজ করছে তা বুঝতে পারছেন । জাভাস্ক্রিপ্ট দিয়ে আসলে অনেক জটিল জটিল সব কাজ করা যায় । নেটওয়ার্কিং, প্রোগ্রামিং থেকে শুরু করে সব ধরনের কাজই জাভাস্ক্রিপ্ট দিয়ে করা যায় । আমাদের দেশে গেম ডেভেলপমেন্টের জন্য ভালো কোনো কোম্পানী নেই । কিন্তু এই খাত থেকে প্রতি বছর প্রচুর আয় করা সম্ভব । তাই যাদের মনে কৌতুহল আছে কিভাবে গেম তৈরী করা হয় তাদের কাছে আমার রিকমেন্ড থাকবে এই বিষয়ে লেখাপড়া করুন । নিজের কৌতুহলকে দমে যেতে দেবেন না । যারা সফল হয়েছে তাদের কাছ থেকে দিকনির্দেশনা নিন । এবং যদি সাধনা থাকে, প্রবল ইচ্ছে থাকে, আপনি অবশ্যই পারবেন ।
গেম তৈরী করা মূলত আপাতদৃষ্টিতে যতোটা কঠিন মনে হয় ততো কঠিন না । শুধু আমাদের সবকিছু যুক্তি দিয়ে ভাবতে হবে । আসলে কি হচ্ছে এবং আমরা গেমটাতে কি হওয়াতে চাই তা নিয়ে ভাবতে হবে ।
Read More

গণিতের কিছু মজার মজার তথ্য (নবিন ভাইদের কাজে দাগবে)

By

দূরত্ব :

1 ফুট = 12 ইঞ্চি

1 গজ = 3 ফুট

1 মাইল = 5.280 ফুট

1 মাইল ≈ 1.61 কিলোমিটার

1 ইঞ্চি = 2.54 সেন্টিমিটার

1 ফুট = 0.3048 মিটার

1 মিটার = 1,000 মিলিমিটার

1 মিটার = 100 সেন্টিমিটার

1 কিলোমিটার = 1,000 মিটার

1 কিলোমিটার ≈ 0.62 মাইল

ক্ষেত্র:

1 বর্গ ফুট = 144 বর্গ ইঞ্চি

1 বর্গ গজ = 9 বর্গ ফুট

1 একর = 43.560 বর্গ ফুট

আয়তন :

1 লিটার ≈ 0.264 গ্যালন

1 ঘন ফুট = 1.728 ঘন ইঞ্চি

1 ঘন গজ = 27 ঘন ফুট

ওজন :

1 আউন্স ≈ 28.350 গ্রাম

1 cvDÛ= 16 আউন্স

1 cvDÛ ≈ 453.592 গ্রাম

1 এক গ্রামের এর্কসহস্রাংশ = 0.001
গ্রাম

1 কিলোগ্রাম = 1,000 গ্রাম

1 কিলোগ্রাম ≈ 2.2 পাউন্ড

1 টন = 2,000 পাউন্ডের

আয়তক্ষেত্র :

পরিধি = 2 (দৈর্ঘ্য + প্রস্থ)

ক্ষেত্রফল = দৈর্ঘ্য X প্রস্থ
আয়তক্ষেত্রাকার নিরেট (বক্স):

ভলিউম = দৈর্ঘ্য X প্রস্থ X উচ্চতা
ত্রিভুজ :

একটি ত্রিভু‡জ i কো‡ণi যোগফল =

180 °
ক্ষেত্রফল = ½ (দৈর্ঘ্য X উচ্চতা)
বৃত্ত :

একটি বৃত্তে ডিগ্রী = 360 °

পরিধি ≈ 3.14 X প্রস্থ
আয়তন ≈ 3.14 X (ব্যাসার্ধ) 2

গোলক (বল):

আয়তন ≈ 4/3 X 3.14 X (ব্যাসার্ধ) 3

তাপমাত্রা :

° C = 0.56 (ফারেনহাইট - 32) অথবা 5/9
(ফারেনহাইট - 32)

° F = 1.8 (° C) + 32 অথবা (9/5 X ° C) + 32
আবার দেখা হবে

সবাইকে ধন্যবাদ

Read More

শিশুদের জন্য আদম (আঃ) এর কাহিনী

By

আসসালামু আলাইকুম, সকল
প্রশংসা আল্লাহ তা'লার , সালাত
ও সালাম পেশ করছি শেষ নবী ও
রাসুল মুহাম্মাদ (সাঃ) এর প্রতি-
সেদিন একজনকে একটা সুন্দর
ইসলামী গল্পের বই উপহার দিব
বলে বই এর দোকানে গেলাম।
অনেক খোঁজাখুঁজি করার পরেও
তেমন কোন সুন্দর বই পেলামনা।

লেখা ভাল তো ছবি ভালনা,
ছবি ভাল তো লেখা ভালনা।

কি আর করা !! সবাই যা করে আমিও
তাই করলাম । google এর শরনাপন্ন হলাম
। কিন্তু তেমন কোন লাভ হলনা। কিছু
গল্পের বই পেলাম ঠিকই, কিন্তু
সবগুলোই ইংরেজিতে লেখা।

আমাদের দেশের অধিকাংশ
বাচ্চারাই ইংরেজিতে দুর্বল।
তাদের পক্ষে তো আর এই সব
পড়ে আনন্দ পাওয়া সম্ভব নয়। তাই
কিছুটা হতাশই হলাম।

এদিকে আবার শরীরটাও একটু
খারাপ। কিছুই করতে ভাল
লাগছিলনা। তাই শেষমেশ ঠিক
করলাম একটা pdf editor
নামিয়ে নিজেই ইংরেজি গল্পের
বইগুলোকে বাংলায় রুপান্তর করি।

যেই ভাবা সেই কাজ।

এতে কিছুটা সমস্যারও সম্মুখীন
হতে হয়েছে। কারণ এইসব editing এর
কাজে আমার অভিজ্ঞতা নেই
বললেই চ
লে। তাই অনেক রকমের
জোড়াতালি দিয়ে কাজটা শেষ
করতে হয়েছে।

আলহামদুলিল্লাহ , আল্লাহর রহমতে
"আদম (আঃ) এর কাহিনী"
নামে একটি গল্পের বই এর কাজ শেষ
করেছি। বইটিতে কোন প্রকার
মিথ্যার আশ্রয় না নেয়ার
চেষ্টা করেছি এবং কিছু
ক্ষেত্রে সরাসরি কুরআনের আয়াত
থেকে উদ্ধৃত করেছি। আশা করি,
বাচ্চাদের ভাল লাগবে।

আপনারা খুব সহজেই print
করে বাচ্চাদেরকে উপহার
দিতে পারেন। এতে তারা আদম
(আঃ) এর সৃষ্টির
কাহিনী সম্পর্কে জানতে পারবে।

আপনাদের সবার জন্য এই বইটির link
নিচে দেয়া হলঃ

https://drive.google.com/file/
d/0BxIiELSKYwAsczNudmhVOXVvM0U/edit?
usp=sharing

বইটি পড়ে কোন খারাপ দিক
চোখে পরলে অবশ্যই জানাবেন।

শেষকথাঃ
খুবই কষ্টের ব্যাপার !!! আমাদের
মধ্যে অনেক ভাই/বোন রয়েছেন
যারা photo editing, graphics designing ,
বাংলা অথবা ইংরেজি সাহিত্যে খুবই
দক্ষ। কিন্তু তারা আমাদের
সোনামণিদের জন্য তেমন কোন
কাজ করছেননা। আমদের
বাচ্চারা এখন বই দেখলে ভয় পায়,
জানার কোন ইচ্ছাই তাদের
মধ্যে আর কাজ করেনা। তাদের
ভবিষ্যৎ কি আমরাই ধ্বংস করছিনা ?

আমি জানি আমার share
করা বইটি তেমন ভাল মানের না।

কারণ এটা কোন expert এর কাজ নয়।

তাই যারা এ সকল বিষয়ে expert
তাদের প্রতি আমার অনুরোধ-
আপনারা আমাদের
পরবর্তী প্রজন্মের জন্য কিছু করুন।

Read More

বুকে ব্যাথা হচ্ছে ? এটা কি হার্ট অ্যাটাক(এম আই)/গ্যাস্ট্রিক/ নিউমোনিয়া নাকি মাংসপেশীর ব্যাথা , যেভাবে বুঝবেন

By

আসসালামু আলাইকুম,
সবাইকে স্বাগতম জানিয়ে আজকের
টিউন শুরু করছি।
ব্যাথা আমাদের জীবনের সাধারন
সমস্যা গুলোর একটা, যার
সাথে আমরা কম বেশি সবাই
পরিচিত, কিন্তু এই
বুকে ব্যাথা কখনো হয়ে উঠতে পারে সাংঘাতিক
– আর তখন দ্রুত উপযুক্ত
ব্যবস্থা না নিলে তার
পরিনতি হতে পারে ভয়াবহ ।
সাধারনত
কি কি কারনে বুকে ব্যাথা হতে পারে?
প্লুরাইটিক বুকে ব্যাথা -
সাধারনত
নিউমোনিয়া বা অন্য
শ্বসন তন্ত্র বিষয়ক সমস্যার
সাথে সম্পর্কৃত
ইশকেমিক কার্ডিয়াক
ব্যথা - হার্ট অ্যাটাক
বা মায়োকার্ডিয়াল
ইনফ্রাকশান (এম আই) জনিত
সমস্যার জন্য
গ্যাস্ট্রিক জনিত সমস্যার
কারনে
বুকের
মাংসপেশীতে ব্যাথা হওয়ার
কারনে
কিভাবে এই
ব্যাথা গুলোকে আলাদা করা যায়?
যদিও সব সময় সম্ভব হয়ে ওঠেনা কিন্তু
তারপরও এই প্রত্যেকটা ব্যাথারই
বিশেষ বিশেষ কিছু ফিচার আছে,
যার
মাধ্যমে এগুলোকে আলাদা করা সম্ভব
এবং দ্রুত রোগীকে ম্যানেজমেন্ট
করা সম্ভব।
প্লুরাইটিক বুকে ব্যাথা :
এই ব্যাথা সাধারনত শ্বসন
তন্ত্রের
যে কোনো সমস্যার
কারনে হয়,
নিউমোনিয়া বা শ্বাস
নালীর কিংবা প্লুরার
ইনফেকশানের
কারনে এটা হতে পারে।
সাধারনত বুকের বিশেষ
কোনো অংশে এটা হয়
আর সাধারনত বুকের
মাঝে এই ব্যথা হয় না,
বা কম দেখা যায়।
ব্যাথার ধরন
অনেকটা স্টাবিং(ঐ
অংশে ছুরি চালানোর
মতো) ধাচের হয়,
যা সাধারনত অন্য
কোথাও ছড়ায়না, যদিও
ক্ষেত্র বিশেষে এর
ব্যতিক্রম দেখা যায়
ইশকেমিক কার্ডিয়াক ব্যাথা :
এই ব্যাথা সাধারনত
হার্টের রক্ত সঞ্চালন
প্রক্রিয়া বাধাগ্রস্ত
হওয়ার
কারনে দেখা যায়।
ব্যাথা বুকের মাঝে হয়
যা পরবর্তিতে ঘাড়
এবং বাম বাহুর ও হাতের
দিকে ছড়িয়ে যায়,
তবে এই ব্যাথা পেটের
উপেরের অংশে ও
দেখা যেতে পারে।
ব্যাথার ধরন চেপে ধরার
মতো, বা অনেক সময় এমনও
মনে হয় বুকের উপর
কোনো বড়
বোঝা তুলে দেয়া হয়েছে
গ্যাস্ট্রিক জনিত ব্যাথা :
এই ব্যাথা সাধারনত
পেটের উপরের
অংশে দেখা যায়
ভাজি বা মসলাদার
খাবার
খেলে ব্যাথা বেড়ে যায়
ব্যাথা সাধারনত পেটের
পিছনের
দিকে যেতে পারে
এই ধরনের রোগীর
অনেকদিনের ব্যাথার
হিস্ট্রি থাকে
বুকের মাংসপেশী জনিত ব্যাথা :
এই ব্যাথা বুকের
যে কোনো স্থানে কিংবা সকল
বুক জুড়েও হতে পারে
বুকের কোথাও
সরাসরি ব্যাথা লাগা কিংবা ভারী কিছু
তুলতে যাওয়ার
হিস্ট্রি থাকতে পারে
জোরে শ্বাস নেয়ার
কারনে বা হাটা চলা করে মাংসে টান
পড়লেই
ব্যাথাটা বেড়ে যেতে পারে
হার্টের জন্য
ব্যাথা হলে কি করবেন??
যেহেতু এই ব্যাথার ফলাফল
সবচেয়ে খারাপ, এটাই সবার
আগে জানা প্রয়োজন।
যদি বুঝতে পারেন হার্টের জন্যই
বুকে ব্যাথা তবে ‘গ্লিসারাইল
ট্রাইনাইট্রেট স্প্রে/অ্যারোসল‘
কিনে জিহবার
নিচে(জিহবা উল্টিয়ে) দুই চাপ
দিয়ে দিবেন, আর এস্পিরিন ৭৫
মিগ্রা এর ৪ টি ট্যাবলেট
একসাথে রোগীকে খায়িয়ে দ্রুত
নিকটস্থ
হাসপাতালে পাঠিয়ে দিবেন।
সবাইকে ধন্যবাদ ।
তথ্যসূত্রঃ ইন্টেরনেটের বিভিন্ন
সাইট ।

Read More
Home About-us Privacy Policy Contact-us Services
Copyright © 2014 kite | All Rights Reserved. Design By Templateclue - Published By Gooyaabi Templates