Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Make a better version of this!
#1
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-Z
RANDOMIZE TIMER
CONST xBound = 310, yBound = 190
SCREEN 13
CLS

TYPE allDots
        x AS SINGLE
        y AS SINGLE
        xAngle AS SINGLE
        yAngle AS SINGLE
END TYPE

INPUT "How many sides?", numDots

DIM Dot(1 TO numDots) AS allDots

FOR i = 1 TO numDots
        Dot(i).xAngle = (.8 * RND) + .4
        Dot(i).yAngle = (.8 * RND) + .4

        Dot(i).x = 14
        Dot(i).y = 14
NEXT i

DO 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), 14
LOOP
earn.
#2
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-Z
RANDOMIZE TIMER
CONST xBound = 310, yBound = 190
SCREEN 13
CLS

TYPE allDots
        x AS SINGLE
        y AS SINGLE
        xAngle AS SINGLE
        yAngle AS SINGLE
END TYPE

INPUT "How many sides?", numDots
SCREEN 7, , 0, 1

DIM Dot(1 TO numDots) AS allDots

FOR 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 = 14
NEXT i

DO 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), 14
LOOP
earn.
#3
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 is
Code:
RANDOMIZE TIMER

start:
CLS
INPUT "How many points do you want"; num
IF num < 1 OR num <> INT(num) THEN GOTO start

DIM X(num), Y(num), Yangle(num), Xangle(num), Xdir(num), Ydir(num)
Xbound = 310
Ybound = 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 n

SCREEN 7, 1, 0, 1
DO
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, 1
press$ = INKEY$
LOOP UNTIL press$ <> ""
#4
THIS is where the admins should delete these two posts...
url=http://www.copy-pasta.com]CopyPasta[/url] - FilePasta
#5
Pathetic behaviour... if I find one more of those, there's gonna be trouble.


Forum Jump:


Users browsing this thread: 1 Guest(s)