Friday, September 30, 2011

roguelike tutorial 13: aggressive monsters

Now that we have all these cool weapons and armor and food, the bat's and fungi aren't as troublesome as they used to be. We need something that charges straight for us, something that peruses us relentlessly, a simple minded foe that we don't want to run into. For that we need a way to find a path to the player.

The monsters are only going to pathfind to the player if they see him so we could do the simpleist thing and move east if the player is east, north if the player is north, etc. That would almost always work well enough but let's go ahead and add real path finding. Entire tutorials are written about path finding but for this we can use the following code that implements the A Star algorithm and is specialized for our creatures:

package rltut;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class PathFinder {
       private ArrayList<Point> open;
       private ArrayList<Point> closed;
       private HashMap<Point, Point> parents;
       private HashMap<Point,Integer> totalCost;
     
       public PathFinder() {
             this.open = new ArrayList<Point>();
             this.closed = new ArrayList<Point>();
             this.parents = new HashMap<Point, Point>();
             this.totalCost = new HashMap<Point, Integer>();
       }
     
       private int heuristicCost(Point from, Point to) {
             return Math.max(Math.abs(from.x - to.x), Math.abs(from.y - to.y));
       }

       private int costToGetTo(Point from) {
             return parents.get(from) == null ? 0 : (1 + costToGetTo(parents.get(from)));
       }
     
       private int totalCost(Point from, Point to) {
             if (totalCost.containsKey(from))
                 return totalCost.get(from);
           
             int cost = costToGetTo(from) + heuristicCost(from, to);
             totalCost.put(from, cost);
             return cost;
       }

       private void reParent(Point child, Point parent){
             parents.put(child, parent);
             totalCost.remove(child);
       }

       public ArrayList<Point> findPath(Creature creature, Point start, Point end, int maxTries) {
             open.clear();
             closed.clear();
             parents.clear();
             totalCost.clear();
       
             open.add(start);
           
             for (int tries = 0; tries < maxTries && open.size() > 0; tries++){
                   Point closest = getClosestPoint(end);
                 
                   open.remove(closest);
                   closed.add(closest);

                   if (closest.equals(end))
                         return createPath(start, closest);
                   else
                         checkNeighbors(creature, end, closest);
             }
             return null;
       }

        private Point getClosestPoint(Point end) {
            Point closest = open.get(0);
            for (Point other : open){
                if (totalCost(other, end) < totalCost(closest, end))
                    closest = other;
            }
            return closest;
        }

        private void checkNeighbors(Creature creature, Point end, Point closest) {
            for (Point neighbor : closest.neighbors8()) {
                if (closed.contains(neighbor)
                 || !creature.canEnter(neighbor.x, neighbor.y, creature.z)
                 && !neighbor.equals(end))
                     continue;
    
                if (open.contains(neighbor))
                    reParentNeighborIfNecessary(closest, neighbor);
                else
                    reParentNeighbor(closest, neighbor);
            }
        }

        private void reParentNeighbor(Point closest, Point neighbor) {
            reParent(neighbor, closest);
            open.add(neighbor);
        }

        private void reParentNeighborIfNecessary(Point closest, Point neighbor) {
            Point originalParent = parents.get(neighbor);
            double currentCost = costToGetTo(neighbor);
            reParent(neighbor, closest);
            double reparentCost = costToGetTo(neighbor);
  
            if (reparentCost < currentCost)
                open.remove(neighbor);
            else
                reParent(neighbor, originalParent);
        }

        private ArrayList<Point> createPath(Point start, Point end) {
            ArrayList<Point> path = new ArrayList<Point>();

            while (!end.equals(start)) {
                path.add(end);
                end = parents.get(end);
            }

            Collections.reverse(path);
            return path;
        }
    }

So far I've liked having Points and Lines where all the work is done in the constructor and would like to extend this idea to Paths. So let's create a Path class that hides the details from us.

package rltut;

import java.util.List;

public class Path {

  private static PathFinder pf = new PathFinder();

  private List<Point> points;
  public List<Point> points() { return points; }

  public Path(Creature creature, int x, int y){
      points = pf.findPath(creature, 
                           new Point(creature.x, creature.y, creature.z), 
                           new Point(x, y, creature.z), 
                           300);
  }
}

If having our Line path do all that work in the constructor was questionable then this is far more questionable. I may end up regretting this and making sure future employers never see this but for now I'll try it and we'll see if it becomes a problem.


Like with our other creatures we need a CreatureAi. I'll take the easy and uncreative way out and pick Zombies for our new monster. The ZombieAi will be a bit different than the others since it needs a reference to the player so it knows who to look for.

package rltut;

import java.util.List;

public class ZombieAi extends CreatureAi {
  private Creature player;

  public ZombieAi(Creature creature, Creature player) {
    super(creature);
    this.player = player;
  }
}

During the zombie's turn it will move to the player if it can see him, otherwise it will wander around. Since zombies are a little slow, I gave them a chance of doing nothing during their turn for just a little bit of interest.

public void onUpdate(){
      if (Math.random() < 0.2)
          return;
  
      if (creature.canSee(player.x, player.y, player.z))
          hunt(player);
      else
          wander();
  }

Creating a new path each turn may not be the best idea but we'll only have a few zombies and rogulikes are turn based so it shouldn't be too much of a problem. If it does be come a performance problem we can fix it.

The hunt method finds a path to the target and moves to it.
public void hunt(Creature target){
      List<Point> points = new Path(creature, target.x, target.y).points();
  
      int mx = points.get(0).x - creature.x;
      int my = points.get(0).y - creature.y;
  
      creature.moveBy(mx, my, 0);
  }

Now we can add zombies to our factory. Since the Ai needs a reference to the player, we have to pass that in.
public Creature newZombie(int depth, Creature player){
      Creature zombie = new Creature(world, 'z', AsciiPanel.white, "zombie", 50, 10, 10);
      world.addAtEmptyLocation(zombie, depth);
      new ZombieAi(zombie, player);
      return zombie;
  }

To add zombies to our world we need to update createCreatures in the PlayScreen.

for (int i = 0; i < z + 3; i++){
         factory.newZombie(z, player);
     }

Adding pathfinding to a game is a big deal. The PathFinder we're using for now is good enough but has some major inefficiencies. I'm using a HashMap of points rather than an array so we don't have to worry about the world size or anything like that. This will take up less memory and handle aarbitrarily large maps but it will be much much slower.

download the code

323 comments:

  1. I can't seem to get this to work, I get the following error in the Pathfinding class;
    java.lang.StackOverflowError
    at java.util.HashMap.get(Unknown Source)


    It seems to be getting stuck on the costToGetTo() method, any ideas on what is causing it to error out?

    ReplyDelete
    Replies
    1. A StackOverflowError is usually caused by a recursive function going haywire and not terminating. I'm guessing that some point is the parent of itself but I'm not sure what to do without the code you're running. Have you looked at other implementations? A* pathfinding is a simple enough idea that you could probably swap this implementation for another. I tried to keep the pathfinding stuff completely unaware of the World and that really shaped the implementation. It turns out that's not good for performance, debugging, or overall clarity.

      Delete
  2. Hi thanks for getting back to me. The code is exactly the same as what you have here except I've taken out the z level stuff as well as casted some floats to ints and vice versa. I've been following the tutorials here; http://randomtower.blogspot.co.uk/ and I wanted to see if I could put pathfinding in by seeing how you did it.

    What other pathfinding algorithms would you recommend if I were to use something else other then A*, this is really my first time I've played around with pathfinding.

    ReplyDelete
  3. I had a weird NullPointerException pop up in the Zombie AI.

    In the method

    public void hunt(Creature target)
    {
    ArrayList points = new Path(creature, target.x, target.y).points();

    int mx = points.get(0).x - creature.x;
    int my = points.get(0).y - creature.y;

    creature.moveBy(mx, my, 0);
    }

    the line int mx = points.get(0).x - creature.x; threw it. I was in the bottom floor and almost everything was surrounded by fungus, including the zombie I aggrod. Do you think it was just that there were no points for it to move to, so it threw the exception? I'm personally thinking that's what caused it but haven't been able to get it to throw again.

    ReplyDelete
  4. I'm guessing that the points is null; probably because findPath couldn't find a way to the player so it returns null after a while (300 tries I think). The hunt method should return if points is null or has a length of zero.

    ReplyDelete
  5. The principles have been well cited above and surely would even proved to be much better for them to proceed further with all those instances and the values which are indeed said to be important.

    ReplyDelete
  6. Because you calculate a new path on every onUpdate call (given a monster can see a player), you are solely relying on an heuristic function of A* algorithm. You might as well drop A*, unless you make the monster to calculate a path once and update it if necessary (on player's move).

    You have to at least check if a path that you get in hunt method is not null, otherwise you could get some unexpected behaviour.

    ReplyDelete
  7. Thanks for your article. Its coding is very useful to me. Thank You...Java Training in Chennai
    Java Training Institude in Chennai

    ReplyDelete
  8. ... 6 years later :)
    Hi, I'm trying to code your nice RogueLike using Monogame (c#). I think your createCreatures (PlayScreen) have a little gameplay problem. I imagine that you would like to add Zombies only at depth 3 and above, so for my part I'd prefer the implement that :

    for (int i = 0; i < z - 2; i++)
    factory.NewZombie(z, player);

    I used z - 2 instead of z + 3 (so zimbie start to be seed at depth 3).

    ReplyDelete
  9. http://ttminstitute.blogspot.com/2007/10/what-is-tiit-ttm-institute-of.html

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. It’s really great information for becoming a better Blogger. Keep sharing, Thanks...

    Bangalore Training Academy located in BTM - Bangalore, Best Informatica Training in Bangalore with expert real-time trainers who are working Professionals with min 8 + years of experience in Informatica Industry, we also provide 100% Placement Assistance with Live Projects on Informatica.

    ReplyDelete
  12. Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job. Keep it up...

    Upgrade your career Learn AWS Training from industry experts get Complete hands-on Training, Interview preparation, and Job Assistance at Softgen Infotech Located in BTM Layout.

    ReplyDelete
  13. Enjoyed reading the article above, really explains everything in detail,the article is very interesting and effective.Thank you and good luck…

    Start your journey with DevOps Course and get hands-on Experience with 100% Placement assistance from experts Trainers @Softgen Infotech Located in BTM Layout Bangalore.

    ReplyDelete
  14. That was really a great Article. Thanks for sharing information. Continue doing this.

    Real Time Experts provides Best SAP PM Training in Bangalore with expert real-time trainers who are working Professionals with min 8+ years of experience in Java Training Industry, we also provide 100% Placement Assistance with Live Projects on Java Training

    ReplyDelete
  15. such a great word which you use in your article and article is amazing knowledge. thank you for sharing it.

    Start your journey with AWS Course and get hands-on Experience with 100% Placement assistance from Expert Trainers with 8+ Years of experience @eTechno Soft Solutions Located in BTM Layout Bangalore.

    ReplyDelete
  16. Such a great information for blogger i am a professional blogger thanks…

    Softgen Infotech is the Best HADOOP Training located in BTM Layout, Bangalore providing quality training with Realtime Trainers and 100% Job Assistance.

    ReplyDelete
  17. This comment has been removed by the author.

    ReplyDelete
  18. BBA Aviation – One of the most demanding management course in recent times. Here is the details of Best BBA Aviation colleges in Bangalore. If you are looking too study in Bangalore, visit the below link.
    BBA Aviation Colleges In Bangalore

    ReplyDelete
  19. I have been more or less playing around with different paths for myself in my head and one of the new ones is to become a blogger.
    ExcelR Digital Marketing Courses In Bangalore

    ReplyDelete
  20. Thanks for sharing such a great information..Its really nice and informative..

    sap bi training

    ReplyDelete
  21. This comment has been removed by the author.

    ReplyDelete
  22. Whatever we gathered information from the blogs, we should implement that in practically then only we can understand that exact thing clearly, but it’s no need to do it, because you have explained the concepts very well. It was crystal clear, keep sharing....

    sapui5 online training

    ReplyDelete
  23. I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.satta king

    ReplyDelete
  24. With the help of creative designing team TSS advertising company provides different branding and marketing strategies in advertising industry...
    https://www.tss-adv.com/branding-and-marketing

    ReplyDelete
  25. Welcome to the party of my life here you will learn everything about me.
    Digital Marketing Courses in Pune

    ReplyDelete
  26. Needed to compose you a very little word to thank you yet again regarding the nice suggestions you’ve contributed here.

    Python Training
    Digital Marketing Training
    AWS Training

    ReplyDelete
  27. GrueBleen Creative Club - Digital Marketing is booming now. People & Brands are engaging Social Media for content creation alike. People are focusing to share their beautiful moments on Social Media. But, Brands are creating post for their product or service and Social Commitment alike. Brands are choose Social Media Agencies for their trust creation in Digital Media. Here, is the details that provided by GrueBleen Creative Club, Riyadh.
    Branding Agency Riyadh
    Marketing Agency Riyadh
    Digital Marketing Agency Riyadh
    Digital Marketing Agency Saudi Arabia
    Digital Marketing Agency Jeddah
    Social Media Agency Riyadh
    Social Media Agency Jeddah
    Social Media Agency Saudi Arabia
    Branding Agency Jeddah
    Marketing Agency Jeddah
    Marketing Agency Saudi Arabia
    Branding Agency Saudi Arabia

    ReplyDelete
  28. It's really a nice and useful piece of information about Selenium. I'm satisfied that you shared this helpful information with us.Please keep us informed like this. Thank you for sharing.

    Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

    ReplyDelete
  29. Not many writers can persuade me to their way of thinking. You've done a great job of doing that on many of your views here.
    SAP training in Kolkata
    SAP training Kolkata
    Best SAP training in Kolkata
    SAP course in Kolkata
    SAP training institute Kolkata

    ReplyDelete
  30. I like viewing web sites which comprehend the price of delivering the excellent useful resource free of charge. I truly adored reading your posting. Thank you!...digital marketing courses in bangalore

    ReplyDelete
  31. Very interesting blog Thank you for sharing such a nice and interesting blog and really very helpful article.

    Dell Boomi Training in Bangalore

    Best Dell Boomi Training Institutes in Bangalore

    ReplyDelete
  32. Great article! Thanks for sharing content and such nice information for me. Keep sharing. Thanks...
    Golden Triangle Tour 5 Days

    ReplyDelete
  33. Its really helpful for the users of this site. I am also searching about these type of sites now a days. So your site really helps me for searching the new and great stuff.

    SAP HANA Online Training

    SAP HANA Classes Online

    SAP HANA Training Online

    Online SAP HANA Course

    SAP HANA Course Online

    ReplyDelete
  34. Being new to the blogging world I feel like there is still so much to learn. Your tips helped to clarify a few things for me as well as giving.

    SAP HCM Online Training

    SAP HCM Classes Online

    SAP HCM Training Online

    Online SAP HCM Course

    SAP HCM Course Online

    ReplyDelete
  35. Nice Blog!
    Facing error while using QuickBooks get instant solution with our QuickBooks experts.Dial +1-(855)533-6333 QuickBooks Payroll Support Phone Number

    ReplyDelete
  36. Love the article, I likes your content. Thanks for sharing your information. Fashion bloggers in India

    ReplyDelete
  37. thanks for sharing, keep up the good work, great post

    freelancing site in india

    ReplyDelete
  38. Thanks so much with this fantastic new web site. I’m very fired up to show it to anyone. It makes me so satisfied your vast understanding and wisdom have a new channel for trying into the world.
    If Want Play online Satta King Games Click Satta King :-

    ReplyDelete
  39. pharmacy websites that operate legally such as buy adderall XR online and offer convenience

    ReplyDelete
  40. this real good content buy colombian cocaine online will like to also say we have an amazing blog

    ReplyDelete
  41. And Yes, you can buy crack cocaine online illegal drugs on the Internet, and it's a lot safer

    ReplyDelete
  42. This Blog Contain Good information about that. bsc 3rd year time table Thanks for sharing this blog.

    ReplyDelete
  43. aws training in chennai - AWS Amazon web services is a Trending Technologies and one of the most sought after courses.Join the Best Aws course in Chennai now.

    IOT training in chennai - Internet of things is one of best technology, Imagine a world with a Internet and everything minute things connected to it .

    DevOps Training Institute in Chennai - Just from DevOps course Best DeVops training Institute in Chennai is also providing Interview Q & A with complete course guidance, Join the Best DevOps Training Institute in Chennai.

    Load runner training in Chennai - Load runner is an software testin tool. It is basically used to test application measuring system behaviour and performance under load. Here comes an Opportunity to learn Load Runner under the guidance of Best Load Runner Training Institute in Chennai.

    ReplyDelete
  44. Nice to be visiting your blog again, it has been months for me. Well this article that i've been waited for so long. I need this article to complete my assignment in the college, and it has the same topic with your article. Thanks, great share 메이저놀이터

    ReplyDelete
  45. Thank you very much for this useful article. I like it. 먹튀폴리스

    ReplyDelete
  46. Excellent post.I want to thank you for this informative read, I really appreciate sharing this great post.Keep up your work 먹튀검증커뮤니티

    ReplyDelete
  47. This is very useful, although it will be important to help simply click that web page link: 토토사이트

    ReplyDelete
  48. Thanks a lot for sharing us about this update. Hope you will not get tired on making posts as informative as this. 토토사이트

    ReplyDelete
  49. Thanks for sharing this quality information with us. I really enjoyed reading. Will surely going to share this URL with my friends. 먹튀폴리스

    ReplyDelete
  50. 이 주제에 익숙해지기를 원하는 모든 사람에게 적합한 블로그가 될 수 있습니다. 당신은 이미 논쟁하기가 쉽지 않다는 것을 이미 많이 알고 있습니다. 당신은 확실히 수십 년 동안 논의 된 주제로 최신 스핀을 넣었습니다. 훌륭합니다. 메이저 파워볼사이트

    ReplyDelete
  51. 귀하의 사이트를 방금 확인했으며 매우 흥미롭고 유익한 사이트임을 알려 드리고자합니다. 메이저 파워볼사이트

    ReplyDelete
  52. I see the best substance on your blog and I incredibly love understanding them 먹튀검증

    ReplyDelete
  53. I think about it is most required for making more on this get engaged 토토사이트

    ReplyDelete
  54. This is my first time i visit here and I found so many interesting stuff in your blog especially it's discussion, thank you 메이저놀이터

    ReplyDelete
  55. Btreesystem is Software IT Training Institute in Chennai
    btree systems

    ReplyDelete
  56. I really want to appreciate the way to write this
    omni-channel
    ivrs
    ip-pbx

    ReplyDelete
  57. Wow, superb blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your site is magnificent, as well as the content! 메이저사이트 추천

    ReplyDelete
  58. I really appreciate the kind of topics you post here. Thanks for sharing us a great information that is actually helpful. Skyfall Leather Jacket

    ReplyDelete
  59. I’m still learning from you, while I’m improving myself. I certainly enjoy reading everything that is written on your website.Keep the posts coming. I loved it! 스웨디시

    ReplyDelete
  60. It is good to read. Thanks to share the information. Also look at our website with below link.
    Italian Restaurants in Kuwait

    ReplyDelete
  61. Incredible blog here! It's mind boggling posting with the checked and genuinely accommodating data.
    Bill Goldberg Harley Davidson Jacket

    ReplyDelete
  62. did you know buy weed online is the most trusted online dispensary. in addition, buy weed online legit offer weed at a cheap cost and
    cheap ammo sell ammo online fast and really cheap

    ReplyDelete
  63. Amazing article. Your blog helped me to improve myself in many ways thanks for sharing this kind of wonderful informative blogs in live.
    food delivery near me
    food delivery Dundee
    dundee restaurants
    andaaz Dundee
    dundee restaurants
    biryani, kebab near me
    pizza near me

    ReplyDelete

  64. Nice post check my site for super fast Satta king Result also check Sattaking

    ReplyDelete
  65. Nice to meet you.
    I'm N토토, who runs a sports website in Korea.
    I came across this by chance.
    I get good articles and good information.
    If you have time,
    I hope you'll visit my website as well. I'm sorry if my comments on Mannyak were uncomfortable.
    There is a translation function on the site,
    you do not have to worry.
    So, I wish you all the best in the future.



    사설토토

    ReplyDelete
  66. Good write-up. I absolutely love this site. Thanks!
    Leather Fashion Jackets

    ReplyDelete
  67. Some times its a pain in the ass to read what blog owners wrote but this site is really user pleasant! . Unique Dofollow Backlinks

    ReplyDelete
  68. A great and awesome write up. An all time relevant article. Would definitely recommend this to others.
    https://theresearchchemicalsuppliers.com/

    ReplyDelete
  69. B3 Bomber Jacket For Sale - Free Shipping and Best Deal
    Men consistently partial to skins and hides due to the fact the start of timethey utilized it to insure by themselves and safeguard them by your cold temperatures.
    Now shearling leather coats, Real Leather Bomber Jackets, Buy Harley Davidson Leather Motorcycle Jackets holds probably the best legacy , masculinity along with ruggedness to get a guys outer wear.

    ReplyDelete
  70. beneficial composition, I stumbled beside your blog besides decipher a limited announce. 스포츠사이트

    ReplyDelete
  71. beneficial composition, I stumbled beside your blog besides decipher a 먹튀사이트

    ReplyDelete
  72. Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place 놀이터검증

    ReplyDelete
  73. That's a really good piece of data. Amazing Keep working like that!. back scratcher shoe horn 토토사이트보증업체

    ReplyDelete
  74. I look forward to your kind cooperation. 검증사이트 Please take good care of me from now on.Thank you

    ReplyDelete
  75. Class RoomOnline1 Week12,000 RsRs. 6000/-

    ReplyDelete
  76. Good article. Nice information and Knowledgeable, Keep sharing more again.
    Online Data Science Training in Hyderabad

    ReplyDelete
  77. pretty desirable post. I simply stumbled upon your blog and desired to say that i've sincerely loved analyzing your blog posts. Any manner i’ll be subscribing in your feed and that i hope you post again soon. Amazing internet site! I adore how it is easy on my eyes it's far. I am wondering how i might be notified whenever a new put up has been made. Searching out greater new updates. Have a top notch day! Thank you for giving me useful data. Please maintain posting suitable records inside the future i'm able to visit you often . 헤이먹튀

    ReplyDelete
  78. May I essentially say what an assistance to uncover a person that truly hear what they're saying over the web. You certainly recognize how to uncover an issue and make it huge. More people need to get this and appreciate this side of the story. I was stunned you're not more renowned since you surely have the gift. I am sure this paragraph has touched all the internet viewers, its really really good post on building up new website. Excellent blog here! Also yourr web site loads up fast! What web host are youu using? Can I get your affiliate link to yoour host? I wish my site loaded up as quickly as yours lol 온카맨

    ReplyDelete
  79. Your explanation is organized very easy to understand!!! I understood at once. Could you please post about 먹튀검증업체?? Please!!


    ReplyDelete
  80. Online Training | Classroom | Virtual Classes
    C# .Net Training with 100% placement assistance
    1860 testers placed in 600 companies in last 8 years
    Real time expert trainers
    Indutry oriented training with corporate casestudies
    Free Aptitude classes & Mock interviews

    ReplyDelete
  81. I've been looking for photos and articles on this topic over the past few days due to a school assignment, 안전놀이터 and I'm really happy to find a post with the material I was looking for! I bookmark and will come often! Thanks :D


    ReplyDelete
  82. I finally found what I was looking for! I'm so happy. 바카라사이트 Your article is what I've been looking for for a long time. I'm happy to find you like this. Could you visit my website if you have time? I'm sure you'll find a post of interest that you'll find interesting.


    ReplyDelete
  83. Excellent read, I just passed this onto a friend who was doing a little research on that. And he actually bought me lunch as I found it for him smile Therefore let me rephrase that: Thank you for lunch. 룰렛".


    ReplyDelete
  84. Don't go past my writing! Please read my article only once. Come here and read it once"카지노사이트


    ReplyDelete
  85. New site is solid. A debt of gratitude is in order for the colossal exertion. data science course in mysore

    ReplyDelete
  86. Thank you for your post. This is excellent information. It is amazing and wonderful to visit your site.
    Check out Digital Marketing Courses In Pune with Placement

    ReplyDelete
  87. Thanks for posting this info. I just want to let you know that I just check out your site. Batman Robin Jacket

    ReplyDelete
  88. Such an interesting article here.I was searching for something like that for quite a long time and at last I have found it here. chris martin jacket

    ReplyDelete
  89. Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include.girl attitude quotes in hindi for whatsapp dp download

    ReplyDelete
  90. This blog is therefore first-class to me. i can keep nearly coming here anew and by now anew. visit my companion as expertly..! ScreenHunter Pro Crack

    ReplyDelete
  91. yes i am fully decided on amid this text and that i simply indulgent pronounce that this article is deeply best and pretty informative article.i will make hermetically sealed to be studying your blog extra. You made a fine lessening but I can't seasoned occurring but surprise, what kind of the including together facet? !!!!!!thank you!!!!!!! Norton Internet Security Product Key Generator

    ReplyDelete
  92. I assume that is an informative proclaim and it is selected beneficial and informed. therefore, i might as soon as to thank you for the efforts you have got made in writing this newsletter. thank you! keep rocking. Birthday Wishes For Aunty

    ReplyDelete
  93. Thank-you for sharing this blog it really helped, waiting for more Digital marketing courses in Delhi for details about Online Digital marketing courses.

    ReplyDelete
  94. pure Crack Cocaine Online 98%

    Cocaine Online Vendor, Best Cocaine Online Vendor, Fishscale cocaine online shop, where to buy Fishscale cocaine, blow drug, Bolivian Cocaine Canada, Bolivian Cocaine for sale, Bolivian Cocaine Online, Buy Peruvian Pink Cocaine, cocaina no flour, cocaine for sale, How can I buy Peruvian Cocaine, How to buy Peruvian Cocaine, Order peruvian cocaine, order pure cocaine online, Peruvian Cocaine buy, Peruvian Cocaine buy online, Peruvian cocaine for sale, Peruvian flake, peruvian pink cocaine, pink cocaine, Pink Cocaine for sale online, pink peruvian coke, powder cocaine, Powder Cocaine for sale online, Purchase Powder Cocaine Online, Pure Bolivian Cocaine Online, strawberry cocaine, Where can I buy Peruvian Cocaine, Where to buy Peruvian Cocaine, Where to Buy Peruvian Pink Cocaine online, Where to buy real Peruvian Pink Cocaine Online

    Wholesale Cocaine Online Vendor
    Wholesale Bolivian Cocaine Online Vendor
    Wholesale Uncut Cocaine Online Vendor
    Wholesale Colombian Cocaine Online Vendor
    Wholesale Black, Brown & china Heroin Online Vendor
    Wholesale Kilocaine Powder Online Vendor
    Wholesale Peruvian Cocaine Online Vendor
    Wholesale Volkswagen Cocaine Online Vendor
    whatsApp number : +15024936152
    wickr:movecokee

    ReplyDelete
  95. Interesting blog post! If you are interested in learning digital marketing, here is a complete list of the best online digital marketing courses with certifications. In this article, you will learn about digital marketing and its different strategies, the need for doing digital marketing, the scope of digital marketing, career opportunities after doing online digital marketing, and many more.
    Visit-
    Online Digital Marketing Courses

    ReplyDelete
  96. Hi, Nice article! Thanks for sharing. If you are interested in learning digital marketing, here is a list of the top 13 digital marketing courses in Ahmedabad with placements. This article will help you decide which institute is best for you to learn digital marketing and will help you to become an efficient and productive digital marketer.
    Visit- Digital Marketing Courses in Ahmedabad

    ReplyDelete
  97. Very informative blog on specific topic of mapping and pathfinder algorithm. Thanks for sharing the article. If anyone wants to explore about Digital Marketing which launched globally with world class curriculum. Please find more details and visit at
    Digital marketing courses in france

    ReplyDelete
  98. Interesting blog! Keep up the good work. If you are interested in building a medical career but are struggling to clear medical entrance exams, Wisdom Academy is the right place to begin. It is one of Mumbai's best NEET coaching institutes for students preparing for medical and other competitive-level entrance examinations. The academy caters to home and group tuitions for NEET by professionals. It offers comprehensive learning resources, advanced study apparatus, doubt-clearing sessions, regular tests, mentoring, expert counseling, and much more. Equipped with highly qualified NEET Home Tutors, Wisdom Academy is one such institute that provides correct guidance that enables you to focus on your goal. Enroll Now!
    Check- NEET Coaching in Mumbai

    ReplyDelete
  99. Thank you for sharing this useful blog and teaching us the code that implements the A Star algorithm. It was great reading it. I would also like to share the blog on SEM that can really be helpful to people in the field of Marketing. To know more visit -
    Search Engine Marketing

    ReplyDelete
  100. I was really looking forward such kind of conteng which i feel to must read. Keep posting. Also have a look on Digital Marketing Courses in Abu Dhabi

    ReplyDelete
  101. Informative post. So, ready to get new skills? Look into the Digital Marketing Courses in Delhi that will help you to upskill and to know more about the power of digital marketing. Happy reading!
    Digital Marketing Courses in Delhi

    ReplyDelete
  102. This indeed a very informative and educative post. One thing is for sure you’ll never run out of content. Honestly this post will obviously help a lot of people on what makes up good content and how to structure it for the best result. 
    SEO Company in London

    ReplyDelete
  103. Great appreciation for your work from my end! This article has incredibly and skilfully covered all the negative and positive aspects on the given relevant topic without taking a poignant stance on either of the two sides of the issue.
    Denial management software

    ReplyDelete
  104. Hi, Keep sharing this type of content. I really liked it. If you are interested in learning digital marketing but don’t know where to start a course, here is a list of the top 10 digital marketing training institutes in India with placements. This article will help you decide which institute is best for you to learn digital marketing and will help you become a successful digital marketer and boost your career.
    Digital marketing courses in India

    ReplyDelete
  105. The code technicalities shared in this blog is really innovative. I read it and appreciate your hard work and efforts in this content. Digital Marketing courses in Bahamas

    ReplyDelete
  106. Hi, This blog is really useful as it clearly states the pathfinding algorithms which can easily be read and understood by the readers especially the beginners. Thank you for a knowledgeable blog.
    Digital marketing courses in Ghana

    ReplyDelete
  107. This article is well formulated. I particularly like the way how you have delivered all the major points about the topic of the content in petite and crisp points.
    CCTV installation services in Hooghly
    CCTV camera installation in Kolkata

    ReplyDelete
  108. Thanks for explaining it so well. you made it so clear and shared each and every small details with us. nice blog thanks for sharing.
    It is really very helpful, keep writing more such blogs.
    Do read my blog too it will really help you with content writing.
    we provide the Best Content Writing Courses in India.
    Best Content Writing Courses in India

    ReplyDelete
  109. A Truly high-tech article on the game platform for pathfinder technique on star topology algorithm for different characters. Thanks for sharing your rich experience which was guided in a very descriptive manner with code and explanatory notes. Great work. If anyone wants to learn Digital Marketing in Austria, Please join the newly designed curriculum professional course on highly demanded skills required by top corporates globally. For more details, please visit
    Digital Marketing Courses in Austria

    ReplyDelete
  110. This blog is really wonderful and useful.
    very well explained .I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. keep it up

    Digital marketing courses in Cochi


    I am enrolled for the Digital Marketing Master Course provided by IIM SKILLS in the month of june 2022 .
    No prior technical skills or knowledge are required to apply. Students should be comfortable with learning in English
    The course and my faculty were supportive, weekly assessments were on time and feedbacks helped a lot to gain industry real time experiences. The classes are flexible and recordings were immediately available (if you miss the lecture).

    Students will learn web development, social media marketing, micro video marketing, affiliate marketing, Google AdWords, email marketing, SEO, and content writing.

    o

    ReplyDelete
  111. Informative article post over here. We also provide an informational and educational blog. All about Things you should know before starting your Freelancing Journey. What is Freelancing and How does it work? Is working as a Freelancer a good Career? What are Freelancing jobs and how to get Freelance projects? How companies hire Freelancers? Which salary a freelance worker can earn and can I live with a Self-Employed Home Loan? Here you will find a guide with Tips and Steps which will help you to take a good decision. Start reading and find out the Answers.
    What is Freelancing

    ReplyDelete
  112. Nice blog, and great to know about new things. Thanks for sharing. Upskilling is always better to stay ahead in the competition so any one looking to learn digital marketing in Dehradun visit on Digital Marketing Course in Dehradun

    ReplyDelete
  113. This blog is very informational ,nice piece of coding Digital marketing courses in Gujarat

    ReplyDelete
  114. Honestly speaking this blog is absolutely amazing in learning the subject that is building up the knowledge of every individual and enlarging to develop the skills which can be applied in to practical one. Finally, thanking the blogger to launch more further too. Professional Courses

    ReplyDelete
  115. The content is quite technical but interesting to read and also helps in adding up to my knowledge. Keep sharing such useful posts. Digital Marketing Courses in Faridabad

    ReplyDelete
  116. Amazing post found to be very impressive while going through this post. Thanks for sharing and keep posting such an informative content. Digital marketing courses in Kota

    ReplyDelete
  117. Amazing Content! https://advisoruncle.com/data-analytics-scope/

    ReplyDelete
  118. Thank You for the valuable information. I should absolutely give the blogger kudos for the time and work they invested in creating such wonderful information for all the inquisitive readers who are willing to stay up to speed on everything. In the end, readers will encounter an incredible experience.
    Do Checkout
    Data Analytics Courses in Dehradun

    ReplyDelete
  119. Hey, Knowledgeable content. The line of java coding given is helpful for the coders stuck with the issues related to any code then they can find out the nice solution with it. Nice work
    Digital marketing courses in Germany

    ReplyDelete
  120. i am not understanding how to thank you for roguelike tutorial 13 because of the informative article.Nice to be visiting your blog again, it has been months for me. Well this article that i've been waited for so long. I need this article to complete my assignment in the college, and it has the same topic with your article. Thanks, great share Digital marketing Courses in Bhutan

    ReplyDelete
  121. Awesome article on rogue tutorial , nice sample of coding Digital marketing courses in Raipur

    ReplyDelete
  122. Thank you providing information on this technical topic, I really appreciate your efforts for putting this together.
    Digital marketing courses in Nashik

    ReplyDelete
  123. This a Great informative article on games as you are using a pathfinder. It is great content with codes and narratives but I find some difficulties to understand the algorithm. Trying to get into it so that I can write functions like you. Thank very much for sharing your great experience and hard work with research. If anyone wants to build his carrier in Digital Marketing then you must go through our curriculum which is designed very professionally with cutting edge of the current requirement of the corporates and based on market trends. For more detail Please visit at
    Digital marketing Courses In UAE

    ReplyDelete
  124. This is a very helpful tutorial on pathfinder using javanet language, Its helpful for developers.
    Data Analytics Courses In Ahmedabad

    ReplyDelete
  125. I really love this blog on Roguelike tutorial 13 because of its technicalities and user friendliness in nature. Data Analytics Courses in Delhi

    ReplyDelete
  126. this technical article is how much is important we come to know after reading this article. i really appreciate for sharing this great post. keep up your work.If someone is looking for data analytics courses in Indore then here is top 5 courses explained in this blog. Please check once for more information. Data Analytics Courses In Indore

    ReplyDelete
  127. This is a great post that explains how to add aggression to your AI in a roguelike game. It goes over how to make your AI choose to fight or flee based on the situation, and how to make it more effective in combat. Overall, this is a great resource for anyone looking to add more depth to their AI. If you are looking to start your career, our Data Analytics Courses in Coimbatore offers an insight into the field of Data Analytics. You will have an opportunity to learn from experts and industry professionals who offer hands-on training methods to their students.
    Data Analytics Courses In Coimbatore

    ReplyDelete
  128. I'm grateful for the enlightening and practical knowledge you have provided on this blog. Keep posting more often.
    Data Analytics Courses In Kolkata

    ReplyDelete
  129. Amazing Article about roguelike tutorial aggressive monsters. The post is written clearly and in easy language. Glad i found your post. keep posting. Digital Marketing Courses in Australia

    ReplyDelete
  130. Hi, thank you for sharing this excellent blog on algorithms. I am learning this so its taking me some time to understand the same. It is surely a technical as well as beneficial blog.
    Data Analytics Courses In Kochi

    ReplyDelete
  131. Thanks for sharing such an excellent article on voguelike tutorial aggressive monsters.it is very useful for students & developers. Data Analytics Courses In Vadodara

    ReplyDelete
  132. Your article is really informative. Thanks for sharing this post. Also, check out these articles,
    Data Analytics Courses in Australia
    Creative Writing Courses in Chandigarh
    Financial Modeling Courses in Dubai


    ReplyDelete
  133. This is an amazing blog about roguelike tutorial 13: aggressive monsters! I really enjoyed reading it and it was very informative! Thanks for allowing us to read this blog. Keep up the good work. Data Analytics Courses in Gurgaon

    ReplyDelete
  134. This is a great tutorial for anyone looking to get into developing roguelike games. He does an excellent job of explaining the basics of how to create aggressive monsters that can be challenging for the player. Thanks for sharing! Data Analytics Courses In Coimbatore

    ReplyDelete
  135. Truly great development in the gaming world. This will give a great elevation to the gaming of specific categories finding path by characters by themselves. Great development. Thanks for sharing your great experience and hard work. If anyone wants to build his carrier in Digital Marketing then you must go through our curriculum which is designed very professionally with cutting edge of the current requirement of the corporates and based on market trends. For more detail Please visit at
    Digital marketing Courses In UAE

    ReplyDelete
  136. Extremely Great blog on roguelike tutorial 13: aggressive monsters. This blog includes some of the great information for create an aggressive monster in video games with some great examples and advices. Thanks for sharing! Digital Marketing Courses in Vancouver

    ReplyDelete
  137. This blog about roguelike tutorial 13: hostile aggressive enemies monsters! is great! It was incredibly educational and I truly loved reading it! We appreciate you letting us read this blog. Continue your wonderful work.
    Data Analytics Courses in Ghana

    ReplyDelete
  138. The principles have been well cited in this article and surely it will even prove to be much better for them in proceeding further with all those instances and the given values which are indeed said to be important. I was simply searching the internet and came across this knowledgeable post of yours. Keep writing such good posts.
    Data Analytics Courses in New Zealand

    ReplyDelete