• 0

Java Programming: Ant Simulator..


Question

Hey guys, I guess it'd be a good idea to explain the basic principle of this program since knowing my Java 'skills' I'll be asking a lot of questions regarding it.

It will basically consist of an "add ant" button that will create an ant in a little panel, each ant has it's own ID (1-10, 10 being the maximum amount of ants) and it's own unique colour. There will be ten radio buttons below the panel so that the user can select what ant they want to move, and they can actually move the ant by using the arrow keys.

The 'ant type' box is disabled at the moment, there's no real need to have it, although I stuck it on there because it may be implemented at a later date.

Here's the code at present:

/* Ant.java
   A program created to simulate an ant colony.
   Author : Nick Drew
   Date : 15/02/2005
   Ref : U30.01 - Java Programming  */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;

public class Ant extends JFrame
{
   int colonySize = 0;
   int[] index = new int[10];
   
   // JLabel and JTextfield for Ant Type
   private JLabel typeJLabel;
   private JTextField typeJTextField;

   // JButton to create an ant
   private JButton createJButton;

   // JTextArea to display results
   private JTextArea backgroundJTextArea;
   
   // JLabel for the Instructions
   private JLabel instructionsJLabel;
   
   // JLabels for the Ants
   private JLabel antOneJLabel;
   private JLabel antTwoJLabel;
   private JLabel antThreeJLabel;
   private JLabel antFourJLabel;   
   private JLabel antFiveJLabel;
   private JLabel antSixJLabel;   
   private JLabel antSevenJLabel;
   private JLabel antEightJLabel;   
   private JLabel antNineJLabel;
   private JLabel antTenJLabel;
   
   // JLabels for the Key
   private JLabel keyOneJLabel;
   private JLabel keyTwoJLabel;
   private JLabel keyThreeJLabel;
   private JLabel keyFourJLabel;   
   private JLabel keyFiveJLabel;
   private JLabel keySixJLabel;   
   private JLabel keySevenJLabel;
   private JLabel keyEightJLabel;   
   private JLabel keyNineJLabel;
   private JLabel keyTenJLabel;
   
   // no-argument constructor
   public Ant()
   {
      createUserInterface();
   }
   
   // create and position GUI components; register event handlers
   private void createUserInterface()
   {   
      // get content pane and set layout to null
      Container contentPane = getContentPane();
      contentPane.setLayout( null );

      // set up typeJLabel
      typeJLabel = new JLabel();
      typeJLabel.setBounds( 164, 22, 80, 21 );
      typeJLabel.setText( "Ant Type:" );
      contentPane.add( typeJLabel );
         
      // set up typeJTextField
      typeJTextField = new JTextField();
      typeJTextField.setBounds( 238, 22, 98, 21 );
      typeJTextField.setHorizontalAlignment( JTextField.RIGHT );
      typeJTextField.setEnabled( false );
      contentPane.add( typeJTextField );
      
      /* ----------------------------- */
      /* Start Of Key / Selection Area */
      
      // set up instructionsJLabel
      instructionsJLabel = new JLabel();
      instructionsJLabel.setBounds( 136, 328, 226, 21 );
      instructionsJLabel.setText( "Please select the ant you wish to move." );
      contentPane.add( instructionsJLabel );
      
      // set up keyOneJLabel
      keyOneJLabel = new JLabel();
      keyOneJLabel.setBounds( 68, 348, 80, 21 );
      keyOneJLabel.setText( "?" );
      keyOneJLabel.setForeground(Color.BLACK);
      contentPane.add( keyOneJLabel );
      
      // set up keyTwoJLabel
      keyTwoJLabel = new JLabel();
      keyTwoJLabel.setBounds( 68, 368, 80, 21 );
      keyTwoJLabel.setText( "?" );
      keyTwoJLabel.setForeground(Color.BLUE);
      contentPane.add( keyTwoJLabel );
      
      // set up keyThreeJLabel
      keyThreeJLabel = new JLabel();
      keyThreeJLabel.setBounds( 68, 388, 80, 21 );
      keyThreeJLabel.setText( "?" );
      keyThreeJLabel.setForeground(Color.CYAN);
      contentPane.add( keyThreeJLabel );
      
      // set up keyFourJLabel
      keyFourJLabel = new JLabel();
      keyFourJLabel.setBounds( 68, 408, 80, 21 );
      keyFourJLabel.setText( "?" );
      keyFourJLabel.setForeground(Color.GREEN);
      contentPane.add( keyFourJLabel );
      
      // set up keyFiveJLabel
      keyFiveJLabel = new JLabel();
      keyFiveJLabel.setBounds( 68, 428, 80, 21 );
      keyFiveJLabel.setText( "?" );
      keyFiveJLabel.setForeground(Color.ORANGE);
      contentPane.add( keyFiveJLabel );
      
      // set up keySixJLabel
      keySixJLabel = new JLabel();
      keySixJLabel.setBounds( 268, 348, 80, 21 );
      keySixJLabel.setText( "?" );
      keySixJLabel.setForeground(Color.PINK);
      contentPane.add( keySixJLabel );
      
      // set up keySevenJLabel
      keySevenJLabel = new JLabel();
      keySevenJLabel.setBounds( 268, 368, 80, 21 );
      keySevenJLabel.setText( "?" );
      keySevenJLabel.setForeground(Color.RED);
      contentPane.add( keySevenJLabel );
      
      // set up keyEightJLabel
      keyEightJLabel = new JLabel();
      keyEightJLabel.setBounds( 268, 388, 80, 21 );
      keyEightJLabel.setText( "?" );
      keyEightJLabel.setForeground(Color.BLUE);
      contentPane.add( keyEightJLabel );
      
      // set up keyNineJLabel
      keyNineJLabel = new JLabel();
      keyNineJLabel.setBounds( 268, 408, 80, 21 );
      keyNineJLabel.setText( "?" );
      keyNineJLabel.setForeground(Color.MAGENTA);
      contentPane.add( keyNineJLabel );
      
      // set up keyTenJLabel
      keyTenJLabel = new JLabel();
      keyTenJLabel.setBounds( 268, 428, 80, 21 );
      keyTenJLabel.setText( "?" );
      keyTenJLabel.setForeground(Color.YELLOW);
      contentPane.add( keyTenJLabel );
      
                  
      // set up createJButton and register its event handler
      createJButton = new JButton();
      createJButton.setBounds( 198, 58, 94, 24 );
      createJButton.setText( "Create Ant" );
      contentPane.add( createJButton );
      createJButton.addActionListener( 
       new ActionListener() // anonymous inner class
         {
            // method called when user clicks createJButton
            public void actionPerformed( ActionEvent event )
            {
               createJButtonActionPerformed( event );
            }      
         } // end anonymous inner class
         
      ); // end call to addActionListener
      
      //setup backgroundJTextArea
      backgroundJTextArea = new JTextArea();
      backgroundJTextArea.setBounds( 46, 86, 386, 246 );
   backgroundJTextArea.setEditable( false );
      contentPane.add( backgroundJTextArea );
      
      // set properties of window
      setTitle( "Java Ant Class" );  	// set window's title
      setSize( 488, 488 );                  // set window's size
      setVisible( true );                   // display window
      
   } // end method createUserInterface
   
   // method called when user clicks calculateJButton
   private void createJButtonActionPerformed( ActionEvent event )
   {  
      JOptionPane.showMessageDialog(null, "Add Ant, etc");
   } // end method calculateJButtonActionPerformed
  
   // main method
   public static void main( String[] args )
   {
      Ant application = new Ant();
      application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

   } // end method main
   
} // end class Ant

Edited by blizeH
Link to comment
https://www.neowin.net/forum/topic/287825-java-programming-ant-simulator/
Share on other sites

20 answers to this question

Recommended Posts

  • 0

if you really want to get a bit advanced and you know html. use JEditor Pane. you could add a real picture of an ant.

just refer to a image file just like in normal html.

 JEditorPane htmlEditor = new JEditorPane("text/html","<HTML>" +
 ? ? ? ? ? ? ? ? ? ? ? "<head></head>"+
                       "<body>" +
 ? ?                   "<B>HELLO<B>"+ ?
 ? ? ? ?               "</body>"+
 ? ? ? ? ? ? ? ? ? ? ? "</HTML>");

  • 0

Nooo, I wish I'd read this thread earlier and saw that, HTML is so much easier than Java it's not even funny :p

Anyway...

I've now got the layout working Ok, it doesn't look great but it does work, so it'll do for now I think! Here's an image of it:

ant.jpg

Ok, here's my next question and this is where it gets tricky. I've edited the first post to show how my code looks at present.

I need to code the 'create ant' button to create a JLabel ( antOneJLabel etc to be precise ) to appear in the middle of the white box. The problem is, the only way I can think of this is by using a while loop, which creates all ten ants at once (doh) and even worse, they don't use the appropiate ID set in index, they're all the same colour etc too. How do I set it so that each time I click add new ant it adds the ants in order, with the appropiate colour and the appropiate index number?

Any suggestions extremely welcome because I'm completely stumped.

  • 0

I'm not sure if this is what you want but Ill post it anyway...

  Quote
public class Ant extends JFrame implements ActionListener

{

...in create part

createJButton.addActionListener(this); //listen to button clicks

//creates a JLabel

private JLabel createAntLabel(int antType)

{

? if (antType == 1)

? ? ?return new JLabel("1");

? else

? if (antType == 2)

? ? ?return new JLabel("2");

?else

? if (antType == 3)

? ? ?return new JLabel("3");

?...etc

}

//listen to mouse clicks

public void actionPerformed(ActionEvent e)

{

if(e.getSource == createJButton)

???????? - put what ant index you are creating herecreating here

? ? ?  antPanel.add(createAntLabel(antType)); //note: the position of the label will depend on the layout manager used and how it has been setup

? ? }

}

Edited by liykh001
  • 0

Two hours down the line and I must admit I am completely and utterly stumped, I've started again countless times and I don't seem to be getting anywhere.

I'm getting errors mostly in the last section of code, I've had to change the antType thing to index since antType isn't actually going to play any role in the program (sorry, should of made this more clear).

I've pasted the current code (which isn't working, at all) here or if someone could add me on MSN ( kissitgoodbye (at) hotmail.co.uk ) that'd be fantastic, thanks :)

  • 0

Hmm, I dont have time to help you much more with this today sorry.....

I have fixed you compile errors, but ..... I cant get the layout manager to work for some reason....

HELP ME :D

when you do antPanel.add(<aw label>), the labels keep getting overlayed with each other. I tried to work out the problem, but cant put my finger on it.

Ant.zipFetching info...

  • 0

I'm using a program called JCreator ( www.jcreator.com ) so I'm having to code all of the interface by hand.

I've now spent about 10 hours on this and I'm getting absolutely no where, I really appreciate the help (especially from liykh001, superstar!) but I hate this langauge so much, I've lost all motivation and I've completely given up.

In true despiration, I'm going to offer anyone who can help me a lot ?15 or so for their help, I know I shouldn't be doing this but it's honestly driving me insane! Oh, if you're over 18 I'll also throw in a 'lil something extra that you may find useful, infact, for sure you'll find it useful and i'll talk you through it for as long as it takes.

blizeH ( at ) gmail.com

liyk001 gets first refusal (although I'm sure he'll decline, as will everyone else knowing my luck) since he's been such a fantastic help so far:))

Edit: WE HAVE A WINNER! (sorry just saw the attachment liyk001 ;x) add me up to msn - kissitgoodbye (at ) hotmail.co.uk please:))

  • 0

No real rush, although sometime during or before the weekend would be fantastic, it looks to be almost complete now it's not going to requite a lot of work from now on I wouldn't of thought :) Either way add me up and I'll give you something via PayPal to say thanks for the help so far :)

  • 0

I don't care if you don't need the money, I want to thank you so even if you buy yourself a computer game, a java book or whatever with it that's fine :)

One thing I didn't make very clear is that the JTextLabel at the top (antType) doesn't actually do anything, it's not really suppose to, the ants are supposed to be added in order I do believe (click it and it adds ant 1, then again it adds ant 2 - this is all done via the index variable). I think that's the way it works, although I may be wrong.

Again, thank you so much for your help, you really are an absolute star :D

  • 0

liykh001 thank you so much!!! You really are an absolute hero, lol!

Now, my final question :$ I need to be able to select the ants and move them around, I've found this sample of a radio button but it doesn't let you place the radio buttons where you want so I guess it's pretty useless.

http://java.sun.com/docs/books/tutorial/ui...tml#radiobutton

I also found something regarding the keypress event but am not really sure how to implement it, especially not the bit that actually moves it :(

  • 0
  blizeH said:

Now, my final question :$ I need to be able to select the ants and move them around, I've found this sample of a radio button but it doesn't let you place the radio buttons where you want so I guess it's pretty useless. 

http://java.sun.com/docs/books/tutorial/ui...tml#radiobutton

I also found something regarding the keypress event but am not really sure how to implement it, especially not the bit that actually moves it :(

585520446[/snapback]

Well that will be harder :o, espcially trying to move html text :)

maybe you want to go back to grid layout then if your main purpose is to move ants not add them. if you are going to use the html editor version, you will need to move the ants in the same way that you can highlight and move MS Words to different parts of a paragraph.

This is as far as I go on this .... sorry your on your own....

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • I suspect this was primarily developed with the Switch 2 in mind, which would explain the poor visuals. It seems like they're hoping the nostalgic GoldenEye 64 crowd is still loyal to Nintendo consoles. Unfortunately, this might be yet another title limited by development for underpowered Nintendo hardware.
    • Amazon's Lab126 ventures into "Physical AI" with new robotics team by Paul Hill Amazon has announced that it’s forming a new agentic AI team within its secretive hard research and development division, Lab126, to begin work on physical AI. Specifically, the company is looking to develop an agentic AI framework for use in robotics, which could start to impact blue-collar jobs, especially at its warehouses. Agentic AI is one of the latest developments in AI, superseding the previous generative AI that took off with the launch of ChatGPT. Agentic AI models are special because they can complete multi-step actions for the user to complete complex tasks. Thanks to all the visual and audio capabilities added to generative AI in previous years, these agentic models can perceive their environment, reason, plan, and act to achieve goals with minimal human intervention. If Amazon can successfully bring agentic AI to robots, they will finally be able to interact with the real world in a way they can’t today, as software running on a computer. Many people are concerned about AI’s impact on white-collar jobs right now, but when Amazon develops physical AI, it will also affect blue-collar manual work. The work is going to be carried out by Amazon’s R&D company, Lab126. It was set up over 20 years ago and has created many iconic Amazon devices, including the Kindle, Fire tablets, Amazon Fire TV, Amazon Echo devices, and more. Who it affects, and how The biggest impact of physical AI developed by Lab126 will be on Amazon’s warehouses and logistics. The company said it wants to create robots that can perform tasks based on natural language instructions. As usual for a big tech company, Amazon claims that these robots will be assistants, but it’s difficult to see how they won’t reduce the need for people. Solely based on Amazon’s plans to automate work in its factories, customers will see an indirect impact from the move through faster deliveries and potentially lower costs. The decision by Amazon to focus on agentic AI in robots is pretty interesting because so far, we’ve mainly been hearing about agentic AI limited to computer applications, such as intelligent web browsers like Opera Neon. Why it's happening Amazon has a reputation for being an efficient company, particularly when it comes to the employment of warehouse workers who are known to have strict restroom breaks. Creating robots that can help speed up warehouse activities will further boost efficiency at the company and could potentially reduce its costs and improve safety. The beginning of work on physical AI is just the next evolution of AI that we could start to hear about in the coming months and years. As agentic AI gets better, companies will be looking to see what they can advance next and physical AI may be where they choose to go next; it certainly seems like this is what Amazon has settled on in this move. If Amazon’s physical AI doesn’t lead to mass layoffs of warehouse employees, it could drastically boost worker safety. Employees could potentially be less fatigued from moving around so much, which could lead to better concentration and fewer accidents. Right now, Amazon claims that these robots will only be assistants and not replacements. While Amazon will certainly be a leader in physical AI, given its massive wealth to throw at the problem, once the technology is available, it will likely be available for sale to other businesses to use, too. Caveats and what to watch for While it’s a notable development, it still sounds like Amazon is in the early stages of developing these physical AI systems, given that it has only just set up the team. We also don’t know what specific products Amazon is planning to build or the timelines for deployment. Ever since generative AI came onto the scene, there has been discussion of AI safety. With AI moving into the physical world, it will also bring up discussion about the safety concerns. Current measures are mainly concerned with AI software running on computers, not when it interacts physically with the world. Finally, and probably the biggest concern, what will these “assistants” do to people’s jobs? Companies will likely find themselves bringing in fewer new hires initially, but it could also displace people from their jobs. Source: CNBC
    • Nintendo Switch 2 launches, where to buy and a list of games that it may not support by Sayan Sen Nintendo announced the Switch 2 back in early April this year and then followed that up with more details related to performance and hardware features later. The company touted 10x the performance of the Switch. However, on the flip side, the battery suffers, and you also need new microSD Express cards for storage. For those who need a refresher, here are the technical specification details of the Switch 2: Specification Details Dimensions Approx. 166mm x 272mm x 13.9mm (with Joy-Con 2 attached); Maximum thickness from control stick tip to ZL/ZR buttons: 30.7mm Weight Approx. 401g (console only); Approx. 534g (with Joy-Con 2 controllers attached) Screen 7.9-inch capacitive touch LCD; 1920x1080 resolution; HDR10 support; VRR up to 120 Hz CPU/GPU Custom processor made by NVIDIA Storage 256 GB UFS (a portion reserved for system use) Communication Wireless LAN (Wi‑Fi 6), Bluetooth; Wired LAN available in TV mode via dock Video Output Up to 3840x2160 at 60 fps via HDMI in TV mode; Supports 120 fps at lower resolutions; HDR10 enabled Audio Output Linear PCM 5.1 channel via HDMI; Stereo speakers Microphone Built-in monaural microphone with noise cancellation, echo cancellation and auto gain control Buttons POWER and Volume buttons USB Ports 2 USB Type-C ports (bottom port for charging/dock connection; top port for accessories/charging) Audio Jack 3.5mm stereo mini plug (CTIA standard) Game Card Slot Supports both Nintendo Switch 2 and Nintendo Switch game cards Expansion Slot microSD Express card slot (compatible with cards up to 2 TB; other microSD cards can copy screenshots and videos) Sensors Accelerometer, gyroscope, brightness sensor Battery Lithium-ion, 5220 mAh; Approx. 2–6.5 hours lifetime; 3-hour charge time in sleep mode Dock Approx. 115mm x 201mm x 51.2mm; Weight: approx. 383g For those looking to get one, major retailers like Walmart, GameStop, Best Buy, and Target have all confirmed that they will have limited console stock from time to time so you will need to be on alert and check back. Nintendo has also published a full list of games that may not work on the Switch 2: Borderlands 3 Chrono Cross: The Radical Dreamers Edition Crash Bandicoot N-Sane Trilogy Guilty Gear XX Accent Core Plus R KarmaZoo Marvel vs. Capcom Fighting Collection: Arcade Classics Mortal Kombat 1 Overwatch 2 Star Wars: Knights of the Old Republic II: The Sith Lords Star Wars Republic Commando Super Mega Baseball 4 Tombi! Special Edition Tony Hawk's Pro Skater 1+2 Touhou Genso Wanderer Reloaded Ty the Tasmanian Tiger HD Warriors: Abyss However, keep in mind that Nintendo last updated the support list last month on May 27th and the company may still be testing these. So keep an eye on the official list of games on this webpage here on Nintendo's site. Have you managed to pick up the Nintendo Switch 2? Let us know in the comments.
    • Court orders Apple to keep web links in the App Store, eroding its iOS payment monopoly by Fiza Ali Apple has been ordered to continue permitting web links and external payment options in the App Store after its bid to halt court’s ruling was declined today by a higher court. Earlier this year, in April, a federal judge decreed that Apple must allow developers to include web links in their iOS apps, remove restrictions on link formatting, and enable external payment methods without taking a commission on transactions. Apple immediately appealed and sought an injunction to delay implementation of the order while the case progressed. However, the United States Court of Appeals has now refused Apple’s emergency request to stay the district court’s order. In its decision, the panel held that Apple had not demonstrated a sufficient likelihood of success on appeal, nor that it would suffer irreparable harm if the order were enforced. The court also considered potential prejudice to other parties and the public interest, concluding that an immediate suspension was not warranted. This ruling makes it much harder for Apple to overturn the April decision, which came from a lawsuit initiated by Epic Games. Epic first sued Apple’s App Store policies in 2020, claiming that the company’s restrictions harmed competition. While Epic did not prevail on every count, the court did rule that Apple must allow developers to inform users of alternative purchasing options at better prices. Despite that narrow victory, Apple repeatedly failed to conform to the terms from the original 2021 ruling, prompting the judge in April to issue a more detailed order outlining precisely how the App Store must be “opened up”. In response to the April ruling, prominent third-party apps have swiftly implemented web-based purchasing links. Both Spotify and Amazon’s Kindle app now include buttons directing users to purchase subscriptions via their websites, bypassing Apple’s in-app payments. Additionally, Fortnite has made a comeback on iOS after around five years, presenting users with the choice between Apple’s in-app payment system and Epic’s own payment and rewards mechanism. According to Epic CEO Tim Sweeney, there is presently a 60:40 split in usage favouring Apple’s system over Epic’s, though the gap appears to be narrowing. An Apple spokesperson, Olivia Dalton, issued a statement expressing the company’s disappointment: For now, Apple must comply with the existing injunction. Unless the Appeals Court later overturns the ruling, developers can continue to include web payment links, and Apple’s longstanding monopoly over iOS payment processing may continue to erode. The ultimate resolution will depend on the outcome of the ongoing appeals, which could set a significant precedent for how app marketplaces operate in the future. Source: The Verge
  • Recent Achievements

    • Rookie
      GTRoberts went up a rank
      Rookie
    • First Post
      James courage Tabla earned a badge
      First Post
    • Reacting Well
      James courage Tabla earned a badge
      Reacting Well
    • Apprentice
      DarkShrunken went up a rank
      Apprentice
    • Dedicated
      CHUNWEI earned a badge
      Dedicated
  • Popular Contributors

    1. 1
      +primortal
      397
    2. 2
      +FloatingFatMan
      177
    3. 3
      snowy owl
      170
    4. 4
      ATLien_0
      167
    5. 5
      Xenon
      134
  • Tell a friend

    Love Neowin? Tell a friend!