/**************HEADER-FILE****************
* data_base.h *
****************************************/
#define A 8
#define B 8
struct Position
{
int x;
int y;
int is_taken;
};
struct Dame
{
int x;
int y;
};
struct Brett
{
int a;
int b;
int damenCount;
int positionsCount;
struct Dame *damen;
struct Position positions[A][B];
struct Position next_Position;
};
/************** *****C-FILE****************
* 8_Damen_Problem_Main.c *
****************************************/
#include <stdio.h>
#include <stdlib.h>
#include "Data_Base.h"
struct Brett spielbrett;
void add_Position(struct Position position)
{
spielbrett.positions[position.x][position.y]=position;
spielbrett.positionsCount++;
}
void init_Spielbrett()
{
spielbrett.damen = (struct Dame *)malloc(sizeof(struct Dame));
spielbrett.a=A;
spielbrett.b=B;
spielbrett.damenCount=0;
int x=0, y=0;
for(;x < A;x++)
for(y=0;y < B;y++){
struct Position position;
position.x = x;
position.y = y;
position.is_taken = 0;
add_Position(position);
}
}
struct Dame init_Dame(int x, int y)
{
struct Dame dame;
dame.x = x;
dame.y = y;
return dame;
}
/*
return 0 not done
return 1 done
*/
int add_Dame(struct Dame dame){
if(spielbrett.positions[dame.x][dame.y].is_taken == 0)
{
spielbrett.damen[spielbrett.damenCount]=dame;
spielbrett.damenCount++;
spielbrett.damen = (struct Dame *)malloc((spielbrett.damenCount+1)*sizeof(struct Dame));
struct Position position = spielbrett.positions[dame.x][dame.y];
spielbrett.positions[dame.x][dame.y].is_taken = 1;
int count_X = sizeof(spielbrett.positions),
count_Y = sizeof(spielbrett.positions[position.x]),
i=0, j=0;
for(;i<count_Y;i++)
{
spielbrett.positions[position.x][i].is_taken = 1;
for(j=0;j<count_X;j++)
{
spielbrett.positions[j][position.y].is_taken = 1;
if(i - position.x == j - position.y)
spielbrett.positions[i][j].is_taken = 1;
}
}
return 1;
}
return 0;
}
/*
return 0 non-collision
return 1 collision
*/
int check_collision(struct Dame dame_1, struct Dame dame_2)
{
int x_1 = dame_1.x, y_1 = dame_1.y,
x_2 = dame_2.x, y_2 = dame_2.y;
if(
x_1 == x_2 || y_1 == y_2 ||
(x_1 - x_2) == (y_1 - y_2)
)
return 1;
return 0;
}
/*
return 0 non-collision
return 1 collision
*/
int check_all_collisions()
{
int i=0, j=0 ,count = spielbrett.damenCount;
for(;i < count;i++)
for(j=0;j < count; j++)
if(i != j && check_collision(spielbrett.damen[i], spielbrett.damen[j]))
return 1;
return 0;
}
int next_free_position(){
struct Position position;
int i=0, j=0,
count_X=sizeof(spielbrett.positions),
count_Y=sizeof(spielbrett.positions[0]);
for(;i<count_X;i++)
for(j=0;j<count_X;j++)
if(spielbrett.positions[i][j].is_taken == 0)
{
spielbrett.next_Position = spielbrett.positions[i][j];
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
init_Spielbrett();
while(next_free_position())
{
struct Dame dame;
dame.x = spielbrett.next_Position.x;
dame.y = spielbrett.next_Position.y;
add_Dame(dame);
}
printf("Anzahl Damen: %d", spielbrett.damenCount);
system("PAUSE");
return 0;
}