Один загадывает - остальные угадывают. В конце, угадавшему и загадавшему, даются баллы рейтинга. Они рассчитываются по определенным формулам, которые зависят от кол-ва попыток угадываний и от самого числа. Формулы, возможно, примитивны и не лишены недостатков, однако лучше я придумать не смог ввиду слабых знаний матанализа

Промежуточные результаты сохраняются в файле в таком виде:
1 100 0 51 0Первая строка - ID того, кто загадал
Вторая строка - само загаданное число
Третья строка - кол-во попыток отгадать это число
Четвертая строка - текущее вознаграждение тому, кто угадает это число
Пятая строка - текущее вознаграждение тому, кто задал это число
Как видно из описания - все просто.
Теперь сам код.
Вопросов по коду у меня, в принципе, нет. Только я не уверен в перезаписи файла. Мне кажется я это по-корявому сделал

Ошибка еще будет вылетать, если загадать число, превышающее диапазон Integer. Однако, я ее убирать не буду. Пущай вылетает. Нефиг большие числа загадывать

Планирую, добавить команду для стирания загаданного числа тем, кто его загадал или админом. А то, пока никто не разгадает число - нельзя будет загадать другое. А если баг?

Прошу строго не судить - это мой второй скрипт
import ru.jimbot.modules.AbstractServer; import ru.jimbot.util.*; import ru.jimbot.modules.chat.*; import ru.jimbot.modules.*; //Установка скрипта как обработчика команды if(in.equals("install")){ cmd.addCommand("!число2", new Cmd("!число2","$c $n",39,name)); cmd.addAuth("number2","Угадай число мультиплеер"); out="Ok"; return; } try{ //Парсим строку аргументов Vector v = cmd.getParser().parseArgs(msg); String command_1 = (String)v.get(0); int nmb = (Integer)v.get(1); String pathto = "./services/Test/scripts/command/text/guess_number_multi.txt"; OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(pathto,true),"windows-1251"); String output_s = null; String[] ss = null; Users victor = cmd.srv.us.getUser(uin); int number = 0; int steps = 0; int reward1 = 0; int reward2 = 0; //Проверяем комнату if(victor.room!=0){ proc.mq.add(uin,"Играть в игру [Угадай число. Мультиплеер] можно только в комнате Банька|0|"); return; } //Проверяем наличие в файле уже загаданных чисел String s = cmd.psp.loadText(pathto); if(command_1.equals("загадать")){ if(s=="") { reward1 = (int) nmb/2 + 1; reward2 = 0; ow.write(victor.id + "\n" + nmb + "\n" + "0" + "\n" + reward1 + "\n" + reward2); cmd.srv.cq.addMsg("[Угадай число. Мультиплеер]\n" + victor.localnick + "|" + victor.id + "| загадал(а) число.\nНачальное вознаграждение составляет " + reward1, "", victor.room); ow.close(); return; } else { ss = s.split("\n"); int id = Integer.parseInt(ss[0]); Users u = cmd.srv.us.getUser(id); proc.mq.add(uin,"Число уже загадано пользователем " + u.localnick + "|" + u.id + "|. Отгадай сначало это."); return; }} //Отгадываем число if(command_1.equals("угадать"))if(s=="") { proc.mq.add(uin,"Число еще не загадано."); return; } else { ss = s.split("\n"); //Загружаем данные из файла int id = Integer.parseInt(ss[0]); number = Integer.parseInt(ss[1]); steps = Integer.parseInt(ss[2]); reward1 = Integer.parseInt(ss[3]); reward2 = Integer.parseInt(ss[4]); Users u = cmd.srv.us.getUser(id); if(victor.id==u.id){ proc.mq.add(uin,"Нельзя угадывать у самого себя"); return; } //Обрабатываем эти данные if(nmb>number) { steps++; if(steps==number) steps++; reward1=(int) Math.abs(number/(steps*2) + steps)*2; reward2=(int) Math.abs((number + steps*2)/(number - steps) + steps)*2; cmd.srv.cq.addMsg("[Угадай число. Мультиплеер]\n" + victor.localnick + "|" + victor.id + "| попытался(лась) угадать загаданное число, назвав число " + nmb + "\nЗагаданное число оказалось меньше предполагаемого.\nВознаграждение составляет " + reward1, "", victor.room); } else if(nmb<number) { steps++; if(steps==number) steps++; reward1=(int) Math.abs(number/(steps*2) + steps)*2; reward2=(int) Math.abs((number + steps*2)/(number - steps) + steps)*2; cmd.srv.cq.addMsg("[Угадай число. Мультиплеер]\n" + victor.localnick + "|" + victor.id + "| попытался(лась) угадать загаданное число, назвав число " + nmb + "\nЗагаданное число оказалось больше предполагаемого.\nВознаграждение составляет " + reward1, "", victor.room); } else { if(steps==number) steps++; reward1=(int) Math.abs(number/(steps*2) + steps)*2; reward2=(int) Math.abs((number + steps*2)/(number - steps) + steps)*2; cmd.srv.cq.addMsg("[Угадай число. Мультиплеер]\n" + victor.localnick + "|" + victor.id + "| угадал(а) загаданное число " + nmb + " с " + steps + " раза\nПобедитель получает " + reward1 + "\nВедущий получает " + reward2, "", victor.room); //Награждаем ведущего и победителя victor.ball = victor.ball + reward1; u.ball = u.ball + reward2; //Стираем данные из файла ow.close(); OutputStreamWriter ow1 = new OutputStreamWriter(new FileOutputStream(pathto,false),"windows-1251"); ow1.write(""); ow1.close(); return; } //Сохраняем новые данные ow.close(); OutputStreamWriter ow1 = new OutputStreamWriter(new FileOutputStream(pathto,false),"windows-1251"); ow1.write(u.id + "\n" + number + "\n" + steps + "\n" + reward1 + "\n" + reward2); ow1.close(); return; } } catch (Exception ex) { ex.printStackTrace(); proc.mq.add(uin,"Ошибка "+ex.getMessage()); }
Сообщение отредактировал miceZipper: 13 Июль 2011 - 21:10