| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Dame im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Ihr kennt ja sicherlich alle das beliebte Brettspiel Dame. Die Aufgabe ist dieses Spiel zu programmieren. Indi schlug vor ...
![]() |
| | #1 (permalink) |
| Registriert seit: 02.10.01 ![]() Likes: 0 | Anzeige Ihr kennt ja sicherlich alle das beliebte Brettspiel Dame. Die Aufgabe ist dieses Spiel zu programmieren. Indi schlug vor ein Subprogramm zu schreiben, sodass zwei Subprogramme gegeneinander oder eines gegen einen menschlichen Spieler spielen können. Wenn ihr natürlich erstmal nur zwei menschliche Spieler umsetzen könnt ist das auch schonmal ein Anfang. Hier nochmal die Regeln: Gespielt wird auf einem Schachbrett (8x8 Felder). Jeder Spieler hat zwölf Spielsteine, die auf den schwarzen Feldern der ersten drei Reihen des Bretts platziert werden. Die Steine können sich vorwärts auf den schwarzen Feldern bewegen(genaugenommen diagonal vorwärts ).Wenn ein Stein vor einem Stein des Gegners steht, kann der des Gegners übersprungen und dgeschlagen werden, wenn das Feld hinter dem gegnerischen Stein frei ist, so können auch mehrere gegnerische Steine geschlagen werden. Wenn ein Stein die hinterste Reihe erreicht wird er zur Dame. Diese kann diagonal beliebig weit rücken und dabei gegnerische Steine überspringen, wenn das jeweilige Feld dahinter frei ist. Springen ist Pflicht, wenn ein Spieler es versäumt zu springen, hat der Gegner das Recht den jeweiligen Stein im nächsten Zug zu nehmen. also dann viel Spaß beim coden! ![]() mfg Nornagest |
| | |
| | #2 (permalink) |
| Registriert seit: 25.02.03 ![]() Likes: 0 | Hi @ll, hab ein kleines Probelem bei der Arrayzuweiseung!! Mein Compiler(Borland 6), meckert von "Zeile1[8]" bis "Zeile8[8]", das ein Ausdruckssyntax-Fehler vorliegt!?? Habe aber keine Ahnung, was falsch sein soll!! Code: #include "DameHeader.h"
void Dame::Brett(void)
{ //standart Brett erzeugen!
Zeile1[8]={1, 0, 1, 0, 1, 0, 1, 0, '\0'};//Ausdruckssyntax
Zeile2[8]={0, 1, 0, 1, 1, 1, 0, 1, '\0'};//Ausdruckssyntax
Zeile3[8]={1, 0, 1, 0, 1, 0, 1, 0, '\0'};//Ausdruckssyntax
Zeile4[8]={0, 1, 0, 1, 1, 1, 0, 1, '\0'};//Ausdruckssyntax
Zeile5[8]={1, 0, 1, 0, 1, 0, 1, 0, '\0'};//Ausdruckssyntax
Zeile6[8]={0, 1, 0, 1, 1, 1, 0, 1, '\0'};//Ausdruckssyntax
Zeile7[8]={1, 0, 1, 0, 1, 0, 1, 0, '\0'};//Ausdruckssyntax
Zeile8[8]={0, 1, 0, 1, 1, 1, 0, 1, '\0'};//Ausdruckssyntax
cout<<Zeile1<<endl;
cout<<Zeile2<<endl;
cout<<Zeile3<<endl;
cout<<Zeile4<<endl;
cout<<Zeile5<<endl;
cout<<Zeile6<<endl;
cout<<Zeile7<<endl;
cout<<Zeile8<<endl;
} mfg Shark85 |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 02.10.01 ![]() Likes: 0 | Ich nehm mal schon an, dass die Variabeln in DameHeader.h deklariert sind, oder nicht? *fg* |
| | |
| | #4 (permalink) |
| Registriert seit: 25.02.03 ![]() Likes: 0 | Ja, die sind in der DameHeader.h deklariert, es wurden aber vorher keine Werte zugewiesen!! Und wenn ich mit "class" arbeite geht das ja auch schlecht, in der Header!!! Code: #ifndef _DameHeader_
#define _DameHeader_
#include <iostream>
#include <conio>
using namespace std;
//--------------------------------------------------------------------
class Dame
{
private:
char Zeile1[8], Zeile2[8], Zeile3[8], Zeile4[8], Zeile5[8], Zeile6[8], Zeile7[8], Zeile8[8];
public:
void Dame::Brett(void);
void Dame::setBrett(void);
};
#endif PS: bin aus deiner Antwort nicht wirklich schlau geworden!! |
| | |
| | #5 (permalink) |
| Registriert seit: 07.10.01 ![]() Likes: 0 | Code: #include <iostream> #include <conio> |
| | |
| | #6 (permalink) |
| Themenstarter Registriert seit: 02.10.01 ![]() Likes: 0 | nein nookie: die Header der Standardbibliothek haben kein Endung, es gibt sie normalerweise auch mit Endung.h, aber dann sind die entsprechenden Deklarationen nicht im Namensraum std Das ist schon richtig so @shark: 1. Versuch mal die Zahlen in '' zu setzen, das sie ja vom Typ char sind, denn so weist du nicht die Zahlen sondern die ASCII Zeichen mit der entdprechenden Nummer zu. 2. Wenn du dem ganzen eine \0 anhängst, dann sollten die arrays die Länge 9 haben (irgendwo muss die \0 ja auch hin) Falls weitere Probleme auftreten melde dich wieder. mfg Nornagest |
| | |
| | #7 (permalink) |
| Registriert seit: 05.03.03 ![]() Likes: 0 | Auch wenn die Aufgabe ziemlich alt ist: hier mein Loesungsvorschlag in Java Code: import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.event.*;
class DAME extends JFrame
{
/* Die Feldtypen:
* 0 - weisses Feld
* 1 - schwarzes Feld, leer
* 2 - Feld belegt, Spieler 1
* 3 - Feld belegt, Spieler 2
* 4 - Dame, Spieler 1
* 5 - Dame, Spieler 2
*/
short[][] position = new short[8][8];
FELDER[][] feld = new FELDER[8][8];
boolean klick = false;
boolean klick_dame = false;
int horizontal;
int vertikal;
int horizontal_1 = 0;
int vertikal_1 = 0;
int spieler = 1;
int steine_spieler1 = 12;
int steine_spieler2 = 12;
ANZAHL anzahl_spieler1;
ANZAHL anzahl_spieler2;
JLabel lblSpieler;
JLabel lblSpieler1;
JLabel lblSpieler2;
DAME()
{
setTitle("Dame in Java Version 0.1");
setLocation(50,50);
setResizable(false);
setSize(600,520);
getContentPane().setLayout(null);
getContentPane().setBackground(new java.awt.Color(200,200,0));
setDefaultCloseOperation(EXIT_ON_CLOSE);
lblSpieler1 = new JLabel("Spieler 1");
lblSpieler2 = new JLabel("Spieler 2");
lblSpieler = new JLabel("Spieler 1: Welcher Stein?");
lblSpieler.setBounds(30,440,280,25);
lblSpieler1.setBounds(480,40,70,25);
lblSpieler2.setBounds(480,350,70,25);
getContentPane().add(lblSpieler);
getContentPane().add(lblSpieler1);
getContentPane().add(lblSpieler2);
startpositionen();
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
feld[i][j] = new FELDER(position[i][j]);
feld[i][j].setBounds(30+(i*50),30+(j*50),50,50);
getContentPane().add(feld[i][j]);
if(position[i][j] != 0)
{
feld[i][j].addMouseListener(new KLICK(i,j));
}
}
}
anzahl_spieler1 = new ANZAHL(1);
anzahl_spieler2 = new ANZAHL(2);
anzahl_spieler1.setBounds(480,60,50,50);
anzahl_spieler2.setBounds(480,370,50,50);
getContentPane().add(anzahl_spieler1);
getContentPane().add(anzahl_spieler2);
show();
}
/* Funktion zum Setzen der Ausgangspositionen
* 0 = weisses Feld (nicht nutzbar)
* 1 = schwarzes Feld ohne Stein
* 2 = schwarzes Feld belegt von Spieler 1
* 3 = schwarzes Feld belegt von Spieler 2 */
void startpositionen()
{
/* Setze alle Felder auf weiss */
for(int i = 0; i < 8; i++)
{
for(int j=0; j<8; j++)
{
position[i][j] = 0;
}
}
/* Setzen der schwarzen Felder */
for(int i=1; i<8; i=i+2)
{
position[i][3] = 1;
}
for(int i=0; i<8; i=i+2)
{
position[i][4] = 1;
}
/* Spieler 1 Positionieren */
for(int i=0; i<8;i=i+2)
{
for(int j=0; j<3;j=j+2)
{
position[i][j] = 2;
}
}
for(int i=1; i<8; i=i+2)
{
position[i][1] = 2;
}
/* Spieler 2 Positionieren */
for(int i=1; i<8; i=i+2)
{
for(int j=5; j<8; j=j+2)
{
position[i][j] = 3;
}
}
for(int i=0; i<8; i=i+2)
{
position[i][6] = 3;
}
}
public static void main(String[] args)
{
new DAME();
}
/* Das Spieler - Panel */
class ANZAHL extends JPanel
{
int typ;
ANZAHL(int u_typ)
{
setBackground(new java.awt.Color(200,200,0));
typ = u_typ;
}
public void paint(java.awt.Graphics g)
{
if(typ == 1)
{
g.setColor(new java.awt.Color(200,200,0));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,0));
Integer wrapper = new Integer(steine_spieler1);
g.drawString(wrapper.toString(),20,29);
}
if(typ == 2)
{
g.setColor(new java.awt.Color(200,200,0));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,0));
Integer wrapper = new Integer(steine_spieler2);
g.drawString(wrapper.toString(),20,29);
}
}
}
/* Das Felder - Panel */
class FELDER extends JPanel
{
int typ;
FELDER(int u_typ)
{
typ = u_typ;
}
public void paint(java.awt.Graphics g)
{
if(typ == 0)
{
g.setColor(new java.awt.Color(200,200,200));
g.fillRect(0,0,50,50);
}
if(typ == 1)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
}
if(typ == 2)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
}
if(typ == 3)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
}
if(typ == 4)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(255,255,255));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,255));
g.fillOval(15,15,20,20);
}
if(typ == 5)
{
g.setColor(new java.awt.Color(80,80,80));
g.fillRect(0,0,50,50);
g.setColor(new java.awt.Color(250,0,0));
g.fillOval(10,10,30,30);
g.setColor(new java.awt.Color(0,0,255));
g.fillOval(15,15,20,20);
}
}
}
/* Aktion */
class KLICK implements MouseListener
{
int horizontal_2;
int vertikal_2;
KLICK(int u_i, int u_j)
{
horizontal_2=u_i;
vertikal_2=u_j;
}
public void mousePressed(MouseEvent e)
{
horizontal = horizontal_2;
vertikal = vertikal_2;
if(klick_dame)
{
if(korrekt_dame())
{
feld[horizontal][vertikal].typ = position[horizontal_1][vertikal_1];
position[horizontal][vertikal] = position[horizontal_1][vertikal_1];
feld[horizontal][vertikal].repaint();
feld[horizontal_1][vertikal_1].typ = 1;
feld[horizontal_1][vertikal_1].repaint();
position[horizontal_1][vertikal_1] = 1;
klick_dame=false;
klick=false;
anzahl_spieler1.repaint();
anzahl_spieler2.repaint();
if(spieler == 1)
{
spieler = 2;
lblSpieler.setText("Spieler 2: Welcher Stein?");
}
else
{
spieler = 1;
lblSpieler.setText("Spieler 1: Welcher Stein?");
}
}
else
{
if(spieler == 1) lblSpieler.setText("Spieler 1: Ungueltig! Welcher Stein?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Ungueltig! Welcher Stein?");
klick=false;
klick_dame=false;
}
}
if(klick)
{
if((spieler == 1 && vertikal_1 < vertikal) || (spieler == 2 && vertikal_1 > vertikal))
{
if(korrekt())
{
feld[horizontal][vertikal].typ = position[horizontal_1][vertikal_1];
position[horizontal][vertikal] = position[horizontal_1][vertikal_1];
feld[horizontal][vertikal].repaint();
feld[horizontal_1][vertikal_1].typ = 1;
position[horizontal_1][vertikal_1] = 1;
feld[horizontal_1][vertikal_1].repaint();
klick = false;
anzahl_spieler1.repaint();
anzahl_spieler2.repaint();
if(spieler == 1 && vertikal == 7)
{
position[horizontal][vertikal] = 4;
feld[horizontal][vertikal].typ = 4;
feld[horizontal][vertikal].repaint();
}
if(spieler == 2 && vertikal == 0)
{
position[horizontal][vertikal] = 5;
feld[horizontal][vertikal].typ = 5;
feld[horizontal][vertikal].repaint();
}
horizontal=0;
vertikal = 0;
horizontal_1=0;
vertikal_1=0;
if(spieler == 1)
{
spieler = 2;
lblSpieler.setText("Spieler 2: Welcher Stein?");
}
else
{
spieler = 1;
lblSpieler.setText("Spieler 1: Welcher Stein?");
}
}
else
{
klick = false;
horizontal=0;
vertikal = 0;
horizontal_1=0;
vertikal_1=0;
if(spieler == 1) lblSpieler.setText("Spieler 1: Ungueltig! Welcher Stein?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Ungueltig! Welcher Stein?");
}
}
}
else
{
if((spieler ==1 && (position[horizontal][vertikal] == 2)) || (spieler == 2 && (position[horizontal][vertikal] == 3)))
{
horizontal_1 = horizontal;
vertikal_1 = vertikal;
klick = true;
if(spieler == 1) lblSpieler.setText("Spieler 1: Wohin?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Wohin?");
}
if((spieler == 1 && (position[horizontal][vertikal] == 4)) || (spieler == 2 && (position[horizontal][vertikal] == 5)))
{
horizontal_1 = horizontal;
vertikal_1 = vertikal;
if(spieler == 1) lblSpieler.setText("Spieler 1: Dame wohin?");
if(spieler == 2) lblSpieler.setText("Spieler 2: Dame wohin?");
klick_dame = true;
}
}
}
public void mouseClicked(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
/* Ueberprueft, ob in Zug korrekt war */
boolean korrekt()
{
if(position[horizontal][vertikal] != 1) return false;
if(spieler == 1)
{
if(vertikal - vertikal_1 == 2)
{
if(horizontal > horizontal_1)
{
if(position[horizontal_1+1][vertikal_1+1] == 3 || position[horizontal_1+1][vertikal_1+1] == 5)
{
position[horizontal_1+1][vertikal_1+1] = 1;
feld[horizontal_1+1][vertikal_1+1].typ = 1;
feld[horizontal_1+1][vertikal_1+1].repaint();
steine_spieler2--;
return true;
}
else
{
return false;
}
}
if(horizontal < horizontal_1)
{
if(position[horizontal_1-1][vertikal_1+1] == 3 || position[horizontal_1-1][vertikal_1+1] == 5)
{
position[horizontal_1-1][vertikal_1+1] = 1;
feld[horizontal_1-1][vertikal_1+1].typ = 1;
feld[horizontal_1-1][vertikal_1+1].repaint();
steine_spieler2--;
return true;
}
else
{
return false;
}
}
}
}
if(spieler == 2)
{
if(vertikal_1 - vertikal == 2)
{
if(horizontal > horizontal_1)
{
if(position[horizontal_1+1][vertikal_1-1] == 2 || position[horizontal_1+1][vertikal_1-1] == 4)
{
position[horizontal_1+1][vertikal_1-1] = 1;
feld[horizontal_1+1][vertikal_1-1].typ = 1;
feld[horizontal_1+1][vertikal_1-1].repaint();
steine_spieler1--;
return true;
}
else
{
return false;
}
}
if(horizontal < horizontal_1)
{
if(position[horizontal_1-1][vertikal_1-1] == 2 || position[horizontal_1-1][vertikal_1-1] == 4)
{
position[horizontal_1-1][vertikal_1-1] = 1;
feld[horizontal_1-1][vertikal_1-1].typ = 1;
feld[horizontal_1-1][vertikal_1-1].repaint();
steine_spieler1--;
return true;
}
else
{
return false;
}
}
}
}
return true;
}
boolean korrekt_dame()
{
int differenz1 = horizontal_1 - horizontal;;
int differenz2 = vertikal_1 - vertikal;
if(position[horizontal][vertikal] != 1) return false;
if((horizontal_1 - horizontal) < 0) differenz1 = -1*(horizontal_1-horizontal);
if((vertikal_1 - vertikal) < 0) differenz2 = -1*(vertikal_1 - vertikal);
if(differenz1 == differenz2)
{
if((horizontal < horizontal_1) && (vertikal < vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal+1][vertikal+1] == 3 || position[horizontal+1][vertikal+1] == 5)
{
feld[horizontal+1][vertikal+1].typ = 1;
feld[horizontal+1][vertikal+1].repaint();
position[horizontal+1][vertikal+1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal+1][vertikal+1] == 2 || position[horizontal+1][vertikal+1] == 4)
{
feld[horizontal+1][vertikal+1].typ = 1;
feld[horizontal+1][vertikal+1].repaint();
position[horizontal+1][vertikal+1] = 1;
steine_spieler1--;
}
}
}
if((horizontal > horizontal_1) && (vertikal < vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal-1][vertikal+1] == 3 || position[horizontal-1][vertikal+1] == 5)
{
feld[horizontal-1][vertikal+1].typ = 1;
feld[horizontal-1][vertikal+1].repaint();
position[horizontal-1][vertikal+1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal-1][vertikal+1] == 2 || position[horizontal-1][vertikal+1] == 4)
{
feld[horizontal-1][vertikal+1].typ = 1;
feld[horizontal-1][vertikal+1].repaint();
position[horizontal-1][vertikal+1] = 1;
steine_spieler1--;
}
}
}
if((horizontal < horizontal_1) && (vertikal > vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal+1][vertikal-1] == 3 || position[horizontal+1][vertikal-1] == 5)
{
feld[horizontal+1][vertikal-1].typ = 1;
feld[horizontal+1][vertikal-1].repaint();
position[horizontal+1][vertikal-1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal+1][vertikal-1] == 2 || position[horizontal+1][vertikal-1] == 4)
{
feld[horizontal+1][vertikal-1].typ = 1;
feld[horizontal+1][vertikal-1].repaint();
position[horizontal+1][vertikal-1] = 1;
steine_spieler1--;
}
}
}
if((horizontal > horizontal_1) && (vertikal > vertikal_1))
{
if(spieler == 1)
{
if(position[horizontal-1][vertikal-1] == 3 || position[horizontal-1][vertikal-1] == 5)
{
feld[horizontal-1][vertikal-1].typ = 1;
feld[horizontal-1][vertikal-1].repaint();
position[horizontal-1][vertikal-1] = 1;
steine_spieler2--;
}
}
if(spieler == 2)
{
if(position[horizontal-1][vertikal-1] == 2 || position[horizontal-1][vertikal-1] == 4)
{
feld[horizontal-1][vertikal-1].typ = 1;
feld[horizontal-1][vertikal-1].repaint();
position[horizontal-1][vertikal-1] = 1;
steine_spieler1--;
}
}
}
return true;
}
return false;
}
}
} |
| | |
| | #8 (permalink) |
| Registriert seit: 21.02.04 ![]() Likes: 0 | ein kleiner tip, Shark85: dieses konstrukt aus Code: #ifndef _DameHeader_ #define _DameHeader_ ... #endif Code: #pragma once EDIT: und vielleicht wäre es schlauer das brett nicht in 8 arrays zu unterteilen, sondern in ein 2-dimensionales array. macht eigenltich keinen unterschied, is aber irgendwie logischer mfg, pacman |
| | |
| | #9 (permalink) |
| Ich habs mir nie angetan die ganzen C++ classen und namespaces zu lernen! Ich benutz immernoch printf. Der C-Stil gefällt mit besser | |
| | |
| | #10 (permalink) |
| Registriert seit: 21.02.04 ![]() Likes: 0 | hehe, naja, jeder wie er's mag. aber 'ganzen C++ classen und namespaces' beschränken sich, wenn man nicht zu hoch hinaus will, auf eine hand voll ![]() mfg, pacman |
| | |
| | #11 (permalink) |
| ich hab mir jetzt mal ein buch ausgeliehen über C++ da hab ich erst bemerkt dass es so was wie cmap schon gibt! ![]() Ich hab mir immer ein TChain template selbst gemacht, was add, del, end, start ... functions hatte. | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Ich glaub die Dame hat Angst vor Mäusen | THE Sheep | Fun Section | 3 | 20.09.06 22:19 |