BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Малка програма за шах, програма, четяща PGN файл
maya7313
Публикувано на: 21-09-2018, 11:07
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 2
Регистриран на: 21.09.18



Здравейте ! Имам нужда от малко помощ. Имам задача да напиша програма на C#, която да може да чете PGN файл ред по ред и да в случай, че намери непозволен ход, да покаже съобщение.

CODE
public chessForm()
       {
           InitializeComponent();
       }

       private void chessForm_Load(object sender, EventArgs e)
       {

       }

       private void button_exit_Click(object sender, EventArgs e)
       {
           Application.Exit();
       }

       private void button_play_Click(object sender, EventArgs e)
       {
           openFileDialog1.Filter = "Text Files|*.txt";
           openFileDialog1.FileName = String.Empty;
           DialogResult result = openFileDialog1.ShowDialog();
           if (result == DialogResult.OK)
           {
               Stream fs = openFileDialog1.OpenFile();
               StreamReader reader = new StreamReader(fs);
               reader.ReadToEnd();

               
               reader.Close();
           }
       }
   }


До тук имам бутон, при чието натискане мога да отворя произволен файл.

Въпросът ми е как да направя списък с позволените ходове на всяка фигура /като отделни класове или?/ , така че при изчитане на файла да хвана грешен ход, ако има такъв?

Извинявам се, ако е глупав въпроса, но съм в процес на обучение и са ми доста неясни нещата все още
PMEmail Poster
Top
wqw
Публикувано на: 21-09-2018, 11:37
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5903
Регистриран на: 10.06.04



За всички лаици: PGN != PNG, Portable Game Notation vs Portable Network Graphics

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
maya7313
Публикувано на: 21-09-2018, 11:55
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 2
Регистриран на: 21.09.18



Сбъркала ли съм нещо?
PMEmail Poster
Top
Golden Gega
Публикувано на: 21-09-2018, 12:18
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1105
Регистриран на: 04.06.10



PMEmail Poster
Top
wqw
Публикувано на: 21-09-2018, 13:13
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5903
Регистриран на: 10.06.04



QUOTE (maya7313 @ 21-09-2018, 11:55)
Сбъркала ли съм нещо?

Не, но 3/4 от четящите форума ще си помислят че става дума за картинки на фигурите за шах. . . спестявам недоразумението.

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
LGPzzz
Публикувано на: 21-09-2018, 14:20
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 60
Регистриран на: 22.07.11



Аз бих направил един клас (или интерфейс) фигура с различни под-класове (имплементации) за всеки тип фигура. Там бих сложил метод, чиито параметри са координатите на ОТ и ДО. Този метод проверява дали фигурата може да отиде на даден квадрат.

Също така бих имал отделна функция, която проверява дали, след местенето на дадена фигура, шах позицията е валидна (например, не може да преместиш пешка, ако ти оголва царя).

Какво мислиш?
PMEmail Poster
Top
kierenski
Публикувано на: 21-09-2018, 15:01
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 296
Регистриран на: 10.01.16



Всяка фигура си има двумерен масив с позволени ходове с различни размери, като се прави изместване на центъра на масива в зависимост от текущата позиция на фигурата.

1. Прави се изместване на масива
2. Проверява се дали има позволени ходове които са извън дъската(основния масив) които трябва да бъдат премахнати от проверката и се премахват.
3. Проверяват се позволените ходове дали текущият ход съвпада със някой от останалите позволени и ако не, се извежда съобщение че има непозволен ход.

Основно се реализира с цикли и проверки (for и if).

Надявам се това да помогне.

Това мнение е било редактирано от kierenski на 21-09-2018, 15:02
PMEmail Poster
Top
Golden Gega
Публикувано на: 21-09-2018, 15:32
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1105
Регистриран на: 04.06.10



Верния отговор е малък микс от горните.
За всяка фигура има:
- цвят
- тип - пешка, кон, ...
- позиция
- дали ходовете са векторни - всички фигури, или точкови - на коня
- възможни ходове - те са изменението на текущата позиция на фигурата с deltaX/deltaY, например:
за бяла пешка:
deltaX = 0; deltaY = 1, 2
за черна пешка:
deltaX = 0; deltaY = -1, -2
за кон:
deltaX = -2, 2; deltaY = -1, +1
deltaX = -1, 1; deltaY = -2, 2
и т.н.
При ход се обхождат фигурите само от единия цвят (който играе в момента), за всяка негова фигура се обхождат всички делти и с тях се смята къде може да отиде фигурата.
Важно е да се построят правилно делтите и да се обхождат от по-малкия abs към по-големия - при достигане на невъзможна позиция да не се продължава натам. Т.е. ако царицата срещне пешка, всички ходове след нея са невъзможни. Това е за векторните ходове.
Там се проверява дали това поле е заето или излиза извън дъската.
Има и едни забавни правила - както са посочили горе - дали не попадаш в шах, правилото ан-пасан и т.н.
PMEmail Poster
Top
40oz
Публикувано на: 21-09-2018, 15:36
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 243
Регистриран на: 23.05.13



QUOTE (LGPzzz @ 21-09-2018, 14:20)
Там бих сложил метод, чиито параметри са координатите на ОТ и ДО. Този метод проверява дали фигурата може да отиде на даден квадрат.

Надявам се не караш и кола с нагласата, че си сам на пътя icon_wink.gif
PMEmail Poster
Top
kierenski
Публикувано на: 21-09-2018, 15:57
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 296
Регистриран на: 10.01.16



@Golden Gega Знаеш ли колко е трудно да направиш векторен ход на царица с делти(правиш цикъл на всяка стъпка все едно ходи пешка до достигане на ограничение, като всеки вектор си има свой цикъл)?

С масивите е по-лестно за разбиране от начинаещи и не е нужно да се слядят купчина неща.
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0