Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kółko i krzyżyk


Rekomendowane odpowiedzi

Opublikowano

Witam! Od razu zaznaczam, że piszę na swój odmienny sposób, usuwam błędy komplikując kod :) Jak znajdziecie jakieś błędy, proszę pisać. A teraz o tutorialu, ten będzie odmienny. Najpierw wam opiszę nie dając kodu, co macie zrobić, dopiero później dam wam przykładowy kod. Tutorial napisany pod borland c++ buildera.

 

Zaczynamy!

 

Otwieramy nowy projekt, i na formę wrzucamy 9 speedbuttonów (możecie tworzyć dynamicznie, i zamiast sprawdzać każdego po kolei dać w pętle :) )

Do tego jeszcze button "Graj" i dwa radiobuttony "Gracz 1" i "Gracz 2", u których enabled=false. Teraz tworzymy 2 funkcje, "Blokuj()" i "Odblokuj()", gdzie blokuj ustawia enabled wszystkich speedbuttonów na false, a dla buttona gracz na true, z funkcją blokuj tak samo, tylko odwrotnie. Wywołujemy funkcję blokuj przy ładowaniu formy. Fajnie, mamy już plansze, ale co nam po tym? Teraz napiszemy parę prostych funkcji. Funkcja "Naznacz(TSpeedButton* s)", gdzie jak się domyślacie, s to nasz przycisk. Ta funkcja naznacza pola jeżeli są puste, dla odpowiedniego gracza, służymy się tu radiobuttonami, zależy który jest zaznaczony. Po tym wywołuje 2 funkcję, "sprawdz()" i "gracz()". Najpierw opiszę funkcję "gracz()". Ta funkcja zaznacza drugi radiobutton, jeżeli jest zaznaczony gracz 1 zaznacza gracz 2 itd... Funkcja "sprawdz()" jest najdłuższa, w if sprawdzamy czy układają nam się X lub O w pozycji do wygranej, i wywołujemy wtedy funkcję winner(). Na samym końcu, jeżeli wszystkie przyciski są naznaczone, wywołuje funkcję remis(). Funkcja winner() wywołuje messageboxa, w którym jest komunikat, który gracz wygrał, tak samo w remisie tylko messagebox z remisem, w obydwu funkcjach po komunikacie jest wywoływana funkcja blokuj(), radiobutton1 jest zaznaczany, i zmienna globalna, którą dodajemy pod nazwą koniec jako int, jest ustawiana na 1. W funkcji odblokuj() dopisujemy na końcu koniec=0. Teraz do każdego speedbuttona dajemy Napisz(this), do buttona graj, odblokuj(). To w zasadzie tyle :) Mam nadzieje, że wam wyszło i nie zjeżdżacie na sam dół żeby skopiować kod i poszpanować, tylko coś robicie sami :)

Teraz kod:

 

Blokuj():

 

void __fastcall Blokuj()
{
Form1->SpeedButton1->Enabled=false;
Form1->SpeedButton2->Enabled=false;
Form1->SpeedButton3->Enabled=false;
Form1->SpeedButton4->Enabled=false;
Form1->SpeedButton5->Enabled=false;
Form1->SpeedButton6->Enabled=false;
Form1->SpeedButton7->Enabled=false;
Form1->SpeedButton8->Enabled=false;
Form1->SpeedButton9->Enabled=false;
Form1->SpeedButton1->Caption="";
Form1->SpeedButton2->Caption="";
Form1->SpeedButton3->Caption="";
Form1->SpeedButton4->Caption="";
Form1->SpeedButton5->Caption="";
Form1->SpeedButton6->Caption="";
Form1->SpeedButton7->Caption="";
Form1->SpeedButton8->Caption="";
Form1->SpeedButton9->Caption="";
Form1->Button1->Enabled=true;
Form1->RadioButton1->Checked=true;
}

 

Odblokuj():

 

void __fastcall Odblokuj()
{
Form1->SpeedButton1->Enabled=true;
Form1->SpeedButton2->Enabled=true;
Form1->SpeedButton3->Enabled=true;
Form1->SpeedButton4->Enabled=true;
Form1->SpeedButton5->Enabled=true;
Form1->SpeedButton6->Enabled=true;
Form1->SpeedButton7->Enabled=true;
Form1->SpeedButton8->Enabled=true;
Form1->SpeedButton9->Enabled=true;
Form1->SpeedButton1->Caption="";
Form1->SpeedButton2->Caption="";
Form1->SpeedButton3->Caption="";
Form1->SpeedButton4->Caption="";
Form1->SpeedButton5->Caption="";
Form1->SpeedButton6->Caption="";
Form1->SpeedButton7->Caption="";
Form1->SpeedButton8->Caption="";
Form1->SpeedButton9->Caption="";
Form1->Button1->Enabled=false;
Form1->RadioButton1->Checked=true;
koniec=0;
}

 

Remis():

 

void __fastcall Remis() {
Application->MessageBox("Remis","Wygrana",MB_OK);
Form1->RadioButton1->Checked=true;
koniec=1;
Blokuj();
}

 

Winner():

 

void __fastcall winner() {
String komunikat,gracz;
if(Form1->RadioButton1->Checked==true) {
gracz=Form1->RadioButton1->Caption;
} else {
gracz=Form1->RadioButton2->Caption;
}
komunikat="Wygrał gracz "+gracz+"!";
Application->MessageBox(komunikat.c_str(),"Wygrana",MB_OK);
Form1->RadioButton1->Checked=true;
koniec=1;
Blokuj();
}

 

Nasze ukochane sprawdz():

 

void __fastcall Sprawdz() {
if(Form1->SpeedButton1->Caption == "X" && Form1->SpeedButton2->Caption == "X" && Form1->SpeedButton3->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton4->Caption == "X" && Form1->SpeedButton5->Caption == "X" && Form1->SpeedButton6->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton7->Caption == "X" && Form1->SpeedButton8->Caption == "X" && Form1->SpeedButton9->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption == "X" && Form1->SpeedButton4->Caption == "X" && Form1->SpeedButton7->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton2->Caption == "X" && Form1->SpeedButton5->Caption == "X" && Form1->SpeedButton8->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton3->Caption == "X" && Form1->SpeedButton6->Caption == "X" && Form1->SpeedButton9->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption == "X" && Form1->SpeedButton5->Caption == "X" && Form1->SpeedButton9->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton3->Caption == "X" && Form1->SpeedButton5->Caption == "X" && Form1->SpeedButton7->Caption == "X")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption == "O" && Form1->SpeedButton2->Caption == "O" && Form1->SpeedButton3->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton4->Caption == "O" && Form1->SpeedButton5->Caption == "O" && Form1->SpeedButton6->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton7->Caption == "O" && Form1->SpeedButton8->Caption == "O" && Form1->SpeedButton9->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption == "O" && Form1->SpeedButton4->Caption == "O" && Form1->SpeedButton7->Caption == "O")
       {
   winner();
 }
 if(Form1->SpeedButton2->Caption == "O" && Form1->SpeedButton5->Caption == "O" && Form1->SpeedButton8->Caption == "O")
       {
   winner();
 }
 if(Form1->SpeedButton3->Caption == "O" && Form1->SpeedButton6->Caption == "O" && Form1->SpeedButton9->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption == "O" && Form1->SpeedButton5->Caption == "O" && Form1->SpeedButton9->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton3->Caption == "O" && Form1->SpeedButton5->Caption == "O" && Form1->SpeedButton7->Caption == "O")
 {
   winner();
 }
 if(Form1->SpeedButton1->Caption!="" && Form1->SpeedButton2->Caption!="" && Form1->SpeedButton3->Caption!="" && Form1->SpeedButton4->Caption!="" && Form1->SpeedButton5->Caption!="" && Form1->SpeedButton6->Caption!="" && Form1->SpeedButton7->Caption!="" && Form1->SpeedButton8->Caption!="" && Form1->SpeedButton9->Caption!="")
 {
   Remis();
 }
 }

 

Gracz():

 

void __fastcall Gracz()
{
if(Form1->RadioButton1->Checked==true) {
Form1->RadioButton2->Checked=true;
} else {
Form1->RadioButton1->Checked=true;
}
}

 

I ostatnie, naznacz(TSpeedButton* s):

void __fastcall Naznacz(TSpeedButton* s)
{
if(Form1->RadioButton1->Checked==true && s->Caption=="" && koniec==0) {
s->Caption="X";
Gracz();
}
if(Form1->RadioButton2->Checked==true && s->Caption=="" && koniec==0) {
s->Caption="O";
Gracz();
}
}

 

To tyle, mam nadzieje, że wam wyszło i się wam podobało :)

  • 5 miesięcy temu...
  • 1 rok później...
Opublikowano

Mam coś takiego:

 

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


#include <vcl.h>
#pragma hdrstop


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
















void __fastcall TForm1::FormCreate(TObject *Sender)
{
}
//---------------------------------------------------------------------------




Mam wsadzić teraz te dwie funkcje w ten sposób: 


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


#include <vcl.h>
#pragma hdrstop


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
















void __fastcall TForm1::FormCreate(TObject *Sender)
{
void __fastcall Blokuj()
{
Form1->SpeedButton1->Enabled=false;
Form1->SpeedButton2->Enabled=false;
Form1->SpeedButton3->Enabled=false;
Form1->SpeedButton4->Enabled=false;
Form1->SpeedButton5->Enabled=false;
Form1->SpeedButton6->Enabled=false;
Form1->SpeedButton7->Enabled=false;
Form1->SpeedButton8->Enabled=false;
Form1->SpeedButton9->Enabled=false;
Form1->SpeedButton1->Caption="";
Form1->SpeedButton2->Caption="";
Form1->SpeedButton3->Caption="";
Form1->SpeedButton4->Caption="";
Form1->SpeedButton5->Caption="";
Form1->SpeedButton6->Caption="";
Form1->SpeedButton7->Caption="";
Form1->SpeedButton8->Caption="";
Form1->SpeedButton9->Caption="";
Form1->Button1->Enabled=true;
Form1->RadioButton1->Checked=true;
}
void __fastcall Odblokuj()
{
Form1->SpeedButton1->Enabled=true;
Form1->SpeedButton2->Enabled=true;
Form1->SpeedButton3->Enabled=true;
Form1->SpeedButton4->Enabled=true;
Form1->SpeedButton5->Enabled=true;
Form1->SpeedButton6->Enabled=true;
Form1->SpeedButton7->Enabled=true;
Form1->SpeedButton8->Enabled=true;
Form1->SpeedButton9->Enabled=true;
Form1->SpeedButton1->Caption="";
Form1->SpeedButton2->Caption="";
Form1->SpeedButton3->Caption="";
Form1->SpeedButton4->Caption="";
Form1->SpeedButton5->Caption="";
Form1->SpeedButton6->Caption="";
Form1->SpeedButton7->Caption="";
Form1->SpeedButton8->Caption="";
Form1->SpeedButton9->Caption="";
Form1->Button1->Enabled=false;
Form1->RadioButton1->Checked=true;
koniec=0;
}
}
//---------------------------------------------------------------------------

??

Jestem w te klocki troszkę zielony. Mieliśmy na rozszerzeniu z informatyki pana od wf a teraz wróciła "pani od informatyki" i wali z grubej rury. Nie za bardzo umiem sobie z tym poradzić. :)



Dodam, że wyskakują mi wtedy błędy przy skompilowaniu, pisze, że mam błędy w deklaracji.

  • 1 rok później...
Opublikowano

Daj cały kod bo potrzebuje na wczoraj (czyli na jutro bo na ponidziałek musze takie coś do szkoły prosze cie opomoc cały kod w delphi 7 pliska helk ME)

Wyślij na Januszek _ ochman @ onet . pl (nie pisz ' spacebar' )

 

 
 
 
 
 
 
 
 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...