C# - Spiel programmieren

Neue Frage »

Auf diesen Beitrag antworten »
Beni C# - Spiel programmieren

Meine Frage:
Hallo Leute,

ich (Maschinenbaustudent) habe nun das Modul Informatik in der FH, da aber der Lehrplan abgeändert wurde, haben wir nicht wie geplant einen Unterricht über matlab sondern nun objektorientierte Programmierung in C#.

Meine Grundkenntnisse enden allerdings bei Console.WriteLine...

somit brauche ich dringend Hilfe.

unser Projekt lautet wie folgt:

Projekt 1:


Ein Spiel, wobei freibewegliche Kreise zerstört werden müssen, soll in C# als graphische Applikation implementiert werden.

Die Richtungen der Bewegungen jedes Kreises, der sich zu jeder Zeit innerhalb der Spielfläche bewegt, sollen zufällig sein. Während des Spiels soll der Spieler die Möglichkeit haben, die absolute Geschwindigkeit der Bewegungen und auch die Grösse der Kreise zu ändern (innerhalb gewisser Grenzen). Jedes Mal wenn der Spieler einen Kreis richtig anklickt, soll der Kreis von der Spielfläche verschwinden und ein ?Hit?-Laut gespielt werden. Jedes Mal wenn der Spieler einen Kreis verfehlt, soll ein ?Miss?-Laut gespielt werden. Während des Spiels soll der Spieler auch die Möglichkeit haben, die Auffrischungsgeschwindigkeit der Spielfläche zu ändern (innerhalb gewisser Grenzen). Wenn erst die Applikation gestartet ist, soll der Spieler die Möglichkeit haben, die Start- und Stop-Zeitpunkte des Spiels zu bestimmen. Ein ?Scoreboard? muß auch während des Spiels angezeigt werden (Wie viele Punkte ein Treffer einbringt soll eine vernünftige Funktion der Grösse des Kreises, der absoluten Geschwindigkeit, und der Auffrischungsgeschwindigkeit sein).

ich bin froh um jede Art von Hilfe, sei es Tipps, Tricks oder Codes egal was!

Besten Dank im Voraus

Beni

Meine Ideen:
also ziemlich sicher handelt es sich ja um eine WindowsFormApplication
und die variablen Werte muss ich bestimmt über einen Regler oder ein Kontrollfeld verändern können...

aber weiter komm ich leider alleine nicht.... =(
 
Auf diesen Beitrag antworten »
InformaTiger RE: C# - Spiel programmieren

Allem voran: Welches Programm benutzt du zum erstellen? Ich könnte dir Visual Studio 2012 empfehlen.

Als Spielfeld würde ich ein Panel benutzen und als Kreise eine PictureBox in der ich vorher mit einem beliebigen Grafikprogramm (bspw. Paint) einen Kreis einfüge. Zum erstellen der Zufälligen Positionen einen Zufallgenerator der Klasse Random.

Hier ein Beispiel:

code:
1:
2:
3:
4:
Random aZufallsgenerator = new Random();
aZufallsgenerator.Next(1, 200);


Die erste Zahl in der Klammer bei .Next gibt den minimalen Wert an der noch enthalten ist und der zweite Wert ist der maximale Wert der allerdings nicht mehr enthalten ist (im Beispiel also inkl.1 - exkl. 200). Die Geschwindigkeit beeinträchtigst du in dem du einen Timer setzt der beispielsweise alle Sekunde durch die Eigenschaft:

code:
1:
PictureBox1.Visible = false;


verschwinden lässt. Den Score kannst du durch das Ereignis Click auf die PictureBox festlegen, indem du sagst

code:
1:
2:
3:
4:
5:
6:
7:
private void pictureBox1_Click(object sender, EventArgs e)
{
              aScore += 40;
              pictureBox1.Visible = false;
}


Das wäre mal ein grob gesagter Vorschlag. Falls es dir jedoch an Grundkenntnissen fehlt empfehle ich dir die hier:

- C Sharp Lehrvideos

Lg
InformaTiger
Auf diesen Beitrag antworten »
eulerscheZahl

Mein Kreis tanzt schon smile
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        const int geschwindigkeit = 30;
        const int refresh = 50;
        const int radius = 50;
        int x = 0, y = 0;
        Random r = new Random();

        private void timer1_Tick(object sender, EventArgs e)
        {
            int richtung = r.Next(360); //Winkel
            x += (int)(geschwindigkeit * Math.Sin(richtung));
            y += (int)(geschwindigkeit * Math.Cos(richtung));
            if (x < 0) x = 0;
            if (y < 0) y = 0;
            if (x > pictureBox1.Width - radius) x = pictureBox1.Width - radius;
            if (y > pictureBox1.Height - radius) y = pictureBox1.Height - radius;
            Graphics g = pictureBox1.CreateGraphics();
            //altes Bild löschen
            g.FillRectangle(new SolidBrush(Color.White), -1, -1, pictureBox1.Width + 1, pictureBox1.Height + 1);
            //neues Bild einfügen
            g.FillEllipse(new SolidBrush(Color.Red), x - radius, y - radius, 2 * radius, 2 * radius);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Interval = refresh;
            x = r.Next(radius, pictureBox1.Width - radius);
            y = r.Next(radius, pictureBox1.Height - radius);
        }
    }
}


Falls du Visual Studio benutzt, könntest du auch das XNA Game Studio einbinden.
Auf diesen Beitrag antworten »
Beni

Danke für die bisherigen Tipps =)

Über eine Klasse "Kreise" lasse ich im Kontstruktor einen Kreis Grafisch darstellen. In der Form Klasse habe ich einen Zähler der mir die gewünschte Anzahl Objekte bzw. Kreise über eine for Schleife generiert. Jedem Objekt werden Zufallszahlen zugewiesen (x und y Koordinaten) dadurch bewegen sich die Kreise unterschiedlich. Wie kann ich jetzt programmieren, dass wenn man auf einen Kreis klickt, dieser wieder verschwindet?
 
Auf diesen Beitrag antworten »
InformaTiger

Das machst du wie gesagt mit der Eigenschaft Visible. Da wir das jeweilige Steuerelement für den Benutzer unsichtbar.

smile

Lg
InformaTiger
Auf diesen Beitrag antworten »
Beni

Verschinden mit dieser Funktion nicht alle Kreise? Es soll ja nur der jeweilige Kreis verschwinden, der angeklickt wurde.
Auf diesen Beitrag antworten »
InformaTiger

Nein, nur das Steuerelement wo du sagst es soll verschwinden.

z.b so:

code:
1:
PictureBox1.Visible = false;


hier verschwindet nur die eine PictureBox.

Lg
InformaTiger
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »