Witam,
Piszę swoją pierwszą grę w C# a będzie to klasyczny Arkanoid.
Struktura mojego programu składa się z klas:
classBall
classBrick
classButton
classForm
classGame
classMain
classMenu
classRacket
Tak wygląda klasa classMain, która uruchamia główny wątek programu.
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace PonyArkanoid
{
class classMain
{
public static void Main()
{
Application.EnableVisualStyles();
classForm MainWindow = new classForm();
classMenu MenuPanel = new classMenu(MainWindow);
MainWindow.Controls.Add(MenuPanel);
Application.Run(MainWindow);
}
}
}
Widzimy, że wpierw program tworzy formę MainWindow i panel MenuPanel a następnie osadza panel na formie.
Następnie panel MenuPanel tworzy dwa przyciski "StartButton" i "CreditsButton".
namespace PonyArkanoid
{
public class classMenu:Panel
{
public classMenu(classForm ParentWindow)
{
this.Size = new Size(ParentWindow.Size.Width, ParentWindow.Size.Height);
classButton StartButton = new classButton(PonyArkanoid.Properties.Resources.ButtonStartActive,
PonyArkanoid.Properties.Resources.ButtonStartPassive,"StartButton", new Point(146,330));
classButton CreditsButton = new classButton(PonyArkanoid.Properties.Resources.ButtonCreditsActive,
PonyArkanoid.Properties.Resources.ButtonCreditsPassive, "CreditsButton", new Point(140,470));
this.Controls.Add(StartButton);
this.Controls.Add(CreditsButton);
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
g.DrawImage(PonyArkanoid.Properties.Resources.MenuGFX,0,0);
base.OnPaint(e);
}
}
}
I w reszcie klasa opis klasy classButton
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace PonyArkanoid
{
public class classButton : UserControl
{
public Bitmap ActiveState;
public Bitmap PassiveState;
public Bitmap ActualState;
public classForm ParentWindow;
public classButton(Bitmap ActiveState, Bitmap PassiveState, String Name, Point Location)
{
this.ActualState = PassiveState;
this.Bounds = new Rectangle(0, 0, ActualState.Width-10, ActualState.Height-5);
this.Location = Location;
this.Name = Name;
this.ParentWindow = ParentWindow;
this.MouseClick += new MouseEventHandler(OnMouseClick);
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
g.DrawImage(ActualState,0,0);
base.OnPaint(e);
}
public void OnMouseClick(object sender, MouseEventArgs e)
{
if
(((classButton)sender).Name == "CreditsButton") { Application.Exit(); }
else
{
if (((classButton)sender).Name == "StartButton") { istrukcja usuwająca panelMenu }
;}
}
}
}
Ustawiłem na początek CreditsButton na zamknięcie aplikacji, a chciałbym teraz ustawić StartButton na usunięcie panelu MenuPanel z formy MainWindow. Jak to zrobić w klasie classButton? Czy koniecznie muszę przekazywać referencję do formy i panelu przy tworzeniu klasy obiektów klasy classButton?