[XNA/C#] Schach erstellen

04/11/2015 13:57 sexualising#1
Hallo e*pvp!

Bin gerade dabei Schach in XNA zu programmieren.
Das Feld ist eingefügt & die Figuren auch.
Habe die Figuren als Rechtecke definiert und sie auf dem Feld platziert.
[Only registered and activated users can see links. Click Here To Register...]

Die einzelnen Felder wurden nicht definiert.
Habe die Rechtecke (Schachfiguren) einfach auf bestimmte Koordinaten
gesetzt.
Code:
spriteBatch.Begin();
spriteBatch.Draw(rook_b, new Rectangle(0, 0, 75, 75), null, Color.White);
spriteBatch.End();
Jetzt meine Frage:
Wie mache ich es, dass ich eine Schachfigur anwähle und sie dann auf ein
bestimmtes Feld setzte?

&
Wie kann ich die Schachregeln definieren?

Habe schon das ganze Internet durchforstet, aber bin nicht wirklich fündig geworden.
Hoffe jemand von euch kann mir helfen.

So weit bin ich:
[Only registered and activated users can see links. Click Here To Register...] ([Only registered and activated users can see links. Click Here To Register...])
04/11/2015 14:02 snow#2
#moved
04/11/2015 14:04 qqdev#3
Würde ganz intuitiv die einzelnen Schachbrettfelder auf ein 2-dimensionales Array abbilden. Wenn du das hast, dann kann man auch einfach Regeln definieren.
04/11/2015 14:07 sexualising#4
Kenne mich nicht gut mit XNA aus. Könntest du mir das vielleicht erklären bzw. einen Link
zu einem guten Tutorial geben? :)
04/11/2015 14:14 qqdev#5
Ehm, ich kenn da jetzt kein Link oder Tutorial zu. Einfach den Kopf anstrengen ;) Du weißt welche Maße das Spielbrett hat. Und dann teilst du die Breite oder Höhe durch 8, weil du in jeder Zeile/Spalte 8 Schachbrettfelder hast. Dann weißt du welche Maße ein einzelnes Schachbrettfeld hat (falls es dir nicht schon bekannt ist). So. Dann musst du in dem Array speichern, welche Figur sich dort befindet. Am besten erstellst du für alle Figuren ein allgemeines Enum. Dann füllst du das Array mit den Spielfiguren. Die Indizes bekommst du über einfache Mathematik heraus.
04/11/2015 14:22 snow#6
Es gibt keine Universalregel und kein Tutorial, in dem dir vermutlich jeder Schritt zum eigenen Schachspiel erklärt wird.

Teil dein Problem in beherrschbare Teilprobleme auf. Niemand wird für "Schach mit XNA" sofort eine Lösung parat haben, aber du kannst anfangen zu überlegen, welche Repräsentation die Figuren haben sollen, wie die Logik intern aufgebaut sein soll und wie das dann präsentiert werden soll, das ist nämlich alles voneinander trennbar.

[Only registered and activated users can see links. Click Here To Register...]

So habe ich das übrigens 2012 in Java gemacht, ganz ohne Tutorial oder sonst was.
04/11/2015 14:48 sexualising#7
@snow

Würdest du es auch mit 2D Arrays machen?
04/11/2015 15:09 snow#8
Wenn ich mich richtig erinnere, habe ich dafür ein GridLayout verwendet und dann ein Array mit 64 Elementen verwendet. Ich habe mal den Code dafür rausgesucht:

Code:
public class Mainframe {
	
	private 	  int   	k 		   = 0;	
	private final JFrame 	chessFrame = new JFrame("Chess 0.1");
	private final JPanel 	chessPanel = new JPanel(new BorderLayout());
	public  	  InfoPanel infoPanel;
		
	public  	  Data 		d 		   = new Data(this);
		
	public          NDPanel[] panels 	   = new NDPanel[64];

	public Mainframe(String player1, String player2) {
		
		chessPanel.setLayout(new GridLayout(8, 8));
		
		for (int i = 0; i < 64; i++) {
		
			if (i % 8 == 0) 			
				++k;
			
                        panels[i] = new NDPanel(d.getLaunchFigure(i), k % 2, (i < 16 ? 0 : i > 47 ? 1 : -1), this);
			chessPanel.add(panels[i]);
			panels[i].setIndex(i);

			++k;
		}
		
		infoPanel = new InfoPanel(player1, player2);
		infoPanel.setPreferredSize(new Dimension(240, 700));
		
		chessPanel.setSize(700, 700);
		
		chessFrame.setLayout(new BorderLayout());
		chessFrame.setSize((int)(940), (int)(chessPanel.getSize().height));
		chessFrame.setMinimumSize(new Dimension(740, 500));
		chessFrame.setResizable(false);
		chessFrame.add(infoPanel, BorderLayout.EAST);
		chessFrame.add(chessPanel);
		chessFrame.setLocationRelativeTo(null);
		chessFrame.setVisible(true);
		
	}
	
	public Mainframe() {
		
		new Mainframe("Player1", "Player2");
	}
	
}
Ja ja, bitte nicht hauen für den Code, das war 2012, 2 Wochen nachdem ich das erste Mal Java angefasst hatte. :<
04/11/2015 15:13 sexualising#9
Danke, mal sehen ob ich was damit anfange. ^^
04/24/2015 18:02 sexualising#10
Kann mir vielleicht noch jemand helfen?
04/25/2015 20:47 Shawak#11
Wo genau liegt denn dein Problem?
04/25/2015 21:17 sexualising#12
So weit bin ich:
[Only registered and activated users can see links. Click Here To Register...] ([Only registered and activated users can see links. Click Here To Register...])

Ja, ich weiß, das Programm ist schlecht geschrieben, aber das ist das
erste mal das ich etwas in C# programmiere.

Nun denn. Das Problem jetzt, ich weiß nicht was ich weiter tun soll.
(Hintergrundmusik einfügen hat es nicht viel besser gemacht^^)

Würde mich sehr über Hilfe freuen.
04/28/2015 16:59 Devsome#13
Pushen ist verboten, wir sind ja nicht gezwungen dir zu helfen :3
qqdev hat doch schon was gutes geschrieben, genauso wie das Beispiel von snow.
Du hast 8 Spalten/Zeilen, erstelle dir ein 2D-Array ( [Only registered and activated users can see links. Click Here To Register...] )

Danach bestimmst du für die jede Figur einen Wert der in dem Array gespeichert wird. Kannst auch den kompletten Namen darein schreiben.

Bei jedem Zug musst du natürlich deine Figur in dem Array auch ändern.
Weiß grad nicht ob das mit Array.sort gehen würde ( [Only registered and activated users can see links. Click Here To Register...] )

Nach dem Array change event eine Abfrage machen ob eine Figur geschlagen worden ist oder nicht.

Notfalls nimm dir mal ein Stück papier und male/schreibe es auf, mache ein Ablaufdiagramm oder Schreibtischtest

Ablaufdiagramm ? Wikipedia
Schreibtischtest ? Wikipedia