Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > ИГРА,Крестики нолики, в чём ошибка ?????????


Автор: mrBaT 10.3.2006, 04:11
Ниже приведён код двух файлов Unit1.h и Unit1.cpp:

Код


Unit1.h:*********************************************
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TBitBtn *BitBtn3;
TImage *Image1;
TImage *Image2;
TImage *Image3;
TImage *Image4;
TImage *Image5;
TImage *Image6;
TImage *Image7;
TImage *Image8;
TImage *Image9;
TRadioButton *RadioButton1;
TRadioButton *RadioButton2;
TBevel *Bevel1;
TLabel *Label1;
TPanel *Panel1;
void __fastcall BitBtn2Click(TObject *Sender);
void __fastcall BitBtn1Click(TObject *Sender);
void __fastcall BitBtn3Click(TObject *Sender);
void __fastcall Image1Click(TObject *Sender);
void __fastcall Image2Click(TObject *Sender);
void __fastcall Image3Click(TObject *Sender);
void __fastcall Image4Click(TObject *Sender);
void __fastcall Image5Click(TObject *Sender);
void __fastcall Image6Click(TObject *Sender);
void __fastcall Image7Click(TObject *Sender);
void __fastcall Image8Click(TObject *Sender);
void __fastcall Image9Click(TObject *Sender);
void __fastcall RadioButton1Click(TObject *Sender);
void __fastcall RadioButton2Click(TObject *Sender);

private: // User declarations
char hod_ris1[10];
char hod_ris2[10];
int mas [3][3];
void initiz();
void hod_User(int ris);

void hod_Comp();
int proverka();
bool hod_kompa_func(int short &n);
void ris_hod_Comp(int short &x,int short &y);
void vigrish_User();
void vigrish_Comp();
void vigrish_Nichia();
void not_active_ramka();
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Unit2.cpp:*******************************************
//---------------------------------------------------------------------------

#include 
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
strcpy(hod_ris1,"krest.bmp");strcpy(hod_ris2,"nolik.bmp");
}

//************************************************************************************
void TForm1 :: not_active_ramka(){
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
mas[i][j]=3;
}
void TForm1::vigrish_User(){
not_active_ramka();
MessageBox(0,"Вы выиграли!!", "Сообщение",MB_OK|MB_ICONEXCLAMATION);

}

void TForm1::vigrish_Comp(){
not_active_ramka();
MessageBox(0,"Вы проиграли!!", "Сообщение",MB_OK|MB_ICONEXCLAMATION);

}

void TForm1::vigrish_Nichia(){
not_active_ramka();
MessageBox(0,"Ничья", "Сообщение",MB_OK|MB_ICONEXCLAMATION);

}
//----------------------------------------------------------------------------------

int TForm1 :: proverka(){ // Проверка поля...
int short i=0,j=0,x=0,y=0,x1=0,y1=0;

for(i=0;i<3;i++){ // на ничью
for(j=0;j<3;j++){
if(mas[i][j]!=0) x+=1;
if(mas[i][j]==0) y++;
}
if(y>0) break;
if(x==9) return -4; // возвращаем -4 , если ничья<>BR> }

// по горизонтали
for(i=0;i<3;i++){
x=0;y=0;
for(j=0;j<3;j++){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if(x==3) return -1; // возвращаем -1, если выграл игрок(невозможно)
if(y==3) return -2; // возвращаем -2 , если выграл комп

}

for(j=0;j<3;j++){ // по вертикали
x=0;y=0;
for(i=0;i<3;i++){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if(x==3) return -1; // возвращаем -1, если выграл игрок(невозможно)
if(y==3) return -2; // возвращаем -2 , если выграл комп
}
x=0;y=0;x1=0;y1=0;

for(i=0;i<3;i++){ // по наклонным
for(j=0;j<3;j++){
if(i==j){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if((i+j)==2){
if(mas[i][j]==1) x1+=1;
if(mas[i][j]==2) y1+=1;
}

}
if(x==3) return -1; // возвращаем -1, если выграл игрок(невозможно)
if(y==3) return -2; // возвращаем -2 , если выграл комп
if(x1==3) return -1; // возвращаем -1, если выграл игрок(невозможно)
if(y1==3) return -2; // возвращаем -2 , если выграл комп
}
return -3; // если ничего нет
}
//---------------------------------------------------------------------------------------

void TForm1:: ris_hod_Comp(int short &x,int short &y){
if(x==0 && y==0){Image1->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==0 && y==1){Image2->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==0 && y==2){Image3->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==0){Image4->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==1){Image5->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==2){Image6->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==0){Image7->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==1){Image8->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==2){Image9->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}

}
bool TForm1:: hod_kompa_func(int short &n){
int short i=0,j=0,i1=0,j1=0,x=0;
for(i=0;i<3;i++) // Сколько общих ходов было(в переменную "х").
for(j=0;j<3;j++)
if(mas[i][j]!=0) x++;

if(x<=2){ // Если меньше или равно 2, тогда...
i=1;j=1;
if(mas[i][j]==0){ // Если свободна "середина" , тогда ставим..

ris_hod_Comp(i,j);
return true;
}
i=0;j=0;
if(mas[i][j]==0){ // Если свободн левый верхний угол, тогда ставим

ris_hod_Comp(i,j);
return true;
}
}

//---------

for(i=0;i<3;i++){ // По горизонтали
x=0;j1=3;
for(j=0;j<3;j++){
if(mas[i][j]==n) x++;
if(mas[i][j]==0) j1=j;
if(x==2 && j1!=3){

ris_hod_Comp(i,j1);
return true;
}// if...
}// for(j...
} // for(i...

for(j=0;j<3;j++){ // По вертикали
x=0;i1=3;
for(i=0;i<3;i++){
if(mas[i][j]==n) x++;
if(mas[i][j]==0) i1=i;
if(x==2 && i1!=3){

ris_hod_Comp(i1,j);
return true;
}// if...
}// for(i...
} // for(j...

int x2=0,x1=0,i2=0,j2=0;
j1=3;j2=3;
for(i=0;i<3;i++){ // По наклонным
for(j=0;j<3;j++){
if(i==j){
if(mas[i][j]==n) x1+=1; // По "главной" наклонной
if(mas[i][j]==0) {j1=j;i1=i;}
}
if((i+j)==2){ // По "побочной " наклонной
if(mas[i][j]==n) x2+=1;
if(mas[i][j]==0) {j2=j;i2=i;}
}

if(x1==2 && j1!=3){

ris_hod_Comp(i1,j1);
return true;
}
if(j2!=3 && x2==2){

ris_hod_Comp(i2,j2);
return true;
}

} // for...
} //for...
return false; // Если ничего не удалось сделать возвращаем "ложь"
}

void TForm1::hod_Comp(){
bool hod;
int i,j;
int prov=0;

prov=proverka();
switch(prov){
case -1: {vigrish_User(); return;}
case -2: {vigrish_Comp(); return;}
case -4: {vigrish_Nichia();return;}
}

hod=hod_kompa_func(2);
if(hod==false)hod=hod_kompa_func(1);
if(hod==false){

srand((unsigned)time( NULL ));

do{

i=rand()%3;
j=rand()%3;
}
while(mas[i][j]!=0);
ris_hod_Comp(i,j);
}

prov=proverka();
switch(prov){
case -1: {vigrish_User(); return;}
case -2: {vigrish_Comp(); return;}
case -4: {vigrish_Nichia();return;}
}
}

//************************************************************************************
void TForm1::initiz(){
char hod_ris3[10];
memset(hod_ris3,0,9);
strcpy(hod_ris3,"fon0.bmp");
Image1->Picture->LoadFromFile(hod_ris3);
Image2->Picture->LoadFromFile(hod_ris3);
Image3->Picture->LoadFromFile(hod_ris3);
Image4->Picture->LoadFromFile(hod_ris3);
Image5->Picture->LoadFromFile(hod_ris3);
Image6->Picture->LoadFromFile(hod_ris3);
Image7->Picture->LoadFromFile(hod_ris3);
Image8->Picture->LoadFromFile(hod_ris3);
Image9->Picture->LoadFromFile(hod_ris3);
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
mas[i][j]=0;

}
void TForm1::hod_User(int ris){

switch(ris){
case 1:{if(mas[0][0]==0){Image1->Picture->LoadFromFile(hod_ris1);
mas[0][0]=1;break;}else return;}
case 2:{if(mas[0][1]==0){Image2->Picture->LoadFromFile(hod_ris1);
mas[0][1]=1;break;}else return;}
case 3:{if(mas[0][2]==0){Image3->Picture->LoadFromFile(hod_ris1);
mas[0][2]=1;break;}else return;}
case 4:{if(mas[1][0]==0){Image4->Picture->LoadFromFile(hod_ris1);
mas[1][0]=1;break;}else return;}
case 5:{if(mas[1][1]==0){Image5->Picture->LoadFromFile(hod_ris1);
mas[1][1]=1;break;}else return;}
case 6:{if(mas[1][2]==0){Image6->Picture->LoadFromFile(hod_ris1);
mas[1][2]=1;break;}else return;}
case 7:{if(mas[2][0]==0){Image7->Picture->LoadFromFile(hod_ris1);
mas[2][0]=1;break;}else return;} case 8:{if(mas[2][1]==0){Image8->Picture->LoadFromFile(hod_ris1);
mas[2][1]=1;break;}else return;} case 9:{if(mas[2][2]==0){Image9->Picture->LoadFromFile(hod_ris1);
mas[2][2]=1;break;}else return;}
}
hod_Comp();

}

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(BitBtn1->Caption=="Старт"){
RadioButton1->Enabled=false;
RadioButton2->Enabled=false;
BitBtn1->Caption="В меню";
Panel1->Visible=false;
initiz();
if (RadioButton1->Checked){
// ходит комп
}
return;
}

if(BitBtn1->Caption!="Старт"){
RadioButton1->Enabled=true;
RadioButton2->Enabled=true;
BitBtn1->Caption="Старт";
Panel1->Visible=true;
return;
}

// TBitmap

}

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
initiz();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
memset(hod_ris1,0,9);
memset(hod_ris2,0,9);
strcpy(hod_ris1,"krest.bmp");strcpy(hod_ris2,"nolik.bmp");

}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
memset(hod_ris1,0,9);
memset(hod_ris2,0,9);
strcpy(hod_ris1,"nolik.bmp");strcpy(hod_ris2,"krest.bmp");

}
//---------------------------------------------------------------------------



void __fastcall TForm1::Image1Click(TObject *Sender)
{
hod_User(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2Click(TObject *Sender)
{
hod_User(2);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image3Click(TObject *Sender)
{
hod_User(3);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image4Click(TObject *Sender)
{
hod_User(4);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image5Click(TObject *Sender)
{
hod_User(5);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image6Click(TObject *Sender)
{
hod_User(6);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image7Click(TObject *Sender)
{
hod_User(7);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image8Click(TObject *Sender)
{
hod_User(8);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image9Click(TObject *Sender)
{
hod_User(9);
}
//---------------------------------------------------------------------------



user posted image

3 ошибки выдаёт компилятор,
[C++ Error] Unit3.cpp(97): E2089 Identifier 'ris_hod_Comp' cannot have a type qualifier (173 строчка кода)
[C++ Error] Unit3.cpp(380): E2139 Declaration missing ; (за пределами кода)
[C++ Error] Unit3.cpp(380): E2134 Compound statement missing } (за пределами кода)
[C++ Warning] Unit3.cpp(380): W8070 Function should return a value


подскажите, укажите что исправить !!!!

Автор: MAKCim 10.3.2006, 09:29
Цитата

[C++ Error] Unit3.cpp(380): E2139 Declaration missing ; (за пределами кода)

где-то в коде забыл ;

Автор: mrBaT 10.3.2006, 09:41
MAKCim, а у вас молоко убежало smile

где не хватает, где чего пропущено и что надо исправить это дельный ответ был бы smile

Автор: Dov 10.3.2006, 11:11
Цитата(mrBaT @ 10.3.2006, 03:11 Найти цитируемый пост)
Ниже приведён код двух файлов Unit1.h и Unit1.cpp:


Цитата(mrBaT @ 10.3.2006, 03:11 Найти цитируемый пост)

75:Unit2.cpp:*******************************************


Цитата(mrBaT @ 10.3.2006, 03:11 Найти цитируемый пост)

[C++ Error] Unit3.cpp(97):
[C++ Error] Unit3.cpp(380):
[C++ Error] Unit3.cpp(380):

mrBaT, ты как-нибудь определись.

Автор: Lotrex 10.3.2006, 11:45
Ты бы нормальный код привел. Что у тебя все include обрезаны?
И по-моему, ты привел сообщения об ошибках компиляции файла unit3.cpp, а выложил код, содержащийся в unit2.cpp. smile

Автор: maxim1000 10.3.2006, 13:48
Цитата(mrBaT @ 10.3.2006, 03:11 Найти цитируемый пост)
#include

а это что такое?
#include должен быть не сам по себе - после него нужно писать имя файла, который подключается...

Автор: mrBaT 12.3.2006, 03:53
ну ребята ! ошибка не в этом же...
там с учебника .. поэтому инклуд ненаписан !
а унит3 это у себя дома на Form3 делал ..



Автор: tigger 12.3.2006, 04:31
Выкладывай исходник че пальцем в небо тыкать.

Автор: mrBaT 12.3.2006, 04:37
всмысле выкладывать программу неоткомпилированную ?

Автор: armageddon 12.3.2006, 17:30
в смысле полный код программы, а не частями

Автор: mrBaT 12.3.2006, 23:21
armageddon,
а я что и сделал там *.cpp и *.h файлы

Автор: tigger 13.3.2006, 13:29
mrBaT все файлы нужно было.

Ребята ну если он не хочет выкладывать исходники то пусть сам и разбирается как ему поможешь.

Автор: armageddon 14.3.2006, 19:43
напиши полный код программы!все файлы!
а именно:unit1, unit2,unit3
если не заметил, но у тебя ошибки только в unit3!!в строках 97 и 380
нет, ты конечно можешь его и не выкладывать, но тогда мы тебе ничем помочь не можем!

Автор: Earnest 17.3.2006, 18:59
Судя по сообщению об ошибке, скорее всего лишняя открывающая или недостающая закрывающая скобка (в предыдущей). Т.е. компилятор думает, что он еще внутри предыдущей функции. Там у тебя циклы вложенные, код без сдвигов - черт ногу сломит. Проверь скобки.

Автор: threef 22.3.2006, 21:17
Функция проверка ,тьфу, proverka, нуждается в проверке количества скобок.
Чтобы не возникало подобных ошибок придумали структурированную форму записи программного кода и оный же тип языков программирования. Не стоит все строчки начинать с первой позиции. Кстати, ты код в блокноте пишешь ? Все мало-мальски грамотные редакторы будут сдвигать текст по мере вложенности блоков , да и борландень это всегда делала по умолчанию. Если уж очень тяжело - переползай в 7-ю студию от MS, там блоки выделены сбоку плюсиками.
Так что про молоко - это у тебя самого.

Автор: threef 22.3.2006, 21:37
smile

Автор: NextAlex 23.3.2006, 09:32
Привет!
У тебя не закрыт вот этот цикл

for(i=0;i<3;i++){ // на ничью
строка 121
судя по всему скобка осталась вот здесь
if(x==9) return -4; // возвращаем -4 , если ничья<>BR> }
строка 127

Автор: mrBaT 23.3.2006, 12:17
спасибо ! сейчас посмотрю !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)