diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index 5dd1ced0b..36c639ca8 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -1,9 +1,9 @@ import { Application, BackendSession } from 'pinus'; import { getGamedata } from '../../../util/gamedata'; -import { EventRecordModel } from '../../../db/EventRecord'; +import EventRecord, { EventRecordModel } from '../../../db/EventRecord'; import { RoleModel } from '../../../db/Role'; -import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_TYPE } from '../../../consts/consts'; -import { checkEvent } from '../../../services/eventSercive'; +import { EVENT_STATUS, EVENT_RECORD_STATUS } from '../../../consts/consts'; +import { checkEvent, getEventTime, refreshEvent, checkEventStatus, getEventSuccessStatus } from '../../../services/eventSercive'; import { handleFixedReward } from '../../../services/rewardService'; export default function(app: Application) { @@ -14,9 +14,38 @@ export class EventBattleHandler { constructor(private app: Application) { } + // 主动获取奇遇事件 + async getEvents(msg: { }, session: BackendSession) { + let roleId = session.get('roleId'); + let roleName = session.get('roleName'); + let eventStatus = session.get('eventStatus'); + + let now = new Date(); + let t = getEventTime(now); + console.log(t, eventStatus) + + let event: Array; + if (eventStatus == EVENT_STATUS.STARTING) { + event = await EventRecordModel.getEventRecordByTime(roleId, 0); + } else if( eventStatus == EVENT_STATUS.OPEN ) { + + event = await EventRecordModel.getEventRecordByTime(roleId, t); + if(event.length == 0) { // 刷新 + const num = 3; // 每次刷3个 + event = await refreshEvent(num, roleId, roleName, t); + } + } + return { + code: 200, + data: { + event + } + } + } + // 获取关卡列表 - async receiveEventReward(msg: { eventId: number, eventCode: string, isSuccess: boolean }, session: BackendSession) { - const {eventId, eventCode, isSuccess} = msg; + async receiveEventReward(msg: { eventId: number, eventCode: string, answer: number }, session: BackendSession) { + const {eventId, eventCode, answer} = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); let eventStatus = session.get('eventStatus'); @@ -25,22 +54,13 @@ export class EventBattleHandler { if(!event) { return { code: 202, data: '未找到记录' } } - let { status, type, eventId: dataEventId } = event; - let flag; // 检查状态是否正确 - if(type == EVENT_TYPE.BATTLE) { - if(status == EVENT_RECORD_STATUS.BATTLE_SUCCESS && isSuccess) { - flag = true; - } else if (status == EVENT_RECORD_STATUS.BATTLE_FAIL && !isSuccess) { - flag = true; - } - } else { - if(status == EVENT_RECORD_STATUS.WAITING) { - flag = true; - } - } + let { status, type, eventId: dataEventId, question } = event; + let flag = checkEventStatus(type, status); if(!flag) { return { code: 202, data: '状态错误' } } + let isSuccess = getEventSuccessStatus(type, status, {id:question?question.id:0, answer}); + if(dataEventId != eventId) { return { code: 202, data: '事件id错误' } } @@ -66,6 +86,7 @@ export class EventBattleHandler { return { code: 200, data: { + isSuccess, eventCode: result.eventCode, eventId: result.eventId, status: result.status, diff --git a/game-server/app/services/eventSercive.ts b/game-server/app/services/eventSercive.ts index d8bdcda02..78a7d063a 100644 --- a/game-server/app/services/eventSercive.ts +++ b/game-server/app/services/eventSercive.ts @@ -2,8 +2,8 @@ import { Application, FrontendOrBackendSession } from 'pinus'; import { getGamedata } from '../util/gamedata'; import { EventRecordModel } from '../db/EventRecord'; import { RoleModel } from '../db/Role'; -import { genCode, decodeStrSingle } from '../util/util'; -import { EVENT_STATUS, EVENT_RECORD_STATUS } from '../consts/consts'; +import { genCode, decodeStrSingle, decodeStr } from '../util/util'; +import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_TYPE } from '../consts/consts'; export async function setBattleStatus(app: Application, session: FrontendOrBackendSession, roleId: string, battleId: number , isSuccess: boolean, battleCode: string) { @@ -78,6 +78,7 @@ export async function checkEvent(app: Application, session: FrontendOrBackendSes } else if( eventStatus == EVENT_STATUS.OPEN ) { let event = await EventRecordModel.getEventRecordByTime(roleId, t); + if(event.length == 0) { // 刷新 const num = 3; // 每次刷3个 event = await refreshEvent(num, roleId, roleName, t); @@ -98,7 +99,7 @@ export async function checkEvent(app: Application, session: FrontendOrBackendSes } } -async function refreshEvent(num: number, roleId: string, roleName: string, t) { +export async function refreshEvent(num: number, roleId: string, roleName: string, t) { let event = new Array(); let dicEvent = getGamedata('dic_zyz_event'); let role = await RoleModel.findByRoleId(roleId); @@ -125,18 +126,27 @@ async function refreshEvent(num: number, roleId: string, roleName: string, t) { let index = Math.floor(Math.random() * randomList.length); let dic = randomList[index]; + let position = randomPosition(dic.position); + let question = dic.eventType == EVENT_TYPE.QUIZ?randomQuestion(): undefined; let eventCode = genCode(8); let data = await EventRecordModel.saveEventRecord(eventCode, { roleId, refTime: t, eventId: dic.eventID, roleName, turn, type: dic.eventType, battleId: dic.warId||0, quality: dic.quality, - status: EVENT_RECORD_STATUS.WAITING + status: EVENT_RECORD_STATUS.WAITING, + position, question }); - event.push(data) + event.push(data); randomList.splice(index, 1); } return event; } +function randomPosition(positionStr: string) { + let positionArr = decodeStr('position', positionStr); + let index = Math.floor(Math.random() * positionArr.length); + return positionArr[index] +} + function pushEventMsg(app, roleId, channelName, msg ) { console.log('***pushEventMsg', channelName) let channelService = app.get('channelService'); @@ -151,4 +161,57 @@ function pushEventMsg(app, roleId, channelName, msg ) { sid: tsid }]); } +} + +export function checkEventStatus(type: number, status: number) { + + let flag: boolean; // 检查状态是否正确 + if(type == EVENT_TYPE.BATTLE) { + if(status == EVENT_RECORD_STATUS.BATTLE_SUCCESS) { + flag = true; + } else if (status == EVENT_RECORD_STATUS.BATTLE_FAIL) { + flag = true; + } else { + flag = false; + } + } else { + if(status == EVENT_RECORD_STATUS.WAITING) { + flag = true; + } else { + flag = false; + } + } + return flag +} + + +export function getEventSuccessStatus(type: number, status: number, question: {id: number, answer: number}) { + let isSuccess: boolean; // 检查状态是否正确 + if(type == EVENT_TYPE.BATTLE) { + if(status == EVENT_RECORD_STATUS.BATTLE_SUCCESS) { + isSuccess = true; + } else if (status == EVENT_RECORD_STATUS.BATTLE_FAIL) { + isSuccess = false; + } + } else if(type == EVENT_TYPE.BOX) { + isSuccess = true; + } else if (type == EVENT_TYPE.QUIZ) { + isSuccess = checkQuiz(question) + } + return isSuccess +} + +function randomQuestion() { + let questions = getGamedata('Questions'); + let index = Math.floor(Math.random() * questions.length); + let result = questions[index]; + let {id, question, a1, a2, a3, a4, correct} = result; + return {id, question, answer: [a1, a2, a3, a4], correct}; +} + +function checkQuiz(obj: {id: number, answer: number }) { + let {id, answer} = obj; + let questions = getGamedata('Questions'); + let result = questions[id - 1]; + return !!result && result.correct == answer; } \ No newline at end of file diff --git a/game-server/app/util/util.ts b/game-server/app/util/util.ts index d942816b5..3a4f8eebb 100644 --- a/game-server/app/util/util.ts +++ b/game-server/app/util/util.ts @@ -63,6 +63,12 @@ const moment = require('moment'); result = { id: parseInt(id), value: parseInt(value) }; break; } + case 'position': { + let [x, y] = arr; + if(isNaN(x) || isNaN(y)) throw new Error('格式错误'); + result = { x: parseInt(x), y: parseInt(y) }; + break; + } } return result; }; diff --git a/shared/db/EventRecord.ts b/shared/db/EventRecord.ts index 03fe375d2..72e0d7be4 100644 --- a/shared/db/EventRecord.ts +++ b/shared/db/EventRecord.ts @@ -1,6 +1,14 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; +class Question { + @prop({ required: true }) + id: number; + @prop({ required: true }) + question: string; + @prop({ required: false, type: String }) + answer: [string]; +} /** * 战斗记录接口 */ @@ -30,10 +38,14 @@ export default class EventRecord extends BaseModel { battleCode: string; // 关卡类型,关卡code @prop({ required: true, default: 0 }) turn: number; // 随机的轮数,保证每个event_id都能随机到一次再进行下一轮 + @prop({ required: true }) + position: {x:number, y: number}; // 位置 + @prop({ required: true }) + question: Question; // 题库id public static async getEventRecordByTime(roleId: string, refTime: number, lean=true ) { - let data = await EventRecordModel.find({roleId, refTime}).select('eventCode eventId type quality status battleId').lean(lean); + let data = await EventRecordModel.find({roleId, refTime}).select('eventCode eventId type quality status battleId position question').lean(lean); return data; } @@ -48,10 +60,10 @@ export default class EventRecord extends BaseModel { return {history: result, turn}; } - public static async saveEventRecord(eventCode: string, params: {roleId: string, refTime: number, eventId: number, roleName:string, turn?: number, type: number, quality: number, battleId?: number, status: number } , lean=true ) { + public static async saveEventRecord(eventCode: string, params: {roleId: string, refTime: number, eventId: number, roleName:string, turn?: number, type: number, quality: number, battleId?: number, status: number, position: {x:number, y:number}, question?: any } , lean=true ) { let doc = new EventRecordModel(); - let update = Object.assign(params, doc.toJSON(), {eventCode}); - let data = await EventRecordModel.findOneAndUpdate({eventCode}, { $set: update }, {upsert: true, new: true}).select('eventCode eventId type quality status battleId').lean(lean); + let update = Object.assign(doc.toJSON(), params, {eventCode}); + let data = await EventRecordModel.findOneAndUpdate({eventCode}, { $set: update }, {upsert: true, new: true}).select('eventCode eventId type quality status battleId position question').lean(lean); return data; } diff --git a/shared/resource/jsons/Questions.json b/shared/resource/jsons/Questions.json new file mode 100644 index 000000000..e2a0fc1c3 --- /dev/null +++ b/shared/resource/jsons/Questions.json @@ -0,0 +1,973 @@ +[ + { + "id": 1, + "question": "袁紹字", + "a1": "本初", + "a2": "文台", + "a3": "玄德", + "a4": "公台", + "correct": 1 + }, + { + "id": 2, + "question": "圍殺十常侍時,少帝與陳留王流落在外,最先被誰收留?", + "a1": "崔毅", + "a2": "崔烈", + "a3": "段珪(gui)", + "a4": "閔貢", + "correct": 1 + }, + { + "id": 3, + "question": "袁紹的父親是?", + "a1": "袁隗", + "a2": "袁逢", + "a3": "袁術", + "a4": "袁天罡", + "correct": 2 + }, + { + "id": 4, + "question": "袁隗與袁紹的關系是?", + "a1": "父子", + "a2": "兄弟", + "a3": "叔侄", + "a4": "師徒", + "correct": 3 + }, + { + "id": 5, + "question": "董卓第一次召集百官廢帝立陳留王,誰獻反對?", + "a1": "李儒", + "a2": "盧植", + "a3": "丁原", + "a4": "曹操", + "correct": 3 + }, + { + "id": 6, + "question": "呂布最先為誰的義子?", + "a1": "董卓", + "a2": "王允", + "a3": "李儒", + "a4": "丁原", + "correct": 4 + }, + { + "id": 7, + "question": "誰替董卓勸說呂布稱為義子?", + "a1": "李肅", + "a2": "李儒", + "a3": "盧植", + "a4": "丁原", + "correct": 1 + }, + { + "id": 8, + "question": "李肅送了什麼勸降呂布為董卓義子?", + "a1": "赤兔馬", + "a2": "刀劍", + "a3": "美女", + "a4": "城池", + "correct": 1 + }, + { + "id": 9, + "question": "董卓廢少帝為:", + "a1": "陳留王", + "a2": "弘農王", + "a3": "平原王", + "correct": 2 + }, + { + "id": 10, + "question": "董卓廢少帝,李儒讀策完畢時,誰怒呼“吾當以頸血濺之!”?", + "a1": "盧植", + "a2": "丁原", + "a3": "曹操", + "a4": "丁管", + "correct": 4 + }, + { + "id": 11, + "question": "劉協字", + "a1": "伯和", + "a2": "伯牙", + "a3": "仲伯", + "a4": "伯符", + "correct": 1 + }, + { + "id": 12, + "question": "獻帝登基時幾歲?", + "a1": "十二歲", + "a2": "六歲", + "a3": "九歲", + "a4": "十一歲", + "correct": 3 + }, + { + "id": 13, + "question": "“朝堂殺賊名猶在,萬古堪稱大丈夫!”說的是誰?", + "a1": "曹操", + "a2": "伍孚", + "a3": "關羽", + "a4": "李儒", + "correct": 2 + }, + { + "id": 14, + "question": "曹操刺殺董卓未遂,逃至中牟縣,誰擒住他又與他一同逃走?", + "a1": "陳登", + "a2": "呂伯奢", + "a3": "陳宮", + "a4": "王允", + "correct": 3 + }, + { + "id": 15, + "question": "陳宮字什麼?", + "a1": "公覆", + "a2": "文台", + "a3": "文公", + "a4": "公台", + "correct": 4 + }, + { + "id": 16, + "question": "殺豬沽酒欲寬帶曹操陳宮卻遭殺害的是誰?", + "a1": "呂伯奢", + "a2": "伍孚", + "a3": "王允", + "a4": "丁原", + "correct": 1 + }, + { + "id": 17, + "question": "曹操刺殺董卓未遂,逃至陳留,得誰家資相助?", + "a1": "樂進", + "a2": "衛弘", + "a3": "陳宮", + "a4": "夏侯惇", + "correct": 2 + }, + { + "id": 18, + "question": "樂進字?", + "a1": "文謙", + "a2": "文公", + "a3": "文台", + "a4": "文遠", + "correct": 1 + }, + { + "id": 19, + "question": "樂進哪裡人?", + "a1": "陽平衛國人", + "a2": "山陽巨鹿人", + "a3": "沛國譙人", + "a4": "常山真定人", + "correct": 1 + }, + { + "id": 20, + "question": "李典字?", + "a1": "公台", + "a2": "曼城", + "a3": "德謀", + "a4": "元讓", + "correct": 2 + }, + { + "id": 21, + "question": "夏侯惇字?", + "a1": "文台", + "a2": "公台", + "a3": "元讓", + "a4": "德謀", + "correct": 3 + }, + { + "id": 22, + "question": "諸侯聯軍討伐董卓,誰為前鋒抵汜水關挑戰?", + "a1": "孫堅", + "a2": "袁紹", + "a3": "李儒", + "a4": "華雄", + "correct": 1 + }, + { + "id": 23, + "question": "華雄哪裡人?", + "a1": "關東人", + "a2": "關南人", + "a3": "關西人", + "a4": "關北人", + "correct": 3 + }, + { + "id": 24, + "question": "華雄身高多少?", + "a1": "六尺", + "a2": "七尺", + "a3": "八尺", + "a4": "九尺", + "correct": 4 + }, + { + "id": 25, + "question": "程普字什麼?", + "a1": "大榮", + "a2": "德謀", + "a3": "公覆", + "a4": "義公", + "correct": 2 + }, + { + "id": 26, + "question": "韓當字什麼?", + "a1": "義公", + "a2": "文公", + "a3": "公台", + "a4": "文謙", + "correct": 1 + }, + { + "id": 27, + "question": "黃蓋字什麼?", + "a1": "義公", + "a2": "文公", + "a3": "公覆", + "a4": "文謙", + "correct": 3 + }, + { + "id": 28, + "question": "祖茂字什麼?", + "a1": "文謙", + "a2": "義公", + "a3": "文公", + "a4": "大榮", + "correct": 4 + }, + { + "id": 29, + "question": "韓當哪裡人?", + "a1": "遼西令支人", + "a2": "零陵人", + "a3": "吳郡富春人", + "a4": "常山真定人", + "correct": 1 + }, + { + "id": 30, + "question": "黃蓋哪裡人?", + "a1": "遼西令支人", + "a2": "零陵人", + "a3": "吳郡富春人", + "a4": "常山真定人", + "correct": 2 + }, + { + "id": 31, + "question": "祖茂哪裡人?", + "a1": "遼西令支人", + "a2": "零陵人", + "a3": "吳郡富春人", + "a4": "常山真定人", + "correct": 3 + }, + { + "id": 32, + "question": "胡軫是誰的副將?", + "a1": "華雄", + "a2": "程普", + "a3": "孫堅", + "a4": "袁術", + "correct": 1 + }, + { + "id": 33, + "question": "祖茂為救誰而死?", + "a1": "袁術", + "a2": "孫堅", + "a3": "袁紹", + "a4": "華雄", + "correct": 2 + }, + { + "id": 34, + "question": "祖茂被誰一刀砍於馬下?", + "a1": "董卓", + "a2": "張飛", + "a3": "關羽", + "a4": "華雄", + "correct": 4 + }, + { + "id": 35, + "question": "祖茂用什麼辦法救了孫堅?", + "a1": "更換脫幘(ze)與頭盔", + "a2": "更換軍服", + "a3": "易容之術", + "a4": "躲在兵士屍體之中", + "correct": 1 + }, + { + "id": 36, + "question": "溫酒斬華雄,關羽是第幾個出站?", + "a1": 1, + "a2": 2, + "a3": 3, + "a4": 4, + "correct": 3 + }, + { + "id": 37, + "question": "俞涉是誰的手下?", + "a1": "袁術", + "a2": "袁紹", + "a3": "袁隗", + "a4": "袁逢", + "correct": 1 + }, + { + "id": 38, + "question": "潘鳳是誰的上將?", + "a1": "曹操", + "a2": "袁術", + "a3": "韓馥", + "a4": "孫堅", + "correct": 3 + }, + { + "id": 39, + "question": "袁隗被誰所殺?", + "a1": "李榷、呂布", + "a2": "李榷、郭汜", + "a3": "李肅、呂布", + "a4": "郭汜、呂布", + "correct": 2 + }, + { + "id": 40, + "question": "李儒勸董卓遷都哪裡?", + "a1": "洛陽", + "a2": "長安", + "a3": "滎(xing)陽", + "a4": "桂陽", + "correct": 2 + }, + { + "id": 41, + "question": "誰勸董卓遷都長安?", + "a1": "李儒", + "a2": "李肅", + "a3": "楊彪", + "a4": "呂布", + "correct": 1 + }, + { + "id": 42, + "question": "董卓遷都長安程中,曹操勸袁紹做什麼?", + "a1": "一同遷走", + "a2": "劫走天子", + "a3": "乘勢追擊", + "a4": "登基稱帝", + "correct": 3 + }, + { + "id": 43, + "question": "董卓遷都長安程中,曹操追襲險些被捉,誰保其性命?", + "a1": "曹丕", + "a2": "曹植", + "a3": "曹嵩", + "a4": "曹洪", + "correct": 4 + }, + { + "id": 44, + "question": "曹操與曹洪的關系?", + "a1": "兄弟", + "a2": "叔侄", + "a3": "父子", + "a4": "師徒", + "correct": 1 + }, + { + "id": 45, + "question": "堅得玉璽別袁紹,紹寫書給誰教路上截而奪之?", + "a1": "劉禪", + "a2": "劉備", + "a3": "劉表", + "a4": "劉焉", + "correct": 3 + }, + { + "id": 46, + "question": "劉表字", + "a1": "公覆", + "a2": "景升", + "a3": "大榮", + "a4": "文謙", + "correct": 2 + }, + { + "id": 47, + "question": "劉表是哪裡人?", + "a1": "山陽高平人", + "a2": "山陽巨鹿人", + "a3": "吳郡富春人", + "a4": "常山真定人", + "correct": 1 + }, + { + "id": 48, + "question": "喬瑁被誰殺死的?", + "a1": "劉表", + "a2": "劉岱", + "a3": "陳翔", + "a4": "公孫瓚", + "correct": 2 + }, + { + "id": 49, + "question": "喬瑁為何被殺死?", + "a1": "謀害主公", + "a2": "諫言不納", + "a3": "借糧不予", + "a4": "以下犯上", + "correct": 3 + }, + { + "id": 50, + "question": "蒯良蒯越是哪裡人?", + "a1": "延平人", + "a2": "襄陽人", + "a3": "汝南人", + "a4": "南陽人", + "correct": 1 + }, + { + "id": 51, + "question": "蔡瑁是哪裡人?", + "a1": "延平人", + "a2": "襄陽人", + "a3": "汝南人", + "a4": "南陽人", + "correct": 2 + }, + { + "id": 52, + "question": "“玉璽得來無用處,反因此寶動刀兵”說的是誰與誰交戰?", + "a1": "袁紹與董卓", + "a2": "劉表與曹操", + "a3": "曹操與孫堅", + "a4": "劉表與孫堅", + "correct": 4 + }, + { + "id": 53, + "question": "袁紹使計奪取冀州,當時誰是冀州牧?", + "a1": "韓馥", + "a2": "公孫瓚", + "a3": "耿武", + "a4": "袁術", + "correct": 1 + }, + { + "id": 54, + "question": "韓馥欲請袁紹同治冀州事,誰諫言不可?", + "a1": "荀諶", + "a2": "田豐", + "a3": "耿武", + "a4": "辛評", + "correct": 3 + }, + { + "id": 55, + "question": "公孫瓚和公孫越的關系是?", + "a1": "父子", + "a2": "兄弟", + "a3": "叔侄", + "a4": "朋友", + "correct": 2 + }, + { + "id": 56, + "question": "誰殺死了公孫越?", + "a1": "袁紹", + "a2": "劉備", + "a3": "曹操", + "a4": "袁術", + "correct": 1 + }, + { + "id": 57, + "question": "殺死公孫越的一彪均碼稱自己是誰的家將?", + "a1": "袁紹", + "a2": "董卓", + "a3": "曹操", + "a4": "劉備", + "correct": 2 + }, + { + "id": 58, + "question": "趙雲字什麼?", + "a1": "子達", + "a2": "子仲", + "a3": "子伯", + "a4": "子龍", + "correct": 4 + }, + { + "id": 59, + "question": "趙雲是哪裡人?", + "a1": "山陽高平人", + "a2": "遼西令支人", + "a3": "常山真定人", + "a4": "陽平衛國人", + "correct": 3 + }, + { + "id": 60, + "question": "公孫瓚號稱什麼?", + "a1": "白馬將軍", + "a2": "天公將軍", + "a3": "車騎將軍", + "a4": "驃騎將軍", + "correct": 1 + }, + { + "id": 61, + "question": "公孫瓚被袁紹部下在磐河打得狼狽時,是為誰所救?", + "a1": "趙雲", + "a2": "劉表", + "a3": "曹操", + "a4": "董卓", + "correct": 1 + }, + { + "id": 62, + "question": "假天子之詔,和解袁紹與公孫瓚是誰的主意", + "a1": "李肅", + "a2": "李儒", + "a3": "袁術", + "a4": "曹操", + "correct": 2 + }, + { + "id": 63, + "question": "袁術與袁紹的關系不睦的起因?", + "a1": "術借兵,紹不予", + "a2": "術願與紹共治冀州", + "a3": "術借馬,紹不予", + "a4": "術借錢,紹不予", + "correct": 3 + }, + { + "id": 64, + "question": "孫策字什麼?", + "a1": "伯仲", + "a2": "伯和", + "a3": "伯牙", + "a4": "伯符", + "correct": 4 + }, + { + "id": 65, + "question": "孫權字什麼?", + "a1": "仲謀", + "a2": "子仲", + "a3": "仲德", + "a4": "仲達", + "correct": 1 + }, + { + "id": 66, + "question": "吳夫人生了幾個兒子?", + "a1": 1, + "a2": 2, + "a3": 3, + "a4": 4, + "correct": 4 + }, + { + "id": 67, + "question": "孫策在吳夫人所生幾子中排行老幾?", + "a1": "一", + "a2": "二", + "a3": "三", + "a4": "四", + "correct": 1 + }, + { + "id": 68, + "question": "孫權在吳夫人所生幾子中排行老幾?", + "a1": "一", + "a2": "二", + "a3": "三", + "a4": "四", + "correct": 2 + }, + { + "id": 69, + "question": "下列哪個不是吳夫人所生親胞兄弟?", + "a1": "孫策", + "a2": "孫翊", + "a3": "孫靜", + "a4": "孫匡", + "correct": 3 + }, + { + "id": 70, + "question": "孫堅與孫靜的關系是?", + "a1": "叔侄", + "a2": "兄弟", + "a3": "父子", + "a4": "師徒", + "correct": 2 + }, + { + "id": 71, + "question": "孫靜的字?", + "a1": "公禮", + "a2": "早安", + "a3": "季佐", + "a4": "幼台", + "correct": 4 + }, + { + "id": 72, + "question": "孫堅欲伐劉表,表先派誰在江邊抵擋而兵敗?", + "a1": "韓當", + "a2": "蒯良", + "a3": "黃祖", + "a4": "蒯良", + "correct": 3 + }, + { + "id": 73, + "question": "孫堅在討伐誰期間死的?", + "a1": "劉備 ", + "a2": "袁紹", + "a3": "劉表", + "a4": "袁術", + "correct": 3 + }, + { + "id": 74, + "question": "孫堅死時幾歲?", + "a1": 36, + "a2": 37, + "a3": 38, + "a4": 39, + "correct": 2 + }, + { + "id": 75, + "question": "孫堅是怎麼死的?", + "a1": "亂箭射死", + "a2": "撞階而死", + "a3": "氣死", + "a4": "中毒身亡", + "correct": 1 + }, + { + "id": 76, + "question": "孫堅在哪裡死的?", + "a1": "赤壁", + "a2": "夷陵", + "a3": "峴(xian)山", + "a4": "五丈原", + "correct": 3 + }, + { + "id": 77, + "question": "哪個是吳夫人所生?", + "a1": "孫翊", + "a2": "孫朗", + "a3": "孫仁", + "a4": "孫韶", + "correct": 1 + }, + { + "id": 78, + "question": "“司徒妙算托紅裙,不用干戈不用兵”中紅裙是指?", + "a1": "大喬", + "a2": "小喬", + "a3": "孫尚香", + "a4": "貂蟬", + "correct": 4 + }, + { + "id": 79, + "question": "是誰殺死了王允?", + "a1": "呂布、董卓", + "a2": "李榷、郭汜", + "a3": "胡赤兒、牛輔", + "a4": "張濟、樊稠", + "correct": 2 + }, + { + "id": 80, + "question": "王允死後,誰問獻帝要封爵車騎將軍?", + "a1": "李榷", + "a2": "郭汜", + "a3": "張濟", + "a4": "樊稠", + "correct": 1 + }, + { + "id": 81, + "question": "馬騰與馬超的關系是什麼?", + "a1": "兄弟", + "a2": "叔侄", + "a3": "父子", + "a4": "師徒", + "correct": 3 + }, + { + "id": 82, + "question": "“面如冠玉,眼若流星,虎體猿臂,彪腹狼腰”說的是誰?", + "a1": "馬騰", + "a2": "馬超", + "a3": "張飛", + "a4": "關羽", + "correct": 2 + }, + { + "id": 83, + "question": "馬超字什麼?", + "a1": "孟起", + "a2": "孟德", + "a3": "玄德", + "a4": "翼德", + "correct": 1 + }, + { + "id": 84, + "question": "樊稠被誰所殺?", + "a1": "郭汜", + "a2": "張濟", + "a3": "李別", + "a4": "李榷", + "correct": 4 + }, + { + "id": 85, + "question": "荀彧字什麼?", + "a1": "文台", + "a2": "文若", + "a3": "公台", + "a4": "文謙", + "correct": 2 + }, + { + "id": 86, + "question": "荀攸字什麼?", + "a1": "公台", + "a2": "公達", + "a3": "仲謀", + "a4": "仲德", + "correct": 2 + }, + { + "id": 87, + "question": "程昱字什麼?", + "a1": "玄德", + "a2": "孟德", + "a3": "仲謀", + "a4": "仲德", + "correct": 4 + }, + { + "id": 88, + "question": "荀彧和荀攸是什麼關系?", + "a1": "兄弟", + "a2": "父子", + "a3": "叔侄", + "a4": "師徒", + "correct": 3 + }, + { + "id": 89, + "question": "荀彧投奔曹操之前是誰舊部?", + "a1": "袁紹", + "a2": "袁術", + "a3": "孫堅", + "a4": "劉表", + "correct": 1 + }, + { + "id": 90, + "question": "郭嘉是誰舉薦給曹操的?", + "a1": "程昱", + "a2": "荀彧", + "a3": "荀攸", + "a4": "荀緄(gun)", + "correct": 1 + }, + { + "id": 91, + "question": "郭嘉舉薦了誰給曹操?", + "a1": "劉曄", + "a2": "滿寵", + "a3": "呂虔", + "a4": "於禁", + "correct": 1 + }, + { + "id": 92, + "question": "劉曄字?", + "a1": "子仲", + "a2": "子陽", + "a3": "子達", + "a4": "子龍", + "correct": 2 + }, + { + "id": 93, + "question": "滿寵字什麼?", + "a1": "伯符", + "a2": "伯和", + "a3": "伯牙", + "a4": "伯寧", + "correct": 4 + }, + { + "id": 94, + "question": "呂虔字什麼?", + "a1": "子恪", + "a2": "子龍", + "a3": "子陽", + "a4": "子達", + "correct": 1 + }, + { + "id": 95, + "question": "毛玠字什麼?", + "a1": "孟德", + "a2": "孝先", + "a3": "奉孝", + "a4": "奉先", + "correct": 2 + }, + { + "id": 96, + "question": "於禁字什麼?", + "a1": "文台", + "a2": "文若", + "a3": "文謙", + "a4": "文則", + "correct": 4 + }, + { + "id": 97, + "question": "典韋哪裡人?", + "a1": "陳留人", + "a2": "山陽巨鹿人", + "a3": "山陽昌邑人", + "a4": "關西人", + "correct": 1 + }, + { + "id": 98, + "question": "典韋所使兵器兩枝鐵戟有多重?", + "a1": "七十斤", + "a2": "八十斤", + "a3": "九十斤", + "a4": "一百斤", + "correct": 2 + }, + { + "id": 99, + "question": "誰殺死了曹操的父親曹嵩?", + "a1": "陶謙", + "a2": "呂伯奢", + "a3": "張闓(kai)", + "a4": "應劭", + "correct": 3 + }, + { + "id": 100, + "question": "陶謙字什麼?", + "a1": "公台", + "a2": "恭祖", + "a3": "公禮", + "a4": "恭敬", + "correct": 2 + }, + { + "id": 101, + "question": "糜竺字什麼?", + "a1": "子仲", + "a2": "子陽", + "a3": "子達", + "a4": "子龍", + "correct": 1 + }, + { + "id": 102, + "question": "陳登字什麼?", + "a1": "子龍", + "a2": "元龍", + "a3": "子義", + "a4": "伯符", + "correct": 2 + }, + { + "id": 103, + "question": "孔融字什麼?", + "a1": "文若", + "a2": "文謙", + "a3": "文舉", + "a4": "文則", + "correct": 3 + }, + { + "id": 104, + "question": "曹操欲屠徐州,誰給陶謙獻計向孔融求救?", + "a1": "陳登", + "a2": "糜竺", + "a3": "張闓(kai)", + "a4": "李膺(ying)", + "correct": 2 + }, + { + "id": 105, + "question": "“座上客常滿,樽中酒不空”說的是誰?", + "a1": "陶謙", + "a2": "劉備", + "a3": "曹操", + "a4": "孔融", + "correct": 4 + }, + { + "id": 106, + "question": "太史慈字什麼?", + "a1": "子恪", + "a2": "子龍", + "a3": "子義", + "a4": "子達", + "correct": 3 + }, + { + "id": 107, + "question": "北海被圍,孔融派誰向劉備求救?", + "a1": "太史慈", + "a2": "糜竺", + "a3": "管亥", + "a4": "陳登", + "correct": 1 + }, + { + "id": 108, + "question": "管亥被誰殺死?", + "a1": "劉備", + "a2": "關羽", + "a3": "張飛", + "a4": "趙雲", + "correct": 2 + } +] \ No newline at end of file