Programmera spel i C++ för nybörjare/Länkad lista 2
Gå igenom könRedigera
Koden inspirerad av artikel: http://www.gamedev.se/artiklar/media/lankadelistor/lankadelistor.pdf
Nu vet vi hur vi lägger in spelare i kön, och även om en speciell spelare finns i kön. Men anta att man vill gå igenom alla sälar i listan för att t.ex. se vilken y-koordinat de har? Då kan man använda följande funktion:
void TraverseList() {//Börja att gå igenom listan seal *Temp = Head; //Börja vid huvudet while (Temp != NULL) //Så länge det finns en fiende i kön { std::cout << Temp->spelare_y <<std::endl; //Skriv ut y-koordinat Temp = Temp->Next; //Gå till nästa deltagare i kön } } //Sluta att gå igenom listan
Ta bort en sälRedigera
Anta att du skjutit ihjäl en säl, då skall den bort ur listan. Hur går det till?
- 1. Hitta sälen som ska tas bort
- 2. Länka föregående säl i kön med sälen framför den som skall dö (länka ur sälen som ska tas bort)
- 3. Ta bort sälen
Enkelt, man kan använda följande kod:
void DeleteNode(int ID) { seal *Temp = Head; //Skapa en temporär pekare till huvudet if (Head == 0) //Om det inte finns=tom kö, avbryt return; while (Temp != 0&& Temp->ID != ID) //Om det finns folk i kön men ID är fel Temp = Temp->Next; //Gå vidare if (Temp == 0) //Om temp inte finns = tom kö, avbryt return; if (Head == Tail)//Finns bara en i ledet { delete Head; //Radera huvudet Head = 0; //Nollställ huvud och svans Tail = 0; //-"- } else if (Temp == Head) //Om huvudet = temp = först i ledet { Head = Head->Next; //Tryck tillbaka head ett steg delete Temp; //Radera temp 0 radera huvudet } else if (Temp == Tail) //Om svansen skall raderas { Temp->Previous->Next = 0; //Tryck tillbaka svansen ett steg Tail = Temp->Previous; //Sätt temp som sist i ledet delete Temp; //radera temp } else //Id stämmer och det är en säl i kön { Temp->Previous->Next = Temp->Next; //Koppla ur sälen ur kön Temp->Next->Previous = Temp->Previous; //Koppla ur sälen ur kön delete Temp; //Radera sälen } }
Pröva om det fungerar med:
DeleteNode(2); //Radera säl 2 TraverseList(); //Gå igenom listan för att se om den är borta
Anta slutligen att du vill sätta in en säl inuti kön på en plats som inte är längst fram eller längst bak. Man kan göra så här:
- 1. Hitta platsen där sälen ska sättas in
- 2. Koppla ihop de två närliggande sälarna med den nya sälen
- 3. Koppla ihop den nya sälen med de två närliggande sälarna
Koden är som följer:
void InsertNode(int ID, seal *NewNode) { seal *Temp = Head; //Temporär säl kopplas till huvudet if (Head == 0 && Tail == 0)//Om det inte finns någon kö { Head = NewNode; //Sälen är både tail och head, ensam i kön Tail = NewNode; } while (Temp != 0 && Temp->ID != ID) //Om det finns fler sälar Temp = Temp->Next; //Gå till nästa säl i kön if (Temp == 0)//Finns ingen säl, så avbryt return; Temp->Previous->Next = NewNode; //Koppla in sälen som nummer två NewNode->Previous = Temp->Previous; //Koppla in sälen som nummer två Temp->Previous = NewNode; NewNode->Next = Temp; }
Skall man sedan koppla in säl 5 framför säl 4 i kön skriver man bara:
InsertNode(seal5->ID, seal4); //Placerar säl fem framför säl 4