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 + -
显示快捷键?