Drawing AI Challenge Z!re Posting Freak Posts: 3,522 Threads: 189 Joined: Dec 2003 08-16-2005, 06:40 PM Guess what, I found painter.bas: Code:```DEFINT A-Z '\$DYNAMIC TYPE dottype x AS SINGLE y AS SINGLE vx AS SINGLE vy AS SINGLE age AS SINGLE sex AS INTEGER str AS INTEGER dxt AS INTEGER vit AS INTEGER END TYPE DIM Dot(2048) AS dottype CLS : SCREEN 13 RANDOMIZE TIMER numDots = 127 FOR a = 0 TO numDots Dot(a).x = 320 * RND Dot(a).y = 200 * RND Dot(a).vx = 0 Dot(a).vy = 0 Dot(a).age = 5 * RND Dot(a).sex = CINT(RND) Dot(a).str = 3 * RND Dot(a).dxt = 3 * RND Dot(a).vit = 3 * RND NEXT DO LINE (20, 20)-(300, 180), 16, B FOR a = 0 TO numDots   med1! = (Dot(a).str + Dot(a).dxt * 4 + Dot(a).vit * 16) / 10   Dot(a).vx = 0   Dot(a).vx = 0   FOR B = 0 TO numDots    IF B <> a THEN     med2! = (Dot(B).str + Dot(B).dxt * 4 + Dot(B).vit * 16) / 10     IF CINT(med1!) = CINT(med2!) THEN      IF Dot(a).x < Dot(B).x THEN Dot(a).vx = 1      IF Dot(a).x > Dot(B).x THEN Dot(a).vx = -1      IF Dot(a).y < Dot(B).y THEN Dot(a).vy = 1      IF Dot(a).y > Dot(B).y THEN Dot(a).vy = -1      'IF CINT(5 * RND) = 1 THEN EXIT FOR     END IF    END IF   NEXT   xb = 0: yb = 0   IF POINT(Dot(a).x + Dot(a).vx, Dot(a).y) = 0 THEN    PSET (Dot(a).x, Dot(a).y), 0    Dot(a).x = Dot(a).x + Dot(a).vx   ELSE    xb = 1   END IF   IF POINT(Dot(a).x, Dot(a).y + Dot(a).vy) = 0 THEN    PSET (Dot(a).x, Dot(a).y), 0    Dot(a).y = Dot(a).y + Dot(a).vy   ELSE    yb = 1   END IF   IF xb + yb = 2 THEN    IF POINT(Dot(a).x, Dot(a).y) <> 0 THEN     FOR f = 1 TO 200      l4 = POINT(Dot(a).x - f, Dot(a).y)      l7 = POINT(Dot(a).x - f, Dot(a).y - f)      l8 = POINT(Dot(a).x, Dot(a).y - f)      l9 = POINT(Dot(a).x + f, Dot(a).y - f)      l6 = POINT(Dot(a).x + f, Dot(a).y)      l3 = POINT(Dot(a).x + f, Dot(a).y + f)      l2 = POINT(Dot(a).x, Dot(a).y + f)      l1 = POINT(Dot(a).x - f, Dot(a).y + f)      dr = INT(8 * RND)      IF dr = 0 THEN       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR      ELSEIF dr = 1 THEN       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR      ELSEIF dr = 2 THEN       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR      ELSEIF dr = 3 THEN       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR      ELSEIF dr = 4 THEN       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR      ELSEIF dr = 5 THEN       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR      ELSEIF dr = 6 THEN       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR      ELSEIF dr = 7 THEN       IF l1 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l4 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y: EXIT FOR       IF l7 = 0 THEN Dot(a).x = Dot(a).x - f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l8 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l9 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y - f: EXIT FOR       IF l6 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y: EXIT FOR       IF l3 = 0 THEN Dot(a).x = Dot(a).x + f: Dot(a).y = Dot(a).y + f: EXIT FOR       IF l2 = 0 THEN Dot(a).x = Dot(a).x: Dot(a).y = Dot(a).y + f: EXIT FOR      END IF          NEXT    ELSE     'numDots = numDots + 1    END IF   END IF   IF Dot(a).x <= 20 OR Dot(a).x >= 300 THEN Dot(a).vx = 0: outx = -1 ELSE outx = 0   IF Dot(a).y <= 20 OR Dot(a).y >= 180 THEN Dot(a).vy = 0: outy = -1 ELSE outy = 0   IF Dot(a).x < 20 THEN Dot(a).x = 20   IF Dot(a).x > 300 THEN Dot(a).x = 300   IF Dot(a).y < 20 THEN Dot(a).y = 20   IF Dot(a).y > 180 THEN Dot(a).y = 180   IF outx OR outy THEN dout = dout + 1   PSET (Dot(a).x, Dot(a).y), Dot(a).str + Dot(a).dxt * 4 + Dot(a).vit * 16 NEXT k\$ = INKEY\$ IF k\$ = "n" THEN CLS IF dout >= numDots / 1.05 THEN dnew = dnew + 1 IF dnew = 3 THEN LINE (20, 20)-(300, 180), 16, B t! = TIMER + 3: DO: k\$ = INKEY\$: LOOP UNTIL TIMER >= t! OR k\$ <> "" CLS : dnew = 0 END IF dout = 0 LOOP UNTIL k\$ = CHR\$(27)```I dunno how well it works.. I might have tampered with it after I made painter.exe.. rdc Member Posts: 129 Threads: 15 Joined: Mar 2005 08-16-2005, 09:22 PM Quote:Winner: rdc For the most interessting, and pleasing to look at paintings. Heh. Cool. Quote:I don't have time to whip up a trophy or submit to QB Express, hope you can forgive me I wasn't worried about it. rdc Member Posts: 129 Threads: 15 Joined: Mar 2005 08-16-2005, 10:36 PM Yes, I know the challenge is over, but I am still playing around. Here is a variation of my painter that ends up looking sort of like a modern watercolor: Code:```Option Explicit '============================================ 'Richard Clark 'Generates a random paint screen 'rickclark58@yahoo.com 'Public Domain: Feel free to use as you want. 'Requires FB .14 'Esc to quite, space for new pattern. '============================================ ' 'misc defines #Define sw 640 #Define sh 480 #Define numbugs 100 #Define True 1 #Define False 0 'misc consts Const fbBlack = Rgb(0, 0, 0) 'movement directions Enum compass     north = 1     east     south     west     nwest     neast     swest     seast End Enum 'screen coord type Type mcoord     x As Integer     y As Integer End Type 'bug type Type bugtype     bcolor As Integer     bcoord As mcoord     bdir As Integer End Type 'main vars Randomize Timer Screen 18, 32 Dim Shared bscreen(sw, sh) As Integer Dim Shared bugs(numbugs) As bugtype Dim skey As String Dim Shared titflag As Integer Dim As Integer mx, my, buttons, nx, ny 'get a random number between low and high Function GetRandom(lowerbound, upperbound As Integer) As Integer    GetRandom = Int((upperbound - lowerbound + 1) * Rnd + lowerbound) End Function 'returns a coord based on direction Function GetCoord(direction As Integer, ccoord As mcoord) As mcoord     Dim rcoord As mcoord          Select Case direction         Case north             rcoord.x = ccoord.x             rcoord.y = ccoord.y - 1         Case east             rcoord.x = ccoord.x + 1             rcoord.y = ccoord.y         Case south             rcoord.x = ccoord.x             rcoord.y = ccoord.y + 1         Case west             rcoord.x = ccoord.x - 1             rcoord.y = ccoord.y         Case nwest             rcoord.x = ccoord.x - 1             rcoord.y = ccoord.y - 1         Case neast             rcoord.x = ccoord.x + 1             rcoord.y = ccoord.y - 1         Case swest             rcoord.x = ccoord.x - 1             rcoord.y = ccoord.y + 1         Case seast             rcoord.x = ccoord.x + 1             rcoord.y = ccoord.y + 1     End Select     Return rcoord     End Function 'checks to see if screen is full Function IsFull() As Integer     Dim As Integer i, j     Dim As Integer cnt     Dim ret As Integer = True          For i = 0 To sw - 1         For j = 0 To sh - 1             If bscreen(i, j) = 0 Then                 ret = False                 Exit For             End If         Next         If ret = False Then             Exit For         End If     Next     Return ret End Function 'plot a bug Sub PlotBug(b As bugtype)     With b         PSet (.bcoord.x, .bcoord.y), .bcolor         bscreen(.bcoord.x, .bcoord.y) = 1     End With End Sub 'clear screen Sub ClearScreen     Dim As Integer i, j          Color , fbBlack     Cls     For i = 0 To sw - 1         For j = 0 To sh - 1             bscreen(i, j) = 0         Next     Next     End Sub 'generate intial bugs Sub GenBugs     Dim As Integer x, y, i, bcolor          titflag = False       WindowTitle "Bug Paint - Working"     ClearScreen     For i = 0 To numbugs - 1         With bugs(i)             Do                 'get a random location                 .bcoord.x = GetRandom(0, sw - 1)                 .bcoord.y = GetRandom(0, sh - 1)             Loop Until bscreen(.bcoord.x, .bcoord.y) = fbBlack             'get a random color             .bcolor = Rgb(GetRandom(10, 255), GetRandom(10, 255), GetRandom(10, 255))             'set the initial direction             .bdir = GetRandom(north, seast)             'set the plot             PlotBug bugs(i)         End With     Next End Sub 'move bugs Sub MoveBugs     Dim As mcoord ncoord, scoord, ccoord     Dim As Integer i, j, k     Dim cdir As Integer          For i = 0 To numbugs - 1         With bugs(i)             'set the defaults             scoord.x = -1             scoord.y = -1             cdir = .bdir             'looks for open space to grow into             For j = 1 To 8                 'get the new coord                 ncoord = GetCoord(cdir, .bcoord)                 'make sure we don't go off edge                 If ncoord.x > -1 And ncoord.x < sw Then                     If ncoord.y > -1 And ncoord.y < sh Then                         'is this an empty spot                         If bscreen(ncoord.x, ncoord.y) = 0 Then                             scoord = ncoord                             Exit For                         Else                             If Point(ncoord.x, ncoord.y) <> fbBlack Then                                 .bcolor = Point(ncoord.x, ncoord.y)                             End If                             cdir = GetRandom(north, seast)                             'cdir += 1                             'If cdir > seast Then cdir = north                         End If                     Else                         cdir = GetRandom(north, seast)                         'cdir += 1                         'If cdir > seast Then cdir = north                     End If                 Else                     cdir = GetRandom(north, seast)                     'cdir += 1                     'If cdir > seast Then cdir = north                 End If             Next             'plot the new postion             If scoord.x > -1 And scoord.y > -1 Then                 .bcoord = scoord                 'save the direction                 .bdir = cdir                 'plot the bug                 PlotBug bugs(i)             Else                 If Not IsFull Then                     Do                         'get a random location                         .bcoord.x = GetRandom(0, sw - 1)                         .bcoord.y = GetRandom(0, sh - 1)                     Loop Until bscreen(.bcoord.x, .bcoord.y) = 0                     PlotBug bugs(i)                 End If             End If         End With     Next End Sub SetMouse ,,0 'main code GenBugs Do     skey = Inkey\$     If Not IsFull Then         MoveBugs     Else         If Not titflag Then             WindowTitle "Bug Paint - Done"         Else            titflag = True         End If     End If     If skey = Chr\$(32) Then         GenBugs     End If Loop Until skey = Chr\$(27) SetMouse ,,1 End``` « Next Oldest | Next Newest »