Hallo,
da ich vor langer, langer, langer Zeit gebeten wurde mein Snake in XNA vorzustellen tue ich dies jetzt. Vorraussetzung ist natürlich XNA. Zuerst habe ich dieses Programm in C#, jetzt allerdings in VB geschrieben.
Code:
Kritik ist erwünscht!
LG
da ich vor langer, langer, langer Zeit gebeten wurde mein Snake in XNA vorzustellen tue ich dies jetzt. Vorraussetzung ist natürlich XNA. Zuerst habe ich dieses Programm in C#, jetzt allerdings in VB geschrieben.
Code:
VB.NET-Quellcode
- Imports System
- Imports System.Linq
- Imports System.Collections.Generic
- Imports Microsoft.Xna.Framework
- Imports Microsoft.Xna.Framework.Audio
- Imports Microsoft.Xna.Framework.Content
- Imports Microsoft.Xna.Framework.Input
- Imports Microsoft.Xna.Framework.Media
- Imports Microsoft.Xna.Framework.Graphics
- Imports Microsoft.Xna.Framework.GamerServices
- Imports System.Collections
- Public Class Game1
- Inherits Microsoft.Xna.Framework.Game
- Private WithEvents graphics As GraphicsDeviceManager
- Private WithEvents spriteBatch As SpriteBatch
- Dim Spielende As Boolean = False
- Dim Schrift As SpriteFont
- Dim LängeY As New ArrayList()
- Dim LängeX As New ArrayList()
- Dim LängeA As New ArrayList()
- Dim LängeB As New ArrayList()
- Dim FoodY As New ArrayList()
- Dim FoodX As New ArrayList()
- Dim Mitzählen As Integer = 0
- Dim Geschwindigkeit As Integer = 5
- Dim Mitzählen2 As Integer = 0
- Dim Geschwindigkeit2 As Integer = 5
- Dim Punkte As Integer = 0
- Dim Hoch As Integer
- Dim Breit As Integer
- Dim AKTLenkung As String
- Dim AKTLenkung2 As String
- Dim futter, hintergrund, snakekopf, snaketeile, snakekopf2, snaketeile2 As Texture2D
- Public Sub New()
- graphics = New GraphicsDeviceManager(Me)
- Content.RootDirectory = "Content"
- End Sub
- Protected Overrides Sub Initialize()
- graphics.PreferredBackBufferWidth = 1000
- graphics.PreferredBackBufferHeight = 700
- graphics.ApplyChanges()
- Hoch = graphics.PreferredBackBufferHeight / 10
- Breit = graphics.PreferredBackBufferWidth / 10
- LängeX.Add(0)
- LängeY.Add(0)
- LängeX.Add(1)
- LängeY.Add(0)
- LängeX.Add(2)
- LängeY.Add(0)
- LängeA.Add(0)
- LängeB.Add(0)
- LängeA.Add(1)
- LängeB.Add(0)
- LängeA.Add(2)
- LängeB.Add(0)
- Dim z As New Random()
- FoodX.Add(z.[Next](0, graphics.PreferredBackBufferWidth / 10))
- FoodY.Add(z.[Next](0, graphics.PreferredBackBufferHeight / 10))
- FoodX.Add(z.[Next](0, graphics.PreferredBackBufferWidth / 10))
- FoodY.Add(z.[Next](0, graphics.PreferredBackBufferHeight / 10))
- MyBase.Initialize()
- End Sub
- Protected Overrides Sub LoadContent()
- spriteBatch = New SpriteBatch(GraphicsDevice)
- snaketeile = Content.Load(Of Texture2D)("snaketeile")
- snakekopf = Content.Load(Of Texture2D)("snakekopf")
- futter = Content.Load(Of Texture2D)("essen")
- hintergrund = Content.Load(Of Texture2D)("hintergrund")
- snakekopf2 = Content.Load(Of Texture2D)("snakekopf")
- snaketeile2 = Content.Load(Of Texture2D)("snaketeile")
- Schrift = Content.Load(Of SpriteFont)("SpriteFont1")
- End Sub
- Protected Overrides Sub UnloadContent()
- End Sub
- Protected Overrides Sub Update(ByVal gameTime As GameTime)
- If GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed Then
- Me.Exit()
- End If
- Dim i As Integer = 1
- While i < LängeX.Count
- If LängeX(i).ToString() = LängeX(0).ToString() AndAlso LängeY(i).ToString() = LängeY(0).ToString() Then
- Spielende = True
- End If
- i += 1
- End While
- Dim ks As KeyboardState = Keyboard.GetState()
- If Spielende = False Then
- If ks.IsKeyDown(Keys.Left) Then
- If AKTLenkung <> "r" Then
- AKTLenkung = "l"
- End If
- End If
- If ks.IsKeyDown(Keys.Right) Then
- If AKTLenkung <> "l" Then
- AKTLenkung = "r"
- End If
- End If
- If ks.IsKeyDown(Keys.Up) Then
- If AKTLenkung <> "d" Then
- AKTLenkung = "u"
- End If
- End If
- If ks.IsKeyDown(Keys.Down) Then
- If AKTLenkung <> "u" Then
- AKTLenkung = "d"
- End If
- End If
- If ks.IsKeyDown(Keys.Escape) Then
- [Exit]()
- End If
- If Mitzählen = Geschwindigkeit Then
- If AKTLenkung = "d" Then
- LängeX.Insert(0, LängeX(0))
- LängeX.RemoveAt(LängeX.Count - 1)
- LängeY.Insert(0, Convert.ToInt16(LängeY(0)) + 1)
- LängeY.RemoveAt(LängeY.Count - 1)
- End If
- If AKTLenkung = "u" Then
- LängeX.Insert(0, LängeX(0))
- LängeX.RemoveAt(LängeX.Count - 1)
- LängeY.Insert(0, Convert.ToInt16(LängeY(0)) - 1)
- LängeY.RemoveAt(LängeY.Count - 1)
- End If
- If AKTLenkung = "l" Then
- LängeX.Insert(0, Convert.ToInt16(LängeX(0)) - 1)
- LängeX.RemoveAt(LängeX.Count - 1)
- LängeY.Insert(0, LängeY(0))
- LängeY.RemoveAt(LängeY.Count - 1)
- End If
- If AKTLenkung = "r" Then
- LängeX.Insert(0, Convert.ToInt16(LängeX(0)) + 1)
- LängeX.RemoveAt(LängeX.Count - 1)
- LängeY.Insert(0, LängeY(0))
- LängeY.RemoveAt(LängeY.Count - 1)
- End If
- Mitzählen = 0
- Else
- Mitzählen += 1
- End If
- i = 0
- While i < FoodX.Count
- If FoodX(i).ToString() = LängeX(0).ToString() AndAlso FoodY(i).ToString() = LängeY(0).ToString() Then
- FoodX.RemoveAt(i)
- FoodY.RemoveAt(i)
- LängeX.Add(-1)
- LängeY.Add(-1)
- Punkte += 1
- Dim z As New Random()
- FoodX.Add(z.[Next](0, graphics.PreferredBackBufferWidth / 10))
- FoodY.Add(z.[Next](0, graphics.PreferredBackBufferHeight / 10))
- End If
- i += 1
- End While
- If Convert.ToInt16(LängeX(0)) < 0 Then
- LängeX(0) = graphics.PreferredBackBufferWidth / 10
- End If
- If Convert.ToInt16(LängeX(0)) > graphics.PreferredBackBufferWidth / 10 Then
- LängeX(0) = 0
- End If
- If Convert.ToInt16(LängeY(0)) < 0 Then
- LängeY(0) = graphics.PreferredBackBufferHeight / 10
- End If
- If Convert.ToInt16(LängeY(0)) > graphics.PreferredBackBufferHeight / 10 Then
- LängeY(0) = 0
- End If
- End If
- While i < LängeA.Count
- If LängeA(i).ToString() = LängeA(0).ToString() AndAlso LängeB(i).ToString() = LängeB(0).ToString() Then
- Spielende = True
- End If
- i += 1
- End While
- Dim sk As KeyboardState = Keyboard.GetState()
- If Spielende = False Then
- If sk.IsKeyDown(Keys.A) Then
- If AKTLenkung2 <> "r" Then
- AKTLenkung2 = "l"
- End If
- End If
- If sk.IsKeyDown(Keys.D) Then
- If AKTLenkung2 <> "l" Then
- AKTLenkung2 = "r"
- End If
- End If
- If sk.IsKeyDown(Keys.W) Then
- If AKTLenkung2 <> "d" Then
- AKTLenkung2 = "u"
- End If
- End If
- If sk.IsKeyDown(Keys.S) Then
- If AKTLenkung <> "u" Then
- AKTLenkung = "d"
- End If
- End If
- If Mitzählen2 = Geschwindigkeit2 Then
- If AKTLenkung = "d" Then
- LängeA.Insert(0, LängeA(0))
- LängeA.RemoveAt(LängeA.Count - 1)
- LängeB.Insert(0, Convert.ToInt16(LängeB(0)) + 1)
- LängeB.RemoveAt(LängeB.Count - 1)
- End If
- If AKTLenkung = "u" Then
- LängeA.Insert(0, LängeA(0))
- LängeA.RemoveAt(LängeA.Count - 1)
- LängeB.Insert(0, Convert.ToInt16(LängeB(0)) - 1)
- LängeB.RemoveAt(LängeB.Count - 1)
- End If
- If AKTLenkung = "l" Then
- LängeA.Insert(0, Convert.ToInt16(LängeA(0)) - 1)
- LängeA.RemoveAt(LängeA.Count - 1)
- LängeB.Insert(0, LängeB(0))
- LängeB.RemoveAt(LängeB.Count - 1)
- End If
- If AKTLenkung = "r" Then
- LängeA.Insert(0, Convert.ToInt16(LängeA(0)) + 1)
- LängeA.RemoveAt(LängeA.Count - 1)
- LängeB.Insert(0, LängeB(0))
- LängeB.RemoveAt(LängeB.Count - 1)
- End If
- Mitzählen2 = 0
- Else
- Mitzählen2 += 1
- End If
- i = 0
- While i < FoodX.Count
- If FoodX(i).ToString() = LängeA(0).ToString() AndAlso FoodY(i).ToString() = LängeB(0).ToString() Then
- FoodX.RemoveAt(i)
- FoodY.RemoveAt(i)
- LängeA.Add(-1)
- LängeB.Add(-1)
- Punkte += 1
- Dim z As New Random()
- FoodX.Add(z.[Next](0, graphics.PreferredBackBufferWidth / 10))
- FoodY.Add(z.[Next](0, graphics.PreferredBackBufferHeight / 10))
- End If
- i += 1
- End While
- If Convert.ToInt16(LängeA(0)) < 0 Then
- LängeA(0) = graphics.PreferredBackBufferWidth / 10
- End If
- If Convert.ToInt16(LängeA(0)) > graphics.PreferredBackBufferWidth / 10 Then
- LängeA(0) = 0
- End If
- If Convert.ToInt16(LängeB(0)) < 0 Then
- LängeB(0) = graphics.PreferredBackBufferHeight / 10
- End If
- If Convert.ToInt16(LängeB(0)) > graphics.PreferredBackBufferHeight / 10 Then
- LängeB(0) = 0
- End If
- End If
- MyBase.Update(gameTime)
- End Sub
- Protected Overrides Sub Draw(ByVal gameTime As GameTime)
- GraphicsDevice.Clear(Color.CornflowerBlue)
- spriteBatch.Begin()
- spriteBatch.Draw(hintergrund, New Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), Color.White)
- Dim i As Integer = 0
- While i < LängeX.Count
- spriteBatch.Draw(snaketeile, New Rectangle(Convert.ToInt16(LängeX(i)) * 10, Convert.ToInt16(LängeY(i)) * 10, 10, 10), Color.White)
- i += 1
- End While
- spriteBatch.Draw(snakekopf, New Rectangle(Convert.ToInt16(LängeX(0)) * 10, Convert.ToInt16(LängeY(0)) * 10, 10, 10), Color.White)
- i = 0
- While i < LängeA.Count
- spriteBatch.Draw(snaketeile2, New Rectangle(Convert.ToInt16(LängeA(i)) * 10, Convert.ToInt16(LängeB(i)) * 10, 10, 10), Color.White)
- i += 1
- End While
- spriteBatch.Draw(snakekopf2, New Rectangle(Convert.ToInt16(LängeA(0)) * 10, Convert.ToInt16(LängeB(0)) * 10, 10, 10), Color.White)
- i = 0
- While i < FoodX.Count
- spriteBatch.Draw(futter, New Rectangle(Convert.ToInt16(FoodX(i)) * 10, Convert.ToInt16(FoodY(i)) * 10, 10, 10), Color.White)
- i += 1
- End While
- If Spielende Then
- spriteBatch.DrawString(Schrift, "VERLOREN!", New Vector2(450, graphics.PreferredBackBufferHeight / 2), Color.Black)
- End If
- spriteBatch.DrawString(Schrift, "Punkte: " & Punkte.ToString(), New Vector2(10, 10), Color.Black)
- spriteBatch.[End]()
- MyBase.Draw(gameTime)
- End Sub
- End Class
Kritik ist erwünscht!
LG