![]() ![]() |
||||
![]() |
||||
|
Nedan följer pseudokod för SI 2001. Givetvis finns det inget som i dokumentationsväg går upp
mot kod, varför även denna listas...
main() { setup_intro(); display_intro(); forever_do { switch(game_state) { case INTRO : display_intro(); break; case GAME : display_game(); break; case GAME_OVER : display_game_over(); break; } } } display_intro() { if(is_ENTER_key_pressed()) { reset_intro(); setup_game(); display_game(); } else { /* display fancy intro... =) */ } } display_game() { move_user(); move_aliens(); move_rocket(); move_bombs(); evaluate_game_logics(); draw_user(); draw_aliens(); draw_rocket(); draw_bombs(); if(killed_in_action()) { game_state = GAME_OVER; } } display_game_over() { if (wanna_see_fancy_intro()) { game_state = INTRO; } else { /* display RIP message... */ } } Ett par enkla rutiner för att hantera grafik på LCD (Batron) displayen har tagits fram. Rutinerna kan med fördel användas vid konstruktion av prototyp där Batron display ingår som delkomponent. En sprite kan med metoden put_sprite läggas ut på valfri (x,y)
koordinat. Koordinater anges med avseende på en sprites övre vänstra hörn.
/* * put sprite with its top left corner situated * at (x,y) into display buffer. */ void put_sprite(byte *spr, int x, int y) { int cols = spr[0]; int rows = spr[1]; int cols_i; int rows_i; int y_tmp; /* | cols (1 byte) | rows (1 byte) | data.... | */ int data_offset = 2; for (cols_i = 0; cols_i < cols; cols_i++) { y_tmp = y; for (rows_i = 0; rows_i < rows; rows_i++) { put_sprite_8x1(&spr[cols_i * rows + rows_i + data_offset], x, y_tmp); y_tmp++; } x += 8; } } /* * put 8 bits into display buffer. */ void put_sprite_8x1(byte *spr, int x, int y) { int col; int off; /* X 0 63 Y 0 --------------TOP-------------- | COL | | | | | | | | | | | | 7 | 6 | 5 | ... | 0 | 1st screen | | | | | | | | | | | | 63 | | | | | | ------------------------------- 64 | COL | | | | | | | | | | | | 15 | 14 | 13 | ... | 8 | 2nd screen | | | | | | | | | | | | | | | | | | 127 ------------------------------- */ if (x < -7 || x > 63 || y < 0 || y > 127) { return; } off = x % 8; col = 7 - (x / 8); if (y > 63) { col += 8; /* 2nd screen */ y -= 64; } if (off >= 0) { display_buff[col * 64 + y] |= (*spr >> off); if (off > 0 && col != 0 && col != 8) { /* right part of bit pattern exceeds boundary but remains visible */ display_buff[(col - 1) * 64 + y] |= (*spr << (8 - off)); } } else { /* left part of bit pattern invisible right part of bit pattern exceeds boundary but remains visible */ display_buff[col * 64 + y] |= (*spr << (- off)); } } |