C# Labyrinth: Checkpoint problem + "Anti-Hack"

xMoritzx

Cadet 4th Year
Registriert
Mai 2012
Beiträge
127
Hallo. Ich habe gestern Abend dieses Labyrinth nach dem TuT erstellt. Es klappt ja auch Wunderbar, aber irgendiwe will der Checkpoint nicht.
Ich habe für die Wall auch das richtige Ereignis festgelegt, aber der Cursor hüpft immer wieder zum Start?

Hier der Code:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // Dieser Sound erscheint, wenn der Spieler die Wand berührt.
        System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Windows\Media\chord.wav");
        // Dieser Sound erscheint, wenn der Spieler das Ziel erreicht.
        System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav");
        public Form1()
        {
            InitializeComponent();
            MoveToStart();
        }

        private void finishLabel_MouseEnter(object sender, EventArgs e)
        {
            finishSoundPlayer.Play(); 
            MessageBox.Show("Herzlichen Glückwunsch!");
            Close();
        }

        /// <summary>
        /// Setzt den Zeiger auf 10 Pixel nach unten/rechts
        /// in die obere Rechte Ecke.
        /// </summary>
        private void MoveToStart()
        {
            Point startingPoint = panel1.Location;
            startingPoint.Offset(140, 50);
            Cursor.Position = PointToScreen(startingPoint);
        }

        private void Checkpoint()
        {
            Point checkPoint = hiddenCPLabel.Location;
            Cursor.Position = PointToScreen(checkPoint);
        }
        /// <summary>
        /// Wenn die Maus auf die Wand trifft, wird sie zurück zum Start gesetzt.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void wall_MouseEnter(object sender, EventArgs e)
        {
            MoveToStart();
            startSoundPlayer.Play(); 
        }

        private void wall_MouseEnterCP(object sender, EventArgs e)
        {
            Checkpoint();
            startSoundPlayer.Play();
        }

        private void finishLabel_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Nur die Mitte des Kreuzes zählt! | Schnelle Bewegung und das nutzen der Alt-Taste sind verboten und verderben den Spaß am Spiel!");
            MoveToStart();
        }

    }
}

Und jetzt zum 2. Problem. Man kann ganz einfach Cheaten indem man die Alt-Taste drückt und dann auf das Ziel drückt. Außerdem kann man einfach schnelle bewegungen machen, um aus/in dem/das Labyrinth zu gelangen. Kann man dies auch irgendwie beheben?
 
Problem 1:
Du hast bei "wall_MouseEnter" auch nix mit Checkpoint, du musst überprüfen ob ein Checkpoint vorhanden ist, falls ja, gehe dorthin, falls nein zum Start.
 
Lösung mit Code bitte. ALs Anfänger ist sowas öfters schwer zu lösen.
 
Genau das ist es: wenn du jetzt Code willst, lernst du weniger dabei.
Du brauchst etwas, wo dir sagt, ob du bei einem Checkpoint bist, außerdem musst du wissen wo der Checkpoint ist.

Stichwort:
bool playerHasCheckpoint
Point checkpoint

probiere damit mal etwas zu machen und berichte uns.
 
Zuletzt bearbeitet:
Zu Problem 2: Fang halt die Alt-Taste ab oder deaktivier gänzlich die Tastatureingaben (hier wären KeyPress, KeyDown und KeyUp die Stichwörter).

Was die schnellen Bewegungen angeht, da musst du dir schon was einfallen lassen. Bisschen mehr Logik einbauen eventuell ;) :D
Ergänzung ()

PS: nach welchem Tut hast du das eigentlich erstellt?
 
Ergänzung vom 02.08.2012 13:00 Uhr: PS: nach welchem Tut hast du das eigentlich erstellt?

Wenn man sich Visual C# Express runterlädt, befindet sich auf der Startseite der Reiter: "Lernen". Dort gibt es dann mehrere Tutorials zur auswahl.
Ergänzung ()

Also mit:
Stichwort:
bool playerHaveCheckpoint
Point checkpoint
komme ich nicht weiter und bei diesen KeyPress-Events passiert relativ wenig. Ich habe mehere Varianten getesten und alle zeigten keine Reaktion, wenn ich Alt gedrückt habe. //Wie gesagt: Erst seit gestern Morgen mit C# angefangen :D
 
Mit dem Checkpoint verhält es sich doch so, dass der Spieler, wenn er gegen eine Wand läuft auf dem Checkpoint wieder anfängt, anstatt komplett zurück zum Start zu gehen. Dies darf aber nur passieren, wenn der Spielen den Checkpoint bereits erreicht hat.
Frage: Woher weist du, ob der Spieler den Checkpoint schon erreicht hat?

Das mit dem Point checkpoint von Bagbag könntest du dir auch sparen, da du ja eine GUI-Kompenente hast, die den Checkpoint repräsentiert (genau so wie den Startpunkt). Die Boolesche Variable könnte man treffender _playerHasReachedCheckpoint nennen. Dann sollte klar sein, für was diese steht.

Bzgl. der Alt-Tast: Du solltest auf jeden Fall ein KeyDown-Event bekommen. Frage: Wer bekommt das Event und wie bricht man es ab?

Das mit der schnellen Mausbewegung ist schon ein größeres Problem und geht in die 2D-Spieleprogrammierung, Stichwort Collision-Detection. Ich denke, dass dürfte deinen jetzigen Kenntnisstand etwas überschreiten. Ich werde dich aber nicht davon abhalten, es zu versuchen. ;)
 
Zurück
Oben