Jag är ganska säker på att du inte vill ha separata trådar som sköter fienderna; du kommer snart att få invecklade synkroniseringsproblem mellan trådarna.
Grovt sett så består ett spel av en loop med följande tre steg:
while (running)
{
CollectInput();
CalculateTimeStep();
RenderImageAndAudio();
}
1. Ta in kommandon från spelaren som sitter vid datorn (tangentbord, mus, spelkontroll, ...). Ifall spelet har en AI så räknas AI'ns simulerade "input" ut här, och den beräkningen baseras på spelets tillstånd från föregående varv av loopen.
2. Beräkna ett tidssteg. Här uppdateras allt tillstånd i spelet baserat på inputen från steg 1 och spelets tillstånd från föregående varv av loopen. Beräkningarna kan innefatta att flytta spelare/fiender, hantera kollisioner, utdela skada, mm.
3. Producera bild och ljud utifrån det nya tillståndet som räknades ut i steg 2 och visa för användaren.
Då jag skriver spelets tillstånd så syftar det till alla variabler som påverkar spelet, dvs positioner på objekt (spelare/fiender/hinder), hastigheter, poäng, liv, mm.
Eftersom du, som du säger, inte vet hur många fiender du kommer att ha så behöver du en mera dynamisk datastruktur än en array, så som ArrayList eller LinkedList. Vilken av de två man vill välja beror på hur man har tänkt att använda dem, de stödjer olika operationer och är olika effektiva i olika fall. Tills vidare tror jag det kommer att fungera bra om du väljer en ArrayList, som är mest lik en vanlig array som du är van att använda.
När du sen ska hantera dina fiender så loopar du typiskt över listan och hanterar dem i sekventiell ordning:
for (int i = 0; i < enemyList.size(); i++)
{
Opponent opponent = enemyList[i];
// ...
}
Det finns möjlighet att snabba upp beräkningarna ifall man kan bearbeta listan parallellt med hjälp av trådar (ifall man har en maskin med flera kärnor/trådar) men det är helt klart överkurs och ingenting jag skulle rekommendera för någon som är nybörjare eller ens har medelmycket programmeringsvana. I regel är datorerna tillräckligt snabba idag för att det inte ska vara några problem att köra det sekventiellt (enkeltrådat) i alla fall.