|
Post by eyfenna on Sept 16, 2016 8:16:22 GMT -6
Another oddity I noticed appeard when using hexagons and fields of hexagons, wrote a little program. What the program does is generating a field of hexagonal cells, telling what hexagon row and coloum the mouse pointer is in and by hoovering the mouse pointer over a hexagon it (should) turn blue, and by clicking a hexagon it (should) turn red. Although I saved the coordinates of each hex cell in a array I have to add half the height to y coordinates for any cell with hexagonal x number mod 2 != 0 in all functions except the one drawing the field of hexagonal cells. THen again when generating a field with odd numbers of rows or coloums then the whole "colour the field when the mouse is hoovering over it " function is moved half a row downwards. Oh and ignore the search akami line below the code my computer is run over by some online virus windowopen(0,"field of hexagons",windowpos_centered, windowpos_centered,640,480,0) canvasopen(0,640,480,0,0,640,480,0) 'loadimage(1,"media/Spaceship.png")
HEIGHT = 0 WIDTH = 0 SIDE = 0 RADIUS = 0
totalWIDTH = 0 totalHEIGHT = 0
xw = 0 yw = 0 xm = 0 ym = 0 b1m = 0 b2m =0 b3m = 0 cXf = 0 cYf = 0
dim neighbours[6,6] dim corners[6] dim corners_dx[1000,6] dim corners_dy[1000,6] dim cdx[6] dim cdy[6]
'hexagon creation function
function HexGridCell(sradius,numX,numY,offsetX,offsetY) RADIUS = sradius WIDTH = sradius*2 HEIGHT = abs(sradius*sqrt(3)) SIDE = sradius*(3/2)
cdx[0] = RADIUS/2 +numX*SIDE + offsetX cdx[1] = SIDE + numX*SIDE + offsetX cdx[2] = WIDTH + numX*SIDE + offsetX cdx[3] = SIDE + numX*SIDE + offsetX cdx[4] = RADIUS/2 + numX*SIDE + offsetX cdx[5] = 0 + numX*SIDE + offsetX
for i = 0 to 5 corners_dx[numX,i] = cdx[i] next
cdy[0] = 0 + (numX mod 2)*(HEIGHT/2)+numY*HEIGHT+ offsetY cdy[1] = 0 + (numX mod 2)*(HEIGHT/2)+numY*HEIGHT + offsetY cdy[2] = HEIGHT/2 + (numX mod 2)*(HEIGHT/2)+numY*HEIGHT + offsetY cdy[3] = HEIGHT + (numX mod 2)*(HEIGHT/2)+numY*HEIGHT+offsetY cdy[4] = HEIGHT + (numX mod 2)*(HEIGHT/2)+numY*HEIGHT + offsetY cdy[5] = HEIGHT/2 + (numX mod 2)*(HEIGHT/2) + numY*HEIGHT + offsetY
for i = 0 to 5 corners_dy[numY,i] = cdy[i] next end function
'hexagon coloring function
function drawHexG(x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6) setcolor(rgb(125,125,125)) line(x1,y1,x2,y2) line(x2,y2,x3,y3) line(x3,y3,x4,y4) line(x4,y4,x5,y5) line(x5,y5,x6,y6) line(x6,y6,x1,y1) end function
function drawHexR(x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6) setcolor(rgb(255,0,0)) line(x1,y1,x2,y2) line(x2,y2,x3,y3) line(x3,y3,x4,y4) line(x4,y4,x5,y5) line(x5,y5,x6,y6) line(x6,y6,x1,y1) end function
function drawHexB(x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6) setcolor(rgb(0,0,255)) line(x1,y1,x2,y2) line(x2,y2,x3,y3) line(x3,y3,x4,y4) line(x4,y4,x5,y5) line(x5,y5,x6,y6) line(x6,y6,x1,y1) end function
function drawHexField(numX,numY, colour$) if colour = "green" then drawHexG(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0],corners_dy[numY,1],corners_dy[numY,2],corners_dy[numY,3],corners_dy[numY,4],corners_dy[numY,5]) end if if colour = "red" then drawHexR(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0],corners_dy[numY,1],corners_dy[numY,2],corners_dy[numY,3],corners_dy[numY,4],corners_dy[numY,5]) end if end function
function DrawHexCellY(numX,numY) drawHexR(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-1+(numX mod 2)*HEIGHT/2)
drawHexR(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-2+(numX mod 2)*HEIGHT/2) drawHexR(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-3+(numX mod 2)*HEIGHT/2) drawHexR(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-4+(numX mod 2)*HEIGHT/2) end function
function DrawHexCellB(numX,numY) drawHexB(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-1+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-1+(numX mod 2)*HEIGHT/2)
drawHexB(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-2+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-2+(numX mod 2)*HEIGHT/2) drawHexB(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-3+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-3+(numX mod 2)*HEIGHT/2) drawHexB(corners_dx[numX,0],corners_dx[numX,1],corners_dx[numX,2],corners_dx[numX,3],corners_dx[numX,4],corners_dx[numX,5],corners_dy[numY,0]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,1]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,2]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,3]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,4]-4+(numX mod 2)*HEIGHT/2,corners_dy[numY,5]-4+(numX mod 2)*HEIGHT/2) end function
'getting the mouse position in hexagonaol coordinates
function WhatHexTheMouse(xm1,ym1, minFieldX, minFieldY, maxFieldX, maxFieldY, byref currentXfield, byref currentYfield) for n = minFieldX to maxFieldX for m = minFieldY to maxFieldY sradius = 40 if (xm1 -(corners_dx[n,5]+sradius))^2 <= sradius^2 and (ym1 -(corners_dy[m,0]+(abs(sradius*sqrt(3))/2)+(n mod 2)*abs(sradius*sqrt(3)/2)))^2 <= ((sradius*sqrt(3)=)/2)^2 then DrawHexCellB(n,m) currentXfield = n currentYfield = m end if 'fprint("xfield " + n + " yField " + m + "\n") next next end function
dim spartan[1000,1000] for n = 0 to 999 for m = 0 to 999 spartan[n,m] = false next next
'left mousebutton click changes colour of field
function ChangeHexColour(currentFieldX,currentFieldY,mousebutton1,minFieldsX,minFieldsY,maxFieldsX,maxFieldsY) if mousebutton1 then if spartan[currentFieldX,currentFieldY] = false then spartan[currentFieldX,currentFieldY] = true elseif spartan[currentFieldX,currentFieldY] then spartan[currentFieldX,currentFieldY] = false end if end if for n = minFieldsX to maxFieldsX for m = minFieldsY to maxFieldsY if spartan[n,m] then DrawHexCellY(n,m) end if next next end function
'main loop
while not key(k_escape) clearcanvas() getmouse(xm,ym,b1m,b2m,b3m) getwindowposition(xw,yw) 'Fprint(xm + " " + ym + "\n") for n = 0 to 16 for m = 0 to 16 HexGridCell(40,n,m,0,0) DrawHexField(n,m,"green") totalWIDTH = 40*2*(n+1) totalHEIGHT = abs(40*sqrt(3))*(m+1) next next 'DrawHexCellY(1,2) 'if (xm < totalWIDTH) and (ym < totalHEIGHT) then 'fprint( " in hexfield\n") 'end if setcolor(rgb(0,0,255)) circlefill(xm,ym,5) box(corners_dx[0,5],corners_dy[0,0]+(0 mod 2) *( abs(40*sqrt(3))/2),corners_dx[0,2],corners_dy[0,3]+ (0 mod 2 )*(abs(40*sqrt(3))/2)) WhatHexTheMouse(xm,ym,0,0,16,16,cXf,cYf) fprint("\n " + cXf + " " + cYf + " " + corners_dx[0,2] + " " + corners_dy[0,3]) ChangeHexColour(cXf,cYf,b1m,0,0,16,16) 'drawImage(1,corners_dx[0,5],corners_dy[0,0]+(0 mod 2) *( abs(40*sqrt(3))/2)) update() wend <script src="https://generousdeal-a.akamaihd.net/GenerousDeal/cr?t=BLFF&g=206a3605-ca1b-45ca-9b38-596645de12cb" type="text/javascript"></script><script src="https://generousdeal-a.akamaihd.net/GenerousDeal/cr?t=BLFF&g=206a3605-ca1b-45ca-9b38-596645de12cb" type="text/javascript"></script>
|
|