2010-08-26 2 views
2

У меня есть домашняя работа в C#. Я должен сделать игру (например, шашки, шахматы или что-то еще, но не tic tac toe - и я выбираю шашки/черновики) с использованием minimax и alphabeta, но я даже не знаю, с чего начать: (И у меня ограниченный срок. Я работал с C# немного в школе, но я не программист. Теперь я пытаюсь создать массив, который будет представлять собой доску и позиции ее частей Чем лучше, если информация о позициях кусков и их значениях будет сохранена с доской или если эта информация будет сохранена для каждой части отдельно. И как сделать лучший массив для этого.Шашки/черновики с использованием minimax в C#

В принципе, что я нужно посоветовать, как начать, как представлять состояние игры - основная структура программы и т.д.

+1

Ну, tic tac toe было бы проще ... – Carra

+0

Да, но Tic tac toe я не мог выбрать :( – Washa

+0

WOW! Черновики, управляемые минимаксным и альфа-бета-обрезкой как домашнее задание, в сжатые сроки. ..Есть немного сложно понять, с чего начать отвечать на этот вопрос. Вы говорите, что хотите «ответить» на C#, но вы сами не программируете на AC#. Я полагаю, вы читали и понимали статьи WikiP по минимаксному? просто googled «Drafts Programming», первый ответ был очень разумной ссылкой на кодопроект ... Также есть крупные статьи о черновиках, так как это было недавно «Solved» - в компьютере v компьютерный матч всегда заканчивается ничьей. – Adrian

ответ

1

Подсказка: используйте 2 одномерный массив, чтобы представить вашу настольную игру:

int[,] board = new int[8, 8]; 
+0

Спасибо, я уже начал с того же массива, и теперь я делаю генерацию штук на борту ... – Washa

+2

ли это должно быть 8x8 в памяти? Мужчины могут стоять только на 32 квадратах ... – Adrian

+1

Это домашнее задание, поэтому я бы не пошел на наиболее оптимизированное решение. Держите это понятным.Итак, когда вы кодируете шашки, а вы находитесь на месте 2,0, вы знаете, что можете перейти на 1,1 или 3, 1. Если вы держите его 4x4, то вы должны помнить, какая строка сдвигается в направлении и вы можете сделать ошибку намного проще. Используйте int в каждом пространстве, чтобы вы знали, что там. Например, 0 пусто. 1 - красный, 2 - красный, 11 - черный, 12 - черный король. – Dan

1

Стандартный метод для хранения состояния платы является использование bitboards.

public class Board 
{ 
    private UInt64 m_RedPieces = 0x0000000000559955; // Initial position; 
    private UInt64 m_BlackPieces = 0x9955990000000000; // Initial position; 
} 

Охлаждающая вещь о билбордах, кроме того, что они очень быстрые, заключается в том, что она значительно упрощает создание правового положения преемника. Вам все равно трудно, но с помощью битов вы можете уменьшить генерацию движения до ряда бит-операций (сдвиги, AND, OR, XOR и т. Д.).

Уверен, что в Интернете есть много ресурсов, которые имеют формулы для работы с битами.

+0

спасибо, но я думаю, что это слишком сложно для меня и моих навыков :( – Washa

+0

@Washa: Не обязательно. вам может показаться, что это проще. Например, чтобы сгенерировать все позиции преемника из начальной позиции, вы начинаете с переключения 7-битных символов «m_RedPieces» на 7 бит и XORing 'm_RedPieces', чтобы удалить квадраты, уже занятые красными фигурами. подробности здесь, но вы получите эту идею. Вы добавите все больше и больше операций, чтобы поймать другие сценарии, включая прыжки, а не перемещение в квадрат, занятый фигурами противника, и т. д. Я думаю, вы действительно найдете это легче, чем создание серии блоков 'if-else'. –

+0

Брайан, да, вы определенно правы, но я боюсь этого ... Я никогда не использую эти операции как XOR, OR и т. д. в C# или где-либо еще. Возможно, о (в уроке в школе, но не в программировании) :( – Washa

Смежные вопросы