/// <summary> /// Dieser Timer bestimmt das Intervall, ind dem das Event hindernisseErzeugen_Tick aufgerufen wird /// </summary> public void Start() { try { //Level und Score festlegen this.level = 20; this.score = 0; //Timer Einstellen und Event zum auswerten des Timer wird erstellt this.hindernisseErzeugen.Enabled = true; this.hindernisseErzeugen.Interval = Speicher.Schwierigkeit; this.hindernisseErzeugen.Tick += new EventHandler(this.hindernisseErzeugen_Tick); this.hindernisseErzeugen.Start(); //Das Anfangsraumschiff wird festgelegt this.emptyRectangle.Height = 27; this.emptyRectangle.Width = 80; this.raumschiff = new Raumschiff(this.emptyBitmap, this.emptyRectangle, this.velocityRaumschiff, this.flag, this.flag); this.raumschiff.Bild(); this.raumschiff.Setzen(); } catch { MessageBox.Show("Das Spiel kann leider nicht gestartet werden. Versuchen sie einen Neustart!"); } }
/// <summary> /// Konstruktor des Pause Formulars /// </summary> /// <param name="score"></param> /// <param name="spiellevel"></param> /// <param name="schiff"></param> /// <param name="musik"></param> /// <param name="manager"></param> public Pause(int score, int spiellevel, Raumschiff schiff, bool musik, Flugmanager manager) { this.InitializeComponent(); this.punkte = score; this.raumschiff = schiff; this.level = spiellevel; this.sound = musik; this.flugmanger = manager; }
/// <summary> /// Diese Event wird beim Mausdruck ausgelöst und ruft die Beam - Methode das Flugmanagers auf /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pSpielflaeche_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //Übermalt das alte Raumschiff Raumschiff schiff2 = this.manager.Raumschiff; using (Graphics grafics = pSpielflaeche.CreateGraphics()) { grafics.FillRectangle(Brushes.Black, schiff2.Rectangle); } schiff2 = null; //Weißt dem Raumschiff einen neuen Punkt zu this.manager.Beam(e.Location.X, e.Location.Y); } }
/// <summary> /// Diese Event ruft je nach Tastendruck verschiedenen Methoden auf /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Spiel_KeyDown(object sender, KeyEventArgs e) { if ((e.KeyCode == Keys.S) | (e.KeyCode == Keys.Down)) { this.manager.RaumschiffAB(); } else if ((e.KeyCode == Keys.W) | (e.KeyCode == Keys.Up)) { this.manager.RaumschiffAUF(); } else if ((e.KeyCode == Keys.A) | (e.KeyCode == Keys.Left)) { this.manager.RaumschiffLinks(); } else if ((e.KeyCode == Keys.D) | (e.KeyCode == Keys.Right)) { this.manager.RaumschiffRechts(); } else if (e.KeyCode == Keys.F) { this.manager.Schildaktivieren(); } else if (e.KeyCode == Keys.C) { if (schusskontrolle) { this.manager.Schießen(); this.schusskontrolle = false; this.kontrolle.Start(); } } else if (e.KeyCode == Keys.Escape) { Speicher.Schiff = 1; Speicher.Schwierigkeit = 2000; MessageBox.Show("Das Spiel wird nun beendet!!!"); this.Dispose(true); } else if (e.KeyCode == Keys.Space) { //Das Spiel wird pausiert und das Pause Menü aufgerufen Raumschiff schiff2 = this.manager.Raumschiff; using (Graphics grafics = this.pSpielflaeche.CreateGraphics()) { grafics.FillRectangle(Brushes.Black, this.pSpielflaeche.ClientRectangle); } schiff2 = null; Pause Pause = new Pause(this.manager.Score, this.manager.Level, this.manager.Raumschiff, musik, manager); Pause.ShowDialog(this); } else if (e.KeyCode == Keys.R) { Raumschiff schiff = this.manager.Raumschiff; Rectangle bomb = new Rectangle(schiff.Rectangle.X - 660, schiff.Rectangle.Y - 387, 1400, 800); this.manager.Krater(bomb); schiff = null; } }
/// <summary> /// Dieses Event zeichnet alle Objekte auf die Spielfläche und überprüft Kollisionen /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void zeichneAufPanel_Tick(object sender, EventArgs e) { try { //Ein Graphicsobjekt wird erstellt, das später wieder gelöscht wird using (Graphics grafics = pSpielflaeche.CreateGraphics()) { //Font zum einstellen der Schrift, der später wieder gelöscht wird using (Font arial25Bold = new Font("Arial", 25, FontStyle.Bold)) { //Eine Liste wird erzeugt; die der Liste Hindernisse im Flugmangager entspricht, welche die Hindernisse enthält, die horizontal bewegt werden List <Flugkoerper> objekte_hori = manager.HindernisseHori; //Eine Liste wird erzeugt; die der Liste Hindernisse im Flugmangager entspricht, welche die Hindernisse enthält, die horizontal vertikal werden List <Flugkoerper> objekte_vert = manager.HindernisseVert; List <Flugkoerper> schuesse = manager.Schuss; //Ein raumschiff wird erzeugt Raumschiff schiff = manager.Raumschiff; //Ein Rechteck überzeichnet das Bild des Raumschiffs aus dem vorigen Zyklus grafics.FillRectangle(Brushes.Black, schiff.Rectangle.X - 80, schiff.Rectangle.Y - 80, 240, 190); //Das Raumschiff wird auf das Panel gezeichnet grafics.DrawImageUnscaledAndClipped(schiff.Bitmap, schiff.Rectangle); //Jedes Objekt der Liste der horizontalen Hindernisse wird gezeichnet for (int i = 0; i < objekte_hori.Count(); i++) { //Ein Rechteck überzeichnet das Bild für jedes Hindernis aus dem vorigen Zyklus grafics.FillRectangle(Brushes.Black, objekte_hori[i].Rectangle.X + objekte_hori[i].Rectangle.Width, objekte_hori[i].Rectangle.Y, objekte_hori[i].Velocity, objekte_hori[i].Rectangle.Height); //Jedes Hinderniss wird auf das Panel gezeichnet grafics.DrawImageUnscaledAndClipped(objekte_hori[i].Bitmap, objekte_hori[i].Rectangle); } //Falls die Schwierigkeit "Schwer" oder höher ist, gibt es auch vertikale Hindernisse //Jedes Objekt der Liste der vertikalen Hindernisse wird gezeichnet for (int i = 0; i < objekte_vert.Count(); i++) { //Ein Rechteck überzeichnet das Bild für jedes Hindernis aus dem vorigen Zyklus grafics.FillRectangle(Brushes.Black, objekte_vert[i].Rectangle.X, objekte_vert[i].Rectangle.Y + objekte_vert[i].Rectangle.Height, objekte_vert[i].Rectangle.Width, objekte_vert[i].Velocity); //Jedes Hinderniss wird auf das Panel gezeichnet grafics.DrawImageUnscaledAndClipped(objekte_vert[i].Bitmap, objekte_vert[i].Rectangle); } //Zeichnet die SChüsse auf die Spielfläche for (int i = 0; i < schuesse.Count(); i++) { grafics.FillRectangle(Brushes.Black, schuesse[i].Rectangle.X - 25, schuesse[i].Rectangle.Y, 10, 5); grafics.DrawImageUnscaledAndClipped(schuesse[i].Bitmap, schuesse[i].Rectangle); } //Highscore wird auf Panel gezeichnet grafics.FillRectangle(Brushes.Black, 110, 0, 110, 33); grafics.DrawString("Score: " + this.manager.Score.ToString(), arial25Bold, Brushes.Red, 0, 0); grafics.FillRectangle(Brushes.Black, 320, 0, 80, 33); grafics.DrawString("Level: " + this.manager.Level, arial25Bold, Brushes.Red, 220, 0); //Wenn das Level höher als neun ist, werden auch Schilder als Hindernisse eingeflogen if (this.manager.Level >= 10) { //Zeigt die Anzahl der gesammelten Schilder an grafics.FillRectangle(Brushes.Black, 640, 0, 100, 33); grafics.DrawString("Schildkristalle: " + this.manager.Kristalle.ToString(), arial25Bold, Brushes.Red, 400, 0); } //Wenn das ausgewählte Schiff mindestens in der Stufe zwei ist if (Speicher.Schiff > 3) { //Zeigt an ob das Schild aktiviert ist oder nicht grafics.FillRectangle(Brushes.Black, 870, 0, 180, 33); grafics.DrawString("Schild: " + this.manager.SchildStatus(), arial25Bold, Brushes.Red, 750, 0); grafics.FillRectangle(Brushes.Black, 1255, 0, 90, 33); grafics.DrawString("Munition: " + this.manager.Munition.ToString(), arial25Bold, Brushes.Red, 1100, 0); } //Wenn das Schiff auf Stufe drei ist if (Speicher.Schiff == 6) { //Zeigt an, wie of gebeamt werden kann grafics.FillRectangle(Brushes.Black, 1580, 0, 75, 33); grafics.DrawString("Beamkristalle: " + this.manager.Beams.ToString(), arial25Bold, Brushes.Red, 1350, 0); grafics.FillRectangle(Brushes.Black, 1800, 0, 90, 33); grafics.DrawString("Bomben: " + this.manager.Bomben.ToString(), arial25Bold, Brushes.Red, 1650, 0); } grafics.DrawLine(Pens.Red, 0, 35, this.pSpielflaeche.Width, 35); this.Achtung(); //Diese Flag beendet das Spiel oder lässt es laufen if (Speicher.EndFlag) { Speicher.Schwierigkeit = 2000; Speicher.Schiff = 1; Speicher.EndFlag = false; MessageBox.Show("Das Spiel wird nun beendet!!!"); this.Dispose(true); } //Bewegt die Hindernisse this.manager.HindernisseBewegen(); this.raeumen++; if (this.raeumen == 200) { this.raeumen = 0; grafics.FillRectangle(Brushes.Black, 0, 35, this.ClientRectangle.Width, this.ClientRectangle.Height); } } } } catch (Exception ex) { //Falls das Spiel gar nicht funktioniert, wird es sofort geschlossen MessageBox.Show("Gravierender Spielfehler. Das Spiel muss leider geschlossen werden!"); this.Dispose(true); } }