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

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

11.04.2009, 10:57. Показов 29780. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru