কোনও খেলোয়াড় কোনও কৃতিত্ব সম্পন্ন করেছে কিনা আমি কীভাবে পরীক্ষা করব?


13

আমি একটি এমএমও গেম তৈরি করছি এবং আমি কেবল একটি পর্যায়ে পৌঁছেছি যেখানে আমার অর্জনগুলি বাস্তবায়ন করা দরকার ... আমি কীভাবে এটি করব? সবচেয়ে সোজা ফরোয়ার্ড জিনিস হ'ল এটি প্রতি 100 মিমি একবার চালানো হবে:

for a in achievements
    for p in players
        if a.meetsRequirements(p) then p.completeAchievement(a)

তবে এটি আরও আরও জটিলতা সৃষ্টি করে। উদাহরণস্বরূপ, কৃতিত্বটি আসলে সম্পন্ন হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করব? খেলোয়াড়দের কি কেবল একটি নির্দিষ্ট কৃতিত্বের জন্য কাস্টম সম্পত্তি আছে? আমি এই ধরণের জিনিসটি অনুসন্ধানের সাথে করেছি, কারণ তারা মূলত "100 কাঠ সংগ্রহ", তাই কোনও খেলোয়াড়ের সক্রিয় ক্রয়েস্টগুলি এটি পরীক্ষা করে। এছাড়াও, এটি যাচাই করার জন্য আরও ভাল সময় থাকতে হবে, এটি আমার সার্ভারটি পর্যায়ক্রমে কমিয়ে দেয় slow


7
ক্রিয়াগুলি সম্পন্ন হওয়ায় কেবল প্রাসঙ্গিক চেকগুলি চালাবেন না কেন? উদাহরণস্বরূপ, যদি ব্যবহারকারী কাঠ সংগ্রহ করেন তবে দেখুন যে তারা "100 কাঠ সংগ্রহ করুন" নির্দিষ্টকরণের সাথে মেলে কিনা।
মাইক ক্লক

1
এই ধরণেরটি খুব অগোছালো মনে হচ্ছে ... সর্বত্র প্রচুর টন চেক থাকবে। আমি মনে করি এটির সরলতার কারণে আমি উপরের অ্যালগরিদমে আটকে যাব ...
jcora

10
এটিকে কম অগোছালো করার উপায় রয়েছে: যেমন "অন চেঞ্জ" ইভেন্ট হ্যান্ডলার থাকার পরে তাদের সাথে কৃতিত্ব "অবজেক্ট" সংযুক্ত করে এবং সেখানে যুক্তি পরিচালনা করে handle আপনার বর্তমান সেটআপের সাথে আপনার জটিলতার একটি O (n ^ 2) স্তর রয়েছে যার অর্থ আপনার গেম আরও অক্ষরগুলির সাথে আরও ধীর হয়ে যায়। কোনও এমএমওর জন্য সমস্যার ধরণ
মাইক ক্লাক

সংশ্লিষ্ট: gamedev.stackexchange.com/questions/908/...
Tetrad

উত্তর:


23

আপনি যা করেন তা অর্জনের প্রকৃতির উপর নির্ভর করে। আপনার কৃতিত্বগুলি যদি একটি সাধারণ প্যাটার্নে ফিট না হয় (Ys এর X সংখ্যা সংগ্রহ করুন), আপনি কিছুটা ডিগ্রি নিয়ে বিশেষ বিশেষায়িত হতে চলেছেন।

একটি বার্তা-ভিত্তিক যোগাযোগ ব্যবস্থা ব্যবহার করে, আপনি এমন হুক সরবরাহ করতে পারেন যা বিশেষ ক্ষেত্রে কোডিং স্থানীয়করণ করে makes শ্রোতাদের কাছে যারা নিবন্ধন করেছেন তাদের কাছে আপনার কাছে কিছু ক্রিয়া ফায়ার বার্তা থাকতে পারে। তারপরে আপনার কৃতিত্বের কোড / স্ক্রিপ্ট যথাযথ শ্রোতার সাথে নিজেকে নিবন্ধিত করতে পারে এবং কৃতিত্বকে সরিয়ে দেওয়ার জন্য যা পরীক্ষা করা প্রয়োজন তা করতে পারে।

আপনার কাছে সাধারণ ইভেন্টগুলির জন্য বার্তা থাকবে যা আপনি শুনতে শুনতে সাফল্য পেতে পারেন। "প্লেয়ার আইটেম এক্স" বা "সত্তা ওয়াই মেরেছেন সত্তা জেড" এর মতো জিনিস। এইভাবে, আপনি খেলোয়াড় মারা গেছে এমন কতগুলি জেড এর মতো জিনিসগুলি ট্র্যাক করতে পারেন।

কৃতিত্বের জন্য কোনও সিস্টেমের জন্য এটি আপনি সবচেয়ে ভাল করতে পারেন। এটি যথাসম্ভব কোডটিকে কেন্দ্রিক করে তুলেছে এবং আসল কৃতিত্ব সনাক্তকরণের জন্য শ্রোতাদের উপর জোর দেয়।

এছাড়াও, এটি লক্ষণীয় হওয়া উচিত যে কেন্দ্রীভূত কৃতিত্ব সিস্টেমগুলির জন্য (এক্স-বক্স লাইভ, বাষ্প অর্জন), সাফল্যের দিকে অগ্রগতি সাধারণত সার্ভারে সঞ্চিত থাকে। সুতরাং সংগ্রহের কৃতিত্বের জন্য ("টাস্কের XY সংখ্যা বার করুন"), এক্স সঞ্চালিত হওয়ার পরে কৃতিত্বের স্ক্রিপ্টটি সনাক্ত করে সার্ভারের গণনা বাধা দেয়। অন্যান্য ধরণের কৃতিত্বের জন্য ("টাস্ক এক্স সম্পাদন করুন"), সার্ভারের কৃতিত্ব বাইনারি: হয় আপনি এটি সম্পন্ন করেছেন, অথবা আপনি করেননি।


+1 এটি দুর্দান্ত তথ্য। এমনকি এই সময়ে সাফল্য বাস্তবায়নের প্রয়োজন ছাড়াই আমাকে দরকারী।
জোশুয়া হেজেস 21

ধন্যবাদ! এই বাস্তবায়ন করার জন্য অপেক্ষা করতে পারে না, আমি আগে এই ধারণা ছিল না ...
jcora

3

আপনার কৃতিত্বের প্রকৃতির উপর নির্ভর করে আপনি এক ধরণের "চিহ্নিতকারী সাফল্য" প্রবর্তন করতে পারেন।

আপনার যদি উদাহরণস্বরূপ 3 টি সাফল্য থাকে:
কাঠ 1 - 100 কাঠ
কাঠ 2 সংগ্রহ করুন - 500 কাঠের
কাঠ সংগ্রহ করুন 3 - 1 কে কাঠ সংগ্রহ করুন

তারপরে প্লেয়ারটি সম্পন্ন না করা পর্যন্ত প্রথম কৃতিত্বের জন্য কেবলমাত্র একটি ওনচেঞ্জ ইভেন্টটি নিবন্ধভুক্ত করার অর্থ হবে। সমাপ্তির পরে আপনি পরবর্তী কৃতিত্বের বিষয়টিকে নিবন্ধিত করতে পারেন।

অবশ্যই এটির জন্য একটি সাফল্য নির্ভরতা গাছের নকশা (বা গণনা) প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.