ইউআই কোড থেকে পদার্থবিজ্ঞান এবং গেম যুক্তি পৃথক করে


12

আমি একটি সাধারণ ব্লক-ভিত্তিক ধাঁধা গেম নিয়ে কাজ করছি।

গেম প্লেটি গেমের অঞ্চলে প্রায় চলমান ব্লককে ধারণ করে, তাই এটি একটি তুচ্ছ পদার্থবিজ্ঞানের সিমুলেশন। আমার বাস্তবায়নটি যদিও আমার মতে আদর্শের থেকে অনেক দূরে এবং আমি ভাবছি যে আপনি কীভাবে এটি আরও ভাল করে করবেন সে সম্পর্কে কোনও পয়েন্টার দিতে পারেন কিনা।

আমি কোডটি দুটি ভাগে বিভক্ত করেছি: গেম যুক্তি এবং ইউআই, যেমন আমি প্রচুর ধাঁধা গেমস দিয়েছিলাম:

  • গেমের যুক্তি গেমের সাধারণ নিয়মের জন্য দায়ী (যেমন দাবাতে আনুষ্ঠানিক নিয়ম ব্যবস্থা)
  • ইউআই গেমের ক্ষেত্র এবং টুকরা (উদাহরণস্বরূপ দাবা বোর্ড এবং টুকরো) প্রদর্শন করে এবং অ্যানিমেশনগুলির জন্য দায়ী eg

গেম লজিক গেমের অবস্থাটিকে লজিক্যাল গ্রিড হিসাবে প্রতিনিধিত্ব করে, যেখানে প্রতিটি ইউনিট গ্রিডের একক ঘরের প্রস্থ / উচ্চতা। সুতরাং প্রস্থ 6 এর গ্রিডের জন্য, আপনি সীমার সাথে সংঘর্ষ না হওয়া পর্যন্ত আপনি ২ টি প্রস্থের একটি ব্লকটি চারবার সরিয়ে নিতে পারেন।

ইউআই এই গ্রিডটি গ্রহণ করে এবং লজিকাল আকারকে পিক্সেল আকারগুলিতে রূপান্তরিত করে (এটি, একটি ধ্রুবক দ্বারা এটিকে গুণ করে) ws তবে, যেহেতু গেমটির কোনও গেম যুক্তিই কমই আছে, আমার গেম লজিক লেয়ার [1] সংঘর্ষ সনাক্তকরণ ব্যতীত আর কিছু করার নেই do এখানে কিভাবে এটা কাজ করে:

  1. প্লেয়ার একটি টুকরা টানতে শুরু করে
  2. ইউআই সেই টুকরোটির আইনী চলাচলের ক্ষেত্রের জন্য গেমের যুক্তি জিজ্ঞাসা করে এবং প্লেয়ারটিকে সেই অঞ্চলে টেনে আনতে দেয়
  3. খেলোয়াড় একটি টুকরা যেতে দেয়
  4. ইউআই টুকরা গ্রিডে স্ন্যাপ করে (যাতে এটি কোনও বৈধ যৌক্তিক অবস্থানে থাকে)
  5. ইউআই গেম যুক্তিকে নতুন যৌক্তিক অবস্থানের কথা বলে (পরিবর্তক পদ্ধতিগুলির মাধ্যমে যা আমি এড়াতে পারি)

আমি এতে খুশি নই:

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

আমি মনে করি সবচেয়ে ভাল কাজটি হ'ল আমার গেম লজিক স্তর থেকে মুক্তি পাওয়া এবং পরিবর্তে একটি পদার্থবিজ্ঞানের স্তরটি প্রয়োগ করা। আমি সে সম্পর্কে কয়েকটি প্রশ্ন পেয়েছি:

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

[1] স্তরটি আমার অর্থটির জন্য সম্ভবত সঠিক শব্দ নয়, তবে সাবসিস্টেমটি ওভারব্লোন শোনায় এবং শ্রেণীটি বিপথগামী, কারণ প্রতিটি স্তরটি বেশ কয়েকটি শ্রেণীর সমন্বয়ে থাকতে পারে।


আমার উত্তরটি কি সাহায্য করেছে, আরও কোনও তথ্যের দরকার আছে?
উইল মারকুইলারের

দয়া করে হয় উত্সাহিত করুন এবং উত্তরটি স্বীকার করুন যদি এটি এই ধরনের কোনও আর্কিটেকচার বা কোনও কিছু বাস্তবায়নে আপনার সমস্যা সম্পর্কে বা বলতে বা সহায়তা করে থাকে তবে আমাদের আপনার পরিস্থিতি সম্পর্কে অবহিত করুন যাতে আমরা আরও ভালভাবে সহায়তা করতে পারি। =)
মারকুইলারের

উত্তর:


3

আমি এই প্রশ্নের উত্তর দেওয়ার জন্য চেষ্টা করব কারণ আপনি যা জিজ্ঞাসা করছেন তা বুঝতে পারি, যদিও আমি এখনও কেবল শিখছি না বলে আমার কাছে গেম বিকাশের খুব বেশি অভিজ্ঞতা নেই।

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

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

সুতরাং, এই বিষয়টিতে আমার মতামত এখানে রয়েছে - আমি আশা করি এটি সাহায্য করবে:

  1. জিইউআই স্তর: গেমটি নিজেই এবং খেলোয়াড়ের মধ্যে মিথস্ক্রিয়াকে অনুমতি দেওয়ার জন্য এই স্তরটিতে কেবল গেম বোর্ডে টুকরোগুলি প্রদর্শন করার পদ্ধতি থাকবে;
  2. গেম কন্ট্রোলার স্তর: প্লেয়ারের ইনপুটগুলির জন্য দায়ী। এটি সেই স্তর যা কোনও অংশকে বিভিন্ন দিকে সরে যেতে বলা উচিত এবং গেম বোর্ডকে জিজ্ঞাসা করা উচিত যে চলাচলের উপর কোনও সংঘর্ষ হবে কি না;
  3. ব্যবসায়ের স্তর: এই স্তরটিতে আপনার সমস্ত ব্যবসায়িক শ্রেণি থাকবে, এটি হ'ল আপনার গেমের টুকরা এবং গেম বোর্ডের অবজেক্ট যাতে ধাঁধার টুকরা রয়েছে।

এই আর্কিটেকচারে, আপনার জিইউআই স্তরটি গেম স্টেটের প্লেয়ার, ধাঁধার প্রতিটি টুকরোয়ের অবস্থান প্রদর্শন করবে। এরপরে জিইউআই স্তরটি খেলোয়াড়ের ইনপুট পাওয়ার জন্য এবং এটিকে অন্তর্নিহিত গেম কন্ট্রোলার স্তরে সরবরাহ করার জন্য দায়ী, যা সংঘর্ষ সনাক্তকরণের জন্য দায়ী। যদি কিছুই না থাকে তবে টুকরোটি সেই ইনপুট দিকটিতে যাওয়ার আদেশ দেওয়া যেতে পারে। এটি করতে, আপনাকে কেবল এই টুকরোটির কল করতে হবে MoveLeft,MoveRight, ইত্যাদি পদ্ধতিতে টুকরোটি সরানো। আপনি সেইসাথে গেম বোর্ডকে জানান যে আপনি কোন টুকরোটি সরতে চান এবং তারপরে এটি নিজেই টুকরোটির চলাফেরার আদেশ দেয় এবং টুকরোটি তারপরে দাবিতে চলে যায়। এই আর্কিটেকচারটি প্রতিটি স্তরের কোডের বিভিন্ন স্তরকে পরীক্ষার জন্য সহজ করে তোলে এবং তারপরে আপনাকে ইউনিট পরীক্ষা, ইন্টিগ্রেশন টেস্টিং এবং কার্যকরী পরীক্ষার জন্য অনুমতি দেয়।

আমি জানি এটি দেখতে কিছুটা বিভ্রান্ত বলে মনে হতে পারে এবং !শ্বরকে ধন্যবাদ দিও যদি তা না হয়! আপনার যদি আরও বিশদ বিবরণ এবং সহায়তার প্রয়োজন হয়, দয়া করে নির্দ্বিধায় জিজ্ঞাসা করুন, আমি গেম বিকাশের একজন শিক্ষানবিস হওয়া সত্ত্বেও আমি যথাসাধ্য সাহায্য করতে পেরে খুশি হব।

পড়ার জন্য ধন্যবাদ! =)


2
যা মডেল ভিউ কন্ট্রোলারের সাথে খুব মিল বলে মনে হচ্ছে।
দশ

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

আমি অবাক হয়েছি এখানে এত জটিল, যেহেতু আমরা একটি ধাঁধাটির টুকরো একটি সীমিত গেম বোর্ডের দিকে নিয়ে যাচ্ছি। নিয়ন্ত্রণগুলি জিইউআই থেকে পাওয়া গেছে, এটি হ'ল সত্য উপায় এবং এটি একটি বিমূর্ত স্তরতে চলে যায়, যা গেম নিয়ামক। গেম কন্ট্রোলার চলাচলের পরে সংঘর্ষের জন্য পরীক্ষা করে, তারপরে কোনও সংঘর্ষ সনাক্ত না হলে টুকরো টুকরো টুকরো টানতে বলে। ধাঁধার টুকরোটি পরে অনুরোধিত দিকের দিকে যথাযথভাবে সরে যায় এবং তার Positionসম্পত্তি গেটর ফাংশনের মাধ্যমে তার নতুন অবস্থানটি প্রকাশ করে , যাতে গেম নিয়ামককে এখন এই নতুন স্থানটিতে স্থানান্তরিত টুকরোটি প্রদর্শন করার জন্য জিইউআই প্রয়োজন।
উইল মারকুইলারের

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

1
দেরিতে গ্রহণের জন্য দুঃখিত, দুর্ভাগ্যক্রমে আমি কিছুক্ষণের জন্য প্রকল্প থেকে দূরে ছিলাম। আমি সত্যিই নিয়ন্ত্রণকারী পদ্ধতির পছন্দ করি, আমি এটি গ্রহণ করব!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.