Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

 

Задача на С

Featured Replies

Здравейте съфорумци, имам като задание да имплементирам някои аспекти на играта 'Реверси'. Аспектите са: 

Първи почва човека, който играе с черните. Играта трябва да му покаже възможните позиции на дъската (според правилата) и той да си избере. Но, това му е трудното, дъската е 8х8. Трябва да се търси възможна позиция (според правилата) и трябва да няма друга фигура на това място. Ще трябва да търся по диагонал, хоризонтал и вертикал, и в двете посоки ендовременно, напред и назад, според зависи на противника фигурата къде е, и малко се замотах. Моля за помощ, искам съвети как да процедирам. 

Всичко на всичко: 

1. Искам да знам как ще е най-добре да подходя, дали с двойна 'for loop' или по някакъв друг начин. 

2. Трябва да извеждам възможните позиции на дъската на екрана за да може играчът да си избере позиция.

3. Играчите трябва да си сменят реда, т.е., първият е с черните фигури, после с белите, и така, например, в най-лошия случай до 64 хода, иначе докато някой не може да направи повече ходове. Тука малко се затруднявам.

 

Ще прикача снимка на правилата: 

Screen Shot 2018-04-16 at 9.24.53 p.m..jpg

Ето ти малко жокери:

https://www.codeproject.com/Articles/4672/Reversi-in-C

https://github.com/Divendo/reversi/tree/master/reversi

Научи се да ползваш "Google", ако искаш да се научиш да програмираш.

  • Автор

 

преди 15 часа, Raze написа:

Ето ти малко жокери:

https://www.codeproject.com/Articles/4672/Reversi-in-C

https://github.com/Divendo/reversi/tree/master/reversi

Научи се да ползваш "Google", ако искаш да се научиш да програмираш.

 

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

Търсиш, четеш, пробваш и така, във форума на stackoverflow може да получиш много помощ, но там е желателно да зададеш точен въпрос и да дадеш код, с който стигаш до някъде и ти дава грешка или не работи както трябва. Аз се занимавам с java и android от година и нещо, но с тази задача специално не съм, някой ден може и да я погледна. Къде ви ги дават тези задачи?

https://www.google.com/search?q=Reversi+in+C&ie=utf-8&oe=utf-8

  • Автор
преди 5 часа, Raze написа:

Търсиш, четеш, пробваш и така, във форума на stackoverflow може да получиш много помощ, но там е желателно да зададеш точен въпрос и да дадеш код, с който стигаш до някъде и ти дава грешка или не работи както трябва. Аз се занимавам с java и android от година и нещо, но с тази задача специално не съм, някой ден може и да я погледна. Къде ви ги дават тези задачи?

https://www.google.com/search?q=Reversi+in+C&ie=utf-8&oe=utf-8

В момента уча, и от училището ни дават такива домашни, и не, не си търся решена задачата, а малко помощ с алгоритма за намиране на позиции, помислих за " if statements", след мислене и пробване, то ще трябва да има сумати такива 60+ най-малко за да се провери всяка позиция, помислих за двойна " for loop",  ама ще излезе от границите 8х8..., опитвам се да намеря по-умно решение на проблема..., ако някой изяви желание да помогне, нека заповяда!

Аз съм ти намерил готови решения, по тях би трябвало да можеш да се ориентираш и да тестваш варианти. Акъл с фуния незнам кой ще ти налее. Ако не си видял, точно решенията, които са предложени, всички са с "if" оператор, какъв друг начин да има? Влагаш цикли и проверяваш възможните ходове.

  • Автор

Като гледам, освен с "if" друг избор нямам, ще разгледам обстойно всичко което си ми предоставил като материал, и ще намеря нещо, което да ми помогне да си завърша кода!
Благодаря за помощта.

Нямам много време и затова ще ти кажа как много лесно можеш да провериш дали на дадена позиция има фигура:

Правиш си една lookup таблица - едно масивче примерно unsigned char lookup[8][8]; и при преместване на дадена фигура записваш позицията във масива.

Примерно при преместване в позиция 5,5 записваш lookup[5][5] = '1';.После, за да провериш дали в тази позиция има нещо вместо да обхождаш целия масив просто проверяваш следното: if(lookup[5][5] == '1') значи има.

Така примерно белите ходове записваш с '1', а черните с '2'.

  • Автор

Това е добро предложение, но първо ще ми трябва да проверя дъската за валидни ходове, спрямо правилата, за момента това трябва да направя, а иначе имам масив, който записва въведените стойности за дадена позиция.


Sent from my iPhone using Tapatalk Pro

Току що прегледах набързо правилата на играта и не ми изглежда сложно за изпълнение.При всеки ход всичко се свежда до следното:

1. проверка дали на позицията на която искаш да сложиш вече има фигура

2.проверка дали това е валиден ход, тоест дали можеш да вземеш противникова фигура - това което трябва да направиш е да обходиш онази lookup таблица само за текущия ред, колона и диагоналите и да видиш дали на тях има противникови фигури и дали с този ход ги обграждаш.

Общо взето мисля, че това е всичко - не ти трябва вложен for с който да обхождаш абсолютно всички позиции.

Иначе за това дето ти показва всички възможни позиции спред мен не е добре да го правиш.Просто трябва като цъкнеш на квадратчето ако не е валидen ход да ти изпише някакво съмбщение, че не може.

  • Автор

Това е едно от правилата на зададения въпрос, по който се ориентирам как да процедирам, иначе да, и това което си написал е решение, но не покрива изискванията на зададеният ми въпрос, но мога да използвам предоставената информация и само да модифицирам леко.


Sent from my iPhone using Tapatalk Pro

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.