7076

Методы проектирования программ на языках высокого уровня С++

Лабораторная работа

Информатика, кибернетика и программирование

1. Цель работы Знакомство с методами проектирования программ на языках высокого уровня С++. 2. Задание на работу В программе необходимо реализовать: пункт главного меню Справка, состоящий из двух подпунктов Информация об авторе и Информация о п...

Русский

2013-01-14

115.5 KB

2 чел.

1. Цель работы

Знакомство с методами проектирования программ на языках высокого уровня С++.

2. Задание на работу

В программе необходимо реализовать:

пункт главного меню «Справка», состоящий из двух подпунктов «Информация об авторе» и «Информация о программе»;

реализацию режимов «Новая игра», «Новичок» и режим, заданный в варианте задания, на основе главного меню.

Реализовать программу игры «Сапер» для режима «Эксперт» (20  10 клеток (36 мин)).

Необходимо запоминать время сапера (игрока), быстрее всех разминировавшего игровое поле, в текстовом файле конфигурации игры.

3. Листинг программы:

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int ch=0,times=0;

int   pole[30][30],flags[30][30],Min=2,str=30/*строки*/,

                                                      stol=30;/*столбцы*/

int timelimit=1*60; //(1 минута)

int maxMin=2;

bool NoWinFlag=0

bool k=false,gen=false;

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

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

newgame (30,30);

stol=3;

str=3;

maxMin=2;      

timelimit = 10*60;

newgame(3,3);

            };

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

void savefile()

{

if (!NoWinFlag)

       {

       ifstream infile("best.txt");  

       if(infile){ char s[80];

               infile.getline(s,80);

               infile.close();

               if (times<StrToInt(s))

                  ;}

               {

               ofstream outfile("best.txt");  

               outfile << times <<'\n';

               outfile.close();

               }

       }

}

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

void TForm1::generation(int a,int b)

{

int x,y,t;

//      y-строки  x-столбцы

for(int y=0;y<str;y++)

for(int x=0;x<stol;x++){pole[x][y]=0;flags[x][y]=0;}

for(int s=0;s<maxMin;s++)

     {

       t=1;

       while(t)

       {      

       Randomize();

       x=random(stol);

       y=random(str);

if((pole[x][y]==9)||((a==y)&&(b==x)))

{t=1;}

else

{t=0;};

       }

       pole[x][y]=9;    

int z=0;for(int xx=0;xx<str;xx++)for(int yy=0;yy<stol;yy++)

{if (pole[xx][yy]==9) z++;};z=z/9;

      }

for(int y=0;y<str;y++)

for(int x=0;x<stol;x++)

if(pole[x][y]!=9)

{

if(pole[x-1][y]==9&&x>0)pole[x][y]++;

if(pole[x+1][y]==9&&x<stol-1)pole[x][y]++;

if(pole[x][y+1]==9&&y<str-1)pole[x][y]++;

if(pole[x][y-1]==9&&y>0)pole[x][y]++;

if(pole[x+1][y+1]==9&&x<stol-1&&y<str-1)pole[x][y]++;

if(pole[x-1][y-1]==9&&x>0&&y>0)pole[x][y]++;

if(pole[x+1][y-1]==9&&x<stol-1&&y>0)pole[x][y]++;

if(pole[x-1][y+1]==9&&x>0&&y<str-1)pole[x][y]++;

}

}

void TForm1::flag(int x,int y,int n,int z)

{

Image1->Canvas->Brush->Color=clWhite;

Image1->Canvas->Pen->Color=clWhite;

Image1->Canvas->Rectangle(x*16+1,y*16+1,x*16+17,y*16+17);

if(z==0)

{

flags[x][y]=2;

switch(n)

{

case 0:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,0,1);

break;

case 1:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,1,1);

break;

case 2:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,2,1);

break;

case 3:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,3,1);

break;

case 4:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,4,1);

break;

case 5:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,5,1);

break;

case 6:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,6,1);

break;

case 7:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,7,1);

break;

case 8:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,8,1);

break;

case 9:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,9,1);

break;

case 10:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,0,1);

break;

case 11:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,12,1);

break;

case 12:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,13,1);

break;

case 13:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,10,1);

break;

case 14:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,11,1);

break;

}

}

if(z==1)

{

switch (n){

case 10:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,10,1);

flags[x][y]=0;

break;

case 11:

ImageList1->Draw(Image1->Canvas,x*16+1,y*16+1,11,1);

flags[x][y]=1;

break;

}

}

}

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

void TForm1::newgame(int stol_1, int str_1)

{

Image1->Width=(stol_1*16);

Image1->Height=(str_1*16);

Form1->Width=(stol_1*16)+150;

Form1->Height=(str_1*16)+150;

gen=true;

k=true;

times=0;

Timer1->Enabled=false;

Label2->Caption="Время:0";

Image1->Canvas->Brush->Color=clWhite;

Image1->Canvas->Pen->Color=clWhite;

Image1->Canvas->Rectangle(0,0,(stol_1*16)+1,(str_1*16)+1);

for(int x=0;x<stol_1;x++)

for(int y=0;y<str_1;y++)

{

flag(x,y,10,1);

flags[x][y]=0;pole[x][y]=0;

}

Min=maxMin;

Label1->Caption=Min;

}

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

void __fastcall TForm1::N2Click(TObject *Sender)

{

newgame(stol,str);

}

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

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

times=times+1;

Label2->Caption="Время:"+IntToStr(times)+" (из"+IntToStr(timelimit)+")";

if (times==timelimit)

{MessageBox(NULL, "Информация","Время вышло!", MB_OK | MB_ICONEXCLAMATION);

NoWinFlag=1;};    

}

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

void TForm1::rec(int x,int y)

{

if(pole[x][y]==0)

{

pole[x][y]=10;

if(flags[x-1][y]==0)flag(x-1,y,pole[x-1][y],0);

if(pole[x-1][y]==0&&x>0)rec(x-1,y);

if(flags[x+1][y]==0)flag(x+1,y,pole[x+1][y],0);

if(pole[x+1][y]==0&&x<stol-1)rec(x+1,y);

if(flags[x][y+1]==0)flag(x,y+1,pole[x][y+1],0);

if(pole[x][y+1]==0&&y<str-1)rec(x,y+1);

if(flags[x][y-1]==0)flag(x,y-1,pole[x][y-1],0);

if(pole[x][y-1]==0&&y>0)rec(x,y-1);

if(flags[x+1][y+1]==0)flag(x+1,y+1,pole[x+1][y+1],0);

if(pole[x+1][y+1]==0&&x<stol-1&&y<str-1)rec(x+1,y+1);

if(flags[x-1][y-1]==0)flag(x-1,y-1,pole[x-1][y-1],0);

if(pole[x-1][y-1]==0&&x>0&&y>0)rec(x-1,y-1);

if(flags[x+1][y-1]==0)flag(x+1,y-1,pole[x+1][y-1],0);

if(pole[x+1][y-1]==0&&x<stol-1&&y>0)rec(x+1,y-1);

if(flags[x-1][y+1]==0)flag(x-1,y+1,pole[x-1][y+1],0);

if(pole[x-1][y+1]==0&&x>0&&y<str-1)rec(x-1,y+1);

}

}

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

void __fastcall TForm1::Image1MouseDown(TObject *Sender,

     TMouseButton Button, TShiftState Shift, int X, int Y)

{

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

if(k==true)

{

int x=floor(X/16),y=Y/16;

//X, Y - координаты точки нажатия мыши относительно угла формы

if(gen==true){generation(x,y);gen=false;}

Timer1->Enabled=true;

//запускается таймер.

if(Button==1&&flags[x][y]==0&&Min>0)

{

flag(x,y,11,1);

Min=Min-1;

Label1->Caption=Min;

if(Min==0)

{

int ot=0;

for(int y=0;y<str;y++)for(int x=0;x<stol;x++)

if(flags[x][y]==2)ot++;

if(ot==str*stol-maxMin)

{

Timer1->Enabled=false;

MessageBox(NULL, "Вы выиграли!","Поздравляю", MB_OK | MB_ICONEXCLAMATION);

savefile();

k=false;

}

}

 return;

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

}

if(Button==1&&flags[x][y]==1)

{

flag(x,y,10,1);

Min=Min+1;

}

Label1->Caption=Min;

if(Button==0&&flags[x][y]==0)

{

if(pole[x][y]==9)

{

k=false;

Timer1->Enabled=false;

for(int a=0;a<str;a++)

for(int b=0;b<stol;b++)

{

  if(pole[b][a]==9&&flags[b][a]!=1)

       {flag(b,a,pole[b][a],0);

       }

        else {

               if(pole[b][a]!=9&&flags[b][a]==1)

                       {flag(b,a,12,0); // если нет мины (9) и был поставлен флажок (flags=1)

                       }

               else

               {flag(b,a,pole[b][a],0);};

              }

}

flag(x,y,11,Button);

MessageBox(NULL, "Вы взорвались!","Game Over", MB_OK | MB_ICONEXCLAMATION);

return;

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

}

if(pole[x][y]==0)rec(x,y);

flag(x,y,pole[x][y],Button);

}

if(Min==0)

{

int ot=0;

for(int y=0;y<str;y++)for(int x=0;x<stol;x++)

if(flags[x][y]==2)ot++;

if(ot==str*stol-maxMin)

{

Timer1->Enabled=false;

MessageBox(NULL, "Вы выиграли!","Поздравляю", MB_OK | MB_ICONEXCLAMATION);

savefile();

k=false;

}

}

}

}

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

void __fastcall TForm1::N3Click(TObject *Sender)

{

Form1->Close();

}

void __fastcall TForm1::N4Click(TObject *Sender)

{

stol=20;

str=10;

maxMin=10;// у эксперта 10 мин

timelimit = 36*60; //предел времени у эксперта 36 минут

newgame (20,10);

}

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

void __fastcall TForm1::N5Click(TObject *Sender)

{

stol=3;

str=3;

maxMin=2; // у новичка 2 мины

timelimit = 10*60; //предел времени у новичка 10 минут

newgame(3,3);

}

void __fastcall TForm1::N7Click(TObject *Sender)

{

Form2->ShowModal();

}

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

void __fastcall TForm1::N8Click(TObject *Sender)

{

Form3->ShowModal();

}

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

Отладка прошла успешно.

  1.  Результаты функционирования разработанного ПО.

Рисунок 1.   Рисунок 2.

Начало новой игры в Вид экранной формы в

режиме «Новичок»  режиме «Новичок»

 

Рисунок 3.   Рисунок 4.

Вид экранной формы Сообщение о выигрыше

при выигрыше

 

Рисунок 5.   Рисунок 6.

Вид экранной формы Сообщение о проигрыше

при проигрыше

 

Рисунок 7. Начало новой игры в режиме «Эксперт»

Рисунок 8. Вид экранной формы в режиме «Эксперт»

Рисунок 8. Вид экранной формы при проигрыше

Рисунок 9. Сообщение о проигрыше

Рисунок 10. Вид экранной формы при выигрыше

Рисунок 11. Сообщение о проигрыше

Вывод:

Ознакомились с некоторыми методами проектирования программ на С++.

Ответы на контрольные вопросы:

  1.  Какие операторы динамического выделения и освобождения памяти используются в Pascal’е?

 Оператор GetMem – оператор динамического выделения, оператор FreeMem – оператор высвобождения памяти.

8)Каким образом можно определять и фиксировать имя и время игрока, быстрее всех разминировавшего игровое поле?


 

А также другие работы, которые могут Вас заинтересовать

53330. Spring holidays 72.5 KB
  (The class is decorated. There is a big wreath of flowers on the wall, it is written - Spring is coming. There are many childrens drawings and placards about spring. On the blackboard there is a map of the travelling over the spring forest. Prince and princess come in.)
53331. Національні свята в США та в Україні 123.54 KB
  The topic of our lesson is National Holidays in Ukraine and in the USA. Holidays are special days of celebration that form an important part of every countrys culture. American and Ukrainian holidays come throughout the year and in all varieties. Today you will learn about the different types of holidays that Ukrainians and Americans celebrate.
53332. Праздники 50 KB
  New Years Day is the most favourite of all holidays in Ukraine. We give New Year presents; children receive their presents under the New Year’s Tree on the morning of the 1st of January. The main folk heroes of this holiday are Father Frost (Did Moroz) and his granddaughter Snigurochka (The Snow Girl).
53333. Сорбционные явления в вакууме 728.5 KB
  Процесс поглощения газов или паров твердыми телами, независимо от того, происходит ли он на поверхности или в объеме твердого тела, называется сорбцией. Поглощение газа на поверхности твердых тел называется адсорбцией. Движущей силой адсорбции является снижение поверхностной энергии в твердом теле.
53334. Немає кращого місця ніж вдома 883 KB
  T: Good morning dear children. Cl: Good morning dear teacher T: How are you? CL: We are fine. T: Sit down, please. 1.2 Мотивація. Очікувані результати T: English people say “There is no place like home”. Dear friends, I believe that today we’ll have a pleasant lesson because we are going to speak about our homes and flats.
53337. Методична розробка виховного заходу «Було колись на Хортиці…» 1.74 MB
  Звучить мелодія української пісні Реве та стогне Дніпр широкий Ведучий: Було колись на Хортиці ревіли гармати Було колись запорожці вміли панувати. Ій ведучий: Розмовляють розказують Як Січ будували Як козаки на байдарках Пороги минали Як гуляли по синьому Грілися в скутарі то як люльки запалили В Польщі на пожарі В Україну верталися Як бенкетували. 2ий...
53338. Помешкання. Житло в оренду 1016 KB
  Maria lives in a chalet on a mountain in Switzerland. These houses are made of wood. They have usually got two floors and an attic. Greg lives in a huge block of flats in Boston. His flat is on the fifteenth floor and it is in the center of the city. He lives at 332 Newbury Street. There are a lot of expensive shops in the area.