দ্য গ্রেট উইম্পাস হান্ট


22

সম্পূর্ণ

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

এটি ওম্প্পাসে উন্মুক্ত মরসুম এবং বিশ্বজুড়ে শিকারিরা মূল্যবান Wumpus Pelts থেকে সমৃদ্ধ হওয়ার চেষ্টা করার জন্য উম্পাস গুহাগুলিতে ছুটে আসছেন।

খেলাাটি

কয়েকটি ভিন্নতার সাথে ক্লাসিক হান্ট দ্য উইম্পাস গেমের উপর ভিত্তি করে ।

মানচিত্র

একটি ডোডেকহেড্রন । 20 টি কক্ষ রয়েছে, প্রত্যেকটি 3 টি অন্য কক্ষে সংযুক্ত রয়েছে, এর মধ্যে ব্রিজের সাথে মূলত 3 টি রিং তৈরি করে।

উম্পাস

উম্পাস একটি রহস্যময় পশু। এটির মতো দেখতে কোনওটিই নিশ্চিত নয়, তবে সকলেই সম্মত হন যে এটি হিংস্র। উম্পাস গুহায় থাকেন এবং মৃত জিনিস খেতে পছন্দ করেন। যদি উম্পাসের পাশের একটি গুহায় একটি মৃতদেহ থাকে তবে সে সেখানে গিয়ে তা খেয়ে ফেলবে। যদি উইম্পাস শিকারী সম্বলিত গুহায় চলে যাওয়ার ঘটনা ঘটে তবে সে তাদের মেরে ফেলবে এবং সেগুলিও খাবে। যদি উম্পাস তার কাছে একটি তীর শুনতে পান তবে তিনি আতঙ্কিত হয়ে এলোমেলো ঘরে চলে যাবেন।

Alচ্ছিক বৈশিষ্ট্য : এগুলি বর্তমানে গেমটিকে আরও আকর্ষণীয় করার জন্য অন্তর্ভুক্ত করা হয়েছে, তবে তারা যদি খুব বেশি এলোমেলো যোগ করে তবে জনপ্রিয় অনুরোধে এটি সরানো যেতে পারে।

রাগান্বিত Wumpus: যদি Wumpus গুলি করা হয়, তার 20% বেঁচে আছে এবং 3 দিনের জন্য ছড়িয়ে পড়েছে। ছড়িয়ে পড়ার সময়, তিনি এলোমেলোভাবে দিনে দু'বার সরে যাবেন, তবে এখনও শবদেহের প্রতি আকৃষ্ট হন। 3 দিন পরে তিনি মারা যাবেন। দ্বিতীয় তীরের শটটিও উইম্পাসকে মেরে ফেলবে।

ঘুরে বেড়ানো Wumpus: প্রতিটি দিন, যদি ডুব্পাসকে আর কিছু না চালায় তবে তার চলার 25% সম্ভাবনা রয়েছে।

শিকারিরা

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

শিকারীদের দুটি ক্রিয়া থাকে: গুলি বা চালানো move একটি শিকারি সংলগ্ন ঘরে বা তার নিজের ঘরে তীর গুলি করতে পারে এবং একইভাবে চলতে পারে।

গেমপ্লের

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

সমস্ত শিকারী চালনের পরে, উইম্পাস সাড়া দেবে। যদি কোনও শিকারি উম্পাসের সাথে ঘরে hasুকে পড়ে তবে উম্পাস তাকে খায়। যদি উম্পাস নড়াচড়া করে তবে এটি নতুন ঘরের দখলকারীদেরও খাবে।

১০০ দিন পরে, যদি শিকারিরা উম্পাসকে হত্যা না করে বা শিকারে পড়ে না থাকে তবে তারা গুহাদের মধ্যে অনাহারে মারা যাবে।

কোড

সমস্ত উত্স কোড এখানে পাওয়া যাবে । সমস্ত জমাগুলি জাভাতে হওয়া উচিত, যদি না কেউ আমাকে স্টডিআইএন / স্টডিআউট অ্যাডাপ্টার লিখতে চায়;)

বটের হান্টার শ্রেণি প্রসারিত করা উচিত। আপনার হান্টারের নামকরণের জন্য, নাম ক্ষেত্র নির্ধারণ করে এমন কোনও প্যারামিটার সহ একটি নির্মাণকারী যুক্ত করুন or টি ও প্রতিক্রিয়া জানুন, getResponse ফাংশনটি ওভাররাইড করুন। এই ফাংশনটিতে, প্রতিটি ঘুরে, আপনাকে 5 টি বুলিয়ান সরবরাহ করা হবে যা আপনাকে আপনার চারপাশের কথা বলে।

স্থিতি 0 = "আপনি একটি গলদ গন্ধ"

স্থিতি 1 = "আপনি অন্য শিকারি শোনেন"

স্থিতি 2 = "আপনি একটি লাশের গন্ধ পান"

স্থিতি 3 = "আপনি একটি তীর ক্লাটার শুনেছেন"

স্থিতি 4 = "আপনি নিজের মতো একই ঘরে অন্য শিকারী বোধ করছেন"

হান্টার ক্লাসে 2 টি স্লট রয়েছে: নেক্সটমোভ এবং নেক্সট ডাইরেকশন, যা যথাক্রমে এনভাম মুভ এবং ডাইরেক্টেশন ব্যবহার করে। সরানো হয় মুভি বা শট হতে পারে, দিকনির্দেশ বাম, ডানদিকে, ব্যাক বা এখানে হতে পারে। দিকনির্দেশগুলি সামঞ্জস্যপূর্ণ, অর্থ পিছনে সর্বদা আপনাকে আগের ঘরে ফিরে আসবে এবং যদি একই ঘর থেকে প্রবেশ করা হয় তবে বাম এবং ডানদিকে সর্বদা একই থাকবে। তবে, আপনি অন্য দিক থেকে প্রবেশ করলে, বাম এবং ডানদিকে আপনাকে আলাদা জায়গায় নিয়ে যাবে।

পাশাপাশি নিজের পদ্ধতি প্রয়োগ করতে নির্দ্বিধায় পুরো টুর্নামেন্টে স্মৃতি অবিচল থাকে, যার অর্থ আপনার শিকারী কেবল একবারই নির্মিত হবে। যাইহোক, প্রতিটি রাউন্ডের শুরুতে, আপনার শিকারীকে জানাতে একটি নতুন গেম শুরু হয়েছে বলে নতুন গেম () পদ্ধতিটি কল করা হয়।

স্কোরিং

এক সাথে চারটি শিকারী প্রতিযোগিতা করে। যদি হত্যা করা হয় তবে উম্পাস পেলেটের মূল্য 60 পয়েন্ট, সমস্ত বেঁচে যাওয়া শিকারীর মধ্যে সমানভাবে বিভক্ত। পুরো রাউন্ড রবিন স্টাইল, সুতরাং 4 টি শিকারীর প্রতিটি সমন্বয় এক সাথে খেলবে।

5 নমুনা শিকারি অন্তর্ভুক্ত করা হয়েছে: 4 খুব মৌলিক কার্যকারিতা সহ, এবং একটি যা পরীক্ষার উদ্দেশ্যে ব্যবহারকারীদের ইনপুটটি খেলতে দেয়।

আপনার যদি কোনও পরামর্শ / অনুরোধ থাকে তবে দয়া করে আমাকে জানান!

শেষ দেখিতে হয়!

ওয়ারম্পস জনসংখ্যার আশঙ্কাজনক হারে শিকার করা হচ্ছে। প্রোটেক্ট আওয়ার ওম্প্পাস আইনটি বুধবার, 17 জুন পাস হওয়ার কথা রয়েছে। এই তারিখের পরে, গুহায় আর কোনও শিকারীকে অনুমতি দেওয়া হবে না এবং একটি বিজয়ী বেছে নেওয়া হবে।

স্কোরবোর্ড

দ্রষ্টব্য: আমার ক্ষমা, কোডটিতে একটি বাগ ছিল যা একাধিক গেমের মাধ্যমে শিকারীদের মরে থাকতে পারে। এটি স্থির করে নেওয়ার পরেও এটি সামগ্রিক র‌্যাঙ্কিংয়ে খুব বেশি পরিবর্তন করে না, তবে পরিসংখ্যানকে মূলত পরিবর্তন করে।

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

1. NascarHunter : 16557175 (17.08)
2. FullCoverageHunter : 15195545 (15.68)
3. Trig : 14459385 (14.92)
4. Idomeneus : 13428570 (13.85)
5. Eats Shoots and Leaves : 12763945 (13.17)
6. WalkingIdiot : 12329610 (12.72)
7. NealHunter : 12287140 (12.68)
8. Unnamed : 11013720 (11.36)
9. MonsterHunter : 10686035 (11.02)
10. Pacer : 9187000 (9.48)
11. Badger : 9042570 (9.33)
12. Stay : 8721210 (9.0)
13. Emo Wumpus : 7831050 (8.08)
14. Paranoid : 7722965 (7.97)
15. Huddle : 7465420 (7.7)
16. ElmerFudd : 7245995 (7.47)
17. Laomedon : 6963845 (7.18)
18. Pacifist : 6944960 (7.16)
19. ScaredyCat : 6937370 (7.15)
20. Wumpus : 114170 (0.11)



Total rounds: 4845000
Humans killed by arrows: 5289674 (1.09)
Humans dead by starvation: 1046024 (0.21)
Humans killed by wumpus: 1887634 (0.38)
Wumpus victories: 1563372 (0.32)

1
আপনি কি একটি তীর দিয়ে অন্য শিকারীকে আঘাত করতে পারেন?
মেগাটম

1
ইয়াসির, বা আপনি যদি এখানে একটি তীর চিহ্ন করেন এখানে
কেইন

1
5 বুলিয়ানগুলির জন্য অ্যারের পরিবর্তে, কেন কেবল intমূল্যবান 0-31 পাস করবেন না ? আমরা এখানে বড় ছেলেরা, আমরা কিছুটা অপারেশন করতে পারি :)
ডক্টরহেকল

1
@ ডক্টরহেকল নিশ্চিত যে আমরা আছি তবে একক ইনট এর চেয়ে অ্যারে থাকা আরও দেব-বান্ধব ^^
কাটেনকিও

1
তীর এবং মৃতদেহের জন্য, যদি কেউ একই ঘরে থাকে তবে আপনি একই স্থিতিটি পেয়ে যাবেন যেন এটি সংলগ্ন। শিকারীরা কেবলমাত্র আপনি ঘরের পাশে বা ঘরের মধ্যে পার্থক্য করতে পারবেন।
কেইন

উত্তর:


11

NascarHunter

এটি খুব যুক্তি না। এর বিধিগুলি সহজ: বাম দিকে ঘুরুন, জ্বলন্ত পৃথিবী, পুনরাবৃত্তি করুন। এবং, আরে, সে ভাগ্যবান হতে পারে!

8 জুন সম্পাদনা:

তার শেষ পদক্ষেপের তুলনায় কোনও উইম্পাসের সংলগ্নতার জন্য ন্যাসকারকে অতিরিক্ত যুক্তিতে যুক্ত করা হয়েছে। থিমে থাকার জন্য এটি একটি গর্তের স্টপ বিবেচনা করুন। যদি কোনও হলওয়ে শ্যুট করার পরে যদি কোনও ওয়াম্পাসকে অনুভূত হয় তবে এটি অবশ্যই অন্য দুটি সংলগ্ন কক্ষের একটিতে এসে পৌঁছেছে, যেহেতু এটি শিকারী সবেমাত্র নেওয়া শটে মারা গিয়েছিল। এটি কার্যকরভাবে ডুব্পাসকে আবার বাসাতে না পারার জন্য বেঁচে থাকার 2 টি মোড় দেয় বা নাস্কার 1 টার্নটি যদি সে মৃতদেহের উপরে দাঁড়িয়ে থাকে তবে বেঁচে থাকুক। এটি যদি প্রথম বার হয় তবে তৃতীয় বিকল্পের জন্য অ্যাকাউন্ট করে just আমি শেষ পর্যন্ত এফসিএইচ-এ বন্দরে যাব, ব্যস্ত ব্যস্ত।

package Hunters;

import Mechanics.*;

public class NascarHunter extends Hunter {

    private int state;
    private boolean shootHall;
    private boolean newGame;

    public NascarHunter(){

        name = "NascarHunter";
        state = 0;
        shootHall = true;
        newGame = true;

    }

    public void newGame(){

        state = 0;
        newGame = true;

    }

    public void getResponse(boolean[] status){

        // Wumpus about - stand and deliver
        if( status[0] ){

            nextMove = Move.SHOOT;

            switch( state ){

            case 0: // Must be in either Right or Back
                if(newGame){

                    // try Left if this is the first turn, just in case
                    nextDirection = Direction.LEFT;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.BACK;
                else               nextDirection = Direction.RIGHT;
                shootHall = !shootHall;
                break;
            case 2: // Must be in either Left or Back
                if(newGame){

                    // try Right if this is the first turn, just in case
                    nextDirection = Direction.RIGHT;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.BACK;
                else               nextDirection = Direction.LEFT;
                shootHall = !shootHall;
                break;
            default: // Must be in either Left or Right
                if(newGame){

                    // try Back if this is the first turn, just in case
                    nextDirection = Direction.BACK;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.RIGHT;
                else               nextDirection = Direction.LEFT;
                shootHall = !shootHall;
                break;

            }

        }else{

            // disregard state, shove out and light 'em up!
            switch( state ){

            case 0: // move out
                nextMove = Move.MOVE;
                nextDirection = Direction.LEFT;
                state++;
                break;
            case 1: // shoot right
                nextMove = Move.SHOOT;
                nextDirection = Direction.RIGHT;
                state++;
                break;
            case 2: // shoot behind
                nextMove = Move.SHOOT;
                nextDirection = Direction.BACK;
                state++;
                break;
            case 3: // shoot left
                nextMove = Move.SHOOT;
                nextDirection = Direction.LEFT;
                state = 0;
                break;

            }

        }

    }

}

FullCoverageHunter

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

আমি এটি উল্লেখ করতে চাই যে এটি আমাদের বন্ধু, মনস্টার হান্টারের চেয়ে আলাদা, কারণ তিনি কোনও কৌশল বা কোনও বাস্তব "কৌশল" ব্যবহার করেন না। এর শক্তি এই যে প্রতিটি ঘরে আবার জ্বলজ্বল হয়: হ'ল বক্ষ শক্তি সমাধান solution এটি ন্যাসকারহান্টারের উপর একটি তাত্ত্বিক লেগ আপ রয়েছে, যেহেতু নাস্কার কেবলমাত্র 20 টির মধ্যে 10 টি কক্ষকে আঘাত করবে, কেবলমাত্র অর্ধেক অঞ্চল জুড়ে।

11 জুন সম্পাদনা:

ন্যাসকারহান্টার থেকে উম্পাস সনাক্তকরণ লজিক প্যাটার্নে যুক্ত করা হয়েছে। উদ্দেশ্যমূলকভাবে স্কোর উন্নত করা উচিত।

package Hunters;

import Mechanics.*;

public class FullCoverageHunter extends Hunter {

    private int state;
    private boolean headLeft;
    private boolean shootHall;
    private boolean newGame;

    public FullCoverageHunter(){

        name = "FullCoverageHunter";
        state = 0;
        headLeft = false;
        shootHall = true;

    }

    public void newGame() {
        state = 0;
        headLeft = false;
        newGame = true;
    }


    public void getResponse(boolean[] status){

        // Wumpus about - stand and deliver
        if( status[0] ){

            nextMove = Move.SHOOT;

            switch( state ){

            case 0: // Must be in either Right or Back
                if(newGame){

                    // try Left if this is the first turn, just in case
                    nextDirection = Direction.LEFT;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.BACK;
                else               nextDirection = Direction.RIGHT;
                shootHall = !shootHall;
                break;
            case 2: // Must be in either Left or Back
                if(newGame){

                    // try Right if this is the first turn, just in case
                    nextDirection = Direction.RIGHT;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.BACK;
                else               nextDirection = Direction.LEFT;
                shootHall = !shootHall;
                break;
            default: // Must be in either Left or Right
                if(newGame){

                    // try Back if this is the first turn, just in case
                    nextDirection = Direction.BACK;
                    newGame = false;

                }
                else if(shootHall) nextDirection = Direction.RIGHT;
                else               nextDirection = Direction.LEFT;
                shootHall = !shootHall;
                break;

            }

        }else{

            // disregard state, shove out (in an alternating fashion!) and light 'em up!
            switch( state ){

            case 0: // move out, change alternation state
                nextMove = Move.MOVE;
                if(headLeft) nextDirection = Direction.LEFT;
                else         nextDirection = Direction.RIGHT;
                state++;
                headLeft = !headLeft;
                break;
            case 1: // shoot into non-exit path
                nextMove = Move.SHOOT;
                if(headLeft) nextDirection = Direction.RIGHT;
                else         nextDirection = Direction.LEFT;
                state++;
                break;
            case 2: // shoot behind
                nextMove = Move.SHOOT;
                nextDirection = Direction.BACK;
                state++;
                break;
            default: // shoot into next room,
                nextMove = Move.SHOOT;
                if(headLeft) nextDirection = Direction.LEFT;
                else         nextDirection = Direction.RIGHT;
                state = 0;
                break;

            }

        }

    }

}

যদি কোনও ত্রুটি থাকে তবে আমাকে জানান, প্যাকেজটি আমার আইডিইয়ের সাথে ভাল খেলেনি :(


1
আমি খুব নিশ্চিত যে এটিকে ম্যাডম্যাক্সহান্টার বলা উচিত, কারণ আমি যানবাহনের মধ্যে গুলি চালানোর সাথে জড়িত অনেকগুলি ন্যাসকার রেসকে মনে করতে পারি না। ভাল করতে বলে মনে হচ্ছে!
র‌্যাল্ফ মার্শাল

ফুলকভারেজহান্টারকে কাজ করার জন্য যদি বিবৃতিতে আমাকে হেডলফিটের চারপাশে বন্ধনী লাগাতে হয়। আপনার উভয় বট খুব ভাল করে
ন্যাসকারহান্টার

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

উফফফ! হ্যাঁ আমার কাছ থেকে বড় নজরদারি, আমি এখানে এটি সম্পাদনা করব, আমার খারাপ।
ডক্টরহেকল

7

ব্যাজার

তিনি দর্শনার্থীদের পছন্দ করেন না।

package Hunters;

import Mechanics.*;

public class Badger extends Hunter {

    public Badger(){
        name = "Badger";
    }

    @Override
    public void getResponse(boolean[] status){
        nextMove = Move.SHOOT;
        nextDirection = Direction.values()[((int) (Math.random() * 3))];
    }
}

6

এলমার ফুড

"শ্হ্। নেশা ভরা শান্ত হয়ে যাও, আমি শাবক শিকার করছি"

এলমার শিকারে স্থির হয়ে লাশ এবং উম্পাস ব্যতীত সমস্ত কিছু উপেক্ষা করে। তিনি একটি মৃতদেহ সন্ধান করার চেষ্টা করেন তারপরে ব্যাক অফ করে শুটিং শুরু করেন। যদি সে কোনও উম্পাসকে দুর্গন্ধযুক্ত করে তবে সে ফিরে আসবে এবং এখনও যদি তাকে গন্ধ লাগে তবে সে গুলি করবে।

সমস্ত জাভা প্রোগ্রামারদের কাছে আমার ক্ষমাপ্রার্থনা, এটি সম্ভবত অত্যন্ত কুরুচিপূর্ণ, সিনট্যাক্স ত্রুটি দ্বারা পূর্ণ এবং সম্ভবত আমি আমার যুক্তিটি গণ্ডগোল করে ফেলেছি।

package Hunters;

import Mechanics.*;

public class ElmerFudd extends Hunter {

    private state int;
    private previousDir int;

    public ElmerFudd(){
        name = "ElmerFudd";
    }

    public void newGame() {
        state=0;
        previousDir = Direction.LEFT;
    }

    public void getResponse(boolean[] status){

        nextMove = Move.MOVE;
        switch (previousDir) {
            case Direction.LEFT:
                nextDirection = Direction.RIGHT;
                break;
            case Direction.RIGHT:
                nextDirection = Direction.LEFT;
                break;
        }   

        if(status[2]&&state==0) {
            state = 1;
            return;
        }

        if(state==1){
            if(status[2]){
                state=2;
            };
            nextDirection = Direction.BACK;
            return;
        }

        if(state==2){
            nextMove = Move.SHOOT;
            nextDirection = Direction.BACK;
            return;
        }

        if(state==3&&status[0])
            nextMove = Move.SHOOT;
            nextDirection = Direction.BACK;
            return;
        }

        if(state==3) {
            state = 0;
        }

        if(status[0]){
            state=3;
            nextDirection = Direction.BACK;
        }

    }
}

শান্তিবাদী

এই লোকটি নৈতিকভাবে যেকোন ধরণের রক্তের খেলাধুলার বিরুদ্ধে এবং তিনি কীভাবে এই পরিস্থিতিতে একেবারে আপ হয়েছেন তা ভাবছেন। তিনি কোনও প্রকারের যোগাযোগ থেকে পালিয়ে যাবেন এবং কখনও কোনও শট নেবেন না।

package Hunters;

import Mechanics.*;

public class Pacifist extends Hunter {


    public Pacifist(){
        name = "Pacifist";
    }

    public void getResponse(boolean[] status){
        nextMove = Move.MOVE;
        if(status[0]||status[1]||status[2]||status[3]||status[4]){
            nextDirection = Direction.values()[((int) (Math.random() * 3))];
            return;
        }
        nextDirection = Direction.HERE;
    }
}

1
আমি মনে করি এটি কাজ করতে পারে। একটি গেমটিতে আপনাকে যা করতে হবে তা হ'ল আশা করা যায় যে কেউ আপনাকে পাওয়ার আগে এবং তার পুরো কৃতিত্ব পাওয়ার আগেই তাকে উইম্পাস পেয়েছে।
রাল্ফ মার্শাল

1
এটাই ছিল সাধারণ ধারণা। অন্যদের কঠোর পরিশ্রম করুন :-)
মিকিটি

1
এই কারণেই আমি আপনাকে কোডটি দেওয়ার জন্য অপেক্ষা করছিলাম, যদিও আমি এটি প্রথমে ভেবেছিলাম :-)
মাওগ

5

মনস্টার হান্টার

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

আমি শেষ নির্দেশনা থেকে মুক্তি পেতে পারি, তবে আমি শব্দার্থবিজ্ঞান এবং পাঠযোগ্যতার জন্য রাখি :)। আসলে, এটি বেশ মারা যায়, তবে নিয়ন্ত্রক প্রায়শই শুরুতে একই ঘরে 2/3 শিকারি রাখতেন এবং প্রায়শই উম্পাসের সাথে থাকতেন (একই ঘরেও থাকতে পারে) ... তাই ইনস্টা মৃত্যু death '।

package Hunters;

import Mechanics.*;

public class MonsterHunter extends Hunter 
{
    private Direction lastDirection=Direction.HERE;
    private boolean[] lastStatus=new boolean[5];
    private int   shooted=0;
    private boolean   walkMode=true;
    private int         turnStayed=0;

    public MonsterHunter(){
        super();
        name = "MonsterHunter";
    }

    @Override
    public void getResponse(boolean[] status)
    {
        if(status[0])
        {
            if(!lastStatus[0]||shooted==0)
            {
                nextDirection=(walkMode)?Direction.RIGHT:Direction.LEFT;;
                nextMove=Move.SHOOT;
            }
            else if(lastStatus[0]&&shooted==1)
            {
                nextDirection=Direction.BACK;
                nextMove=Move.MOVE;
            }
            else
            {
                nextDirection=Direction.BACK;
                nextMove=Move.SHOOT;
            }
        }

        else if(status[2])
        {
            nextMove=Move.MOVE;
            if(Math.random()*6<turnStayed)
            {
                nextDirection=Direction.HERE;
                turnStayed++;
            }
            else
                nextDirection=(walkMode)?Direction.RIGHT:Direction.LEFT;
        }
        else
        {
            nextMove=(!status[1]&&Math.random()<0.5)?Move.MOVE:Move.SHOOT;
            nextDirection=(walkMode)?Direction.RIGHT:Direction.LEFT;
        }

        if(nextMove==Move.MOVE)
        {
            if(shooted>0)
                walkMode=walkMode^(shooted>0);
            if(lastStatus[0]&&shooted==1)
                shooted++;
            else
                shooted=0;
            lastDirection=nextDirection;
        }
        else
            shooted++;
        for(int i=0;i<status.length;i++)
            lastStatus[i]=status[i];
    }
}

দেখানোর জন্য ধন্যবাদ, নিয়ামক ঠিক করা হয়েছে যাতে প্রতিটি চালকের একটি অনন্য শুরু হয়
কেইন

4

PacingHunter

পিছনে এবং সামনে, কক্ষগুলির মাঝে। যদি এটি কোনও উইম্পাসকে দুর্গন্ধযুক্ত করে বা কোনও খেলোয়াড় শুনতে পায় তবে ডানদিকে বাম দিকে অঙ্কুরিত হয়। যদি কোনও উইম্পাস তার পাশের ঘরে থাকে তবে সে যে রুমে চলে যাবে তার চেয়ে তার শুটিং শুরু হয়।

package Hunters;

import Mechanics.Direction;
import Mechanics.Hunter;
import Mechanics.Move;

public class PacingHunter extends Hunter {

    int state = 0;//Pacing
    int turn = 0;

    public PacingHunter() {
        name = "Pacer";
    }

    public void newGame() {
        turn =  0;
        state = 0;
    }

    public void getResponse(boolean[] status){
        turn += 1;
        if(state == 0 && status[0] && turn == 1){
            nextMove = Move.SHOOT;
            nextDirection = Direction.BACK;
            return;
        }
        if(state == 0 &&(status[0] || status[1])){
            nextMove = Move.SHOOT;
            nextDirection = Direction.LEFT;
            state = 1;
            return;
        }
        if(state == 1 && (status[0] || status[1])){
            nextMove = Move.SHOOT;
            nextDirection = Direction.RIGHT;
            state = 0;
            return;
        }
        if(status[1] && state == 0){
            nextMove = Move.SHOOT;
            nextDirection = Direction.BACK;
            state = 0;
            return;

    }
    nextMove = Move.MOVE;
    nextDirection = Direction.BACK;
}

}


4

ScaredyCat

ScaredyCat সবকিছু থেকে ভয় পেয়েছে। যদি এটি একটি গলদা বা মৃতদেহের গন্ধ পায় বা তীর বা শিকারী শোনায় তবে এটি এলোমেলো পথে চলে। অন্যথায়, এটি এলোমেলো দিকগুলিতে কেবল তীরগুলি শুটিং করে রাখে।

package Hunters;

import Mechanics.*;

public class ScaredyCat extends Hunter {

    public ScaredyCat(){
        name = "ScaredyCat";
    }

    @Override
    public void getResponse(boolean[] status){

        for(int i=0; i<status.length; i++)
            if(status[i])
            {
                nextMove = Move.MOVE;
                nextDirection = Direction.values()[((int) (Math.random() * 3))];
                return;
            }

        nextMove = Move.SHOOT;
        nextDirection = Direction.values()[((int) (Math.random() * 3))];
    }
}

6
লল আমি জানি না এটি উদ্দেশ্যমূলক ছিল কিনা তবে সে তীর গুলি চালিয়ে নিজেকে ভয় দেখাবে এবং তারপরে দৌড়াবে।
কেইন

4

কান্ড এবং পাতা খায়

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

package Hunters;

import java.util.Random;

import Mechanics.Hunter;
import Mechanics.Move;
import Mechanics.Direction;
import Mechanics.Room;

public class EatsShootsAndLeaves extends Hunter {

    private static Direction [] allDirections = { Direction.LEFT, Direction.RIGHT, Direction.BACK, Direction.HERE };
    private static Direction [] movePath = { Direction.LEFT, Direction.RIGHT, Direction.LEFT, Direction.BACK, Direction.RIGHT, Direction.BACK };

    private static int numGames = 0;
    private static int totalLife = 0;

    private static class RoomInfo  {

        public boolean hasWumpus = false;
        public boolean hasLocalHunter = false;
        public boolean hasNeighborHunter = false;
        public boolean hasCorpse = false;
        public boolean hasArrow = false;
        public RoomInfo(Room r) {
            boolean [] status = r.getInfo();
            hasWumpus = status[0];
            hasNeighborHunter = status[1];
            hasCorpse = status[2];
            hasArrow = status[3];
            hasLocalHunter = status[4];
        }

        public String toString() {
            return new String("Status: "
                              + (hasWumpus ? "Wumpus " : "")
                              + (hasNeighborHunter ? "Close Hunter " : "")
                              + (hasCorpse ? "Corpse " : "")
                              + (hasArrow ? "Arrow " : "")
                              + (hasLocalHunter ? "Local Hunter " : ""));
        }
    }

    int turnsAlive = 0;
    int shots = 0, moves = 0;

    public EatsShootsAndLeaves(){
        name = "Eats Shoots and Leaves";
    }

    public void newGame() {

        totalLife += turnsAlive;
        numGames++;

        turnsAlive = shots = moves = 0;
    }

    public void getResponse(boolean[] status){

        turnsAlive++;

        RoomInfo info = new RoomInfo(this.getRoom());
        if (info.hasNeighborHunter || info.hasWumpus) {
            nextMove = Move.SHOOT;
            nextDirection = allDirections[shots++ % 3];
        } else {
            nextMove = Move.MOVE;
            nextDirection = movePath[moves++ % movePath.length];
        }
    }
}

3

Idomeneus

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

package Hunters;
import Mechanics.Direction;
import Mechanics.Hunter;
import Mechanics.Move;
import java.util.Random;



public class Idomeneus extends Hunter
{
    int direction;
    Random r;
    public Idomeneus()
    {
        super();
        name = "Idomeneus";
        direction = 0;
        r = new Random();
    }

    @Override
    public void getResponse(boolean[] status){
        boolean wumpusNear = status[0];
        boolean hunterNear = status[1];
        boolean corpseNear = status[2];
        boolean arrowNear = status[3];
        boolean hunterHere = status[4];
        direction++;

        if(wumpusNear)
        {
            //ATTACK!!!
            nextMove = Move.SHOOT;
            nextDirection = Direction.values()[direction%3];
        }
        else if(hunterHere || arrowNear)
        {
            //Run away
            nextMove = Move.MOVE;
            nextDirection = Direction.values()[r.nextInt(3)];
        }
        else if(hunterNear)
        {
            //ATTACK!!!
            nextMove = Move.SHOOT;
            nextDirection = Direction.values()[direction%3];
        }
        else if(corpseNear)
        {
            //Stay and wait...
            nextMove = Move.MOVE;
            nextDirection = Direction.HERE;
        }
        else
        {
            //wander around
            nextMove = Move.MOVE;
            nextDirection = Direction.values()[r.nextInt(3)];
        }

    }

    public void newGame(){}



}

সতর্কতা অবলম্বন করুন: @ কেইনের মতে আপনি নিজের ঘরে আগুন লাগালে নিজেকে গুলি করতে পারেন।
ডক্টরহেকল

3

ইমো উইম্পাস (হান্টার)

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

উল্পসের তুলনায় উম্পাসগুলি বড় (এবং ভারী) তবে এটি এখনও 424 বাইটে উপড়ে পড়েছে (ন্যাসকারহান্টারের ২. 2.২ কিলোবাইটের বিপরীতে)।

package Hunters;import Mechanics.*;public class EmoWumpus extends Hunter{private int c, t;public EmoWumpus(){name="Emo Wumpus";this.c=0;this.t=0;}public void newGame(){this.c=0;this.t=0;}public void getResponse(boolean[] status){nextMove=Move.SHOOT;if(c<13 && t<100){if(status[0]||status[1]){nextDirection=Direction.RIGHT;}else{nextMove=Move.MOVE;nextDirection=Direction.RIGHT;c++;}}else{nextDirection=Direction.HERE;}t++;}}

কেন প্রথমে আত্মহত্যা করবেন না? ইমো ওম্প্পাস বিশ্বাস করেন যে ভাল কাজই করতে পারে তার মধ্যে একটি হ'ল নিজের হত্যার আগে অন্যের দুর্ভোগের অবসান ঘটায়। সুতরাং, তারা মারা যাওয়ার সময় হওয়ার আগে তারা যা করতে পারে সবই মেরে ফেলবে।

Wumpus? (এন্টি হান্টার)

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

দুর্ভাগ্যক্রমে, বেশিরভাগ ওম্প্পাস বোকা, এবং এখনও তাকে হত্যার চেষ্টা করছে। নির্বিশেষে, তিনি সর্বত্র উইম্পাসের ভালোর জন্য তাঁর ত্যাগকে প্রয়োজনীয় মনে করেন।

package Hunters;

import Mechanics.*;

public class AntiHunter extends Hunter {

private boolean left;

public AntiHunter() {
    name = "Wumpus";
    this.left = true;
}

public void newGame() {
    this.left = true;
}

public void getResponse(boolean[] status) {
    if(status[4]) {
        nextMove = Move.SHOOT;
        nextDirection = Direction.HERE;
    }
    else if(status[2] || status[1]) {
        nextMove = Move.SHOOT;
        if(this.left) {
            this.left = false;
            nextDirection = Direction.LEFT;
        }
        else {
            this.left = true;
            nextDirection = Direction.RIGHT;
        }
    }
    else {
        nextMove = Move.MOVE;
        if(this.left)
            nextDirection = Direction.LEFT;
        else
            nextDirection = Direction.RIGHT;
    }
}

}



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

@ মার্টিন নোট করুন যে এটি কেবল আত্মহত্যা নয়। পরীক্ষার জন্য উপলব্ধ বটগুলির মধ্যে এটি শেষ র‌্যাঙ্ক করে না।
মাইকেল ব্র্যান্ডন মরিস

1
ইমোসোলিউশন সবসময় মজার!
মাউগ

2

Laomedon

লাওমডন লক্ষ্যহীনভাবে একটি মৃতদেহ সন্ধান করার চেষ্টা করছে trying একবার তার সন্ধান পাওয়া গেলে এবং যেখানে এটি কাজ করে সেখানে সে মৃতদেহের পাশে একই জায়গায় থাকে। যখন সে উম্পাসকে দুর্গন্ধযুক্ত করে সে মৃতদেহের ঘরে তীর ছুঁড়ে মারে।

package Hunters;
import Mechanics.Direction;
import Mechanics.Hunter;
import Mechanics.Move;
public class Laomedon extends Hunter {
    private enum status
    {
        START,
        SEARCHED_LEFT,
        SEARCHED_RIGHT,
        INITIAL_CORPSE_LEFT,
        INITIAL_CORPSE_RIGHT,
        SMELT_CORPSE,
        CORPSE_BEHIND,
        CORPSE_LEFT
    }

    status myState;
    public Laomedon() {
        this.name = "Laomedon";
    }
    @Override
    public void getResponse(boolean[] status) {
        boolean wumpusNear = status[0];
        boolean hunterNear = status[1];
        boolean corpseNear = status[2];
        boolean arrowNear = status[3];
        boolean hunterHere = status[4];
        switch (myState) {
        case CORPSE_BEHIND:
            if(wumpusNear)
            {
                this.nextDirection = Direction.BACK;
                this.nextMove = Move.SHOOT;
            }
            else
            {
                this.nextDirection = Direction.HERE;
                this.nextMove = Move.MOVE;
            }
            break;
        case CORPSE_LEFT:
            if(wumpusNear)
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.SHOOT;
            }
            else
            {
                this.nextDirection = Direction.HERE;
                this.nextMove = Move.MOVE;
            }
            break;
        case INITIAL_CORPSE_LEFT:
            if(corpseNear)
            {
                this.nextDirection = Direction.RIGHT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.INITIAL_CORPSE_RIGHT;
            }
            else
            {
                this.nextDirection = Direction.BACK;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SEARCHED_LEFT;
            }
            break;
        case INITIAL_CORPSE_RIGHT:
            if(corpseNear)
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                myState = Laomedon.status.INITIAL_CORPSE_LEFT;
            }
            else
            {
                this.nextDirection = Direction.BACK;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SEARCHED_LEFT;
            }
            break;
        case SEARCHED_LEFT:
            if(corpseNear)
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SMELT_CORPSE;
            }
            else
            {
                this.nextDirection = Direction.RIGHT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SEARCHED_RIGHT;
            }
            break;
        case SEARCHED_RIGHT:
            if(corpseNear)
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SMELT_CORPSE;
            }
            else
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SEARCHED_LEFT;
            }
            break;
        case SMELT_CORPSE:
            if(corpseNear)
            {
                this.nextDirection = Direction.BACK;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.CORPSE_BEHIND;
            }
            else
            {
                this.nextDirection = Direction.BACK;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.CORPSE_LEFT;
            }
            break;
        case START:
            if(corpseNear)
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.INITIAL_CORPSE_LEFT;
            }
            else
            {
                this.nextDirection = Direction.LEFT;
                this.nextMove = Move.MOVE;
                this.myState = Laomedon.status.SEARCHED_LEFT;
            }
            break;
        }
    }

    @Override
    public void newGame() {

        super.newGame();
        myState = status.START;
    }
}

দুর্ভাগ্যক্রমে তাঁর জন্য, অন্যান্য শিকারি তার দক্ষতার প্রশংসা করেন না এবং তারা মনে হয় তাকে অনেক গুলি করেছেন ...


2

NealHunter

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

package Hunters;

import Mechanics.*;
import java.util.Random;

public class NealHunter extends Hunter {

    private boolean goLeft;

    public NealHunter(){
        name = "NealHunter";
        goLeft = false;
    }

    public void newGame() {
        goLeft = false;
    }

    public void getResponse(boolean[] status){

        Random rand = new Random();

        if(status[0] || status[1]){
            nextMove = Move.SHOOT;

            switch ( rand.nextInt(3) ){
                case 0:
                    nextDirection = Direction.LEFT;
                    break;
                case 1:
                    nextDirection = Direction.BACK;
                    break;
                case 2:
                    nextDirection = Direction.RIGHT;
                    break;
            }
        } else {
            nextMove = Move.MOVE;
            if (goLeft) {
                nextDirection = Direction.LEFT;
            } else {
                nextDirection = Direction.RIGHT;
            }

            goLeft = !goLeft;
        }
    }
}

1

WalkingIdiot

এই সে হাঁটতে থাকে যতক্ষণ না সে মাম্পাসকে আবিষ্কার করে। তারপরে, সে ঠিক গুলি করে। যদি উইম্পাসটি এখনও থাকে তবে এটি অবশ্যই বাম দিকে থাকবে, সুতরাং আবারও গুলি করুন। পথে, তিনি অন্যান্য শিকারী বা মৃতদেহ সম্পর্কে চিন্তা করেন না, তাই নামটি।

package Hunters;

import Mechanics.*;

public class WalkingIdiot extends Hunter {
    private boolean wumpusNear = false;

    @Override
    public void newGame() {
        wumpusNear = false;
    }

    public WalkingIdiot(){
        name = "WalkingIdiot";
    }

    @Override
    public void getResponse(boolean[] status){
        boolean wumpusWasNear = wumpusNear;
        wumpusNear = status[0];
        if (status[0]) {
            nextMove = Move.SHOOT;
            if (wumpusWasNear) {
                nextDirection = Direction.LEFT;
            } else {
                nextDirection = Direction.RIGHT;
            }
            return;
        }
        nextMove = Move.MOVE;
        nextDirection = Math.random() < 0.5 ? Direction.LEFT : Direction.RIGHT;
    }
}

থাকা

থাকো হাঁটতে পছন্দ করে না। এটি কেবল চারদিকে গুলি করে এবং মনে করে যে সে কোনও শিকারীকে গুলি করেছিল কিনা।

package Hunters;

import Mechanics.*;

public class Stay extends Hunter {
    private Direction lastShot = Direction.LEFT;
    private Direction corpse = null;
    private boolean hunterNear = false;

    public Stay(){
        name = "Stay";
    }

    @Override
    public void newGame() {
        corpse = null;
        hunterNear = false;
        lastShot = Direction.LEFT;
    }

    @Override
    public void getResponse(boolean[] status){
        nextMove = Move.SHOOT;//always
        boolean hunterWasNear = hunterNear;
        hunterNear = status[1];

        if (hunterWasNear && status[2] && !status[1]) {
            corpse = lastShot;
        }

        if (status[0]) {
            if (corpse != null) {
                nextDirection = corpse;
                return;
            }
        }
        if ((status[1] && !status[4]) || status[0]) {
            switch (lastShot) {
                case LEFT: lastShot = nextDirection = Direction.RIGHT; break;
                case RIGHT: lastShot = nextDirection = Direction.BACK; break;
                case BACK: lastShot = nextDirection = Direction.LEFT; break;
            }
            return;
        }

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