Example #1
0
void world::detect_collisions()
{
	if(m_ball->X() + m_ball->L() >= (m_screen->w - p2->W()))
	{
		if(m_ball->Y()+m_ball->L() >= p2->Y() && m_ball->Y() <= p2->Y() + p2->H())
		{
			m_ball->reverse_x();
			++m_collisions;
		}
	}
	else if(m_ball->X() <= p1->W())
	{
		if(m_ball->Y()+m_ball->L() >= p1->Y() && m_ball->Y() <= p1->Y() + p1->H())
		{
			m_ball->reverse_x();
			++m_collisions;
		}
	}

	if(m_ball->Y() >= m_screen->h || m_ball->Y() <= 0)
	{
		m_ball->reverse_y();
	}
	
	if ( m_ball->X() + m_ball->L() >= m_screen->w)
	{
		++m_p1_wins;
		reset_game();
	}
	else if(m_ball->X() <= 0)
	{
		++m_p2_wins;
		reset_game();
	}
}
Example #2
0
int demo_manager::start_recording(char *filename)
{
  if (!current_level) return 0;

  record_file=open_file(filename,"wb");
  if (record_file->open_failure()) { delete record_file; return 0; }

  char name[100];
  strcpy(name,current_level->name());

  the_game->load_level(name);
  record_file->write((void *)"DEMO,VERSION:2",14);
  record_file->write_uint8(strlen(name)+1);
  record_file->write(name,strlen(name)+1);


  if (DEFINEDP(symbol_value(l_difficulty)))
  {
    if (symbol_value(l_difficulty)==l_easy) record_file->write_uint8(0);
    else if (symbol_value(l_difficulty)==l_medium) record_file->write_uint8(1);
    else if (symbol_value(l_difficulty)==l_hard) record_file->write_uint8(2);
    else record_file->write_uint8(3);
  } else record_file->write_uint8(3);


  state=RECORDING;

  reset_game();

  return 1;
}
Example #3
0
void main()
{
	ENABLE_RAM_MBC1;
	SWITCH_ROM_MBC1(7);
    kwakwa_screen();
	//disable_APA();
	credits = 0U;
	while(1)
	{
		ENABLE_RAM_MBC1;
		SWITCH_ROM_MBC1(7);
		title_screen();
		credits = 0U;
		reset_game();
		disable_APA();
		while(credits == 0U)
		{

			game_screen();

		}
		//disable_APA();
		ENABLE_RAM_MBC1;
		SWITCH_ROM_MBC1(7);
		credits_screen();
		disable_APA();
	}
}
Example #4
0
void main_app_handle_button_up()
{
    if (!button_held)
    {
        pulse_cancel_timer(&button_timer_id);

        if (current_screen == SCREEN_CLOCK)
        {
            cancel_sleep();
            reset_game();
            pulse_blank_canvas();
            current_screen = SCREEN_GAME_OVER;
            printf("Click to start.\n\n\nClick while \nyou're in the \nair to do a \ndouble jump!");
            prepare_to_sleep();
        }
        else if (current_screen == SCREEN_GAME_OVER)
        {
            time_now_ms = pulse_get_millis();
            if (time_now_ms - time_last_box_drawn_ms >= 500) {
                cancel_sleep();
                pulse_blank_canvas();
                current_screen = SCREEN_GAMEPLAY;
            }
        }
        else if (current_screen == SCREEN_GAMEPLAY)
            press = false;
    }
    else
        button_held = false;
}
Example #5
0
void main_app_handle_button_up()
{
	if (!button_held)
	{
		pulse_cancel_timer(&button_timer_id);
		
		if (current_screen == SCREEN_CLOCK)
		{
			cancel_sleep();
			pulse_blank_canvas();
			reset_game();
			current_screen = SCREEN_GAME_OVER;
			printf("\n\n\n\n\n Click to start");
			prepare_to_sleep();				
		}
		else if (current_screen == SCREEN_GAME_OVER)
		{
			time_now_ms = pulse_get_millis();
		    // Check if it's been at least 500 ms since the game ended to prevent accidental clicks
		    if (time_now_ms - time_last_box_drawn_ms > 500) 
		    {
				cancel_sleep();
				pulse_blank_canvas();
				current_screen = SCREEN_GAMEPLAY;
			}
		}
		else if (current_screen == SCREEN_GAMEPLAY)
			press = false;
	}
	else
		button_held = false;
}
Example #6
0
void		process_game(t_game *game)
{
	int	collisiontype;
	int i;

	if (game->playing)
	{
		handle_bar_position(game);
		if (!game->bar.sticky_ball)
		{
			i = -1;
			while (++i < 10)
			{
				if ((collisiontype = future_ball_collision(game)))
				{
					handle_collision(game, collisiontype);
					break ;
				}
				else
					do_ball_motion(game);
			}
		}
		if (game->ball.y > WIN_HEIGHT - BAR_MARGIN + 15)
			reset_game(game);
		if (count_brick(game->bricks->next) == 0)
			change_level(game);
	}
}
Example #7
0
/* Called when an "action" input (ie. a mouse button or the space bar) is
 * pressed. Starts the game if we're on the title screen, jumps to the title
 * screen if the game is over, or unparks the ball if the game is running and
 * the ball is parked. */
static void action_pressed(nbstate *state)
{
	if(state->state == STATE_TITLESCREEN) increment_level(state);
	else if(state->state == STATE_GAMEWON ||
			state->state == STATE_GAMELOST)
		reset_game(state);
	else state->ball.parked = 0;
}
Example #8
0
void checkend(void)
{
    register int i,k;
    struct player *p;

    /* First, we check that no one is dogfighting anymore */
    for(i=0,p=&players[0];i<MAXPLAYER;i++,p++) 
      {
	if (p->p_status == PFREE) continue;
	if (p == me) continue;
	if (tracks[i].t_flags & (PU_NOTCONTEST)) continue;
	if (tracks[i].t_flags & (PU_DOG|PU_WAIT)) 
	  {
#ifdef DOGDEBUG
	    ERROR(2,("Returning on %d",i));
#endif
	    return;
	  }
      }

    /* Next, we check that all schedules are played */
    for(i=0;i<MAXPLAYER;i++) 
      {
	if (tracks[i].t_flags & PU_NOTCONTEST) continue;
	if (players[i].p_status==PFREE) continue;
	if (i == me->p_no) continue;

	for (k=0;k<MAXPLAYER;k++) 
	  {
	    if (k == i) continue;
	    if (tracks[k].t_flags & PU_NOTCONTEST) continue;
	    if (k == me->p_no) continue;
	    if (players[k].p_status==PFREE) continue;

	    if (get_num_matches(i,k) < nummatch)
	      {
#ifdef DOGDEBUG
		ERROR(2,("Returning on %d %d",i,k));
#endif
		return;
	      }
	  }

	if (!toolate2join)
	  {
	    messAll(255,roboname,"No more players will be allowed to join the tournament until completed.");
	    toolate2join = 1;
	  }

	tracks[i].t_flags |= PU_DONE;
	tracks[i].t_flags &= ~PU_CONTEST;
      }

    player_maint();  /* seems to be necessary  -Jon */
    reset_game();
}
Example #9
0
/* Description:
Sets up all the hardware in the MSP430 used by the SPACEWAR game.
Stops the watchdog timer.  Sets the internal cpu clock to a maximun.
Sets the timer to cause an interrupt every 10ms.  Sets the SPI interface
to talk to the dual DAC.  Sets the A to D to use an external reference 
and unipolar operation.  Finally initializes all the variable used by the game.
*/
void init_all(rkt_data *rkt1, rkt_data *rkt2)
{
  
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer

  BCSCTL1 = 0x08;                       // Setup DCO highest range
  DCOCTL = 0xe0;                        // biggest DCO

  P1OUT = 0x04;                         // TLV5618A CS high
  P1DIR |= 0x01+0x04;                   // P1.0=LED, P1.2=TLV5618A_cs
  P1SEL = 0x08;                         // P1.3 = VREF

  //BCSCTL2 = 0x00;                       // SMCLK divider = 1
  //BCSCTL2 = 0x02;                       // SMCLK divider = 2
  //BCSCTL2 = 0x04;                       // SMCLK divider = 4
  BCSCTL2 = 0x06;                       // SMCLK divider = 8
  CCTL0 = CCIE;                         // CCR0 interrupt enabled
  CCR0 = 23500;
  TACTL = TASSEL_2 + MC_1;              // SMCLK, upmode
  _BIS_SR(GIE);                         // enable interrupts
  
  // USICTL0 |= USIPE7+USIPE6+USIPE5+USIMST+USIOE; // Port, SPI master
  // USICKCTL = USIDIV_0+USISSEL_2+USICKPL;  // divide by 1 SMCLK, inactive high
  // USICTL0 &= ~USISWRST;                 // release USI for operation
  // USICTL1 = USICKPH;                    // take data on falling edge

  // SD16CTL = SD16SSEL_1;                 // exter ref, SMCLK
  // SD16CCTL0 = SD16UNI + SD16SNGL;       // 256OSR, unipolar, inter
  // SD16AE = 0;                           // P1.1 A4+, A4- = VSS
  //                                       // P1.4 A2+, A2- = VSS
  // SD16INCTL0 = SD16INCH_4;              // A4+/- start with rocket 1
  // SD16CCTL0 |= SD16SC;                  // Start A2D conversion

  reset_rkts(rkt1, rkt2);               // reset rkt positons                        
  reset_game(rkt1);
  reset_game(rkt2);
  rkt1->game = 0;
  rkt2->game = 0;
  flags |= time_tick;                    // force an update at startup
}
Example #10
0
void game_over() {
    pulse_vibe_on();
    pulse_mdelay(60);
    pulse_vibe_off();
    //int vib_timer = pulse_register_timer(75, &pulse_vibe_off, 0);

    current_screen = SCREEN_GAME_OVER;
    pulse_blank_canvas();
    if (score > highscore)
        highscore = score;
    printf ("GAME OVER\n\nScore: %d\n\nHighscore: %d\n\nClick to restart",score,highscore);
    reset_game();
    prepare_to_sleep();
}
Example #11
0
static void do_time_out()
{
	GtkWidget *dialog;
	gchar info[64];
	sprintf(info, "很遗憾,你己超时\n正确答案:%d", random_num);
	dialog = gtk_message_dialog_new(NULL, 
		 GTK_DIALOG_DESTROY_WITH_PARENT,
		 GTK_MESSAGE_ERROR,
		 GTK_BUTTONS_OK, info);
	gtk_window_set_icon(GTK_WINDOW(dialog), window_icon_buf);
	gtk_window_set_title(GTK_WINDOW(dialog), "超时");
	gtk_dialog_run(GTK_DIALOG(dialog));
	gtk_widget_destroy(dialog);
	reset_game();
}
Example #12
0
static void do_win(unsigned int input)
{
	GtkWidget *dialog;
	gchar info[64];
	sprintf(info, "猜对了!你真聪明!\n答案:%d", input);
	dialog = gtk_message_dialog_new(NULL, 
		 GTK_DIALOG_DESTROY_WITH_PARENT,
		 GTK_MESSAGE_INFO,
		 GTK_BUTTONS_OK, info, "title");
	gtk_window_set_icon(GTK_WINDOW(dialog), window_icon_buf);
	gtk_window_set_title(GTK_WINDOW(dialog), "猜对了");
	gtk_dialog_run(GTK_DIALOG(dialog));
	gtk_widget_destroy(dialog);
	reset_game();
}
Example #13
0
static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{

	if (strstr(buff,RESET_COMMAND)) {
		reset_game();
		return len;
	}

	if (ai_turn == FALSE && make_move(PLAYER_X, simple_strtol(buff, NULL, 10))) {
		ai_turn = TRUE;
		return len;
	}
	else 
		return -1;
}
Example #14
0
/* ARGSUSED */
void do_force_newgame(int mflags, int sendto)
{

/****MK - stats are cleared*/
#ifdef NEWGAME_RESET

    messAll(255,roboname,"Clearing Player Stats for the Newgame");
    reset_game();

#else
    messAll(255,roboname,"NEWGAME is disabled on this server.");

#endif
/****End added code */

}
Example #15
0
Game::Game() {
    kill = false;
    srand(time(NULL));
    if (!texture.loadFromFile("solitaire_sprite_sheet.png")) {
        kill = true;
        freopen("error.txt", "w", stdout);
        std::cout << "Fatal error: Could not load sprite sheet" << "\n";
        return;
    }
    texture.setSmooth(true);
    backside.set_texture(texture);
    three_card_rule = true;
    init_rect();
    init_text();
    reset_game();
}
Example #16
0
int check_keys ( XEvent *e, Game *game )
{
	//Was there input from the keyboard?
	if ( e->type == KeyPress ) {
		int key = XLookupKeysym ( &e->xkey, 0 );
		switch ( key ) {
			case XK_p:
				game->sub_menu^=true;
				break;
			case XK_o:
				game->gameover^=true;
				break;
			case XK_f:
				game->showfps ^= 1;
				break;
			case XK_i:
				reset_game(game);
				break;
			case XK_j:
				game->troll_lilypad ^= 1;
				break;
			case XK_h:
				game->help_menu ^= true;
				break;
			case XK_k:
				game->stresstest ^= 1;
				break;
			case XK_s:
				game->swarmOn ^= 1;
				break;
			case XK_r:
				break;
			case XK_t:
				game->demo.on^=1;
				break;
			case XK_Escape:
				game->sub_menu^=true;
				break;
			case XK_b:
				game->bossGO ^= true;
				break;
				return 1;
		}
	}
	return 0;
}
Example #17
0
void reset(void) //각종 변수 초기화
{
	level = 1; 
	level_goal = 1000;
	key = 0;
	crush_on = 0;
	cnt = 0;
	score = 0;
	speed = 100;

	system("cls"); //화면지움 
	reset_game();
	draw_stat();
	draw_game();

	b_type_next = rand() % 7; //다음번에 나올 블록 종류를 랜덤하게 생성 
	new_block(); //새로운 블록을 하나 만듦  
}
Example #18
0
void do_key(char key)
{
    short i, j;
    while (ANYKEY())
    {
        readkeyboard();
        do_halt();
    }

    if (minefield[key])
    {
        // boom
        drawstring("Oops, you appear to have stepped", 0, 176);
        drawstring("on a rotten egg and died.       ", 0, 184);
        for (j = 0; j < 20; j++)
        {
            playfx(1);
            for (i = 0; i < 32*21; i++)
            {
                if (xorshift8() > 220)
                    *((char*)0x4000+192*32+i) = xorshift8() & 7;
            }
            for (i = 0; i < 51; i++) xorshift8();
            do_halt();
        }        
        reset_game();    
    }
    else
    {
        drawval(key, count_mines(key));
        if (minefound[key] == 0)
        {
            minefound[key] = 1;
            found++;
            if (found == total)
            {
                framecounter = 0;
                drawstring("Congratulations!! You did it!   ", 0, 176);
                drawstring("Step on a mine for a new game.  ", 0, 184);
            }
        }
        playfx(0);
    }    
}
Example #19
0
int demo_manager::start_playing(char *filename)
{
  uint8_t sig[15];
  record_file=open_file(filename,"rb");
  if (record_file->open_failure()) { delete record_file; return 0; }
  char name[100],nsize,diff;
  if (record_file->read(sig,14)!=14        ||
      memcmp(sig,"DEMO,VERSION:2",14)!=0   ||
      record_file->read(&nsize,1)!=1       ||
      record_file->read(name,nsize)!=nsize ||
      record_file->read(&diff,1)!=1)
  { delete record_file; return 0; }

  const size_t tnamesize = 100;
  char tname[tnamesize],*c;
  strncpy(tname,name,tnamesize-1); tname[tnamesize-1] = 0;
  c=tname;
  while (*c) { if (*c=='\\') *c='/'; c++; }

  bFILE *probe=open_file(tname,"rb");   // see if the level still exists?
  if (probe->open_failure()) { delete record_file; delete probe; return 0; }
  delete probe;

  the_game->load_level(tname);
  initial_difficulty = l_difficulty;

  switch (diff)
  {
    case 0: l_difficulty->SetValue(l_easy); break;
    case 1: l_difficulty->SetValue(l_medium); break;
    case 2: l_difficulty->SetValue(l_hard); break;
    case 3: l_difficulty->SetValue(l_extreme); break;
  }

  state=PLAYING;
  reset_game();



  return 1;
}
Example #20
0
int main()
{
	int key;

	init_display();

	play_again:
	reset_game();
	display_board(&grid);
	play_game();

	movecur(15, 9 + brd_h * 2);
	textcolour(12);
	strout("Game Over! Press ESCAPE to exit or ENTER to play again.");

	do {
		key = os_wait_for_key();
	} while (key != ESC_KEY && key != ENTER_KEY);

	if (key == ENTER_KEY) goto play_again;
	end_program();
}
Example #21
0
void Game::state_mainmenu(SDL_Event* event)

{
	int m_x, m_y;
	SDL_GetMouseState(&m_x, &m_y);

	if (event->key.type == SDL_MOUSEBUTTONDOWN)
	{
		if (event->button.button == SDL_BUTTON_LEFT)
		{
			for (iter_mainmenu_button = mainmenu_buttons.begin(); iter_mainmenu_button != mainmenu_buttons.end(); iter_mainmenu_button++)
			{
				if ((m_x > (*iter_mainmenu_button)->get_x()) && (m_x < (*iter_mainmenu_button)->get_x() + (*iter_mainmenu_button)->get_width()) && (m_y
						> (*iter_mainmenu_button)->get_y()) && (m_y < (*iter_mainmenu_button)->get_y() + (*iter_mainmenu_button)->get_height()))
				{
					switch ((*iter_mainmenu_button)->get_type())
					{
					case BUTTON_STARTGAME:
						reset_game();
						game_state = GAME_PAUSED;
						break;
					case BUTTON_HIGHSCORE:
						update_highscore_sprites();
						game_state = HIGHSCORE;
						break;
					case BUTTON_VIEW_HELP:
						game_state = VIEW_HELP;
						break;
					case BUTTON_EXITGAME:
						game_running = false;
						break;
					}
				}
			}
		}
	}
}
Example #22
0
File: cgii.c Project: chamun/CGII
void
keyboard(unsigned char key, int x, int y)
{
    switch(key) {
    case 'w':
        key_list_add(W);
        break;
    case 's':
        key_list_add(S);
        break;
    case 'a':
        key_list_add(A);
        break;
    case 'd':
        key_list_add(D);
        break;
    case 'r':
        reset_game();
        break;
    case 'm':
        map = !map;
        break;
    }
}
Example #23
0
void checkstatus(void)
{

  int i;
  struct player *j;
  Track *track;
  int numplayers = 0;

  /* avoid dead slots, me, other robots (which aren't hostile) */
  for (i = 0, j = &players[i], track = &tracks[i];
       i < MAXPLAYER; i++, j++, track++) 
    {

      if ((j == me) ||
	  (j->p_status == PFREE) ||
	  (track->t_flags & PU_FILLER) ||
	  (track->t_flags & PU_SITOUT))    /*ignore puck,filler,watchers*/ 
	continue;

      numplayers++;
    }

  if (numplayers >= contestsize)
    {
      if (!inprogress)
	{
	  inprogress = 1;
	  faceoff = FACEOFF;
	}
    }
  else if (inprogress)
    {
      messAll(255,roboname,"Too many people have left.  The contest is over.");
      reset_game();
    }
}
Example #24
0
void main()
{   
//    unsigned char i;         
    
    y8 = 1;
    
    reset_game();
    /*
    for (i = 0; i < 40; i++)
        if (minefield[i] == 0)
            drawval(i, count_mines(i));
   */
    
    while(1)
    {
        drawscore();
        readkeyboard(); 
        if (KEYDOWN(1)) do_key(0);
        if (KEYDOWN(2)) do_key(1);
        if (KEYDOWN(3)) do_key(2);
        if (KEYDOWN(4)) do_key(3);
        if (KEYDOWN(5)) do_key(4);
        if (KEYDOWN(6)) do_key(5);
        if (KEYDOWN(7)) do_key(6);
        if (KEYDOWN(8)) do_key(7);
        if (KEYDOWN(9)) do_key(8);
        if (KEYDOWN(0)) do_key(9);
        if (KEYDOWN(Q)) do_key(10);
        if (KEYDOWN(W)) do_key(11);
        if (KEYDOWN(E)) do_key(12);
        if (KEYDOWN(R)) do_key(13);
        if (KEYDOWN(T)) do_key(14);
        if (KEYDOWN(Y)) do_key(15);
        if (KEYDOWN(U)) do_key(16);
        if (KEYDOWN(I)) do_key(17);
        if (KEYDOWN(O)) do_key(18);
        if (KEYDOWN(P)) do_key(19);
        if (KEYDOWN(A)) do_key(20);
        if (KEYDOWN(S)) do_key(21);
        if (KEYDOWN(D)) do_key(22);
        if (KEYDOWN(F)) do_key(23);
        if (KEYDOWN(G)) do_key(24);
        if (KEYDOWN(H)) do_key(25);
        if (KEYDOWN(J)) do_key(26);
        if (KEYDOWN(K)) do_key(27);
        if (KEYDOWN(L)) do_key(28);
        if (KEYDOWN(ENTER)) do_key(29);
        if (KEYDOWN(SHIFT)) do_key(30);
        if (KEYDOWN(Z)) do_key(31);
        if (KEYDOWN(X)) do_key(32);
        if (KEYDOWN(C)) do_key(33);
        if (KEYDOWN(V)) do_key(34);
        if (KEYDOWN(B)) do_key(35);
        if (KEYDOWN(N)) do_key(36);
        if (KEYDOWN(M)) do_key(37);
        if (KEYDOWN(SYM)) do_key(38);
        if (KEYDOWN(SPACE)) do_key(39);

        framecounter++;
        do_halt();
        if (framecounter > 500)
        {
            framecounter = 0;
                     // 12345678901234567890123456789012
            switch (infoloop)
            {
            case 0:
                drawstring("Welcome to \"Rotten Egg Mines\"   ", 0, 176);
                drawstring("By Jari Komppa http://iki.fi/sol", 0, 184);
                break;
            case 1:
                drawstring("How to play:                    ", 0, 176);
                drawstring("Press keys to find mines.       ", 0, 184);
                break;
            case 2:
            case 4:
            case 6:
            case 8:
                drawstring(". . . . . . . . . . . . . . . . ", 0, 176);
                drawstring(" . . . . . . . . . . . . . . . .", 0, 184);
                break;   
            case 3:
                drawstring("Sound effects played via        ", 0, 176);
                drawstring("BeepFX by Shiru                 ", 0, 184);
                break;   
            case 5:
                drawstring("Art made by using the           ", 0, 176);
                drawstring("Image Spectrumizer              ", 0, 184);
                break;   
            case 7:
                drawstring("Sources can be found at         ", 0, 176);
                drawstring("github.com/jarikomppa/speccy    ", 0, 184);
                break;   
            case 12:
                drawstring("    [ . . . . . . . . . . .]    ", 0, 176);
                drawstring("    [. . . . . . . . . . . ]    ", 0, 184);
                break;         
            case 13:
                drawstring("        [ . . . . . . .]        ", 0, 176);
                drawstring("        [. . . . . . . ]        ", 0, 184);
                break;         
            case 14:
                drawstring("            [ . . .]            ", 0, 176);
                drawstring("            [. . . ]            ", 0, 184);
                break;         
            case 15:
                drawstring("                                ", 0, 176);
                drawstring("                                ", 0, 184);
                break;         
            }
            infoloop++;
            if (infoloop == 16)
                infoloop = 0;
        }
    }       
}
void player_state_toughy::OnPlayerSpawned(game_PlayerState const * ps)
{
	if (m_owner->get_local_player() == ps)
		reset_game();
}
Example #26
0
/**
 * apply_states:
 * @sg:  #state_group object
 *
 * Apply all read states to the current game state
 */
void apply_states(state_group *sg)
{
    gint i, j, sum, num_tricks;
    card *crd;
    card_state *cs;
    player *pptr;
    player_state *pstate;

    /* reset current game states */
    reset_game();

    /* set global game properties */
    gskat.stich    = sg->gs->num_stich;
    gskat.cplayer  = sg->gs->cplayer;
    gskat.forehand = sg->gs->forehand;
    gskat.trump    = sg->gs->trump;
    gskat.hand     = sg->gs->hand;
    gskat.null     = sg->gs->null;
    gskat.re       = gskat.players[sg->gs->re_player];

    /* set player values */
    for (i=0; i<3; ++i)
    {
        pptr = gskat.players[i];
        pstate = &sg->gs->pstates[i];

        pptr->re         = pstate->re;
        pptr->gereizt    = pstate->gereizt;
        pptr->points     = pstate->points;
        pptr->sum_points = pstate->sum_points;
    }

    /* set all card values accordingly */
    for (i=0; i<32; ++i)
    {
        cs = &sg->cs[i];
        crd = get_card_ptr(cs->suit, cs->rank);

        crd->owner     = cs->owner;
        crd->status    = cs->status;
        crd->draw      = cs->draw;
        crd->draw_face = cs->draw_face;
    }

    /* populate played cards list */
    for (i=0; i<sg->gs->num_played; ++i)
        gskat.played = g_list_append(gskat.played, get_card_by_id(sg->pc[i]));

    num_tricks = sg->gs->num_played / 3 + (sg->gs->num_played % 3 ? 1 : 0);

    /* fill stiche array */
    for (i=0; i<num_tricks; ++i)
    {
        sum = 0;
        gskat.stiche[i] = trick_new();

        for (j=0; j<3; ++j)
        {
            if (sg->tricks[i][j])
            {
                crd = get_card_by_id(sg->tricks[i][j]);
                gskat.stiche[i]->cards[j] = crd;
                sum += crd->points;
            }
        }

        gskat.stiche[i]->points = sum;

        if (sg->tricks[i][3] != -1)
            gskat.stiche[i]->winner = gskat.players[sg->tricks[i][3]];
    }

    /* populate players' cards list */
    for (i=0; i<3; ++i)
    {
        pptr = gskat.players[i];

        for (j=0; j<sg->gs->pstates[i].num_cards; ++j)
        {
            pptr->cards = g_list_append(pptr->cards,
                    get_card_by_id(sg->pcards[i][j]));
        }
    }

    /* populate skat list */
    for (i=0; i<2; ++i)
        gskat.skat = g_list_append(gskat.skat, get_card_by_id(sg->gs->skat[i]));

    /* populate table cards list */
    for (i=0; i<sg->gs->num_table; ++i)
        gskat.table = g_list_append(gskat.table, get_card_by_id(sg->table[i]));

    /* free states memory */
    g_free(sg->gs);
    g_free(sg->cs);

    if (sg->pc)
        g_free(sg->pc);

    if (sg->table)
        g_free(sg->table);

    if (sg->tricks)
    {
        for (i=0; i<num_tricks; ++i)
        {
            if (sg->tricks[i])
                g_free(sg->tricks[i]);
        }
        g_free(sg->tricks);
    }

    for (i=0; i<3; ++i)
    {
        if (sg->pcards[i])
            g_free(sg->pcards[i]);
    }

    g_free(sg->pcards);
    g_free(sg);
}
Example #27
0
void platformer_init() {
  
  /* Set the viewport title */
  graphics_viewport_set_title("Platformer");
  
  /* Register functions for loading/unloading files with the extension .level */
  asset_handler(level, "level", level_load_file, level_delete);
  
  /* Load Assets */
  folder_load(P("./tiles/"));
  folder_load(P("./backgrounds/"));
  folder_load(P("./sounds/"));
  folder_load(P("./levels/"));
  
  /* Register some handlers for creating and destroying entity types */
  entity_handler(character, character_new, character_delete);
  entity_handler(coin, coin_new, coin_delete);
  
  /* Create our main character */
  character* main_char = entity_new("main_char", character);
  
  /* Add some UI elements */
  ui_button* framerate = ui_elem_new("framerate", ui_button);
  ui_button_move(framerate, vec2_new(10,10));
  ui_button_resize(framerate, vec2_new(30,25));
  ui_button_set_label(framerate, " ");
  ui_button_disable(framerate);
  
  ui_button* score = ui_elem_new("score", ui_button);
  ui_button_move(score, vec2_new(50, 10));
  ui_button_resize(score, vec2_new(120, 25));
  ui_button_set_label(score, "Score 000000");
  ui_button_disable(score);
  
  ui_button* time = ui_elem_new("time", ui_button);
  ui_button_move(time, vec2_new(180, 10));
  ui_button_resize(time, vec2_new(110, 25));
  ui_button_set_label(time, "Time 000000");
  ui_button_disable(time);
  
  ui_button* victory = ui_elem_new("victory", ui_button);
  ui_button_move(victory, vec2_new(365, 200));
  ui_button_resize(victory, vec2_new(70, 25));
  ui_button_set_label(victory, "Victory!");
  ui_button_disable(victory);
  
  ui_button* new_game_but = ui_elem_new("new_game", ui_button);
  ui_button_move(new_game_but, vec2_new(365, 230));
  ui_button_resize(new_game_but, vec2_new(70, 25));
  ui_button_set_label(new_game_but, "New Game");
  
  
  void on_newgame(ui_button* b, void* unused) {
    reset_game();
  }
  
  ui_button_set_onclick(new_game_but, on_newgame);
  
  /* Reset all the game variables */
  reset_game();
  
}
Example #28
0
/* Initialise the game and return the state structure or NULL on failure: */
nbstate *init(int argc, char *argv[])
{
	GR_PROP *prop;
	nbstate *state;
	GR_SCREEN_INFO si;
	GR_BITMAP cursor = 0;
	GR_WM_PROPERTIES props;

	/* Try to connect to the Nano-X server: */
	if(GrOpen() < 1) {
		fprintf(stderr, "Couldn't connect to Nano-X server\n");
		return NULL;
	}

	/* Check that the server was built with alpha blending support
	 * (necessary for the alpha blended sprites and special effects): */
	GrGetScreenInfo(&si);
	if(!si.alphablend) {
		fprintf(stderr, "Error: Nano-X server was built without alpha "
				"blending support\nSet ALPHABLENDING = 1 in "
				"include/device.h, rebuild, and try again.\n");
		return NULL;
	}

	/* Allocate the state structure and initialise it with defaults: */
	if(!(state = malloc(sizeof(nbstate)))) return NULL;
	setup_default_state(state);

	/* Try to parse the command line arguments: */
	if(parse_cmd_args(state, argc, argv)) {
		free(state);
		return NULL;
	}

	/* Try to load the game file: */
	if(load_game_file(state)) {
		free(state);
		return NULL;
	}

	/* Load the high score file: */
	load_hiscore(state);

	/* Calculate the canvas size: */
	state->canvaswidth = state->width * state->brickwidth;
	state->canvasheight = state->scores.h + state->ball.s->h +
				(2 * BALLS_BORDER) +
				(state->height * state->brickheight) +
				3 * state->brickheight + state->batheight;

	/* Place the bat in the centre of the window: */
	state->batx = state->canvaswidth / 2;

	/* Create various pixmaps and alpha channels: */
	state->scores.p = GrNewPixmap(state->canvaswidth, state->scores.h,
			NULL);
	state->scores.a = GrNewAlpha(state->canvaswidth, state->scores.h);
	state->canvas = GrNewPixmap(state->canvaswidth, state->canvasheight,
			NULL);
	/* The new and old canvasses are only used when screen fading is
	 * enabled: */
	if(state->faderate) {
		state->newcanvas = GrNewPixmap(state->canvaswidth,
					state->canvasheight, NULL);
		state->oldcanvas = GrNewPixmap(state->canvaswidth,
					state->canvasheight, NULL);
	}
	state->brickalpha = GrNewAlpha(state->brickwidth, state->brickheight);

	/* Start off with the canvas completely black: */
	GrSetGCForeground(state->gc, GR_COLOR_BLACK);
	GrFillRect(state->canvas, state->gc, 0, 0, state->canvaswidth,
						state->canvasheight);

	/* If there is a window manager running, place the window off the
	 * screen and let the window manager move it where it wants (avoids
	 * flicker if we were to draw the window on screen before the window
	 * manager moved it somewhere else): */
        if(GrGetWindowProperty(GR_ROOT_WINDOW_ID, "WINDOW_MANAGER", &prop)) {
		free(prop);
		state->winx = GR_OFF_SCREEN;
	}

	/* Create the output window: */
	state->wid = GrNewWindow(GR_ROOT_WINDOW_ID, state->winx, 0,
			state->canvaswidth, state->canvasheight, 0, 0, 0);

	/* Set the window title: */
	props.flags = GR_WM_FLAGS_TITLE;
	props.title = "NanoBreaker";
	GrSetWMProperties(state->wid, &props);

	/* Make the cursor over the output window be invisible: */
	GrSetCursor(state->wid, 1, 1, 1, 1, 0, 0, &cursor, &cursor);

	/* Select the events we want to receive for the output window: */
	GrSelectEvents(state->wid, GR_EVENT_MASK_CLOSE_REQ |
				GR_EVENT_MASK_EXPOSURE |
				GR_EVENT_MASK_BUTTON_DOWN |
				GR_EVENT_MASK_KEY_DOWN |
				GR_EVENT_MASK_KEY_UP |
				GR_EVENT_MASK_UPDATE |
				GR_EVENT_MASK_TIMER);

	/* Select for mouse position events on the root window so we can move
	 * the bat even when the pointer strays outside the window (which it
	 * often does because the cursor is invisible you don't know exactly
	 * where it is): */
	GrSelectEvents(GR_ROOT_WINDOW_ID, GR_EVENT_MASK_MOUSE_POSITION);

	/* Map the output window (make it visible): */
	GrMapWindow(state->wid);

	/* Create the one second periodic timer that is used to decrement the
	 * power-up and power-down timers: */
	state->tid = GrCreateTimer(state->wid, 1000, GR_TRUE);

	/* Reset the game: */
	reset_game(state);

	return state; /* Return the newly allocated state structure. */
}
int main(int argc, char **argv) {
  int status, scene, next_scene;
  char errmsg[128];
  long elapsed_msec, wait_msec;
  struct timespec wait_time, left_time;
  struct timeval frame_start_time, frame_end_time;
  WINDOW *window;
  struct invaders_game game;
  struct logger error_logger;

  UNUSED(argc);
  UNUSED(argv);

  /* Initialize for ncurses library */
  reset_logger(&error_logger, ERRORLOG_FILEPATH);
  status = 1;
  window = initscr();
  if (ERR == wresize(window, CANVAS_SIZE_X, CANVAS_SIZE_Y)) {
    emit_log(&error_logger,
             "Failed to change the ncurses setting for window size");
    goto cleanup;
  }
  if (ERR == keypad(window, true)) {
    emit_log(&error_logger,
             "Failed to change the ncurses setting for key input receiving");
    goto cleanup;
  }
  if (ERR == noecho()) {
    emit_log(&error_logger,
             "Failed to change the ncurses setting for echoing setting");
    goto cleanup;
  }
  curs_set(0);
  timeout(0);
  if (has_colors() && can_change_color()) {
    if (ERR == start_color()) {
      emit_log(&error_logger,
               "Failed to change the ncurses setting to set up coloring");
      goto cleanup;
    }
    if ((ERR == init_pair(PLAYER_JET_COLOR_PAIR, PLAYER_JET_COLOR, COLOR_BLACK))
        || (ERR == init_pair(PLAYER_BULLET_COLOR_PAIR, PLAYER_BULLET_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(TOCHCA_COLOR_PAIR, TOCHCA_COLOR, COLOR_BLACK))
        || (ERR == init_pair(COMMANDER_INVADER_COLOR_PAIR, COMMANDER_INVADER_COLOR,
            COLOR_BLACK))
        || (ERR == init_pair(SENIOR_INVADER_COLOR_PAIR, SENIOR_INVADER_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(YOUNG_INVADER_COLOR_PAIR, YOUNG_INVADER_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(LOOKIE_INVADER_COLOR_PAIR, LOOKIE_INVADER_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(INVADER_BULLET_COLOR_PAIR, INVADER_BULLET_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(TITLE_COLOR_PAIR, TITLE_COLOR, COLOR_BLACK))
        || (ERR == init_pair(EVENT_CAPTION_COLOR_PAIR, EVENT_CAPTION_COLOR,
        COLOR_BLACK))
        || (ERR == init_pair(SCORE_COLOR_PAIR, SCORE_COLOR, COLOR_BLACK))
        || (ERR == init_pair(CREDIT_COLOR_PAIR, CREDIT_COLOR, COLOR_BLACK))
        || (ERR
            == init_pair(CANVAS_FRAME_COLOR_PAIR, CANVAS_FRAME_COLOR, COLOR_BLACK))) {
      emit_log(&error_logger,
               "Failed to change the ncurses setting to define color pair");
      goto cleanup;
    }

  }

  /* Execute game loop */
  scene = -1;
  next_scene = TITLE_SCENE;
  while (1) {
    /* Record the frame starting time */
    if (0 != gettimeofday(&frame_start_time, NULL)) {
      emit_log(&error_logger, "Failed to get time of frame starting");
      goto cleanup;
    }

    /* Change the next scene if needed */
    if (scene != next_scene) {
      scene = next_scene;
      if (INGAME_SCENE == scene) {
        reset_game(&game);
      }
    }

    /* Update the objects */
    if (TITLE_SCENE == scene) {
      update_game_on_title_scene(&next_scene);
    } else if (INGAME_SCENE == scene) {
      update_game_on_ingame_scene(&game, IDEAL_FRAME_TIME, &next_scene);
    }

    /* Render the objects */
    erase();
    if (TITLE_SCENE == scene) {
      draw_title_scene();
    } else if (INGAME_SCENE == scene) {
      draw_ingame_scene(&game);
    }
    draw_canvas_frame();
    refresh();

    /* Adjust the frame interval */
    if (0 != gettimeofday(&frame_end_time, NULL)) {
      emit_log(&error_logger, "Failed to get time of frame finished");
      goto cleanup;
    }
    elapsed_msec = (frame_end_time.tv_sec - frame_start_time.tv_sec) * 1000L
        + (frame_end_time.tv_usec - frame_start_time.tv_usec) / 1000000L;
    wait_msec = IDEAL_FRAME_TIME - elapsed_msec;
    if (0L < wait_msec) {
      wait_time.tv_sec = 0;
      wait_time.tv_nsec = wait_msec * 1000000L;
      while (-1 == nanosleep(&wait_time, &left_time)) {
        if (EINTR == errno) {
          memcpy(&wait_time, &left_time, sizeof(struct timespec));
        } else {
          if (0 == strerror_r(errno, errmsg, sizeof(errmsg))) {
            emit_log(
                &error_logger,
                "Failed to sleep until the end of frame: errmsg=%s, sleeping_msec=%ld",
                errmsg, wait_msec);
          } else {
            emit_log(&error_logger, "Failed to get error message: errno=%d",
            errno);
          }
          goto cleanup;
        }
      }
    }
  }
  status = 0;

 cleanup:
  endwin();
  close_logger(&error_logger);
  return status;
}
Example #30
0
void update(int mili) {
	Byte c = 0;
	if (!queueEmpty(&keys)) {
		c = queueGet(&keys);
		if (c == ESC_KEY)
			exit(0);
	}
	Bool mouseEvent = parse_mouse_event(mouseQueue, &mouse);

	updateHammer(hammer, mili, c, (mouseEvent ? &mouse : NULL));

	static Bool shift_flag = false;
	char k;
	int i, len;
	switch (state) {
		case PLAYING:
			for (i = 0; i < NUM_PCS; i++)
				updateCScreen(cscreens[i], hammer, &numPCs, &score->score, mili);	

			if (numPCs == 0) {
				state = END;
				hammer->state = GET_HAMMER;
			}
			
			updateButton(helpButton, hammer);
			if (helpButton->state == CLICKED)
				state = HELP;
				
			updateButton(exitButton, hammer);
			if (exitButton->state == CLICKED)
				exit(0);
			
			break;
		case END:
			if (hammer->state == HIT) {
				state = SCORE;
				highScore = isHighScore(highScores, score);
			}
			
			updateButton(helpButton, hammer);
			if (helpButton->state == CLICKED)
				state = HELP;
				
			updateButton(exitButton, hammer);
			if (exitButton->state == CLICKED)
				exit(0);
				
			break;
		case SCORE:
			if (highScore) {
				if (c != 0) {
					if (c == SHIFT_KEY) {
						shift_flag = true;
					}
					if (c == (SHIFT_KEY | RELEASED)) {
						shift_flag = false;
						break;
					}
						
					if (c == BACKSPACE_KEY) {
						len = strlen(score->name);
						if (len > 0) {
							score->name[len - 1] = NULL;
						}
						break;
					}
					
					k = scancodeToAscii(c);
					if (k != 0) {
						len = strlen(score->name);
						if (len < SCORE_NAME_LEN) {
							score->name[len] = (shift_flag ? toupper(k) : k);
							score->name[len + 1] = NULL;
						}
					}
				}
			}

			if (hammer->state == HIT && (!highScore || (c != SPACE_KEY && score->name[0] != NULL))) {
				if (highScore) {
					putScore(highScores, score);
					saveHighScores(highScores);
				}
				reset_game();
				state = PLAYING;
			}
			break;
		case HELP:
			if (hammer->state == HIT)
				state = PLAYING;
			break;
		default:
			break;
	}
}