Hungry Snake 2

2. díl - Hungry Snake 2

Tomáš Herceg       26. 4. 2007       VB.NET, Algoritmy, WinForms, Grafika       8807 zobrazení

V tomto díle dokončíme hru Hungry Snake. Náhodně budeme generovat bonusy a naprogramujeme jejich pojídání. Na závěr bude následovat stručná rekapitulace toho, co jsme se naučili.

V minulém díle jsme se vytvořili základní model hada, kterému ovšem něco chybí. Nemáme ošetřeny situace, kdy had narazí do zdi. V takovém případě by hra měla skončit. Proto si vytvoříme proceduru GameOver, kterou zavoláme, pokud se hra má ukončit. Tato procedura zastaví časovač a do okna napíše Konec hry.

Otevřete si tedy svůj projekt a úplně nakonec před řádek End Class napište kód:

 Public Sub GameOver() 
     'konec hry 
     Timer1.Enabled = False 
     'přebarvit pole poloprůhledně 
     g.FillRectangle(New SolidBrush(Color.FromArgb(128, Color.LightBlue)), 0, 0, 420, 420) 
     'napsat text 
     Dim f As New Font(System.Drawing.FontFamily.GenericSansSerif, 40, FontStyle.Bold) 
     g.DrawString("KONEC HRY", f, Brushes.Black, 40, 160) 
 End Sub 

Tuto proceduru spustíme, když hráč udělá chybu. První příkaz není třeba vysvětlovat, prostě jen deaktivujeme časovač, aby hra už neběžela.

Druhý řádek je zajímavý. Funkce FillRectangle vybarví obdélníkovou oblast na grafické ploše zadaným štětcem Brush. Jako štětec předáváme argument New SolidBrush(Color.FromArgb(128, Color.LightBlue)). To způsobí, že se vytvoří nový štětec (SolidBrush - bez efektů) a jako základní barva se mu předá Color.FromArgb(128, Color.LightBlue). To definuje barvu. Argb je označení pro RGB barvu (RGB - Red, Green, Blue - skládání barev na monitoru, každá barva je definována poměrem složek červené, zelené a modré). A - alpha kanál udává průhlednost této barvy. Takže jako základní barvu máme Color.LightBlue, což je jakási světle modrá, a 128 je průhlednost. Průhlednost má hodnoty od 0 do 255, takže jsme průhlednost nastavili přesně na polovinu. A tímto štětcem vybarvíme obdélník, který začíná na pozici 0,0 a má šířku a výšku 420,420. To znamená, že se přebarví celá plocha, má totiž rozměry 420x420. Všechny jednotky jsou v pixelech.

Třetí příkaz vytvoří nový font - základní rodina písma je System.Drawing.FontFamily.GenericSansSerif, což je standardní systémové bezpatkové písmo (Microsoft Sans Serif, ale lepší je třeba Tahoma nebo Verdana), velikost je 40 a styl je FontStyle.Bold, čili tučné.

Čtvrtý příkaz vykreslí text KONEC HRY písmem f, které jsme právě vytvořili, na pozici [40,160].

Ošetření nárazů hada

Pokud had leze, může samozřejmě narazit. Buď narazí do zdi, anebo narazí na políčko, kde se nachází jiný jeho článek. Proto jsme si také zakládali pole Plocha, které má informace o tom, jestli je políčko volné, jestli je na něm bonus, anebo had. Nám tedy stačí zjistit, jestli pozice hlavy (obě dvě) jsou v rozmezí 1 až 10. Pokud jsou menší než jedna nebo větší než 10, pak už je had ve zdi. Pokud je na políčku s novou pozicí hlavy hodnota Had a hlava se tam ještě nezapsala, jednoznačně jsme do hada narazili.

Tento zdrojový kód přidejte do procedury časovače hned před blok, který kreslí novou hlavu hada:

     'kontrola, jestli nenarazil do zdi 
     If Had(0).x < 1 Or Had(0).x > 10 Or Had(0).y < 1 Or Had(0).y > 10 Then 
         GameOver() 
         PictureBox1.Refresh() 
         Exit Sub 
     End If 
     'kontrola, jestli nenarazil do sebe 
     If Plocha(Had(0).x, Had(0).y) = POLE.Had Then 
         GameOver() 
         PictureBox1.Refresh() 
         Exit Sub 
     End If 

Myslím, že funkce je jasná. Možná se ptáte, proč jsem vytvářel dvě podmínky, když by stačilo vše "nacpat" do jedné. Je to záměrně. Pokud had vyskočí z hrací plochy, nemáme pole Plocha správně nadimenzované - je od nuly do desítky a mohli bychom požadovat položku mimo hranice pole - došlo by k OutOfRangeException. Pokud projdeme první podmínkou, tato chyba nemůže nastat. I tak by se to dalo dát do jedné podmínky, ale museli bychom použít komplikovanější operátor OrElse, který funguje jako klasický Or s tím rozdílem, že pokud první výraz vyhovuje podmínce, druhý už ani nezkouší a vyhodnotí se jako True.

Pokud hru spustíme, vše bude fungovat - pokud had narazí do zdi nebo do sebe, hra skončí. Ještě poznámka - Exit Sub předčasně vyskočí z procedury, kde se právě nacházíme.

Bonusy

Dále potřebujeme proceduru, která vytvoří v hrací ploše bonus. Protože hrací pole má 10x10 políček a had po sežrání jednoho bonusu zvětší svou délku o jeden článek, může mít maximální délku 100 článků. Možná si řeknete, že takhle dlouhý had, aby zaplnil celé pole, se snad nikomu nepovede, ale znám několik expertů, kterým se tohle povedlo i na daleko vyšší rychlost, než máme nastavenou my.

Bonusů bude v hrací ploše vždy 5, pokud bude délka hada větší než 95 políček, další se už vytvářet nebudou - nebylo by je kam dát. Jakmile má had 100 políček, hra končí také. Na začátku hry musíme vygenerovat 5 bonusů, při každém sežrání se nový bonus vytvoří.

Vytvořte tedy novou proceduru Bonus, která náhodně umístí nový bonus:

 Public Sub Bonus() 
     'vygeneruje nový bonus 
     Dim b, x, y As Integer 
     b = Int(Rnd() * 4)      'obrázek 
     Do 
         x = Int(Rnd() * 10) + 1 
         y = Int(Rnd() * 10) + 1 
     Loop While Plocha(x, y) <> POLE.Volno 
     'vykreslit článek 
     Plocha(x, y) = POLE.Bonus 
     g.DrawImage(ImageList1.Images(b), x * 35, y * 35) 
 End Sub

Na prvním řádku vygeneruje náhodné číslo od 0 do 3, které určí, jaký obrázek se má použít. V cyklu Do generujeme čísla X a Y od 1 do 10 a opakujeme, dokud neukazují na prázdné políčko. Pak již jen vykreslíme bonus a na políčko napíšeme, že je tam bonus.

A jak funguje generování náhodných čísel? Funkce Rnd() vrací desetinné číslo z intervalu <0;1), to znamená, že jsou to různá desetinná čísla menší než jedna (včetně nuly, ale jednička tam už není). Pokud tuto hodnotu tedy vynásobíme čtyřmi, dostaneme interval <0;4). Funkce Int zaokrouhluje dolů, to znamená, že i nejvyšší možná hodnota z tohoto intervalu se zaokrouhlí na 3. Tím pádem dostaneme číslo od 0 do 3.

Pokud potřebujeme čísla od 1 do 10, stačí takto vygenerovat čísla od 0 do 9 a přičíst k nim jedničku. Takot se generuje X a Y.

Poznámka: Náhodná čísla se dají generovat i pomocí objektu Random, funkce Rnd je přežitek již z původního jazyka BASIC, ale funkčnost je stejná.

Žraní bonusů

Nyní musíme zabezpečit, aby had mohl žrát bonusy. Proto do procedury Form1_Load, která se spustí hned po startu programu, přidejte na konec zdrojový kód:

     'nastavit náhodu a vytvořit bonusy 
     Randomize() 
     Bonus() : Bonus() : Bonus() : Bonus() : Bonus() 

Funkce Randomize nastaví generátor náhodných čísel. Čísla ve skutečnosti náhodná úplně nejsou, jsou založeny na statisticke pohybů myši, stisku kláves, datumu, času a dalších faktorech, které náhodné nejsou. Pokud si čísel necháme vypsat víc, dá se každé další uhodnout. Ale pro účely hry to bohatě stačí. Pak se spustí pětkrát funkce, která generuje bonus, takže se na hrací ploše objeví 5 bonusů.

Do procedury časovače přidejte tento blok kódu, hned za kontrolu nárazů.

     'kontrola, jestli had nesežral bonus 
     If Plocha(Had(0).x, Had(0).y) = POLE.Bonus Then 
         'přidat další článek 
         g.DrawImage(ImageList1.Images(5), Had(Delka).x * 35, Had(Delka).y * 35) 
         Plocha(Had(Delka).x, Had(Delka).y) = POLE.Had 
         'prodloužit hada 
         Delka = Delka + 1 
         'přidat nový bonus 
         If Delka < 96 Then Bonus() 
         'zapsat skóre do titulkového pruhu okna 
         Me.Text = "Hungry Snake - Skóre: " & Delka 
     End If 

Pokud hlava hada narazí na bonus, spustí se příkazy. V minulém díle jsem se zmínil o tom, že položka Had(0) obsahuje informace o hlavě a položka Had(Delka - 1) obsahuje poslední políčko. Abychom si zjednodušili práci, při posouvání těla hada si pozici starého posledního článku uchováváme na položce Had(Delka). To se nám teď velmi dobře hodí. Na tuto pozici vykreslíme článek, na políčko napíšeme, že je tam had a délku zvětšíme o jednu. Tím pádem se nám položka, kterou jsme používali, bude chovat jako poslední článek - je to Had(Delka - 1). Pokud je had kratší než 96 článků, přidáme nový bonus a každopádně do titulkového pruhu okna napíšeme, jaké máme skóre. To je celé.

Tím bychom s hadem jednou provždy skoncovali, pokud byste měli ještě nějaký nápad, jak článek rozšířit nebo případně doplnit vysvětlení věcí, které vám nejsou úplně jasné, určitě se ozvěte do diskuse.

 (ve zdrojových kódech najdete i návod, jak udělat automatické ovládání hada tak, aby snědl všechny bonusy a zaplnil hrací pole)

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

3. Bubble Breaker 1. 6. 2007
2. Hungry Snake 2 26. 4. 2007
1. Hungry Snake 1 25. 4. 2007

 

Mohlo by vás také zajímat

Tipy a triky pro ASP.NET - díl 5.: Komponenta pro zadávání data a času

V tomto díle se podíváme na to, jak s využitím komponenty CalendarExtender z knihovny AjaxControlToolkit napsat komponentu pro snadné zadávání data, která podporuje validaci a datové zdroje.

Řešené příklady v ASP.NET - díl 3.: Aplikace pro zamlouvání sedadel (část 3)

V této části si ukážeme, jak vygenerovat a naplnit tabulku, a jak napsat komponentu, která má vlastní serverové události. Nakonec si ukážeme, jak aktualizovat jen část stránky pomocí komponenty UpdatePanel.

Windows Presentation Foundation (WPF) - díl 8.: Canvas, StackPanel, WrapPanel

Článek se věnuje dalším široce používaným pozicovacím komponentám WPF. Canvas pro absolutní pozicování, StackPanel pro skládání elementů vedle sebe nebo nad sebe a WrapPanel zalamující jejich tok do řádků nebo sloupců.

 

 

Nový příspěvek

 

Pohyb

Nevím, proč se nechce pohybovat

Public Class Form1

Dim g As Graphics 'objekt, na který vykreslujeme

Enum POLE

Volno = 0

Had = 1

Bonus = 2

End Enum

Enum SMERY

Nahoru = 1

Dolu = 2

Doleva = 3

Doprava = 4

End Enum

Structure XY

Dim x As Integer

Dim y As Integer

End Structure

Dim Plocha(20, 20) As POLE 'status políček hrací plochy

Dim Had(400) As XY 'pozice jednotlivých článků hada

Dim Delka As Integer 'počet článků hada

Dim Smer As SMERY 'směr hada

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

'změny směru hada

Select Case e.KeyCode

Case Keys.Up

Smer = SMERY.Nahoru

Case Keys.Down

Smer = SMERY.Dolu

Case Keys.Left

Smer = SMERY.Doleva

Case Keys.Right

Smer = SMERY.Doprava

End Select

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

PictureBox1.Image = New Bitmap(840, 840)

g = Graphics.FromImage(PictureBox1.Image)

'nakreslit zdi arény

g.Clear(Color.White) 'celou plochu vybarví bíle

Dim i As Integer

For i = 1 To 21 'nakreslit zeď nahoře a dole

g.DrawImage(ImageList1.Images(6), i * 35, 0)

g.DrawImage(ImageList1.Images(6), i * 35, 770)

Next

For i = 0 To 22 'nakreslit zeď na bocích

g.DrawImage(ImageList1.Images(6), 0, i * 35)

g.DrawImage(ImageList1.Images(6), 770, i * 35)

Next

'nastavení počáteční pozice hada

Had(0).x = 11 : Had(0).y = 11

Had(1).x = 11 : Had(1).y = 12

Had(2).x = 11 : Had(2).y = 13

g.DrawImage(ImageList1.Images(4), 11 * 35, 11 * 35)

g.DrawImage(ImageList1.Images(5), 11 * 35, 12 * 35)

g.DrawImage(ImageList1.Images(5), 11 * 35, 13 * 35)

Plocha(11, 11) = POLE.Had

Plocha(11, 12) = POLE.Had

Plocha(11, 13) = POLE.Had

Delka = 3

Smer = SMERY.Nahoru

'nastavit náhodu a vytvořit bonusy

Randomize()

Bonus() : Bonus() : Bonus() : Bonus() : Bonus() 'tímto jsem já změnil počet bonusů na dva původně jich bylo pět (originál):Bonus() : Bonus() :Bonus() : Bonus() : Bonus() (konec originálu)'

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

'smazat konec hada

g.FillRectangle(Brushes.White, Had(Delka - 1).x * 35, Had(Delka - 1).y * 35, 35, 35)

Plocha(Had(Delka - 1).x, Had(Delka - 1).y) = POLE.Volno

'posun článků hada na pozici předchozího

Dim i As Integer

For i = Delka To 1 Step -1

Had(i).x = Had(i - 1).x

Had(i).y = Had(i - 1).y

Next

'na místo, kde je teď hlava, nakreslit normální článek

g.DrawImage(ImageList1.Images(5), Had(0).x * 35, Had(0).y * 35)

================================================================

BONUS: Umělá inteligence - odkomentujte tento blok a snižte

interval časovače na 30. Pak se jen můžete dívat, jak had

leze sám a pojídá všechny bonusy.

'Select Case Had(0).x & " " & Had(0).y

' Case "5 1" : Smer = SMERY.Doleva

' Case "1 1" : Smer = SMERY.Dolu

' Case "1 2" : Smer = SMERY.Doprava

' Case "9 2" : Smer = SMERY.Dolu

' Case "9 3" : Smer = SMERY.Doleva

' Case "1 3" : Smer = SMERY.Dolu

' Case "1 4" : Smer = SMERY.Doprava

' Case "9 4" : Smer = SMERY.Dolu

' Case "9 5" : Smer = SMERY.Doleva

' Case "1 5" : Smer = SMERY.Dolu

' Case "1 6" : Smer = SMERY.Doprava

' Case "9 6" : Smer = SMERY.Dolu

' Case "9 7" : Smer = SMERY.Doleva

' Case "1 7" : Smer = SMERY.Dolu

' Case "1 8" : Smer = SMERY.Doprava

' Case "9 8" : Smer = SMERY.Dolu

' Case "9 9" : Smer = SMERY.Doleva

' Case "1 9" : Smer = SMERY.Dolu

' Case "1 10" : Smer = SMERY.Doprava

' Case "10 10" : Smer = SMERY.Nahoru

' Case "10 1" : Smer = SMERY.Doleva

'End Select

================================================================

'změna směru hlavy

Select Case Smer

Case SMERY.Nahoru

Had(0).y = Had(0).y - 1

Case SMERY.Dolu

Had(0).y = Had(0).y + 1

Case SMERY.Doleva

Had(0).x = Had(0).x - 1

Case SMERY.Doprava

Had(0).x = Had(0).x + 1

End Select

'kontrola, jestli nenarazil do zdi

If Had(0).x < 1 Or Had(0).x > 10 Or Had(0).y < 1 Or Had(0).y > 10 Then

GameOver()

PictureBox1.Refresh()

Exit Sub

End If

'kontrola, jestli nenarazil do sebe

If Plocha(Had(0).x, Had(0).y) = POLE.Had Then

GameOver()

PictureBox1.Refresh()

Exit Sub

End If

'kontrola, jestli had nesežral bonus

If Plocha(Had(0).x, Had(0).y) = POLE.Bonus Then

g.DrawImage(ImageList1.Images(5), Had(Delka).x * 35, Had(Delka).y * 35)

Plocha(Had(Delka).x, Had(Delka).y) = POLE.Had

Delka = Delka + 1

If Delka < 96 Then Bonus()

Me.Text = "Hungry Snake - Skóre: " & Delka

End If

'nakreslit novou hlavu

g.DrawImage(ImageList1.Images(4), Had(0).x * 35, Had(0).y * 35)

Plocha(Had(0).x, Had(0).y) = POLE.Had

PictureBox1.Refresh()

End Sub

Public Sub GameOver()

'konec hry

Timer1.Enabled = False

'přebarvit pole poloprůhledně

g.FillRectangle(New SolidBrush(Color.FromArgb(128, Color.LightBlue)), 0, 0, 420, 420)

'napsat text

Dim f As New Font(System.Drawing.FontFamily.GenericSansSerif, 40, FontStyle.Bold)

g.DrawString("KONEC HRY", f, Brushes.Black, 40, 160)

End Sub

Public Sub Bonus()

'vygeneruje nový bonus

Dim b, x, y As Integer

b = Int(Rnd() * 4) 'obrázek

Do

x = Int(Rnd() * 20) + 1

y = Int(Rnd() * 20) + 1

Loop While Plocha(x, y) <> POLE.Volno

Plocha(x, y) = POLE.Bonus

g.DrawImage(ImageList1.Images(b), x * 35, y * 35)

End Sub

End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

2 bonusy

Dobrý den. Byl bych moc rád, kdyby mi někdo poradil, jak mí ve hře jenom 2 bonusy a ne 5.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Hungry Snake 2

Jak by vypadal příkaz, který by nám restartoval hru, když by sme tam vložili button??

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1 Dil mi jde ale 2 vubec.

Vlozim tam toto a hned error

    Public Sub GameOver()
        'konec hry 
        Timer1.Enabled = False
        'přebarvit pole poloprůhledně 
       '''g.FillRectangle(New SolidBrush(Color.FromArgb(128, Color.LightBlue)), 0, 0, 420, 420)'''  /TOTO HAZE ERROR i to dole s g.draw 
        'napsat text 
        Dim f As New Font(System.Drawing.FontFamily.GenericSansSerif, 40, FontStyle.Bold)
        g.DrawString("KONEC HRY", f, Brushes.Black, 40, 160)
    End Sub

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Pokud ti to vyhazuje chybu u deklarace g tak dej deklaraci g na začátek projektu a mělo by to jít.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Hungry Snake 2

Public Class Form1
    Dim g As Graphics
    Enum Pole                   'NOTE:Informace o políčku. 
        Volno = 0
        Stíhačka = 1
    End Enum

    Enum Smery                'NOTE:Všechny možné směry pohybu. 
        Nahoru = 1
        Dolu = 1
        Doleva = 1
        Doprava = 1
    End Enum

    Structure XY                'NOTE:Datový typ pro souřadnice. 
        Dim X As Integer
        Dim y As Integer
    End Structure

    Dim delka As Integer
    Dim Plocha(22, 22) As Pole  'NOTE:Status políček hrací plochy. 
    Dim Stíhačka(100) As XY          'NOTE:Pozice jednotlivých článků stíhačky. 
    Dim Smer As Smery           'NOTE:Směr stíhačky.
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Timer1.Enabled = True
        'NOTE:Vykreslení zdí arény.
        With e.Graphics
            .Clear(Color.White)
            For i As Integer = 0 To 22
                .DrawImage(ImageList1.Images(0), i * 25, 0)
            Next
            For i As Integer = 0 To 22
                .DrawImage(ImageList1.Images(0), 0, 25 * i)
            Next
            For i As Integer = 0 To 22
                .DrawImage(ImageList1.Images(0), 545, 25 * i)
            Next
            For i As Integer = 0 To 22
                .DrawImage(ImageList1.Images(0), 25 * i, 545)
            Next
            'NOTE:Zobrazí stíhačku v hracím poli.
            For i As Integer = 0 To 0
                .DrawImage(ImageList1.Images(1), 250 * 1, 500)
            Next
        End With

    End Sub


    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        'NOTE:Pohyb stíhačky šipkama.
        Select Case e.KeyCode
            Case Keys.Up
                Smer = Smery.Nahoru
            Case Keys.Down
                Smer = Smery.Dolu
            Case Keys.Right
                Smer = Smery.Doprava
            Case Keys.Left
                Smer = Smery.Doleva
        End Select
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       
        Select Case Smer
            Case Smery.Nahoru
                Stíhačka(0).X = Stíhačka(0).y - 1
            Case Smery.Dolu
                Stíhačka(0).X = Stíhačka(0).y + 1
            Case Smery.Doprava
                Stíhačka(0).X = Stíhačka(0).y + 1
            Case Smery.Doleva
                Stíhačka(0).X = Stíhačka(0).y - 1
        End Select
    End Sub
End Class

Zkusil jsem naprogramovat toho hada. Jde mi to, není problém, ale chtěl jsem naprogramovat vlastní hru s nějakým objektem, který by se vyhýbal ostatním. Jestli to nezvládne tak hra končí. Tento objekt ale neumím dát do pohybu i když mám ve form1_load Timer1.Enabled = True. Zdrojový kód je zhruba ze 70% stejný jako u hada. Prosím pomozte. e-mail je adamkoberice@seznam.cz

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Hungry Snake 2

mam malinky problem, delal jsem vse podle navodu, ale neyobrayuji se mi bonusy a kontrola jestli jsem nenarayil do sebe nefungoje.Co mam delat?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Hungry Snake 2

Vytvořil jsem hada podle vašeho návodu,ale nevím jak ho rozpobovat? Mám všechno kody správné, ale když spustím program had nereaguje na pokyny z klávesnice. Nevím v čem je chyba?

děkuji..

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět

Měl jsem podobný problém, ale stačí jenom dát do form1_load "timer1.enabled = true" pak už sviští jak se sluší patří :)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Hungry Snake 2

poradíte prosím co znamená:

System.IndexOutOfRangeException was unhandled

Message="Index je mimo hranice pole."

Source="Hungry Snake"

StackTrace:

v Hungry_Snake.Form1.Timer1_Tick(Object sender, EventArgs e) v C:\Users\uzivatel\Documents\Visual Studio 2008\Projects\hungry snake\Form1.vb:řádek 84

v System.Windows.Forms.Timer.OnTick(EventArgs e)

v System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)

v System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

v System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)

v System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

v System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

v System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

v System.Windows.Forms.Application.RunDialog(Form form)

v System.Windows.Forms.Form.ShowDialog(IWin32Window owner)

v Microsoft.VisualBasic.Interaction.InternalInputBox(String Prompt, String Title, String DefaultResponse, Int32 XPos, Int32 YPos, IWin32Window ParentWindow)

v Microsoft.VisualBasic.Interaction.InputBox(String Prompt, String Title, String DefaultResponse, Int32 XPos, Int32 YPos)

v Hungry_Snake.Form1.Form1_Load(Object sender, EventArgs e) v C:\Users\uzivatel\Documents\Visual Studio 2008\Projects\hungry snake\Form1.vb:řádek 43

v System.EventHandler.Invoke(Object sender, EventArgs e)

v System.Windows.Forms.Form.OnLoad(EventArgs e)

v System.Windows.Forms.Form.OnCreateControl()

v System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

v System.Windows.Forms.Control.CreateControl()

v System.Windows.Forms.Control.WmShowWindow(Message& m)

v System.Windows.Forms.Control.WndProc(Message& m)

v System.Windows.Forms.ScrollableControl.WndProc(Message& m)

v System.Windows.Forms.ContainerControl.WndProc(Message& m)

v System.Windows.Forms.Form.WmShowWindow(Message& m)

v System.Windows.Forms.Form.WndProc(Message& m)

v System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

v System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

v System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

v System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)

v System.Windows.Forms.Control.SetVisibleCore(Boolean value)

v System.Windows.Forms.Form.SetVisibleCore(Boolean value)

v System.Windows.Forms.Control.set_Visible(Boolean value)

v System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

v System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

v System.Windows.Forms.Application.Run(ApplicationContext context)

v Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()

v Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()

v Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)

v Hungry_Snake.My.MyApplication.Main(String[] Args) v 17d14f5c-a337-4978-8281-53493378c1071.vb:řádek 81

v System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)

v System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

v Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

v System.Threading.ThreadHelper.ThreadStart_Context(Object state)

v System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

v System.Threading.ThreadHelper.ThreadStart()

InnerException:

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback