Листинг
#include "StdAfx.h"
#include "a2b2c2.h"
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
void list::Add_element(int str, int stb, int num, bool bomb)
{
element *new_element = new element;
if (head == NULL) //first elem
{
new_element->prev = new_element;
new_element->next = new_element;
head = new_element;
tail = new_element;
}
new_element->bomb = bomb;
new_element->num = num;
new_element->str = str;
new_element->stb = stb;
tail->next = new_element;//ссылка с предпоследнего
head->prev = new_element;//ссылка с первого
new_element->next = head;
new_element->prev = tail;
tail = new_element;
count_element++;
};
void list::Print_list()
{
element *new_element = head;
if (head == NULL)
cout << "Empty list\n";
else
{
cout << endl;
for (int i=0; i<count_element; i++)
{
if (new_element->bomb == true)
cout << "bomb " << ": [" << new_element->str << ";" << new_element->stb << "]\n";
//else
// cout << "box number " << new_element->num << ": [" << new_element->str << ";" << new_element->stb << "]\n";
new_element = new_element->next;
}
/*
cout << endl << "List <-:";
new_element = tail;
for (int i=0; i < count_element; i++)
{
cout << new_element->data + ' ';
new_element = new_element->prev;
}*/
}
};
void list::Del_element(int str, int stb, int level)
{
element *new_element = head;
{
for(int i=0; i<level; i++) //иначе, переходим до этого элемента
{
new_element = new_element->next;
if ((new_element->str==str) && (new_element->stb == stb))
break;
}
if (new_element == head) //если удаляем первый элемент
{
if (count_element == 1) //если этот элемент единственный
{
head = NULL;
tail = NULL;
}
else //если он первый, но не единственный
{
head = new_element->next;//head укаывает на второй
new_element->next = NULL;
new_element->prev = NULL;//удаляем ссылки удаляемого элемента
head->prev = tail;//второй->последний
tail->next = head;//последний->второй
}
cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";
delete new_element;
count_element--;
return;
}
}
if (new_element == tail) //если удаляем последний элемент
{
tail = new_element->prev;
new_element->next = NULL;
new_element->prev = NULL;
tail->next = head;
head->prev = tail;
cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";
delete new_element;
count_element--;
}
//если элемент находится в центре списка
if ((new_element != head) && (new_element != tail))
{
//new_element
new_element->prev->next = new_element->next; //предыдущий элемент указывает на следующий
new_element->next->prev = new_element->prev; //следующий указывает на предыдущий
cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";
delete new_element;
count_element--;
return;
}
};
void list::Del_list()
{
if (head != NULL)
for (int i=0; i < count_element; i++)
{
element *new_element = head;
head = head->next;
new_element->next = NULL;
new_element->prev = NULL;
delete new_element;
}
count_element = 0;
head = NULL;
tail = NULL;
};
void KillBomb(int level)
{
bool fl=true;
for (int i=0; i<level; i++)
for (int j=0; j<level; j++)
if ((a[i][j]==20) && (b[i][j]==1))
{
new_element = bomb_list.head;
int ttl =0;
bool usf_elem = true;
while (usf_elem)
{
new_element = new_element->next;
ttl++;
if (((new_element->str == i) && (new_element->stb == j)) || (ttl>level*level+1))
usf_elem=false;
}
if (new_element == bomb_list.head)
if (bomb_list.count_element == 1)
bomb_list.head = NULL;
else
bomb_list.head = new_element->next;
if (new_element == bomb_list.tail)
if (bomb_list.count_element == 1)
bomb_list.tail = NULL;
else
bomb_list.tail = new_element->prev;
new_element->prev->next = new_element->next;//ссылка с предпоследнего на следующий
new_element->next->prev = new_element->prev;//со следующего на предыдущий
bomb_list.count_element--;
if(game_list.head == NULL)
{
game_list.head = new_element;
game_list.tail = new_element;
new_element->next = new_element;
new_element->prev = new_element;
}
else
{
game_list.tail->next = new_element;
new_element->prev = game_list.tail;
game_list.head->prev = new_element;
new_element->next = game_list.head;
game_list.tail = new_element;
}
game_list.count_element++;
}
cout <<"\nBombs left: ";
bomb_list.Print_list();
cout <<"\nBombs found: ";
game_list.Print_list();
bomb_list.Del_list();
game_list.Del_list();};