ды уже разобрался к чему всю эту хрень писал
и даже понял че делать дальше, на чем я собственно остановился
только появилось желание все таки переписать......просто по другому на это посмотрел main.txt
Ды вродь нормальный код, хотя С++ я не знаю, один хрен всё примерно понятно...
Если считаешь, что напишешь лучше и грамотнее - пиши, конечно, по новой. Ничего плохого в этом нету, лучше во всё вникнешь, проще будет. Со 2-го раза писать будет уже проще и быстрее...
Писать, конечно, желательно как можно понятнее для себя, правда, не всегда это возможно)) Забивать ни на чо не надо только[Ответ]
DeniSS1 18:23 01.03.2008
Каменты нужно ставить, причём в процессе написания, потому как они для себя! Вот я три дня не заглядывал в свои шашки, сегодня заглянул и через 5 минут разобрался. [Ответ]
Gillbert 22:03 01.03.2008
Ды кому как удобнее, тот так и пишет. Я привык писать вообще почти без каментов (еще с бейсика на ZX-spectrum), ну и ничего, живой... Если код нужно будет передавать кому-то то да, уже каменты по-любому нужны.. Главное чтоб результат был, в конце-концов, а не у кого код красивее...
[Ответ]
Gillbert 22:31 01.03.2008
Ну в этом я, конечно, согласен, СВОЙ код понимать необходимо, но для этого каменты опять же часто бывают и не нужны...
И всё же результат важнее, можно писать красиво, а толку ноль[Ответ]
DeniSS1 09:41 02.03.2008
Gillbert, такой вопрос - как у тебя получилось из ОДНОГО файла с 8-ю шашками слелать 8 шашек в РАЗНЫХ местах? Оч. надо, а то я задолбался "распиливать" bmp-файлы.
Ещё один вопрос ко всем: у меня в программе нет таких строк:
Сообщение от :
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
Как я понимаю, у меня очень простой каркас. А эта строка мне нужна для того, чтобы запретить изменеие размера окна.
Куда их вставить и главное - как они работают?
[Ответ]
Gillbert 13:06 02.03.2008
Сообщение от DeniSS1:
Gillbert, такой вопрос - как у тебя получилось из ОДНОГО файла с 8-ю шашками слелать 8 шашек в РАЗНЫХ местах?
Ну это уже вопрос языка, в С++ всё равно это делается по-другому, я не знаю как... Я думаю что тоже несложно, разбивание картинки со спрайтами на части очень часто встречается, как в играх, там и разных прогах, например, для отображения скинов.
Сообщение от DeniSS1:
Ещё один вопрос ко всем: у меня в программе нет таких строк
Эта строка, по-моему, вообще-то и создаёт окно. Если у тебя её нет (странно), значит ты создаёшь окно посредством чего-то. Вот в том месте и надо копать. Я на С++ делал ради интереса простенькое приложение на OpenGL (ну так, по книжке), и там эта строка была, и как раз она создавала окно...
Она в функции BOOL InitInstance вначале там должна быть, если ты создавал прогу как Windows Application.
[Ответ]
Gillbert 20:19 02.03.2008
Если всё равно не получается по поводу размеров окна - может тогда код выложишь?.. Просто всё зависит от того каким хреном у тебя окно создается...
[Ответ]
struct CheeseList
{
int move[4];
CheeseList* pNext;
};
class ai1{
/*
здесь будет код...
*/
public:
int getmove(CheeseList* pCheeseList){
/*
здесь тоже будет код....
*/
};
};
int pole[8][8];
void DrawActClet();
AUX_RGBImageRec* image;
int colshashec=16;
int i;
int CACx; int CACy; // координаты активной клетки
int CAFx=-1; int CAFy; // координаты активной фигуры
double CorxK[24][2];
double CoryD[24][2];
glRasterPos2d(-0.5,-0.5); // нижний левый угол
glPixelZoom(1,1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // выравнивание
glDrawPixels(image->sizeX, image->sizeY, // ширина и высота
GL_RGB, GL_UNSIGNED_BYTE, // формат и тип
image->data);
Блин, 2 часа думал над такой, казалось бы, фигнёй...
Вот строка создающая окно: auxInitWindow( "Шашки" );
Перед этим aux принимает еще несколько параметров, но просмотрев glaux.h, я что-то так ничего связанного с изменением типа окна не нашёл Может, плохо смотрел? Просто очень странно, что aux создаёт окно, и мы почти ничего о типе этого окна ему сказать не можем...
Но aux хотя бы возвращает дескриптор окна, так что уже после создания можно поменять его, так сказать, тип...
Вообщем, ближе к делу:
Строчку
Сообщение от :
auxInitPosition( 50, 10, 400, 400);
убираем нахрен, она не понадобиться. Всё равно надо будет потом вручную установить размер окна, чтоб не было глюков после изменения его типа.
После auxInitWindow( "Шашки" ); добавляем:
Сообщение от :
HWND hWnd=auxGetHWND(); //узнаем дескриптор
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE)-WS_MAXIMIZEBOX-WS_THICKFRAME); //меняем тип (стиль?) окна
MoveWindow(hWnd,50,50,400,400,true); //И уже здесь устанавливаем нужную позицию и размер
И еще: Если перемещение/взрыв/etc шашек делать анимированным, хранить шашки всё же будет удобнее в массиве 1..24, элементы которого - записи из нужных полей. Список ходов для AI - хранить само собой.
Я просто не понял что такое "double CorxK[24][2]; double CoryD[24][2];", но думаю это здесь не очень в тему...
У меня в тесте элементом массива получилась запись из следующих хреней (код дельфи, но, я думаю, все понятно):
Black: Boolean; //Ну это понятно
Img: Byte; //Спрайт, который на данный момент использует шашка. Это либо дамка (черная или белая), либо обычная шашка (черн или бел), либо взрыв (опять же, чёрн или бел).
x,y: Byte; //Игровые координаты шашки на поле (которые от 1 до 8)
RealX,RealY: integer; //Настоящие координаты шашки на экране. При "полёте" шашки используются как центр эллипса, а сама шашка движется по синусоиде относительно этого центра
ddx,ddy: integer; //Это используется только при перемещении шашки, это радиусы эллипса, по которому движется шашка в "полёте"
Dead: boolean; //Убита ли шашка
Anim: boolean; //Находится ли шашка в режиме анимации. Лучше использовать byte, если анимаций несколько, я просто сначала не подумал...
Angle: Single; //Используется при полёте шашки, изменяется от 0 до 3.14 с небольшим шагом
Damka: boolean; //Это понятно
[Ответ]
Yandex 09:37 03.03.2008
Сообщение от :
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd,GWL_STYLE) - WS_MAXIMIZEBOX - WS_THICKFRAME);
Вместо минусов надо использовать Or. Поищи в исходниках VCL (для версии Delphi > Professional исходники идут в комплекте), как надо.
По сырцам: имхо слишком много камментов и хреновые имена переменных =)
[Ответ]
Gillbert 18:33 03.03.2008
Yandex, Угу, запусти Microsoft Visual C++ и попробуй поставить Or вместо минусов... И причём тут дельфи, проблема вообще в C++, в частности в стиле окна, которое создаеца автоматом в aux... Хотя, не спорю, WinApi он и в африке...
Вообще-то данный код прекрасно работает, если знаете способ лучше (по поводу aux окна) - может всё-таки напишете КАК надо (я уж стараюсь как можно подробнее), а не посылать в дебри всякие... DeniSS1, как там с игрой? С окном всё получилось? Когда бетка бут?[Ответ]
Yandex 09:16 04.03.2008
Тьфу, че та я не пойму на каком языке кто пишет. Если С, то палка должна быть, т.е. чтобы добавить/убрать стиль, используется такая вот конструкция
Сообщение от :
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) | WS_THICKFRAME);
---
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_THICKFRAME);
Хотя "-" никто не запрещает. Хм, он мне даже больше нравится [Ответ]
Прочитал эту тему, и вот решил помочь. К воскресению или понедельнику представлю свой черновой вариант ИИ для этих шашек, половина кода уже готова.
[Ответ]
Yandex 18:51 07.03.2008
Кстати о SetWindowLong.
Тока что получил граблями от MS в пятак. Если внимательно читать MSDN, то там написано, что
Сообщение от :
Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly.
Т.е. Надо еще вот такой вызов делать после SetWindowLong
Сообщение от :
etWindowPos (hMainWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
От плюсов и минусов рекомендую отказаться, т.к. допустим у нас окно уже имело WS_THICKFRAME, а мы делаем ему стиль - GetWindowLong(hWnd, GWL_STYLE) + WS_THICKFRAME, то в итоге получим хрень.
[Ответ]
Gillbert 03:32 08.03.2008
Сообщение от Yandex:
Т.е. Надо еще вот такой вызов делать после SetWindowLong
Дык, блин, я ж поэтому и написал что "Всё равно надо будет потом вручную установить размер окна, чтоб не было глюков после изменения его типа.", т.е. для этого я и писал "MoveWindow(hWnd,50,50,400,400,true);" - это и равнозначно, в принципе, вашему SetWindowPos. Потому что глюки были дейтствительно сразу заметны, без всякого MSDN (увидеть бы хоть раз что это такое).
Насчёт минусов отчасти согласен, но т.к. aux создаёт всегда (или я дурак?) окно одного стиля, минус тут не повредит никак. И еще потому что я не знал как это записать в C++, но очень хотелось помочь, вопрос был поставлен конкретно, а остальные вообще молчали в тряпочку...
[Ответ]
xxx-men 07:26 08.03.2008
Сообщение от Gillbert:
Насчёт минусов отчасти согласен
а мне минус тож понравился..... что то из раздела "аццкий asm код"[Ответ]
Yandex 21:59 08.03.2008
Gillbert, размеры ни причем. У меня бажило с тем, что скролл добавлялся и убирался как то странно (вначале я думал, что это мой баг).
[Ответ]
Gillbert 22:27 08.03.2008
Сообщение от Yandex:
Gillbert, размеры ни причем.
Ды я тоже не про размеры говорил, а как раз про баги, которые возникают после SetWindowLong, если после этого ничего с окном не делать...
Я ж написал чётко
Сообщение от Gillbert:
"MoveWindow(hWnd,50,50,400,400,true);" - это и равнозначно, в принципе, вашему SetWindowPos
Пусть это не совсем равнозначно, но происходит то что нужно, тот самый FRAMECHANGED
Вообщем, проехали, ждём альфа/бета версий гуя или ИИ....
[Ответ]
максим2007 19:23 10.03.2008
Мой ИИ готов пока на 60-70%. Придётся подождать ещё пару дней.
[Ответ]
Nec 21:10 11.03.2008
чот Денис долго делает ,уже наверно недели 2 прошло после его последнего обещания[Ответ]
максим2007 15:10 13.03.2008
Пока выложу недоделаную версию.
В ней два рандомных ИИ сражаются до последней шашки. Через несколько дней будет полноценная версия.
И такой вопрос: если шашка бьёт несколько вражеских шашек за один ход и на однм из этапов попадает на последнюю строку доски, то она остаётся шашкой или превращается в дамку?
Изображения