示例#1
0
文件: basic.c 项目: myshkin/angband
int test_drop_eat(void *state) {
	int num = 0;

	/* Load the saved game */
	eq(savefile_load("Test1", FALSE), TRUE);
	num = player->upkeep->inven[0]->number;

	cmdq_push(CMD_WALK);
	cmd_set_arg_direction(cmdq_peek(), "direction", 4);
	run_game_loop();
	cmdq_push(CMD_DROP);
	cmd_set_arg_item(cmdq_peek(), "item", player->upkeep->inven[0]);
	cmd_set_arg_number(cmdq_peek(), "quantity",
					   player->upkeep->inven[0]->number);
	run_game_loop();
	eq(square_object(cave, player->py, player->px)->number, num);
	cmdq_push(CMD_EAT);
	cmd_set_arg_item(cmdq_peek(), "item",
					 square_object(cave, player->py, player->px));
	run_game_loop();
	if (num > 1) {
		eq(square_object(cave, player->py, player->px)->number, num - 1);
	} else {
		eq(square_object(cave, player->py, player->px), NULL);
	}

	ok;
}
示例#2
0
int __fastcall diablo_init_menu(int a1, int bSinglePlayer)
{
	int v2; // esi
	int v3; // edi
	int v4; // ecx
	int pfExitProgram; // [esp+Ch] [ebp-4h]

	v2 = bSinglePlayer;
	v3 = a1;
	byte_678640 = 1;
	while ( 1 )
	{
		pfExitProgram = 0;
		dword_5256E8 = 0;
		if ( !NetInit(v2, &pfExitProgram) )
			break;
		byte_678640 = 0;
		if ( (v3 || !*(_DWORD *)&gbValidSaveFile)
		  && (InitLevels(), InitQuests(), InitPortals(), InitDungMsgs(myplr), !*(_DWORD *)&gbValidSaveFile)
		  || (v4 = WM_DIABLOADGAME, !dword_5256E8) )
		{
			v4 = WM_DIABNEWGAME;
		}
		run_game_loop(v4);
		NetClose();
		pfile_create_player_description(0, 0);
		if ( !gbRunGameResult )
			goto LABEL_11;
	}
	gbRunGameResult = pfExitProgram == 0;
LABEL_11:
	SNetDestroy();
	return gbRunGameResult;
}
示例#3
0
文件: basic.c 项目: myshkin/angband
int test_stairs2(void *state) {

	/* Load the saved game */
	eq(savefile_load("Test1", FALSE), TRUE);

	cmdq_push(CMD_WALK);
	cmd_set_arg_direction(cmdq_peek(), "direction", 4);
	run_game_loop();
	cmdq_push(CMD_WALK);
	cmd_set_arg_direction(cmdq_peek(), "direction", 6);
	run_game_loop();
	cmdq_push(CMD_GO_DOWN);
	run_game_loop();
	eq(player->depth, 1);

	ok;
}
示例#4
0
文件: basic.c 项目: myshkin/angband
int test_stairs1(void *state) {

	/* Load the saved game */
	eq(savefile_load("Test1", FALSE), TRUE);

	cmdq_push(CMD_GO_DOWN);
	run_game_loop();
	eq(player->depth, 1);

	ok;
}
示例#5
0
文件: basic.c 项目: myshkin/angband
int test_drop_pickup(void *state) {

	/* Load the saved game */
	eq(savefile_load("Test1", FALSE), TRUE);

	cmdq_push(CMD_WALK);
	cmd_set_arg_direction(cmdq_peek(), "direction", 4);
	run_game_loop();
	if (player->upkeep->inven[0]->number > 1) {
		cmdq_push(CMD_DROP);
		cmd_set_arg_item(cmdq_peek(), "item", player->upkeep->inven[0]);
		cmd_set_arg_number(cmdq_peek(), "quantity", 1);
		run_game_loop();
		eq(square_object(cave, player->py, player->px)->number, 1);
		cmdq_push(CMD_AUTOPICKUP);
		run_game_loop();
	}
	eq(square_object(cave, player->py, player->px), NULL);

	ok;
}
示例#6
0
文件: process.cpp 项目: mmpg/engine
void Process::Run(Game& game) {
  // ZeroMQ context
  zmq::context_t zcontext(1);

  // Components
  Api api(zcontext, 5555);
  Notifier notifier(zcontext, 5556);
  Server server(zcontext, 5557);

  // TODO: Read workers from file
  // TODO: Initialize workers properly and distribute players
  // TODO: Use a worker vector
  Worker worker;

  // Game log
  Log log("match/log");

  World* world;

  if(utils::FileExists("match/world.txt")) {
    std::ifstream stream("match/world.txt");

    // Read existing world
    world = game.ReadWorld(stream);
  } else {
    // TODO: This should be API-driven
    // Generate a new world
    world = game.GenerateWorld();
    log.Clear();
  }

  // Print current world
  std::ostringstream stream;
  world->PrintStructure(stream);

  debug::Println("MASTER", "Current world:");
  debug::Print(stream.str());

  // Start servers
  std::thread api_thread(run_api, std::ref(api), std::ref(worker), std::ref(*world), std::ref(log));
  std::thread server_thread(run_server, std::ref(server), std::ref(worker), std::ref(game), std::ref(*world),
                            std::ref(notifier), std::ref(log));

  // Run players
  worker.Run();

  // Run game loop
  run_game_loop(*world, notifier, log);
}
示例#7
0
文件: ui-game.c 项目: myshkin/angband
/**
 * Play Angband
 */
void play_game(bool new_game)
{
	/* Load a savefile or birth a character, or both */
	start_game(new_game);

	/* Get commands from the user, then process the game world until the
	 * command queue is empty and a new player command is needed */
	while (!player->is_dead && player->upkeep->playing) {
		cmd_get_hook(CMD_GAME);
		run_game_loop();
	}

	/* Close game on death or quitting */
	close_game();
}
示例#8
0
文件: mage.c 项目: Daedelus01/angband
int test_magic_missile(void *state) {

	/* Try making a new game */
	cmdq_push(CMD_BIRTH_INIT);
	cmdq_push(CMD_BIRTH_RESET);
	cmdq_push(CMD_CHOOSE_RACE);
	cmd_set_arg_choice(cmdq_peek(), "choice", 4);

	cmdq_push(CMD_CHOOSE_CLASS);
	cmd_set_arg_choice(cmdq_peek(), "choice", 1);

	cmdq_push(CMD_ROLL_STATS);
	cmdq_push(CMD_NAME_CHOICE);
	cmd_set_arg_string(cmdq_peek(), "name", "Tyrion");

	cmdq_push(CMD_ACCEPT_CHARACTER);
	cmdq_execute(CMD_BIRTH);

	eq(player->is_dead, FALSE);
	cave_generate(&cave, player);
	on_new_level();
	notnull(cave);
	eq(player->chp, player->mhp);
	eq(player->food, PY_FOOD_FULL - 1);

	cmdq_push(CMD_STUDY);
	cmd_set_arg_choice(cmdq_peek(), "spell", 0);
	run_game_loop();
	cmdq_push(CMD_CAST);
	cmd_set_arg_choice(cmdq_peek(), "spell", 0);
	cmd_set_arg_target(cmdq_peek(), "target", 2);
	run_game_loop();
	noteq(player->csp, player->msp);

	ok;
}