Премини към съдържанието

Препоръчан отговор


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

Първи почва човека, който играе с черните. Играта трябва да му покаже възможните позиции на дъската (според правилата) и той да си избере. Но, това му е трудното, дъската е 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" оператор, какъв друг начин да има? Влагаш цикли и проверяваш възможните ходове.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Като гледам, освен с "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 ход да ти изпише някакво съмбщение, че не може.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

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


Sent from my iPhone using Tapatalk Pro

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

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