У меня проблемы с моей петлей. Цикл, который, как я думаю, прекрасно работает в теории, только когда я пытаюсь свалить его, он говорит, что он должен быть статичным. Я меняю его на статический, а генератор для случайного числа больше не работает, любые предложения будут оценены.Пример игры Nim Статические и случайные вопросы
Вопрос Игра Nim. Это известная игра с несколькими вариантами. Следующий вариант имеет интересную стратегию выигрыша. Два игрока поочередно берут шарики из кучи. В каждом ходу игрок выбирает количество шариков. Игрок должен взять хотя бы одну, но большую часть мрамора. Затем другой игрок делает поворот. Игрок, который берет последний мрамор, проигрывает.
Для примера. Если начальная свая начинается со 100, тогда игрок 1 может принимать от 1 до 50 мрамор. Предположим, что игрок 1 берет 20 мрамор, разрезая кучу до 80 мрамор. Игрок 2 может занимать от 1 до 40 мраморов. Это продолжается до тех пор, пока все мраморы не исчезнут.
Напишите программу, в которой компьютерные игроки против человеческого противника. Создайте случайное целое число от 10 до 100, чтобы обозначить начальный размер сваи. Создайте случайное целое число от 0 до 1, чтобы решить, берет ли компьютер или человек первый оборот. Создайте случайное целое число от 0 до 1, чтобы определить, играет ли компьютер умный или глупый. В глупом режиме компьютер просто берет случайное юридическое значение (между 1 и n/2) из сваи всякий раз, когда у него есть поворот. В интеллектуальном режиме компьютер снимает достаточное количество мрамора, чтобы сделать размер сваи мощностью два минус 1 - то есть 3, 7, 15, 31 или 63. Это всегда законный ход, за исключением случаев, когда размер куча в настоящее время составляет менее двух раз. В этом случае компьютер совершает случайный юридический ход (значение от 1 до n/2).
Вы заметите, что компьютер не может быть избит в интеллектуальном режиме, когда он имеет первый ход, если размер кучи не равен 15, 31 или 63. Конечно, человек, который первым совершил поворот и знает выигрышная стратегия может выиграть против компьютера.
ПРИМЕЧАНИЕ. Вам не нужно беспокоиться о округлении, когда числа, с которыми вы работаете, являются нечетными. Просто используйте целочисленное деление, которое усекает (удаляет без округления) десятичные разряды деления.
МОЙ КОД
import java.util.Random;
import java.util.Scanner;
public class Nim
{ Random generator= new Random();
int turn= generator.nextInt(2);
int pile= generator.nextInt(91) + 10;
int smartDumb= generator.nextInt(2);
Scanner in= new Scanner(System.in);
public static void main(String [] args){
String Comp;
int currentPile= pile;
while (pile>0){
int take=0;
if(smartDumb==1)
Comp="dumb";
else Comp= "smart";
if (turn == 1)
turn = 0;
else
turn = 1;
{
if (turn==0){
System.out.println("Please take some marbles.");
currentPile=pile-in.nextInt();
turn=1;
}
else
if (comp="dumb")
take= generator.nextInt(1,currentPile);
Currentpile= currentPile-take;
if (comp=="smart")
if (currentPile > 64)
currentPile=63;
if (currentPile > 32 && currentPile < 63)
currentPile=31;
if (currentPile > 16 && currentPile < 31)
currentPile=15;
if (currentPile > 8 && currentPile < 15)
currentPile=7;
if (currentPile > 4 && currentPile < 7)
currentPile=3;
if (currentPile == 2)
currentPile = 1;
if (currentPile==1)
currentPile=0;
System.out.println("The game is over!");
break;
}
}
}}
«Когда я пытаюсь вам свалить, он говорит, что он должен быть статичным». Вы очень плохо описываете свою проблему. Мне кажется, что основная часть вопроса описывает вашу игру. Вместо этого вы должны указать сообщение об ошибке, которое вы получаете, когда пытаетесь скомпилировать (называемый stacktrace) – user2651804