আপনার কি কম্পিউটার গেমের জন্য একটি ধারণা আছে এবং এটি বাস্তব করতে চান? অথবা আপনি কি কখনো ভেবে দেখেছেন কিভাবে কম্পিউটার গেম লেখা হয়? এই উইকিহাও আপনাকে শেখায় কিভাবে পাইথনে তিনটি বেসিক কম্পিউটার গেম লিখতে হয়। আপনার প্রথম গেমটি বিকাশের জন্য আপনাকে পাইথন এবং সাধারণ প্রোগ্রামিং ধারণাগুলির একটি প্রাথমিক বোঝার প্রয়োজন হবে।
ধাপ
3 এর অংশ 1: একটি টেক্সট-ভিত্তিক গেম তৈরি করা
পদক্ষেপ 1. একটি প্রোগ্রামিং ভাষা চয়ন করুন।
সমস্ত প্রোগ্রামিং ল্যাঙ্গুয়েজ আলাদা, তাই আপনার গেমটি লেখার জন্য কোনটি ব্যবহার করবেন তা আপনাকে সিদ্ধান্ত নিতে হবে। প্রতিটি প্রধান প্রোগ্রামিং ল্যাঙ্গুয়েজ টেক্সট ইনপুট, টেক্সট আউটপুট এবং ইফ-কনস্ট্রাকশন (একটি সাধারণ টেক্সট-ভিত্তিক গেমের জন্য আপনার প্রয়োজনীয় প্রধান জিনিস) সমর্থন করে, তাই বিকল্পগুলি অন্বেষণ করুন এবং সিদ্ধান্ত নিন যে আপনি কোনটিতে সবচেয়ে আরামদায়ক এবং শেখার জন্য নিবেদিত। এখানে কিছু বিষয় বিবেচনা করতে হবে:
-
কোন ভাষাটি বেশিরভাগ ক্ষেত্রে ব্যবহৃত হয়?
কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ, যেমন জাভাস্ক্রিপ্ট, ওয়েবের জন্য ব্যবহার করার জন্য ডিজাইন করা হয়েছে, অন্যরা যেমন পাইথন, সি, বা সি ++, কম্পিউটার প্রোগ্রাম চালানোর জন্য ডিজাইন করা হয়েছে। আপনার গেমের জন্য, পাইথন, সি, সি ++ এর মতো বিস্তৃত ব্যবহারের একটি ভাষার জন্য লক্ষ্য রাখুন, অথবা জাভাস্ক্রিপ্ট.
-
এটা শেখা কতটা কঠিন?
যদিও কোনো সাধারণ প্রোগ্রামিং ল্যাঙ্গুয়েজে কিছু অনুশীলনের পরে একটি প্রোগ্রাম লেখা যথেষ্ট সহজ হওয়া উচিত (যেমন, ম্যালবোলজের মতো বিভ্রান্তিকর হওয়ার জন্য বিশেষভাবে ডিজাইন করা হয়নি), কিছু অন্যদের তুলনায় নতুনদের জন্য বন্ধুত্বপূর্ণ। উদাহরণস্বরূপ, জাভা এবং সি এর জন্য আপনাকে পাইথনের মতো কিছু থেকে গভীরতর প্রোগ্রামিং ধারণাগুলি বুঝতে হবে, যা তার আরো সহজলভ্য এবং সোজা-এগিয়ে সিনট্যাক্সের জন্য পরিচিত।
-
আমি এটা কোথায় ব্যবহার করতে পারি?
আপনি সম্ভবত বিভিন্ন সিস্টেমে মানুষ চান, যেমন লিনাক্স, ম্যাক বা উইন্ডোজ, সবাই আপনার গেম খেলতে সক্ষম হবে। সুতরাং আপনার এমন একটি ভাষা ব্যবহার করা উচিত নয় যা শুধুমাত্র কয়েকটি সিস্টেমে সমর্থিত, যেমন ভিজ্যুয়াল বেসিক, যা শুধুমাত্র উইন্ডোজে সমর্থিত।
এই নিবন্ধটি একটি টেক্সট-ভিত্তিক গেমের উদাহরণের জন্য পাইথন ব্যবহার করবে, কিন্তু আপনি অন্য কোন প্রোগ্রামিং ভাষায় ধারণাগুলি কিভাবে করা হয় তা দেখতে পারেন।
পদক্ষেপ 2. আপনার কম্পিউটার প্রস্তুত করুন।
আপনার যে দুটি প্রধান উপাদান প্রয়োজন তা হল একটি টেক্সট এডিটর, যেখানে আপনি আপনার কোড লিখবেন, এবং একটি কম্পাইলার, যা আপনি এটিকে একটি গেমে পরিণত করতে ব্যবহার করবেন। আপনি যদি এই নিবন্ধে উদাহরণটি অনুসরণ করতে চান, তাহলে আপনার পাইথন ইনস্টল করা উচিত এবং প্রোগ্রামগুলি কীভাবে চালানো যায় তা শিখতে হবে। আপনি যদি চান, আপনি একটি IDE (ইন্টিগ্রেটেড ডেস্কটপ এনভায়রনমেন্ট) সেট আপ করতে পারেন, যা একক প্রোগ্রামে এডিটিং, কম্পাইলিং এবং ডিবাগিংকে একত্রিত করে। পাইথনের IDE কে IDLE বলা হয়। তবে আপনি যে কোনও পাঠ্য সম্পাদক ব্যবহার করতে পারেন যা সাধারণ পাঠ্য সমর্থন করে, যেমন উইন্ডোজের জন্য নোটপ্যাড, ম্যাকওএসের জন্য টেক্সট এডিট বা লিনাক্সের জন্য ভিম।
ধাপ 3. খেলোয়াড়কে শুভেচ্ছা জানাতে কিছু কোড লিখুন।
খেলোয়াড় জানতে চাইবে কি হচ্ছে এবং তাদের কি করতে হবে, তাই আপনার তাদের জন্য কিছু লেখা মুদ্রণ করা উচিত।
-
এটি পাইথনে print () ফাংশন দিয়ে সম্পন্ন করা হয়। এটি চেষ্টা করার জন্য,.py এক্সটেনশন সহ একটি নতুন ফাইল খুলুন, এতে নিম্নলিখিত কোডটি প্রবেশ করুন, সংরক্ষণ করুন এবং চালান:
মুদ্রণ ("সংখ্যা অনুমানকারী গেমটিতে স্বাগতম!") মুদ্রণ ("1 এবং 1000 এর মধ্যে একটি সম্পূর্ণ সংখ্যা লিখুন:")
ধাপ 4. একটি এলোমেলো সংখ্যা তৈরি করুন।
আসুন একটি টেক্সট-ভিত্তিক গেম তৈরি করি যা খেলোয়াড়কে সঠিক সংখ্যা অনুমান করতে বলে। আমাদের যা করতে হবে তা হল গেমের শুরুতে একটি এলোমেলো সংখ্যা তৈরি করা যাতে খেলোয়াড় সবসময় একই নম্বর অনুমান করতে না পারে। যেহেতু প্রোগ্রাম জুড়ে সংখ্যা একই থাকবে, তাই আপনি একটি ভেরিয়েবলে এলোমেলো সংখ্যা সংরক্ষণ করতে চান।
- পাইথনের একটি অন্তর্নির্মিত র্যান্ডম নম্বর ফাংশন নেই, তবে এটির একটি স্ট্যান্ডার্ড লাইব্রেরি রয়েছে (এর অর্থ ব্যবহারকারীকে অতিরিক্ত কিছু ইনস্টল করতে হবে না)। সুতরাং আপনার কোডের শুরুতে (print () ফাংশনের আগে) যান এবং লাইন আমদানি এলোমেলো টাইপ করুন।
-
এলোমেলো ফাংশন ব্যবহার করুন। এটিকে বলা হয় Randint (), র্যান্ডম লাইব্রেরিতে রয়েছে যা আপনি কেবল আমদানি করেছেন, এবং সংখ্যার ন্যূনতম এবং সর্বোচ্চ মানটি যুক্তি হিসাবে থাকতে পারে। সুতরাং আপনার কোডের শেষে ফিরে যান এবং নিম্নলিখিত লাইনটি প্রবেশ করুন:
rightNum = random.randint (0, 1000)
পদক্ষেপ 5. প্লেয়ার থেকে ইনপুট পান।
একটি খেলায়, খেলোয়াড় কিছু করতে চায় বা কোন কিছুর সাথে যোগাযোগ করতে চায়। একটি টেক্সট-ভিত্তিক গেমে, এটি টেক্সট প্রবেশ করে সম্ভব। এখন যেহেতু আমাদের একটি এলোমেলো সংখ্যা আছে, আমাদের কোডের পরবর্তী লাইনগুলি প্লেয়ারকে তাদের সেরা অনুমান ইনপুট করতে বলবে।
-
যেহেতু আপনি যে কোডটি প্রবেশ করেছেন তা প্লেয়ারকে একটি নম্বর প্রবেশ করার নির্দেশনা প্রিন্ট করে, এটি তাদের প্রবেশ করা নম্বরটিও পড়তে হবে। এটি পাইথন 3 এ ইনপুট () এবং পাইথন 2 এ raw_input () দিয়ে সম্পন্ন করা হয়েছে। আপনাকে পাইথন 3 এ লিখতে হবে, কারণ পাইথন 2 শীঘ্রই পুরানো হয়ে যাবে। নাম্বার নামক একটি ভেরিয়েবলে প্লেয়ারের ইনপুট সংরক্ষণ করতে আপনার কোডে নিম্নলিখিত লাইন যোগ করুন:
userNum = ইনপুট ()
ধাপ the. প্লেয়ারের ইনপুটকে ব্যবহারযোগ্য ডাটা টাইপে পরিণত করুন।
খেলোয়াড় একটি নম্বর প্রবেশ করেছে-এখন কি?
-
প্লেয়ারের ইনপুটকে একটি সংখ্যা বানান। এখন, এটি বিভ্রান্তিকর মনে হতে পারে কারণ তারা কেবল একটি সংখ্যা প্রবেশ করেছে। কিন্তু একটি ভাল কারণ আছে: পাইথন ধরে নেয় যে সমস্ত ইনপুট টেক্সট, বা একটি "স্ট্রিং", যেমন এটি প্রোগ্রামিংয়ে বলা হয়। এই পাঠ্যটিতে আপনি যে নম্বরটি পেতে চান তা রয়েছে। পাইথনের একটি ফাংশন রয়েছে যা একটি স্ট্রিংকে রূপান্তর করে যা শুধুমাত্র একটি সংখ্যা ধারণ করে ভিতরের সংখ্যায়। প্রকার:
userNum = int (userNum)
ধাপ 7. সঠিক সংখ্যার সাথে খেলোয়াড়ের সংখ্যা তুলনা করুন।
একবার প্লেয়ার তাদের নাম্বার ইনপুট করলে, আপনাকে এটি তুলনা করতে হবে যেটি এলোমেলোভাবে তৈরি হয়েছিল। যদি সংখ্যাগুলি একই না হয়, আপনার গেমটি খেলোয়াড়কে অন্য একটি নম্বর চেষ্টা করতে পারে। যদি সংখ্যাগুলি মিলে যায়, আপনি প্লেয়ারকে বলতে পারেন যে তারা সঠিকভাবে অনুমান করেছে এবং প্রোগ্রামটি ছেড়ে দিয়েছে। এটি নিম্নলিখিত কোড দিয়ে করা হয়:
যখন userNum! = rightNum: userNum = int (input ())
ধাপ 8. খেলোয়াড়ের মতামত দিন।
যদিও আপনি ইতিমধ্যে তাদের ইনপুট প্রক্রিয়া করেছেন, প্লেয়ার এটি দেখতে পাবে না। আপনাকে আসলে খেলোয়াড়ের কাছে ফলাফলগুলি মুদ্রণ করতে হবে যাতে তারা বুঝতে পারে যে কী ঘটছে।
- অবশ্যই, আপনি কেবল খেলোয়াড়কে বলতে পারেন যে তাদের নম্বরটি সঠিক নাকি ভুল। কিন্তু সেই পদ্ধতির সাথে, খেলোয়াড়কে সবচেয়ে খারাপ ক্ষেত্রে 1000 বার অনুমান করতে হতে পারে, যা খুব বিরক্তিকর হবে।
- তাই খেলোয়াড়কে বলুন তাদের সংখ্যা খুব ছোট নাকি খুব বড়। এটি তাদের অনুমানের সংখ্যা উল্লেখযোগ্যভাবে হ্রাস করবে। উদাহরণস্বরূপ, যদি খেলোয়াড় প্রথমে 500 অনুমান করে, এবং গেমটি উত্তর দেয় "খুব বড় আবার চেষ্টা করুন। ") একটি দিয়ে।
- সচেতন থাকুন যে দুটি সংখ্যা একই কিনা তা পরীক্ষা করা == দিয়ে নয়, = দিয়ে নয়। = এটির বাম ভেরিয়েবলের ডান মান নির্ধারণ করে!
যদি userNum <rightNum: print ("খুব ছোট। আবার চেষ্টা করুন:") যদি userNum> rightNum: print ("খুব বড়। আবার চেষ্টা করুন:")
ধাপ 9. আপনার কোড পরীক্ষা করুন।
একজন প্রোগ্রামার হিসাবে, আপনার কোডটি শেষ হওয়ার আগে বিবেচনা করা উচিত।
-
পাইথনে প্রোগ্রামিং করার সময়, নিশ্চিত করুন যে আপনি ইন্ডেন্টেশনগুলি সঠিক পেয়েছেন। আপনার কোড এই মত হওয়া উচিত:
এলোমেলো মুদ্রণ আমদানি করুন ("সংখ্যা অনুমানকারী গেমটিতে স্বাগতম!") মুদ্রণ ("1 এবং 1000 এর মধ্যে একটি সম্পূর্ণ সংখ্যা লিখুন:") rightNum = random.randint (0, 1000) userNum = input () userNum = int (userNum) যখন userNum! = rightNum: if userNum <rightNum: print ("খুব ছোট। আবার চেষ্টা করুন:") যদি userNum> rightNum: print ("খুব বড়। আবার চেষ্টা করুন:") userNum = int (input ()) print ("আপনি অনুমান করেছিলেন সঠিকভাবে। ")
ধাপ 10. ইনপুট যাচাই করুন।
খেলোয়াড়টি কেবল ভুল জিনিস প্রবেশ করে আপনার খেলাটি ভাঙ্গতে সক্ষম হওয়া উচিত নয়। "ইনপুট যাচাই করা" এর অর্থ হল প্লেয়ারটি প্রক্রিয়া করার আগে সঠিক জিনিসটি প্রবেশ করেছে তা নিশ্চিত করা।
- গেমটি আবার খুলুন এবং একটি সংখ্যা নয় এমন কিছু প্রবেশ করার চেষ্টা করুন। গেমটি একটি ValueError দিয়ে প্রস্থান করবে। এটি এড়ানোর জন্য, আপনি ইনপুটটি একটি সংখ্যা ছিল কিনা তা পরীক্ষা করার একটি উপায় বাস্তবায়ন করতে পারেন।
- একটি ফাংশন সংজ্ঞায়িত করুন। যেহেতু ইনপুটটি যাচাই করা বেশ দীর্ঘ, এবং আপনাকে এটি একাধিকবার করতে হবে, আপনার একটি ফাংশন সংজ্ঞায়িত করা উচিত। এটি কোন যুক্তি গ্রহণ করবে না এবং একটি নম্বর ফেরত দেবে। প্রথমে, def numInput () লিখুন: আপনার কোডের শীর্ষে, সরাসরি আমদানি র্যান্ডম এর অধীনে।
- একবার প্লেয়ারের ইনপুট পান। ইনপুট () ফাংশনটি ব্যবহার করুন এবং ফলাফলটি ভেরিয়েবল ইনপকে দিন।
- যখন প্লেয়ারের ইনপুট একটি সংখ্যা নয়, তাদের একটি নম্বর লিখতে বলুন। একটি স্ট্রিং একটি সংখ্যা কিনা তা যাচাই করার জন্য, isdigit () ফাংশন ব্যবহার করুন, যা শুধুমাত্র একটি সম্পূর্ণ সংখ্যাকে অনুমতি দেয়, তাই আপনাকে আলাদাভাবে এটি পরীক্ষা করতে হবে না।
- যদি ইনপুট একটি সংখ্যা হয়, এটিকে স্ট্রিং থেকে সংখ্যায় রূপান্তর করুন এবং ফলাফলটি ফেরত দিন। স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করার জন্য int () ফাংশনটি ব্যবহার করুন। এটি মূল কোডে রূপান্তরকে অপ্রয়োজনীয় করে তুলবে এবং আপনার সেখান থেকে এটি সরানো উচিত।
- মূল কোডের ইনপুট () এ সমস্ত কলগুলিকে numInput () এ কল দিয়ে প্রতিস্থাপন করুন।
- NumInput () ফাংশনের কোডটি এইরকম দেখাবে:
def numInput (): inp = input () না থাকলে inp.isdigit (): print ("আপনাকে একটি সম্পূর্ণ সংখ্যা লিখতে বলা হয়েছিল! একটি সম্পূর্ণ সংখ্যা লিখুন:") inp = input () return int (inp)
ধাপ 11. গেমটি আবার পরীক্ষা করুন।
কী ঘটে তা দেখতে উদ্দেশ্যমূলকভাবে ভুল জিনিসগুলি প্রবেশ করুন এবং তারপরে যে কোনও ত্রুটিগুলি সামনে আসার সাথে সাথে সেগুলি ঠিক করুন।
প্রোগ্রামটি যখন আপনার কাছে একটি নম্বর চাইবে তখন কিছু লেখা প্রবেশ করার চেষ্টা করুন। এখন, একটি ত্রুটি বার্তা দিয়ে প্রস্থান করার পরিবর্তে, প্রোগ্রামটি আপনাকে আবার একটি নম্বর চাইবে।
ধাপ 12. গেমটি শেষ হয়ে গেলে পুনরায় চালু করার পরামর্শ দিন।
এইভাবে, প্লেয়ারটি আপনার গেমটি ক্রমাগত পুনরায় চালু না করে দীর্ঘ সময় ধরে খেলতে পারে।
- আমদানি এবং ফাংশন সংজ্ঞা ব্যতীত সমস্ত কোড একটি সময়-লুপে রাখুন। শর্ত হিসাবে সত্য সেট করুন: এটি সর্বদা সত্য হবে, তাই লুপটি চিরকাল চলবে।
- নম্বরটি সঠিকভাবে অনুমান করার পরে খেলোয়াড়কে জিজ্ঞাসা করুন যে তারা আবার খেলতে চায় কিনা। Print () ফাংশন ব্যবহার করুন।
- যদি তারা "না" উত্তর দেয় তবে চেহারাটি ভেঙে ফেলুন। যদি তারা অন্য কিছু উত্তর দেয়, চালিয়ে যান। ব্রেক স্টেটমেন্ট দিয়ে একটি লুপ বের করা হয়।
- সময় লুপের বাইরে "সংখ্যা অনুমানকারী গেমটিতে স্বাগতম" সরান। খেলোয়াড় সম্ভবত প্রতিবারই গেমটি খেলতে স্বাগত জানাতে চায় না। ইন্সট্রাকশন প্রিন্টটি সরিয়ে দিন ("নম্বর অনুমানকারী গেমটিতে স্বাগতম!" ট্রু: এর উপরে, তাই এটি শুধুমাত্র একবার মুদ্রিত হবে, যখন ব্যবহারকারী প্রথম গেমটি শুরু করবে।
ধাপ 13. গেমটি পরীক্ষা করুন।
যখনই আপনি একটি নতুন বৈশিষ্ট্য প্রয়োগ করবেন তখন আপনাকে আপনার গেমটি পরীক্ষা করতে হবে।
-
উভয় বিকল্প কাজ করে তা নিশ্চিত করার জন্য অন্তত একবার "হ্যাঁ" এবং "না" উভয় উত্তর দিতে ভুলবেন না। আপনার কোডটি কেমন হওয়া উচিত তা এখানে:
আমদানি এলোমেলো def numInput (): inp = input () inp.isdigit () না থাকলে: print ("আপনাকে বলা হয়েছিল একটি সম্পূর্ণ সংখ্যা লিখতে! একটি সম্পূর্ণ সংখ্যা লিখুন:") inp = input () return int (inp) print ("সংখ্যা অনুমানকারী গেমটিতে স্বাগতম!") যখন সত্য: মুদ্রণ ("1 এবং 1000 এর মধ্যে একটি সম্পূর্ণ সংখ্যা লিখুন:") rightNum = random.randint (0, 1000) userNum = numInput () যখন userNum! = RightNum: if userNum <rightNum: print ("খুব ছোট। আবার চেষ্টা করুন:") যদি userNum> rightNum: print ("খুব বড়। আবার চেষ্টা করুন:") userNum = numInput () print ("আপনি সঠিকভাবে অনুমান করেছেন।") প্রিন্ট ("আপনি কি আবার খেলতে চান? ছাড়তে না লিখুন। ") যদি ইনপুট () ==" না ": বিরতি
ধাপ 14. অন্যান্য টেক্সট ভিত্তিক গেম লিখুন।
কিভাবে একটি টেক্সট অ্যাডভেঞ্চার পরবর্তী লিখতে? নাকি কুইজ খেলা? সৃজনশীল হও.
টিপ: কখনও কখনও ডকুমেন্টেশন দেখতে সহায়ক হয় যদি আপনি নিশ্চিত না হন যে কিভাবে কিছু করা হয় বা কিভাবে একটি ফাংশন ব্যবহার করা হয়। পাইথন 3 ডকুমেন্টেশন https://docs.python.org/3/ এ পাওয়া যায়। কখনও কখনও আপনি ইন্টারনেটে যা করতে চান তা অনুসন্ধান করলেও ভাল ফলাফল পাওয়া যায়।
3 এর অংশ 2: 2D গ্রাফিক্স দিয়ে একটি গেম তৈরি করা
ধাপ 1. একটি গ্রাফিক্স লাইব্রেরি চয়ন করুন।
গ্রাফিক্স তৈরি করা খুবই জটিল, এবং বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ (পাইথন, সি ++, সি, জাভাস্ক্রিপ্ট সহ) কোর বা স্ট্যান্ডার্ড লাইব্রেরিতে গ্রাফিক্সের জন্য ন্যূনতম বা এমনকি কোন সমর্থন প্রদান করে না। সুতরাং গ্রাফিক্স তৈরিতে আপনাকে একটি বহিরাগত লাইব্রেরি ব্যবহার করতে হবে, উদাহরণস্বরূপ পাইথনের জন্য পাইগেম।
এমনকি একটি গ্রাফিক্স লাইব্রেরির সাথেও, আপনাকে কীভাবে মেনু প্রদর্শন করতে হবে, প্লেয়ার কী ক্লিক করেছে তা কীভাবে পরীক্ষা করতে হবে, টাইলগুলি কীভাবে প্রদর্শন করতে হবে ইত্যাদি সম্পর্কে চিন্তা করতে হবে। আপনি যদি প্রকৃত গেমটি ডেভেলপ করার দিকে মনোনিবেশ করেন, তাহলে আপনি ইউনিটি এর মতো একটি গেম ইঞ্জিন লাইব্রেরি ব্যবহার করতে পারেন, যা এই জিনিসগুলি সহজেই প্রয়োগ করে।
একটি সহজ 2D প্ল্যাটফর্মার কিভাবে তৈরি করা যায় তা দেখানোর জন্য এই নিবন্ধটি Cocos2D এর সাথে পাইথন ব্যবহার করবে। উল্লিখিত কিছু ধারণা অন্যান্য গেম ইঞ্জিনগুলিতে নাও থাকতে পারে। আরও তথ্যের জন্য তাদের ডকুমেন্টেশন দেখুন।
ধাপ 2. আপনার পছন্দ করা গ্রাফিক্স লাইব্রেরি ইনস্টল করুন।
পাইথনের জন্য Cocos2D ইনস্টল করা সহজ। আপনি এটি https://python.cocos2d.org/index.html থেকে পেতে পারেন, অথবা যদি আপনি লিনাক্স ব্যবহার করেন তবে sudo pip3 install cocos2d চালানোর মাধ্যমে।
পদক্ষেপ 3. আপনার গেম এবং মিডিয়ার জন্য একটি নতুন ডিরেক্টরি তৈরি করুন।
আপনি আপনার গেমটিতে ছবি এবং শব্দগুলির মতো জিনিস ব্যবহার করবেন। এই জিনিসগুলিকে প্রোগ্রামের একই ডিরেক্টরিতে রাখুন। এই ডিরেক্টরিতে অন্য কিছু থাকা উচিত নয় যাতে আপনি সহজেই দেখতে পারেন গেমটিতে আপনার কোন সম্পদ আছে।
ধাপ 4. নতুন ডিরেক্টরিতে একটি নতুন কোড ফাইল তৈরি করুন।
আপনার প্রোগ্রামিং ভাষার জন্য ফাইল এক্সটেনশন সহ এটিকে প্রধান বলুন। যদি আপনি একটি বড় এবং জটিল প্রোগ্রাম লিখেন যেখানে একাধিক প্রোগ্রাম ফাইল থাকার অর্থ হয়, এটি আপনাকে দেখাবে যে কোনটি প্রধান ফাইল।
এই উদাহরণে, আমরা main.py নামে একটি ফাইল তৈরি করব যাতে আমাদের সমস্ত কোড থাকবে।
ধাপ 5. গেম উইন্ডো তৈরি করুন।
গ্রাফিক্স সহ একটি গেমের জন্য এটি প্রাথমিক শর্ত।
- প্রয়োজনীয় cocos2d সাব-মডিউল আমদানি করুন: cocos.director, cocos.scene এবং cocos.layer। এটি subModuleName আমদানি *থেকে সম্পন্ন করা হয়, যেখানে সাব-মডিউল নাম হল সাব-মডিউল যা আপনি আমদানি করতে চান। থেকে … আমদানি * এবং আমদানি … এর মধ্যে পার্থক্য হল যে আপনি মডিউলটির নামটি পূর্বের সাথে যে মডিউলটি ব্যবহার করেন তার সামনে রাখতে হবে না।
- কালারলেয়ারের একটি সাবক্লাস MainMenuBgr সংজ্ঞায়িত করুন। এর মূলত মানে হল যে আপনার তৈরি করা কোন প্রধান মেনু ব্যাকগ্রাউন্ড আপনার করা কিছু পরিবর্তন সহ রঙের স্তরের মত আচরণ করবে।
- কোকোস ডিরেক্টর শুরু করুন। এটি আপনাকে একটি নতুন উইন্ডো দেবে। যদি আপনি একটি ক্যাপশন সেট না করেন, উইন্ডোতে ফাইলের নাম (main.py) হিসাবে একই ক্যাপশন থাকবে, যা পেশাদার দেখাবে না। ট্রুতে রিসাইজেবল সেট করে উইন্ডোটিকে রিসাইজ করার অনুমতি দিন।
- একটি ফাংশন showMainMenu সংজ্ঞায়িত করুন। ফাংশনে প্রধান মেনু দেখানোর জন্য আপনার কোডটি রাখা উচিত কারণ এটি আপনাকে আবার ফাংশনটি কল করে সহজেই মূল মেনুতে ফিরে যাওয়ার অনুমতি দেবে।
- একটি দৃশ্য তৈরি করুন। দৃশ্যটি আপাতত একটি স্তর নিয়ে গঠিত, যা আপনার সংজ্ঞায়িত MainMenuBgr শ্রেণীর একটি বস্তু।
- এই দৃশ্যটি জানালায় চালান।
cocos.director আমদানি থেকে * cocos.scene আমদানি * থেকে cocos.layer আমদানি * ক্লাস MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenu, self)._ init _ (0, 200, 255, 255) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) Director.run (menuSc) Director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()
ধাপ 6. উইন্ডোতে একটি প্রধান মেনু যোগ করুন।
আসল গেমের পাশাপাশি, আপনাকে একটি মেনু যোগ করতে হবে যা প্লেয়ার উইন্ডো বন্ধ করতে ব্যবহার করতে পারে, অন্যান্য উপাদানগুলির মধ্যে যা আপনি পরে যোগ করতে পারেন।
- আমদানি cocos.menu (আবার নির্দেশ থেকে) এবং pyglet.app (এই সময় আমদানির সাথে)।
- MainMenu কে মেনুর উপশ্রেণী হিসেবে সংজ্ঞায়িত করুন।
- প্রধান মেনুর সারিবদ্ধতা সেট করুন। আপনাকে উল্লম্ব এবং অনুভূমিক সারিবদ্ধতা আলাদাভাবে সেট করতে হবে।
- মেনু আইটেমগুলির একটি তালিকা তৈরি করুন এবং সেগুলিকে মেনুতে যুক্ত করুন। আপনার মেনু আইটেমগুলি "স্টার্ট গেম" এবং "প্রস্থান করুন" থাকা উচিত। প্রতিটি মেনু আইটেম বন্ধনী ভিতরে স্থাপন করা উচিত। প্রতিটি আইটেমের একটি লেবেল এবং একটি কলব্যাক ফাংশন থাকতে হবে যা নির্ধারণ করে যে প্লেয়ার যখন এটি ক্লিক করে তখন কি হবে। "স্টার্ট গেম" আইটেমের জন্য, স্টার্ট গেম ফাংশনটি ব্যবহার করুন (আপনি শীঘ্রই এটি লিখবেন), "প্রস্থান করুন" আইটেমের জন্য, "pyglet.app.exit" (ইতিমধ্যে বিদ্যমান) ব্যবহার করুন। Self.create_menu (menuItems) এ কল করে প্রকৃত মেনু তৈরি করুন।
- StartGame () সংজ্ঞায়িত করুন। আপাতত সংজ্ঞায় পাস করুন, আপনি যখন প্রকৃত গেমটি লিখবেন তখন আপনি এটিকে প্রতিস্থাপন করবেন।
- আপনার কোডের সেই জায়গায় যান যেখানে আপনি মেনুএসসি দৃশ্যটি তৈরি করেছেন এবং এতে একটি মেইনমেনু অবজেক্ট যুক্ত করুন।
-
আপনার সম্পূর্ণ কোডটি এখন দেখতে হবে:
cocos.director আমদানি * থেকে cocos.menu আমদানি * cocos.scene আমদানি * থেকে cocos.layer আমদানি * আমদানি pyglet.app ক্লাস MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, self)._ init _ (0, 200, 255, 255) ক্লাস MainMenu (Menu): def _init _ (self): super (MainMenu, self)._ init _ ("" self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Start Game ", startGame)), (MenuItem (" Quit ", pyglet.app.exit))] self.create_menu (menuItems) def startGame (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) Director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()
ধাপ 7. আপনার কোড পরীক্ষা করুন।
কোডটি তাড়াতাড়ি পরীক্ষা করুন, যদিও এটি এখনও ছোট এবং অপেক্ষাকৃত সহজ। তারপর বিষয়গুলি খুব জটিল হওয়ার আগে আপনি মৌলিক কাঠামোর কোন ভুল চিহ্নিত এবং সংশোধন করতে পারেন।
নির্দেশাবলীর কোডটি "IcyPlat - একটি সাধারণ প্ল্যাটফর্মার" শিরোনামে একটি উইন্ডো খুলতে হবে। পটভূমি হালকা নীল এবং আপনি উইন্ডোর আকার পরিবর্তন করতে পারেন। যখন আপনি মেনুতে "স্টার্ট গেম" ক্লিক করেন, তখন কিছুই ঘটবে না (এখনো)। যখন আপনি "প্রস্থান করুন" ক্লিক করেন, উইন্ডোটি বন্ধ হয়ে যাবে।
ধাপ 8. একটি স্প্রাইট তৈরি করুন।
একটি স্প্রাইট একটি "গেম বস্তু" বা একটি দ্বিমাত্রিক চিত্র। স্প্রাইট ইন-গেম অবজেক্ট, আইকন, ব্যাকগ্রাউন্ড ডেকোরেশন, ক্যারেক্টার এবং অন্য যেকোনো কিছু হতে পারে যা আপনি গেমের একটি ইমেজ দিয়ে উপস্থাপন করতে পারেন। আমরা একটি চরিত্রের জন্য একটি স্প্রাইট তৈরি করে শুরু করব যার সাথে খেলোয়াড় যোগাযোগ করতে পারে।
- আমদানি-এক্সপ্রেশন থেকে cocos.sprite সাবমডিউল আমদানি করুন।
- স্প্রাইটের প্রতিনিধিত্ব করার জন্য একটি ছবি খুঁজুন। আপনি একটি স্প্রাইট প্রদর্শন করতে পারবেন না যদি আপনার জন্য একটি ছবি না থাকে। আপনি একটি আঁকতে পারেন, অথবা আপনি ইন্টারনেট থেকে একটি পেতে পারেন (লাইসেন্সের জন্য সতর্ক থাকুন, যদিও, যদি আপনি আপনার গেমটি প্রকাশ করার পরিকল্পনা করছেন)। এই উদাহরণের জন্য, https://opengameart.org/content/tux-classic-hero-style এ যান এবং আপনার কম্পিউটারে চলমান পেঙ্গুইনগুলির-p.webp" />
- ScrollableLayer শ্রেণীর একটি নতুন বস্তু হিসেবে একটি স্তর তৈরি করুন। তারপরে, স্প্রাইট অবজেক্ট হিসাবে স্প্রাইট তৈরি করুন এবং এর অবস্থান (8, 250) এ সেট করুন। রেফারেন্সের জন্য, পয়েন্ট (0, 0) নীচের বাম কোণে। এটি বেশ উঁচু, কিন্তু এটি নিশ্চিত করবে যে পেঙ্গুইন বরফে আটকে যাবে না।
- স্প্রাইটের স্তরে স্প্রাইট যোগ করুন।
- স্প্রাইটের স্তর থেকে একটি নতুন দৃশ্য তৈরি করুন এবং এটি চালান।
def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75, 100) figLayer.add (fig) # gameSc = Scene (figLayer) Director.run (gameSc)
ধাপ 9. আপনার ভূদৃশ্য স্বপ্ন দেখুন।
বেশিরভাগ গেমগুলিতে, আপনার স্প্রাইটগুলি কেবল শূন্যে ভাসতে হবে না। তাদের আসলে কিছু পৃষ্ঠের উপর দাঁড়িয়ে থাকা উচিত, তাদের চারপাশে কিছু নিয়ে। 2D গেমগুলিতে, এটি প্রায়শই একটি টাইল সেট এবং একটি টাইল ম্যাপ দিয়ে করা হয়। টাইল সেটটি মূলত বলে যে কোন ধরনের পৃষ্ঠের স্কোয়ার এবং ব্যাকগ্রাউন্ড স্কোয়ার বিদ্যমান, এবং তারা দেখতে কেমন।
- একটি টাইল সেট তৈরি করুন।এই গেমের জন্য সেট করা টাইল খুবই মৌলিক হবে: বরফের জন্য একটি টাইল এবং আকাশের জন্য একটি টালি। এই উদাহরণে ব্যবহৃত বরফ টালি এখানে থেকে, CC-BY-SA 3.0 এর অধীনে।
- একটি টাইল সেট ছবি তৈরি করুন। এটি সমস্ত টাইলসের একটি ছবি, যা সকলের একই আকারের হতে হবে (যদি তারা না থাকে তবে সেগুলি সম্পাদনা করুন) এবং আপনি যে আকারটি দেখতে চান সেটি একে অপরের পাশে আছে। IcyTiles-p.webp" />
-
টাইল সেট বিবরণ তৈরি করুন। এটি একটি XML ফাইল। এক্সএমএল ফাইলে টাইলস সেট ছবিতে কত বড় টাইলস রয়েছে, কোন ছবিটি ব্যবহার করতে হবে এবং কোন টাইল সেখানে খুঁজে বের করতে হবে। নীচের কোড দিয়ে icyTiles.xml নামে একটি XML ফাইল তৈরি করুন:
ধাপ 10. আপনার আড়াআড়ি জন্য একটি টাইল মানচিত্র তৈরি করুন।
একটি টাইল মানচিত্র একটি মানচিত্র যা আপনার স্তরে কোন টাইল কোন অবস্থানে তা নির্ধারণ করে। উদাহরণস্বরূপ, টাইল মানচিত্র তৈরি করতে আপনার একটি ফাংশন সংজ্ঞায়িত করা উচিত কারণ হাতে টাইল মানচিত্র ডিজাইন করা খুব ক্লান্তিকর। একটি আরো উন্নত গেম সাধারণত লেভেল এডিটর কিছু ধরণের আছে, কিন্তু 2D গেম ডেভেলপমেন্টের সাথে পরিচিত হওয়ার জন্য, একটি অ্যালগরিদম যথেষ্ট ভাল স্তর প্রদান করতে পারে।
- কত সারি এবং কলাম প্রয়োজন তা খুঁজে বের করুন। এর জন্য, স্ক্রিনের আকারকে টাইল সাইজ দ্বারা উভয় অনুভূমিকভাবে (কলাম) এবং উল্লম্বভাবে (সারি) ভাগ করুন। সংখ্যাটি উপরের দিকে গোল করুন; আপনার জন্য গণিত মডিউলের একটি ফাংশন দরকার, তাই আপনার কোডের শীর্ষে আমদানিতে গণিত আমদানি সিল যোগ করুন।
- লেখার জন্য একটি ফাইল খুলুন। এটি ফাইলের পূর্ববর্তী সমস্ত সামগ্রী মুছে ফেলবে, তাই এমন একটি নাম চয়ন করুন যা ডিরেক্টরিতে এখনও কোনও ফাইল নেই, যেমন levelMap.xml।
- ফাইলটিতে খোলার ট্যাগগুলি লিখুন।
- অ্যালগরিদম অনুযায়ী একটি টাইল মানচিত্র তৈরি করুন। আপনি নীচের কোডটিতে একটি ব্যবহার করুন, অথবা আপনি নিজেরাই একটি নিয়ে আসতে পারেন। র্যান্ডম ফাংশনটি মডিউল থেকে এলোমেলোভাবে আমদানি করতে ভুলবেন না: নীচের কোডটি কাজ করার জন্য এটি প্রয়োজনীয়, এবং আপনি যা কিছু নিয়ে আসবেন তারও সম্ভবত এলোমেলো পূর্ণসংখ্যা প্রয়োজন হবে। এছাড়াও, বিভিন্ন স্তরে স্কাই টাইলস এবং আইস টাইলস রাখতে ভুলবেন না: বরফ কঠিন, আকাশ নয়।
- ফাইলটিতে ক্লোজিং ট্যাগ লিখুন এবং ফাইলটি বন্ধ করুন।
def generateTilemap (): colAmount = ceil (800/16) * 3 # (screen width / tile size) * 3 rowAmount = ceil (600/16) # screen height / tile size tileFile = open ("levelMap.xml", " w ") tileFile.write ('\ n / n / n') iceHeight = Randint (1, 10) i in range (0, colAmount): tileFile.write ('') makeHole = মিথ্যা যদি Randint (0, 50) == 10 এবং আমি! = 0: # স্প্যানপয়েন্টে গর্তের অনুমতি দেবেন না iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight+5) যদি iceHeight <0: # সীমাবদ্ধ টাইলস খুব কম বরফে যায় 1, 5) যদি iceHeight> rowAmount: # সীমাবদ্ধ টাইলস খুব বেশি বরফে যাওয়া থেকে উচ্চতা = Randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n') tileFile.write ('\ n / n') i in range (0, colAmount): tileFile.write ('') in j in range (0, rowAmount): tileFile.write ('\ n') tileFile.write ('\ n ') tileFile.write (' / n / n ') tileFile.close ()
ধাপ 11. টাইল ম্যাপ প্রদর্শন করুন।
Cocos.tiles থেকে সবকিছু আমদানি করুন এবং তার জন্য startGame ফাংশনে যান।
- আপনার স্টার্ট গেম ফাংশনের শুরুতে, আপনি যে ফাংশনটির জন্য সংজ্ঞায়িত করেছেন তা ব্যবহার করে একটি টাইল ম্যাপ তৈরি করুন।
- একটি নতুন স্ক্রোলিং ম্যানেজার তৈরি করুন। এটি সরাসরি লাইনের নিচে করুন যেখানে আপনি তার স্তরে স্প্রাইট যোগ করেন।
- টাইলস যুক্ত একটি নতুন স্তর তৈরি করুন, যা লেভেলম্যাপ.এক্সএমএল টাইল ম্যাপ থেকে লোড হবে যা আপনার জেনারেট টাইলম্যাপ ফাংশন তৈরি করবে।
- স্ক্রোলিং ম্যানেজারে নন-সলিড লেয়ার, সলিড লেয়ার এবং স্প্রাইট লেয়ার যুক্ত করুন, ঠিক এই ক্রমে। আপনি চাইলে z- পজিশন যোগ করতে পারেন।
- স্প্রাইট স্তর থেকে দৃশ্য তৈরির পরিবর্তে, স্ক্রোলিং ম্যানেজার থেকে এটি তৈরি করুন।
-
আপনার startGame ফাংশন এখন এই মত হওয়া উচিত:
def startGame (): generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc)
ধাপ 12. আপনার কোড পরীক্ষা করুন।
আপনার বাস্তবায়িত নতুন বৈশিষ্ট্যগুলি সত্যিই কাজ করে তা নিশ্চিত করার জন্য আপনার কোডটি প্রায়ই পরীক্ষা করা উচিত।
উদাহরণের কোডটি এখন পেঙ্গুইনের পিছনে কিছু বরফের দৃশ্য দেখাতে হবে। যদি পেঙ্গুইন দেখে মনে হয় যে এটি বরফের উপর অনেক দূরে ঘুরে বেড়াচ্ছে, আপনি কিছু ভুল করেননি, এবং এটি পরবর্তী ধাপে ঠিক করা হবে।
ধাপ 13. নিয়ন্ত্রণ যোগ করুন
একটি টেক্সট-ভিত্তিক গেমের তুলনায় প্লেয়ারের 2D গেমের সাথে প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করার আরও অনেক উপায় আছে। একটি সাধারণ কী অন্তর্ভুক্ত করা হয় যখন সঠিক কীটি চাপানো হয়।
- Cocos.mapcolliders এবং cocos.actions থেকে সবকিছু আমদানি করুন। এছাড়াও pyglet.window থেকে কী আমদানি করুন।
-
কিছু গ্লোবাল ভেরিয়েবল "ডিক্লেয়ার" করুন। গ্লোবাল ভেরিয়েবলগুলি ফাংশনের মধ্যে ভাগ করা হয়। আপনি সত্যিই পাইথনে ভেরিয়েবল ঘোষণা করতে পারবেন না, কিন্তু আপনাকে বলতে হবে যে এটি ব্যবহার করার আগে একটি বৈশ্বিক পরিবর্তনশীল মূল কোডে বিদ্যমান। আপনি 0 কে মান হিসাবে বরাদ্দ করতে পারেন কারণ একটি ফাংশন পরে সঠিক মান নির্ধারণের যত্ন নেবে। তাই আমদানি এক্সপ্রেশন অধীনে যোগ করুন:
# গ্লোবাল ভেরিয়েবল কীবোর্ড = 0 scrMang = 0
-
আপনার startGame ফাংশন সামঞ্জস্য করুন:
- বলুন যে আপনি গ্লোবাল ভেরিয়েবল কীবোর্ড এবং scrMang ব্যবহার করেন। ফাংশনের শীর্ষে গ্লোবাল কীবোর্ড, scrMang লিখে এটি করুন।
- জানালাকে কীবোর্ড ইভেন্ট শুনতে দিন।
- একটি প্ল্যাটফর্মার কন্ট্রোলারের উপর ভিত্তি করে কাজ করতে চিত্রটিকে বলুন। আপনি শীঘ্রই সেই PlatformerController বাস্তবায়ন করবেন।
- কঠিন টাইলস এবং ফিগারের মধ্যে সংঘর্ষ পরিচালনা করতে একটি ম্যাপ কোলাইডার তৈরি করুন।
def startGame (): গ্লোবাল কীবোর্ড, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml ') solidTiles = tileLayer [' solid '] nsoliTiles = tileLayer [' not_solid '] # keyboard = key. KeyStateHandler () Director.window.push_handlers (keyboard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider = 'স্লাইড') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc)
-
একটি প্ল্যাটফর্মার নিয়ামক তৈরি করুন। এটি আপনার কীপ্রেস অনুযায়ী চিত্রটি সরিয়ে দেবে।
- প্ল্যাটফর্মার কন্ট্রোলারকে কর্মের একটি উপশ্রেণী হিসাবে সংজ্ঞায়িত করুন।
- চলার গতি, লাফের গতি এবং মাধ্যাকর্ষণ সংজ্ঞায়িত করুন।
- স্টার্ট ফাংশন সংজ্ঞায়িত করুন। এই ফাংশনটি একবার বলা হয়, যখন প্ল্যাটফর্মার নিয়ামক চিত্রের সাথে সংযুক্ত থাকে। এটি x এবং y উভয় দিক দিয়েই তার গতি 0 তে সেট করা উচিত।
- ধাপ ফাংশন সংজ্ঞায়িত করুন। দৃশ্যটি চলাকালীন এটি পুনরাবৃত্তি হবে।
- গ্লোবাল ভেরিয়েবল কীবোর্ড এবং scrMang ব্যবহার করতে স্টেপ ফাংশনটি বলুন।
- বেগ পান এবং পরিবর্তন করুন। X এবং y বেগকে আলাদা ভেরিয়েবলে সংরক্ষণ করুন। X গতিবেগ 1 বা -1 সেট করুন (বাম বা ডান কী চাপানো হয়েছিল কিনা তার উপর নির্ভর করে) সরানোর গতির সাথে গুণিত হয়। Y বেগের মাধ্যাকর্ষণ যোগ করুন। এটি ডাউনটাইমের সাথে গুণ করুন যাতে এটি ধীর ডিভাইসে একই ভাবে কাজ করে। যদি স্পেস কী টিপানো হয় এবং ফিগারটি মাটিতে দাঁড়িয়ে থাকে, লাফের গতিতে y বেগ পরিবর্তন করে লাফ দিন।
- চিত্রটি কোথায় সরানো উচিত তা গণনা করুন। তারপরে সংঘর্ষের হ্যান্ডলারকে সেই অবস্থানটি সামঞ্জস্য করতে দিন যদি এটি একটি শক্ত টাইলের ভিতরে থাকে। অবশেষে, চিত্রটিকে নতুন সমন্বিত অবস্থানে নিয়ে যান।
- চিত্রের উপর স্ক্রোলিং ম্যানেজারের ফোকাস সেট করুন। এই কারণে ক্যামেরাটি যুক্তিসঙ্গত উপায়ে সরানো হয় যখন চিত্রটি সরানো হয়।
ক্লাস প্ল্যাটফর্মার কন্ট্রোলার (অ্যাকশন): গ্লোবাল কীবোর্ড, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def step (self, dt): global keyboard, স্ক্রলার যদি dt> 0.1: # বড় রিটার্ন vx, vy = self.target.velocity vx = (কীবোর্ড [key. RIGHT] - কীবোর্ড [key. LEFT]) * self. MOVE_SPEED vy + তে ডাউনটাইম করার সময় কিছু করবেন না। = self. Gravity * dt যদি self.on_ground এবং keyboard [key. Space]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y += dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (*new.center)
ধাপ 14. আপনার কোড পরীক্ষা করুন
আপনি যদি উদাহরণটি অনুসরণ করেন, তাহলে আপনি এখন তীরচিহ্নের সাহায্যে পেঙ্গুইনটি সরিয়ে নিতে পারবেন এবং স্পেস বারটি টিপে লাফাতে পারবেন। এছাড়াও, পেঙ্গুইনটি এখন মাটিতে ঘোরাফেরা করার পরিবর্তে নিচে পড়ে যাওয়া উচিত।
ধাপ 15. গেমটির জন্য একটি সমাপ্তি তৈরি করুন।
এমনকি যে গেমগুলি অবিরাম চলতে পারে তারও হারের সম্ভাবনা থাকা উচিত। যেহেতু আপনি একটি ফাংশন সহ উদাহরণে যে স্তরটি তৈরি করেছেন তার একটি সমাপ্তি রয়েছে, তাই আপনাকে সেই প্রান্তে এসে জয়লাভ করাও সম্ভব করতে হবে। অন্যথায়, খেলোয়াড় কেবল সেখানে বরফের ব্লকগুলিতে ঝাঁপিয়ে পড়বে, যা বিরক্তিকর হবে।
-
প্ল্যাটফর্মার কন্ট্রোলারের ভিতরে, ফোকাস সেটের পরে, চিত্রের x এবং y অবস্থান পান। যদি y অবস্থান 0 এর কম হয়, তাহলে যুক্তি হিসেবে "গেম ওভার" দিয়ে ফাংশন finishGame () (আপনি এটি পরে লিখবেন) কল করুন। যদি x অবস্থানটি স্ক্রিনের আকারের চেয়ে বড় হয় 3 এর সাথে গুণিত হয় (আপনি এটিকে আগে স্তরের আকার হিসাবে সেট করেছিলেন)।
posX, posY = self.target.position যদি posY <0: finishGame ("Game Over") ফিরে আসে যদি posX> 800*3: # level size finishGame ("Level Completed") return
-
একটি ক্লাস ফিনিশ মেনু সংজ্ঞায়িত করুন। এটি প্রধান মেনু শ্রেণীর মতো হওয়া উচিত যা আপনি আগে সংজ্ঞায়িত করেছিলেন, কিন্তু শিরোনাম হিসাবে একটি খালি স্ট্রিং থাকার পরিবর্তে, এটি একটি পরিবর্তনশীল পাঠ্য ব্যবহার করা উচিত যা _init_ ফাংশন যুক্তি হিসাবে নেয়। মেনু আইটেমগুলিকে "আবার চেষ্টা করুন" এবং "প্রস্থান করুন" লেবেল করা উচিত, কিন্তু যে ফাংশনগুলি তারা কল করে সেগুলি একই থাকে।
class FinishMenu (Menu): def _init _ (self, text): super (FinishMenu, self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("আবার চেষ্টা করুন", startGame)), (MenuItem ("প্রস্থান করুন", pyglet.app.exit))] self.create_menu (menuItems)
-
ফাংশন ফিনিসগেম () সংজ্ঞায়িত করুন। এটি একটি যুক্তি হিসাবে পাঠ্য গ্রহণ করা উচিত। এটি প্রধান মেনু পটভূমি থেকে একটি দৃশ্য তৈরি করা উচিত, একটি ফিনিশ মেনু পাঠ্য যুক্তি সহ এই মেনুতে প্রেরণ করা হচ্ছে। তারপর এটি এই দৃশ্য চালানো উচিত।
def finishGame (text): menuSc = Scene (MainMenuBgr ()) menuSc.add (FinishMenu (text)) Director.run (menuSc)
ধাপ 16. ক্রেডিট যোগ করুন।
এখানেই আপনি আপনার অসাধারণ কোডের জন্য ক্রেডিট পাবেন, সেইসাথে অন্য যে কেউ আপনাকে সাহায্য করেছেন তার ক্রেডিট দিন। আপনি যদি অন্য ওয়েবসাইট থেকে কোন ছবি ব্যবহার করেন (অনুমতি সহ), সেই ছবিটি তার নির্মাতার কাছে দিতে ভুলবেন না।
-
একটি ফাইল ক্রেডিট তৈরি করুন এবং সেখানে আপনার সমস্ত ক্রেডিট লিখুন:
পেঙ্গুইন: কেলভিন শেডুইং, CC0 আইস ব্লকের অধীনে: Michał Banas digit1024 opengameart.org এ CC-BY-SA 3.0 এর অধীনে
- আপনার পাইথন কোডে ফিরে যান এবং cocos.text থেকে লেবেল আমদানি করুন।
-
লেয়ারের একটি সাবক্লাস ক্রেডিট সংজ্ঞায়িত করুন। তার _init_ ফাংশনে, CREDITS ফাইলটি পড়ুন এবং এর প্রতিটি লাইনের মধ্যে সঠিক অবস্থানে একটি পাঠ্য লেবেল তৈরি করুন।
ক্লাস ক্রেডিট (লেয়ার): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n ") i এর পরিসরে (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x =" left ", anchor_y =" top ") credLabel.position = 25, 500- (i +1)*40 self.add (credLabel)
- আপনার প্রধান মেনু ক্লাসে যান এবং "ক্রেডিট" লেবেলযুক্ত একটি মেনু আইটেম যোগ করুন যা ক্লিক করার সময় ফাংশন শো ক্রেডিটকে কল করে।
-
মেনুর একটি উপশ্রেণী BackToMainMenuButton সংজ্ঞায়িত করুন। "ব্যাক" লেবেলযুক্ত একটি আইটেম দিয়ে এটি একটি মেনু তৈরি করুন, যা শো মেনমেনু ফাংশনকে কল করে। এই "মেনু", যা একটি বোতামের মতো, নীচের দিকে উল্লম্বভাবে এবং অনুভূমিকভাবে শীর্ষে থাকা উচিত।
ক্লাস BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Back", showMen] create_menu (menuItems)
-
ফাংশন showCredits সংজ্ঞায়িত করুন। এটি একটি MainMenuBgr স্তর এবং একটি ক্রেডিট স্তর থেকে একটি দৃশ্য তৈরি করা উচিত এবং সেই দৃশ্যটি চালানো উচিত।
def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc)
ধাপ 17. আপনার কোড চেক করুন।
যখন আপনি মনে করেন যে আপনি আপনার কোডটি শেষ করেছেন, আপনার এটি আবার দেখা উচিত। এটি আপনাকে লক্ষ্য করতে সাহায্য করতে পারে যদি কিছু অপ্টিমাইজ করা যায়, অথবা এমন কিছু অপ্রয়োজনীয় লাইন আছে যা আপনি মুছে দিতে ভুলে গেছেন। আপনি যদি উদাহরণটি অনুসরণ করেন, তাহলে আপনার সম্পূর্ণ কোডটি এখন দেখতে হবে:
cocos.director আমদানি থেকে * cocos.menu আমদানি থেকে * cocos.scene আমদানি থেকে * cocos.layer আমদানি থেকে * cocos.sprite আমদানি থেকে * cocos.sprite আমদানি থেকে * cocos.mapcolliders আমদানি থেকে * cocos.mapcolliders আমদানি * থেকে cocos.actions আমদানি * cocos থেকে আমদানি *.text আমদানি লেবেল আমদানি pyglet.app থেকে pyglet.window আমদানি কী গণিত থেকে আমদানি সিল থেকে এলোমেলো আমদানি র্যান্ডিন্ট # "ঘোষণা" গ্লোবাল ভেরিয়েবল কীবোর্ড = 0 scrMang = 0 class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, স্ব) (MenuItem ("Start Game", startGame)), (MenuItem ("Credits", showCredits)), (MenuItem ("Quit", pyglet.app.exit))] self.create_menu (menuItems) ক্লাস ক্রেডিট (লেয়ার): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n") i in range (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x = "left", anchor_y = "top") credLabel.position = 25, 500- (i+1)*40 self.add (credLabel) class BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems =
ধাপ 18. সমাপ্ত।
এখন গেমটি পরীক্ষা করুন। যখন আপনি কিছু প্রোগ্রাম করেন, আপনি যখনই নতুন কিছু প্রয়োগ করেন তখন এটি কাজ করে কিনা তা পরীক্ষা করতে হবে। এছাড়াও, আপনি কিছু সময়ের জন্য আপনার লেখা গেমটি খেলতে পছন্দ করতে পারেন।
3 এর অংশ 3: একটি গেম প্রকাশ করা
ধাপ 1. নির্ভরশীলতা লিখ।
যে কেউ অন্য কম্পিউটার ব্যবহার করে সে আপনার মত একই সফটওয়্যার এবং লাইব্রেরি ইনস্টল করবে না। সুতরাং, আপনাকে নিশ্চিত করতে হবে যে আপনার গেমটি ইনস্টল করা প্রত্যেকেই জানে যে এটি চালানোর জন্য তাদের কী দরকার। আপনাকে সমস্ত নির্ভরতার সমস্ত নির্ভরতার সমস্ত নির্ভরতা ইত্যাদি লিখতে হবে না, তবে আপনার কমপক্ষে আপনার প্যাকেজগুলির নির্ভরতা এবং তাদের নির্ভরতাগুলি লিখতে হবে।
পদক্ষেপ 2. নিশ্চিত করুন যে আপনার কাছে সমস্ত মিডিয়া ব্যবহারের অনুমতি আছে।
এটি 3D মডেল, সঙ্গীত, সংলাপ, সঙ্গীত, লাইব্রেরি এবং আপনার গেমের জন্য ব্যবহৃত ফ্রেমওয়ার্ক সহ সমস্ত গ্রাফিক্সের ক্ষেত্রে প্রযোজ্য। যা কিছু আপনি নিজে লিখেননি।
- প্রায়শই কিছু শর্ত থাকে, যেমন লেখকের ক্রেডিট করা বা একই লাইসেন্সের অধীনে মিডিয়ার পরিবর্তনগুলি ভাগ করা। কখনও কখনও আপনি গ্রাফিক্স ব্যবহার করতে পারবেন যতক্ষণ না আপনি নির্মাতাদেরকে দায়ী করেন যতক্ষণ না আপনি গেমের জন্য চার্জ করবেন না। যদি আপনাকে লেখককে কৃতিত্ব দিতে হয়, তাহলে এটি আপনার গেমের একটি "ক্রেডিট" ট্যাবের মতো একটি দৃশ্যমান স্থানে করুন।
- কপিরাইট দাবি করা এবং লাইসেন্স নির্দিষ্ট না করা মিডিয়াও রয়েছে, কখনও কখনও কিছু লেখা যেমন "সর্বস্বত্ব সংরক্ষিত"।যদি এমন হয় তবে আপনার গেমটিতে এটি অন্তর্ভুক্ত করার আগে আপনাকে অবশ্যই লেখকের কাছ থেকে স্পষ্ট অনুমতি নিতে হবে।
- লাইব্রেরিগুলি সাধারণত লাইসেন্সের অধীনে ছেড়ে দেওয়া হয় যা তাদের লাইব্রেরি হিসাবে ব্যবহার করার অনুমতি দেয়। ব্যতিক্রম লিঙ্ক না করে একটি উল্লেখযোগ্য ব্যতিক্রম হল GPL: এই ধরনের লাইসেন্স শুধুমাত্র নির্দিষ্ট লাইসেন্স সহ একটি প্রোগ্রামে এটি ব্যবহার করার অনুমতি দেয়। এবং মিডিয়া বা লাইব্রেরির সাথে আপনি যা করছেন তা অনুমোদিত কিনা তা নিশ্চিত করার জন্য আপনাকে সর্বদা লাইসেন্সের প্রাথমিক বিষয়গুলি পড়তে হবে।
সতর্কবাণী: মিডিয়া বা লাইব্রেরিগুলি এমনভাবে ব্যবহার করা যাতে লাইসেন্স অনুমতি না দেয় এমন একটি গেম যা আপনি প্রকাশ করেন তা আপনাকে গুরুতর আইনি সমস্যায় ফেলতে পারে। তাই হয় লেখককে জিজ্ঞাসা করুন অথবা মিডিয়াকে পুরোপুরি এড়িয়ে চলুন যদি আপনার ব্যবহার অনুমোদিত কিনা তা নিয়ে আপনি অনিশ্চিত।
ধাপ the. আপনি যে শর্তে আপনার গেমটি প্রকাশ করতে চান সে বিষয়ে সিদ্ধান্ত নিন
আপনি কি আপনার খেলা বিক্রি করবেন? আপনি কি অন্যদের আপনার ছবি এবং ধারণা ব্যবহার করার অনুমতি দিতে চান? আপনার প্রকল্পে আপনি যে মিডিয়াগুলি ব্যবহার করেন সে সম্পর্কে আপনাকে সতর্ক থাকতে হবে, আপনি সাধারণত সিদ্ধান্ত নিতে পারেন যে আপনি কীভাবে অন্যদের আপনার গেমটি ব্যবহার করার অনুমতি দিতে চান। আপনি একটি ক্রিয়েটিভ কমন্স CC0 লাইসেন্স ব্যবহার করে আপনার গেমটি পাবলিক ডোমেইনে ছেড়ে দিতে পারেন.. কিছু অধিকার বজায় রেখে কিছু শর্তে বিতরণ এবং পরিবর্তনের অনুমতি দিতে, Gnu জেনারেল পাবলিক লাইসেন্স (GPL) অথবা বার্কলে সফটওয়্যার ডিস্ট্রিবিউশন (BSD) লাইসেন্স ব্যবহার করে দেখুন। অথবা, আপনি আপনার সফ্টওয়্যারটিকে মালিকানাধীন করতে পারেন, যার অর্থ আপনার অনুমতি ছাড়া এটি বিতরণ বা সংশোধন করার অনুমতি নেই।
যদিও গেম বিক্রি করে অর্থ উপার্জন করা সম্ভব, তবুও লোকেরা আপনার প্রথম গেমটি কিনবে এমন সম্ভাবনা নেই যা সাধারণত কয়েকটি বৈশিষ্ট্য এবং বিশেষ কিছু নয়। এছাড়াও, যদি একটি বিনামূল্যে প্রোগ্রাম কাজ না করে, যারা এটি ডাউনলোড করেছে তারা কেবল হতাশ হবে। যদি তারা এর জন্য অর্থ প্রদান করে, তবে, তারা তাদের অর্থ ফেরত দাবি করবে, যা আপনার এবং ব্যবহারকারীদের উভয়ের জন্য আরও সমস্যা সৃষ্টি করবে। সুতরাং আপনার প্রথম কয়েকটি প্রোগ্রাম বিনামূল্যে উপলব্ধ করার কথা বিবেচনা করুন।
ধাপ 4. আপনি আপনার গেমটি কিভাবে প্রকাশ করতে চান তা স্থির করুন।
প্রতিটি পদ্ধতির কিছু সুবিধা এবং অসুবিধা রয়েছে, তাই আপনাকে নিজেই সিদ্ধান্ত নিতে হবে।
-
এটি একটি ওয়েবসাইটে প্রকাশ:
যদি আপনার কোন ওয়েবসাইট থাকে, তাহলে আপনি আপনার গেমটি ডাউনলোড করার জন্য আপলোড করতে পারেন। সফটওয়্যারটি কিভাবে ইনস্টল করতে হয়, সেইসাথে সমস্ত প্রয়োজনীয় নির্ভরতা সম্পর্কে স্পষ্ট নির্দেশাবলী প্রদান করতে ভুলবেন না। এর অসুবিধা হল যে খেলোয়াড়দের ম্যানুয়ালি নির্ভরতা ইনস্টল করতে হবে, যা কিছু লোকের জন্য কঠিন হতে পারে।
-
একটি প্যাকেজ ম্যানেজারের জন্য একটি প্যাকেজ তৈরি করা:
বিভিন্ন প্যাকেজ ম্যানেজার রয়েছে, যেমন অ্যাপ্ট, ইয়াম এবং হোমব্রু, যা লোকেদের লিনাক্স এবং লিনাক্স-ভিত্তিক পরিবেশে অ্যাপ ইনস্টল করা সহজ করে তোলে। তাদের সকলের বিভিন্ন প্যাকেজ ফর্ম্যাট রয়েছে। প্যাকেজ সম্পর্কে ভাল জিনিস হল যে তারা স্বয়ংক্রিয়ভাবে সমস্ত নির্ভরতা ইনস্টল করে (যদি আপনি তাদের সঠিকভাবে কনফিগার করেন)। সুতরাং প্লেয়ারকে শুধুমাত্র আপনার প্যাকেজ ইনস্টল করতে হবে এবং তারপর গেমটি খেলতে পারবে। সমস্যা হল যে বিভিন্ন প্ল্যাটফর্মে অনেকগুলি বিভিন্ন প্যাকেজ ম্যানেজার রয়েছে, তাই আপনাকে সমস্ত সাধারণের জন্য প্যাকেজ সরবরাহের জন্য কিছু কাজ করতে হবে।
পদক্ষেপ 5. আপনার প্রোগ্রামের দিকে সরাসরি মনোযোগ দিন।
উবুন্টু এবং ডেবিয়ান বজায় রাখার মতো একটি বড় প্যাকেজ সংগ্রহস্থলে আপনার প্রোগ্রাম আপলোড করার কথা বিবেচনা করুন, যাতে সহজেই ইনস্টল করা যায়। এছাড়াও, উপযুক্ত ফোরামে পোস্ট করুন, যেমন GameDev এর প্রকল্প বিভাগ বা tigSource- এর একটি অংশ। কিন্তু আপনার প্রথম গেম বিখ্যাত না হলে হতাশ হবেন না। আপনার যদি ধারণা থাকে যে অনেক লোক এটি পছন্দ করে, আপনার খেলাটি সুপরিচিত হয়ে উঠতে পারে।
পরামর্শ
- ধৈর্য ধরুন এবং শিখতে ইচ্ছুক হন। প্রোগ্রামিং অনেক সময় হতাশাজনক হতে পারে!
- যদি আপনি আশ্চর্য হন যে অন্য গেমটিতে কীভাবে কিছু করা হয় এবং গেমটি ওপেন সোর্স হয়, আপনি এর সোর্স কোডটি দেখতে পারেন।
- মিডিয়ার সন্ধান করার সময়, সর্বজনীন ডোমেনে থাকা সামগ্রী খুঁজে বের করার চেষ্টা করুন। "ক্রিয়েটিভ কমন্স" বা "পাবলিক ডোমেইন" ছবি এবং সঙ্গীত অনুসন্ধান করুন এবং https://opengameart.org বা https://publicdomainpictures.net এর মতো ওয়েবসাইট ব্যবহার করুন।
- লাইসেন্স চেক না করে কোডের বড় অংশ কপি করবেন না। এটি প্রায়ই নিষিদ্ধ, এবং যদি না হয়, সাধারণত অ্যাট্রিবিউশন প্রয়োজন।
- আপনার খেলা প্রচার করার সময় স্প্যাম বা অনুপযুক্ত জায়গায় পোস্ট করবেন না। এটি আপনাকে পৃষ্ঠা থেকে অবরুদ্ধ করার সম্ভাবনা রয়েছে, এটি কেবল বিরক্তিকর এবং আপনার খ্যাতি ক্ষতি করবে।