Logo ভাষায় গেম ডেভেলপমেন্ট একটি চমৎকার শিক্ষামূলক প্রক্রিয়া, যেখানে Turtle Graphics এবং Basic Programming Concepts ব্যবহার করে সহজ গেম তৈরি করা যায়। যদিও Logo সাধারণত শিক্ষার্থীদের জন্য একটি প্রোগ্রামিং ভাষা হিসেবে ব্যবহৃত হয়, তবুও এটি গেম ডেভেলপমেন্টের জন্য উপযুক্ত একটি প্ল্যাটফর্ম হতে পারে।
Logo ভাষায় গেম ডেভেলপমেন্টের জন্য আমরা সাধারণত Control Structures (যেমন IF-ELSE, LOOPs), User Input, Graphics, এবং Timing ফিচার ব্যবহার করি। এখানে আমরা Logo ভাষায় গেম ডেভেলপমেন্টের কিছু মৌলিক ধারণা এবং উদাহরণ আলোচনা করবো।
1. Basic Concepts in Game Development (গেম ডেভেলপমেন্টের মৌলিক ধারণা)
Logo ভাষায় গেম তৈরি করার জন্য কিছু মৌলিক ধারণা আছে:
- Graphics: Turtle Graphics ব্যবহার করে গেমের গ্রাফিক্স তৈরি করা হয় (যেমন, চরিত্র, প্রতিপক্ষ, বাউন্ডারি ইত্যাদি)।
- Control Flow: গেমের লজিক তৈরি করতে IF-ELSE, REPEAT এবং WAIT কমান্ড ব্যবহার করা হয়।
- User Input: ব্যবহারকারীর ইনপুট নেওয়ার জন্য ASK এবং WAIT ব্যবহার করা হয়।
- Collision Detection: গেমের অবজেক্টের মধ্যে সংঘর্ষ সনাক্ত করতে IF শর্ত ব্যবহার করা হয়।
2. Simple Logo Game (সহজ Logo গেম)
এটি একটি সহজ গেম যেখানে একটি টার্টল স্ক্রীনে চলছে এবং তাকে একটি নির্দিষ্ট লক্ষ্য এড়িয়ে যেতে বলা হচ্ছে।
কোড (Avoid the Obstacle Game):
TO avoidObstacle
CLEARSCREEN ; স্ক্রীন পরিষ্কার
MAKE "score 0
MAKE "x 0
MAKE "y 0
SETHEADING 0 ; টার্টল শুরু হবে ০ ডিগ্রী থেকে
PENDOWN
REPEAT 100 [
IF :x > 200 [STOP] ; স্ক্রীনের শেষের দিকে পৌঁছালে গেম থামবে
IF :x < -200 [STOP] ; স্ক্রীনের বাম দিকে পৌঁছালে গেম থামবে
IF :y > 150 [STOP] ; স্ক্রীনের উপরের দিকে পৌঁছালে গেম থামবে
IF :y < -150 [STOP] ; স্ক্রীনের নিচে পৌঁছালে গেম থামবে
FORWARD 10 ; টার্টলকে এগিয়ে যেতে বলছে
MAKE "x :x + 10
MAKE "y :y + 10
WAIT 100 ; কিছু সময়ের জন্য অপেক্ষা
]
END
avoidObstacleএখানে:
- CLEARSCREEN: গেম শুরু করার আগে স্ক্রীন পরিষ্কার হয়।
- MAKE "score 0: স্কোর ভেরিয়েবল তৈরি করা হয়েছে, যাতে গেমের স্কোর ট্র্যাক করা যায়।
- IF শর্তগুলি গেমের আউটপুট সঠিকভাবে চালানোর জন্য ব্যবহৃত হয়।
- WAIT 100: গেমের গতি ধীর করার জন্য অপেক্ষা করা হয়।
3. Simple Pong Game (সহজ পং গেম)
এটি একটি মৌলিক Pong গেম যেখানে একটি বল এবং দুটি Paddle থাকবে। বলটি প্যাডেলগুলির মধ্যে চলে যাবে এবং লক্ষ্য হল তাকে স্ক্রীনের বাউন্ডারির বাইরে না পাঠানো।
কোড (Pong Game):
TO pong
CLEARSCREEN
MAKE "ballX 0
MAKE "ballY 0
MAKE "paddle1Y -50
MAKE "paddle2Y 50
MAKE "ballSpeedX 2
MAKE "ballSpeedY 2
REPEAT 1000 [
CLEARSCREEN
; বলের পজিশন আপডেট করা
MAKE "ballX :ballX + :ballSpeedX
MAKE "ballY :ballY + :ballSpeedY
; বলের প্যাডেল এ যোগাযোগ
IF :ballY > :paddle2Y - 10 AND :ballY < :paddle2Y + 10 AND :ballX > 90 [
MAKE "ballSpeedX :ballSpeedX * -1
]
IF :ballY < :paddle1Y + 10 AND :ballY > :paddle1Y - 10 AND :ballX < -90 [
MAKE "ballSpeedX :ballSpeedX * -1
]
; বলের বাউন্ডারি চেক করা
IF :ballY > 100 OR :ballY < -100 [
MAKE "ballSpeedY :ballSpeedY * -1
]
; বল আঁকানো
SETHEADING 0
PENUP
SETXY :ballX :ballY
PENDOWN
CIRCLE 10
; প্যাডেল আঁকানো
SETXY -100 :paddle1Y
REPEAT 4 [FORWARD 20 RIGHT 90]
SETXY 100 :paddle2Y
REPEAT 4 [FORWARD 20 RIGHT 90]
WAIT 50
]
END
pongএখানে:
- MAKE "ballX 0 এবং MAKE "ballY 0: বলের প্রাথমিক অবস্থান (স্ক্রীনের মাঝখানে) সেট করা হয়েছে।
- MAKE "ballSpeedX 2 এবং MAKE "ballSpeedY 2: বলের গতির পরিবর্তন করা হয়েছে।
- SETXY: টার্টলকে একটি নির্দিষ্ট অবস্থানে স্থানান্তরিত করার জন্য ব্যবহৃত হয়।
- REPEAT 4: প্যাডেল তৈরি করতে প্যাডেলের চারটি সাইড আঁকানো হয়।
4. User Input in Logo Games (গেমে ব্যবহারকারীর ইনপুট)
Logo ভাষায় গেমের মধ্যে ব্যবহারকারীর ইনপুট নেওয়ার জন্য ASK কমান্ড ব্যবহার করা হয়, যা ব্যবহারকারীকে কিছু টাইপ করতে বলবে।
কোড (User Input Example):
TO userInputExample
ASK "What's your name? [PRINT "Hello, :answer]
END
userInputExampleএখানে:
- ASK "What's your name?: এটি ব্যবহারকারীর নাম চাওয়ার জন্য একটি ইনপুট নেবে এবং :answer দিয়ে সেই নামটি ব্যবহার করবে।
5. Simple Maze Game (সহজ ম্যাজ গেম)
এটি একটি ম্যাজ গেম, যেখানে একটি টার্টলকে নির্দিষ্ট পথে চলতে হবে এবং একটি গন্তব্যে পৌঁছাতে হবে।
কোড (Maze Game):
TO maze
CLEARSCREEN
; কোডের লজিক অনুযায়ী গেমের ম্যাজ আঁকানো হবে
; টার্টলটি চলবে এবং গন্তব্যে পৌঁছানোর জন্য নির্দেশনা দেওয়া হবে
END
mazeএখানে:
- আপনি ম্যাজ আঁকতে REPEAT, IF শর্ত ব্যবহার করতে পারেন।
- SETXY এর মাধ্যমে টার্টলকে গন্তব্যে পৌঁছানোর জন্য পথ নির্দেশনা দেওয়া হবে।
সারসংক্ষেপ:
Logo ভাষায় গেম ডেভেলপমেন্ট একটি চমৎকার শিক্ষা এবং প্রোগ্রামিং অনুশীলন। আপনি Turtle Graphics ব্যবহার করে গেমের গ্রাফিক্স তৈরি করতে পারেন এবং Control Structures (যেমন IF-ELSE, REPEAT) এবং User Input কমান্ড ব্যবহার করে গেমের লজিক তৈরি করতে পারেন। Collision Detection, Paddle এবং Ball Movement এর মতো গেম উপাদান তৈরি করতে Mathematics এবং Logo Commands ব্যবহার করা হয়। Basic Pong, Maze Games, এবং Animation গেমগুলো Logo ভাষায় তৈরি করা যেতে পারে, যা প্রোগ্রামিং শেখার জন্য খুবই কার্যকর।
Turtle Graphics ব্যবহার করে সহজ Turtle Games তৈরি করা অত্যন্ত মজার এবং শিক্ষামূলক হতে পারে। Turtle Graphics এর মাধ্যমে অ্যানিমেশন এবং গ্রাফিক্স তৈরি করা সহজ, যা গেম ডেভেলপমেন্টে সহায়ক। এখানে আমি কিছু সহজ Turtle Games তৈরির উদাহরণ দেব, যা আপনাকে গেম তৈরির মৌলিক ধারণা শেখাবে।
1. Catch the Turtle Game (টার্টল ধরো গেম)
এই গেমে, টার্টল এক জায়গা থেকে অন্য জায়গায় চলতে থাকবে এবং খেলোয়াড়ের কাজ হবে টার্টলকে ক্লিক করে ধরতে।
কোড:
TO catchTheTurtle
CLEARSCREEN
MAKE "x RANDOM 200
MAKE "y RANDOM 200
SETHEADING RANDOM 360
PENUP
SETPOSITION :x :y
PENDOWN
REPEAT 20 [
IF (ABS :x < 10 AND ABS :y < 10) [
PRINT "You caught the turtle!"
STOP
]
FORWARD 10
RIGHT 10
MAKE "x :x + 10
MAKE "y :y + 10
]
END
catchTheTurtleএখানে:
- RANDOM কমান্ড দিয়ে টার্টলের শুরু অবস্থান এলোমেলোভাবে সেট করা হচ্ছে।
- FORWARD 10 এবং RIGHT 10 কমান্ড দ্বারা টার্টল প্রতিবার একটি নতুন অবস্থানে যাবে।
- যদি টার্টল একটি নির্দিষ্ট অবস্থানে পৌঁছে, তখন "You caught the turtle!" মেসেজটি প্রদর্শিত হবে।
2. Move the Turtle Game (টার্টল চালাও গেম)
এই গেমে, টার্টলকে ব্যবহারকারী কীবোর্ডের মাধ্যমে পরিচালনা করতে পারে। টার্টল স্ক্রীনের চারপাশে চলতে থাকবে এবং খেলোয়াড় তাকে নির্দিষ্ট উদ্দেশ্য অনুযায়ী পরিচালনা করবে।
কোড:
TO moveTheTurtle
CLEARSCREEN
SETHEADING 0
PENUP
SETPOSITION 0 0
PENDOWN
REPEAT [
IF (KEY? "Up) [FORWARD 10] ; উপরের দিক দিয়ে চালানো হবে
IF (KEY? "Down) [BACKWARD 10] ; নিচের দিকে চালানো হবে
IF (KEY? "Left) [LEFT 10] ; বাম দিকে ঘুরবে
IF (KEY? "Right) [RIGHT 10] ; ডান দিকে ঘুরবে
]
END
moveTheTurtleএখানে:
- KEY? "Up, KEY? "Down, KEY? "Left, এবং KEY? "Right এর মাধ্যমে ব্যবহারকারী কীবোর্ডের মাধ্যমে টার্টলকে বিভিন্ন দিকে পরিচালনা করতে পারে।
- FORWARD 10, BACKWARD 10, LEFT 10, এবং RIGHT 10 কমান্ড দ্বারা টার্টল চলতে থাকবে।
3. Turtle Race Game (টার্টল রেস গেম)
এই গেমে, দুইটি টার্টল রেস করবে এবং খেলোয়াড়রা দেখবে কে আগে পৌঁছাবে।
কোড:
TO turtleRace
CLEARSCREEN
MAKE "turtle1 0
MAKE "turtle2 0
PENUP
SETPOSITION -200 50
PENDOWN
REPEAT 100 [
MAKE "turtle1 :turtle1 + RANDOM 10
MAKE "turtle2 :turtle2 + RANDOM 10
SETPOSITION :turtle1 50
SETPOSITION :turtle2 100
IF :turtle1 > 200 [
PRINT "Turtle 1 wins!"
STOP
]
IF :turtle2 > 200 [
PRINT "Turtle 2 wins!"
STOP
]
]
END
turtleRaceএখানে:
- RANDOM 10 ব্যবহার করে টার্টলগুলো রেসে চলতে থাকবে। প্রতিটি টার্টল প্রতি স্টেপে এলোমেলোভাবে কিছু দূরত্ব পার করবে।
- IF :turtle1 > 200 এবং IF :turtle2 > 200 শর্ত দিয়ে রেসের ফলাফল নির্ধারণ করা হবে। যদি কোনো টার্টল ২০০ পিক্সেল পার করে যায়, সে জিতবে।
4. Bounce the Ball Game (বাউন্সিং বল গেম)
এই গেমে একটি বল টার্টল দ্বারা বাউন্স হবে এবং খেলোয়াড়ের কাজ হবে সেটিকে স্ক্রীনে ধরে রাখতে।
কোড:
TO bounceTheBall
CLEARSCREEN
MAKE "x 0
MAKE "y 0
MAKE "dx 5
MAKE "dy 5
REPEAT [
CLEARSCREEN
SETPOSITION :x :y
CIRCLE 10
MAKE "x :x + :dx
MAKE "y :y + :dy
IF :x > 200 [MAKE "dx -5] ; স্ক্রীন প্রান্তে পৌঁছালে বাউন্স করবে
IF :x < -200 [MAKE "dx 5]
IF :y > 200 [MAKE "dy -5]
IF :y < -200 [MAKE "dy 5]
]
END
bounceTheBallএখানে:
- MAKE "dx 5 এবং MAKE "dy 5 বলের গতির জন্য ব্যবহার করা হচ্ছে।
- IF :x > 200 এবং IF :y > 200 শর্ত দিয়ে বলের বাউন্সিং তৈরি করা হচ্ছে, যাতে বল স্ক্রীনের সীমায় পৌঁছালে উল্টো দিকে চলে যায়।
সারসংক্ষেপ:
Turtle Graphics ব্যবহার করে Simple Turtle Games তৈরি করা সহজ এবং আনন্দদায়ক। উপরের উদাহরণগুলো দেখায় কিভাবে টার্টলকে পরিচালনা করা যায় এবং বিভিন্ন গেম তৈরি করা যায়। আপনি Recursion, Loops, এবং Keyboard Input এর মতো ধারণা ব্যবহার করে আরও উন্নত গেম তৈরি করতে পারেন। এই ধরনের গেমগুলি কেবল মজার নয়, এটি শিক্ষার্থীদের প্রোগ্রামিংয়ের মৌলিক ধারণাগুলো শেখাতেও সাহায্য করে।
Turtle Movement এবং Object Interaction Logo ভাষার মূল বৈশিষ্ট্য। Turtle হল একটি গ্রাফিক্যাল ক্যানভাসে যে সরঞ্জামটি (symbolic representation) হিসেবে কাজ করে, এবং এটি ব্যবহার করে গ্রাফিক্স বা অ্যানিমেশন তৈরি করা হয়। Turtle Movement এবং Object Interaction এর মাধ্যমে আপনি টার্টলকে বিভিন্ন দিক দিয়ে পরিচালনা করতে পারেন এবং টার্টলের সাথে অন্যান্য বস্তু (objects) এর ইন্টারঅ্যাকশন ঘটাতে পারেন।
Logo ভাষায় টার্টল মুভমেন্ট এবং অবজেক্ট ইন্টারঅ্যাকশন বিষয়ে কিছু গুরুত্বপূর্ণ কৌশল এবং উদাহরণ নিচে দেওয়া হলো।
1. Turtle Movement (টার্টল চলাচল):
Turtle Movement বা টার্টলের চলাচল Logo ভাষায় একাধিক কমান্ডের মাধ্যমে নিয়ন্ত্রণ করা হয়। এই কমান্ডগুলো ব্যবহারের মাধ্যমে আপনি টার্টলকে নির্দিষ্ট অবস্থানে নিয়ে যেতে পারেন, ঘুরাতে পারেন এবং বিভিন্ন পথ অঙ্কন করতে পারেন।
Turtle Move Forward (এগিয়ে যাওয়া):
FORWARD কমান্ড ব্যবহার করে টার্টলকে নির্দিষ্ট দূরত্বে এগিয়ে নেওয়া যায়।
উদাহরণ:
FORWARD 100এটি টার্টলকে ১০০ পিক্সেল এগিয়ে নিয়ে যাবে।
Turtle Move Backward (পিছনে যাওয়া):
BACKWARD কমান্ড ব্যবহার করে টার্টলকে পিছনে নিয়ে যাওয়া যায়।
উদাহরণ:
BACKWARD 50এটি টার্টলকে ৫০ পিক্সেল পিছনে নিয়ে যাবে।
Turtle Turn Right (ডান দিকে ঘোরানো):
RIGHT কমান্ডের মাধ্যমে টার্টলকে নির্দিষ্ট কোণে ডান দিকে ঘোরানো যায়।
উদাহরণ:
RIGHT 90এটি টার্টলকে ৯০ ডিগ্রি ডান দিকে ঘুরিয়ে দেবে।
Turtle Turn Left (বাম দিকে ঘোরানো):
LEFT কমান্ডের মাধ্যমে টার্টলকে নির্দিষ্ট কোণে বাম দিকে ঘোরানো যায়।
উদাহরণ:
LEFT 45এটি টার্টলকে ৪৫ ডিগ্রি বাম দিকে ঘুরিয়ে দেবে।
Turtle Go to Position (অবস্থান পরিবর্তন করা):
SETHEADING এবং SETXY কমান্ড ব্যবহার করে আপনি টার্টলকে নির্দিষ্ট অবস্থানে নিয়ে যেতে পারেন।
উদাহরণ:
SETHEADING 90 ; টার্টলকে ৯০ ডিগ্রি অবস্থানে ঘুরাবে (ডান দিকে)
SETXY 50 50 ; টার্টলকে (৫০, ৫০) পয়েন্টে নিয়ে যাবে2. Object Interaction (অবজেক্ট ইন্টারঅ্যাকশন):
Logo ভাষায় অবজেক্ট ইন্টারঅ্যাকশন মানে হচ্ছে টার্টল বা অন্যান্য গ্রাফিক্যাল অবজেক্টের মধ্যে ইন্টারঅ্যাকশন তৈরি করা। এটি সাধারণত মুভমেন্ট, পরিবর্তন, গতি এবং অন্য অবজেক্টের সাথে সম্পর্ক নিয়ে কাজ করে।
Object Interaction with Multiple Turtles (একাধিক টার্টল):
Logo ভাষায় একাধিক টার্টল থাকতে পারে এবং তারা একে অপরের সাথে ইন্টারঅ্যাক্ট করতে পারে। উদাহরণস্বরূপ, আপনি একটি টার্টলকে অন্য একটি টার্টলের কাছে যেতে নির্দেশ দিতে পারেন।
উদাহরণ (Multiple Turtles Interaction):
TO turtle1
SETCOLOR "red
FORWARD 50
LEFT 90
FORWARD 50
END
TO turtle2
SETCOLOR "blue
FORWARD 100
LEFT 90
FORWARD 100
END
turtle1
turtle2এখানে:
- প্রথম টার্টল red রঙে ৫০ পিক্সেল এগিয়ে যাবে এবং ৯০ ডিগ্রি বাঁয়ে ঘুরে আরো ৫০ পিক্সেল এগিয়ে যাবে।
- দ্বিতীয় টার্টল blue রঙে ১০০ পিক্সেল এগিয়ে যাবে এবং ৯০ ডিগ্রি বাঁয়ে ঘুরে আরো ১০০ পিক্সেল এগিয়ে যাবে।
এটি একাধিক টার্টলের চলাচল এবং তাদের ইন্টারঅ্যাকশন নির্দেশ করবে।
Object Interaction with Shapes (আকৃতির সাথে ইন্টারঅ্যাকশন):
Logo ভাষায় আপনি Shapes এবং Objects এর সাথে ইন্টারঅ্যাকশন করতে পারেন। যেমন আপনি বিভিন্ন আকৃতির সাথে টার্টলের মুভমেন্ট এবং সেগুলির অবস্থান নিয়ন্ত্রণ করতে পারেন।
উদাহরণ (Shape Interaction):
TO circle :radius
REPEAT 360 [
FORWARD :radius
RIGHT 1
]
END
TO square :size
REPEAT 4 [
FORWARD :size
RIGHT 90
]
END
circle 50
square 100এখানে:
- circle এবং square ফাংশন দুইটি আকৃতি আঁকবে এবং একে অপরের সাথে ইন্টারঅ্যাক্ট করবে (তারা একে অপরকে অবরোধ করতে পারে বা কিছু ফাংশনে একে অপরের সাথে সম্পর্ক তৈরি করতে পারে)।
3. Event-Driven Interaction (ইভেন্ট-চালিত ইন্টারঅ্যাকশন):
Logo ভাষায় টার্টল বা অবজেক্টের আচরণ ইভেন্টের ভিত্তিতে পরিবর্তিত হতে পারে, যেমন আপনি একটি বিশেষ কমান্ড চালালে টার্টল একটি নির্দিষ্ট ইন্টারঅ্যাকশন করবে।
উদাহরণ (Event Interaction):
TO moveTurtle
IF :key = "up [
FORWARD 50
]
IF :key = "down [
BACKWARD 50
]
ENDএখানে:
- moveTurtle ফাংশনটি একটি ইভেন্টের ভিত্তিতে টার্টলকে মুভ করতে বলে (যদি কীবোর্ডের
upবাdownকী চাপা হয়, টার্টল সেই অনুযায়ী এগিয়ে যাবে বা পিছনে যাবে)।
4. Object Rotation and Transformation (অবজেক্ট রোটেশন এবং রূপান্তর):
Logo ভাষায় আপনি Objects বা Shapes ঘুরাতে এবং রূপান্তর করতে পারেন। যেমন একটি আকৃতিকে ঘুরানো বা মাপ পরিবর্তন করা।
উদাহরণ (Object Rotation):
TO rotateObject :size :angle
REPEAT 4 [
FORWARD :size
RIGHT :angle
]
END
rotateObject 100 45এখানে:
- rotateObject ফাংশনটি একটি বর্গ আঁকবে এবং তারপর সেই বর্গটি ৪৫ ডিগ্রি ঘুরিয়ে দেখাবে।
সারসংক্ষেপ:
Turtle Movement এবং Object Interaction Logo ভাষায় বিভিন্ন গ্রাফিক্যাল এবং অ্যানিমেটেড ডিজাইন তৈরি করার জন্য ব্যবহার করা হয়। টার্টল মুভমেন্টের জন্য FORWARD, BACKWARD, LEFT, RIGHT, এবং SETHEADING কমান্ড ব্যবহার করা হয়। Object Interaction এর মাধ্যমে আপনি একাধিক টার্টল বা অবজেক্টের মুভমেন্ট এবং আচরণ নিয়ন্ত্রণ করতে পারেন। এছাড়া, Event-Driven Interaction এবং Object Rotation and Transformation ব্যবহার করে আরো উন্নত ইন্টারঅ্যাকশন তৈরি করা সম্ভব।
Logo ভাষায় Game Loops এবং Player Input ব্যবহারের মাধ্যমে আপনি একটি ইন্টারঅ্যাকটিভ গেম তৈরি করতে পারেন যেখানে প্লেয়ার ইনপুট নিতে পারবে এবং গেম চলতে থাকবে। গেম লুপ এবং প্লেয়ার ইনপুটের মধ্যে সঠিক যোগাযোগ নিশ্চিত করার মাধ্যমে, গেমের কার্যক্রম ধারাবাহিকভাবে চালানো সম্ভব হয়।
1. Game Loop (গেম লুপ):
Game Loop হল গেমের মস্তিষ্ক, যা গেমের সমস্ত কার্যক্রম (যেমন: প্লেয়ার মোশন, এনিমেশন, ইভেন্ট হ্যান্ডলিং) নিয়ন্ত্রণ করে। গেম লুপ সাধারণত একটি infinite loop হয় যা গেম চলাকালীন চলতে থাকে এবং সময়ের সাথে সাথে গেমের অবস্থা আপডেট করে।
Logo ভাষায় গেম লুপ তৈরির জন্য একটি REPEAT কমান্ড ব্যবহার করা যেতে পারে যা নির্দিষ্ট সময় অন্তর গেমের প্রতিটি স্টেপ চালায়। এতে গেমের স্থিতি নিয়মিত আপডেট হয়, প্লেয়ার ইনপুট নেওয়া হয়, এবং গেমের লজিক চলে।
গেম লুপের সাধারণ কাঠামো:
TO gameLoop
REPEAT UNTIL [gameOver?] [ ; যতক্ষণ না গেম শেষ হয়, গেম চলতে থাকবে
updateGameState ; গেমের অবস্থা আপডেট করা
playerInput ; প্লেয়ার ইনপুট নেয়া
renderGame ; গেমের পরবর্তী স্টেট রেন্ডার করা
]
ENDএখানে:
- updateGameState: গেমের অবস্থা পরিবর্তন করে (যেমন প্লেয়ার এর অবস্থান, স্কোর ইত্যাদি)।
- playerInput: প্লেয়ার থেকে ইনপুট নেয়।
- renderGame: গেমের বর্তমান অবস্থা গ্রাফিক্যালি রেন্ডার করে।
2. Player Input (প্লেয়ার ইনপুট):
Logo ভাষায় প্লেয়ার ইনপুট নেওয়ার জন্য সাধারণভাবে ASK বা WAIT কমান্ড ব্যবহার করা হয়, যা প্লেয়ারকে কোনো কিপ্যাড বা মাউস ইন্টারঅ্যাকশনের মাধ্যমে ইনপুট দেওয়ার সুযোগ দেয়।
Player Input উদাহরণ (বিভিন্ন কী দিয়ে ইনপুট নেওয়া):
গেমে প্লেয়ার ইনপুট নেওয়ার জন্য আপনি ASK বা WAIT কমান্ড ব্যবহার করে প্লেয়ার থেকে কী বোর্ড ইনপুট নিতে পারেন। উদাহরণস্বরূপ, প্লেয়ার যদি 'w', 'a', 's', 'd' কী দিয়ে তার চরিত্র সরাতে চায়, তাহলে তার জন্য একটি ইনপুট সিস্টেম তৈরি করতে পারেন।
TO playerInput
ASK "Move (w = up, a = left, s = down, d = right): " [
IF :answer = "w" [UP] ; 'w' চাপলে উপরে যাবে
IF :answer = "a" [LEFT] ; 'a' চাপলে বাম দিকে যাবে
IF :answer = "s" [DOWN] ; 's' চাপলে নিচে যাবে
IF :answer = "d" [RIGHT] ; 'd' চাপলে ডান দিকে যাবে
]
END
TO UP
; উপরে যাওয়ার কোড
PRINT "Moving Up"
END
TO LEFT
; বাম দিকে যাওয়ার কোড
PRINT "Moving Left"
END
TO DOWN
; নিচে যাওয়ার কোড
PRINT "Moving Down"
END
TO RIGHT
; ডান দিকে যাওয়ার কোড
PRINT "Moving Right"
ENDএখানে:
- ASK "Move (w = up, a = left, s = down, d = right): ": এটি একটি ইনপুট প্রম্পট দেখাবে এবং প্লেয়ারকে ইনপুট দেওয়ার সুযোগ দিবে।
- IF :answer = "w": যদি প্লেয়ার 'w' ইনপুট দেয়, তাহলে
UPফাংশনটি কল হবে। - অন্যান্য কীগুলির জন্যও এইভাবে ইনপুট নিয়ন্ত্রণ করা হবে।
3. Combining Game Loop and Player Input (গেম লুপ এবং প্লেয়ার ইনপুট একসাথে ব্যবহার):
এখন আমরা গেম লুপ এবং প্লেয়ার ইনপুট একসাথে ব্যবহার করে একটি সাধারণ গেম লুপ তৈরি করবো যেখানে প্লেয়ারকে ইনপুট নিতে হবে এবং সেই অনুযায়ী তার চরিত্র চলবে।
TO gameLoop
MAKE "playerX 0 ; প্লেয়ার শুরু হবে x = 0
MAKE "playerY 0 ; প্লেয়ার শুরু হবে y = 0
REPEAT UNTIL [gameOver?] [
playerInput ; প্লেয়ার ইনপুট নেবে
updateGameState ; গেম স্টেট আপডেট হবে
renderGame ; গেম রেন্ডার হবে
]
END
TO playerInput
ASK "Move (w = up, a = left, s = down, d = right): " [
IF :answer = "w" [MAKE "playerY :playerY + 10] ; উপরে যাওয়ার জন্য y মান বাড়াবে
IF :answer = "a" [MAKE "playerX :playerX - 10] ; বামে যাওয়ার জন্য x মান কমাবে
IF :answer = "s" [MAKE "playerY :playerY - 10] ; নিচে যাওয়ার জন্য y মান কমাবে
IF :answer = "d" [MAKE "playerX :playerX + 10] ; ডানে যাওয়ার জন্য x মান বাড়াবে
]
END
TO updateGameState
; গেম স্টেট আপডেট হবে (প্লেয়ার চরিত্রের নতুন অবস্থান)
PRINT "Player position: (" :playerX ", " :playerY ")"
END
TO renderGame
; গেমের গ্রাফিক্যাল রেন্ডারিং হবে (এখানে প্রিন্ট করার মাধ্যমে দেখানো হচ্ছে)
PRINT "Rendering Game State..."
END
TO gameOver?
; গেম শেষের শর্ত চেক
IF :playerX > 100 OR :playerY > 100 [STOP] ; একটি সীমা নির্ধারণ করা
OUTPUT FALSE
ENDএখানে:
- gameLoop: গেমের লজিক পরিচালনা করবে।
- playerInput: প্লেয়ার ইনপুট নিয়ে তার চরিত্রের অবস্থান আপডেট করবে।
- updateGameState: গেমের অবস্থা পরিবর্তন করবে (যেমন প্লেয়ার চরিত্রের অবস্থান)।
- renderGame: গেমের পরবর্তী স্টেট রেন্ডার করবে।
সারসংক্ষেপ:
Logo ভাষায় Game Loops এবং Player Input ব্যবহার করে আপনি একটি ইন্টারঅ্যাকটিভ গেম তৈরি করতে পারেন। Game Loop গেমের অবস্থা আপডেট করার এবং চলমান রাখার জন্য ব্যবহৃত হয়, আর Player Input কমান্ড ব্যবহার করে প্লেয়ারকে কী বোর্ড বা অন্যান্য ইনপুট ডিভাইসের মাধ্যমে গেমের মধ্যে অংশগ্রহণের সুযোগ দেয়া হয়। এর মাধ্যমে আপনি গেমের ক্রিয়াকলাপ নিয়ন্ত্রণ করতে পারেন এবং প্লেয়ারকে ইন্টারঅ্যাকটিভ অভিজ্ঞতা প্রদান করতে পারেন।
Points এবং Score সিস্টেম তৈরি করা একটি সাধারণ এবং কার্যকর প্রক্রিয়া যা গেমস বা অন্যান্য অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। Turtle Graphics ব্যবহার করে আপনি Points এবং Score সিস্টেম তৈরি করতে পারেন, যেখানে পয়েন্ট সংগ্রহ করা হয় এবং স্কোর আপডেট করা হয়। Logo ভাষায় এই সিস্টেম তৈরি করতে আমরা ভেরিয়েবল এবং শর্তাবলী ব্যবহার করব।
নিচে Points এবং Score সিস্টেম তৈরি করার উদাহরণ দেওয়া হলো:
1. Points এবং Score সিস্টেম তৈরি:
আমরা একটি Turtle Graphics গেম তৈরি করবো, যেখানে খেলোয়াড় পয়েন্ট সংগ্রহ করবে এবং স্কোর আপডেট হবে। প্রতিটি পয়েন্ট সংগ্রহের পর স্কোর প্রদর্শিত হবে।
কোড:
MAKE "score 0 ; স্কোর ভেরিয়েবল সেট করা
MAKE "target [50 50] ; লক্ষ্য পয়েন্ট (target) অবস্থান
MAKE "player [0 0] ; খেলোয়াড়ের শুরু অবস্থান
; পয়েন্ট সংগ্রহের জন্য ফাংশন
TO collectPoints
SETPOS :player ; খেলোয়াড়কে তার বর্তমান অবস্থানে নিয়ে যাওয়া
IF :player = :target [ ; যদি খেলোয়াড় লক্ষ্য পয়েন্টের উপর পৌঁছে যায়
MAKE "score :score + 1 ; স্কোর ১ পয়েন্ট বাড়ানো হবে
PRINT :score ; নতুন স্কোর প্রদর্শন
MAKE "target [RANDOM 100 RANDOM 100] ; নতুন লক্ষ্য পয়েন্ট তৈরি
]
END
; খেলোয়াড়ের গতি এবং লক্ষ্য পয়েন্টের প্রতি চলাচল
TO movePlayer :x :y
MAKE "player :x :y ; খেলোয়াড়ের অবস্থান পরিবর্তন
collectPoints ; পয়েন্ট সংগ্রহের জন্য ফাংশন কল
END
; স্কোর দেখানোর জন্য
TO displayScore
PRINT "Score: :score
END
; খেলার শুরু
displayScore
movePlayer 50 50 ; খেলোয়াড়কে লক্ষ্য পয়েন্টের দিকে সরানোব্যাখ্যা:
- score: এটি খেলোয়াড়ের স্কোর ধারণ করার জন্য একটি ভেরিয়েবল।
- target: এটি লক্ষ্য পয়েন্টের অবস্থান ধারণ করে। খেলোয়াড় যখন এই পয়েন্টে পৌঁছাবে, তখন স্কোর আপডেট হবে এবং একটি নতুন লক্ষ্য পয়েন্ট তৈরি হবে।
- player: এটি খেলোয়াড়ের অবস্থান ধারণ করে, যা movePlayer ফাংশনের মাধ্যমে পরিবর্তিত হয়।
- collectPoints: এই ফাংশনটি চেক করে যে খেলোয়াড় লক্ষ্য পয়েন্টে পৌঁছেছে কিনা, এবং যদি পৌঁছে যায় তবে স্কোর এক পয়েন্ট বাড়িয়ে দেয় এবং একটি নতুন লক্ষ্য পয়েন্ট তৈরি করে।
- movePlayer: এটি খেলোয়াড়কে নির্দিষ্ট x, y অবস্থানে সরায় এবং collectPoints ফাংশন কল করে।
- displayScore: এটি স্কোর প্রদর্শন করে।
2. Points এবং Score সিস্টেমের গেম লজিক:
চলমান গেম লজিক:
- খেলোয়াড় একটি লক্ষ্য পয়েন্টে পৌঁছালে, স্কোর বাড়ানো হবে এবং নতুন লক্ষ্য পয়েন্ট তৈরি হবে।
- স্কোরটি নিয়মিতভাবে displayScore ফাংশনের মাধ্যমে আপডেট হবে।
গেম প্লে:
- খেলোয়াড়কে সরানোর জন্য movePlayer ফাংশন ব্যবহার করা হবে, এবং গেমে পয়েন্ট সংগ্রহের জন্য collectPoints ফাংশন কল করা হবে।
- খেলোয়াড়ের অবস্থান এবং লক্ষ্য পয়েন্টের মধ্যে তুলনা করে, যদি তারা একে অপরকে সমান হয় (মানে, খেলোয়াড় লক্ষ্য পয়েন্টে পৌঁছেছে), তাহলে স্কোর বাড়ানো হবে।
3. Additional Features (অতিরিক্ত ফিচার):
Time-based Scoring: আপনি একটি টাইম লিমিট নির্ধারণ করতে পারেন, যেখানে স্কোর নির্ধারণ হবে কতটা দ্রুত খেলোয়াড় লক্ষ্য পয়েন্টে পৌঁছাতে পারে।
উদাহরণ:
MAKE "time 0 REPEAT 100 [ WAIT 1 MAKE "time :time + 1 PRINT "Time: :time ]- Level-up System: স্কোরের ভিত্তিতে একটি লেভেল সিস্টেম যোগ করা যেতে পারে, যেমন স্কোর ১০ হলে একটি নতুন লেভেল শুরু হবে।
সারসংক্ষেপ:
Points এবং Score সিস্টেম তৈরি করতে Turtle Graphics ব্যবহার করলে আপনি খুবই ইন্টারেক্টিভ এবং আকর্ষণীয় গেম তৈরি করতে পারেন। এখানে score এবং target ভেরিয়েবল, collectPoints এবং movePlayer ফাংশন ব্যবহার করে খেলোয়াড়ের স্কোর এবং লক্ষ্য পয়েন্ট সিস্টেম তৈরি করা হয়েছে। এই সিস্টেমটি গেম লজিকের ভিত্তি হিসেবে কাজ করতে পারে এবং বিভিন্ন ফিচারের সাথে স্কোর এবং পয়েন্ট সিস্টেমকে আরো জটিল এবং উন্নত করা যেতে পারে।
Read more