0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 9
1

Разработать программу для игры "Ним"

09.04.2014, 22:46. Показов 1678. Ответов 8
Метки нет (Все метки)

очень прошу, помогите, пожалуйста, разработать программу для игры «Ним».В игре используются спички, разложенные в N кучек. Игроки поочередно берут из любой кучки произвольное число спичек (можно все). Побеждает игрок, который берет последнюю спичку.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2014, 22:46
Ответы с готовыми решениями:

Разработать программу для игры "Калах"
Пожалуйста, помогите реализовать а Лиспе алгоритм игры "калах". В калах играют на доске с двумя...

Разработать программу для игры «Жизнь»
3. Разработать программу для игры «Жизнь». Игра моделирует жизнь поколений гипотетической колонии...

Разработать программу для игры «Угадывание слова»
Слова для угадывания хранятся в файле. Предусмотреть подсчет числа попыток и ограничить их...

Разработать программу для игры «Угадывание слова»
Слова для угадывания хранятся в файле. Предусмотреть подсчет числа попыток и ограничить их...

8
Модератор
Эксперт функциональных языков программированияЭксперт Python
33866 / 18895 / 3979
Регистрация: 12.02.2012
Сообщений: 31,679
Записей в блоге: 13
10.04.2014, 18:56 2
Сначала нужно вникнуть в алгоритм игры. Рассмотрим случай, когда кучек только две. В этом случае выигрывает первый ходящий. Если в двух кучках количество спичек разное, первый должен "уравнять" их количество (взять из большей кучки нужно число). А затем ходить "симметрично" - если второй взял k спичек из первой кучки, первый берет k спичек из второй. А дальше - реализация...
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 9
10.04.2014, 20:58  [ТС] 3
дело в том, что суть игры я понимаю, написать программу не могу
0
4516 / 3510 / 358
Регистрация: 12.03.2013
Сообщений: 6,034
12.04.2014, 19:42 4
Вы темы не плодите.

Вообще, страсть к халяве надо подавлять в себе. Местный народ с удовольстием решает задачи типа дважды два четыре, но ИИ вам никто проектировать и писать не будет, это сложно, трудоёмко и требует времени. На форуме есть раздел "Фриланс" для платных услуг.

Если бы вы сами что-то делали, вы вполне могли бы надеяться на помощь. А вы даже задачу сформулировать не можете. Что это, программа для игры? Гуи с красиво прорисованными спичками? Приложение для игры по сети? Искуственный интеллект для игры человек/компьютер?
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.04.2014, 21:07 5
И решений этой задачи на форуме море. Как на разных языках, так и описаний алгоритма.
0
4516 / 3510 / 358
Регистрация: 12.03.2013
Сообщений: 6,034
12.04.2014, 21:11 6
А решение какой задачи, я в толк не пойму. Известна оптимальная стратегия или что?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
12.04.2014, 21:23 7
Игра "Спички Бергсона"
0
4516 / 3510 / 358
Регистрация: 12.03.2013
Сообщений: 6,034
12.04.2014, 21:35 8
То есть мы отметаем версию, что Полин'е нужна игра по сети? Жаль, я с сокетами разобрался.

Какой-то там ерундовый алгоритм под названием брутфорс. Я однажды поиздевался на форуме на людьми, написал крестики-нолики на рэкете (а им нужен был CL). По-моему, функция с трудом считала уже для полей 4 x 4.
0
1046 / 940 / 107
Регистрация: 04.11.2012
Сообщений: 972
Записей в блоге: 3
30.04.2014, 22:57 9
Один из вариантов игры, с единственной кучкой.
Сначала следует загадать максимальное количество взятых единиц за раз.
Потом число единиц, с которого начинается игра. И до нуля.
Кто берет последнюю спичку, проиграл.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
(defpackage Nim
  (:use :cl)
  (:export play))
 
(in-package Nim)
 
(defvar *tree* (make-array 10 :adjustable t))
 
(defun play () 
  (declare (special *tree*))
  (format t "~&Давайте сыграем в Ним.~%Тот кто берет последним, проигрывает.~%")
  (loop (let* ((max (read-int "Максимальное взятие за один раз?"))
               (n (read-int "Со скольки мы начинаем?"))
               (*tree* (check-length max *tree*)))
          (catch 'gameover
            (play-a-game max n (if (aref *tree* max)
                                   (check-length n (aref *tree* max))
                                   (newtree max n))))
          (unless (yes-or-no-p "~&Хотите начать новую игру? ")
            (return))))
    (format t "~&Это было весело! Приходите еще.~%~%")
    (values))
 
(defun play-a-game (max n state)
  (declare (special max n state))
  (if (y-or-n-p "~&Вы хотите ходить первым? ")
      (loop (opp-play) (I-play))
      (loop (I-play) (opp-play))))
 
(defun I-play ()
  (declare  (special n max))
  (let ((mymax (min n max)))
    (cond
     ((zerop n)
      (format t "~&Я победил!~%~%")
      (throw 'gameover nil))
     ((or (winning-state n) (losing-state n))
      (Iplay (play-of-state n)))
     (t (or (non-losing-play n mymax) (losing-play n max))))))
 
(defun non-losing-play (n max)
  (loop for x from max downto 1 do
        (when (unknown-state (- n x))
          (Iplay x)
          (return T))))
 
(defun losing-play (n max)
  (record-state n 'lose 1)
  (loop for x from 1 to max do
        (record-state (+ n x) 'win x))
  (Iplay 1))
 
(defun Iplay (x)
  (declare (special n))
  (format t "~&Я беру ~A, осталось ~A~%"
            x (decf n x)))
 
(defun opp-play ()
  (declare (special n max))
  (cond
    ((zerop n)
     (format t "~&Вы выиграли!~%~%")
     (throw 'gameover nil))
    (t (format t "~&Тогда остается ~A.~%"
               (setf n
                     (- n
                        (read-int "Сколько вы берете?" (min n max))))))))
 
(defun newtree (max n)
  (declare (special *tree*))
  (let ((state (make-array (1+ n) :adjustable t)))
    (declare (special state))
    (setf (aref *tree* max) state)
    (record-state 0 'win 0)
    state))
 
(defun check-length (n array)
  (if (< n (array-dimension array 0))
      array
      (adjust-array array (1+ n))))
 
(defun winning-state (x)
  (declare (special state))
  (eql (car (aref state x)) 'WIN))
 
(defun losing-state (x)
  (declare (special state))
  (eql (car (aref state x)) 'LOSE))
 
(defun unknown-state (x)
  (declare (special state))
  (null (aref state x)))
 
(defun play-of-state (x)
  (declare (special state))
  (cdr (aref state x)))
 
(defun record-state (x status play)
  (declare (special state))
  (setf state (check-length x state)
        (aref state x) (cons status play)))
 
(defun read-int (prompt &optional max)
  (format t "~&~A " prompt)
    (loop (let ((x (read)))
            (when (and (integerp x)
                       (plusp x)
                       (or (null max) (<= x max)))
              (return-from read-int x))
            (format t "~&Должно быть целое положительное число")
            (when max (format t " не больше, чем ~A" max))
            (format t ".~%Попробуйте еще: "))))
Кликните здесь для просмотра всего текста
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
> (play)
 
Максимальное взятие за один раз? 3
Со скольки мы начинаем? 10
Сколько вы берете? 1
Тогда остается 9.
Я беру 1, осталось 8
Сколько вы берете? 3
Тогда остается 5.
Я беру 1, осталось 4
Сколько вы берете? 3
Тогда остается 1.
Я беру 1, осталось 0
Вы выиграли!
 
Максимальное взятие за один раз? 4
Со скольки мы начинаем? 25
Я беру 4, осталось 21
Сколько вы берете? 4
Тогда остается 17.
Я беру 4, осталось 13
Сколько вы берете? 4
Тогда остается 9.
Я беру 3, осталось 6
Сколько вы берете? 1
Тогда остается 5.
Я беру 4, осталось 1
Сколько вы берете? 1
Тогда остается 0.
Я победил!
 
Это было весело! Приходите еще.
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2014, 22:57
Помогаю со студенческими работами здесь

Разработать программу для игры в морской бой
Уважаемые коллеги!!!! помогите пожалуйста с этой задачей!! буду очень благодарна!!!! Разработать...

Составьте программу, получающую для заданного числа его "перевертыш"
Пусть дана прямоугольная матрица A(m*n), элементами которой являются целые числа. Замените все...

Разработать справочно-информационную систему "справочная система авиакомпании"
Здравствуйте! Помогите, пожалуйста, разработать справочно-информационную систему &quot;справочная...

На языке Haskell разработать программу, извлекающую значение типа Char из кортежа (1, ’a’), "abc")
Умные люди помогите, новичку! может кто то даст пример решения этой задачи. буду признателен и...

Написать программу, выясняющую, есть ли в слове X буква "а", стоящая на нечётном месте после буквы "к""
Я нашла похожую на форуме, но переделать под свой вариант не очень получается, не до конца понимаю,...

Построить программу "сжать", назначение которой - преобразование английских слов в их "звуковой" код
Всем привет . Не могли бы помочь решить данную задачу ?) Построить программу &quot;сжать&quot;, назначение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru