সি শার্প প্রোজেক্ট [পর্ব-০৮] :: তৈরি করুন জনপ্রিয় Snake গেম

সি শার্প প্রোজেক্ট

Hello Guys,  আজ আমরা একটি অতি পরিচিত ও জনপ্রিয় গেম তৈরি করবো। যে গেমটি আমরা মোবাইল ডেক্সটপ ল্যাপটপ এ হরহামেশাই খেলে থাকি। গেমটির নাম snake গেম। যাকে বাংলায় বলে শাপ খেলা। যেহেতু গেমটি অনেক জনপ্রিয় তাই অনেকেই টাকা দিয়ে গেমটি কিনে খেলে। কিন্তু আমারা সি শার্প শিক্ষার্থী তাই আমরা টাকা দিয়ে গেমটি কিনব না বা অন্নের তৈরি গেম খেলবো ও না। তাহলে কি আমরা গেমটি খেলবো না? অবশ্যই খেলবো তাও এবার নিজের মাতৃভাষা বাংলায়।
তবে নিজেরা গেমটি তৈরি করে তারপর খেলবো।

আগেই বলে দিচ্ছি গেমটি আগের গেম গুলো থেকে একটু কঠিন। এখানে আমাদের ক্লাস ডিক্লিয়ার করতে হবে। এবং ক্লাস এর ফাংশনগুলকে কল করতে হবে। তবে ভয় পাবেনা। আমি আছি না? যত সহজে সম্ভব চিত্র সহ লিখবো।

চলুন তাহলে শুরু করা যাক।
Create a new Windows application project. এবং অ্যাপ্লিকেশানটির নাম snake game দিন। এবং ওকে ক্লিক করুন তাহলে একটি ফর্ম ওপেন হবে। এখন ফর্ম এর প্রোপার্টিজ থেকে এর back color change  করে  black  করি।

>

এখন ফর্ম এ তিন টি লেভেল নেই। যাদের নাম যথাক্রমে label1, label2, label3। এখন label1, label2, label3 এদের প্রোপার্টিজ থেকে auto size = false, back color = white, Fore color = black করি।

এখন label3 এর টেক্সট পরিবর্তন করে লিখি “গেমটি খেলতে স্পেসবার প্রেস করুন।”

 
অনুরুপ ভাবে label1 এর টেক্সট পরিবর্তন করে “আপনার স্কোর” সবকিছু ঠিকঠাক পরিবর্তন হলে ফর্মটি নিচের মত করে সাজান
এখন টুলবক্স আবার timer নামে একটি কন্ট্রোল যোগ করি এবং এর প্রোপার্টিজ থেকে এর Interval কে 100 করে দেই।
এখন আমরা দুটি ক্লাস তৈরি করবো। নিচে ছবিসহ দেয়া হোল কি ভাবে ক্লাস তৈরি করতে হবে। এখানে আমরা দুটি ক্লাস তৈরি করবো ক্লাস দুটি হোল Food.cs ও snake.cs এখানে snake.cs এ একটি snake তৈরি করা হবে ও Food.cs এ snake এর Food তৈরি করা হবে তাহলে চলুন প্রথমে Food.cs তৈরি করি।
প্রথমে ডানপাশের solution explorer থেকে অ্যাপ্লিকেশানটির নাম এর উপর মাউস এর রাইট বাটন ক্লিক করুন ও যে চার্ট আসবে সেখান থেকে  ADD >> Class এ ক্লিক করি।
এখন একটি বক্স ওপেন হবে এই বক্স এর নিচে দেখবেন একটা টেক্সট বক্স Class1.cs লেখা রয়েছে এই Class1.cs মুছে দিয়ে এখানে Food.cs লিখি। তারপর ADD বাটন এ ক্লিক করি। ব্যাস আমাদের Food.cs ক্লাসটি তৈরি হয়ে গেল।
একই ভাবে snake.cs নামে আরও একটি ক্লাস তৈরি করি। এখন দুটি ক্লাস তৈরি হয়ে গেলে আমরা এখানে কোড লিখবো। ডানপাশের solution explorer থেকে snake.cs ক্লাস টির উপর ডাবল ক্লিক করি তাহলে snake.cs এর কোড উইন্ডো ওপেন। এই কোড উইন্ডো এর সব কোড ডিলিট করে দেই ও নিচের কোড গুলো পেস্ট করি।
</div>
<div>
<pre>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace snake_game
{
public class snake
{
// Decliar variable
private Rectangle[] snakeRec;
private SolidBrush brush;
private int x, y, width, height;
public Rectangle[] SnakeRec
{
get { return snakeRec; }

}

////////////////////////////////

public snake()
{
snakeRec = new Rectangle[3];
brush = new SolidBrush(Color.Red);

x = 20;
y = 0;
width = 10;
height = 10;
for (int i = 0; i < snakeRec.Length; i++)
{
snakeRec[i] = new Rectangle(x, y, width, height);
x -= 10;
}
}
public void drawSnake(Graphics paper)
{
foreach (Rectangle rec in snakeRec)
{
paper.FillRectangle(brush, rec);
}
}

public void drawSnake()
{
for (int i = snakeRec.Length - 1; i > 0; i--)
{
snakeRec[i] = snakeRec[i - 1];
}
}
public void moveDown()
{
drawSnake();>
snakeRec[0].Y += 10;
}
public void moveUp()
{
drawSnake();
snakeRec[0].Y -= 10;
}
public void moveLeft()
{</div>
drawSnake();
snakeRec[0].X -= 10;
}
public void moveRight()
{
drawSnake();
snakeRec[0].X += 10;
}
public void growSnake()
{
List<Rectangle> rec = snakeRec.ToList();
rec.Add(new Rectangle(snakeRec[snakeRec.Length-1].X,snakeRec[snakeRec.Length-1].Y,width,height));
snakeRec = rec.ToArray();

}
}
}
এখন Ctrl+S প্রেস করে সেভ করি। একই ভাবে Food.cs ওপেন করে নিচের কোড গুলো পেস্ট করি।
</div>
<div>using System;</div>
<div>using System.Collections.Generic;</div>
<div>using System.Linq;</div>
<div>using System.Text;</div>
<div>using System.Drawing;</div>
<div></div>
<div>namespace snake_game</div>
<div>{</div>
<div>    public class Food</div>
<div>    {</div>
<div>        private int x, y, width, height;</div>
<div>        private SolidBrush brush;</div>
<div>        public Rectangle foodRec;</div>
<div></div>
<div>        public Food(Random randFood)</div>
<div>        {</div>
<div>            x = randFood.Next(0, 29) * 10;</div>
<div>            y = randFood.Next(0, 29) * 10;</div>
<div>            brush = new SolidBrush(Color.Red);</div>
<div>            width = 10;</div>
<div>            height=10;</div>
<div>            foodRec = new Rectangle(x, y, width, height);</div>
<div>}</div>
<div>        public void foodlocation(Random randFood)</div>
<div>        {</div>
<div>            x = randFood.Next(0, 29) * 10;</div>
<div>            y = randFood.Next(0, 29) * 10;</div>
<div></div>
<div>        }</div>
<div></div>
<div></div>
<div>        public void drawFood(Graphics paper)</div>
<div>        {</div>
<div>            foodRec.X = x;</div>
<div>            foodRec.Y = y;</div>
<div>            paper.FillRectangle(brush,foodRec);</div>
<div>        }</div>
<div></div>
<div>    }</div>
<div>}</div>
<div>
এখন Ctrl+S প্রেস করে সেভ করি। যাক আমাদের ক্লাস গুলো তৈরি হয়ে গেছে। এখন আমরা মুল ফর্ম এ কোড লিখবো। চলুন শুরু করে দেই মুল ফর্ম এ কোডিং। এখন ফর্ম এর কোড ভিউ এর মধ্যে
</div>
<div>        public Form1()</div>
<div>        {</div>
<div>            InitializeComponent();</div>
<div>        }</div>

<div>এর InitializeComponent(); এর নিচে এবং } এই চিনহের উপরে food = new Food(randFood); এই কোড টুকু লিখি।</div>
<div>এখন</div>

<div>        public Form1()</div>
<div>        {</div>
<div>            InitializeComponent();</div>
<div>            food = new Food(randFood);</div>
<div>        }</div>
<div>
এর } এই চিনহের নিচে, নিচের দেয়া কোড গুলো লিখি
</div>
<div>        Random randFood = new Random();</div>
<div>        Graphics paper;</div>
<div>        snake snakes = new snake();</div>
<div>        Food food;</div>
<div>        bool left = false;</div>
<div>        bool right = false;</div>
<div>        bool up = false;</div>
<div>        bool down = false;</div>
<div>        int score = 0;</div>
<div>        public void collision()</div>
<div>        {</div>
<div>            for (int i = 1; i < snakes.SnakeRec.Length; i++)</div>
<div>            {</div>
<div>                if (snakes.SnakeRec[0].IntersectsWith(snakes.SnakeRec[1]))</div>
<div>                {</div>
<div>                    restart();</div>
<div>                }</div>
<div>            }</div>
<div>            if (snakes.SnakeRec[0].X < 0 || snakes.SnakeRec[0].X > 290)</div>
<div>            {</div>
<div>                restart();</div>
<div></div>
<div>            }</div>
<div>            if (snakes.SnakeRec[0].Y < 0 || snakes.SnakeRec[0].Y > 290)</div>
<div>            {</div>
<div>                restart();</div>
<div>            }</div>
<div>        }</div>
<div></div>
<div>        public void restart()</div>
<div>        {</div>
<div>            timer1.Enabled = false;</div>
<div>
            MessageBox.Show("গেমটি ওভার হয়েছে।");
            label2.Text = "0";
            score = 0;
            label3.Text = "গেমটি খেলতে স্পেসবার প্রেস করুন।";
            snakes = new snake();
        }
এখন আমরা ফর্ম এর কিছু বিশেষ ইভেন্ট এ কোড লিখবো। ফর্মটিকে সিলেক্ট করি এবং এর প্রোপার্টিজ এ যাই এবং প্রোপার্টিজ উইন্ডোতে এই চিনহে ক্লিক করি তাহলে ফর্ম ইভেন্ট চালু হবে।
এখন নিচের ছবিতে লাল দাগ দেয়া KeyDown ও Paint ইভেন্ট গুলোর পাশে ডাবল  ক্লিক করি।

এখন ফর্ম এর কোড উইন্ডোতে গিয়ে

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
        }
এই দুই ব্রাকেট এর মধ্যে নিচের কোডগুলো লিখি।
</div>
<div>            if (e.KeyData == Keys.Space)</div>
<div>            {</div>
<div>                timer1.Enabled = true;</div>
<div>                label3.Text = "";</div>
<div>                down = false;</div>
<div>                up = false;</div>
<div>                left = false;</div>
<div>                right = true;</div>
<div>            }</div>
<div>            if (e.KeyData == Keys.Down && up == false)</div>
<div>            {</div>
<div>                down = true;</div>
<div>                up = false;</div>
<div>                right = false;</div>
<div>                left = false;</div>
<div>            }</div>
<div>            if (e.KeyData == Keys.Up && down == false)</div>
<div>            {</div>
<div>                down = false;</div>
<div>                up = true;</div>
<div>                right = false;</div>
<div>                left = false;</div>
<div>            }</div>
<div>            if (e.KeyData == Keys.Left && right == false)</div>
<div>            {</div>
<div>                down = false;</div>
<div>                up = false;</div>
<div>                right = false;</div>
<div>                left = true;</div>
<div>            }</div>
<div>            if (e.KeyData == Keys.Right && left == false)</div>
<div>            {</div>
<div>                down = false;</div>
<div>                up = false;</div>
<div>                right = true;</div>
<div>                left = false;</div>
<div>            }</div>
<div>
আবার কোড উইন্ডো এর মধ্যে
</div>
<div>        private void Form1_Paint(object sender, PaintEventArgs e)</div>
<div>        {</div>
<div>        }</div>
<div>
এই দুই ব্রাকেট এর মধ্যে নিচের কোডগুলো লিখি।
            paper = e.Graphics;
            food.drawFood(paper);
            snakes.drawSnake(paper);
এখন timer1 এর উপর ডাবল ক্লিক করে timer1_Tick ইভেন্ট এর মধ্যে নিচের কোড গুলো লিখি
</div>
<div>            label2.Text = Convert.ToString(score);</div>
<div>            if (down) { snakes.moveDown(); }</div>
<div>            if (up) { snakes.moveUp(); }</div>
<div>            if (right) { snakes.moveRight(); }</div>
<div>            if (left) { snakes.moveLeft(); }</div>
<div>            this.Invalidate();</div>
<div>            collision();</div>
<div>            for (int i = 0; i < snakes.SnakeRec.Length; i++)</div>
<div>            {</div>
<div>                if (snakes.SnakeRec[i].IntersectsWith(food.foodRec))</div>
<div>                {</div>
<div>                    score += 1;</div>
<div>                    snakes.growSnake();</div>
<div>                    food.foodlocation(randFood);</div>
<div>                }</div>
<div>            }</div>
<div>

এখন F5 বাটন টি চেপে প্রোগ্রামটি রান করুন এবং গেমটি মজা করে খেলুন আর আমার জন্য দোয়া করবেন।

সোর্স কোডটি ডাউনলোড করুন।

আর যদি বুজতে না পারেন তবে ফেসবুক। যত দ্রুত সম্ভব আপনার উত্তর দেয়ার চেষ্টা করবো।
প্রথম প্রকাশিত  এইখানে

Level 2

আমি ইসলাম আমিনুল। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 32 টি টিউন ও 27 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 4 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

ধন্যবাদ

প্রিয় টিউনার,

আপনার টিউন যেহেতু প্রোগ্রামিং সংক্রান্ত টিউন ও টিউনে কোডের ব্যবহার রয়েছে তাই বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজের কোড যেমন HTML, CSS, JS, PHP ইত্যাদি কোড সুন্দর ও সঠিক ভাবে দেখাতে টেকটিউনসের রয়েছে নিজেস্ব “কোড হাইলাইটার”। টেকটিউনস কোড হাইলাইটার ব্যবহার করার জন্য Code Escape করার প্রয়োজন নেই।

টেকটিউনসের “কোড হাইলাইটার” কিভাবে ব্যবহার করতে হয় তা জানতে https://www.techtunes.io/web-design/tune-id/77692/ এই টিউনটি দেখুন।

নিয়মিত টিউন করুন ধন্যবাদ আপনাকে।

শেয়ার করার জন্য ধন্যবাদ।

প্রিয় টিউনার,

আপনার টিউনটি টেকটিউনস চেইন টিউন হিসেবে অন্তর্ভুক্ত করা হয়েছে। অভিনন্দন আপনাকে!

টেকটিউনসে চেইন টিউন কীভাবে প্রক্রিয়া হয় তা জানতে টেকটিউনস সজিপ্র এর https://www.techtunes.io/faq “চেইন টিউন” অংশ দেখুন।

নিয়মিত চেইন টিউন করুন। এখন থেকে আপনার নতুন করা চেইন টিউন গুলো টেকটিউনস থেকে চেইন এ যুক্ত করা হবে। চেইন টিউনে যুক্ত হবার ফলে চেইনের প্রতিটি পর্ব একসাথে থাকবে।

চেইনে নতুন পর্ব যুক্ত হলে তা টেকটিউনসের প্রথম পাতায় দেখা যাবে এবং “সকল চেইন টিউনস” https://www.techtunes.io/chain-tunes/ পাতায় চেইন টিউনটি যুক্ত হবে।

নিয়মিত চেইন টিউন করে নতুন নতুন টিউন আপনার চেইনে যুক্ত করুন এবং অসম্পূর্ণ না রেখে আপনার চেইন টিউনে নিয়মিত পূর্ণাঙ্গ রূপ দিন। ধন্যবাদ আপনাকে।

মেতে থাকুন প্রযুক্তির সুরে আর নিয়মিত করুন চেইন টিউন!