Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 1000 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Самостоятельная работа 11:
Игра в кубик
Аннотация: Реализация в IDE C++Builder 6. Файл точки входа приложения PlayDice.cpp. Файл объявления интерфейса пользователя - Interface.h. Файл реализации интерфейса пользователя - Interface.cpp. Файл объявления классов участников игры Game.h. Файл реализации методов Game.cpp. Заголовочный файл UAbout.h. Файл реализации UAbout.cpp. Главное окно. Окно About.
Реализация в IDE C++Builder 6
Файлы к данной лабораторной работе, Вы можете скачать здесь.
В задание на выполнение входит самостоятельное построение демонстрационного приложения в IDE C++Builder 6.0 игры в кубик
Файл точки входа приложения PlayDice.cpp
Файл точки входа приложения 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 // Файл 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 // Файл 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(); } //---------------------------------------------------------------------------