Exemple #1
0
// ---
void DragonWindGame::initialize ()
{
	QGAMES::ArcadeGame::initialize ();

	// Sets the icon of the game...
	mainScreen () -> setIcon (formBuilder () -> form (__DRAGONWINDICON__));

	// Add to the world its different world...
	// Initially none of them is active!
	addWorld (__DRAGONSELECTIONWORLD);
	addWorld (__DRAGONTRAININGWORLD);

	// Add to the game its different states...
	addState (new DragonWindPauseState (this), std::string (__DRAGONSTATEPAUSENAME));
	addState (new DragonWindInitialState (this), std::string (__DRAGONSTATEINITIALNAME));
	addState (new DragonWindIntroductionState (this), std::string (__DRAGONSTATEINTRODUCTIONNAME));
	addState (new DragonWindSelectionState (this), std::string (__DRAGONSTATESELECTONNAME));
	addState (new DragonWindInstructionsState (this), std::string (__DRAGONSTATEINSTRUCTIONSNAME));
	addState (new DragonWindTrainingState (this), std::string (__DRAGONSTATETRAININGNAME));
	addState (new DragonWindCountingDownState (this), std::string (__DRAGONSTATECOUNTDOWNNAME));
	addState (new DragonWindPlayingState (this), std::string (__DRAGONSTATEPLAYINGNAME));
	addState (new DragonWindEndState (this), std::string (__DRAGONSTATEENDNAME));
	addState (new DragonWindWinState (this), std::string (__DRAGONSTATEWINNAME));

	// Add to the game its different artists
	// Their visibility will depend on the world and scene the main players are in
	addArtist (_DRAGONNINJAARTIST); // The main character of the game...
	addArtist (_DRAGONNINJAARTISTB); 
	// The other main character of the game...this last one is only used during presentations!

	// The initial state...
	setState (std::string (__DRAGONSTATEINTRODUCTIONNAME));
}
Exemple #2
0
void TabletServer::dispatch(QTcpSocket *socket, const QStringList &path, const QStringMap &query)
{
    QString pathStr = path.join("/");
    //qDebug() << "TabletServer::dispatch(): path: "<<path;

    if(pathStr.startsWith("data/")   ||
            pathStr.startsWith(":/data/") ||
            pathStr.startsWith("www/")    ||
            pathStr.startsWith(":/data/www/"))
    {
        serveFile(socket,pathStr);
    }
    else if(pathStr.startsWith("favicon.ico"))
    {
        serveFile(socket,":/data/http/favicon.ico");
    }
    else
    {
        mainScreen(socket,path,query);
    }

// 	else
// 	{
// 		Http_Send_404(socket)
// 			<< "<h1>Oops!</h1>\n"
// 			<< "Hey, my bad! I can't find \"<code>"<<toPathString(path,query)<<"</code>\"! Sorry!";
// 	}

}
void mainControler(){
	while(1){
		switch(screenNR){
		case 1:
			mainScreen();
			break;
		case 2:
			smartMirror();
			break;
		}
	}
}
void StaffList::mainScreen() {
	//readFile(input_text_file, usth_staff_list, stu_list_size);
	//StaffList l("USTH_staff_list.txt");
	for(;;) {
		cout << endl << endl;
		cout << "USTHStaffManager v7.0" << endl;
		cout << "1. Search." << endl;
		cout << "2. Change staff member info." << endl;
	  cout << "3. Remove staff member." << endl;
	  cout << "4. Add a staff member." << endl;
	  cout << "0. Back." << endl;
	  
	  cout << "What do you want to do, choose one option: ";
	  
	  // Verify a command if it is integer and belong to {0..4}
	  int command;  
		while (true) {
			cin >> command;
			if (cin && (command < 5) && (command > -1)) break;
			cout << "Invalid command!" << endl;
			cin.clear();
			cin.ignore(256,'\n');
		} 
		//////////////////////////////////////////////////////////
		
	  switch (command) {
	  	case 1: mainSearch();
	  					break;
	  					//mainScreen();
	  	case 2: mainChangeStaffInfo();
	  					//mainScreen();
	  					break;
	  	case 3: mainRemoveStaff();
	  					//mainScreen();
	  					break;
	  	case 4: mainAddStaff();
	  					//mainScreen(); 					
	  					break;
	  	case 0: return;
	  	default: 
	  		cout << "Invalid command!" << endl;
	  		mainScreen();
	  		
	  }
	}
}
void LecturerList::mainScreen() {
	//readFile(input_text_file, usth_lecturer_list, stu_list_size);
	//LecturerList l("USTH_lecturer_list.txt");
	for(;;) {
		cout << endl << endl;
		cout << "USTHLecturerManager v6.0" << endl;
		cout << "1. Search." << endl;
		cout << "2. Change lecturer info." << endl;
	  cout << "3. Remove lecturer." << endl;
	  cout << "4. Add a lecturer." << endl;
	  cout << "0. Back." << endl;
	  
	  cout << "Enter a number: ";
	  
	  // Verify a command if it is integer and belong to {0..4}
	  int command;  
		while (true) {
			cin >> command;
			if (cin && (command < 5) && (command > -1)) break;
			cout << "Invalid command!" << endl;
			cin.clear();
			cin.ignore(256,'\n');
		} 
		//////////////////////////////////////////////////////////
		
	  switch (command) {
	  	case 1: mainSearch();
	  					break;
	  					//mainScreen();
	  	case 2: mainChangeLecturerInfo();
	  					//mainScreen();
	  					break;
	  	case 3: mainRemoveLecturer();
	  					//mainScreen();
	  					break;
	  	case 4: mainAddLecturer();
	  					//mainScreen(); 					
	  					break;
	  	case 0: return;
	  	default: 
	  		cout << "Invalid command!" << endl;
	  		mainScreen();
	  		
	  }
	}
}
Exemple #6
0
// ---
void PacmanGame::updatePositions ()
{
	// If the game has been stopped for a while,
	// Not actualization is done...
	// Normally the game is stopped when a monster has been eaten!
	// It has to be done before any other thing happens...
	if (_gameStopped)
	{
		if (++_counterStopped >= (1 * framesPerSecond ()))
		{
			_gameStopped = false;
			_counterStopped = 0;
		}

		return;
	}

	// Now first do what the parents says to do...
	QGAMES::ArcadeGame::updatePositions ();

	QGAMES::Screen* scr = mainScreen ();
	if (scr -> fix () != NULL)
		scr -> setFix (NULL); 
	// When the status is not playing, there is nothing to follow...
	// Any case, this is just in case...

	// When the game is not going on...
	// Nothing of the rest makes sense...
	if (_currentGameState -> type () != __GAMESTATEPLAYING)
		return;

	// Otherwhise....
	// Has the fruit to be shown?
	++_counterToFruit;
	if (_counterToFruit == (_secondForFruit * framesPerSecond ()))
	{
		// The counter is not set to 0 again because only one fruit is allowed per round...
		// The fruit shown depends on the level...
		((WorldPacman*) _activeWorld) -> 
			showFruit ((int) General::_e._variables [_level][__VARBONUSSYMBOL]);
		_fruitShown = true;
	}

	// If the fruit is on the screen
	// The counter is still counting to remove it...
	// The fruit is 5 seconds on the screen always (independent on the level)
	if (_fruitShown)
	{
		if (_counterToFruit == ((_secondForFruit + 5) * framesPerSecond ()))
		{
			// The counter is not set to 0 again because only one fruit is allowed per round...
			((WorldPacman*) _activeWorld) -> showFruit (__FRUITFRAMEEMPTY);
			_fruitShown = false;
			_counterToFruit = 0;
		}
	}

	// Look after the frightening status...
	// The number of seconds the frightening ststus lasts depends on the level...
	if (_mode == PacmanGame::_FRIGHTENING)
	{
		_counterFrigthening++;
		if (_counterFrigthening >= 
				((int) (General::_e._variables [_level][__VARFRIGHTTIME] * framesPerSecond ())))
		{
			setMode (PacmanGame::_SEMIFRIGHTENING);
			_counterFrigthening = 0;
		}
	}

	// Look after the semifrightening status...
	// The game is turning back to the normal situation...
	// The number of seconds in the new flashing situation also depends on the level...
	if (_mode == PacmanGame::_SEMIFRIGHTENING)
	{
		_counterFrigthening++;
		if (_counterFrigthening >= 
				((int) (General::_e._variables [_level][__VARNUMBERFLASHES] * framesPerSecond ())))
		{
			setMode (PacmanGame::_NORMAL);
			_counterFrigthening = 0;
		}
	}
}
Exemple #7
0
// ---
void PacmanGame::initialize ()
{
	QGAMES::ArcadeGame::initialize ();

	// Sets the icon to the window...
	mainScreen () -> setIcon (formBuilder () -> form (__PACMANICOFORM));

	// Clean up everything...
	_artists.clear ();
	_gameStates.clear ();
	_worlds.clear ();

	// The main artist of the game, if they have not been created and inserted before...
	// The command entity creates the entities and observe them...
	_pacman = (Pacman*) entity (__ENTITYPACMAN);
	_artists.insert (QGAMES::Entities::value_type (__ENTITYPACMAN, _pacman));

	// The monsters...
	// Blinky
	_blinky = (Blinky*) entity (__ENTITYBLINKY);
	_blinky -> setMyTarget (_pacman); // Target?
	_monsters.push_back (_blinky);
	_artists.insert (QGAMES::Entities::value_type (__ENTITYBLINKY, _blinky));

	// Pinky
	_pinky = (Pinky*) entity (__ENTITYPINKY);
	_pinky -> setMyTarget (_pacman);
	_monsters.push_back (_pinky);
	_artists.insert (QGAMES::Entities::value_type (__ENTITYPINKY, _pinky));

	// Inky
	_inky = (Inky*) entity (__ENTITYINKY);
	_inky -> setMyTarget (_pacman);
	_monsters.push_back (_inky);
	_artists.insert (QGAMES::Entities::value_type (__ENTITYINKY, _inky));

	// Clyde
	_clyde = (Clyde*) entity (__ENTITYCLYDE);
	_clyde -> setMyTarget (_pacman);
	_monsters.push_back (_clyde);
	_artists.insert (QGAMES::Entities::value_type (__ENTITYCLYDE, _clyde));

	// Assign the collegues...
	_blinky -> setCollegues (_monsters);
	_pinky -> setCollegues (_monsters);
	_inky -> setCollegues (_monsters);
	_clyde -> setCollegues (_monsters);

	// Load the states...
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATELOADINGNAME), new PacmanGameStateLoading (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEINITIALNAME), new GameStateInitial (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEPRELUDENAME), new GameStatePrelude (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEPRELUDESHORTNAME), new GameStatePreludeShort (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEPLAYINGNAME), new GameStatePlaying (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEMAZECLEANNAME), new GameStateMazeClean (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEPACMANDIESNAME), new GameStatePacmanDies (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEROUNDENDNAME), new GameStateRoundEnd (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEENDNAME), new GameStateEnd (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATEINTROLETTERSNAME), new GameStateIntroLetters (this)));
	_gameStates.insert (QGAMES::GameStates::value_type 
		(std::string (__GAMESTATESEESCORESNAME), new GameStateSeeScore (this)));

	// When the game starts, the list of the most famous player is loaded
	// The list is something really simple to read
	_scores.clear ();
	std::ifstream scoreFile ("scores.txt");
	if (scoreFile)
	{
		std::string usr, score;
		while (!scoreFile.eof ())
		{
			scoreFile >> score >> usr;
			_scores.insert (std::pair <int, std::string> (atoi (score.c_str ()), usr));
		}

		scoreFile.close ();
	}

	// The initial state...
	setState (std::string (__GAMESTATELOADINGNAME));

	// Load the world...
	_worlds.insert (QGAMES::Worlds::value_type (__WORLDPACMAN,
		_worldBuilder -> world (__WORLDPACMAN)));

	// Sets the first level...
	setLevel (0);
}
Exemple #8
0
// ---
QGAMES::FormBuilder* PacmanGame::createFormBuilder ()
{ 
	return (new SDL2DSpriteBuilder (std::string (__FORMSFILE__), 
		(SDLScreen*) mainScreen ())); 
}
Exemple #9
0
int main(int argc, char *argv[])
{
 char opt;
 static struct option long_options[] =
 {
  {"item", 0, 0, 'i'},
  {"monster", 0, 0, 'm'},
  {"spell", 0, 0, 's'},
  {"map", 1, 0, 'p'},
  {"editmap", 1, 0, 'e'},
  {"ascii", 0, 0, 'a'},
  {"xml", 1, 0, 'x'},
  {"multiplier", 1, 0, 'u'},
  {0, 0, 0, 0}
 };

 bool utf8 = true;
 int mode = MODE_STANDARD;
 char *mapFile = NULL;
 char *xmlFile = NULL;
 int multiplier = 0;
 std::string libDir(TOSTRING(BTBUILDERDIR));
 while ((opt = getopt_long(argc,argv,"imsap:x:e:l:u:", long_options, NULL)) != EOF)
 {
  switch (opt)
  {
   case 'i':
    mode = MODE_ITEM;
    break;
   case 'm':
    mode = MODE_MONSTER;
    break;
   case 's':
    mode = MODE_SPELL;
    break;
   case 'p':
    mode = MODE_MAP;
    if (optarg)
    {
     mapFile = strdup(optarg);
    }
    break;
   case 'e':
    mode = MODE_EDITMAP;
    if (optarg)
    {
     mapFile = strdup(optarg);
    }
    break;
   case 'l':
    if (optarg)
    {
     libDir = optarg;
    }
    break;
   case 'a':
    utf8 = false;
    break;
   case 'x':
    if (optarg)
    {
     xmlFile = strdup(optarg);
    }
    break;
   case 'u':
    if (optarg)
    {
     multiplier = atol(optarg);
    }
    break;
   default:
    break;
  }
 }

 BTMainScreen mainScreen(argv[0], libDir, multiplier);
 if (optind >= argc)
 {
  if (mode != MODE_STANDARD)
   return 0;
  mainScreen.run();
  return 0;
 }
 else if (mode == MODE_STANDARD)
 {
  std::string moduleFile("module/");
  moduleFile += argv[optind];
  moduleFile += ".xml";
  mainScreen.runModule(moduleFile);
  return 0;
 }
 else if (mode == MODE_EDITMAP)
 {
  std::string moduleFile("module/");
  moduleFile += argv[optind];
  moduleFile += ".xml";
  mainScreen.editModule(moduleFile, mapFile);
  return 0;
 }
 std::string moduleFile("module/");
 moduleFile += argv[optind];
 moduleFile += ".xml";
 BTModule module;
 mainScreen.loadModule(moduleFile, module);
 BTGame game(&module);
 BTFactory<BTMonster> &monList(game.getMonsterList());
 BTFactory<BTItem> &itmList(game.getItemList());
 BTFactory<BTSpell, BTSpell1> &splList(game.getSpellList());
 int i;
 if (mode == MODE_MONSTER)
 {
  if (xmlFile)
  {
   monList.save(xmlFile);
  }
  else
  {
   for (i = 0; i < monList.size(); i++)
   {
    BTMonster &mon(monList[i]);
    printf("Name: %s\n", mon.getName().c_str());
    printf("Illusion: %s   Base armor class: %d\n",
      (mon.isIllusion() ? "Yes" : "No"), (mon.getAc() - 10) * -1);
    printf("Level: %d   Thaumaturgical resistance: %d\n", mon.getLevel(),
      mon.getMagicResistance());
    printf("Starting distance (*10'): %d   Moves per round: %d\n",
      mon.getStartDistance(), mon.getMove());
    printf("Hit points: %dd%d   Combat options: ", mon.getHp().getNumber(),
      mon.getHp().getType());
    IShort combatAction = mon.getCombatAction(0);
    for (int a = 1; a < 4; ++a)
     if (combatAction != mon.getCombatAction(a))
      combatAction = -1;
    if (-1 == combatAction)
     printf("Multiple\n");
    else
     printf("%s\n", combatActions[combatAction]);
    printf("Rate of attacks: %d   Damage dice: %dd%d\n",
      mon.getRateAttacks(), mon.getMeleeDamage().getNumber(),
      mon.getMeleeDamage().getType());
    printf("Extra damage: %s\n", extraDamage[mon.getMeleeExtra()]);
    printf("Attack message: <monster> %s <opponent>\n", mon.getMeleeMessage());
    printf("Extra ranged attack information -\n");
    printf("   Type: %s", rangedTypes[mon.getRangedType()]);
    switch (mon.getRangedType())
    {
     case BTRANGEDTYPE_MAGIC:
      printf(": %s", splList[mon.getRangedSpell()].getCode());
     case BTRANGEDTYPE_FOE:
     case BTRANGEDTYPE_GROUP:
      printf("   Message: <monster> %s <opponent>\n", mon.getRangedMessage());
      printf("   Damage: %dd%d   Extra damage: %s   Range: %d",
        mon.getRangedDamage().getNumber(),  mon.getRangedDamage().getType(),
        extraDamage[mon.getRangedExtra()], mon.getRange());
      break;
     default:
      break;
    }
    printf("\n");
    printf("Upper limit appearing: %d  Gold: %dd%d   Picture number: %d\n",
      mon.getMaxAppearing(), mon.getGold().getNumber(),
      mon.getGold().getType(), mon.getPicture());
    printf("\n");
   }
  }
 }
 else if (mode == MODE_SPELL)
 {
  if (xmlFile)
  {
   splList.save(xmlFile);
  }
  else
  {
   BTSpellListCompare compare;
   BTSortedFactory<BTSpell, BTSpell1> sortedSplList(&splList, &compare);
   IShort caster = -1;
   IShort level = -1;
   for (i = 0; i < sortedSplList.size(); i++)
   {
    BTSpell &mon(sortedSplList[i]);
    if ((caster != mon.getCaster()) || (level != mon.getLevel()))
    {
     if (caster != mon.getCaster())
     {
      caster = mon.getCaster();
      BTJobList& jobList = BTGame::getGame()->getJobList();
      int j;
      for (j = 0; j < jobList.size(); ++j)
      {
       if (jobList[j]->getSkill(caster) != NULL)
        break;
      }
      printf("Class:  %s\n", ((j < jobList.size()) ? BTGame::getGame()->getJobList()[j]->name : "Unknown"));
     }
     level = mon.getLevel();
     printf("Level: %d\n\n", level);
    }
    printf("Name: %s\n", mon.getName().c_str());
    printf("Code: %s\n", mon.getCode());
    printf("Points: %d   Range: %d   Extra range: %s\n", mon.getSp(),
      mon.getRange() * 10, effectiveRanges[mon.getEffectiveRange()]);
    printf("Target: %s\n", areaEffect[mon.getArea()]);
    printf("Effect: %s <target>\n", mon.getEffect());
    printf("Duration: %s\n", durations[mon.getDuration()]);
    printf("%s", mon.describeManifest().data());
/*    printf("Type: %s", spellTypes[mon.getType()]);
    switch (mon.getType())
    {
     case BTSPELLTYPE_SUMMONILLUSION:
     case BTSPELLTYPE_SUMMONMONSTER:
      printf("   Name: %s", monList[mon.getExtra()].getName().c_str());
      break;
     case BTSPELLTYPE_ARMORBONUS:
     case BTSPELLTYPE_HITBONUS:
      printf("   Bonus: %d", mon.getExtra());
      break;
     case BTSPELLTYPE_PUSH:
      printf("   Distance: %d", mon.getExtra());
      break;
     case BTSPELLTYPE_REGENBARD:
      printf("   Amount: %d", mon.getExtra());
      break;
     default:
      break;
    }
    printf("\nDice: %dd%d   Duration: %s\n", mon.getDice().getNumber(),
      mon.getDice().getType(), durations[mon.getDuration()]);
*/    printf("\n");
   }
  }
 }
 else if (mode == MODE_ITEM)
 {
  if (xmlFile)
  {
   itmList.save(xmlFile);
  }
  else
  {
   for (i = 0; i < itmList.size(); i++)
   {
    BTItem &mon(itmList[i]);
    printf("Name: %s\n", mon.getName().c_str());
    printf("Type: %s\n", itemTypes[mon.getType()]);
    printf("Price: %d   User class: Multiple\n", mon.getPrice());
    printf("Armor bonus: %d   Hit bonus: %d\n", mon.getArmorPlus(),
      mon.getHitPlus());
    printf("Damage dice: %dd%d\n", mon.getDamage().getNumber(),
      mon.getDamage().getType());
    printf("Extra special damage: %s   Special damage likelihood: %d%%\n",
      extraDamage[mon.getXSpecial()], mon.getChanceXSpecial());
    if (BTTIMESUSABLE_UNLIMITED == mon.getTimesUsable())
     printf("Times useable: (unlimited)");
    else
     printf("Times useable: %d", mon.getTimesUsable());
    printf("   Spell cast: %s\n",
      ((mon.getSpellCast() == BTITEMCAST_NONE) ? "(none)" :
      splList[mon.getSpellCast()].getName().c_str()));
    printf("Cause: <member> %s <opponent>\n", mon.getCause());
    printf("Effect: %s <damage>\n", mon.getEffect());
    printf("\n");
   }
  }
 }
 else if (mode == MODE_MAP)
 {
  int x, y;
  IShort index;
  if (mapFile)
   game.loadMap(mapFile);
  BTMap &gameMap = *game.getMap();
  if (xmlFile)
  {
   XMLSerializer parser;
   parser.add("map", &gameMap);
   parser.write(xmlFile, true);
  }
  else
  {
   printf("Name: %s\n", gameMap.getName());
   printf("Type: %s   Level: %d\n", game.getPsuedo3DConfigList().getName(gameMap.getType()).c_str(), gameMap.getLevel());
   printf("Monster difficulty: %d   Chance of encounter: %d%%\n", gameMap.getMonsterLevel(), gameMap.getMonsterChance());
   printf("File: %s\n\n", gameMap.getFilename());
   for (y = 0; y < gameMap.getYSize(); y++)
   {
    printf(" ");
    for (x = 0; x < gameMap.getXSize(); x++)
    {
     index = 0;
     if ((y > 0) && (gameMap.getSquare(y - 1, x).getWall(BTDIRECTION_WEST) > 0))
     {
      index += 1 << BTDIRECTION_NORTH;
     }
     if ((x > 0) && (gameMap.getSquare(y, x - 1).getWall(BTDIRECTION_NORTH) > 0))
     {
      index += 1 << BTDIRECTION_WEST;
     }
     if (gameMap.getSquare(y, x).getWall(BTDIRECTION_NORTH) > 0)
     {
      index += 1 << BTDIRECTION_EAST;
     }
     if (gameMap.getSquare(y, x).getWall(BTDIRECTION_WEST) > 0)
     {
      index += 1 << BTDIRECTION_SOUTH;
     }
     if (utf8)
      printf("%s%s", cornerWallsUTF8[index], upperWallsUTF8[gameMap.getSquare(y, x).getWall(BTDIRECTION_NORTH)]);
     else
      printf("%c%c", cornerWalls[index], upperWalls[gameMap.getSquare(y, x).getWall(BTDIRECTION_NORTH)]);
    }
    index = 0;
    if ((y > 0) && (gameMap.getSquare(y - 1, gameMap.getXSize() - 1).getWall(BTDIRECTION_EAST) > 0))
    {
     index += 1 << BTDIRECTION_NORTH;
    }
    if (gameMap.getSquare(y, gameMap.getXSize() - 1).getWall(BTDIRECTION_NORTH) > 0)
    {
     index += 1 << BTDIRECTION_WEST;
    }
    if (gameMap.getSquare(y, gameMap.getXSize() - 1).getWall(BTDIRECTION_EAST) > 0)
    {
     index += 1 << BTDIRECTION_SOUTH;
    }
    if (utf8)
     printf("%s \n", cornerWallsUTF8[index]);
    else
     printf("%c \n", cornerWalls[index]);
    printf(" ");
    for (x = 0; x < gameMap.getXSize(); x++)
    {
     index = gameMap.getSquare(y, x).getSpecial();
     if (utf8)
      printf("%s%c", sideWallsUTF8[gameMap.getSquare(y, x).getWall(BTDIRECTION_WEST)],
        (index < 0 ) ? ' ' : ((index < 26) ? 'A' + index : 'a' - 26 + index));
     else
      printf("%c%c", sideWalls[gameMap.getSquare(y, x).getWall(BTDIRECTION_WEST)],
        (index < 0 ) ? ' ' : ((index < 26) ? 'A' + index : 'a' - 26 + index));
    }
    if (utf8)
     printf("%s \n", sideWallsUTF8[gameMap.getSquare(y, gameMap.getXSize() - 1).getWall(BTDIRECTION_EAST)]);
    else
     printf("%c \n", sideWalls[gameMap.getSquare(y, gameMap.getXSize() - 1).getWall(BTDIRECTION_EAST)]);
   }
   printf(" ");
   for (x = 0; x < gameMap.getXSize(); x++)
   {
    index = 0;
    if (gameMap.getSquare(gameMap.getYSize() - 1, x).getWall(BTDIRECTION_WEST) > 0)
    {
     index += 1 << BTDIRECTION_NORTH;
    }
    if ((x > 0) && (gameMap.getSquare(gameMap.getYSize() - 1, x - 1).getWall(BTDIRECTION_SOUTH) > 0))
    {
     index += 1 << BTDIRECTION_WEST;
    }
    if (gameMap.getSquare(gameMap.getYSize() - 1, x).getWall(BTDIRECTION_SOUTH) > 0)
    {
     index += 1 << BTDIRECTION_EAST;
    }
    if (utf8)
     printf("%s%s", cornerWallsUTF8[index], upperWallsUTF8[gameMap.getSquare(gameMap.getYSize() - 1, x).getWall(BTDIRECTION_SOUTH)]);
    else
     printf("%c%c", cornerWalls[index], upperWalls[gameMap.getSquare(gameMap.getYSize() - 1, x).getWall(BTDIRECTION_SOUTH)]);
   }
   index = 0;
   if (gameMap.getSquare(gameMap.getYSize() - 1, gameMap.getXSize() - 1).getWall(BTDIRECTION_EAST) > 0)
   {
    index += 1 << BTDIRECTION_NORTH;
   }
   if (gameMap.getSquare(gameMap.getYSize() - 1, gameMap.getXSize() - 1).getWall(BTDIRECTION_SOUTH) > 0)
   {
    index += 1 << BTDIRECTION_WEST;
   }
   if (utf8)
    printf("%s \n", cornerWallsUTF8[index]);
   else
    printf("%c \n", cornerWalls[index]);
   printf("\nDefined special squares:\n\n\n");
   for (int i = 0; i < 30; i++)
   {
    const BTSpecial *sp = gameMap.getSpecial(i);
    if (NULL != sp)
    {
     printf("%c. ", (i < 26) ? 'A' + i : 'a' - 26 + i);
     sp->print(stdout);
     printf("\n");
    }
   }
  }
 }
 PHYSFS_deinit();
 return 0;
}
Exemple #10
0
nsresult nsIconChannel::MakeInputStream(nsIInputStream** _retval, PRBool nonBlocking)
{
  nsXPIDLCString contentType;
  nsCAutoString filePath;
  nsCAutoString fileExtension;
  nsCOMPtr<nsIFile> localFile; // File we want an icon for
  PRUint32 desiredImageSize;
  nsresult rv = ExtractIconInfoFromUrl(getter_AddRefs(localFile), &desiredImageSize, contentType, fileExtension);
  NS_ENSURE_SUCCESS(rv, rv);

  PRUint32 iconSize = 16;
  if (desiredImageSize > 16)
    iconSize = 32;

  PRUint32 alphaBytesPerRow = (iconSize / 8);
  if (iconSize % 32 != 0)
    alphaBytesPerRow = ((iconSize / 32) + 1) * 4;
    
  PRBool fileExists = PR_FALSE;
  if (localFile)
  {
    localFile->GetNativePath(filePath);
    localFile->Exists(&fileExists);
  }
  
  // Get the native icon.
  // 1) If it is for an actual local file, BNodeInfo::GetTrackerIcon.
  // 2) If the local file does not exist, use the content type 
  //    and BMimeType::GetIcon
  BBitmap nativeIcon(BRect(0, 0, iconSize - 1, iconSize - 1), B_CMAP8);
  if (!nativeIcon.IsValid())
    return NS_ERROR_OUT_OF_MEMORY;

  PRBool gotBitmap = PR_FALSE;
  if (fileExists)
  {
    BNode localNode(filePath.get());
    // BeOS doesn't MIME type foreign files immediately - 
    // If there is no type attribute then we can force an identify
    if (localNode.ReadAttr("BEOS:TYPE", B_STRING_TYPE, 0, NULL, 0) != B_OK)
    	update_mime_info(filePath.get(), 0, 1, 1);

    BNodeInfo localNodeInfo(&localNode);
    if (iconSize == 16)
    {
      if (localNodeInfo.GetTrackerIcon(&nativeIcon, B_MINI_ICON) == B_OK)
        gotBitmap = PR_TRUE;
    }
    else
    {
      if (localNodeInfo.GetTrackerIcon(&nativeIcon, B_LARGE_ICON) == B_OK)
        gotBitmap = PR_TRUE;
    }
  }

  // If we haven't got a bitmap yet, use the content type
  if (!gotBitmap)    
  {
    // If no content type specified, use mozilla's mime service to guess a mime type
    if (contentType.IsEmpty())
    {
      nsCOMPtr<nsIMIMEService> mimeService (do_GetService("@mozilla.org/mime;1", &rv));
      if (NS_SUCCEEDED(rv))
        mimeService->GetTypeFromExtension(fileExtension, contentType);
      // If unrecognised extension - set to generic file
      if (contentType.IsEmpty())
        contentType = "application/octet-stream";
    }
    // Create BeOS-Native MIME type info - if unheard of, set to generic file
    BMimeType mimeType(contentType.get());
    if (!mimeType.IsInstalled())
    	mimeType.SetTo("application/octet-stream");
    if (iconSize == 16)
    {
      if (mimeType.GetIcon(&nativeIcon, B_MINI_ICON) == B_OK)
        gotBitmap = PR_TRUE;
    }
    else
    {
      if (mimeType.GetIcon(&nativeIcon, B_LARGE_ICON) == B_OK)
        gotBitmap = PR_TRUE;
    }
  }
  
  if (!gotBitmap)
    return NS_ERROR_NOT_AVAILABLE;

  BScreen mainScreen(B_MAIN_SCREEN_ID);
  if (!mainScreen.IsValid())
    return NS_ERROR_NOT_AVAILABLE;

  // Got a bitmap and color space info - convert data to mozilla's icon format
  PRUint32 iconLength = 2 + iconSize * iconSize * 4;
  uint8 *buffer = new uint8[iconLength];
  if (!buffer)
    return NS_ERROR_OUT_OF_MEMORY;

  uint8* destByte = buffer;
  *(destByte++) = iconSize;
  *(destByte++) = iconSize;

  // RGB data
  uint8* sourceByte = (uint8*)nativeIcon.Bits();
  for(PRUint32 iconRow = 0; iconRow < iconSize; iconRow++)
  {
    sourceByte = (uint8*)nativeIcon.Bits() + nativeIcon.BytesPerRow() * iconRow;
    for(PRUint32 iconCol = 0; iconCol < iconSize; iconCol++)
    {
      if (*sourceByte != B_TRANSPARENT_MAGIC_CMAP8)
      {
        rgb_color colorVal = mainScreen.ColorForIndex(*sourceByte);
#ifdef IS_LITTLE_ENDIAN
        *(destByte++) = colorVal.blue;
        *(destByte++) = colorVal.green;
        *(destByte++) = colorVal.red;
        *(destByte++) = uint8(255);
#else
        *(destByte++) = uint8(255);
        *(destByte++) = colorVal.red;
        *(destByte++) = colorVal.green;
        *(destByte++) = colorVal.blue;
#endif
      }
      else
      {
        *destByte++ = 0;
        *destByte++ = 0;
        *destByte++ = 0;
        *destByte++ = 0;
      }
      // original code had a conditional here:
      // if (iconCol < iconSize - 1) 
      // Leaving this comment in case complications arise later
      sourceByte++;
    }
  }

  NS_ASSERTION(buffer + iconLength == destByte, "size miscalculation");
  
  // Now, create a pipe and stuff our data into it
  nsCOMPtr<nsIInputStream> inStream;
  nsCOMPtr<nsIOutputStream> outStream;
  rv = NS_NewPipe(getter_AddRefs(inStream), getter_AddRefs(outStream),
                  iconLength, iconLength, nonBlocking);
  if (NS_SUCCEEDED(rv))
  {
    PRUint32 written;
    rv = outStream->Write((char*)buffer, iconLength, &written);
    if (NS_SUCCEEDED(rv))
      NS_ADDREF(*_retval = inStream);
  }
  delete [] buffer;
  
  return rv;
}