короче описываю как викторину делать. СНАЧАЛО ДОБАВЬТЕ КОДЫ В ИСХОДНИКИ И СДЕЛАЙТЕ КОМПИЛЯЦИЮ!!!!
Обратите внимание на то что выделено красным!
Вот тут меняется комната:private int roomQuiz = 0;
А тут задаётся интервал через который будет выводится вопрос в чат: private long TimeRange = 2;
1) Добавьте это в ChatCommandProc:
Quote
public RobQuiz quiz = null;
Это в основной парсер:
Quote
if(quiz==null){
quiz= new RobQuiz(srv);
quiz.start();
}
quiz.parse(uin, mmsg, srv.us.getUser(uin).room);
2) Создать класс RobQuiz
Quote
package ru.jimbot.modules.chat;
import java.util.Random;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class RobQuiz implements Runnable {
private String NICK = "Викторина";
private long TimeRange = 2;
private String Question = "";
private String Answer = "";
private ChatServer srv;
private long cTime = System.currentTimeMillis();
private Thread th;
private int sleepAmount = 1000;
private Random r = new Random();
private int oldID = 0;
private int maxQuiz = 0;
private int count() {
return maxQuiz==0 ? (int)srv.us.db.getLastIndex("victorina") : maxQuiz;
}
private boolean testTime() {
return (System.currentTimeMillis()-cTime)>TimeRange*15000;
}
private int getRND(int i) {
return r.nextInt(i);
}
public ChatProps psp;
private String PromtGenerate(String text) {
String s = "Подсказка: ";
s += text.length() + " букв.";
try {
int t = getRND(text.length() - 2) + 1;
s += ", " + t + " буква - " + text.charAt(t - 1) + ".";
} catch (Exception ex) {}
return s;
}
private String QuizQuestion(int id) {
try {
PreparedStatement pst = srv.us.db.getDb().prepareStatement("SELECT * FROM victorina WHERE id = ? ");
pst.setInt(1,id);
ResultSet rs = pst.executeQuery();
while(rs.next()){
Question = rs.getString(2);
Answer = rs.getString(3);
}
rs.close();
pst.close();
} catch (Exception ex) {}
oldID = id;
return "Вопрос № " + id + ": " + Question + "\n" + PromtGenerate(Answer);
}
private void timeEvent() {
if(testTime()) {
cTime = System.currentTimeMillis();
int numb = (int) ((Math.random() * 10));
String zol="";
if (numb==5){
zol=" (выйгрыш всегда 2 золотых)";
}
say(NICK +zol+ "\n" +QuizQuestion(getRND((int)(maxQuiz - 2)) +1));
}
}
private void say(String m) {
int roomQuiz = 1;
String s = m;
srv.cq.addMsg(s,"", roomQuiz);
}
public RobQuiz(ChatServer s) {
srv = s;
maxQuiz = count();
psp = ChatProps.getInstance(srv.getName());
}
public void parse(String uin, String msg, int room) {
int roomQuiz = 1;
Users uss = srv.us.getUser(uin);
if ( roomQuiz == room && Answer.equalsIgnoreCase(msg) ) {
int reiting = uss.ball+2;
uss.ball=reiting;
srv.us.updateUser(uss);
int numb = (int) ((Math.random() * 10));
String zol="";
if (numb==5){
zol=" (выйгрыш всегда 2 золотых)";
}
say(NICK +zol+ "\n" +"Правильно ответил(а): " +uss.localnick + "\nЕго (её) кошелек составил: "+uss.ball+" золотых");
say("Вопрос " + oldID + ": " + Question + "\nОтвет: " + Answer+"\n");
cTime = System.currentTimeMillis();
say(NICK + "\n" +QuizQuestion(getRND((int)(maxQuiz - 2)) +1));
}
}
public void start() {
th = new Thread(this);
th.setPriority(Thread.NORM_PRIORITY);
th.start();
}
public synchronized void stop() {
th = null;
notify();
}
@SuppressWarnings("static-access")
public void run() {
Thread me = Thread.currentThread();
while (th == me) {
timeEvent();
try {
Thread.sleep(sleepAmount);
} catch (InterruptedException e) { break; }
}
th=null;
}
}
Потом заходите phpmyadmin. Открываете свою базу. Смотрите есть ли там таблица quiz.
если ее там нет то нажимаете на вкладочку sql и в окно выполнить запрос вводите
Quote
CREATE TABLE `quiz` (
`id` int(11) NOT NULL,
`vopros` varchar(255) NOT NULL,
`otvet` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
После этого таблица будет создана. Остается только набить ее вопросами. Для этого нада скачать дамп вопросов. дамп вопросов скачать тут http://www.jimbot-chat.ru/load/gigantskaja_baza_voprosov_dlja_viktoriny/1-1-0-37
Далее в том же разделе sql чуть пониже увидите что можно выбрать файл. Находите свой дамп. и нажимаете ПОШЕЛ. После этого ваша база заполниться вопросами и ответами. (ДЛЯ тех кто в танке скажу. Архивы дампов упакованы архиватором. Надо сначала распаковать. )
Добавлено (26.02.2010, 10:28)
---------------------------------------------
если неполучается как это всегда бывает то качйте 8 мод или 6 мне больше всего 6 нравится если что просите выложу