001
12.12.2002, 21:04 Uhr
Bruder Leif
dances with systems (Operator)
|
Moin!
Jepp, die gibt es. Das .NET-Framework enthält unter dem Namespace System.Windows.Forms einen Haufen Komponenten, die praktisch die gesamte Funktionalität der Windows-Oberfläche kapseln (und noch ein paar Extras bieten). Das Mono-Projekt für Linux arbeitet gerade daran, diese Komponenten unter Linux verfügbar zu machen. Einen direkten Vergleich zu den Swing-Klassen kann man hier aber nicht ziehen, da Swing die Steuerelemente selbst zeichnet, während bei .NET das Betriebssystem dafür verantwortlich ist. Die Komponenten haben also zwar die selbe Funktionalität, passen sich aber im Aussehen an das jeweilige Betriebssystem an und werden schneller gezeichnet.
Hier mal ein einfaches Beispiel mit einem Fenster, einem Menü und ein paar Buttons:
C++: |
using System; using System.Drawing; using System.Windows.Forms;
public class Form1: Form {
//##############################################################################
// Sichtbare Kontrollelemente private MainMenu mainMenu1; private MenuItem menuItem1; private MenuItem menuItem2; private MenuItem menuItem3; private Button[] baButtons = new Button[9];
private int[,] ciWinningConsts = { {1, 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0, 1}, {1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1}, {1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 1, 0, 0}};
private Random rnd = new Random();
//##############################################################################
public Form1() { SuspendLayout();
// Menü zusammenstellen mainMenu1 = new MainMenu(); menuItem1 = new MenuItem(); menuItem2 = new MenuItem(); menuItem3 = new MenuItem(); mainMenu1.MenuItems.AddRange(new MenuItem[] {menuItem1}); menuItem1.MenuItems.AddRange(new MenuItem[] {menuItem2, menuItem3}); menuItem2.Shortcut = Shortcut.F2; menuItem1.Text = "Game"; menuItem2.Text = "New"; menuItem3.Text = "Close"; menuItem2.Click += new EventHandler(MenuNeuClick); menuItem3.Click += new EventHandler(MenuCloseClick);
// Buttons erstellen und verteilen Font aFont = new Font("Microsoft Sans Serif", 24F, FontStyle.Bold); Size aSize = new Size(50, 50); EventHandler aHandler = new EventHandler(ButtonClick); for(int i=0; i<9; i++) { baButtons[ i ] = new Button(); baButtons[ i ].Size = aSize; baButtons[ i ].TabIndex = i; baButtons[ i ].Font = aFont; baButtons[ i ].Click += aHandler; baButtons[ i ].Location = new Point(50*(i%3), 50*(i/3)); } Controls.AddRange(baButtons);
ClientSize = new Size(150, 150); FormBorderStyle = FormBorderStyle.FixedSingle; MaximizeBox = false; Menu = mainMenu1; Text = "TicTacToe";
ResumeLayout(false); SpielNeu(); }
//##############################################################################
static void Main() { Application.Run(new Form1()); }
//##############################################################################
private void SpielNeu() { foreach(Button aBtn in baButtons) aBtn.Text = ""; }
//##############################################################################
private bool Won(string sPlayer) { for(int i=0, iReihe; i<8; i++) { for(int j=iReihe=0; j<9; j++) if((ciWinningConsts[i,j] == 1) && (baButtons[j].Text == sPlayer)) iReihe++; if(iReihe == 3) return true; } return false; }
//##############################################################################
private void MenuCloseClick(object sender, EventArgs e) { Close(); }
//##############################################################################
private void MenuNeuClick(object sender, EventArgs e) { SpielNeu(); }
//##############################################################################
private void ButtonClick(object sender, EventArgs e) { if(((Button)sender).Text != "") return; // Spieler: Zug ((Button)sender).Text = "X";
if(Won("X")) { MessageBox.Show("Player wins!"); SpielNeu(); return; } // Alle Felder belegt? for(int i=0; baButtons[ i ].Text != ""; i++) if(i==8) { MessageBox.Show("Stalemate"); SpielNeu(); return; } // Computer am Zug: // Wenn der Computer gewinnen kann, los! // Wenn der Spieler gewinnen kann, verhindern! foreach(Button aBtn in baButtons) { if(aBtn.Text == "") { aBtn.Text = "O"; if(Won("O")) { MessageBox.Show("Computer wins!"); SpielNeu(); return; } aBtn.Text = ""; } } foreach(Button aBtn in baButtons) { if(aBtn.Text == "") { aBtn.Text = "X"; if(Won("X")) { aBtn.Text = "O"; return; } aBtn.Text = ""; } }
// Wenn das Mittelfeld noch frei ist, belegen! // Ansonsten zufällig einen Punkt raussuchen int iPos = 4; while(baButtons[iPos].Text != "") iPos = rnd.Next(9); baButtons[iPos].Text = "O"; }
//##############################################################################
}
|
-- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. Dieser Post wurde am 12.12.2002 um 21:08 Uhr von Bruder Leif editiert. |