#define OLC_PGE_APPLICATION #include "pixelGameEngine.h" #include "olcutils.h" using namespace olc; vi2d upperLeftCoords={500,0}; vi2d lowerRightCoords={500,0}; std::vector>board; int sum=0; float timePerTick=0.03; int frameSkips=0; float acc=0; float acc2=0; vi2d sandCoord={500,0}; bool simulationDone=false; bool showVisual=true; float viewX=0; struct Connection{ std::vectorcoords; }; enum ReadState{ READX, READY, WAIT }; vi2d getArrayCoords(vi2d pos){ return pos-upperLeftCoords; } char getBoard(vi2d pos){ vi2d actualCoords=getArrayCoords(pos); if (actualCoords.x<0){ for (int i=0;inewRow; for (int i=0;i=board[0].size()){ for (int i=0;i=board.size()){ std::vectornewRow; for (int i=0;i=timePerTick){ acc-=timePerTick; int framesToSkip=frameSkips; while (framesToSkip-->0){ updateGame(); } } if (acc2>=0.01){ if (GetKey(RIGHT).bHeld){ timePerTick=std::clamp(timePerTick+0.001f,0.f,1.f); acc2=0; } if (GetKey(LEFT).bHeld){ timePerTick=std::clamp(timePerTick-0.001f,0.f,1.f); acc2=0; } if (GetKey(A).bHeld){ viewX-=60*fElapsedTime; } if (GetKey(D).bHeld){ viewX+=60*fElapsedTime; } if (GetKey(W).bHeld){ frameSkips=std::clamp(frameSkips+1,0,1000); } if (GetKey(S).bHeld){ frameSkips=std::clamp(frameSkips-1,0,1000); } } if (GetKey(SPACE).bPressed){ showVisual=!showVisual; } DrawStringDecal({0,0},std::to_string((int)(timePerTick*1000))+"ms"); DrawStringDecal({1,(float)(ScreenHeight()-GetTextSize("S").y*0.4)-1},"Sand Pieces: "+std::to_string(sum),BLACK,{0.4,0.4}); DrawStringDecal({0,(float)(ScreenHeight()-GetTextSize("S").y*0.4)},"Sand Pieces: "+std::to_string(sum),WHITE,{0.4,0.4}); if (showVisual) { // called once per frame for (int x = std::max(0,(int)(upperLeftCoords.x-viewX)); x <= std::min(lowerRightCoords.x,(int)(upperLeftCoords.x-viewX+ScreenWidth())); x++){ for (int y = upperLeftCoords.y; y <= lowerRightCoords.y; y++){ vi2d coords=getArrayCoords({x,y}); if (x==sandCoord.x&&y==sandCoord.y){ Draw(coords.x+viewX, coords.y,YELLOW); } else { Draw(coords.x+viewX, coords.y, (board[coords.y][coords.x]==' ')?Pixel(40,40,40): (board[coords.y][coords.x]=='.')?DARK_YELLOW: Pixel(255,255,255)); } } } } return true; } }; int main() { std::vectorconnections; std::ifstream file("input"); ReadState state=READX; while (file.good()){ std::string line; std::getline(file,line); std::string num1; std::string num2; if (line.length()>0){ state=READX; Connection c; for (int i=0;ib; for (int x=upperLeftCoords.x;x<=lowerRightCoords.x;x++){ b.push_back(' '); } board.push_back(b); } for(int i=0;i