Gjakmarrja Skrevet 30. april 2006 Del Skrevet 30. april 2006 Hei! Jeg har lyst til å lage dette spillet i min egen versjon: Et slags bombemann spill i 2d, hvor eks 10 spillere på et brett skal sprenge vekk muren for å så ta hverandre... "Orginalen" Jeg har en del spørsmål angående dette, ikke direkte spørsmål men spørsmål om hva jeg må sette meg inn i for å kunne lage dette spillet. Spillet skal programmeres i VB.NET 2005, både klient og server i vb. Dette skal bli en workblog, jeg vil lage dette spillet. Men jeg trenger en del hjelp underveis, spør her om hjelp og poster fremgangen etter hvert. # Grafikk Hvordan lager jeg 2d grafikk, hva må jeg bruke? #Online delen Hva må jeg sette meg inn i for å skrive "nett-delen" av programme. # Skrive MapEditor? Må jeg lage en map editor. Er noen spørsmål jeg har til å begynne med, jeg ber ikke om hjelp med akkurat "det". Jeg ber om hjelp så jeg vet hva jeg skal google etter og hva jeg skal sette meg inn i. Jeg trenger innspill, ideer og tanker. Personlig har jeg aldri laget et spill før så tar i mot alle slags tips, jeg kan VB men aldri programmert i grafikk før. Jeg oppdaterer etter hvert med fremgang... Lenke til kommentar
Gjakmarrja Skrevet 30. april 2006 Forfatter Del Skrevet 30. april 2006 (endret) Jeg søkte litt og fant litt informasjon om de grafikk klassene som følger med .NET Hvordan fungerer egentlig formene med den: Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) End Sub Er det noen som vet hva som kaller OnPaint suben? Óg hvordan kan jeg bruke det til å tegne alt i spillet? Er det noen som har erfaring med å lage spill/grafikk med de klassene? De virker som et greit alternativ, men det vil vel ta litt tid å sette seg inn i. Teknisk sett virker det enklere å bruke f.eks bildebokser som figurer, og som steiner i spillet. Er dette lurt eller vil det gå altfor tregt då? *Back-too-google* Liten update: Klassene til grafikk som fulgte med .net ser jo helt grei ut. Har meldt meg inn i vbforum.com som svarer litt fortere enn her. Det krever litt å sette seg inn i det, men eller ser jo de helt grei ut for jobben. Når jeg kan grafikkdelen, må lage bitmaps og slikt. Skrive "story-line", planlegge litt før jeg setter i gang. Endret 30. april 2006 av chills Lenke til kommentar
Gjakmarrja Skrevet 1. mai 2006 Forfatter Del Skrevet 1. mai 2006 Etter litt tenking: Spillet har jo flere deler som egentlig kan kodes før selve grafikk delen av spillet. #Kollisjondeteksjon #A.I for fienden når man spiller single player. #MapEditor, lage en måte å designe kart på som er enkel for drawmap funksjonen å prosessere. #Net delen av programmet, skrive serveren og klient modulen. #Lage bitmaps for spillet. #En form for 2d "engine". Egentlig er det ganske mye jeg kan gjøre ferdig før jeg faktisk må lage selv grafikk koden, den koden gjør jo bare det å tegne spillet ikke noe annet. Men burde vel vite at jeg klarer grafikk delen før jeg lager resten av programmet, må vel også begynne og lese litt om .NET sockets så internett delen av programmet blir funksjonabel og stabil. Jaja holder på, er bare den OnPaint suben gir meg litt hodebry. All grafikken som skal kunne bli redrawn må nemmelig bli laget med parameteren til den suben, så teknisk sett blir det kun OnPaint som kan tegne og den vet jeg heller ikke hvordan jeg kaller. Kanskje jeg skal gå vekk i fra tutorials og finne ferdig spill, har tetris ferdig laget som jeg fandt på nettet kan se på den koden så kanskje jeg forstår dette bedre. Lenke til kommentar
Gjakmarrja Skrevet 1. mai 2006 Forfatter Del Skrevet 1. mai 2006 SPØRSMÅL: Hvordan har det seg at når jeg vil oppgradere skjermen at jeg må kalle: Me.Invalidate() Hva har denne metoden med tegning på formet å gjøre? Tusen takk for hjelp. Lenke til kommentar
fox Skrevet 1. mai 2006 Del Skrevet 1. mai 2006 kan ingen ting.. men det her ser veldig interessant ut.. Bombeman er digg for meg.. spes i online.. lykke til! Lenke til kommentar
Gjakmarrja Skrevet 1. mai 2006 Forfatter Del Skrevet 1. mai 2006 kan ingen ting.. men det her ser veldig interessant ut.. Bombeman er digg for meg.. spes i online.. lykke til! 6021823[/snapback] Takker... håper jeg får gjort det ferdig. --------------------- Mappe blir på 700*700, med andre ord "bombemannen" er på 35*35 så ble det 35*20=700 Jeg tenkte jeg skulle lage mapeditoren nå, hvis jeg deler opp karte i (20*20) 400 firkanter, og lager properties for hver av de vil jo det være en grei måte å loade mappe på. mapfile: #1 brickwall #2 hardwall #3 brickwall | hidden=>stash #4 empty | playerstart Det blir jo 400linjer for hvert map, går dette? Hele mappet lastes inn i en array/listboks også slettes de i fra den etter hvert som de blir sprengt vekk fra karte. Så de ikke havner i redraw loopen. Er dette en lite smart måte å gjøre det på, kan det bli for tregt? Så lager jeg en function som loader mappe inn i minnet, og en til mapupdate. Lenke til kommentar
Manfred Skrevet 2. mai 2006 Del Skrevet 2. mai 2006 SPØRSMÅL: Hvordan har det seg at når jeg vil oppgradere skjermen at jeg må kalle: Me.Invalidate() Hva har denne metoden med tegning på formet å gjøre? Tusen takk for hjelp. 6021787[/snapback] Du må manuelt invalidate formen slik at programmet vet at "wee. NÅ skal jeg repainte og revalidate". Enkelt og greit. Hadde vært litt upraktisk om den gjorde det for hver eneste kodelinje du skrev Lenke til kommentar
Moskus Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Du må skrive din egen "grafikkmotor" (i gåseøyne ettersom du allerede bruker GDI+) som tar seg av grafikk og timing, slik at du kan typisk si "flytt Tile(1) til venstre i løpet av 20 frames". Men jeg ville heller brukt en allerede eksisterende motor. Selv er jeg, som du vet, glad i TrueVision 3D som fint kan benyttes til 2D. Da slipper du å tenke på selve grafikken og konsentrere deg om spillet (noe som blir vanskelig nok, tro meg). Lenke til kommentar
Gjakmarrja Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 Jeg skal i dag lage ferdig function som gjør om rutenummer til x og y verdi, får se hva mer jeg får tid til før jobb. Riktig, jeg skal lage en bitte liten "graikkmotor" til spillet. Denne begynner jeg nok ikke på før alt annet er i orden, vil ha en skikkelig MapEditor som fungerer samt en del annen kode som kollisjonsdeteksjon. Moskus: Ja, jeg vet det. Men har lyst til å skrive min mitt "eget" 2d spill, så når jeg kan det skikkelig vil jeg prøve på 3d. Først 2d så 3d, men vil ha min egen kode. Effektivt er det ikke, heller bare det at det er min kode. Spørsmål: Bevegelsen på figurene spillet skal jeg regulere det med en timer? Altså jeg bruker en timer som MainGameLoop, og setter intervallen på den? Sett at noen figurer skal gå fortere enn noen andre hvordan kan jeg gjøre det? Kan hver figur ha en egen timer, eller blir det for rotete? Lenke til kommentar
Moskus Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Bevegelsen på figurene spillet skal jeg regulere det med en timer?Altså jeg bruker en timer som MainGameLoop, og setter intervallen på den? Sett at noen figurer skal gå fortere enn noen andre hvordan kan jeg gjøre det? Kan hver figur ha en egen timer, eller blir det for rotete? 6033118[/snapback] 1) En timer vil jo fungere, men hvis du har undersøkt litt, vil du finne ut at Visual Studios innebygde Timer ikke er utrolig bra. Den er ikke så nøyaktig som man skulle ønske, men kode til annen timer burde absolutt være mulig å finne på nettet... 2) En timer vil nok være en fordel. Hvis man skal ha en figur til å gå raskere enn andre, er det jo bare å skru opp antall pixler (eller whatever) den skal flytte seg for hver gjennomgang av MainLoop. Lenke til kommentar
Gjakmarrja Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 Hva er dette for noe? Jeg får det opp, også vil ikke koden breake noen steder lenger. Lenke til kommentar
Moskus Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Hvorfor har du satt et breakpoint der? (og har du startet timeren?) Lenke til kommentar
Gjakmarrja Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 (endret) Hvorfor har du satt et breakpoint der? (og har du startet timeren?) 6033307[/snapback] Et eksempel, break fungerer ikke noen steder i koden. Heller ikke på formload. Jeg har flere funksjon som jeg vil skal kunne "tegne" så kan jeg parse parameteren til OnPaint rundt til de funksjonene? Løsningen på det ene problemet ble å lage ny proskjekt fil, virker som noe hva korrupt. Endret 3. mai 2006 av chills Lenke til kommentar
Moskus Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Et eksempel, break fungerer ikke noen steder i koden. Heller ikke på formload. 6033319[/snapback] Det er fordi at teknisk sett "skjer det ikke noe programmatisk" hvis jeg har forstått MSDN riktig (har tenkt på dette selv). Med andre ord kan man ikke sette break på kommandoer som "btnOK.Focus", mens utregning, if-setninger (og tilsvarende) eller tilordning av variable går helt fint, som f.eks. "strTest = Dette er en test". Lenke til kommentar
Gjakmarrja Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 (endret) Jeg har et problem, i map editoren min så blir ikke alle rutene fylt med farge. Kun den øverste ruten til venstre blir fylt, ikke alle. Hva er det jeg har oversett, koden:? Public Class Form1 Public con As New settings 'propertis for settings Public player1startpos As Integer = 1 Public player2startpos As Integer Public brickwall As Integer Public hardwall As Integer Public brickwallspecial As Integer Public showgrid As Integer = 0 Public showbitsmaps As Boolean = False Public kart As New ListBox Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load con.Visible = True con.Focus() Dim i As Integer = 0 'fyller med tomme ting Do Until (i = 399) map.Items.Add("hei") i += 1 Loop Debug.WriteLine(map.Items.Count) Dim i2 As Integer = 0 Dim u As Integer = 0 Dim u2 As Integer = 0 'lagrer x og y verdi for alle rutene For i2 = 0 To 399 If u = 20 Then u2 += 1 u = 0 End If kart.Items.Add(u2 * 35 & "|" & u * 0) Next End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) 'Tegner gridde If showgrid = 0 Then If showbitsmaps = True Then loadgrafikk(e) End If Exit Sub End If Dim x As Integer = 35 Dim i As Integer = 0 Do Until (i = 19) e.Graphics.DrawLine(Pens.Blue, 0, x, Me.Width, x) x += 35 MyBase.OnPaint(e) i += 1 Loop i = 0 x = 35 Do Until (i = 19) e.Graphics.DrawLine(Pens.Blue, x, 0, x, Me.Height) x += 35 MyBase.OnPaint(e) i += 1 Loop If showbitsmaps = True Then loadgrafikk(e) End If End Sub Public map As New ListBox Public Function solvrute(ByVal pos As Point) As Integer Dim x As Integer = pos.X Dim y As Integer = pos.Y Dim temp As Integer = 35 Dim xrute As Integer = 0 Dim yrute As Integer = 0 Do If x < temp Then xrute = (temp / 35) Exit Do End If temp += 35 Loop temp = 35 Do If y < temp Then yrute = (temp / 35) Exit Do End If temp += 35 Loop temp = 0 temp = xrute * 20 temp = temp - (20 - yrute) Return temp End Function Public Function solvpos(ByVal rute As Integer) As Drawing.Point Dim temp() As String Dim loc As New Drawing.Point temp = Split(kart.Items.Item(rute), "|") loc.X = CInt(temp(0)) loc.Y = CInt(temp(1)) Return loc End Function Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown Dim what As String = Nothing If player1startpos = 1 Then ' map.Items.Item((solvrute(e.Location))) = String.Empty map.Items.Item(solvrute(e.Location)) = "player1startpos" ElseIf player2startpos = 1 Then 'map.Items.Item(solvrute(e.Location)) = String.Empty map.Items.Item(solvrute(e.Location)) = "player2startpos" ElseIf brickwall = 1 Then 'map.Items.Item(solvrute(e.Location)) = String.Empty map.Items.Item(solvrute(e.Location)) = "brickwall" ElseIf hardwall = 1 Then 'map.Items.Item(solvrute(e.Location)) = String.Empty map.Items.Item(solvrute(e.Location)) = "hardwall" End If Debug.WriteLine(map.Items.Item(solvrute(e.Location))) End Sub Public Sub savemap() If Not sf1.FileName = String.Empty Then Dim i As Integer = 0 FileOpen(1, sf1.FileName, OpenMode.Output) For i = 0 To map.Items.Count - 1 PrintLine(1, map.Items.Item(i)) Next End If End Sub Private Sub sf1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles sf1.FileOk savemap() End Sub Public Sub loadgrafikk(ByVal e As System.Windows.Forms.PaintEventArgs) 'Sette farge på veggene Dim x As Integer Dim y As Integer Dim i As Integer = 0 For i = 0 To map.Items.Count - 1 If map.Items.Item(i) = "brickwall" Then x = solvpos(i).X y = solvpos(i).Y Debug.WriteLine("Rute: " & i & " " & x & " " & y) Me.CreateGraphics.FillRectangle(Brushes.Black, x, y, 35, 35) End If MyBase.OnPaint(e) Next End Sub End Class Endret 4. mai 2006 av chills Lenke til kommentar
oyvind_b Skrevet 5. mai 2006 Del Skrevet 5. mai 2006 Hmmm... dette synes jeg var veldig rotete. Tror det er lurt å ta en generell opprydning her. Tenk klasser! Her ramser jeg opp noen forslag til forbedringer, ikke ta det som personlig kritikk, men heller som forslag til å forbedre spillet ditt Listbokser er fy-fy til lagring, de skal kun brukes synlig i grensesnittet. Jeg ville laget en klasse for en "Brick", og så brukt en todimensjonal array av Brick-klassen. Da er det mye lettere å loope gjennom denne i x- og y-retning. Da kan også metoder som sier om en gitt brikke er lov å gå på lages i Brick-klassen: If brick(x + 1, y).CanWalk Then ... Det at du brukes listbox til å lagre kartet gjør det også veldig vanskelig å lese koden. Du bør også lese litt om OnPaint... kall til MyBase.OnPaint bør bare gjøres en gang i din OnPaint. Loadgrafikk-metoden din kjører samme solvpos(i) to ganger, noe som er unødvendig. Do-loopen i solvrute- og OnPaint-metoden din gjør -nesten- eksakt det samme to ganger, dette bør skilles ut i metoder med parametre. Svaret på spørsmålet ditt: Loopen din i Form_Load er mangelfull. Jeg fikk det til slik: For i2 = 0 To 399 If u = 20 Then u2 += 1 u = 0 End If kart.Items.Add(u2 * 35 & "|" & u * 35) u += 1 Next Lykke til videre! Øyvind Lenke til kommentar
Gjakmarrja Skrevet 5. mai 2006 Forfatter Del Skrevet 5. mai 2006 Øyvind: Tusen takk for hjelpen... kjempe bra innlegg. Det løste problemet og koden funker. Ja, slapp av jeg tar alt du sa som forslag/tips ikke kritikk. Du har rett, jeg skal se om jeg kan rydde opp i koden før jeg jobber videre. God ide angåede arrays og klasser, skal begynne nå. Bare så glad det funker no. Takk igjen. Skal vi se, du har vel ikke en link til et program som ligger inn html kode inni "koden" min sånn at jeg får farger på koden på riktig sted. Mener jeg har "hørt" noe om det, svakt minne om det. En her på forumet som laget det... Lenke til kommentar
Gjakmarrja Skrevet 5. mai 2006 Forfatter Del Skrevet 5. mai 2006 Tenkte du på denne? Øyvind 6045699[/snapback] Takk skal du ha. Lenke til kommentar
Gjakmarrja Skrevet 5. mai 2006 Forfatter Del Skrevet 5. mai 2006 Jeg har nå laget en klasse for all håndtering av kart, hvor jeg brukte to arrays en til x og en til y. Også en til og holde hele karte. Problemet mitt nå er at når jeg trykker på mapet for å lage "brickwall" i en rute, redrawes alle brickwallene på hele mappen og det blinker/flikrer. Aktiverer jeg dubbel buffering, forsvinner de helt? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå