Еще одна программа, которая предлагает сыграть с нею в "спички", но только по новым правилам - вы сами выбираете, сколько максимум спичек вы можете взять за ход, сколько спичек в начале игры и кто ходит первым. Если кому-то интересно поиграть - пишите мыло, я отправлю ее готовый вариант.
тут исходникХех, еще одна программка, на этот раз с формой, поэтому, если вдруг по каким-то сверхъестественным причинам появится желающий эти коды посмотреть, то ему придется проявить смекалку на то, чтобы вставить эти исходники в прогу и создать форму со всеми этими компонентами. Я в одной форме сделал компоненты, которые появляются только при старте проги, но делаются невидимыми во время игры (функции ShowStart и ShowGame именно это и делают).
// Header.h------------------------------------------------------------------
#ifndef SpichkiH
#define SpichkiH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label21;
TLabel *ByPass;
TLabel *Label23;
TLabel *Label24;
TEdit *Count;
TUpDown *CountChange;
TButton *Pass;
TLabel *Label15;
TEdit *ByPassStart;
TLabel *Label16;
TEdit *StartCount;
TButton *Start;
TCheckBox *UserPass;
TLabel *Label22;
TLabel *UnitsLeft;
void __fastcall FormCreate(TObject *Sender);
void __fastcall OnChangeStartCount(TObject *Sender);
void __fastcall OnChangeByPassStart(TObject *Sender);
void __fastcall OnStart(TObject *Sender);
void __fastcall OnChangeCount(TObject *Sender);
void __fastcall OnPass(TObject *Sender);
private: // User declarations
int ByPassCount,UnitsCount;
bool Corr;
void __fastcall CompPass();
void __fastcall ShowStart();
void __fastcall ShowGame();
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//Source.cpp-----------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Spichki.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnChangeStartCount(TObject *Sender)
{
//Åñëè êàêîé-ëèáî ïàðàìåòð íå ââåäåí, òî ïðîâåðêà íå ïðîèçâîäèòñÿ.
//Åñëè ââåäåí íåâåðíûé ïàðàìåðò, òî ñîîáùåíèå îá ýòîì áóäåò âûâåäåíî àâò.
if((!StartCount->Text.IsEmpty() ) && (!ByPassStart->Text.IsEmpty() ))
{
//Íà÷àëüíîå êîëè÷åñòâî äîëæíî áûòü íå áîëüøå 100 è íå ìåíüøå 1.
//Êîëè÷åñòâî åäèíèö çà õîä íå ìîæåò áûòü áîëüøå íà÷àëüíîãî êîë-âà
if(StartCount->Text.ToInt()>100)
StartCount->Text=100;
else if(StartCount->Text.ToInt()<1)
StartCount->Text=1;
if(StartCount->Text.ToInt()<ByPassStart->Text.ToInt())
ByPassStart->Text=StartCount->Text;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnChangeByPassStart(TObject *Sender)
{
//Åñëè êàêîé-ëèáî ïàðàìåòð íå ââåäåí, òî ïðîâåðêà íå ïðîèçâîäèòñÿ.
//Åñëè ââåäåí íåâåðíûé ïàðàìåðò, òî ñîîáùåíèå îá ýòîì áóäåò âûâåäåíî àâò.
if((!StartCount->Text.IsEmpty() ) && (!ByPassStart->Text.IsEmpty() ))
{
//Êîëè÷åñòâî åäèíèö çà õîä íå áîëüøå íà÷àëüíîãî êîë-âà...
if(ByPassStart->Text.ToInt()>StartCount->Text.ToInt())
ByPassStart->Text=StartCount->Text;
//...è íå ìåíüøå 1.
else if(ByPassStart->Text.ToInt()<1)
ByPassStart->Text=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Çàäàåì íà÷àëüíûå çíà÷åíèÿ
StartCount->Text=20;
ByPassStart->Text=3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnStart(TObject *Sender)
{
bool Correct=true;
//Ïðîâåðÿåì, íå áóäåò ëè âûçâàíî èñêëþ÷åíèå ïðè ïîïûòêå ïðåîáðàçîâàòü òåêñò
//â öåëîå ÷èñëî.
try
{
ByPassCount=ByPassStart->Text.ToInt();
UnitsCount=StartCount->Text.ToInt();
}
//Åñëè èñêëþ÷åíèå âûçâàíî, òî îáíóëÿåì Correct
catch(...)
{
Correct=false;
}
//Åñëè Correct îáíóëåí, òî äàëüøå íè÷åãî íå äåëàåì.
if(Correct && (ByPassCount>0) && (UnitsCount>0))
{
ShowGame();
//Åñëè ïîëüçîâàòåëü íå âûáðàë ïåðâûé õîä, òî çàïóñòèòü õîä êîìïà.
if (!UserPass->Checked) CompPass();
}
else
ShowMessage("Äàííûå ââåäåíû íåâåðíî! Ïîâòîðèòå ââîä!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnChangeCount(TObject *Sender)
{
try
{
if(!Count->Text.IsEmpty())
{
if(Count->Text.ToInt() < 1)
Count->Text = 1;
else if(Count->Text.ToInt() > ByPassCount)
Count->Text = ByPassCount;
}
Pass->Enabled = true;
}
catch(...)
{
ShowMessage("Äàííûå ââåäåíû íåâåðíî! Ïîâòîðèòå ââîä!");
Pass->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CompPass()
{
int Mod,Get;
//if(UnitsCount>=ByPassCount)
//{
Mod=UnitsCount%(ByPassCount+1);
switch(Mod)
{
case(0):
{
Get=ByPassCount;
break;
}
case(1):
{
Get=1;
break;
}
default:
{
Get=(UnitsCount%(ByPassCount+1)) - 1;
}
}
//}
//else
UnitsCount-=Get;
AnsiString tmp("ß áåðó "),tmp1(Get),tmp2(" åäèíèö.\n Îñòàåòñÿ "),tmp3(UnitsCount);
ShowMessage(tmp+tmp1+tmp2+tmp3);
if(UnitsCount<=0)
{
ShowMessage("Ïîçäðàâëÿþ, âû ïîáåäèëè!");
ShowStart();
}
UnitsLeft->Caption = UnitsCount;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnPass(TObject *Sender)
{
int Get;
if((Get=Count->Text.ToInt())>0)
{
UnitsCount-=Get;
if(UnitsCount<=0)
{
ShowMessage("Óâû, íî âû ïðîèãðàëè!");
ShowStart();
}
else
CompPass();
}
else
{
ShowMessage("Íåïðàâèëüíî ââåäåíû äàííûå!");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowGame()
{
//Ñêðûâàåì íåíóæíûå êîìïîíåòû
ByPassStart->Visible = false;
Label15->Visible = false;
Label16->Visible = false;
Start->Visible = false;
StartCount->Visible = false;
UserPass->Visible = false;
//Îòîáðàæàåì íîâûå êîìïîíåíòû
ByPass->Visible = true;
ByPass->Caption = ByPassStart->Text;
Count->Text = 1;
Count->Visible = true;
Label21->Visible = true;
Label22->Visible = true;
Label23->Visible = true;
Label24->Visible = true;
Pass->Visible = true;
UnitsLeft->Visible = true;
UnitsLeft->Caption = StartCount->Text;
CountChange->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowStart()
{
//Ñêðûâàåì íåíóæíûå êîìïîíåòû
ByPassStart->Visible = true;
Label15->Visible = true;
Label16->Visible = true;
Start->Visible = true;
StartCount->Visible = true;
UserPass->Visible = true;
//Îòîáðàæàåì íîâûå êîìïîíåíòû
ByPass->Visible = false;
Count->Visible = false;
Label21->Visible = false;
Label22->Visible = false;
Label23->Visible = false;
Label24->Visible = false;
Pass->Visible = false;
UnitsLeft->Visible = false;
CountChange->Visible = false;
}
Еще одна программа, которая предлагает сыграть с нею в "спички", но только по новым правилам - вы сами выбираете, сколько максимум спичек вы можете взять за ход, сколько спичек в начале игры и кто ходит первым. Если кому-то интересно поиграть - пишите мыло, я отправлю ее готовый вариант.
тут исходник
тут исходник