Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.98/140: Рейтинг темы: голосов - 140, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
1

Сеть, игра "Крестики-нолики"

11.04.2009, 10:57. Показов 27231. Ответов 57
Метки нет (Все метки)

По заданию нужно: Написать игру крестики-нолики (шашки) с использованием С# ,С++, но мой выбор, нужно 2 программы клиент - сервер. Пока нет совершенно ничего, но при появление буду выкладывать сюда. Графическая часть не нужна, вернее по желанию.
Вопрос: Посоветуйте литературу, именно под эту задачу.
П.С. Небольшой опыт программирования есть.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2009, 10:57
Ответы с готовыми решениями:

С помощью каких компонентов лучше написать самую простую игру "Крестики-нолики"?
Подскажите пожалуйста с помощу каких компонентов лутше написать самую простую игру крестики-нолики

Игра крестики-нолики
как сделать так чтобы после окнчания игры в отдельном окне выводилось сообщение кто победил или...

Игра Крестики-нолики
Всем привет. Сделал игру Крестики-нолики на консоли, хотел бы узнать можно ее как-нибудь улучшить,...

Игра судоку (крестики-нолики)
Люди подскажите пожалуйста. Препод дал задание написать игру судоку ну типа крестики нолики. Поле...

57
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
11.04.2009, 16:15 2
Вот исходник моих крестиков ноликов(C BUILDER 6). Клиентом тут есть Веб браузер(http://127.0.0.1). Графической части как таковой почти нет, добавишь если захочешь. Есть возможность играть против компа(типа сервер это бот), либо с человеком который будет сидеть на сервере. Короче разберешься если захочешь. Если что непонятно, спрашивай.
Вложения
Тип файла: rar Krestik nolik.rar (5.3 Кб, 2438 просмотров)
2
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
13.04.2009, 21:03  [ТС] 3
Благодарен Вам за помощь, сейчас буду разбираться , это 3 на 3 ?!
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
13.04.2009, 21:37 4
Ага. 3х3
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
13.04.2009, 21:49  [ТС] 5
Значит, будет работать только с C++ Builder 6 ?! на Висуал выходит такая ошибка: "fatal error C1083: Cannot open include file: 'vcl.h' " Переделать можно ?!
а переделать 5 на 5 ть намного сложнее, интересно , я потихоньку разберусь в этих кодах, книгу куплю.
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
13.04.2009, 22:08 6
Да, исходник работает только на билдере. Но там, в принципе,не сложно. Главное понять идею.
В Билдере есть компонент THTTPServer, который есть сервером, а как это на визуале я даже и не знаю, так как никогда таким серьезно не занимался.
0
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
14.04.2009, 11:29 7
Крестики-нолики не работают
Код
#include <myclasses.cpp>
в проекте нету такого файла (разумеется компилятор ругается).
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.04.2009, 22:50 8
глянь вот сюда [cut]
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
25.04.2009, 12:08  [ТС] 9
Спасибо Отака =) Мне не дали эту прогу, в виду ее "легкости" , решил взять чат , и пишу его на Борланде, Возможно видели ... траблы уже есть =) но мне нравится Борланд
0
math4me
31.05.2009, 20:29 10
Привет!Срочно нужен код для крестики-нолики во флеше с комментариями!!!! SOS!!!
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
09.02.2010, 20:50 11
Otaka, Привет я написал крестики нолики но я хочу добавить интелект моей игре, подскажи как можно замутить это!!!

Добавлено через 9 минут
Вот код моей игры он простенький и я хлчу добавить интелект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void __fastcall TForm1::a1Click(TObject *Sender)
{
int diya=1;
dynamic_cast<TSpeedButton*>(Sender)->Enabled=false;
if ((diya%1==0)&&(diya%2==0)){
dynamic_cast<TSpeedButton*>(Sender)->Caption="O";
dynamic_cast<TSpeedButton*>(Sender)->Tag=2;}
else{
dynamic_cast<TSpeedButton*>(Sender)->Caption="X";
dynamic_cast<TSpeedButton*>(Sender)->Tag=1;}
diya++;
AnsiString name=dynamic_cast<TSpeedButton*>(Sender)->Name;
if(name=="a1"||name=="a2"||name=="a3"){
if((a1->Tag==a2->Tag)&&(a2->Tag==a3->Tag))
Image1->Visible=true;}
if(name=="a4"||name=="a5"||name=="a6"){
if((a4->Tag==a5->Tag)&&(a5->Tag==a6->Tag))
Image1->Visible=true;}
if(name=="a7"||name=="a8"||name=="a9"){
if((a7->Tag==a8->Tag)&&(a8->Tag==a9->Tag))
Image1->Visible=true;}
if(name=="a1"||name=="a4"||name=="a7"){
if((a1->Tag==a4->Tag)&&(a4->Tag==a7->Tag))
Image1->Visible=true;}
if(name=="a2"||name=="a5"||name=="a8"){
if((a2->Tag==a5->Tag)&&(a5->Tag==a8->Tag))
Image1->Visible=true;}
if(name=="a3"||name=="a6"||name=="a9"){
if((a3->Tag==a6->Tag)&&(a6->Tag==a9->Tag))
Image1->Visible=true;}
if(name=="a1"||name=="a5"||name=="a9"){
if((a1->Tag==a5->Tag)&&(a5->Tag==a9->Tag))
Image1->Visible=true;}
if(name=="a3"||name=="a5"||name=="a7"){
if((a3->Tag==a5->Tag)&&(a5->Tag==a7->Tag))
Image1->Visible=true;}
}
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
09.02.2010, 21:04 12
Глянь ка в эту темку:https://www.cyberforum.ru/grap... 93716.html
1
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
09.02.2010, 21:38 13
Otaka, Спасибо канечно, но мне нужно бота зделать, а по твоему нужно много песать у меня просто, ти только помоги бота написать, зарание спасибо
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:04 14
Otaka, Привет можеш мне подсказать принцип работи бота вот код моих крестиков ноликов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Byte pole[3][3];
String vari[3]={" ","X","O"};
Byte turn=1;
Graphics::TBitmap *bmp1[3];
int intellect;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
bmp1[0]= new Graphics::TBitmap;
bmp1[1]= new Graphics::TBitmap;
bmp1[2]= new Graphics::TBitmap;
bmp1[0]->LoadFromFile("p.bmp");
bmp1[1]->LoadFromFile("k.bmp");
bmp1[2]->LoadFromFile("n.bmp");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender){klik(1);}
void __fastcall TForm1::Image2Click(TObject *Sender){klik(2);}
void __fastcall TForm1::Image3Click(TObject *Sender){klik(3);}
void __fastcall TForm1::Image4Click(TObject *Sender){klik(4);}
void __fastcall TForm1::Image5Click(TObject *Sender){klik(5);}
void __fastcall TForm1::Image6Click(TObject *Sender){klik(6);}
void __fastcall TForm1::Image7Click(TObject *Sender){klik(7);}
void __fastcall TForm1::Image8Click(TObject *Sender){klik(8);}
void __fastcall TForm1::Image9Click(TObject *Sender){klik(9);}
//---------------------------------------------------------------------------
void TForm1::vivod()
{
  for (int k=0;k<3;k++) {
  if (pole[0][0]==k) Form1->Canvas->Draw(10,10,bmp1[k]);
  if (pole[0][1]==k) Form1->Canvas->Draw(110,10,bmp1[k]);
  if (pole[0][2]==k) Form1->Canvas->Draw(210,10,bmp1[k]);
  if (pole[1][0]==k) Form1->Canvas->Draw(10,110,bmp1[k]);
  if (pole[1][1]==k) Form1->Canvas->Draw(110,110,bmp1[k]);
  if (pole[1][2]==k) Form1->Canvas->Draw(210,110,bmp1[k]);
  if (pole[2][0]==k) Form1->Canvas->Draw(10,210,bmp1[k]);
  if (pole[2][1]==k) Form1->Canvas->Draw(110,210,bmp1[k]);
  if (pole[2][2]==k) Form1->Canvas->Draw(210,210,bmp1[k]);
  } 
}
//-----------------------------------------------
void TForm1::klik(int n)
{
if (pole[0][n-1]==0) pole[0][n-1]=turn;
if (turn==1) turn=2;
else turn=1;
vivod();
if (prov()==1) return;
}
//----------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
Application->Terminate();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
for (int i=0;i<3;i++) {
  for (int j=0;j<3;j++) {
    pole[i][j]=0;
    }
  }
vivod();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if (X>=10&&X<=100&&Y>=10&&Y<=100)    klik(1);
if (X>=110&&X<=200&&Y>=10&&Y<=100)   klik(2);
if (X>=210&&X<=300&&Y>=10&&Y<=100)   klik(3);
if (X>=10&&X<=100&&Y>=110&&Y<=200)   klik(4);
if (X>=110&&X<=200&&Y>=110&&Y<=200)  klik(5);
if (X>=210&&X<=300&&Y>=110&&Y<=200)  klik(6);
if (X>=10&&X<=100&Y>=210&&Y<=300)    klik(7);
if (X>=110&&X<=200&&Y>=210&&Y<=300)  klik(8);
if (X>=210&&X<=300&&Y>=210&&Y<=300)  klik(9);        
}
//---------------------------------------------------------------------------
int TForm1::prov()
{
for(int i=0;i<3;i++){
  if(pole[i][0]==pole[i][1]&&pole[i][1]==pole[i][2]&&pole[i][2])
  {over(pole[i][2]);return 1;}  //рядок
 }
 for(int i=0;i<3;i++){
  if(pole[0][i]==pole[1][i]&&pole[1][i]==pole[2][i]&&pole[2][i])
  {over(pole[2][i]);return 1;}  //стопчик
 }
 if(pole[0][0]==pole[1][1]&&pole[1][1]==pole[2][2]&&pole[2][2])
   {over(pole[2][2]);return 1;} //діагональ
 if(pole[0][2]==pole[1][1]&&pole[1][1]==pole[2][0]&&pole[2][0])
   {over(pole[2][0]);return 1;}
return 0;
}
//------------------------------------------------------------------------
void TForm1::over(int n)
{
if (n==1) ShowMessage("Победили хрестики!");
if (n==2) ShowMessage("Побелили нолики!");
if (n==3) ShowMessage("Нечья...");
//if (n==1&&n==2&&n==3) turn=0;
}
//---------------------------------------------------------------------------
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:48 15
А что сложного? Смотришь, если почти заполнена ботовская линия, её нужно заполнить, и тогда бот выиграл.
По самому простому алгоритму, можно делать так, чтобы в случае отсутствия опасности бот пытался заполнить какую-нибудь из линий, если опасность есть, бот должен её пресечь.
Если поле пусто, можно ставить наобум(куда угодно). Если почти заполнена линия человека, нужно тоже поставить свою фишку, чтобы не дать человеку победить. Вот и все. Когда готово это, можно пробовать реализовывать всяческие вилочки, ловушки итд.
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:49 16
Otaka, Так это понятно а как запрограмировать сам ход компютера, а то чьото не как додуматсп не могу!!!!
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:51 17
Ну, например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
TForm1::HodComputera()
{
 
 //Поиск ситуаций, когда один ход сразу же принесет победу (0 0)
 for(int i=0;i<3;i++)
 {
 if((Game[0][i]==2)&&(Game[1][i]==2)&&(Game[2][i]==0)){Game[2][i]=2;return 0;} //110
 else
 if((Game[1][i]==2)&&(Game[2][i]==2)&&(Game[0][i]==0)){Game[0][i]=2;return 0;} //011
 else
 if((Game[0][i]==2)&&(Game[2][i]==2)&&(Game[1][i]==0)){Game[1][i]=2;return 0;} //101
 else                                                                    //вертикаль
 if((Game[i][0]==2)&&(Game[i][1]==2)&&(Game[i][2]==0)){Game[i][2]=2;return 0;} //110
 else
 if((Game[i][1]==2)&&(Game[i][2]==2)&&(Game[i][0]==0)){Game[i][0]=2;return 0;} //011
 else
 if((Game[i][0]==2)&&(Game[i][2]==2)&&(Game[i][1]==0)){Game[i][1]=2;return 0;} //101
 }                                                                           //Диагональ слева направо
 if((Game[0][0]==2)&&(Game[1][1]==2)&&(Game[2][2]==0)){Game[2][2]=2;return 0;} //110
 else
 if((Game[1][1]==2)&&(Game[2][2]==2)&&(Game[0][0]==0)){Game[0][0]=2;return 0;} //011
 else
 if((Game[0][0]==2)&&(Game[2][2]==2)&&(Game[1][1]==0)){Game[1][1]=2;return 0;} //101
 else                                                                        //Диагональ справа на лево
 if((Game[2][0]==2)&&(Game[1][1]==2)&&(Game[0][2]==0)){Game[0][2]=2;return 0;} //110
 else
 if((Game[1][1]==2)&&(Game[0][2]==2)&&(Game[2][0]==0)){Game[2][0]=2;return 0;} //011
 else
 if((Game[2][0]==2)&&(Game[0][2]==2)&&(Game[1][1]==0)){Game[1][1]=2;return 0;} //101
 
 
 
//Поиск опасных ситуаций  типа XX
 for(int i=0;i<3;i++)
 {
 if((Game[0][i]==1)&&(Game[1][i]==1)&&(Game[2][i]==0)){Game[2][i]=2;return 0;} //110
 else
 if((Game[1][i]==1)&&(Game[2][i]==1)&&(Game[0][i]==0)){Game[0][i]=2;return 0;} //011
 else
 if((Game[0][i]==1)&&(Game[2][i]==1)&&(Game[1][i]==0)){Game[1][i]=2;return 0;} //101
 else                                                                    //вертикаль
 if((Game[i][0]==1)&&(Game[i][1]==1)&&(Game[i][2]==0)){Game[i][2]=2;return 0;} //110
 else
 if((Game[i][1]==1)&&(Game[i][2]==1)&&(Game[i][0]==0)){Game[i][0]=2;return 0;} //011
 else
 if((Game[i][0]==1)&&(Game[i][2]==1)&&(Game[i][1]==0)){Game[i][1]=2;return 0;} //101
 }                                                                           //Диагональ слева направо
 if((Game[0][0]==1)&&(Game[1][1]==1)&&(Game[2][2]==0)){Game[2][2]=2;return 0;} //110
 else
 if((Game[1][1]==1)&&(Game[2][2]==1)&&(Game[0][0]==0)){Game[0][0]=2;return 0;} //011
 else
 if((Game[0][0]==1)&&(Game[2][2]==1)&&(Game[1][1]==0)){Game[1][1]=2;return 0;} //101
 else                                                                        //Диагональ справа на лево
 if((Game[2][0]==1)&&(Game[1][1]==1)&&(Game[0][2]==0)){Game[0][2]=2;return 0;} //110
 else
 if((Game[1][1]==1)&&(Game[0][2]==1)&&(Game[2][0]==0)){Game[2][0]=2;return 0;} //011
 else
 if((Game[2][0]==1)&&(Game[0][2]==1)&&(Game[1][1]==0)){Game[1][1]=2;return 0;} //101
 
 if(Game[1][1]==0){Game[1][1]=2;return 0;}
for(int j=0;j<3;j++)
        for(int i=0;i<3;i++)
                if(Game[i][j]==0){Game[i][j]=2;return 0;}
return 0;
}
 
int TForm1::TestForVictory()
{
for(int i=0;i<3;i++)
{
if((Game[i][0]==1)&&(Game[i][1]==1)&&(Game[i][2]==1))
{ViktoryLine1=Point(i,0);ViktoryLine2=Point(i,2);return 1;}
 
if((Game[0][i]==1)&&(Game[1][i]==1)&&(Game[2][i]==1))
{ViktoryLine1=Point(0,i);ViktoryLine2=Point(2,i);return 1;}
 
if((Game[i][0]==2)&&(Game[i][1]==2)&&(Game[i][2]==2))
{ViktoryLine1=Point(i,0);ViktoryLine2=Point(i,2);return 2;}
 
if((Game[0][i]==2)&&(Game[1][i]==2)&&(Game[2][i]==2))
{ViktoryLine1=Point(0,i);ViktoryLine2=Point(2,i);return 2;}
}
 
if((Game[0][0]==1)&&(Game[1][1]==1)&&(Game[2][2]==1))
{ViktoryLine1=Point(0,0);ViktoryLine2=Point(2,2);return 1;}
if((Game[2][0]==1)&&(Game[1][1]==1)&&(Game[0][2]==1))
{ViktoryLine1=Point(2,0);ViktoryLine2=Point(0,2);return 1;}
 
if((Game[0][0]==2)&&(Game[1][1]==2)&&(Game[2][2]==2))
{ViktoryLine1=Point(0,0);ViktoryLine2=Point(2,2);return 2;}
if((Game[2][0]==2)&&(Game[1][1]==2)&&(Game[0][2]==2))
{ViktoryLine1=Point(2,0);ViktoryLine2=Point(0,2);return 2;}
 
if(!EndOfGame)
{bool err=false;
for(int j=0;j<3;j++)
        for(int i=0;i<3;i++)
                if(Game[i][j]==0)err=true;
 
if(err==false)return 3;
}
return 0;
}
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:53 18
Otaka, А для чего нам нужене этот метод int TForm1::TestForVictory()?
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:56 19
А это проверка того, выиграл ли кто-то, но у тебя он, в принципе, уже есть, поэтому не обращай внимания на него.
1
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 22:01 20
Otaka, У меня еще один вопрос!!!

Добавлено через 29 секунд
У мен при компиляции компютер ход не делает!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2010, 22:01

Не могу продумать цикл. Игра крестики нолики.
Здраствуйте. Игра крестики нолики поле 9 на 9 победа возникает если 5 крестиков идут подряд не могу...

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку &quot;Новая игра&quot; игра начиналась заново? unit1.cpp void...

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application-&gt;MessageBox(L&quot;Text&quot;, L&quot;Caption&quot;,...

Игра "пятнашки" - адаптировать готовый код к новому проекту
Помогите или объясните как создать в форме эту игру по этому коду: Fifteen.cpp...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru