ground2.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,229 行 · 第 1/3 页
C
1,229 行
// create by snowcat.c 2/8/1997inherit __DIR__"ground1";#include <ground.h>void randomize_schedule (mapping events, int total, int sessions){ int base = total - sessions; int times = sessions*4; while (times--) { int *item; int i = base + (times%sessions); int j = base + random(sessions); int k; reset_eval_cost(); item = events[i]; if (random(2)) { k = item[0]; item[0] = item[2]; item[2] = k; k = item[1]; item[1] = item[3]; item[3] = k; } events[i] = events[j]; events[j] = item; }}void schedule_teams_dz (mapping teams){ int cycles = teams[0]["number"]; int sessions = 0; int total = 0; int nb_teams = teams["number"]; int i, j, k; mapping events = ([ ]); for (i = 0; i < cycles; i++) { sessions = 0; reset_eval_cost(); for (j = 0; j < nb_teams-1; j++) { for (k = j+1; k < nb_teams; k++) { events[total] = ({j,i,k,i,0}); sessions++; total++; } } randomize_schedule(events,total,sessions); } teams["cycles"] = cycles; teams["sessions"] = sessions; teams["total"] = total; teams["events"] = events;}void schedule_teams_xh (mapping teams){ int cycles = teams[0]["number"]; int sessions = 0; int total = 0; int nb_teams = teams["number"]; int i, j, k, l; mapping events = ([ ]); for (i = 0; i < cycles; i++) { sessions = 0; reset_eval_cost(); for (j = 0; j < nb_teams-1; j++) { for (k = j+1; k < nb_teams; k++) { for (l = 0; l < cycles; l++) { events[total] = ({j,i,k,l,0}); sessions++; total++; } } } //randomize_schedule(events,total,sessions); } randomize_schedule(events,total,total); teams["cycles"] = cycles; teams["sessions"] = sessions; teams["total"] = total; teams["events"] = events;}string show_team (mapping team){ int i; string str = " "; for (i = 0; i < team["number"]; i++) { mapping member = team[i]; str += member["name"]+"("+member["id"]+") "; } str += "\n"; return str;}string show_teams (mapping teams){ int i; string str = ""; for (i = 0; i < teams["number"]; i++) { mapping team = teams[i]; str += " 第"+chinese_number(i+1)+"队“"+team["info"]["team_name"]+"”:"; str += show_team (team); } return str;}void announcing_start (){ int mode = this_room()->query("match/mode"); mapping teams = this_room()->query("match/teams"); mapping team; string msg = "本大会比赛方式乃是“"+modes[mode]+"”,"+ mode_hints[mode]+"。\n"; announce (msg); teams["start"] = 1; if (teams && teams["number"] > 0) { int i; teams["current_winner_name"] = 0; teams["current_winner_id"] = 0; teams["current_player0_name"] = 0; teams["current_player0_id"] = 0; teams["current_player1_name"] = 0; teams["current_player1_id"] = 0; for (i = 0; i < teams["number"]; i++) { teams[i]["current_index"] = 0; } } switch (mode) { case MODE_SINGLE_SD: { announce (modes[mode]+"无须组队,请巫师将两名玩家邀入场内比赛!\n"); break; } case MODE_SINGLE_LT: { team = teams[0]; msg = modes[mode]+",选手按以下弱强顺序依次上场打擂:\n"; msg += show_team(team); announce (msg); break; } case MODE_TEAM_LT: { msg = modes[mode]+",共有"+chinese_number(teams["number"])+"组参赛队伍:\n"; msg += show_teams(teams); announce (msg); announce ("各队将依按弱强顺序依次上场打擂!\n"); break; } case MODE_TEAM_DZ: { msg = modes[mode]+",共有"+chinese_number(teams["number"])+"组参赛队伍:\n"; msg += show_teams(teams); announce (msg); schedule_teams_dz (teams); announce ("本赛将有"+chinese_number(teams["cycles"])+"轮对阵,"+ "每轮将有"+chinese_number(teams["sessions"])+"场比赛!\n"); break; } case MODE_TEAM_XH: { msg = modes[mode]+",共有"+chinese_number(teams["number"])+"组参赛队伍:\n"; msg += show_teams(teams); announce (msg); schedule_teams_xh (teams); announce ("本赛将有"+chinese_number(teams["cycles"])+"轮循环,"+ "每轮将有"+chinese_number(teams["sessions"])+"场比赛!\n"); break; } } call_out ("announcing_next",3);}void announcing_next (){ object who = this_player(); int mode = this_room()->query("match/mode"); mapping teams = this_room()->query("match/teams"); mapping team0; mapping team1; string name0; string name1; mapping member0; mapping member1; int done = 0; if (mode != MODE_SINGLE_SD) { tell_room (this_room(),"\n魏征从衣袖子里抽出透明丝绢望空一抛,口中念念有辞。\n"); tell_room (this_room(),"朝天一拜之后,魏征一把将丝绢顺手接住迅速一瞥。\n"); } switch (mode) { case MODE_SINGLE_SD: { inform (who, "现邀请两名玩家前来入场比赛!\n"); break; } case MODE_SINGLE_LT: { team0 = teams[0]; if (! teams["current_winner_id"]) { int current_index = 0; team0["current_index"] = 2; member0 = team0[0]; member1 = team0[1]; teams["current_player0_name"] = member0["name"]; teams["current_player0_id"] = member0["id"]; teams["current_player1_name"] = member1["name"]; teams["current_player1_id"] = member1["id"]; announce ("现邀请玩家"+teams["current_player1_name"]+ "("+teams["current_player1_id"]+")"+ "与玩家"+teams["current_player0_name"]+ "("+teams["current_player0_id"]+")"+ "前来摆阵打擂!\n"); } else if (team0["current_index"] < team0["number"]) { int current_index = team0["current_index"]; team0["current_index"] = current_index+1; member1 = team0[current_index]; teams["current_player0_name"] = teams["current_winner_name"]; teams["current_player0_id"] = teams["current_winner_id"]; teams["current_player1_name"] = member1["name"]; teams["current_player1_id"] = member1["id"]; announce ("现邀请玩家"+teams["current_player1_name"]+ "("+teams["current_player1_id"]+")"+ "前来挑战擂主"+teams["current_player0_name"]+ "("+teams["current_player0_id"]+")"+ "!\n"); } else { done = 1; } break; } case MODE_TEAM_LT: { int i, j, k; if (! teams["current_winner_id"]) { int current_index = 0; j = random(teams["number"]); team0 = teams[j]; member0 = team0[0]; team0["current_index"] = 1; teams["current_player0_name"] = member0["name"]; teams["current_player0_id"] = member0["id"]; } else { team0 = find_teams_team(teams,teams["current_winner_id"]); teams["current_player0_name"] = teams["current_winner_name"]; teams["current_player0_id"] = teams["current_winner_id"]; } teams["current_player1_name"] = 0; teams["current_player1_id"] = 0; k = teams[0]["number"]; for (i = 0; i < teams["number"]; i++) { team1 = teams[i]; if (find_team_member(team1,teams["current_player0_id"])) continue; if (k > team1["current_index"]) { k = team1["current_index"]; j = i; } } if (k < teams[0]["number"]) { team1 = teams[j]; member1 = team1[k]; team1["current_index"] = k+1; teams["current_player1_name"] = member1["name"]; teams["current_player1_id"] = member1["id"]; name0 = "“"+team0["info"]["team_name"]+"”队"; name1 = "“"+team1["info"]["team_name"]+"”队"; if (! teams["current_winner_id"]) announce ("现邀请"+name1+"选手"+teams["current_player1_name"]+ "("+teams["current_player1_id"]+")"+ "与"+name0+"选手"+teams["current_player0_name"]+ "("+teams["current_player0_id"]+")"+ "前来摆阵打擂!\n"); else announce ("现邀请"+name1+"选手"+teams["current_player1_name"]+ "("+teams["current_player1_id"]+")"+ "前来挑战"+name0+"擂主"+teams["current_player0_name"]+ "("+teams["current_player0_id"]+")"+ "!\n"); } else { done = 1; } break; } case MODE_TEAM_DZ: case MODE_TEAM_XH: { int cycles = teams["cycles"]; int sessions = teams["sessions"]; int total = teams["total"]; int index = teams["index"]; mapping events = teams["events"]; if (index < total) { int *item = events[index]; team0 = teams[item[0]]; team1 = teams[item[2]]; member0 = team0[item[1]]; member1 = team1[item[3]]; teams["current_player0_name"] = member0["name"]; teams["current_player0_id"] = member0["id"]; teams["current_player1_name"] = member1["name"]; teams["current_player1_id"] = member1["id"]; teams["index"] = index+1; name0 = "“"+team0["info"]["team_name"]+"”队"; name1 = "“"+team1["info"]["team_name"]+"”队"; announce ("大会第"+chinese_number(index/sessions+1)+"轮第"+ chinese_number(index%sessions+1)+"场比赛:\n"); announce ("现邀请"+name1+"选手"+teams["current_player1_name"]+ "("+teams["current_player1_id"]+")"+ "与"+name0+"选手"+teams["current_player0_name"]+ "("+teams["current_player0_id"]+")"+ "前来上场较量!\n"); } else { done = 1; } break; } } teams["done"] = done; if (done) inform (who, "差不多了,可以结束比赛了!\n");}string report_check (int brief){ int mode = this_room()->query("match/mode"); mapping teams = this_room()->query("match/teams"); mapping team; string msg = "比赛方式“"+modes[mode]+"”,"+ mode_hints[mode]+"。\n"; switch (mode) { case MODE_SINGLE_SD: { if (brief) return msg; msg += "\n请巫师将任意两名玩家邀入场内比赛。\n"; break; } case MODE_SINGLE_LT: { msg += modes[mode]+",选手按以下弱强顺序依次上场打擂:\n"; msg += show_team(teams[0]); if (brief) return msg; msg += "\n赢者为擂主,接受新选手的挑战。\n"; break; } case MODE_TEAM_LT: { msg += modes[mode]+",共有"+chinese_number(teams["number"])+"组参赛队伍:\n";
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?