কিভাবে গেমিং মধ্যে সাফল্য সনাক্ত?


10

আমি ভুলবশত এটি স্ট্যাকওভারফ্লোতে পোস্ট করেছি এবং এখন সেই সাইটে একটি পরামর্শের ভিত্তিতে এখানে পোস্ট করছি ...

এটি একটি খুব উচ্চ স্তরের ধারণাগত প্রশ্ন is একটি সফ্টওয়্যার অ্যাপ্লিকেশন বলুন আমার 4 টি বিভিন্ন ক্রিয়া রয়েছে, উদাহরণস্বরূপ: আপলোড, ভাগ করুন, মন্তব্য করুন এবং পছন্দ করুন

এবং আমি ব্যবহারকারীদের মতো কৃতিত্বের ব্যাজগুলি দিতে চাই:

  • রুকি - আপনার প্রথম 5 টি ফাইল আপলোড করুন
  • জাঙ্কি আপলোড করুন - 1 দিনে 20 টি ফাইল আপলোড করুন
  • নাইট ক্রলার - মধ্যরাতের পরে একটি ফাইল আপলোড করুন
  • শেয়ার-এ-হোলিক - 10 টি আলাদা ফাইল ভাগ করুন
  • সমস্ত কিছু পছন্দ - 20 টি আলাদা ফাইলের মতো

আপনি ধারণা পেতে। আমার কোডটিতে কৃতিত্বের জন্য যুক্তি সংকলন না করে কোনও ব্যবহারকারী কোনও বিশেষ অর্জন অর্জন করেছে কিনা তা যাচাই করে দেখার সেরা উপায়টি কী? এবং .. - নতুন কৃতিত্ব পোস্ট সংকলন যোগ করার ক্ষমতা পুনরুদ্ধার করুন (এক্সএমএল বা ডিবি) - অর্জনগুলি অবশ্যই নির্দিষ্ট ক্রিয়াকলাপ, সময়ের সংখ্যা এবং অতিরিক্ত মানদণ্ড (দিনের সময় এর মতো) ট্র্যাক করতে হবে - সনাক্তকরণটি রিয়েল-টাইমের কাছাকাছি হওয়া উচিত যাতে ব্যবহারকারীকে অবহিত করা হয় প্রায় তাত্ক্ষণিকভাবে যখন একটি অর্জন সম্পন্ন হয়

আমার সবচেয়ে বড় প্রশ্ন হ'ল আমি কীভাবে এই সাফল্যগুলি অর্জন হচ্ছে তা সনাক্ত করব? আমি কি:

1) প্রতিটি ক্রিয়াকলাপের পরে যাচাই করে দেখুন কিনা ... (সর্বাধিক বাস্তব সময়) 2) নিয়মের একটি সেটের বিপরীতে অন্য কোনও প্রোগ্রাম সর্বদা ডিবি পরীক্ষা করে দেখুন? (সহজ)

আমি মিস করছি আরও একটি দৃষ্টান্ত আছে? আমি স্পষ্টভাবে মনে করি কারণ অনেক গেমগুলিতে (উদাহরণস্বরূপ আইওএসের জেটপ্যাক), আমি যে তাত্ক্ষণিক মুহূর্তে আনলক করেছি তাতে আমি যে আনলকটি পেয়েছি তা আমি অবাক করেছিলাম যা আমি বেশ চিত্তাকর্ষক বলে মনে করেছি।

ধন্যবাদ


আপনি কি এখনও সাফল্যের সিস্টেমটি ডিজাইন করেছেন বা তৈরি করেছেন এবং কীভাবে এটি খেলায় ব্যবহার করবেন তা জানতে চান?
হ্যারিসন ব্রক

উত্তর:


6

আপনি সাধারণত যা করেন তা হ'ল একটি "কৃতিত্ব" সিস্টেম। যে কোনও ক্রিয়াকলাপ ঘটে তাকে কৃতিত্ব সিস্টেম বলে এবং "আরে এই জিনিসটি ঘটেছিল" বলে।

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

আপনি এটি করার কারণটি দ্বিগুণ।

  • আপনি আপনার কোডবেস জুড়ে আপনার রাষ্ট্র যুক্তি ছড়িয়ে দিতে চান না।

  • কখনও কখনও কৃতিত্বের জন্য "স্টাফ" এর সংমিশ্রণের প্রয়োজন হয় যা সম্পূর্ণ ভিন্ন সিস্টেম / সময় / ইত্যাদিতে ঘটতে পারে এবং আপনার কোড বেসের চারপাশে এর জন্য যুক্তি ছড়িয়ে দেওয়ার ফলে বিপুল পরিমাণে বিনা শর্তে জটিলতা তৈরি হতে পারে।

অতীতে আমি যেভাবে এটি করেছি তা হ'ল স্ক্রিপ্টযোগ্য বিধি ব্যবস্থা ব্যবহার করা (যেখানে স্ক্রিপ্টযোগ্য খুব আলগা শব্দ, সাধারণত কিছুটা ডেটা চালিত তুলনামূলক)। সুতরাং আপনি এর মতো কিছু বলতে পারেন:

  • "ব্যবহারকারী কিছু চাপলে" ঘটে "ইনক্রিমেন্ট" "চাপানো" ভেরিয়েবল।

তারপরে আপনার আর একটি নিয়ম থাকতে পারে

  • যখন "চাপা" ভেরিয়েবলটি "কিছু মান" হাতছাড়া কৃতিত্ব "ব্লাহ" এর চেয়ে "বৃহত্তর" হয়

অথবা সম্ভবত

  • "ব্যবহারকারী বসকে মেরে ফেললে" ঘটে যায় "কৃতিত্ব" ব্লাহ "।

কৃতিত্ব সিস্টেমটি এমন অবস্থা বজায় রাখার জন্যও কাজ করা হবে যা ইতিমধ্যে কৃতিত্বগুলি অর্পণ করা হয়েছে, যাতে আপনি সদৃশগুলি পান না।


0

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

AchievementType ShareAHolic = new AchievementType
{
    Name = "Share-a-holic",
    Description = "Shared 10 files",
    Score = 25,
    Specification = (user => user.SharedFiles.Distinct().Count() > 10)
};

AchievementManager.AddAchievementType(ShareAHolic);

এবং তারপরে উপযুক্ত পর্যায়ে আপনার কৃতিত্ব পরিচালক এই জাতীয় কিছু করতে পারেন:

foreach (AchievementType achievement in AchievementTypes)
{
    var users = DB.Users.Where(achievement.Specification && !(user.Achievements.Contains(achievement)));
    foreach (User u in shareaholics)
    {
        AchievementManager.Award(u, achievement);
    }
}

আপনার কৃতিত্বের পরিচালকের .Award()পদ্ধতিটিকে সরাসরি উপযুক্ত পয়েন্টেও ডাকা যেতে পারে যদি কোনও সাফল্য তত্ক্ষণাত সনাক্ত করা যায়। আপনি কোনও নির্দিষ্ট ব্যবহারকারীর উপর এই চেকগুলি চালনার জন্য একটি পদ্ধতি যুক্ত করতেও পারেন, যাতে ব্যবহারকারীরা তত্ক্ষণাত কৃতকার্যতা অর্জনের জন্য গুরুত্বপূর্ণ ইভেন্টগুলির পরে একটি চেক ট্রিগার করতে পারেন।


পার্টিশন প্রাপ্তিগুলি দ্রুত গুরুত্বপূর্ণ হয়ে ওঠে, অ্যাচটাইপটির একটি 'সোপ' সম্পত্তি প্রয়োজন যা ডিবি.উউসওয়ার্সকে সহায়তা করতে পারে W যেখানে সম্ভব যখন সাবলীল সাফল্য এড়ানোর জন্য কোথায় ()। সুতরাং যদি ফাইল ভাগের অর্জনটি কেবল পিভিপি-তে পুরষ্কার দেওয়া যায় তবে কেবল পিভিপি অনুসন্ধান করুন। যদিও লুটপাটের মতো জেনেরিক কিছু বিশ্বব্যাপী কার্যকর হতে পারে এবং এরকম সুযোগ নেই।
এইচপিএভিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.