Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 9
1

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

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

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

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

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

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

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

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

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

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

Какой-то там ерундовый алгоритм под названием брутфорс. Я однажды поиздевался на форуме на людьми, написал крестики-нолики на рэкете (а им нужен был CL). По-моему, функция с трудом считала уже для полей 4 x 4.
0
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 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
30.04.2014, 22:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2014, 22:57
Помогаю со студенческими работами здесь

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

Разработать иерархию не менее 2 классов, и программу Разработать программу для реализации игры пятнашки. Разработать 2-3
Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и...

Разработать объектно-ориентированную программу для базовой расстановки кораблей на поле для игры «Морской бой»
Разработать объектно-ориентированную программу для базовой расстановки кораблей на поле для игры...

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

Разработать программу для игры "Тригекс"
Пожалуйста, помогите разработать программу для игры &quot;Тригекс&quot;. Игра проводится на игровом поле,...

Разработать программу, создающую динамический массив и тестирующую функции работы с ним
Помогите разработать программу,создающую динамический массив и тестирующую функции работы с ним

Разработать программу игры в реверси
Разработать программу игры в реверси для игрока и компьютера. Поле игры имеет размер 10х10 ячеек....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru