|
[ AleXys @ 20.03.2010. 18:34 ] @
| Kako da iscrtam neku pozadinu koju bih mogao da posle podelim linijama na kvadratiće?
Ništa iz toolbox-a mi se ne čini da to može.
Želim da pozadinu prozora podelim linijama horizontalno i vertikalno, a zatim da vrednosti koordinata x i y svake kocke ubeležim u matricu.
Kako to da uradim?
Dakle, potrebna mi je mreža...
[Ovu poruku je menjao AleXys dana 20.03.2010. u 19:49 GMT+1]
Može li neko da me uputi? Da mi da neki link?
[Ovu poruku je menjao AleXys dana 20.03.2010. u 19:50 GMT+1] |
[ lonelyrider_44 @ 20.03.2010. 19:00 ] @
DataGridView. Kolone i redovi odgovaraju kolonama i redovima matrice. Ja
bih tako uradio.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ AleXys @ 20.03.2010. 19:22 ] @
Mislim da treba picturebox da se deli.
[ ravni @ 20.03.2010. 22:52 ] @
u paint eventu od forme izracunas vrednosti koordinata 'kocaka' i onda sa e.Graphics.Drawline crtas
[ AleXys @ 21.03.2010. 12:38 ] @
Code: Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Render()
End Sub
Render je uređen ovde:
Code: Private Sub Render()
Dim xCnt, yCnt As Int16
'Clear the backround
oBuffG.Clear(Color.White)
'Draw the starting/ending box
oBuffG.FillRectangle(New SolidBrush(Color.LightGreen), StartX * 15, StartY * 15, 15, 15)
oBuffG.FillRectangle(New SolidBrush(Color.Red), EndX * 15, EndY * 15, 15, 15)
'Draw the walls
For yCnt = 0 To 24
For xCnt = 0 To 24
If Map(xCnt, yCnt).Wall = True Then oBuffG.FillRectangle(New SolidBrush(Color.DarkGray), xCnt * 15, yCnt * 15, 15, 15)
If Map(xCnt, yCnt).DrawPath = True Then
oBuffG.FillEllipse(New SolidBrush(Color.SteelBlue), xCnt * 15 + 4, yCnt * 15 + 4, 7, 7)
End If
Next
Next
'Draw the grid
For xCnt = 0 To 25
oBuffG.DrawLine(New Pen(Color.Black), xCnt * 15, 0, xCnt * 15, 375)
oBuffG.DrawLine(New Pen(Color.Black), 0, xCnt * 15, 375, xCnt * 15)
Next
'Set the picture box image
picMain.Image = CType(oBuff, Bitmap)
End Sub
[ AleXys @ 21.03.2010. 12:55 ] @
Iako iznad svakog reda piše objašnjenje, ja ne razumem postupak.
Može li neko da mi objasni detaljno šta se radi ispod sledećih?
Code:
'Draw the starting/ending box
oBuffG.FillRectangle(New SolidBrush(Color.LightGreen), StartX * 15, StartY * 15, 15, 15)
oBuffG.FillRectangle(New SolidBrush(Color.Red), EndX * 15, EndY * 15, 15, 15)
Koji li je ovaj postupak?
Code:
'Draw the walls
For yCnt = 0 To 24
For xCnt = 0 To 24
If Map(xCnt, yCnt).Wall = True Then oBuffG.FillRectangle(New SolidBrush(Color.DarkGray), xCnt * 15, yCnt * 15, 15, 15)
If Map(xCnt, yCnt).DrawPath = True Then
oBuffG.FillEllipse(New SolidBrush(Color.SteelBlue), xCnt * 15 + 4, yCnt * 15 + 4, 7, 7)
End If
Next
Next
Ovo, ma kao špansko selo...
Code: 'Draw the grid
For xCnt = 0 To 25
oBuffG.DrawLine(New Pen(Color.Black), xCnt * 15, 0, xCnt * 15, 375)
oBuffG.DrawLine(New Pen(Color.Black), 0, xCnt * 15, 375, xCnt * 15)
Next
Crtanje, totalno mi je nepoznato...
Code: 'Set the picture box image
picMain.Image = CType(oBuff, Bitmap)
Na koju foru mu se ovako slika dodeljuje?
Šta radi CType()?
[ AleXys @ 21.03.2010. 14:27 ] @
Code: Private Map(24, 24) As CellData
Private oBuff As New Bitmap(376, 376)
Private oBuffG As Graphics = Graphics.FromImage(oBuff)
Šta rade ove tri?
Još uvek ne znam šta radi Private Map(24, 24) As CellData, nju ću posle.
Private oBuff As New Bitmap(376, 376)
Private oBuffG As Graphics = Graphics.FromImage(oBuff)
Ova dva prave kao neko postolje na picturebox-u. oBuff i oBuffG su samo imena, koja mogu biti proizvoljna.
Ovi brojevi, 376;376 mi nisu jasni, ne znam šta određuju, tj. šta ograničavaju.
[Ovu poruku je menjao AleXys dana 21.03.2010. u 16:08 GMT+1]
[ AleXys @ 21.03.2010. 15:18 ] @
Pošto je
Code: Me.picMain.Size = New System.Drawing.Size(376, 376)
onda zbog toga idu brojevu (376, 376)
Code: Private oBuff As New Bitmap(376, 376)
Hoće li još neko da mi pomogne oko što pravilnijeg tumačenja kodova?
[ AleXys @ 21.03.2010. 15:51 ] @
Kada se crta kvadrat, prvi broj je x pozicija, drugi je y pozicija, treći je weight, a četvrti je height.
Zašto se vrednosti x i y drugačije vrednuju od wight i height vrednosti?
Recimo:
Code: grafika.FillRectangle(New SolidBrush(Color.Red), 50, 100, 50, 100)
Ne znam da li me shvatate, ali logično bi bilo da su prva 50-ica i treća 50-ica iste dužine, isto kao 100-tke.
Žašto je to tako?
[ lonelyrider_44 @ 21.03.2010. 16:23 ] @
x i y su koordinate gde pochinje crtanje, tj. gde ce se nalaziti gornje
levo teme pravougaonika. A weight i height su koliko ce biti duzine
stranica.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
[ AleXys @ 21.03.2010. 16:54 ] @
Jeste mi to jasno, ali mi nije jasno zašto merne jedinice nisu jasne.
Isto kao kad crtaš u koordinatnom sistemu, pa obično ti je 1 cm X-ose jednak jednom cm dužine kvadrata... You know what I am saying...
Zašto ovde nisu iste?
[ ravni @ 21.03.2010. 16:54 ] @
Citat: Kada se crta kvadrat, prvi broj je x pozicija, drugi je y pozicija, treći je weight, a četvrti je height.
Zašto se vrednosti x i y drugačije vrednuju od wight i height vrednosti?
Recimo:
Code: grafika.FillRectangle(New SolidBrush(Color.Red), 50, 100, 50, 100)
Ne znam da li me shvatate, ali logično bi bilo da su prva 50-ica i treća 50-ica iste dužine, isto kao 100-tke.
Žašto je to tako?
nesto si zbunjen izgleda. tvoj kod ce nacrtati pravougaonik dimenzija 50x100 (4. i 5. argument) na koordinatama (50, 100) sto je 2. i 3. argument, a prvi argument je crveni brush, tako da nema govora o drugacijem vrednovanju
[ AleXys @ 21.03.2010. 17:06 ] @
Ok. Sorry, meni je picturebox bio pomeren blago dole desno, pa mi se činilo da nisu jednaki (to jest, da 50 nije jednako 50, a 100 da nije jednako 100), ali kad sam ga pomerio skroz gore levo, onda je sve ispalo normalno.
Ostalo mi je od onih 4 delova koda nejasnih, samo jedan:
Code: 'Draw the walls
For yCnt = 0 To 24
For xCnt = 0 To 24
If Map(xCnt, yCnt).Wall = True Then oBuffG.FillRectangle(New SolidBrush(Color.DarkGray), xCnt * 15, yCnt * 15, 15, 15)
If Map(xCnt, yCnt).DrawPath = True Then
oBuffG.FillEllipse(New SolidBrush(Color.SteelBlue), xCnt * 15 + 4, yCnt * 15 + 4, 7, 7)
End If
Next
Next
Iz ovog koda mi je nejasno " Map(xCnt, yCnt).Wall " i " Map(xCnt, yCnt).DrawPath.
To su sigurno novi properties. Jesu li?
[ ravni @ 21.03.2010. 17:20 ] @
ocigledno da se tom primeru crta neka mapa sa zidovima i kojecim, tako da map(x,y) sigurno vraca neki objekat koji opisuje koordinate (x,y) na mapi i ima bool propertije Wall i DrawPath
[ AleXys @ 21.03.2010. 18:23 ] @
Code: Public Structure CellData
#Region " Declares "
Public OCList As Int16
Public GCost As Int16
Public HCost As Int16
Public FCost As Int16
Public ParentX, ParentY As Int16
Public Wall As Boolean
Public DrawPath As Boolean
#End Region
End Structure
Ovo je za wall, ali ne znam šta ga povezuje sa map().
[ ravni @ 22.03.2010. 21:05 ] @
klikni na Map i pritisni F12 - to ce te odvesti na deklaraciju metoda ili promenljive, pa ces videti kako je Map povezano sa CellData
[ AleXys @ 23.03.2010. 11:14 ] @
Code: Private Map(24, 24) As CellData
S obzirom da je map napisano sa zagradom i dva broja, ja bih rekao da je to dvodimenzionalna matrica.
Međutim, izgled ume da prevari. Pri deklaraciji, ona je postavljana kao tip CellData.
Da li je CellData već neki postojeći tip, ili neki novo-napravljeni tip?
Ako jeste novo napravljeno, zašto ne piše as New CellData? Zašto je to New izostavljeno?
Code: Public Structure CellData
#Region " Declares "
Public OCList As Int16
Public GCost As Int16
Public HCost As Int16
Public FCost As Int16
Public ParentX, ParentY As Int16
Public Wall As Boolean
Public DrawPath As Boolean
#End Region
End Structure
Da li je ispravno što ga nazivom "tipom", kad pri njegovoj deklaraciji piše Public Structure CellData.
Može li neko da mi pojasni ove stvari?
Gde grešim i gde se gubim?
[ AleXys @ 23.03.2010. 11:28 ] @
Novi kod iz istog programa za razbijanje.
Code: Private Sub picMain_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picMain.MouseDown
'Handle mouse down events
If e.Button = MouseButtons.Left Then
Dim xPos As Int16 = e.X \ 15
Dim yPos As Int16 = e.Y \ 15
'Process the click based on the radio button checked
If radStart.Checked Then
StartX = xPos
StartY = yPos
ElseIf radEnd.Checked Then
EndX = xPos
EndY = yPos
ElseIf radWall.Checked Then
If Map(xPos, yPos).Wall = True Then
Map(xPos, yPos).Wall = False
Else
Map(xPos, yPos).Wall = True
End If
End If
'Redraw the box
Render()
End If
End Sub
Deo koji mi nije jasan je:
Code: 'Handle mouse down events
If e.Button = MouseButtons.Left Then
Dim xPos As Int16 = e.X \ 15
Dim yPos As Int16 = e.Y \ 15
Nikako mi ne ulazi u glavu.
Izgleda ovako
Kad se klikne bilo koji kvadratić, treba da se oboji u određenu boju.
Šta onaj kod radi, pa se obeleži samo jedan kvadratić?
[ AleXys @ 23.03.2010. 11:30 ] @
Shvatio sam.
On uzima koordinate, pa ih posle prosleđuje u Render().
Ok.
Od vas mi samo treba objašnjenje za onaj deo iz preprošlog posta, o CellData.
[ ravni @ 23.03.2010. 17:25 ] @
meni se ipak cini da to jeste matrica.
ispravno je sto ga nazivas tipom
new moze da izostane jer je structure value tip, kao int
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|