Exemple #1
0
void
redraw_drawn_rectangle (struct drawn_rectangle *dr, struct pos *p,
                        enum em em, enum vm vm)
{
  if (dr->w <= 0 || dr->h <= 0) return;

  push_clipping_rectangle (dr->bitmap, dr->x, dr->y, dr->w, dr->h);

  struct coord tl, br;
  new_coord (&tl, &global_level, room_view, dr->x, dr->y);
  new_coord (&br, &global_level, room_view, dr->x + dr->w - 1,
             dr->y + dr->h - 1);

  struct pos ptl, pbr;
  posf (&tl, &ptl);
  posf (&br, &pbr);

  pos2room (&ptl, room_view, &ptl);
  pos2room (&pbr, room_view, &pbr);
  struct pos p0 = ptl;
  for (p0.floor = pbr.floor; p0.floor >= ptl.floor; p0.floor--)
    for (p0.place = ptl.place; p0.place <= pbr.place; p0.place++)
      if (! peq (&p0, p)) draw_confg (dr->bitmap, &p0, em, vm);

  pop_clipping_rectangle ();
}
Exemple #2
0
//ゲーム画面へクリックイベントを送る
void MainWindow::Private::clickGame(QPoint pos, bool wait_little)
{
    int interval = CLICK_EVENT_INTERVAL;
    QPointF posf(pos);
    QMouseEvent eventPress(QEvent::MouseButtonPress
                            , posf
                            , Qt::LeftButton, 0, 0);
    QApplication::sendEvent(ui.webView, &eventPress);
    QMouseEvent eventRelease(QEvent::MouseButtonRelease
                              , posf
                              , Qt::LeftButton, 0, 0);
    QApplication::sendEvent(ui.webView, &eventRelease);

    if(wait_little)
        interval = CLICK_EVENT_INTERVAL_LITTLE;

    interval += static_cast<int>(qrand() % CLICK_EVENT_FLUCTUATION);

    for(int i = 0; i < interval; i++)
    {
        QApplication::processEvents();
        QThread::usleep(1000);
    }
}
char *infixaParaPosfixa(char *inf)
{
	char *posf; /*string que armazenará a notação posfixa*/
	char *s; 	/*pilha */
	int t; 		/*topo da pilha*/
	
	int i;		/*contador para a string com a expressão infixa*/
	int j;		/*contador para a string com a expressão posfixa*/
	
	int n = strlen(inf); /* tamanho da string com expressão infixa */
	
	
	/** INICIALIZAÇÃO DA STRING POSFIXA *******************************/
	posf = malloc((n+1)*sizeof(char));
				/* ^-- 1 byte a mais para o caracter de finalização */
	
	/** INICIALIZAÇÃO DA PILHA ****************************************/
	s = malloc(n*sizeof(char));
	t == 0; /*pilha vazia*/
	
	/** LEITURA E CONVERSÃO ******************************************/
		/* 	Estrutura do switch-case:
			switch(<expressão>) - sempre deve ser um inteiro
			{
				case constante1: 
					<comando>; } Podem-se colocar os comandos
					<comando>; } embaixo de constante1
					...		   } 
					break;	- encerra o switch, pois tudo que 
							  vem abaixo dele, depois do ponto
							  de entrada, ele executaria tudo
							  abaixo. O 'break' serve para 
							  avisar quando ele deve parar. Se
							  houver um break para cada 'case',
							  teremos um análogo a if-elses 
							  encaixados.
				case constante2: <comando>; <comando>; ...
									^ podem estar todos em linha
					break;
				case constante3: <comando>; <comando>; ...
				 .
				 .
				 .
				default: <comando1>; <comando2>; ... } É executado quando
					break;							 } não entramos em 
													   nenhum case - é
													   o caso padrão
													   (default)
			} - encerramos com uma chave
		
		NOTA: podemos declarar variáveis dentro de cada bloco, por causa
			  da pilha da memória, que tem blocos alocados conforme o 
			  nela conforme eles aparecem. Se quisermos fazer isso no 
			  meio, devemos usar a função 'malloc'
	*/
	for(i=j=0; i < n; i++)
	{
		char x;
		switch(inf[i])
		{		/*^-- é um inteiro, mas mostrado pelo símbolo ASCII */
			case '(':
				/* 	Abre parênteses é adicionado à pilha. Incrementa t */
				s[t++] = inf[i];
				break;
			case ')':
				/* 	Ao termos um fecha parênteses, desempilhamos o que
					houver dentro dele e tudo que estiver antes */
				while( (x = s[--t]) != '(')
					posf[j++] = x; /* Adiciona 'x' à primeira posição va-
									  zia (j), e depois incrementa 'j', 
									  pois a nova primeira é a seguinte */
			case '+':
			case '-':
				/*	Os operadores de menor precedência - quem estiver
					em comparações com eles é executado antes */
				/*	  |-- Se a pilha não estiver vazia
					  |			|-- Se o último caracter empilhado
					  |			|   não for abre-parênteses */
				while(t != 0 && (x = s[t-1]) != '(')
					posf[j++] = s[--t];
					/* 	Salva na posfixa o símbolo em 's' e, depois, de-
						crementa 't' */
				s[t++] = inf[i];
			case '*':
			case '/':
				while(t != 0 && (x = s[t-1]) != '(' 
						&& x != '-' && x != '+')
					posf[j++] = s[--t] /* Adiciona na posfixa o que acon-	
										  tece atrás */
				s[t++] = inf[i]; /* empilha o sinal */
				break;
			default:
				if(inf[i] != ' ') /* ignoramos espaços */
					posf[j++] = inf[i]; /* 	os outros casos são LETRAS, e
											são diretamente adicionadas
											ao posfixo */
				/* Não prisamos do 'break;', pois ele é o último */
		} /* fim do switch */
	} /* fim do laço */
	
	/* 	Faltou ainda colocar um último caso: quando terminamos de var-
		rer a expressão infixa, podem ter sobrado operadores - e aí
		devemos limpara a pilha e colocá-la no lugar */
	
	while(t != 0)
		posf[t++] = s[--t]; /* Vai limpand a pilha */
	posf(j) = '\0';
	
	/** LIBERAÇÃO DE VARIÁVEIS ****************************************/	
	free(s); /* libera a pilha */
	
	return posf;
}