Laden...
A
Benutzerbeschreibung

Forenbeiträge von AllForOne Ingesamt 14 Beiträge

11.05.2011 - 16:09 Uhr

Hey,
Danke für die Antowrten.
Ja ich bin mit der Instanzbildung etwas unvorsichitg umgegangen.
Das mit Referenzübergabe war mir noch nicht bekannt, daher gab es immer sehr viele Objekte obwohl es nur eins geben sollte.

10.05.2011 - 21:13 Uhr

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        public const float MaxLandegeschwindigkeit = 50f;
        public const float MaxEntfernung = 20f;
        public int LevelNumber = 0;

        Sprite Spieler;
        Level level;
        Block Block;


        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            
            Content.RootDirectory = "Content";
            graphics.PreferredBackBufferWidth = Bildschirm.Width;
            graphics.PreferredBackBufferHeight = Bildschirm.Height;
        }

        
        protected override void Initialize()
        {
            
            Spieler = new Sprite(new Vector2(50f,50f));
            Block = new Block();
            Reset();
            base.Initialize();
        }

        public void Reset()
        {
            level = new Level(@"Levels\level" + Bildschirm.LevelNumber + ".txt");
           
            Spieler.Position = level.StartPunkt * Bildschirm.BlockSize;
            
            Spieler.Geschwindigkeit = new Vector2();
            
        }

        
        protected override void LoadContent()
        {
            
            spriteBatch = new SpriteBatch(GraphicsDevice);
            Spieler.LoadContent(Content);
            Block.LoadContent(Content);

            
        }

      
        protected override void UnloadContent()
        {
            
        }

     
        protected override void Update(GameTime gameTime)
        {
            
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            Spieler.Update(gameTime);
         

            base.Update(gameTime);
        }

        
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();
            Block.Draw(spriteBatch);
            Spieler.Draw(spriteBatch);
            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}


 class Sprite
    {
        Texture2D tSprite;
        public Vector2 Position;
        public Vector2 Geschwindigkeit;
        public bool GuestLoaded = false;

        public const float Gravitation= -9.81f;
        public float Gravitationf;
        public const float Beschleunigung = 90f;
        



        public Sprite(Vector2 Startposition)
        {
            Position = Startposition;
        }
        public void LoadContent(ContentManager Content)
        {
            tSprite = Content.Load<Texture2D>("Sprite");
        }

        public void Update(GameTime gametime)
        {
            UpdatePosition(gametime);

        }

        public void UpdatePosition(GameTime gametime)
        {
            Gravitationf = Gravitation * (float)gametime.ElapsedGameTime.TotalSeconds;
            KeyboardState keyboard = Keyboard.GetState();
            Game1 game = new Game1();

            // Randkollision
            if (Position.X < 0)
                game.Reset();
            if (Position.X > Bildschirm.Width - tSprite.Width)
                game.Reset();
            if (Position.Y < 0)
                game.Reset();
            if (Position.Y > Bildschirm.Height - tSprite.Height)
                game.Reset();

            // Zwischenvariablen für Schub
            float forceX = 0f;
            float forceY = 0f;
            float deltaX = 0f;
            float deltaY = 0f;

            //Vergangene Zeit
            float VergangeneZeit = (float)gametime.ElapsedGameTime.TotalMilliseconds/1000;

            // Tastatur anwenden
            if (keyboard.IsKeyDown(Keys.Left)) forceX += -1f;
            if (keyboard.IsKeyDown(Keys.Right)) forceX += 1f;
            if (keyboard.IsKeyDown(Keys.Up)) forceY += 1f;
            if (keyboard.IsKeyDown(Keys.Down)) forceY += -1f;

            //Antrieb
            deltaX += forceX * VergangeneZeit * Beschleunigung;
            deltaY += -forceY * VergangeneZeit * Beschleunigung;

            //Geschwindigkeit
            Geschwindigkeit += new Vector2(deltaX,deltaY);

            //Gravitation
            Geschwindigkeit -= new Vector2(0f, Gravitationf);

            //Position
            Position += new Vector2(Geschwindigkeit.X * VergangeneZeit, Geschwindigkeit.Y * VergangeneZeit);

            
            
        }
        public void UpdateLandungGast(GameTime gametime)
        {

        }

        public void Draw(SpriteBatch sb)
        {
            sb.Draw(tSprite, Position, Color.White);
        }
    }


class Level
    {
        public const int ROWCOUNT = 24;
        public const int COLUMNCOUNT = 32;
        public FieldType[,] Fields  { get; private set; }
        public Vector2 StartPunkt   { get; private set; }
        public Vector2 Gastposition { get; private set; }
        public Vector2 Zielposition { get; private set; } 

        public Level(string filename)
        {
            string[] lines = File.ReadAllLines(filename);

            if (lines.Length != ROWCOUNT)
                throw new InvalidDataException("Falsche Anzahl Zeilen");

            Fields = new FieldType[COLUMNCOUNT, ROWCOUNT];
            bool SpriteStartpunktFound = false;
            bool GastpositionFound = false;
            bool ZielpositionFound = false;

            int row = 0;
            foreach (string line in lines)
            {
                for (int column = 0; column < COLUMNCOUNT; column++)
                {
                    if (line.Length != COLUMNCOUNT)
                        throw new InvalidDataException("Falsche Anzahl Spalten in Reihe " + row);

                    switch (line[column])
                    {
                        case '.': Fields[column, row] = FieldType.Leer; break;
                        case '#': Fields[column, row] = FieldType.Hindernis; break;

                        case '1':
                            if (SpriteStartpunktFound)
                            {
                                throw new InvalidDataException("Mehr als ein Startpunkt vorhanden");
                            }
                            else
                            {
                                Fields[column, row] = FieldType.SpriteStartpunkt;
                                StartPunkt = new Vector2(column, row);
                                SpriteStartpunktFound = true;
                                break;
                            }
                        case '2':
                            if (GastpositionFound)
                            {
                                throw new InvalidDataException("Mehr als ein Gastpunkt vorhanden");
                            }
                            else
                            {
                                Fields[column, row] = FieldType.Gast;
                                Gastposition = new Vector2(column, row);
                                GastpositionFound = true;
                                break;
                            }

                        case '3':
                            if (ZielpositionFound)
                                throw new InvalidDataException("Mehr als ein Zielpunkt vorhanden");

                            Fields[column, row] = FieldType.Ziel;
                            Zielposition = new Vector2(column, row);
                            ZielpositionFound = true;
                            break;
                    }
                }
                row++;
            }

            if (!SpriteStartpunktFound)
                throw new InvalidDataException("Kein Startpunkt definiert");
            if (!GastpositionFound)
                throw new InvalidDataException("Kein Gastpunkt definiert");
            if (!ZielpositionFound)
                throw new InvalidDataException("Kein Zielpunkt definiert");
        }

So Wenn ich nun das Speil starte über den Rand fliege(wird in einer Methode geprüft) wird die Reset-Methode aufgerufen. so weit so gut. Nun soll die Position des Spieler Obejekts der Sprite Klasse wieder auf einen Ausgangswert zurückgesetzt werden. Doch ich bekomme eine NullReferenceException. Und sehe auch wenn ich mit der Maus über Spieler.Position = level.Startpunkt gehe,dass Spieler null also nicht instanziiert ist. Doch eigentlich ist es das ja.

21.03.2011 - 14:14 Uhr

Hey
Danke schon mal,
Und wie würde das konkret aussehen, weiß jetzt nicht genau wo der boolean mit rein soll.

So vielleicht:


 private void Login_Click(object sender, EventArgs e)
        {
            if (Benutzername.Text == "Test" && Passwort.Text == "testitout")
            {
                if (Check == false)
                {
                    Form2 frm2 = new Form2();
                    frm2.Show();
                    this.Hide();
                    Check = true;
                }
            else 
           {
            MessageBox.Show("Nicht mehr möglich!");
            }
            }
            else
            {
              //  ToolTip tt = new ToolTip();
             //   tt.SetToolTip(Login, "Leider falsch!!!")

                MessageBox.Show("Das Passwort oder der Benutzername ist falsch.");
            }

Wenn ich jetzt das Programm neu starte würd Check ja wieder auf false gesetzt weil es vorher auch auf false war, da man sich sonst ja nie einloggen kann.

21.03.2011 - 13:43 Uhr

hm also ich habe bis jetzt das Passwort in der exe mit drin stehen. dort passiert auch ein einfacher vergleich. Ich weiß, dass es nicht schwer ist es rauszufinden. Reflekotr, dissassemblen etc... Ich nur eig das es bei einer exe- Datei bleibt und das keine zusätzlichen Txt dateien etc erstellt werden müssen.


 private void Login_Click(object sender, EventArgs e)
        {
            if (Benutzername.Text == "Test" && Passwort.Text == "testitout")
            {
                Form2 frm2 = new Form2();
                frm2.Show();
                this.Hide(); 
            }
            else
            {
              //  ToolTip tt = new ToolTip();
             //   tt.SetToolTip(Login, "Leider falsch!!!")

                MessageBox.Show("Das Passwort oder der Benutzername ist falsch.");
            }

        }

21.03.2011 - 13:34 Uhr

Hey Com,
Ich möchte ein Programm schreiben, in das man sich nur einmalig einloggen kann.
Also man kann so oft falsche Passwörter ausprobieren wie man will, doch das richtige mit der Weiterleitung zu einer neuen Form soll nur einmal funktionieren. Das heißt ich muss in irgendeiner Weise dem Programm sagen wenn ich einmal eingeloggt bin und das bei jedem Neustart des Programms kontrollieren.

Wie funktioniert das?

PS: Ich habe schon gegoogelt.

mfg afo

05.03.2011 - 19:17 Uhr

Hallo Com,
Mein Problem bei einer einfachen Taschenrechner-Anwendung besteht in einer Typumwandlung.
Und zwar wenn ich den String in Integer umwandel dann mit Try/Catch bei der TEilung durch 0 eine Exception abfangen will funktioniert das super. Jedoch bei der Typumwandlung von string nach double wird keine Exception geworfen sondern das ergbenis +unendlich ausgegeben.


 private void Geteilt_Click(object sender, EventArgs e)
        {

            try
            {
                 Ergebnis.Text = ((Convert.ToDouble(Zahl1.Text)) / (Convert.ToDouble(Zahl2.Text))).ToString();
            
            }
            catch(Exception f)
            {
              MessageBox.Show(f.Message);
           }

        }

Bei dem Code kommt dann bei den Einagbewerten von Zahl1= 2 und Zahl2= 0 das Ergebnis von +unendlich.


private void Geteilt_Click(object sender, EventArgs e)
        {

            try
            {
                 Ergebnis.Text = ((Convert.ToInt64(Zahl1.Text)) / (Convert.ToInt64(Zahl2.Text))).ToString();
            
            }
            catch(Exception f)
            {
              MessageBox.Show(f.Message);
           }

        }

Hier bei der gleichen Eingabe wird die Exception in der MessageBox ausgegeben.
Nur so kann ich ja nicht mit Kommazahlen rechnen.

Wo liegt der Fehler?
Meiner Vermutung nach muss die Zahl2 bei dem Konvertieren von string in double in eine Zahl ähnlich wie 0,00000000000000001 konvertiert werden,sodass ein WErt +unendlich sein kann.

Ich weiß einfach nicht merh weiter. Forensuche habe ich schon benutzt.

04.03.2011 - 16:41 Uhr

ah ok Danke,
ich glaub das übertseigt dann meine Künste =)

04.03.2011 - 16:10 Uhr

Geht das auch mit der speziellen Klasse?
Weil da muss man ja immer ein Pfad angeben.

Danke schon mal für die Hilfe

04.03.2011 - 15:37 Uhr

Hallo Com,

nun ich möchte das Musik im Hintergrund abgespielt wird über die Mentalis.org Klasse.
Die betreffende mp3 Datei muss bei der Klasse ja glaub ich als Pfad angegeben werden.

Nun meine Frage, ob man die mp3 datei in die exe irgendwie einbinden kann, sodass ich das Programm nur mit der exe weitergeben kann?

Danke
afo

14.02.2011 - 13:59 Uhr

hm ok, nur schade das es nicht so billigere Kurse gibt. Photoshop Kurse sind ja auch billiger. Dann muss ich wohl im Selbststudium weitermachen und bis zur Uni warten.
Danke an alle für die schnelle Hilfe!

mfg afo

14.02.2011 - 13:37 Uhr

Hey Com,
Ich bin ein 16-jähriger Schüler und interessiere mich für die Programmierung in C#.
Ich lese neben her C# in 21 Tagen und das Galileo Openbook. Nur wollte ich mal einen externen Kurs besuchen um das Wissen zu festigen, es einfach von einem Menschen noch mal geordnter erklären lassen. Im Internet finde ich zwar Kurse diesbezüglich nur die sind alle so teuer(1500 Euro aufwärts). Gibt es da auch billigere Varianten so ein 5 Tage Workshop kann doch keine 2000 Euro kosten?!?!

P.S: Ich wohne im Nürnberger Raum.

mfg afo

10.12.2010 - 16:12 Uhr

Hey Com,
Wie poste ich richtig habe ich schon durch gelesen, trotzdem mache ich es iwie immer falsch.
Ich versuche das Problem gut zu schildern.

Ich möchte ein Programm schreiben, das einen Spielautomaten simuliert.
DAs heißt ich habe Kreise in einer picturebox und abhängig von der Farbkombination der Kreise ergibt sich der Gewinn. Das ist aber eigentlich nebensächlich.

Ich möchte nicht immer die ganzen Anweisungen wie:


System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
            System.Drawing.Graphics formGraphics = obj1.pictureBox1.CreateGraphics();
            obj1.formGraphics.FillEllipse(myBrush, new Rectangle(10, 10, 80, 80));
            obj1.myBrush.Dispose();
            obj1.formGraphics.Dispose();

Diese Anweisungen möchte ich nicht in das Ereignis direkt rein schreiben, sondern lieber in dem Programm.cs- Teil einen Klasse mit einer passenden Methode erzeugen,die ich dann nur in dem Event aufrufen muss.

Doch wenn ich das so mache:

public class Walzen : Form1
    {
        public void zeichen1();
         {
        Form1 obj1 = new Form1();

            System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
            System.Drawing.Graphics formGraphics = obj1.pictureBox1.CreateGraphics();
            obj1.formGraphics.FillEllipse(myBrush, new Rectangle(10, 10, 80, 80));
            obj1.myBrush.Dispose();
            obj1.formGraphics.Dispose();
    
    
    }
        
      
    }

kommen nur Fehler.

Ich weiß nur leider nicht woran es liegt.

DAnke für eure Hilfe!!!

08.12.2010 - 18:56 Uhr

Hey,
So meine Situation:
Ich möchte eine Windows Forms Application schreiben, in der ich einen text(textbox1.Text) durch einen Buttonaufruf in einer anderen Textbox(textbox2.Text) in Geheimschrift ausgebe. Der Algorhythmus für die Geheimschrift muss nicht wirklich komplex sein, doch ich habe Grundlegendeprobleme.

Mein Algo soll eigentlich nur daraus bestehen, dass der String in Ascii umgewandelt wird und dann ausgegeben wird.

Doch in die Textbox kann ich nur strings schreiben.

Habe schn explizite Konvertierung in int versucht.

        textBox1.Text = textBox1.Text.ToUpper();  
        long i = Convert.ToInt64(textBox1.Text);  
        textBox2.Text = Convert.ToString(i);  

Doch da kommt immer eine FormatException.

Wie soll ich weiter vorgehen, vielleicht auch ganz anderes.

Danke im voraus für eure Hilfe!

mfg afo