SuperSpaceInvaderTurboApoca.../src/invaderGrids.cpp
2022-01-06 15:07:42 +01:00

57 lines
1.1 KiB
C++

#include<invadersGrid.h>
#include<iostream>
bool InvadersColumn::hasNoValid() const {
return getOutterInvader()==size();
}
unsigned InvadersColumn::getOutterInvader() const {
unsigned i=size();
while(i>0){
--i;
if(at(i)!=InvaderType::NONE)return i;
}
return size();
}
// these are used to invoke rand() as less as possible
unsigned InvadersColumn::randomValid() const {
unsigned validTotal = 0;
for(InvaderType ite : *this){
if(ite!=InvaderType::NONE)++validTotal;
}
unsigned rd = rand() % validTotal;
unsigned validIndex = 0;
for(unsigned i=0;i<size();++i){
if(at(i)!=InvaderType::NONE){
if(validIndex==rd)return i;
++validIndex;
}
}
throw runtime_error("SHOULD NOT HAPPEN");
}
unsigned InvadersGrid::randomValid() const {
unsigned validTotal = 0;
for(const InvadersColumn& i : *this){
if(!i.hasNoValid())++validTotal;
}
unsigned rd = rand() % validTotal;
unsigned validIndex = 0;
for(unsigned i=0;i<size();++i){
if(!at(i).hasNoValid()){
if(validIndex==rd)return i;
++validIndex;
}
}
throw runtime_error("SHOULD NOT HAPPEN");
}