//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h" ,#include <iostream>
#include <conio.h>
#include <time.h>
//fonksiyonlar-----
int kontrol(void);
int bitisikontrol(void);
void ilk_deger(void);
void guncelle(void);
void atama(void);
//değişkenler----
int boyut,t2,t,sutun,satir,bitis=0,hareketyon,a,b,kivrim_sayisi;
int ***L;
int **kulln_bil;
int **bitirilen;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TBitmap *resim=new Graphics::TBitmap();
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
srand(time(NULL));
atama();
ilk_deger();
guncelle();
for(int i=1;i<boyut-1;i++){
resim->LoadFromFile("1-1.BMP");
DrawGrid1->Canvas->Draw(-5,i*40,resim);
}
for(int i=0;i<boyut-1;i++){
resim->LoadFromFile("1-1'.BMP");
DrawGrid1->Canvas->Draw(i*40,40*(boyut-1),resim);
}
for(int i=0;i<boyut-1;i++){
resim->LoadFromFile("1-1'.BMP");
DrawGrid1->Canvas->Draw(5+i*40,0,resim);
}
for(int i=0;i<boyut-2;i++){
resim->LoadFromFile("1-1.BMP");
DrawGrid1->Canvas->Draw(40*(boyut-1),5+i*40,resim);
}
bitis=bitisikontrol();
while(bitis<(boyut*boyut)){
satir=rand()%boyut;
sutun=rand()%boyut;
while(kulln_bil[satir][sutun]!=1){
satir=rand()%boyut;
sutun=rand()%boyut;
}
t2=0;
a=-1;
b=-1;
while(t2<kivrim_sayisi){
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
break;
}
hareketyon=rand()%4;
while(L[satir][sutun][hareketyon]!=1){
hareketyon=rand()%4;
}
//------------------------1----------------
if(hareketyon==1){
L[satir][sutun][1]=0;
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
}
if( kulln_bil[satir][sutun+1]!=1&&bitirilen[satir][sutun+1]!=1){
sutun=sutun+1;
kulln_bil[satir][sutun]=1;
L[satir][sutun][0]=0;
resim->LoadFromFile("1-1'.BMP");
if(b==3)
DrawGrid1->Canvas->Draw((sutun-1)*40,satir*40,resim);
else if(b==1)
DrawGrid1->Canvas->Draw((sutun-1)*40,satir*40,resim);
else if(b==2)
DrawGrid1->Canvas->Draw((sutun-1)*40,(satir)*40,resim);
else
DrawGrid1->Canvas->Draw((sutun-1)*40,(satir)*40,resim);
t2++;
b=hareketyon;
if(t==1)
a=hareketyon;
}
}
//--------------------------------3------
if(hareketyon==3){
L[satir][sutun][3]=0;
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
}
if( kulln_bil[satir-1][sutun]!=1&&bitirilen[satir-1][sutun]!=1){
satir=satir-1;
kulln_bil[satir][sutun]=1;
L[satir][sutun][2]=0;
resim->LoadFromFile("1-1.BMP");
if(b==1)
DrawGrid1->Canvas->Draw((sutun)*40,(satir)*40,resim);
else if(b==0)
DrawGrid1->Canvas->Draw(((sutun)*40),(satir)*40,resim);
else if(b==3)
DrawGrid1->Canvas->Draw((sutun)*40,(satir)*40,resim);
else
DrawGrid1->Canvas->Draw((sutun)*40,(satir)*40,resim);
t2++;
b=hareketyon;
if(t==1)
a=hareketyon;
}
}
//-----------------2-----------------
if(hareketyon==2){
L[satir][sutun][2]=0;
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
}
if( kulln_bil[satir+1][sutun]!=1&&bitirilen[satir+1][sutun]!=1){
satir=satir+1;
kulln_bil[satir][sutun]=1;
L[satir][sutun][3]=0;
resim->LoadFromFile("1-1.BMP");
if(b==2)
DrawGrid1->Canvas->Draw(sutun*40,(satir-1)*40,resim);
else if(b==1)
DrawGrid1->Canvas->Draw((sutun)*40,(satir-1)*40,resim);
else if(b==0){
if(a==2)
Canvas->Draw(((sutun)*40),(satir-1)*40,resim);
else
DrawGrid1->Canvas->Draw(((sutun)*40),(satir-1)*40,resim);
}
else
DrawGrid1->Canvas->Draw(sutun*40,(satir-1)*40,resim);
t2++;
b=hareketyon;
if(t==1)
a=hareketyon;
}
}
//---------------------0---------------
if(hareketyon==0){
L[satir][sutun][0]=0;
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
}
if( kulln_bil[satir][sutun-1]!=1&&bitirilen[satir][sutun-1]!=1){
sutun=sutun-1;
kulln_bil[satir][sutun]=1;
L[satir][sutun][1]=0;
resim->LoadFromFile("1-1'.BMP");
if(b==3)
DrawGrid1->Canvas->Draw(sutun*40,(satir)*40,resim);
else if(b==2){
if(a==0)
DrawGrid1->Canvas->Draw(sutun*40,(satir)*40,resim);
else
DrawGrid1->Canvas->Draw(sutun*40,(satir)*40,resim);
}
else if(b==0)
DrawGrid1->Canvas->Draw((sutun)*40,(satir)*40,resim);
else
DrawGrid1->Canvas->Draw(sutun*40,(satir)*40,resim);
t2++;
b=hareketyon;
if(t==1)
a=hareketyon;
}
}
//--------------end-------------------
if(kontrol()==0){
bitirilen[satir][sutun]=1;
kulln_bil[satir][sutun]=0;
}
}
t2=0;
a=-1;
b=-1;
guncelle();
bitis=bitisikontrol();
}
}
//---------------------------------------------------------------------------
void ilk_deger(void){
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++){
for(int k=0;k<4;k++){
L[i][j][k]=1;
}}}
for(int i=0;i<boyut;i++){
L[0][i][3]=0;
L[0][i][0]=0;
L[0][i][1]=0;
}
for(int i=0;i<boyut;i++){
L[i][0][0]=0;
L[i][0][3]=0;
L[i][0][2]=0;
}
for(int i=0;i<boyut;i++){
L[(boyut-1)][i][2]=0;
L[(boyut-1)][i][0]=0;
L[(boyut-1)][i][1]=0;
}
for(int i=0;i<boyut;i++){
L[i][(boyut-1)][1]=0;
L[i][(boyut-1)][3]=0;
L[i][(boyut-1)][2]=0;
}
for(int i=0;i<boyut;i++){ //duvar oluşturuldu....
kulln_bil[0][i]=1;
kulln_bil[(boyut-1)][i]=1;
kulln_bil[i][0]=1;
kulln_bil[i][(boyut-1)]=1;
}
kulln_bil[0][0]=0;
bitirilen[0][0]=1;
kulln_bil[(boyut-1)][0]=0;
bitirilen[(boyut-1)][0]=1;
kulln_bil[(boyut-1)][(boyut-1)]=0;
bitirilen[(boyut-1)][(boyut-1)]=1;
kulln_bil[0][(boyut-1)]=0;
bitirilen[0][(boyut-1)]=1;
//---------------------------------------end--
}
//--------------------------------------------------
void guncelle(void){
int temp=0;
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++){
for(int k=0;k<4;k++){
if(L[i][j][k]==0)
temp++;
}
if(temp==4){
bitirilen[i][j]=1;
kulln_bil[i][j]=0;
}
temp=0;
}}
}
//-------------------------------------------------------------
int bitisikontrol(void){int temp=0;
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++){
if(bitirilen[i][j]==1)
temp++;
} }
return temp;
}
//---------------------------------------------------------
int kontrol(void){ int temp=0;
for(int i=0;i<4;i++){
if(L[satir][sutun][i]==0)
temp++;
}
if(temp==4)
return 0;
else
return 1;
}
//----------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Repaint(); //ekranı temizler...
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++){
for(int k=0;k<4;k++){
L[i][j][k]=1;
}}}
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++)
kulln_bil[i][j]=0;
}
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++)
bitirilen[i][j]=0;
}
}
//---------------------------------------------------------------------------
void atama(void){
L=new int**[boyut];
for(int i=0;i<boyut;i++)
L[i]=new int*[boyut];
for(int i=0;i<boyut;i++){
for(int j=0;j<boyut;j++)
L[i][j]=new int[4];
}
kulln_bil=new int*[boyut];
for(int i=0;i<boyut;i++)
kulln_bil[i]=new int[boyut];
bitirilen=new int*[boyut];
for(int i=0;i<boyut;i++)
bitirilen[i]=new int[boyut];
}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
boyut=StrToInt(Edit1->Text);
DrawGrid1->RowCount=boyut-1;
DrawGrid1->ColCount=boyut-1;
DrawGrid1->Height=(boyut)*40;
DrawGrid1->Width=(boyut)*40;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
kivrim_sayisi=StrToInt(Edit2->Text);
}
//---------------------------------------------------------------------------