# Qbasicnews.com

## QbasicNews.Com => Challenges => Topic started by: seph on February 29, 2004, 12:36:55 AM

 Title: Make a better version of this! Post by: seph on February 29, 2004, 12:36:55 AM By better I mean more efficient. It should look about the same, but make it smaller(size), faster. And let user have option of side number...(made it in like 20 mins, feel sorta proud since I haven't touched QB in a few months, and I have a crappy keyboard in which the Ins and Del buttons are moved)Code:DEFINT A-ZRANDOMIZE TIMERCONST xBound = 310, yBound = 190SCREEN 13CLSTYPE allDots        x AS SINGLE        y AS SINGLE        xAngle AS SINGLE        yAngle AS SINGLEEND TYPEINPUT "How many sides?", numDotsDIM Dot(1 TO numDots) AS allDotsFOR i = 1 TO numDots        Dot(i).xAngle = (.8 * RND) + .4        Dot(i).yAngle = (.8 * RND) + .4        Dot(i).x = 14        Dot(i).y = 14NEXT iDO UNTIL key\$ <> ""        FOR i& = 1 TO 20000: NEXT i&        key\$ = INKEY\$        FOR i = 1 TO numDots - 1                LINE (Dot(i).x, Dot(i).y)-(Dot(i + 1).x + 2, Dot(i + 1).y + 2), 0        NEXT i        LINE (Dot(1).x, Dot(1).y)-(Dot(numDots).x + 2, Dot(numDots).y + 2), 0        FOR i = 1 TO numDots                LINE (Dot(i).x, Dot(i).y)-(Dot(i).x + 2, Dot(i).y + 2), 0, BF                               IF Dot(i).x > xBound OR Dot(i).x < 10 THEN Dot(i).xAngle = (.8 * RND + .4) * -SGN(Dot(i).xAngle)                IF Dot(i).y > yBound OR Dot(i).y < 10 THEN Dot(i).yAngle = (.8 * RND + .4) * -SGN(Dot(i).yAngle)                Dot(i).x = Dot(i).x + Dot(i).xAngle                Dot(i).y = Dot(i).y + Dot(i).yAngle                                                                           LINE (Dot(i).x, Dot(i).y)-(Dot(i).x + 2, Dot(i).y + 2), 14, BF        NEXT i        FOR i = 1 TO numDots - 1                LINE (Dot(i).x, Dot(i).y)-(Dot(i + 1).x + 2, Dot(i + 1).y + 2), 14        NEXT i        LINE (Dot(1).x, Dot(1).y)-(Dot(numDots).x + 2, Dot(numDots).y + 2), 14LOOP Title: Make a better version of this! Post by: seph on February 29, 2004, 11:18:51 AM I changed it a little so it's less flickery... For some reason now though, shortly into the program, it goes really slow and I think it's from my XP.Code:DEFINT A-ZRANDOMIZE TIMERCONST xBound = 310, yBound = 190SCREEN 13CLSTYPE allDots        x AS SINGLE        y AS SINGLE        xAngle AS SINGLE        yAngle AS SINGLEEND TYPEINPUT "How many sides?", numDotsSCREEN 7, , 0, 1DIM Dot(1 TO numDots) AS allDotsFOR i = 1 TO numDots        Dot(i).xAngle = (1.8 * RND) + .7        Dot(i).yAngle = (1.8 * RND) + .7        Dot(i).x = 14        Dot(i).y = 14NEXT iDO UNTIL key\$ <> ""        key\$ = INKEY\$        PCOPY 0, 1        CLS        FOR i = 1 TO numDots                LINE (Dot(i).x, Dot(i).y)-(Dot(i).x + 2, Dot(i).y + 2), 0, BF                               IF Dot(i).x > xBound OR Dot(i).x < 10 THEN Dot(i).xAngle = (1.8 * RND + .7) * -SGN(Dot(i).xAngle)                IF Dot(i).y > yBound OR Dot(i).y < 10 THEN Dot(i).yAngle = (1.8 * RND + .7) * -SGN(Dot(i).yAngle)                Dot(i).x = Dot(i).x + Dot(i).xAngle                Dot(i).y = Dot(i).y + Dot(i).yAngle                                                                           LINE (Dot(i).x, Dot(i).y)-(Dot(i).x + 2, Dot(i).y + 2), 14, BF        NEXT i        FOR i = 1 TO numDots - 1                LINE (Dot(i).x, Dot(i).y)-(Dot(i + 1).x + 2, Dot(i + 1).y + 2), 14        NEXT i        LINE (Dot(1).x, Dot(1).y)-(Dot(numDots).x + 2, Dot(numDots).y + 2), 14LOOP Title: how about this? Post by: Squirmanator on March 06, 2004, 01:07:05 PM Well, I like the program, very neat, but your code is good as far as I can see.  After running it, I just wrote my own version, which is a couple lines shorter, and I got rid of the bug where the points get caught outside of the X and Y bounds sometimes.  here it isCode:RANDOMIZE TIMERstart:CLSINPUT "How many points do you want"; num IF num < 1 OR num <> INT(num) THEN GOTO startDIM X(num), Y(num), Yangle(num), Xangle(num), Xdir(num), Ydir(num)Xbound = 310Ybound = 190 FOR n = 1 TO num  X(n) = INT(RND * 100) + 50  Y(n) = INT(RND * 100) + 50  Ydir(n) = INT(RND * 2) + 1  Xdir(n) = INT(RND * 2) + 1  Xangle(n) = INT(RND * 4) + 1  Yangle(n) = INT(RND * 4) + 1 NEXT nSCREEN 7, 1, 0, 1DO FOR n = 1 TO num  IF X(n) > Xbound OR X(n) < 10 THEN   Xangle(n) = (INT(RND * 4) + 1) * (-SGN(Xangle(n)))   IF X(n) < 10 THEN    X(n) = 11   ELSE    X(n) = Xbound   END IF  END IF  IF Y(n) > Ybound OR Y(n) < 10 THEN   Yangle(n) = (INT(RND * 4) + 1) * (-SGN(Yangle(n)))   IF Y(n) < 10 THEN    Y(n) = 11   ELSE    Y(n) = Ybound - 1   END IF  END IF  X(n) = X(n) + Xangle(n)  Y(n) = Y(n) + Yangle(n) NEXT n CLS FOR n = 1 TO num - 1  LINE (X(n), Y(n))-(X(n) + 1, Y(n) + 1), 2, BF  LINE (X(n), Y(n))-(X(n + 1), Y(n + 1)), 4 NEXT n  LINE (X(num), Y(num))-(X(num) + 1, Y(num) + 1), 2, BF  LINE (X(num), Y(num))-(X(1), Y(1)), 4 PCOPY 0, 1press\$ = INKEY\$LOOP UNTIL press\$ <> "" Title: Make a better version of this! Post by: Zap on June 21, 2004, 06:16:10 AM THIS is where the admins should delete these two posts... Title: Make a better version of this! Post by: oracle on June 21, 2004, 06:57:34 PM Pathetic behaviour... if I find one more of those, there's gonna be trouble.