Пример #1
0
int main () {
	
	struct gameState G;
	struct gameState *state = &G;
	struct gameState G2;
	
	int kingdomCards[10] = {adventurer, council_room, feast, gardens, mine, remodel, smithy, village, minion, cutpurse };
	
	initializeGame(2, kingdomCards, 69, state);
	memcpy(&G2, &G, sizeof(struct gameState));
	struct gameState *pre = &G2;
	
	printf("Number of Province cards: %d\n", state->supplyCount[province]);
	checkGameOver(state);

	printf("Emptying Provinces...\n");
	state->supplyCount[province] = 0;
	checkGameOver(state);
	
	printf("Refilling Provinces...\n");
	state->supplyCount[province] = pre->supplyCount[province];
	printf("Number of Province cards: %d\n", state->supplyCount[province]);
	checkGameOver(state);
	
	printf("Emptying some supply piles...\n");
	state->supplyCount[minion] = 0;
	state->supplyCount[great_hall] = 0;
	state->supplyCount[village] = 0;
	checkGameOver(state);
	
	return 0;
}
Пример #2
0
void runGame(void)
{
	//Players (hits, boards)
	PLAYER player1;
	PLAYER player2;

	printf("\t\tWelcome to Shooting Boats!\n\n\n");

	printf("Setting up player 1\n");
	setupPlayer(&player1); printf("\n\n\n\n\n\n\n\n");

	printf("Setting up player 2\n");
	setupPlayer(&player2); printf("\n\n\n\n\n\n\n\n");

	printf("\t\tTime to play!\n");

	playLoop(&player1, &player2);

	printf("\t\tThe game is over!\n");

	switch(checkGameOver(&player1, &player2))
	{
		case GAME_OVER_TIE:
			printf("Mutually Assured Destruction!\n"); break;
		case GAME_OVER_PLR1_WINS:
			printf("Player 1 survives!!\n"); break;
		case GAME_OVER_PLR2_WINS:
			printf("Player 2 triumphs!\n"); break;
		default: printf("The Bermuda Triangle strikes again...");
	}
}
Пример #3
0
void Game::RunGame()
{
	unsigned time = timeGetTime();
	if((time - oldtime) < TIMEFACTOR) return;
	oldtime = time;

	figure_moving = map.Update();
	if( teddy_moving == true ) teddy_moving = kuma->Move();

	int temp_score = map.ScoreUpdate();
	score += map.show_combo() * map.show_combo() * temp_score * temp_score;
	playtime += TIMEFACTOR / 1000.0;

	if(checkGameOver() == true) {
		state = END;
		return;
	}

	// generate firuges
	int x, y, loop_limit = (MAP_WIDTH * MAP_HEIGHT * 2);
	//level = score / 5000;

	if(level > 20) level = 20;
	if(!(rand() % ( (INIT_DIFFICULTY - level*400 )/100))) {
		do {
			x = rand() % MAP_WIDTH;
			y = rand() % MAP_HEIGHT;
			loop_limit--;	// to avoid too many loops
		} while(map.getTile(x, y) != Tile::EMPTY && loop_limit > 0);
		if(loop_limit > 0) map.setTile(x, y, (Tile::Type)(rand() % 3 + 1));
	}

	Display();
}
Пример #4
0
/*
	Name:	run
	Desc:	main function used to run the game, calling everything else needed to function inside
	Args:	None
	Rtrn:	m_retry,	a bool to determine if the player wants to play again 
*/
bool Game::run()
{
	startingHousekeeping();
	while(m_window->isOpen() && m_stillPlaying)
	{
		//Run the game loop.
		handleEvents();

		if(!m_paused && !m_gameOver)
		{
			spawnNewBalls();
			moveObstacles();
			moveObstacleReactions();
			checkCollisions();
			checkBallsLeavingScreen();
			processObjective();
			processPlayerParticleSys();
			addCumilativePoints();
			generatePointsText();
		}

		if(!m_gameOver)
		{
			checkPause();
			checkGameOver();
		}

		render();
	}
	return m_retry;
}
Пример #5
0
void MySnake::moveSnake(float dt)
{
    MySprite *footSnake = (MySprite *)getChildByTag(getChildrenCount()-2+batchNodeStartTag);
    for (int i=getChildrenCount()-2; i >= 0; i--) {
        MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag);
        MySprite *sprite1 = (MySprite *)getChildByTag(i-1+batchNodeStartTag);
        if (sprite != snakeHeader) {
            sprite->setIndex(sprite1->getIndex()); //setPosition(getChildByTag(i-1+batchNodeStartTag)->getPosition());
        }
        else
        {
            this->moveSnakeHeader();
        }
    }
    
    if (snakeHeader->getIndex() == randomSprite->getIndex()) {
        
        addSnake(footSnake->getIndex());
        changeRandomSpritePozition();
    }
    
    checkGameOver();
    
    isNormal = true;
}
void playComputer() {
    QString coord, message, message2, endMessage;
    int x, y;

    cout << "\nThe S's on the grid are your ships" << endl;
    cout << "The O's mark where the computer is guessing on the top grid" << endl;
    cout << "The O's on the lower grid are your guesses" << endl;
    cout << "The X's are the computer's hits on the top grid and your hits on the lower grid" << endl;
    cout << "If you find all 5 computer ships you win." << endl;
    cout << "If the computer finds your 5 ships, you lose." << endl;
    cout << "Alright! All your ships are set in the grid below" << endl;
    cout << "Lets begin. You start. Guess a coordinate where you think an enemy ship is." << endl;
    while (!checkGameOver(player1Grid, player2Grid, endMessage)) {
        clearScreen();
        if (!message.isEmpty())
            cout << message;
        if (!message2.isEmpty())
            cout << message2;
        displayGrid(player1Grid);
        cout << endl;
        displayGrid(player1HitGrid);

        do {
            cin >> coord;
        } while(!checkValidCoord(coord) | !markGuess(player1HitGrid, player2Grid, coord, message));

        do {
            x =rand() % 10;
            y =rand() % 10;
        } while (!markComputerGuess(player1Grid, x, y, message2));
    }
    cout << endMessage;
    return;
}
Пример #7
0
void playLoop(PLAYER* plr1, PLAYER* plr2)
{
	int endGame=GAME_NOT_OVER;
	while(endGame == GAME_NOT_OVER)
	{
		printf("\n\n\n\n\n");
		executeRound(plr1, plr2);
		endGame = checkGameOver(plr1, plr2);
	}
}
Пример #8
0
void World::update(float deltaTime, float accelX)
{
	updateBob(deltaTime, accelX);
	updatePlatforms(deltaTime);
	updateSquirrels(deltaTime);
	updateCoins(deltaTime);
	if(bob.state != Bob::BOB_STATE_HIT) 
		checkCollisions();
	checkGameOver();
}
Пример #9
0
int Tetromino::setNew(Field* f, int x, int y, int turn, int type)
{
	this->x = x%10 + 3; // 3 〜 12
	this->y = y%22; // そのまま
	this->turn = (turn+4) % 4;
	this->type = type%7 + 1; // 1 〜 7
	this->interval = 0;
	this->landing = 0;
	this->landed = 0;
	return checkGameOver(f);
}
Пример #10
0
PTR_MESSAGE generateGameOver(uint8_t type, uint16_t length, char* content)
{
	PTR_MESSAGE msg;
    
	msg = generateMsg(type, length, content);
	if(checkGameOver(msg) == true)
	{
		return msg;
	}
	else
	{
		free(msg);
		return NULL;
	}
}
Пример #11
0
BOOL messageValidate(PTR_MESSAGE msg)
{
	BOOL result;

	result = false;
	switch(msg->type) {
		case LoginRequest:
			result = checkLoginRequest(msg);
			break;
		case LoginResponseOK:
			result = checkLoginResponseOK(msg);
			break;
		case CatalogRequest:
			result = checkCatalogRequest(msg);
			break;
		case CatalogResponse:
			result = checkCatalogResponse(msg);
			break;
		case CatalogChange:
			result = checkCatalogChange(msg);
			break;
		case PlayerList:
			result = checkPlayerList(msg);
			break;
		case StartGame:
			result = checkStartGame(msg);
			break;
		case QuestionRequest:
			result = checkQuestionRequest(msg);
			break;
		case QUestion:
			result = checkQuestion(msg);
			break;
		case QuestionAnswered:
			result = checkQuestionAnswered(msg);
			break;
		case QuestionResult:
			result = checkQuestionResult(msg);
			break;
		case GameOver:
			result = checkGameOver(msg);
			break;
		case ErrorWarning:
			result = checkErrorWarning(msg);
			break;
	}
	return result;    
}
Пример #12
0
// This is invoked in response to a timer interrupt.
// This code is used for everything that needs to
// use precise timing. It is split into many function
// for readability.
void timer_interrupt_handler() {

	// Increment the following counters:
	fit_timer_count++;
	debounce_timer_count++;
	alien_explosion_count++;

	checkGameOver();			// Check to see if the aliens have reached the bottom.
	alienBulletsCreate();		// Create a new alien bullet, if possible.
	saucerUpdate();				// Move the saucer.
	debounceButtons();			// Debounce the push buttons, and then move the tank and/or fire.
	checkExplosion();			// Handle alien explosions.
	updateAllBullets();			// Update both the tank and alien bullets.
	updateAlienBlock();			// Update the alien block position.
	updateSaucerFlashing();		// Update if the saucer is hit and should be flashing.
	updateTankFlashing();		// Update if the tank is hit and should be flashing.
	resetDebouncer();			// Reset the debouncer timer if no buttons are pressed.
}
Пример #13
0
void GameServer::nextRound(void)
{
	bool over = checkGameOver();
	if (over)
	{
		Tasks::getInstance()->addTask(GameOverTask::create(MonitorType::MonitorWaitNext));
	}
	else
	{
		_roundInfo->_currentRound++;
		_roundInfo->_selfRound = !_roundInfo->_selfRound;

		RoundInfo* round = RoundInfo::create();
		round->_currentRound = _roundInfo->_currentRound;
		round->_selfRound = _roundInfo->_selfRound;

		Tasks::getInstance()->addTask(NewRoundTask::create(MonitorType::MonitorWaitNext, round));
	}
}
Пример #14
0
void Board::moveClicked()
{
	int x, y, rs, cs;
	QPushButton* clickedBtn = static_cast<QPushButton*>(sender());
	grid->getItemPosition(grid->indexOf(clickedBtn), &y, &x, &rs, &cs);

	if((path.x() == x && (path.y() == y+1 || path.y() == y-1))
	|| (path.y() == y && (path.x() == x+1 || path.x() == x-1))) // valid button, move it
	{
		// remove the widget from the actual position
		grid->removeWidget(clickedBtn);
		// and re-add it to where the path has been
		createButton(clickedBtn, 0, path.x(), path.y());
		// and update the path coordinates
		path = QPoint(x, y);
		// also update the move count
		static_cast<MainWindow*>(parentWidget())->updateMoves();
		checkGameOver();
	}
}
void playFriend() {
    QString coord, coord2, message;
    cout << "\nThe S's on the grid are your ships" << endl;
    cout << "The O's on the top grid mark where " << player1 << " is guessing." << endl;
    cout << "The O's on the bottom grid mark where " << player2 << " is guessing." << endl;
    cout << "The X's represents hits and are marked on the same grids as the O's" << endl;
    cout << "The first person to sink all 5 ships wins" << endl;

    while (!checkGameOver(player1Grid, player2Grid, message)) {
        cout << player1 << " choose a Coordinate to hit." << endl;
        displayGrid(player1HitGrid);
        cout << endl;
        displayGrid(player2HitGrid);

        do {
            cin >> coord;
        } while(!checkValidCoord(coord) | !markGuess(player1HitGrid, player2Grid, coord, message));

        clearScreen();
        if (!message.isEmpty())
            cout << message;
        cout << player2 << " choose a Coordinate to hit." << endl;
        displayGrid(player1HitGrid);
        cout << endl;
        displayGrid(player2HitGrid);

        do {
            cin >> coord2;
        } while (!checkValidCoord(coord2) | !markGuess(player2HitGrid, player1Grid, coord2, message));
        clearScreen();
        if (!message.isEmpty())
            cout << message;
    }

    if (message == "You Win!\n")
        cout << player1 << " wins!" << endl;
    else if (message == "It's a draw!\n")
        cout << message;
    else
        cout << player2 << " wins!" << endl;
}
Пример #16
0
int generateNumber(char c){

	int blank = 0, i;
	for (i = 0; i < 16; i++)
	if (board[i / 4][i % 4] == 0)
		blank++;

	int square = rand() % blank;
	int n = rand() % 4;
	n = n < 3 ? 2 : 4;
	for (i = 0; i < 16; i++){
		if (square == 0 && board[i / 4][i % 4] == 0){
			board[i / 4][i % 4] = n;
			printBoard();
			printf("\nBoard %d,%d = %d", i / 4, i % 4, n);
			break;
		}
		else if (board[i / 4][i % 4] == 0)
			square--;
	}
	switch (c){
		case 'w' :
		printf("\nUP");
		break;
		case 's':
			printf("\nDOWN");
			break;
		case 'a':
			printf("\nLEFT");
			break;
		case 'd':
			printf("\nRIGHT");
			break;
	}
	if (blank == 1 && checkGameOver())
		return 1;
	else
		return 0;
}
Пример #17
0
int main(void) 
{
    // intro text
    printf("* * * DUNGEON QUEST * * *\n\n");
    printf("You find yourself in a dungeon ruled by dark magic\n");
    printf("Try to escape and reach %s without dying!\n", DESTINATION);
    printf("But before you arrive, you must boost your %s to at least level %i,\n", SKILL, SKILL_GOAL);
    printf("...or else the Dieties of %s will not accept you!\n\n", DESTINATION);
    
    // provide a seed to the random number generator (don't worry about understanding this)
    srand(time(NULL));
    
    // initialize the player
    player p = { 100, 3, 1 };

    // continue looping forever until Game Over
    while (true)
    {
        if (checkGameOver(p))
        {
            // stop if we hit Game Over
            return 0;
        }
        
        reportStatus(p);
        
        printf("You continue walking through dark corridors...\n");
        p.distance -= 1;
        GetString();
        
        printf("You health is slowly waning...\n");
        p.health -= 10;
        GetString();
        
        discoverPotion(&p);
    }
}
Пример #18
0
void Combat::update(float delta)
{
	if (playerbutton->isTouch==true&&isPlayingAnimation==false)
	{
		//锁定playerbutton触摸
		playerbutton->LockButtonTouch();
		//怪物选择button
		monsterButtonTag = monster->chooseButton();
		//判断属性胜负
		winnerNum = checkButtonTag(playerbutton->tag,monsterButtonTag);
		CCLOG("win:%d",winnerNum);
		//伤害计算
		damage = damageCompute(winnerNum);
		CCLOG("damage:%d",damage);
		//播放战斗动画
		//post消息
		CCNotificationCenter::sharedNotificationCenter()->postNotification(ANIMATION_MSG,NULL);
		//更新血条
		updateBlood(winnerNum,damage);
		playerbutton->isTouch=false;
		//判断是否结束
		checkGameOver();
	}
}
Пример #19
0
void GameScene::doCheck() {

    if (!checkWin()) {
        checkGameOver();
    }
}
Пример #20
0
HitInfo Sea::hit(const Coord& pos)
{
    HitInfo res = otherField()->hit(pos);
    checkGameOver();
    return res;
}
Пример #21
0
void T2::checkMove(int dir_guester)
{
	if(dir_guester== DIR_RIGHT){
		//≈ì√ö‚Äù‚Ä?
		if (move_state == MOVE_YD1) //¬µ‚ÅÑ‚Äú¬™‚⧌©‚Äú‚àÜ‚àÇ√?
		{
			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j = MAX_COL-2; j >=0 ; --j)
				{
					int index  = -1;
					int count = 0;

					if(arr_Num[i][j]>-1&&arr_Num[i][j+1]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = j+1;
						while (arr_Num[i][index]==-1)
						{
							count++;
							if(index<MAX_COL-1)
								index++;
							else
								break;
						}
						nodeMove(dir_guester,i,j,count);
						change2number(arr_Num[i][j],arr_Num[i][j+count]);

					}
				}

			}

			logcat_chessArr("move-yd1");
			if(bemoved_yd1){
				CCLog("can move yd1");
				move_state = MOVE_NONE;
			}else{
				CCLog("can not move yd1");
				move_state = MOVE_HETI;
			}
		}
		else if(move_state == MOVE_HETI)//¬µ‚Å?‚⧌©‚à´≈ì‚â•‚Ä?
		{
			CCLog("rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr");

			update_moveyd1();

			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j=MAX_COL-1;j>0;j--)
				{
					if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i][j-1]&&arr_Num[i][j]==arr_Num[i][j-2]&&arr_Num[i][j]==arr_Num[i][j-3])
					{
						CCLog("ppppppppppppppp");
						becomposed = true;

					

						arr_Num[i][j]++;
						arr_Num[i][j-1]= -1;

						addScore(arr_Num[i][j]);

						change(dir_guester,i,j,arr_Num[i][j]);
						removeChessnode(dir_guester,i,j-1);

						MyCCLog::verbose("score---");

						break;
					}

					else if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i][j-1])
					{
						CCLog("qqqqqqqqqqqqqq");
						becomposed = true;
					

						arr_Num[i][j]++;
						arr_Num[i][j-1]= -1;

						addScore(arr_Num[i][j]);

						change(dir_guester,i,j,arr_Num[i][j]);
						removeChessnode(dir_guester,i,j-1);

					}
				}
			}
			CCLog("tttttttttttttttttttttttttttttttttttttttttttttttttttttttt");
			logcat_chessArr("right-move-heti1");

			if(bemoved_yd1&&!becomposed)
			{
				CCLog("can move and can not heti");
				move_state = MOVE_OVER;
				return;
			}

			move_state = MOVE_NONE;

		}
		else if(move_state == MOVE_YD2)
		{
			CCLog("MOVE_YD2MOVE_YD2");
			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j = MAX_COL-2; j >=0 ; --j)
				{
					int index  = -1;
					int count = 0;
					if(arr_Num[i][j]>-1&&arr_Num[i][j+1]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						index = j+1;
						while (arr_Num[i][index]==-1)
						{
							count++;
							if(index<MAX_COL-1)
								index++;
							else
								break;
						}
						nodeMove(dir_guester,i,j,count);
						change2number(arr_Num[i][j],arr_Num[i][j+count]);

					}
				}
			}

			logcat_chessArr("move-yd2");
			move_state = MOVE_OVER;

		}

		else if(move_state == MOVE_OVER)
		{
			CCLog("right-----------move-over---over");
			addNewChess();
			move_state = MOVE_NONE;
			if(checkFull())
			{
				bool rightover = checkGameOver();
				CCLog("rightover = %d",rightover);
			}


		}

	}


	else if(dir_guester== DIR_LEFT){
		//≈ì√ö‚Äù‚Ä?

		if (move_state == MOVE_YD1) //¬µ‚ÅÑ‚Äú¬™‚⧌©‚Äú‚àÜ‚àÇ√?
		{
			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j =1; j < MAX_COL ; j++)
				{
					int index  = -1;
					int count = 0;

					if(arr_Num[i][j]>-1&&arr_Num[i][j-1]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = j-1;
						while (arr_Num[i][index]==-1)
						{
							count++;
							if(index>0)
								index--;
							else
								break;
						}
						nodeMove(dir_guester,i,j,count);
						change2number(arr_Num[i][j],arr_Num[i][j-count]);

					}
				}

			}

			logcat_chessArr("left-move-yd1");
			if(bemoved_yd1){
				CCLog("can move left yd1");
				move_state = MOVE_NONE;
			}else{
				CCLog("can not move left yd1");
				move_state = MOVE_HETI;
			}
		}
		else if(move_state == MOVE_HETI)//¬µ‚Å?‚⧌©‚à´≈ì‚â•‚Ä?
		{

			update_moveyd1();

			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j=0;j<MAX_COL-1;j++)
				{

					if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i][j+1]&&arr_Num[i][j]==arr_Num[i][j+2]&&arr_Num[i][j]==arr_Num[i][j+3])
					{
						CCLog("wdddddddsssssss");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i][j+1]= -1;
							addScore(arr_Num[i][j]);

						change(dir_guester,i,j,arr_Num[i][j]);
						removeChessnode(dir_guester,i,j+1);
						break;
					}
					if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i][j+1])
					{
						CCLog("ssssdwww");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i][j+1]= -1;

							addScore(arr_Num[i][j]);
						change(dir_guester,i,j,arr_Num[i][j]);
						removeChessnode(dir_guester,i,j+1);

					}
				}
			}
			CCLog("tttttttttttttttttttttttttttttttttttttttttttttttttttttttt");
			logcat_chessArr("left-move-heti1");

			if(bemoved_yd1&&!becomposed)
			{
				CCLog("can move and can not heti");
				move_state = MOVE_OVER;
				return;
			}
			move_state = MOVE_NONE;

		}
		else if(move_state == MOVE_YD2)
		{
			CCLog("MOVE_YD2MOVE_YD2");
			for (int i=0;i<MAX_ROW;i++)
			{
				for (int j =1; j < MAX_COL ; j++)
				{
					int index  = -1;
					int count = 0;

					if(arr_Num[i][j]>-1&&arr_Num[i][j-1]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = j-1;
						while (arr_Num[i][index]==-1)
						{
							count++;
							if(index>0)
								index--;
							else
								break;
						}
						nodeMove(dir_guester,i,j,count);
						change2number(arr_Num[i][j],arr_Num[i][j-count]);

					}
				}

			}
			logcat_chessArr("move-yd2");
			move_state = MOVE_OVER;

		}

		else if(move_state == MOVE_OVER)
		{
			CCLog("left-----------move-over---over");
			addNewChess();
			if(checkFull())
			{
				bool leftover = checkGameOver();
				CCLog("leftover = %d",leftover);
			}
			move_state = MOVE_NONE;
		}

	}

	else if(dir_guester == DIR_UP){	//≈ì√ö‚Ķ≈?

		if (move_state == MOVE_YD1) //¬µ‚ÅÑ‚Äú¬™‚⧌©‚Äú‚àÜ‚àÇ√?
		{
			for (int j =0; j < MAX_COL ; j++)//lie
			{
				for (int i= MAX_ROW-2;i>=0;i--)//hang
				{
					int index  = -1;
					int count = 0;
					if(arr_Num[i][j]>-1&&arr_Num[i+1][j]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = i+1;
						while (arr_Num[index][j]==-1)
						{
							count++;
							if(index<MAX_ROW-1)
								index++;
							else
								break;
						}
						CCLog("j = %d i= %d COUNT = %d",j,i,count);
						nodeMove(dir_guester,j,i,count);
						change2number(arr_Num[i][j],arr_Num[i+count][j]);

					}
				}

			}

			logcat_chessArr("up-move-yd1");
			if(bemoved_yd1){
				CCLog("up -can move yd1");
				move_state = MOVE_NONE;
			}else{
				CCLog("up-can not move yd1");
				move_state = MOVE_HETI;
			}
		}
		else if(move_state == MOVE_HETI)//¬µ‚Å?‚⧌©‚à´≈ì‚â•‚Ä?
		{
			CCLog("mmmmmmmmmmmmmmmmmm");

			update_moveyd1();
			for (int j=0;j<MAX_COL;j++)
			{
				for (int i=MAX_ROW-1;i>0;i--)
				{
					if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i-1][j]&&arr_Num[i][j]==arr_Num[i-2][j]&&arr_Num[i][j]==arr_Num[i-3][j])
					{
						CCLog("ppppppppppppppp");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i-1][j]= -1;
							addScore(arr_Num[i][j]);
						change(dir_guester,j,i,arr_Num[i][j]);
						removeChessnode(dir_guester,j,i-1);

						break;
					}

					else if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i-1][j])
					{
						CCLog("qqqqqqqqqqqqqq");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i-1][j]= -1;
							addScore(arr_Num[i][j]);
						change(dir_guester,j,i,arr_Num[i][j]);
						removeChessnode(dir_guester,j,i-1);



					}
				}
			}
			CCLog("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
			logcat_chessArr("up------move-heti1");

			if(bemoved_yd1&&!becomposed)
			{
				CCLog("can move and can not heti");
				move_state = MOVE_OVER;
				return;
			}

			move_state = MOVE_NONE;

		}
		else if(move_state == MOVE_YD2)
		{
			for (int j =0; j < MAX_COL ; j++)//lie
			{
				for (int i= MAX_ROW-2;i>=0;i--)//hang
				{
					int index  = -1;
					int count = 0;
					if(arr_Num[i][j]>-1&&arr_Num[i+1][j]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = i+1;
						while (arr_Num[index][j]==-1)
						{
							count++;
							if(index<MAX_ROW-1)
								index++;
							else
								break;
						}
						CCLog("j = %d i= %d COUNT = %d",j,i,count);
						nodeMove(dir_guester,j,i,count);
						change2number(arr_Num[i][j],arr_Num[i+count][j]);

					}
				}

			}

			logcat_chessArr("move-yd2");
			move_state = MOVE_OVER;
		}

		else if(move_state == MOVE_OVER)
		{
			CCLog("up-----------move-over---over");
			addNewChess();
			if(checkFull())
			{
					bool upover = checkGameOver();
				CCLog("upover = %d",upover);
			}
			move_state = MOVE_NONE;
		}


	}

	else if(dir_guester == DIR_DOWN){
		if (move_state == MOVE_YD1) //¬µ‚ÅÑ‚Äú¬™‚⧌©‚Äú‚àÜ‚àÇ√?
		{
			for (int j =0; j < MAX_COL ; j++)//lie
			{
				for (int i= 1;i< MAX_ROW;i++)//hang
				{
					int index  = -1;
					int count = 0;
					if(arr_Num[i][j]>-1&&arr_Num[i-1][j]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = i-1;
						while (arr_Num[index][j]==-1)
						{
							count++;
							if(index>0)
								index--;
							else
								break;
						}
						CCLog("j = %d i= %d COUNT = %d",j,i,count);
						nodeMove(dir_guester,j,i,count);
						change2number(arr_Num[i][j],arr_Num[i-count][j]);

					}
				}

			}

			logcat_chessArr("down-move-yd1");
			if(bemoved_yd1){
				CCLog("down -can move yd1");
				move_state = MOVE_NONE;
			}else{
				CCLog("down-can not move yd1");
				move_state = MOVE_HETI;
			}
		}
		else if(move_state == MOVE_HETI)//¬µ‚Å?‚⧌©‚à´≈ì‚â•‚Ä?
		{
			CCLog("mmmmmmmmmmmmmmmmmm");

			update_moveyd1();
			for (int j=0;j<MAX_COL;j++)
			{
				for (int i=0;i<MAX_ROW-1;i++)
				{

					if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i+1][j]&&arr_Num[i][j]==arr_Num[i+2][j]&&arr_Num[i][j]==arr_Num[i+3][j])
					{
						CCLog("ppppppppppppppp");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i+1][j]= -1;
							addScore(arr_Num[i][j]);
						change(dir_guester,j,i,arr_Num[i][j]);
						removeChessnode(dir_guester,j,i+1);

						break;
					}

					else if(arr_Num[i][j]>=0&&arr_Num[i][j]==arr_Num[i+1][j])
					{
						CCLog("qqqqqqqqqqqqqq");
						becomposed = true;
						arr_Num[i][j]++;
						arr_Num[i+1][j]= -1;
							addScore(arr_Num[i][j]);
						change(dir_guester,j,i,arr_Num[i][j]);
						removeChessnode(dir_guester,j,i+1);



					}
				}
			}
			CCLog("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
			logcat_chessArr("down------move-heti1");

			if(bemoved_yd1&&!becomposed)
			{
				CCLog("can move and can not heti");
				move_state = MOVE_OVER;
				return;
			}

			move_state = MOVE_NONE;

		}
		else if(move_state == MOVE_YD2)
		{
			for (int j =0; j < MAX_COL ; j++)//lie
			{
				for (int i= 1;i< MAX_ROW;i++)//hang
				{
					int index  = -1;
					int count = 0;
					if(arr_Num[i][j]>-1&&arr_Num[i-1][j]==-1)//¬ª√ÅœÄÀö‚Äù‚Äú¬±Ô¨Ç¬†¬´√∏‚Äô¬µ∆?
					{
						bemoved_yd1 = true;

						index = i-1;
						while (arr_Num[index][j]==-1)
						{
							count++;
							if(index>0)
								index--;
							else
								break;
						}
						CCLog("j = %d i= %d COUNT = %d",j,i,count);
						nodeMove(dir_guester,j,i,count);
						change2number(arr_Num[i][j],arr_Num[i-count][j]);

					}
				}

			}
			logcat_chessArr("move-yd2");
			move_state = MOVE_OVER;
		}

		else if(move_state == MOVE_OVER)
		{
			CCLog("down-----------move-over---over");
			addNewChess();
			if(checkFull())
			{
				bool downover = checkGameOver();
				CCLog("downover = %d",downover);
			}
			move_state = MOVE_NONE;
		}

	}

}
Пример #22
0
void Sea::forceHit(const Coord& pos, const HitInfo& info)
{
    otherField()->forceHit(pos, info);
    checkGameOver();
}
Пример #23
0
//let bubbles fall down / move stacks to right
void GameWidget::compressBubbles()
{
    for(int x = grid_size-1; x >= 0; x--) {
        int hole = -1;
        int holes = 0;
        bool bubble_found = false;
        for(int y = 0; y <= grid_size; y++) {
            if(y == grid_size or grid[x][y].color) { //not empty
                if(holes) { //hole found, move bubbles down
                    for(int i = hole; i > 0; i--) {
                        grid[x][i] = grid[x][i-holes];

                        if(use_animations) {
                            grid[x][i].yoffset = holes;
                            grid[x][i].yspeed = initial_speed;
                        }
                    }
                    for(int i = 0; i < holes; i++)
                        grid[x][i] = Bubble();
                }
                bubble_found = true;
                hole = -1;
                holes = 0;
            } else if(bubble_found) {
                hole = y;
                holes++;
            }
        }
    }

    for(int x = grid_size-1; x >= 0; x--) {
        if(!grid[x][grid_size-1].color) { //collumn empty
            //shift remaining collums
            int x2 = x;
            while(--x2 >= 0) {
                for(int y = 0; y < grid_size; y++) {
                    grid[x2+1][y] = grid[x2][y];

                    if(use_animations) {
                        grid[x2+1][y].xoffset += 1;
                        grid[x2+1][y].xspeed = initial_speed;
                    }
                }
            }

            //add new collumn
            const int height = int(double(rand())/(RAND_MAX + 1.0)*grid_size);
            for(int y = grid_size-1; y >= height; y--) {
                grid[0][y] = Bubble(double(rand())/(RAND_MAX + 1.0)*num_colors+1);

                if(use_animations) {
                    grid[0][y].scale_step = num_scale_steps-1;
                }
            }

            //erase remains of old collumn
            for(int y = height-1; y >= 0; y--)
                grid[0][y] = Bubble();

            x++; //make sure to run over collumn again
        }
    }
    if(use_animations)
        timer->start();

    update();
    checkGameOver();
}
Пример #24
0
//Enocdes rules of the game, pretty crazy function
//excepts a 0-indexed move relative to the player's cells from left to right
bool MancalaBoard::make_move(int player, int cell){
    checkGameOver(player);
    if(player == 1){
        if(cell > p1_cell_end || cell < 0){
            std::cout << "Invalid move for p1" << std::endl;
            return false;
        }
        
        int num_moves = cells[cell];
        cells[cell] = 0;
        int pos = cell; //current position during loop
        while(num_moves > 0){
            if(pos < p1_cell_end){//iterating through own player's cells just move to next cell
                pos++;
                if(num_moves == 1){//ending on own side (check if cell is empty)
                    if(cells[pos] == 0){
                        p1_mancala += cells[pos + num_cells];
                        cells[pos + num_cells] = 0;
                        cells[pos] = 0;
                        p1_mancala ++;
                    }
                    else{
                        cells[pos]++;
                    }
                }
                else{
                    cells[pos]++;
                }
            }
            else if(pos == p1_cell_end){//at the end of player's row, add to mancala and begin iterating backwards
                p1_mancala++;
                pos = p2_cell_end + 1;
            }
            else{//at other player's side add to their cell and iterate
                if(pos == p2_cell_start){//reset to bottom cell
                    pos = p1_cell_start;
                    if(num_moves == 1){//ending on own side (check if cell is empty)
                        if(cells[pos] == 0){
                            p1_mancala += cells[pos + num_cells];
                            cells[pos + num_cells] = 0;
                            cells[pos] = 0;
                            p1_mancala ++;
                        }
                        else{
                            cells[pos]++;
                        }
                        
                    }
                    else{
                        cells[pos]++;
                    }
                }
                else{
                    pos--;
                    cells[pos]++;
                }
            }
            num_moves--;
        }
        if(pos == p2_cell_end + 1)//bonus move!
        {
            if(moves_available(player) > 0){
                return true;
            }
            else{
                checkGameOver(player);
            }
        }
    }
    else if(player == 2){
        if(cell >= num_cells || cell < 0){
            std::cout << "Invalid move for p2" << std::endl;
            return false;
        }
        
        cell = cell + num_cells;//convert to upper cell location in internal state representation
        int num_moves = cells[cell];
        cells[cell] = 0;
        int pos = cell;//current position during iteration
        //A move involves placing a stone into the next cell and updating position accordingly
        while(num_moves > 0){
            if(pos > p2_cell_start){//iterating through player's own cells (CCW => negative)
                pos--;
                if(num_moves == 1){
                    if(cells[pos] == 0){//ending in void cell on own side
                        p2_mancala += cells[pos - num_cells];
                        cells[pos - num_cells] = 0;
                        cells[pos] = 0;
                        p2_mancala++;
                    }
                    else{
                        cells[pos]++;
                    }
                }
                else{
                    cells[pos]++;
                }
            }
            else if(pos == p2_cell_start){//at the end of the player's row, add to mancala and begin iterating forwards
                p2_mancala++;
                pos = p1_cell_start - 1;
            }
            else{//on p1's side increment forwards
                if(pos == p1_cell_end){//reset to top cell
                    pos = p2_cell_end;
                    if(num_moves == 1){
                        if(cells[pos] == 0){
                            p2_mancala += cells[pos - num_cells];
                            cells[pos - num_cells] = 0;
                            cells[pos] = 0;
                            p2_mancala++;
                        }
                        else{
                            cells[pos]++;
                        }
                    }
                    else{
                        cells[pos]++;
                    }
                }
                else{
                    pos++;
                    cells[pos]++;
                }
            }
            num_moves--;
        }
        if(pos == p1_cell_start - 1){//bonus move!
            if(moves_available(player) > 0){
                return true;
            }
            else{
                checkGameOver(player);
            }
        }
    }
    return false;//performed action with no bonus move
}
Пример #25
0
int main(){
	int lives = 7;
	FILE* fp = fopen("Ulm.hm","r");
	char buffer[MAXBUFFLENGTH * BUFFERELEMENTS]; 
	reservoirSampling(buffer, fp);
	_Bool name = false;
	char answer[42];
	int k = 0;
	
	/*printing the question and saving the answer into an array*/
	for (int i = 0; i < BUFFERELEMENTS; ++i){
		for (int j = 0; buffer[i*MAXBUFFLENGTH + j] != '\n'; ++j){
			if(name == false){
				printf("%c",buffer[i*MAXBUFFLENGTH + j]);
			} else {
			  if (buffer[i*MAXBUFFLENGTH + j] != 0){
			    answer[k++] = buffer[i*MAXBUFFLENGTH + j];
			  }
			}
			if (buffer[i*MAXBUFFLENGTH + j] == '\t')
				name = true;
		}
		printf("\n");
	}
	//printf("answer: %s\n", answer);
	
	/* array of letters that have already been chosen */
	_Bool alreadyChosen[32] = { 0 };
	int input;
	
	
	loop: // goto label
	if (checkGameOver(alreadyChosen, answer, lives))
	  goto gameOver;
	printf("%d\t",lives);
	for (int i = 0; i < 32; ++i){
	  if(alreadyChosen[i] == true){
	    printf("%c", (char)('a' + i)); // print all the letters that have already been chosen 
	  }
	}
	printf("\t\t");
	
	/* printing the word to be guessed */
	for (int i = 0; i < answer[i] != '\0'; i++){
	  if(answer[i] == ' ' || answer[i] == '-' ||answer[i] == '.' || alreadyChosen[tolower(answer[i]) - 'a'] == true){
	    printf("%c", answer[i]);
	  } else {
	      printf("%c", '_');
	  }
	}
	printf("\n");

	while((input = getchar()) != '\n'){
	  if(normalizeInput(input) == -1){ 
	    --lives; // ivalid input
	  }
	  if(alreadyChosen[normalizeInput(input) - 'a'] == true){
	    --lives; // letter already chosen
	  } 
	  for (int i = 0; i < answer[i] != '\0'; i++){
	    if (input == tolower(answer[i])){
	      alreadyChosen[normalizeInput(input) - 'a'] = true; // right choice
	      goto loop;
	    }
	  }
	  alreadyChosen[normalizeInput(input) - 'a'] = true; // wrong choice
	  --lives;
	}
	goto loop;
	
	gameOver:
	fclose(fp);
	return 0;
}
Пример #26
0
int main(int argc, char* argv[])
{
    //make window
    if(!init())
    {
        cout<<"Init failed";
    }
    
    //loads buttons and sprites
    loadMedia();
    
    bool quit=false;
    
    int menubutton=0;
    
    SDL_Event e;
    
    
    while(quit!=true)
    {
        while(SDL_PollEvent(&e)!=0)
        {
            //quits game
            if(e.type==SDL_QUIT)
            {
                quit=true;
            }
            
            //clears board during game
            if(e.key.keysym.sym==SDLK_SPACE)
            {
                clearBoard();
            }
            
            //returns to menu
            if(e.key.keysym.sym==SDLK_ESCAPE)
            {
                if(startgame==true)
                {
                    gamecontinue=true;
                }
                startgame=false;
                aboutstate=false;
            }

            //click during game to play
            if(e.type==SDL_MOUSEBUTTONDOWN && startgame==true)
            {
                if(checkGameOver()==true)
                {
                    clearBoard();
                }
                
                else
                {
                    SDL_GetMouseState( &x, &y );
                    
                    tile=whichButton(x,y);
                }
            }
            
            //click either start or about
            if(e.type==SDL_MOUSEBUTTONDOWN && startgame==false)
            {
                SDL_GetMouseState( &x, &y );
                
                menubutton=whichButton(x,y);
                
                if(menubutton==0)
                {
                    startgame=true;
                }
                else if(menubutton==1)
                {
                    aboutstate=true;
                }
                
            }
        }
        
        if(startgame==false && aboutstate==false)
        {
            menu();
        }
        
        else if(startgame==false && aboutstate==true)
        {
            about();
        }
        
        else if(startgame==true && aboutstate==false)
        {
            SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
            SDL_RenderClear(gRenderer);
            
            play();
            drawboard();

            if(checkGameOver()==true)
            {
                announceWinner();
            }
            
        }

        SDL_RenderPresent(gRenderer);
        
        SDL_Delay(100);
        
    }
    
    close();
    
    return 0;
}
Пример #27
0
int main(void) {
    int addScore, position, pauseSel;

    // Initializations
    PLL_Init();  			// Clock set at 80 MHz
    LCD_Init();
    Board_Init();
    Input_Init();
    DAC_Init();
    Random_Init(NVIC_ST_CURRENT_R);
    Timer2_Init(80000000); 	// time interrupt
    Timer1_Init(2000);		// sound interrupt
    EnableInterrupts();
    generateRandomTile();
    drawAllTiles();
    writeScore(0);
    writeHighscore(0);
    writeTime(0);
    displayHighestTile();

    while(1) {

        // draw arrow if ready
        if (arrowReady == 1) {
            // acknowledge flag
            arrowReady = 0;
            // draw arrow
            drawArrow();
        }

        // write time if ready
        if (timeReady == 1) {
            // acknowledge flag
            timeReady = 0;
            // write time
            writeTime(elapsedTime);
        }

        // Play mode and button1 is pushed
        if(Button1 && !pauseMode && !gameOver) {
            // Play sound
            playSound = 1;
            // shift and merge tiles towards arrow
            position = getSliderPosition();
            if (position == 1) {
                shiftLeft();
                addScore = mergeLeft();
                shiftLeft();
            }
            else if (position == 2) {
                shiftUp();
                addScore = mergeUp();
                shiftUp();
            }
            else if (position == 3) {
                shiftRight();
                addScore = mergeRight();
                shiftRight();
            }
            else {
                shiftDown();
                addScore = mergeDown();
                shiftDown();
            }

            eraseBoard();
            drawAllTiles();

            // update score
            score += addScore;
            addScore = 0;
            writeScore(score);
            displayHighestTile();

            // delay before adding new tile
            delay(200);

            // create new tile
            if (countEmptyTiles() != 0) {
                generateRandomTile();
            }
            drawAllTiles();

            // update highest tile image
            displayHighestTile();

            // check if game over
            if (checkGameOver() == 1) {
                gameOver = 1;
            }

            // unset flag
            Button1 = 0;
        }

        // button 2 is pause
        else if (Button2 && !gameOver && !pauseMode) {
            pauseMode = 1;
            pauseSel = 0;

            // disable arrow and timer
            NVIC_ST_CTRL_R = 0;
            TIMER2_CTL_R = 0x00000000;
            LCD_DrawFilledRect(prevX,prevY,20,20,BLACK);

            // draw pause mode screen
            drawPauseMode();

            // acknowledge button
            Button2 = 0;

            // wait until button is pushed
            while (pauseMode) {

                // Button 1 selects current pause selection button
                if (Button1) {

                    // acknowledge button
                    Button1 = 0;
                    Button2 = 0;
                    pauseMode = 0;

                    // if pause selection = "continue" (pauseSel = 0), continue with game
                    if (pauseSel == 0) {

                        // redraw screen
                        eraseBoard();
                        drawAllTiles();

                        // enable gameplay
                        NVIC_ST_CTRL_R = 0x07;
                        TIMER2_CTL_R = 0x00000001;
                    }

                    // if pause selection = "restart" (pauseSel = 0), end game
                    else if (pauseSel == 1) {
                        if (score > highscore) {
                            writeHighscore(score);
                        }
                        score = 0;
                        eraseScore();
                        writeScore(0);
                        clearBoard();
                        eraseBoard();
                        pauseMode = 0;
                        generateRandomTile();
                        drawAllTiles();
                        elapsedTime = 0;
                        eraseTime();
                        writeTime(0);
                        displayHighestTile();
                        NVIC_ST_CTRL_R = 0x07;
                        TIMER2_CTL_R = 0x00000001;
                    }
                }

                // Button 2 changes pause selection
                else if (Button2) {
                    Button2 = 0;
                    if (pauseSel == 0) {
                        pauseSel = 1;
                        LCD_DrawRect(144,112,58,16,BLACK);
                        LCD_DrawRect(222,112,51,16,WHITE);
                    }
                    else if (pauseSel == 1) {
                        pauseSel = 0;
                        LCD_DrawRect(222,112,51,16,BLACK);
                        LCD_DrawRect(144,112,58,16,WHITE);
                    }
                }
            }
        }

        // game over
        if (gameOver == 1) {
            NVIC_ST_CTRL_R = 0;
            TIMER2_CTL_R = 0x00000000;
            LCD_DrawFilledRect(156,38,100,20,BLACK);
            LCD_SetTextColor(255,255,240);
            LCD_Goto(30,5);
            printf("GAME OVER");
            while (Button1 == 0 && Button2 == 0) {}
            Button1 = 0;
            Button2 = 0;
            LCD_DrawFilledRect(prevX,prevY,20,20,BLACK);
            drawGameOver(score, elapsedTime);
            if (score > highscore) {
                writeHighscore(score);
                gameOverHighscore(score);
            }
            // wait til button is pushed
            while (Button1 == 0 && Button2 == 0) {}
            // acknowledge buttons
            Button1 = 0;
            Button2 = 0;
            // start new game
            score = 0;
            eraseScore();
            writeScore(0);
            clearBoard();
            eraseBoard();
            pauseMode = 0;
            generateRandomTile();
            drawAllTiles();
            elapsedTime = 0;
            eraseTime();
            writeTime(0);
            displayHighestTile();
            NVIC_ST_CTRL_R = 0x07;
            TIMER2_CTL_R = 0x00000001;

            // finish game over mode
            gameOver = 0;
        }
    }
}