:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 

:: Лічильники ::

=

 

 

 

 

 

Текст програми



Повний текст програми "Сапер" приведений нижче: у лістингах 10.11 і 10.12 — заголовний файл і модуль головної форми; у лістингу 10.13 — модуль форми Про програму.

 Лістинг 10.11. Заголовний файл головної форми (saper_.h)

#ifndef saper_h fdefine saper_h
#include <Classes.hpp>
#include <Controls.hpp>
#include <Stdctrls.hpp>


#include <Extctrls.hpp>
 # include <Menus.hpp>
class Tforml : public Tform { published:
Tmainmenu *MainMenul; 
// команди головного меню Tmenuitem *N1;
// Нова гра Tmenuitem *N2; // команда "?"
// команди меню "?" Tmenuitem *N3;
// Довідка Tmenuitem *N4; // Про програму
void __fasteall 
Formmousedown(Tobject *Sender, Tmousebutton Button
Tshiftstate Shift, int X, int Y);
void __fastcall Formpaint(Tobject *Sender);
void _fastcall Formcreate(Tobject *Sender);
// вибір, команди в меню
void  fastcall Niclick(Tobject  *Sender);   
// Нова гра
void __fastcall N3click(Tobject  *Sender);   
// Довідка
void __fastoall N4click(Tobject  *Sender);   
// Про програму
private:
void  fastcall Showpole(int status); // відображає поле
// відображає вміст клітки
void __fastcall Kletka (int row, int col, int status);
void __fastcall Mina (int x, int у);  // малює міну
void __fastcall Flag( int x, int у);  // малює прапор
public:
__fastcall Tforml(Tcomponent* Owner); };
extern PACKAGE Tforml *Forml; tendif

Лістинг 10.12. Модуль головної форми (saperxcpp),

/*
Гра   "Сапер".  Демонструє роботу з графікою
використання рекурсії, доступ до файлу довідкової інформації.
*/
#include <vcl.h>
#include <stdlib.h> // для доступу до ГСЧ
#include <time.h>
#linclude <stdio.h>
#pragma hdrstop
#include "saper_.h"
#include "saper_2.cpp"
#pragma package(smart_init)
#pragma resource "*.dfm"
Tforml *Forml; // головне вікно
fastcall Tforml::tforml(Tcomponent* Owner)
: Tform(Owner) { }
fdefine MR 10 // к-ть клеток- по вертикалі fdefine МС 10
// к-ть кліток по горизонталі idefine MM 10 // к-ть мін
int Pole[Mr+2][Мс+2]; // мінне поле
// 0..8 — кількість мін в сусідніх клітках
// 9 — в клітці міна
// 100..109 — клітка відкрита
// 200..209 — в клітку поставлений прапор
int nmin;  // к-ть, знайдених мін
int nflag;  // к-ть поставлених прапорів
int status =0; //0 — початок гри; 1 — гра; 2 — результат
// зсув ігрового поля щодо лівого верхнього кута
// поверхні форми tdefine LEFT 0 
// по X Idefine ТОРИ 1  // по Y
ttdefine W   40 
// ширина клітки поля #define H   40
// висота клітки поля
void __fastcall Newgameo;
// нова гра — "розкидає" міни
void __fastcall Open(int row, int col);
/* відкриває поточну і сусідні
порожні клітки */
// натиснення кнопки миші на ігровому полі
void __fastcall Tforml: 
:Formmousedown(Tobject *Sender, Tmousebutton
Button
Tshiftstate Shift, int x, int у)
{

if ( status == 2) return;
if ( status == 0) status = 1;
x -= LEFT; у -= TOP;
if (x > 0 && у > 0) {
// перетворимо координати миші
// у індекси клітки поля
int row = y/h + 1;
int col = x/w + 1;
if (Button = mbleft) {
if ( Pole[row][col] == 9) {
 Pole[row][col]+=100; status =2; 
// гра закінчена Showpole(status); }
 else if  ( Pole[row][col]< 9) {
Open(row,col); Showpole(status); } }
else if (Button == mbright) {
nflag++; if ( Pole[row][col] = 9)
nmin++;
 Pole[row][col]+= 200; 
// поставили прапор if (nmin == NM && nflag == MM) {
status = 2; 
// гра закінчена Showpole(status);
}
else Kletka(row, col, status);
} } }
// Функція обробки події Oncreate зазвичай використовується
// для ініціалізації глобальних змінних
void__fastcall Tforml::formcreate(Tobject *Sender)
{
// У тих, що не відображаються ел-ти масиву, які відповідають
// кліткам по межі ігрового поля, запишемо число -3.
// Це значення використовується функцією Open для завершення
// рекурсивного процесу відкриття сусідніх порожніх кліток.
for ( int row=0; row <= Mr+1; row++)
for ( int col=0; col <= Mc+1; col++)
Pole[row][col] = -3;
Newgameo; // "розкидати" міни 
Forml->clientwidth = W*mc;
Forml->clientheight = H*mr+top+1; }
// Виведення поля як результат обробки події Paint
// дозволяє проводити будь-які маніпуляції з формою
// під час роботи програми
void  fastcall Tforml::formpaint(Tobject *Sender)
{
Showpoletstatus); }
// Показує поле
void  fastcall Tforml::showpole( int status)
{
for ( int row = 1;
row <= MR; row++)
for ( int col = 1;
col <= МС; col++)
Kletka(row, col, status); )
// малює на екрані клітку
void  fastcall Tforml::kletka(int row, int col, int status)
{
int x = LEFT + (col-d* W;
int у = TOP + (row-1)* H;
if (status ==0) // початок гри {
// клітка — сірий квадрат
Canvas->brush->color = clltgray;
Canvas->rectangle(x-l,y-l,x+w,y+h);
return; }
// у час (status = 1) і в кінці (status = 2) ігор
 if ( Pole[row][col]< 100)
{
// клітка не відкрита
Canvas->brush->color = clltgray; 
// не відкриті — сірі
Canvas->rectangle(x-l,y-l,x+w,y+h);
if (status == 2 SS Pole[row][col] = 9}
Mina( x, у); // гра закінчена, показати міну return; }
// клітка відкрита
Canvas->brush->color = clwhite;    
// відкриті - білі Canvas->rectangle(x-1,y-1,x+w,у+н);
if  ( Pole[row][col] == 100)
// клітка відкрита, але вона порожня return; .
if ( Pole[row][col] >= 101 && Pole[row][col] <= 108) {
Canvas->font->size = 14;
Canvas->font->color = clblue;
 Canvas->textouta(x+3,y+2,inttostr(Pole[row][col]-100));
return; }
if ( Pole[row][col] >=  200) Flag(x, у);
if (Pole[row][col] == 109) // на цій міні підірвалися! {
Canvas->brush->color = clred;
Canvas->rectangle(x,y,x+w,y+h); }
 if (( Pole[row][col]% 10 == 9)  &&  (status == 2))
Mina( x, у); }
// рекурсивна функція відкриває поточну і всі сусідні
// клітки, в яких немає мін
void  fastcall Open(int row, int col)
{
if (Pole[row][col] = 0) {
Pole[row][col] = 100;
// відкриваємо клітки зліва, справа, знизу і зверху
Open(row,col-l);
Open(row-l,col);
Open(row,col+1);
Open(row+1,col);
// відкриваємо ті, що примикають діагонально
 Open(row-l,col-l); Open(row-l,col+l);
Open(row+1,col-1); Open(row+1,col+1);
}
else
// -3 — це межа ігрового поля
  if (Pole[row][col]< 100 && Pole[row][col]!= -3}
 Pole[row][col]+= 100; }
// нова гра — генерує нове поле
void __?astcall Newgame()
{
// Очистимо ел-ти масиву, відповідні що відображається
// кліткам, а в тих, що не відображаються (по межі ігрового поля)
// запишемо число -3. Унікальне значення кліток межі
// використовується функцією Open для завершення рекурсивного
// процесу відкриття сусідніх порожніх кліток.
int row,col;
for (row=0; row <= Mr+1; row++)
for (col=0; col <= Mc+1; col++)
Pole[row][col] = -3; for (row=l;
row <= MR; row++)
for (col=l; col <= МС; col++) Pole[row][col] = 0;
// розставимо міни
time_t t;   // використовується ГСЧ
srand((unsigned) time(&t)); 
// ініціалізація ГСЧ
int n = 0; // к-ть мін
do
{
row = rando % MR +1;
col = rand() % МС +1;
 if ( Pole[row][col]!= 9)
{
Pole[row][col] = 9;
n++;
} } while ( n < 10);
// обчислення кол-ва мін в сусідніх клітках
int до;
for ( row = 1; row <= MR; row++)
for ( col = 1; col <= МС; 
 col++) if ( Pole[row][col]!= 9) {
до =0;
if ( Pole[row-l][col-1] == 9} k++;
if ( Pole[row-1][col]  == 9) k++;
if ( Pole[row-1][col+1] == 9) k++;
if ( Pole[row][col-1]  == 9) k++;
if ( Pole[row][col+1]   == 9) k++;
if ( Pole[row+1][col-1] == 9) k++;
if ( Pole[row+1][col]  == 9) k++;
if ( Pole[row+1][col+1] == 9) k++;
Pole[row][col] = до; }
status =0; // початок гри nmin =0;
 // немає виявлених мін nflag =0; // немає прапорів }
// малює міну
void __fastcall Tforml::mina(int x, int у)
{
Canvas->brush->color = clgreen;
Canvas->pen->color = clblack;
 Canvas->rectangle(x+16,y+26,x+24,y+30);
// корпус
 Canvas->rectangle(x+8,y+30,x+32,y+34);
Canvas->pie(x+6,y+28,x+34,y+44,x+34,y+36,x+6,y+36);
// смуга на корпусі
Canvas->moveto(x+12,y+32);
Canvas->lineto(x+28,y+32);
// підстава
Canvas->moveto(x+8,y+36); 
Canvas->lineto(x+32,y+36);
// вертикальний "вус"
Canvas->moveto(x+20,y+22);
Canvas->lineto(x+20,y+26);
// бічні "вуса"
Canvas->moveto(x+8, y+30);
Canvas-xlineto(x+6,y+28);
Canvas->moveto(x+32,y+30);
Canvas->lineto(x+34,y+28); }
// малює прапор
void __fastoall Tforml::flag( int x, int у)
{
Tpoint p[4]; // координати прапорця і нижньої точки держака
// точки прапорця
р[0].х=х+4;  р[0].у=у+4;
р[1].х=х+30;  р[1].у=у+12;
р[2].х=х+4;  р[2].у=у+20;
// встановимо колір кисті і олівця
Canvas->brush->color = clred;
Canvas->pen->color = clred; 
// щоб контур прапорця бив червоний
Canvas->polygon(p, 2);  // прапорець
// держак
Canvas->pen->color = clblack;
Canvas->moveto(p[0].x, p[0] .у);
 Canvas->lineto(x+4,y+36);
Tpoint m[5];    // буква М
m[0].x=x+8; m[0].y=y+14;
 m[l].x=x+8; m[l].y=y+8;
m[2].x=x+10; m[2].y=y+10;
m[3].x=x+12; m[3].y=y+8;
m[4].x=x+12; m[4].y=y+14;
Canvas->pen->color = clwhite;
Canvas->polyline(m,4);
Canvas->pen->color = clblack; }
// команда головного меню Нова гра

void__fastcall Tforml::nlcllck(Tobject *Sender)
{
Newgame();
Showpole(status); }
// вибір в меню "?" команди Про програму
void__fastcall Tforml::n4click(Tobject *Sender)
{
Aboutform-хгор = Forml->top + Forml->height/2
- Aboutform->height/2;
Aboutform->left = Forml->left + Forml->width/2
- Aboutform->width/2; Aboutform->showmodal(); }
// вибір в меню "?" команди Довідка
void __fastcall Tforml::n3click(Tobject *Sender)
{
Winhelp(Forml->handle,"saper.hip",HELP_CONTEXT,1); }

Лістинг 10.13. Модуль форми Про програму (saper2_.cpp)

#include <vcl.h>
#pragma hdrstop
#include "saper_2.h"
#pragma package(smart_init)
#pragma resource "*.dfm" Taboutform *AboutForm;
__fastcall Taboutform::taboutform(Tcomponent* Owner)
: Tform(Owner) { }
// Вибір URL-адреса
void __fastcall Taboutform: :Label5Click(Tobject *Sender)
{
 /*  У функцію Shellexvte треба передати покажчик
null terminated рядок (char*). Властивість Caption — це Ansistring.
Перетворення Ansi-строки в покажчик 
 на nt-строку виконує метод
c_str()
//, відкрити файл, ім'я якого знаходиться в полі
Labels Shellexecute
(Aboutform->handle,"open",label5->caption.c_str(),
Null,null,sw_restore); }
// клацання на кнопці QK
void __fastcall Taboutform::buttonlclick(Tobject *Sender)
{
Modalresult = mrok; }

 


nnprostitutki.net/ankets/shemale трансы.
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009