Drawing lines slow: solved

Started by jetxl, Tue 28/09/2004 12:42:25

Previous topic - Next topic

jetxl

This code is working but is still craches sometimes when I give randome input.
Steps(Random(3200),Random(2000),Random(3200),Random(2000),Random(15),30,Random(500));
Please, why does my code crash from time to time.


EDIT: Sorry, I had to post it quick because people were waiting for me.

Anyway, it's fixed! So feel free to use and change it.
sourcecode+demoÃ,  http://www.2dadventure.com/ags/stepstest.zip

Code: ags

function StepsRightDown(int beginX, int beginY, int endX, int endY, int delay, int stepX, int stepY){
Ã,  int flag;Ã,  //flag to leave Y loop
Ã,  while(beginX<=endX){
Ã,  Ã,  beginX++;
Ã,  Ã,  if(beginX%(stepX)==0){
Ã, Ã,  Ã,  Ã,  while(flag==0){
Ã,  Ã,  Ã,  Ã,  beginY++;
Ã,  Ã,  Ã,  Ã,  if(beginY%(stepY)==0){Ã, 
Ã,  Ã,  Ã,  Ã,  Ã,  flag=1;
Ã,  Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);Ã, 
Ã,  Ã,  Ã,  Ã,  if(beginY%delay==0)Wait(0);
Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  flag=0;
Ã,  Ã,  }
Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  if(beginX%delay==0)Wait(0);
Ã,  }
}

function StepsLeftDown(int beginX, int beginY, int endX, int endY, int delay, int stepX, int stepY){
Ã,  int flag;
Ã,  while(beginX>=endX){Ã,  
Ã,  Ã,  beginX--;
Ã,  Ã,  if(beginX%(stepX)==0){
Ã,  Ã,  Ã,  while(flag==0){
Ã,  Ã,  Ã,  Ã,  beginY++;
Ã,  Ã,  Ã,  Ã,  if(beginY%(stepY)==0){
Ã,  Ã,  Ã,  Ã,  Ã,  flag=1;
Ã,  Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  Ã,  Ã,  if(beginY%delay==0)Wait(0);
Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  flag=0;
Ã,  Ã,  }
Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  if(beginX%delay==0)Wait(0);
Ã,  }
}

function StepsRightUp(int beginX, int beginY, int endX, int endY, int delay, int stepX, int stepY){
Ã,  int flag;
Ã,  while(beginX<=endX){Ã,  
Ã,  Ã,  beginX++;
Ã,  Ã,  if(beginX%(stepX)==0){
Ã,  Ã,  Ã,  while(flag==0){
Ã,  Ã,  Ã,  Ã,  beginY--;
Ã,  Ã,  Ã,  Ã,  if(beginY%(stepY)==0){
Ã,  Ã,  Ã,  Ã,  Ã,  flag=1;
Ã,  Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  Ã,  Ã,  if(beginY%delay==0)Wait(0);
Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  flag=0;
Ã,  Ã,  }
Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  if(beginX%delay==0)Wait(0);
Ã,  }
}

function StepsLeftUp(int beginX, int beginY, int endX, int endY, int delay, int stepX, int stepY){
Ã,  int flag;
Ã,  while(beginX>=endX){Ã,  
Ã,  Ã,  beginX--;
Ã,  Ã,  if(beginX%(stepX)==0){
Ã,  Ã,  Ã,  while(flag==0){
Ã,  Ã,  Ã,  Ã,  beginY--;
Ã,  Ã,  Ã,  Ã,  if(beginY%(stepY)==0){
Ã,  Ã,  Ã,  Ã,  Ã,  flag=1;
Ã,  Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  Ã,  Ã,  if(beginY%delay==0)Wait(0);
Ã,  Ã,  Ã,  }
Ã,  Ã,  Ã,  flag=0;
Ã,  Ã,  }
Ã,  Ã,  RawDrawLine(beginX/10,beginY/10,beginX/10,beginY/10);
Ã,  Ã,  if(beginX%delay==0)Wait(0);
Ã,  }
}

function Steps(int beginX, int beginY, int endX, int endY, int colour, int delay, int steps){
Ã,  int stepX;
Ã,  int stepY;
Ã,  RawSetColor(colour);
Ã,  ifÃ,  Ã,  Ã, (beginX-endX<0&&beginY-endY<0){
Ã,  Ã,  ifÃ,  Ã,  Ã, ((endX-beginX)<=(endY-beginY)&&steps==0){stepX=10; stepY=(endY-beginY)*10/(endX-beginX);}Ã, 
Ã,  Ã,  else if((endX-beginX)> (endY-beginY)&&steps==0){stepX=(endX-beginX)*10/(endY-beginY); stepY=10;}
Ã,  Ã,  elseÃ,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã, {stepX=(endX-beginX)*10/steps; stepY=(endY-beginY)*10/steps;}Ã, 
Ã,  Ã,  if(steps/10<(endX-beginX)&&steps/10<(endY-beginY))StepsRightDown(beginX,beginY,endX,endY,delay,stepX,stepY);
Ã,  }
Ã,  else if(beginX-endX>0&&beginY-endY<0){Ã,  //left down
Ã,  Ã,  ifÃ,  Ã,  Ã, ((beginX-endX)<=(endY-beginY)&&steps==0){stepX=10; stepY=(endY-beginY)*10/(beginX-endX);}Ã, 
Ã,  Ã,  else if((beginX-endX)> (endY-beginY)&&steps==0){stepX=(beginX-endX)*10/(endY-beginY); stepY=10;}Ã, 
Ã,  Ã,  elseÃ,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã, {stepX=(beginX-endX)*10/steps; stepY=(endY-beginY)*10/steps;}Ã,  
Ã,  Ã,  if(steps/10<(beginX-endX)&&steps/10<(endY-beginY))StepsLeftDown(beginX,beginY,endX,endY,delay,stepX,stepY);
Ã,  }
Ã,  else if(beginX-endX<0&&beginY-endY>0){Ã,  //right up
Ã,  Ã,  ifÃ,  Ã,  Ã, ((endX-beginX)<=(beginY-endY)&&steps==0){stepX=10; stepY=(beginY-endY)*10/(endX-beginX);}Ã,  
Ã,  Ã,  else if((endX-beginX)> (beginY-endY)&&steps==0){stepX=(endX-beginX)*10/(beginY-endY); stepY=10;}
Ã,  Ã,  elseÃ,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã, {stepX=(endX-beginX)*10/steps; stepY=(beginY-endY)*10/steps;}
Ã,  Ã,  if(steps/10<(endX-beginX)&&steps/10<(beginY-endY))StepsRightUp(beginX,beginY,endX,endY,delay,stepX,stepY);
Ã,  }
Ã,  else if(beginX-endX>0&&beginY-endY>0){Ã,  //left up
Ã,  Ã,  ifÃ,  Ã,  Ã, ((beginX-endX)<=(beginY-endY)&&steps==0){stepX=10; stepY=(beginY-endY)*10/(beginX-endX);}
Ã,  Ã,  else if((beginX-endX)> (beginY-endY)&&steps==0){stepX=(beginX-endX)*10/(beginY-endY); stepY=10;}
Ã,  Ã,  elseÃ,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã, {stepX=(beginX-endX)*10/steps; stepY=(beginY-endY)*10/steps;}
Ã,  Ã,  if(steps/10<(beginX-endX)&&steps/10<(beginY-endY))StepsLeftUp(beginX,beginY,endX,endY,delay,stepX,stepY);
Ã,  }
}

funny, a year ago i did this in java at school

Radiant

It would actually help if you would specify in which line AGS crashed, and with which message. Other than that I'd say that one of your random values sometimes gets out of the acceptable range, have you tried lowering alll bounds by one? (since in AGS, Random(10) means a number between 0 and 10 inclusive, whereas in C, rand(10) means a number between 0 and 9)

SSH

#2
Might find it handy to look at the rather more concise code here: http://www.adventuregamestudio.co.uk/yabb/index.php?topic=14871.0

12

SMF spam blocked by CleanTalk