MİO GRAF  Milli İntellektual Oyun
       

   ƏSAS     XƏBƏRLƏR     SİZİN DƏRSLƏR     FOTO QALEREYA     VİDEO DƏRSLƏR     DƏRS GÖNDƏR     SUAL-CAVAB
DƏRSLİKLƏR
        AutoCad0003
        3D Studio Max0057
        Adobe After Effect0002
        Adobe Premier0002
        Adobe Photoshop0094
        Visual Studio0002
        Flash / Action Script0013
        Asp / Asp.net / C#0006
        PHP0002
        HTML / CSS0002
        JavaScript0001
        Visual Basic0004
        Delphi0002
        C / C++0006
        Microsoft Office0005
        Microsoft Windows0018
        Digər dərslər...0016

GİRİŞ
   İstifadəçi adı
   

   Şifrə
    
 
                                             
    Qeydiyyat ol
    Şifrəni unutdun?
 

YENİ LİNKLƏR
   tehsilimizinfo.blogspot.c...0573 
   www.azresce.com3281 
   www.evalin.az4355 
   www.novruzov.net4613 
   www.azgraf.net/mocuzeler5367 
   videoders.azersayt.com5370 
   www.mado.az6107 
   www.artdeco.az4651 
   www.cv-az.com7328 
   www.fakto.info5423 
 Ardı    


ELANLAR
Yaşıl: işçi axtarıram - Mavi: iş axtarıramBeynəlxalq holding koperasiyası. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramMünasib iş axtarıram... »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramQrafik dizayner »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramNeft şirkətində işləmək istiyirəm. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramAsp.Net, Delphi, HTML, Web Dizayner »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİşci teleb olunur »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİngilis dili hazırlığı. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİşçi tələb olunur. »»
 Ardı     



İstifadəçi: 0000732
Video dərs: 0000042
Şəkilli dərs: 0000193
Sual: 0000070
Şəkil: 0000305
Xəbər: 0000470
 C / C++     
Borlan C++ Builder proqramı vasitəsilə "Şəkil topla" oyunuun proqramının yazılması.

Tarix:        21.07.2011
Oxunub:   5459        
Müəllif:     
Rəsul Nəcəfov   



Paylaş

Çap et        Şərh yaz

 "Şəkil topla" oyunu proqramlayaq.

Bu dərsimizdə biz sizinlə BorlandC++Builder proqrammı vasitəsi ilə     “ Şəkili topla “ proqrammını hazırlayacağıq. Bu proqramm sadə olsada yeni öyrənənlər üçün çox maraqlı olacaq. BorlandC++Builder proqram- mı ilə artıq keçən dərsimizdə tanış olmuşuq. Bu barədə saytın C++ dərsliklər bölməsindən məlumat ala bilərsiniz.

C++Builder proqrammını işə salırıq. Menyu pəncərəsindən File / New Application seçirik. Yeni Form açılır. Standart komponentlər palitrasından MainMenu komponentini seçib İş Formuna daxil edin.

Şəkil 1. İş Formunda MainMenu komponentinin görünüşü.

MainMenu komponenti bildiyimiz Windows proqrammlarındakı baş menyu rolunu oynayır. Belə ki, biz onun vasitəsi ilə faylların açılmasını, yaddaşa verilməsini, çap edilməsini, faylların redaktəsini və s. idarə edirik. Bu menyuya daxil olan bəzi elementlər, məsələn bunlardır:

Fayl (File) , Redaktə (Edit), Məlumat (Help), Alətlər(Tools) və s. sadalamaq olar. Bu menyu başlıqlarınında hər birinin özünə xas menyu alt başlıqları var.

İş Formuna yerləşdirdiyimiz MainMenu komponentinin üzərindən siçanın sol düyməsi vasitəsi ilə iki dəfə tıqqıldadın. İş Formunda Form1->MainMenu1 başlığı altında yeni pəncərə açılacaq.

 

Obyektlər inspektorunun Caption bölməsində “ Yeni oyun “ yazıb Enter basın. Bunda sonra Form1->MainMenu1 pəncərəsinin göy rəngli menyu başlığında və İş Formunun menyu başlığında yazdığınız “Yeni oyun” kəlməsi peyda olacaq. Xatırladıram ki, baş menyu başlığının bir alt başlığınında olduğunu bildirmək üçün “Yeni oyun ” sözünün əvvəlinə & işarəsini artıra bilərsiniz.

Sonra isə “Yeni oyun” menyu başlığının sağındakı boş damanı aktivləşdirin və Caption bölməsində “Parametrlər” yazın və Enter basın.

Sonra isə “Parametrlər” menyu başlığnı bir dəfə tıqqıldadıb bir alt menyusunun Caption bölməsində “Damalara nömrə qoy” yazın və Enter basın.



Daha sonra isə, “Parametrlər” menyu başlığının sağ tərəfindəki boş damanı aktivləşdirib , Caption bölməsində  “Məlumat” yazıb Enter basın.

Artıq menyu tərtibatının sonuna gəldik. “Məlumat” menyu başlığının aşağısındakı alt menyu damasını aktivləşdirin və Caption bölməsində “Oyun haqqında” yazın və Enter basın.



İşlər tamamlandıqdan sonra Form1->MainMenu pəncərəsini adi qaydada x düyməsi ilə bağlayın.

Beləliklə proqrammın interfeys strukturu hazır oldu. İndi isə bu menyu elementlərinin komanda kodlarını yazaq.

 İşə başlamadan öncə hazırlayacağımız proqrammı öncədən yaddaşa verək. Menyu pəncərəsindən File / Save All seçirik. Yeni pəncərə açılır və biz burada proqrammımızı saxlamaq üçün yer seçib cpp faylımızı ToPicture.cpp, proyektimizi isə ToPic.bpr adlandırıb ok basırıq.

ToPicture.cpp faylını açın və aşağıda göstərilən qaydada redaktə edin:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h" // əllə yazın.”yeni oyun haqqında” məlumat üçün Form2-nin elan edilməsi (ətraflı aşağıda)
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#include "math.hpp" // Randomize və RandomRange-ye yol açmaq
// WxH sahəsinin ölçüləri
#define W 4 
#define H 4

 int wc, hc;  // damaların ölçüləri

 byte pole[H][W];  // oyun sahəsi
byte ex,ey;            // boş damaların koordinatları

 bool GameOver;

 AnsiString fn;     // bmp faylının adı (şəkil)
TSearchRec SearchRec;  // fayl axtarışının nəticəsi
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)

// istədiyiniz  3 ədəd bmp tipli şəkili proyektinizi saxladığınız qovluğa yerləşdirin və ardıcıl olaraq şəkilləri pic-1, pic-2, pic-3 adlandırın.

{
pic = new Graphics::TBitmap();
}
//---------------------------------------------------------------------------
// “Yeni oyun” menyu başlığını siçanın sol düymməsi ilə iki dəfə //tıqqıldadın. Aşağıdakı kod bloku açılacaq

 void __fastcall TForm1::N1Click(TObject *Sender)
{
NewGame();
}
//---------------------------------------------------------------------------
// Parametrlər/ “damalara nömrə qoy” menyu alt başlığını siçanın sol //düymməsi ilə iki dəfə tıqqıldadın. Aşağıdakı kod bloku açılacaq

void __fastcall TForm1::N6Click(TObject *Sender)
{
N6->Checked = ! N6->Checked;
ShowPole();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormPaint elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormPaint(TObject *Sender)
{
ShowPole();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormShow elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormShow(TObject *Sender)
{
NewGame();
}
//---------------------------------------------------------------------------
// İş formunun obyektlər inspektorunun events bölməsində    //FormMouseDown elementini siçanın sol düymməsi ilə iki dəfə //tıqqıldadın, aşağıdakı kod bloku açılacaq

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
int cx,cy;  // damaların koordinatları

    cx = X / wc;
cy = Y / hc;

    Move(cx,cy);   // seçilmiş damanı qonşu boş damaya yerləşdirir
}

bool Finish();  // fişlərin düzgün yerləşməsini yoxlayır

//---------------------------------------------------------------------------
// bu kod bloku əllə yazılır
// yeni oyun

 void __fastcall TForm1::NewGame()
{
static int Tag = 0;

     //  şəkil faylının yüklənməsi

if (( ParamCount() == 0 ) && (Tag == 0 )) Tag = 1;

    switch ( Tag )
{
case 0 :  // faylın adı – komanda sətrindən
fn = ParamStr(1);
Tag = 1;
break;

        case 1:  //  ardıcıl olaraq birinci bmp fayl götürülür

             { FindFirst("*.bmp",faAnyFile,SearchRec);
fn = SearchRec.Name;
Tag = 2;
}
break;

        case 2:  // növbəti bmp fayl götürülür
{
if ( FindNext(SearchRec) != 0)
FindFirst("*.bmp",faAnyFile,SearchRec);
fn = SearchRec.Name;
}
break;
}

   // şəkil yüklənir
try {
pic->LoadFromFile(fn);
}
catch (EFOpenError &e)
{
MessageDlg("Şəkil üçün düzgün fayl seçilməyib",
mtWarning, TMsgDlgButtons()<< mbOK<<mbHelp,0);
return;
}

    // damaların ölçüləri təyin edilir
wc = pic->Width / W;
hc = pic->Height / H;

    // formanın ölçüsü qurulur
ClientWidth = wc * W;
ClientHeight = hc * H;

    // fişlərin ilkin (düzgün) vəziyyəti
int k = 1;
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
pole[i][j] = k++;

    GameOver = false;
Mixer();  // fişlər qarışdırılır  
ShowPole();  // oyun sahəsi əks etdirilir
}

//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır

void __fastcall TForm1::Mixer()
{
int x1,y1;   // boş dama
int x2,y2;   // bunu boş damaya yerləşdirir
int d;         // boş dama nibətində istiqamət

    Randomize();

    x1 = 3; y1 = 3;    // stp massivinin təsviri
for ( int i = 0; i < 150; i++)  // yerdəyişmənin sayı
{
do {
x2 = x1;
y2 = y1;

            //  boş damaya yanaşan , fiş götürülür və boş damaya yerləşdirilir



switch ( d ) {
case 1: x2--; break;
case 2: x2++; break;
case 3: y2--; break;
case 4: y2++; break;
}
} while ((x2 < 0) || (x2 >= W) || (y2 < 0) || (y2 >= H));

       // burada boş damaya yerləşdiriləcək fiş təyin edilir

        pole[y1][x1]  =  pole[y2][x2];
pole[y2][x2]  =  16;
x1 = x2;
y1 = y2;

    };
// boş damaların koordinatlarını xatırlanır

ex =  x1;
ey =  y1;
}

//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır

void __fastcall TForm1::ShowPole()
{
TRect src, dst;  // şəkildən fraqment və onun sahəsi
// onun forma üzərində əks olunması
int sx,sy;

    for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
{
// şəkilin fraqment nömrəsini dəyişirik
// sol koordinatlara
//  mənbənin yuxarı bucağına  
sx = ((pole[i][j]-1) % W) * wc;
sy = ((pole[i][j]-1) / H) * hc;

            src = Bounds(sx,sy,wc,hc);
dst = Bounds(j*wc,i*hc,wc,hc);

            if ((  pole[i][j] != 16 ) || GameOver )
// şəkildən fraqment
Canvas->CopyRect(dst,pic->Canvas,src);
else
{
// boş dama
Canvas->Brush->Style = bsSolid;
Canvas->Brush->Color = clBtnFace;
Canvas->Rectangle(dst);
}
}
if ( N6->Checked )
{
// fişin nömrəsini daxil edir
Canvas->Brush->Style = bsClear;
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
Canvas->TextOutA(wc*j,hc*i, IntToStr(pole[i][j]));
}
}
//----------------------------------------------------------------------------
// bu kod bloku əllə yazılır
// siçanın oxu vasitəsi ilə fişi damadan , boş damaya aparır

void __fastcall TForm1::Move(int cx, int cy)
{
// fişi (cx,cy) –dən (ex,ey)-ə aparır
if  ( ( abs(cx - ex) == 1  &&  cy-ey == 0  ) ||
( abs(cy - ey) == 1  &&  cx-ex == 0  ) )
{

pole[ey][ex] = pole[cy][cx];
pole[cy][cx] = 16;
ex = cx;
ey = cy;

ShowPole();
if ( Finish () )
{
GameOver = true;
ShowPole();
int r = MessageDlg ("Oyun tamamlandı!""Bir daha (Başqa şəkil yüklənsinmi)?",
mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0);
if ( r == mrNo )
Form1->Close();
else
{
NewGame();
ShowPole();
}
}
}
}

// lazımi qaydada damaların (şəkil fraqmentlərinin) yerləşməsi yoxlanılır
bool Finish()
{
bool result;
int row, col;
int k = 1;

    result  =  true;  // fişlər lazımi qaydadadır
for (row = 0; row < H; row++)
{
for (col = 0; col < W; col++)
if ( pole[row][col] == k )
k++;
else {
result = false;
break;
}
if ( ! result ) break;
}
return (result);
};
//----------------------------------------------------------------------------
// Məlumat / “ Oyun haqqında “ menyu alt başlığını iki dəfə tıqqıldadın.Aşağıdakı kod bloku açılacaq
void __fastcall TForm1::N5Click(TObject *Sender)
{
Form2->ShowModal();     
}
//---------------------------------------------------------------------------

ToPicture.h faylının görünüşü :

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:       // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N6;
TMenuItem *N4;
TMenuItem *N5;
void __fastcall NewGame();
void __fastcall Mixer();
void __fastcall ShowPole();
void __fastcall Move(int x, int y);
void __fastcall N1Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall FormPaint(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
void __fastcall N5Click(TObject *Sender);
private:      // User declarations
Graphics::TBitmap *pic; // əllə yazın

public:                 // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

#endif

Əlavə olunmuş məlumat pəncərəsinin (Form2) cpp faylı
Menyu alətlər panelindən yeni Form seçin və proyektə əlavə edin.Sonra isə File/Save As edərək yaddaşa verin.Sonra isə bu form üzərinə bir ədəd BitBtn, bir ədəd Image və iki ədəd StaticText komponenti əlavə edin və istədiyiniz kimi redaktə edin.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
Əlavə olunmuş məlumat pəncərəsinin (Form 2) H faylı

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:       // IDE-managed Components
TBitBtn *BitBtn1;
TImage *Image1;
TStaticText *StaticText1;
TStaticText *StaticText2;
private:      // User declarations
public:                 // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

Hazır proqrammın görünüşü.Bu oyunda şəkil damaları qarışdırılır və əllə yığılır. Oyun bitdikdən sonra sənə yeni şəkilli oyun təklif olunur.

 



  Paylaş      



ahmad ahmadov
12.10.2013 19:45
salam kursa yazilmag isdiyirdim kimla alaqa saxlamag olr
ahmad ahmadov
13.07.2013 02:59
salam man c c++ kursuna yazilag istiyiram xayis eliyiram imkan varsa manimla alaqa saxla yerinizi oyranib yazilmag isdiyiram

   Ad, soyad:
    *
   Əlaqə:
    *
   (e-poçt, şəxsi sayt ya da telefon ola bilər)

   Şərh:
  

           
   • şərh yazmaq üçün saytımıza üzv olmalı və istifadəçi girişi etməlisiniz;
   • şərh yazarkən təhqir edici sözlərdən istifadə etməməli və mövzudan kənarlaşmamalısınız;
   • latın hərflərindən istifadə etməlisiniz.
ELAN GÖNDƏRDƏRS GÖNDƏRSAYT SİFARİŞİREKLAM SİFARİŞİBİZİM SƏHİFƏƏLAQƏ  
   Dizayn & proqramist: Emin Novruzov
   Şəxsi Portal  © 2010 Bütün hüquqları qorunur

   Standart 1024x768 px ekran ölçüsü, minimum 64 K/Bit internet sürəti ilə saytdan rahat istifadə edə bilərsiniz!