Простой Го реализует функции игры в Го и восстановления партии. Во время игры или восстановления партии программа автоматически выполняет захват камней. Для лучшей совместимости с фреймворками искусственного интеллекта, такими как TensorFlow.js, программа была написана с учётом простоты использования.
Программа использует архитектуру клиентского интерфейса, основанную на HTML, Bootstrap, jQuery и TensorFlow.js. После завершения работы над интерфейсом планируется использовать Flask для серверной части, добавив NumPy, SciPy и Scikit-Learn для анализа позиций игры.
class SimpleGo {
constructor() {
this.positions = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"];
this.newWeiQi();
this.goString = {string: [], empty: []};
}
go_handler(item="B[qd]") {
var position = item.slice(2, 4);
if (this.posColor.hasOwnProperty(position)) {
return false;
} else {
this.posColor[position] = item[0];
}
var del_pos = [];
var near_pos = this.near_positions(position);
for (var npn in near_pos) {
if (this.posColor.hasOwnProperty(near_pos[npn])) {
if (this.posColor[near_pos[npn]] != this.posColor[position]) {
this.goString = {'string': [], 'empty': []};
this.go_string(near_pos[npn]);
if (this.goString['empty'].length == 0) {
for (var spn in this.goString['string']) {
if (!del_pos.includes(this.goString['string'][spn])) {
del_pos.push(this.goString['string'][spn]);
}
}
}
}
}
}
if (del_pos.length == 0) {
this.goString = {'string': [], 'empty': []};
this.go_string(position);
if (this.goString['empty'].length == 0) {
delete this.posColor[position];
} else {
this.sgf.push(item);
this.posColorList.push(JSON.parse(JSON.stringify(this.posColor)));
return true;
}
} else {
for (var d_p in del_pos) {
delete this.posColor[del_pos[d_p]];
}
this.sgf.push(item);
this.posColorList.push(JSON.parse(JSON.stringify(this.posColor)));
return true;
}
return false;
}
go_string(position) {
this.goString['string'].push(position);
var nPos = this.near_positions(position);
for (var np in nPos) {
if (this.posColor.hasOwnProperty(nPos[np])) {
if (!this.goString['string'].includes(nPos[np]) && this.posColor[nPos[np]] == this.posColor[position]) {
Для завершения перевода и корректной работы кода, необходимо также перевести последнюю часть метода go_string
:
this.go_string(nPos[np]);
}
}
}
}
Полностью:
#### Основные логические конструкции игры в го, JavaScript код
class SimpleGo { constructor() { this.positions = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"]; this.newWeiQi(); this.goString = {string: [], empty: []}; }
go_handler(item="B[qd]") { var position = item.slice(2, 4); if (this.posColor.hasOwnProperty(position)) { return false; } else { this.posColor[position] = item[0]; } var del_pos = []; var near_pos = this.near_positions(position); for (var npn in near_pos) { if (this.posColor.hasOwnProperty(near_pos[npn])) { if (this.posColor[near_pos[npn]] != this.posColor[position]) { this.goString = {'string': [], 'empty': []}; this.go_string(near_pos[npn]); if (this.goString['empty'].length == 0) { for (var spn in this.goString['string']) { if (!del_pos.includes(this.goString['string'][spn])) { del_pos.push(this.goString['string'][spn]); } } } } } } if (del_pos.length == 0) { this.goString = {'string': [], 'empty': []}; this.go_string(position); if (this.goString['empty'].length == 0) { delete this.posColor[position]; } else { this.sgf.push(item); this.posColorList.push(JSON.parse(JSON.stringify(this.posColor))); return true; } } else { for (var d_p in del_pos) { delete this.posColor[del_pos[d_p]]; } this.sgf.push(item); this.posColorList.push(JSON.parse(JSON.stringify(this.posColor))); return true; } return false; }
go_string(position) { this.goString['string'].push(position); var nPos = this.near_positions(position); for (var np in nPos) { if (this.posColor.hasOwnProperty(nPos[np])) { if (!this.goString['string'].includes(nPos[np]) && this.posColor[nPos[np]] == this.posColor[position]) { this.go_string(nPos[np]); } } } }
``````markdown
#### Моделирование базовой логики игры Го на Python, ветка "python3.tk"
```python
class WeiQi:
def __init__(self):
self.positions = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"]
self.newWeiQi()
self.__goString = {'string': set(), 'empty': set()}
def go_handler(self, item="B[pd]"):
position = item[2:4]
if position not in self.posColor:
self.posColor[position] = item[0]
delPositions = set()
for nPos in self.near_positions(position):
if nPos in self.posColor and self.posColor[nPos] != self.posColor[position]:
self.__goString = {'string': set(), 'empty': set()}
self.go_string(nPos)
if len(self.__goString['empty']) == 0:
delPositions.update(self.__goString['string'])
if len(delPositions) == 0:
self.__goString = {'string': set(), 'empty': set()}
self.go_string(position)
if len(self.__goString['empty']) == 0:
del self.posColor[position]
else:
self.sgf.append(item)
self.posColorList.append(copy.deepcopy(self.posColor))
return True
else:
for dPos in delPositions:
del self.posColor[dPos]
## Участие в проекте
1. Создайте форк этого репозитория
2. Создайте новую ветку `Feat_xxx`
3. Подтвердите изменения
4. Создайте запрос на слияние
```### Функции
1. Используйте Readme_XXX.md для поддержки различных языков, например Readme_en.md, Readme_ru.md
2. Официальный блог Gitee [blog.gitee.com](https://blog.gitee.com)
3. Вы можете найти лучшие открытые проекты на Gitee по адресу [https://gitee.com/explore](https://gitee.com/explore)
4. [GVP](https://gitee.com/gvp) — это сокращение от "Gitee Most Valuable Open Source Projects", что означает лучшие открытые проекты на платформе Gitee
5. Официальная документация Gitee доступна по адресу [https://gitee.com/help](https://gitee.com/help)
6. Категория "Обложка Gitee" представляет собой раздел, где представлены участники Gitee [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )