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

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

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

Студворк — интернет-сервис помощи студентам
По заданию нужно: Написать игру крестики-нолики (шашки) с использованием С# ,С++, но мой выбор, нужно 2 программы клиент - сервер. Пока нет совершенно ничего, но при появление буду выкладывать сюда. Графическая часть не нужна, вернее по желанию.
Вопрос: Посоветуйте литературу, именно под эту задачу.
П.С. Небольшой опыт программирования есть.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2009, 10:57
Ответы с готовыми решениями:

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

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

Игра судоку (крестики-нолики)
Люди подскажите пожалуйста. Препод дал задание написать игру судоку ну типа крестики нолики. Поле 9 на 9 . Выигрывает в том случае если 5...

57
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
11.04.2009, 16:15
Вот исходник моих крестиков ноликов(C BUILDER 6). Клиентом тут есть Веб браузер(http://127.0.0.1). Графической части как таковой почти нет, добавишь если захочешь. Есть возможность играть против компа(типа сервер это бот), либо с человеком который будет сидеть на сервере. Короче разберешься если захочешь. Если что непонятно, спрашивай.
Вложения
Тип файла: rar Krestik nolik.rar (5.3 Кб, 2506 просмотров)
2
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
13.04.2009, 21:03  [ТС]
Благодарен Вам за помощь, сейчас буду разбираться , это 3 на 3 ?!
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
13.04.2009, 21:37
Ага. 3х3
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
13.04.2009, 21:49  [ТС]
Значит, будет работать только с C++ Builder 6 ?! на Висуал выходит такая ошибка: "fatal error C1083: Cannot open include file: 'vcl.h' " Переделать можно ?!
а переделать 5 на 5 ть намного сложнее, интересно , я потихоньку разберусь в этих кодах, книгу куплю.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
13.04.2009, 22:08
Да, исходник работает только на билдере. Но там, в принципе,не сложно. Главное понять идею.
В Билдере есть компонент THTTPServer, который есть сервером, а как это на визуале я даже и не знаю, так как никогда таким серьезно не занимался.
0
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
14.04.2009, 11:29
Крестики-нолики не работают
Code
1
#include <myclasses.cpp>
в проекте нету такого файла (разумеется компилятор ругается).
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.04.2009, 22:50
глянь вот сюда [cut]
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 7
25.04.2009, 12:08  [ТС]
Спасибо Отака =) Мне не дали эту прогу, в виду ее "легкости" , решил взять чат , и пишу его на Борланде, Возможно видели ... траблы уже есть =) но мне нравится Борланд
0
math4me
31.05.2009, 20:29
Привет!Срочно нужен код для крестики-нолики во флеше с комментариями!!!! SOS!!!
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
09.02.2010, 20:50
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
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
09.02.2010, 21:04
Глянь ка в эту темку:https://www.cyberforum.ru/grap... 93716.html
1
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
09.02.2010, 21:38
Otaka, Спасибо канечно, но мне нужно бота зделать, а по твоему нужно много песать у меня просто, ти только помоги бота написать, зарание спасибо
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:04
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
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:48
А что сложного? Смотришь, если почти заполнена ботовская линия, её нужно заполнить, и тогда бот выиграл.
По самому простому алгоритму, можно делать так, чтобы в случае отсутствия опасности бот пытался заполнить какую-нибудь из линий, если опасность есть, бот должен её пресечь.
Если поле пусто, можно ставить наобум(куда угодно). Если почти заполнена линия человека, нужно тоже поставить свою фишку, чтобы не дать человеку победить. Вот и все. Когда готово это, можно пробовать реализовывать всяческие вилочки, ловушки итд.
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:49
Otaka, Так это понятно а как запрограмировать сам ход компютера, а то чьото не как додуматсп не могу!!!!
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:51
Ну, например так:
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
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 21:53
Otaka, А для чего нам нужене этот метод int TForm1::TestForVictory()?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
28.02.2010, 21:56
А это проверка того, выиграл ли кто-то, но у тебя он, в принципе, уже есть, поэтому не обращай внимания на него.
1
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
28.02.2010, 22:01
Otaka, У меня еще один вопрос!!!

Добавлено через 29 секунд
У мен при компиляции компютер ход не делает!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2010, 22:01
Помогаю со студенческими работами здесь

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

Крестики нолики
Я вот написал алгоритм для крестиков ноликов, а он чегото не работает( посмотрите пожалуйста. ...

Крестики Нолики
Здравствуйте есть одна проблема нашел на этом форуме исходники к игре крестики нолики однако не получается адекватно настроить начисление...

Крестики-нолики-ошибки
Добрый день. Я вот хотел посмотреть работу игры крестики-нолики (судя по всему, речь идет о этой теме...

Код игры Крестики Нолики
Нужно пояснение каждой строчки кода которая относится к самой игре. Хочу понять на чём построена игра. С++ начал изучать недавно. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru