Нова тема - стар проект.
8 отговора
166 прегледа
Нова тема - стар проект.
Понеже от няколко месеца съм зарязал проекта си "Интернет Шах", реших да го пусна тази тема. Програмчето е сглобено, работи, но ми куца проверката за валидност на ход. Не е нужно да се разработва бот за игра, трябва само да се проверява валидността на хода. Но двата ми опита да напиша нещо кратко и четливо - стигат до дълги и заплетени кодове.
То и правилата не са малко де. Изискват се доста проверки за хвърчащи неща, не е като само да се знае начина на местене на фигурите.
Хайде помислете, пък ще разнищваме алгоритмите. Масиви, тип, разположение на фигурите, обозначението им, и адресирането в масива.
----------------------------------
помислих, хареса ми, помислих пак...
То и правилата не са малко де. Изискват се доста проверки за хвърчащи неща, не е като само да се знае начина на местене на фигурите.
Хайде помислете, пък ще разнищваме алгоритмите. Масиви, тип, разположение на фигурите, обозначението им, и адресирането в масива.
----------------------------------
помислих, хареса ми, помислих пак...
Чакай, чакай
Не разбирам от VB ама като чета "Масиви, тип, разположение на фигурите, обозначението им, и адресирането в масива"
наясно ли си с останалата част от програмата? Например вътрешното представяне на дъската?
А за проверка валидността на ход толкова ли е сложно?
1 Фигурата има: поле от което е вдигната, поле на което е поставена и правило по което се движи. Правиш проверка дали хода ФИГУРА_Х(поле1, поле2) е според правилото за движение на фигурата.
2 Правиш проверка дали след хода собствения цар е под шах след изпълнение на хода.
3 ... всъщност 0 (нула) - проверка на "поле2" дали е в дъската
наясно ли си с останалата част от програмата? Например вътрешното представяне на дъската?
А за проверка валидността на ход толкова ли е сложно?
1 Фигурата има: поле от което е вдигната, поле на което е поставена и правило по което се движи. Правиш проверка дали хода ФИГУРА_Х(поле1, поле2) е според правилото за движение на фигурата.
2 Правиш проверка дали след хода собствения цар е под шах след изпълнение на хода.
3 ... всъщност 0 (нула) - проверка на "поле2" дали е в дъската
Re: Чакай, чакай
Ами, опитвах да направя възможно най-кратък и четим код. В това ми е проблема. Но все се получава нещо, което не ми харесва.
Проверка на хода означава и различни правила, които са заложени в играта "Шах". Например пешката от начална позиция може да прескочи едно поле, и да отиде направо на следващото. Но само от начална позиция. А ако това поле което прескача е "заплашено" от противникова пешка, то се нарича "бито поле", и противниковата може да вземе тази пешка, като съответно застава на това "бито поле", но това пък може да се прави САМО в следващия ход. Ако противниковата не я "вземе" веднага, то после НЕ може да го направи. Друго, ако царя е местен, или някой топ е местен, дори да е върнат на начална позиция, то не може да се прави рокада с него. Също така не може да се прави рокада, ако царя за целта трябва да прескочи "бито поле".
Друг проблем възниква при изкраване на пешка в крайна позиция на дъската. Тогава фигурата може да се смени за дама, кон, офицер или топ. Съответно трябва не само да се промени вида на картинката на екрана, а да се третира фигурата през следващите ходове като такава. Всичко това е навързано гадно когато започна да го пиша, и вече се изнервям, когато заради недомислие от моя страна се налага да променям целия замисъл за масивите и логическото "разположение" на дъската в паметта. Както ти го нарече "вътрешното представяне".
П.П. Проверка 0 според досегашния проект, поне на нивото до което го докарах не се налага, при местене фигурата не може да излезе извън игралното поле.
10х за вниманието.
П.П.2 - ето и правилата: [линк]
----------------------------------
помислих, хареса ми, помислих пак...
Проверка на хода означава и различни правила, които са заложени в играта "Шах". Например пешката от начална позиция може да прескочи едно поле, и да отиде направо на следващото. Но само от начална позиция. А ако това поле което прескача е "заплашено" от противникова пешка, то се нарича "бито поле", и противниковата може да вземе тази пешка, като съответно застава на това "бито поле", но това пък може да се прави САМО в следващия ход. Ако противниковата не я "вземе" веднага, то после НЕ може да го направи. Друго, ако царя е местен, или някой топ е местен, дори да е върнат на начална позиция, то не може да се прави рокада с него. Също така не може да се прави рокада, ако царя за целта трябва да прескочи "бито поле".
Друг проблем възниква при изкраване на пешка в крайна позиция на дъската. Тогава фигурата може да се смени за дама, кон, офицер или топ. Съответно трябва не само да се промени вида на картинката на екрана, а да се третира фигурата през следващите ходове като такава. Всичко това е навързано гадно когато започна да го пиша, и вече се изнервям, когато заради недомислие от моя страна се налага да променям целия замисъл за масивите и логическото "разположение" на дъската в паметта. Както ти го нарече "вътрешното представяне".
П.П. Проверка 0 според досегашния проект, поне на нивото до което го докарах не се налага, при местене фигурата не може да излезе извън игралното поле.
10х за вниманието.
П.П.2 - ето и правилата: [линк]
----------------------------------
помислих, хареса ми, помислих пак...
Редактирано от Щиpлиц на
Re: Чакай, чакай
Значироверка 0 си сложил в интерфейсната част, а не в логиката на програмата, така ли да разбирам?
А онези правила, които цитираш можеш да сложиш едно в процедурите които генерират ход за дадената фигура, а второ в процедури които проверяват коректността на хода за всяка фигура по отделно - пешка, цар ...
Аз бих използвал флагове които да ми маркират дали последния ход е бил на пешка или дали царя, "левия" или "десния" топ са местени.
А не знаеш ли златните правила:
1 Програмата първо се пише да работи, а после се гледа да се напише да работи добре
2 Ако програмата тръгне от първия път, значи нещо не е наред
А онези правила, които цитираш можеш да сложиш едно в процедурите които генерират ход за дадената фигура, а второ в процедури които проверяват коректността на хода за всяка фигура по отделно - пешка, цар ...
Аз бих използвал флагове които да ми маркират дали последния ход е бил на пешка или дали царя, "левия" или "десния" топ са местени.
А не знаеш ли златните правила:
1 Програмата първо се пише да работи, а после се гледа да се напише да работи добре
2 Ако програмата тръгне от първия път, значи нещо не е наред
Редактирано от ДъpвeнФилocoф на
Re: Чакай, чакай
Хахаха, правилата ме кефят. Но не винаги съм се придържал към тях. Аз съм написал интерфейса, местенето на фигурите, и начална проверка на полето в което се пуска фигурата. Така че "проверка 0" си е заложена в алгоритъма. Бих постнал кода тук, но съм се убедил, че половината не става за нищо (без да смятам онези опити за проверките). Така че трябва да променям още началния замисъл и подреждането в масивите. Записването на фигурите не е подходящо за да се сменя фигура...
Всъщност съм тръгнал по погрешен начин още в началото, затова казах, че не можем да се придържаме към правилата. Аз сложих едно и също Name на всички 32 фигури, и ги индексирах от 0 до 31. Дотук добре, всички начални проверки за "хващане" и "пускане" на фигурите стана супер, както се казва с няколко реда. Обаче не е никак удобно за определяне на типа на фигурата. Например бели пешки са с индекс от 8 до 15, черните от 16 до 23, но всяка една от тях може да стане на дама, топ, кон или офицер. Тогава става доста разкъсано, и се налагаше допълнително масив за промените.
Абе, дайте идеи и алгоритми за шах, ако имате...
----------------------------------
помислих, хареса ми, помислих пак...
Всъщност съм тръгнал по погрешен начин още в началото, затова казах, че не можем да се придържаме към правилата. Аз сложих едно и също Name на всички 32 фигури, и ги индексирах от 0 до 31. Дотук добре, всички начални проверки за "хващане" и "пускане" на фигурите стана супер, както се казва с няколко реда. Обаче не е никак удобно за определяне на типа на фигурата. Например бели пешки са с индекс от 8 до 15, черните от 16 до 23, но всяка една от тях може да стане на дама, топ, кон или офицер. Тогава става доста разкъсано, и се налагаше допълнително масив за промените.
Абе, дайте идеи и алгоритми за шах, ако имате...
----------------------------------
помислих, хареса ми, помислих пак...
Грешен подход
Не се обиждай, Щирлиц, но подхода ти е грешен. Първо трябваше да тръгнеш отвътре навън, тоест първо да напишеш модула с логиката на програмата, после модула с проверка коректността на кода и едва след това модула с интерфейса. При това да ги напишеш така, че към първите два модула да можеш да прикачиш прозволен интерфейс - текстов, графичен, интернет-връзка, игра през мрежа, разновидност на клиент-сървър технология ...
За алгоритмите - архивите пак се прецакаха нещо и едва работят, но в "Програмисти" и "Delphi" бях пуснал латото или есента на миналата година май тема подобна на твоята и знаеш ли какво ни отговориха - "Това са програмистки, а не алгоритмични форуми, ти си измисли всичко самичък и ако имаш проблеми с кодирането/реализацията на конкретен език ела и ни питаи." Или ме препратиха към шаха от примерите на Boland (или Turbo, не помня) Paskal 7.0 да погледна. И май така ще трябва да направя и аз ...
Абе идеята да не обсъждаме такива неща точно тука май наистина е добра. Темите за алгоритми наистина не са обвързани с езика и кодирането и май е по-подходящо да ги изместваме в Клуб "Информатика", така ще знаем къде какви колеги можем да намерим.
За алгоритмите - архивите пак се прецакаха нещо и едва работят, но в "Програмисти" и "Delphi" бях пуснал латото или есента на миналата година май тема подобна на твоята и знаеш ли какво ни отговориха - "Това са програмистки, а не алгоритмични форуми, ти си измисли всичко самичък и ако имаш проблеми с кодирането/реализацията на конкретен език ела и ни питаи." Или ме препратиха към шаха от примерите на Boland (или Turbo, не помня) Paskal 7.0 да погледна. И май така ще трябва да направя и аз ...
Абе идеята да не обсъждаме такива неща точно тука май наистина е добра. Темите за алгоритми наистина не са обвързани с езика и кодирането и май е по-подходящо да ги изместваме в Клуб "Информатика", така ще знаем къде какви колеги можем да намерим.
Re: Грешен подход
Ееее, това с изместването на темата в друг клуб беше направо фантастично ;о)
Аз отдавна съм наясно, че е погрешен подход. И съм спрял да се занимавам за момента. Но пък искам да го направя все пак. Идеята ми е за възможност за връзка през Интернет, игра между двама, да се напише и сървър, и да може да се кънектва към сървъра, с регистрации, точкова система, и т.н. и най-вече "Observe" да има. ;о))) ... и едно от най-важните неща!!! да е безплатно! ... Дааа, аз играех известно време в [линк], ама пък много пари искат тия. Не че ги нямам, ама как да им ги платя. Тука не сме и чували за кредитни карти... ;о)
Имам екземпъл на Бейсик за шах, но е с бот, и не мога да се ориентирам кое как е направено. ;о(( Дали кода е нечетлив, или аз не мога да го разчета.... пробвах даже с различни Fonts на VB-то си, ама пак си е същото.
----------------------------------
помислих, хареса ми, помислих пак...
Аз отдавна съм наясно, че е погрешен подход. И съм спрял да се занимавам за момента. Но пък искам да го направя все пак. Идеята ми е за възможност за връзка през Интернет, игра между двама, да се напише и сървър, и да може да се кънектва към сървъра, с регистрации, точкова система, и т.н. и най-вече "Observe" да има. ;о))) ... и едно от най-важните неща!!! да е безплатно! ... Дааа, аз играех известно време в [линк], ама пък много пари искат тия. Не че ги нямам, ама как да им ги платя. Тука не сме и чували за кредитни карти... ;о)
Имам екземпъл на Бейсик за шах, но е с бот, и не мога да се ориентирам кое как е направено. ;о(( Дали кода е нечетлив, или аз не мога да го разчета.... пробвах даже с различни Fonts на VB-то си, ама пак си е същото.
----------------------------------
помислих, хареса ми, помислих пак...
Тогаз - правило 3
Правило 3 (патент на ДФ): Когато програмата се закучи и не знаеш какво да я правиш, триеш всичко и почваш отначало.
Според учените глави - желателно е първо в текстов редактор
А за изместването на темата - идеята ми е да се разделят чисто алгоритмичните въпроси от програмистките. Един вид - трябва ми алгоритъма на пирамидално сортиране - отивам в едн клуб, сядам да го програмирам, нещо не върви по езика - отивам в друг клуб. По-чисто е, по-лесно се рови в архив, а и ако потребителите са диференцирани или поне знаят защо влизат на едното или другото място няма да тръгнат да спорят коя среда за програмиране (!!) е по-добра за пирамидална сортировка, или да си чешат езиците по общи теми, ако ми трябва нещо "езиково"...
[линк]
Според учените глави - желателно е първо в текстов редактор
А за изместването на темата - идеята ми е да се разделят чисто алгоритмичните въпроси от програмистките. Един вид - трябва ми алгоритъма на пирамидално сортиране - отивам в едн клуб, сядам да го програмирам, нещо не върви по езика - отивам в друг клуб. По-чисто е, по-лесно се рови в архив, а и ако потребителите са диференцирани или поне знаят защо влизат на едното или другото място няма да тръгнат да спорят коя среда за програмиране (!!) е по-добра за пирамидална сортировка, или да си чешат езиците по общи теми, ако ми трябва нещо "езиково"...
[линк]
Re: Тогаз - правило 3
То така добре както го казваш, но за мен няма никакъв смисъл да ходя по клубовете на другите езици. Нищо не им разбирам, и пиша само на VB (дори и за DOS). За другите участници в този клуб не мога да кажа, но все пак това е клуб за VB, и бих казал, че алгоритъма се разработва да е реализиран на VB.
Имам и сорс-код на С за шах, но е излишно да споменавам, че дори и да намеря кой да ми го разчете - не може да се ползва дори 30% от него. Е, освен ако не се намери някой велик програмист тук, дето да го препише както се преписва писмо до любимата. Но все пак това е само един интернет клуб, и май повечето от участниците са новаци в бранша. Та дори началните теми, които малко зарязах още от преди морето са за новаци. Трябва да ги запознаем със синтаксиса, декларирането, обекти, контроли и т.н. неща, за да могат да напишат поне едно "Hello world". После лесно ще се види кой за какво става, и дори екип може да сработим. Ето, един в клуба на Data.bg търси хора за разработване на игри на VB (w/DirectX). Но той е тръгнал да търси по погрешен начин. Хайде дай шанс. ;о)
----------------------------------
помислих, хареса ми, помислих пак...
Имам и сорс-код на С за шах, но е излишно да споменавам, че дори и да намеря кой да ми го разчете - не може да се ползва дори 30% от него. Е, освен ако не се намери някой велик програмист тук, дето да го препише както се преписва писмо до любимата. Но все пак това е само един интернет клуб, и май повечето от участниците са новаци в бранша. Та дори началните теми, които малко зарязах още от преди морето са за новаци. Трябва да ги запознаем със синтаксиса, декларирането, обекти, контроли и т.н. неща, за да могат да напишат поне едно "Hello world". После лесно ще се види кой за какво става, и дори екип може да сработим. Ето, един в клуба на Data.bg търси хора за разработване на игри на VB (w/DirectX). Но той е тръгнал да търси по погрешен начин. Хайде дай шанс. ;о)
----------------------------------
помислих, хареса ми, помислих пак...