В задание на выполнение входит самостоятельное построение демонстрационного приложения в IDE C++Builder 6.0 игры в кубик
Файл точки входа приложения PlayDice.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USEFORM("Interface.cpp", MainForm);
USEFORM("UAbout.cpp", AboutBox);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TMainForm), MainForm);
Application->CreateForm(__classid(TAboutBox), AboutBox);
Application->Run();
}
catch (Exception exception)
{
Application->ShowException(exception);
}
return 0;
}
//---------------------------------------------------------------------------
Файл объявления интерфейса пользователя - Interface.h
// Файл Interface.h
//---------------------------------------------------------------------------
#ifndef InterfaceH
#define InterfaceH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <ToolWin.hpp>
#include "Game.h" // Подключение объявлений
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
// Объявления интерфейса
TGroupBox *PlayerGroupBox;
TLabel *L3;
TLabel *L2;
TEdit *PlayerCurrentScores;
TEdit *PlayerSumScores;
TGroupBox *PartnerGroupBox;
TLabel *L6;
TLabel *L5;
TEdit *PartnerCurrentScores;
TEdit *PartnerSumScores;
TGroupBox *DiceGroupBox;
TImage *Image;
TMainMenu *MainMenu;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *NewGameItem;
TMenuItem *GameExitItem;
TMenuItem *N3;
TMenuItem *UseDiceItem;
TMenuItem *NextItem;
TToolBar *ToolBar;
TSpeedButton *NewGameItemBtn; //phonerng.bmp
TSpeedButton *GameExitItemBtn;//dooropen.bmp
TSpeedButton *StepItemBtn; //arrow3r.bmp
TPanel *PanelInfo;
TLabel *PlayCount;
TLabel *Balance;
TLabel *L1;
TEdit *PlayerVictoryCount;
TEdit *PartnerVictoryCount;
TButton *PlayerStep;
TButton *PartnerStep;
TLabel *L4;
TLabel *ActivePlayer;
TLabel *Label1;
TButton *Step;
TButton *Button1;
TButton *PartyBtn;
TLabel *GameFinishScores;
TButton *ClearImageBtn;
TPopupMenu *PopupMenu;
TMenuItem *About;
void __fastcall GameExitItemClick(TObject *Sender);
void __fastcall PartnerStepClick(TObject *Sender);
void __fastcall NewGameItemBtnClick(TObject *Sender);
void __fastcall StepClick(TObject *Sender);
void __fastcall PartyBtnClick(TObject *Sender);
void __fastcall ClearImageBtnClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction Action);
void __fastcall AboutClick(TObject *Sender);
private: // User declarations
TReferee Referee; // Включаемый объект Судья
/*
TMessage message;
Не нужно, т.к. не используем
явный вызов функции обработки нашего
сообщения ShowInfo(message);
*/
TJPEGImage *diceImage; // Для контейнера Jpg-файла
TPlayer *ptrMember;
void ShowInfo(TMessage );// Объявление обработчика сообщения
void ShowDice(); // Вводится для модульности кода
public: // User declarations
__fastcall TMainForm(TComponent* Owner);// Объявление конструктора
BEGIN_MESSAGE_MAP // Карта сообщений программиста
MESSAGE_HANDLER(MY_SHOW, TMessage, ShowInfo)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
Файл реализации интерфейса пользователя - Interface.cpp
// Файл Interface.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Interface.h"
#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
// Одну закомментировать
#define PATH "Pictures\\"
//#define PATH ""
TMainForm *MainForm;
//---------------------------------------------------------------------------
// Конструктор Приложения
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
diceImage = new TJPEGImage(); // Перед Referee.NewGame()
if(!diceImage){//Проверка удачного выделения памяти
ShowMessage("Не могу создать объект под изображение кубика!");
Close();
}
// Image->Picture = (TPicture *) diceImage;
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Выполняет функции деструктора при завершении приложения
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction Action)
{
if(diceImage){ // Безопасная технология освобождения указателя
delete diceImage;
diceImage = NULL; // При завершении приложения излишне
}
}
//---------------------------------------------------------------------------
// Выход
void __fastcall TMainForm::GameExitItemClick(TObject *Sender)
{
// Close();
Perform(WM_CLOSE, 0, 0); // По стандартному Сообщению
}
//---------------------------------------------------------------------------
// Выводит информацию о состоянии игры
void TMainForm::ShowInfo(TMessage a)
{
// Переключение интерфейса игрока
if(Referee.GetActiveMember() == PLAYER){
ActivePlayer->Caption = "Бросает Игрок";
PlayerGroupBox->Enabled = true;
PartnerGroupBox->Enabled = false;
PlayerGroupBox->Font->Style =
TFontStyles()<< fsBold;
PartnerGroupBox->Font->Style = TFontStyles();
}
else{
ActivePlayer->Caption = "Бросает Партнер";
PartnerGroupBox->Enabled = true;
PlayerGroupBox->Enabled = false;
PartnerGroupBox->Font->Style = TFontStyles()<< fsBold;
PlayerGroupBox->Font->Style = TFontStyles();
}
PlayerCurrentScores->Text = IntToStr(Referee.Player.GetCurrentScores());
PlayerSumScores->Text = IntToStr(Referee.Player.GetSumScores());
PartnerCurrentScores->Text = IntToStr(Referee.Partner.GetCurrentScores());
PartnerSumScores->Text = IntToStr(Referee.Partner.GetSumScores());
PlayCount->Caption = IntToStr(Referee.GetPlayCount());
ShowDice();
PlayerVictoryCount->Text = IntToStr(Referee.Player.GetVictoryCount());
PartnerVictoryCount->Text = IntToStr(Referee.Partner.GetVictoryCount());
// Balance->Caption = "Счет " + PlayerVictoryCount->Text
// + " : " + PartnerVictoryCount->Text;
Balance->Caption = "Счет " + IntToStr(Referee.Player.GetVictoryCount())
+ " : " + IntToStr(Referee.Partner.GetVictoryCount());
GameFinishScores->Caption = "Партия до "
+ IntToStr(GAME_FINISH_SCORES);
}
//---------------------------------------------------------------------------
// Выводит графический рисунок сторон кубика
void TMainForm::ShowDice()
{
AnsiString fileName = PATH;
fileName += IntToStr(Referee.Dice.GetDiceValue());
fileName += ".jpg";
try{ // Обработка исключений
// Image->Picture->LoadFromFile(fileName);
diceImage->LoadFromFile(fileName);
// Явное преобразование типа указателя
Image->Picture = (TPicture *) diceImage;
}
catch(...){//Хоть и один оператор, фигурные скобки обязательны
ShowMessage("Не могу найти изображение кубика - файл " + fileName);
}
}
//---------------------------------------------------------------------------
// Обрабатывает команду передачи хода
void __fastcall TMainForm::PartnerStepClick(TObject *Sender)
{
Referee.Move();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Новая игра
void __fastcall TMainForm::NewGameItemBtnClick(TObject *Sender)
{
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Ход бросанием кубика
void __fastcall TMainForm::StepClick(TObject *Sender)
{
// Создадим указатель на текущего игрока
TPlayer *ptrMember; // Локальная адресная переменная
// Передается указателю адрес активного игрока
if(Referee.GetActiveMember() == PLAYER)
ptrMember = Referee.Player;
else
ptrMember = Referee.Partner;
TMainForm::ptrMember = ptrMember;// Адресная переменная области
// видимости содержащего класса
Referee.Dice.Action();//судья бросается кубик
if(Referee.Dice.GetDiceValue() == 1){// Неудачный ход
ptrMember->AddCurrentScores(-ptrMember->GetCurrentScores());
Referee.Move();
return;
}
// Ход активного игрока удачный - увеличить текущие очки
ptrMember->AddCurrentScores(Referee.Dice.GetDiceValue());
/*
Заменено введением указателя ptrMember
if(Referee.GetActiveMember() == PLAYER)
Referee.Player.AddCurrentScores(Referee.Dice.GetDiceValue());
else
Referee.Partner.AddCurrentScores(Referee.Dice.GetDiceValue());
*/
// Проверка на конец очередного тайма
if(Referee.GameFinish()){
// Активный участник первым закончил. Он и победил.
ptrMember->AddVictoryCount();// Увеличиваем счетчик побед
Beep(); // Звукнули
Referee.NewGame();
ShowMessage("Новая Игра!"); // Сообщили
}
else // Тайм продолжается, обновить информацию интерфейса
Perform(MY_SHOW, 0, 0);// Посылка нашего
// сообщения интерфейсу
}
//---------------------------------------------------------------------------
// Сдаюсь - признаю другого победителем
void __fastcall TMainForm::PartyBtnClick(TObject *Sender)
{
if(Referee.GetActiveMember() == PLAYER)
Referee.Partner.AddVictoryCount();
else
Referee.Player.AddVictoryCount();
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Сбросим значения кубика
void __fastcall TMainForm::ClearImageBtnClick(TObject *Sender)
{
try{ // Обработка исключений
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
catch(...){//Хоть и один оператор, фигурные скобки обязательны
ShowMessage("Не могу найти изображение кубика - файл \" 0.jpg! \" ");
// \" - экраны служебных для функции символов
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::AboutClick(TObject *Sender)
{
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
Файл объявления классов участников игры Game.h
// Файл Game.h
//---------------------------------------------------------------------------
#ifndef GameH
#define GameH
#include <stdlib.h>
//---------------------------------------------------------------------------
#define MY_SHOW WM_USER //Макроопределение сообщения
const int GAME_FINISH_SCORES = 120;// Глобальная константа
enum TActiveMember{PLAYER, PARTNER};
//---------------------------------------------------------------------------
class TDice // класс Кубик
{
int Value;
public:
TDice(); // инициализировать при создании
int GetDiceValue(){return Value;}// дать значение
void Action(); // бросить
};
//---------------------------------------------------------------------------
class TPlayer // класс Игрок
{
private:
int CurrentScores; // текущие очки
int SumScores; // суммарные очки
int VictoryCount; // число выигранных партий
public:
TPlayer();
void Init(){CurrentScores = SumScores = 0;}
int GetCurrentScores(){return CurrentScores;}
int GetSumScores(){return SumScores;}
void AddVictoryCount(){VictoryCount++;}
int GetVictoryCount(){return VictoryCount;}
void AddCurrentScores(int Scores)
{CurrentScores += Scores;}
void AddSumScores()
{SumScores += CurrentScores;
CurrentScores = 0;}
};
//---------------------------------------------------------------------------
class TReferee // класс Судья
{
private:
TActiveMember activeMember;
int PlayCount;
public:
TReferee(){PlayCount = 0;}
TPlayer Player, Partner; //создание игроков
TDice Dice; //кубик
void NewGame(); //новая игра
void Move(); //передача хода
bool GameFinish(); //проверка на конец партии
int GetActiveMember(){return activeMember;}
int GetPlayCount(){return PlayCount;}
};
//---------------------------------------------------------------------------
#endif
Файл реализации методов Game.cpp
// Файл Game.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Game.h" // Подключение объявлений
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
TDice::TDice() // конструктор по умолчанию
{
randomize(); // инициализация random()
Value = 0;
}
//---------------------------------------------------------------------------
void TDice::Action()
{
Value = random(6) + 1;
}
//---------------------------------------------------------------------------
TPlayer::TPlayer()
{
VictoryCount = 0;
Init();
}
//---------------------------------------------------------------------------
//новая игра
void TReferee::NewGame()
{
PlayCount++;
Player.Init();
Partner.Init();
Dice.Action(); // Бросить кубик
if(Dice.GetDiceValue() <= 3) // первым ходит игрок
activeMember = PLAYER;
else
activeMember = PARTNER;
SendMessage(FindWindow("TMainForm","Игра в кубик"),
MY_SHOW, 0, 0);
}
//---------------------------------------------------------------------------
// Передача хода
void TReferee::Move()
{
if(GetActiveMember() == PLAYER){
Player.AddSumScores();
activeMember = PARTNER;
}
else{
Partner.AddSumScores();
activeMember = PLAYER;
}
SendMessage(FindWindow("TMainForm","Игра в кубик"),
MY_SHOW, 0, 0);
}
//---------------------------------------------------------------------------
bool TReferee::GameFinish() //проверка на конец партии
{
int PlayerBalance = Player.GetSumScores();
PlayerBalance += Player.GetCurrentScores();
int PartnerBalance = Partner.GetSumScores();
PartnerBalance += Partner.GetCurrentScores();
return PlayerBalance >= GAME_FINISH_SCORES
|| PartnerBalance >= GAME_FINISH_SCORES;
}
//---------------------------------------------------------------------------
Заголовочный файл UAbout.h
//---------------------------------------------------------------------------
#ifndef UAboutH
#define UAboutH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published: // IDE-managed Components
TImage *Image;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
private: // User declarations
public: // User declarations
__fastcall TAboutBox(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TAboutBox *AboutBox;
//---------------------------------------------------------------------------
#endif
Файл реализации UAbout.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

В задание на выполнение входит самостоятельное построение демонстрационного приложения в IDE C++Builder 6.0 игры в кубик
Файл точки входа приложения PlayDice.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USEFORM("Interface.cpp", MainForm);
USEFORM("UAbout.cpp", AboutBox);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TMainForm), MainForm);
Application->CreateForm(__classid(TAboutBox), AboutBox);
Application->Run();
}
catch (Exception exception)
{
Application->ShowException(exception);
}
return 0;
}
//---------------------------------------------------------------------------
Файл объявления интерфейса пользователя - Interface.h
// Файл Interface.h
//---------------------------------------------------------------------------
#ifndef InterfaceH
#define InterfaceH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <ToolWin.hpp>
#include "Game.h" // Подключение объявлений
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
// Объявления интерфейса
TGroupBox *PlayerGroupBox;
TLabel *L3;
TLabel *L2;
TEdit *PlayerCurrentScores;
TEdit *PlayerSumScores;
TGroupBox *PartnerGroupBox;
TLabel *L6;
TLabel *L5;
TEdit *PartnerCurrentScores;
TEdit *PartnerSumScores;
TGroupBox *DiceGroupBox;
TImage *Image;
TMainMenu *MainMenu;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *NewGameItem;
TMenuItem *GameExitItem;
TMenuItem *N3;
TMenuItem *UseDiceItem;
TMenuItem *NextItem;
TToolBar *ToolBar;
TSpeedButton *NewGameItemBtn; //phonerng.bmp
TSpeedButton *GameExitItemBtn;//dooropen.bmp
TSpeedButton *StepItemBtn; //arrow3r.bmp
TPanel *PanelInfo;
TLabel *PlayCount;
TLabel *Balance;
TLabel *L1;
TEdit *PlayerVictoryCount;
TEdit *PartnerVictoryCount;
TButton *PlayerStep;
TButton *PartnerStep;
TLabel *L4;
TLabel *ActivePlayer;
TLabel *Label1;
TButton *Step;
TButton *Button1;
TButton *PartyBtn;
TLabel *GameFinishScores;
TButton *ClearImageBtn;
TPopupMenu *PopupMenu;
TMenuItem *About;
void __fastcall GameExitItemClick(TObject *Sender);
void __fastcall PartnerStepClick(TObject *Sender);
void __fastcall NewGameItemBtnClick(TObject *Sender);
void __fastcall StepClick(TObject *Sender);
void __fastcall PartyBtnClick(TObject *Sender);
void __fastcall ClearImageBtnClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction Action);
void __fastcall AboutClick(TObject *Sender);
private: // User declarations
TReferee Referee; // Включаемый объект Судья
/*
TMessage message;
Не нужно, т.к. не используем
явный вызов функции обработки нашего
сообщения ShowInfo(message);
*/
TJPEGImage *diceImage; // Для контейнера Jpg-файла
TPlayer *ptrMember;
void ShowInfo(TMessage );// Объявление обработчика сообщения
void ShowDice(); // Вводится для модульности кода
public: // User declarations
__fastcall TMainForm(TComponent* Owner);// Объявление конструктора
BEGIN_MESSAGE_MAP // Карта сообщений программиста
MESSAGE_HANDLER(MY_SHOW, TMessage, ShowInfo)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
Файл реализации интерфейса пользователя - Interface.cpp
// Файл Interface.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Interface.h"
#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
// Одну закомментировать
#define PATH "Pictures\\"
//#define PATH ""
TMainForm *MainForm;
//---------------------------------------------------------------------------
// Конструктор Приложения
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
diceImage = new TJPEGImage(); // Перед Referee.NewGame()
if(!diceImage){//Проверка удачного выделения памяти
ShowMessage("Не могу создать объект под изображение кубика!");
Close();
}
// Image->Picture = (TPicture *) diceImage;
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Выполняет функции деструктора при завершении приложения
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction Action)
{
if(diceImage){ // Безопасная технология освобождения указателя
delete diceImage;
diceImage = NULL; // При завершении приложения излишне
}
}
//---------------------------------------------------------------------------
// Выход
void __fastcall TMainForm::GameExitItemClick(TObject *Sender)
{
// Close();
Perform(WM_CLOSE, 0, 0); // По стандартному Сообщению
}
//---------------------------------------------------------------------------
// Выводит информацию о состоянии игры
void TMainForm::ShowInfo(TMessage a)
{
// Переключение интерфейса игрока
if(Referee.GetActiveMember() == PLAYER){
ActivePlayer->Caption = "Бросает Игрок";
PlayerGroupBox->Enabled = true;
PartnerGroupBox->Enabled = false;
PlayerGroupBox->Font->Style =
TFontStyles()<< fsBold;
PartnerGroupBox->Font->Style = TFontStyles();
}
else{
ActivePlayer->Caption = "Бросает Партнер";
PartnerGroupBox->Enabled = true;
PlayerGroupBox->Enabled = false;
PartnerGroupBox->Font->Style = TFontStyles()<< fsBold;
PlayerGroupBox->Font->Style = TFontStyles();
}
PlayerCurrentScores->Text = IntToStr(Referee.Player.GetCurrentScores());
PlayerSumScores->Text = IntToStr(Referee.Player.GetSumScores());
PartnerCurrentScores->Text = IntToStr(Referee.Partner.GetCurrentScores());
PartnerSumScores->Text = IntToStr(Referee.Partner.GetSumScores());
PlayCount->Caption = IntToStr(Referee.GetPlayCount());
ShowDice();
PlayerVictoryCount->Text = IntToStr(Referee.Player.GetVictoryCount());
PartnerVictoryCount->Text = IntToStr(Referee.Partner.GetVictoryCount());
// Balance->Caption = "Счет " + PlayerVictoryCount->Text
// + " : " + PartnerVictoryCount->Text;
Balance->Caption = "Счет " + IntToStr(Referee.Player.GetVictoryCount())
+ " : " + IntToStr(Referee.Partner.GetVictoryCount());
GameFinishScores->Caption = "Партия до "
+ IntToStr(GAME_FINISH_SCORES);
}
//---------------------------------------------------------------------------
// Выводит графический рисунок сторон кубика
void TMainForm::ShowDice()
{
AnsiString fileName = PATH;
fileName += IntToStr(Referee.Dice.GetDiceValue());
fileName += ".jpg";
try{ // Обработка исключений
// Image->Picture->LoadFromFile(fileName);
diceImage->LoadFromFile(fileName);
// Явное преобразование типа указателя
Image->Picture = (TPicture *) diceImage;
}
catch(...){//Хоть и один оператор, фигурные скобки обязательны
ShowMessage("Не могу найти изображение кубика - файл " + fileName);
}
}
//---------------------------------------------------------------------------
// Обрабатывает команду передачи хода
void __fastcall TMainForm::PartnerStepClick(TObject *Sender)
{
Referee.Move();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Новая игра
void __fastcall TMainForm::NewGameItemBtnClick(TObject *Sender)
{
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Ход бросанием кубика
void __fastcall TMainForm::StepClick(TObject *Sender)
{
// Создадим указатель на текущего игрока
TPlayer *ptrMember; // Локальная адресная переменная
// Передается указателю адрес активного игрока
if(Referee.GetActiveMember() == PLAYER)
ptrMember = Referee.Player;
else
ptrMember = Referee.Partner;
TMainForm::ptrMember = ptrMember;// Адресная переменная области
// видимости содержащего класса
Referee.Dice.Action();//судья бросается кубик
if(Referee.Dice.GetDiceValue() == 1){// Неудачный ход
ptrMember->AddCurrentScores(-ptrMember->GetCurrentScores());
Referee.Move();
return;
}
// Ход активного игрока удачный - увеличить текущие очки
ptrMember->AddCurrentScores(Referee.Dice.GetDiceValue());
/*
Заменено введением указателя ptrMember
if(Referee.GetActiveMember() == PLAYER)
Referee.Player.AddCurrentScores(Referee.Dice.GetDiceValue());
else
Referee.Partner.AddCurrentScores(Referee.Dice.GetDiceValue());
*/
// Проверка на конец очередного тайма
if(Referee.GameFinish()){
// Активный участник первым закончил. Он и победил.
ptrMember->AddVictoryCount();// Увеличиваем счетчик побед
Beep(); // Звукнули
Referee.NewGame();
ShowMessage("Новая Игра!"); // Сообщили
}
else // Тайм продолжается, обновить информацию интерфейса
Perform(MY_SHOW, 0, 0);// Посылка нашего
// сообщения интерфейсу
}
//---------------------------------------------------------------------------
// Сдаюсь - признаю другого победителем
void __fastcall TMainForm::PartyBtnClick(TObject *Sender)
{
if(Referee.GetActiveMember() == PLAYER)
Referee.Partner.AddVictoryCount();
else
Referee.Player.AddVictoryCount();
Referee.NewGame();
// Обнулить кубик
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
//---------------------------------------------------------------------------
// Сбросим значения кубика
void __fastcall TMainForm::ClearImageBtnClick(TObject *Sender)
{
try{ // Обработка исключений
diceImage->LoadFromFile(AnsiString(PATH) + "0.jpg");
Image->Picture = (TPicture *) diceImage;
}
catch(...){//Хоть и один оператор, фигурные скобки обязательны
ShowMessage("Не могу найти изображение кубика - файл \" 0.jpg! \" ");
// \" - экраны служебных для функции символов
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::AboutClick(TObject *Sender)
{
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
Файл объявления классов участников игры Game.h
// Файл Game.h
//---------------------------------------------------------------------------
#ifndef GameH
#define GameH
#include <stdlib.h>
//---------------------------------------------------------------------------
#define MY_SHOW WM_USER //Макроопределение сообщения
const int GAME_FINISH_SCORES = 120;// Глобальная константа
enum TActiveMember{PLAYER, PARTNER};
//---------------------------------------------------------------------------
class TDice // класс Кубик
{
int Value;
public:
TDice(); // инициализировать при создании
int GetDiceValue(){return Value;}// дать значение
void Action(); // бросить
};
//---------------------------------------------------------------------------
class TPlayer // класс Игрок
{
private:
int CurrentScores; // текущие очки
int SumScores; // суммарные очки
int VictoryCount; // число выигранных партий
public:
TPlayer();
void Init(){CurrentScores = SumScores = 0;}
int GetCurrentScores(){return CurrentScores;}
int GetSumScores(){return SumScores;}
void AddVictoryCount(){VictoryCount++;}
int GetVictoryCount(){return VictoryCount;}
void AddCurrentScores(int Scores)
{CurrentScores += Scores;}
void AddSumScores()
{SumScores += CurrentScores;
CurrentScores = 0;}
};
//---------------------------------------------------------------------------
class TReferee // класс Судья
{
private:
TActiveMember activeMember;
int PlayCount;
public:
TReferee(){PlayCount = 0;}
TPlayer Player, Partner; //создание игроков
TDice Dice; //кубик
void NewGame(); //новая игра
void Move(); //передача хода
bool GameFinish(); //проверка на конец партии
int GetActiveMember(){return activeMember;}
int GetPlayCount(){return PlayCount;}
};
//---------------------------------------------------------------------------
#endif
Файл реализации методов Game.cpp
// Файл Game.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Game.h" // Подключение объявлений
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
TDice::TDice() // конструктор по умолчанию
{
randomize(); // инициализация random()
Value = 0;
}
//---------------------------------------------------------------------------
void TDice::Action()
{
Value = random(6) + 1;
}
//---------------------------------------------------------------------------
TPlayer::TPlayer()
{
VictoryCount = 0;
Init();
}
//---------------------------------------------------------------------------
//новая игра
void TReferee::NewGame()
{
PlayCount++;
Player.Init();
Partner.Init();
Dice.Action(); // Бросить кубик
if(Dice.GetDiceValue() <= 3) // первым ходит игрок
activeMember = PLAYER;
else
activeMember = PARTNER;
SendMessage(FindWindow("TMainForm","Игра в кубик"),
MY_SHOW, 0, 0);
}
//---------------------------------------------------------------------------
// Передача хода
void TReferee::Move()
{
if(GetActiveMember() == PLAYER){
Player.AddSumScores();
activeMember = PARTNER;
}
else{
Partner.AddSumScores();
activeMember = PLAYER;
}
SendMessage(FindWindow("TMainForm","Игра в кубик"),
MY_SHOW, 0, 0);
}
//---------------------------------------------------------------------------
bool TReferee::GameFinish() //проверка на конец партии
{
int PlayerBalance = Player.GetSumScores();
PlayerBalance += Player.GetCurrentScores();
int PartnerBalance = Partner.GetSumScores();
PartnerBalance += Partner.GetCurrentScores();
return PlayerBalance >= GAME_FINISH_SCORES
|| PartnerBalance >= GAME_FINISH_SCORES;
}
//---------------------------------------------------------------------------
Заголовочный файл UAbout.h
//---------------------------------------------------------------------------
#ifndef UAboutH
#define UAboutH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published: // IDE-managed Components
TImage *Image;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
private: // User declarations
public: // User declarations
__fastcall TAboutBox(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TAboutBox *AboutBox;
//---------------------------------------------------------------------------
#endif
Файл реализации UAbout.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.