Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

void write(void);

void read(void);

void status_wait(void);

void LCD_char(unsigned char n);

void Clearscreen(void);

void newline(void);

void Reset_cursor(void);

//*****************************************************************

//Переменные

//*****************************************************************

#pragma abs_address 0x3600

static int win_array[ARRAY_MAX+1]

 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};

#pragma end_abs_address

#pragma abs_address 0x3500

int board_array_single [ARRAY_MAX+1];

int board_array_multi[SIZE][SIZE];

int win; //использовать
как булевы переменные

int direction; //направление движения

int row; //выделить ряд

int col; //выделить колонку

int select; //если кнопка нажата

int i; //текущая переменная

#pragma end_abs_address

//*****************************************************************

// Основная программа

//*****************************************************************

void main {

 win = 0; //инициализировать все переменные

 direction = 0;

 row = 1;

 col = 1;

 select = 0;

 i = 0;

 DDRDLC = 0x1F; //конфигурировать порт DDRDLC как выходной

 DDRP = 0xFF; // конфигурировать линии порта P как выходные

 DDRS = 0x00; // конфигурировать линии порта S как входные

 TSCR = 0x80; //включить таймер

 initialize_LCD; //инициализировать ЖКД

 Clearscreen;

 Reset_cursor;

 display_intro;

 for (i=0; i < ARRAY_MAX+1; i++) board_array_single[i] = win_array[i];

 convert_single_multi(board_array_single, board_array_multi);

 display_board(board_array_multi, row, col, direction);

 pause; // ожидание, пока пользователь не нажмет кнопку X

 LCD_output("Now the board is"); // вывод сообщения

 LCD_output("randomized. You ");

 LCD_output("may begin by ");

 LCD_output("choosing a piece");

 LCD_output("to move, and its");

 LCD_output("direction. ");

 newline;

 pause;

 randomize_board(board_array_single); // Случайный выбор
исходного

// положения фишек

 convert_single_multi(board_array_single, board_array_multi);

 display_board(board_array_multi, row, col, direction);

 while(win == 0){ //цикл повторяется до успешного окончания игры

while (select == 0) {

//если была нажата кнопка x, то задается направ-

// ление движения ряд и колонка выделенной фишки

get_move(&direction, &row, &col, &select);

Reset_cursor; // установить курсор в верхнее положение

if (select == 0)

display_board(board_array_multi, row, col, direction);

}

//проверить корректность движения, повторить его, если

// оно некорректно, или вывести сообщение об ошибке

try_move(direction, row-1, col-1, board_array_multi);

select = 0;

convert_multi_single(board_array_multi, board_array_single);

win = check_win(board_array_single);

Clearscreen;

// показать текущее состояние игры

display_board(board_array_multi, row, col, direction);

 }

 display_win; // вывести сообщение об успешном окончании игры

}

//*****************************************************************

// display_intro: DISPLAY INTRO MESSAGE

//*****************************************************************

void display_intro {

 newline;

 LCD_output(" WELCOME ");

 LCD_output(" TO ");

 LCD_output(" SLIDING PUZZLE ");

 new_line;

 pause;

 LCD_output("The object of ");

 LCD_output("this game is to ");

 LCD_output("move each #'ed ");

 LCD_output("puzzle piece so ");

 LCD_output("that you end up ");

 LCD_output("in the order ");

 LCD_output("seen below. The ");

 LCD_output("star shows the ");

 LCD_output("current piece ");

 LCD_output("selected. You ");

 LCD_output("can choose a ");

 LCD_output("different piece ");

 LCD_output(" by using the ");

 LCD_output(" arrow buttons ");

 newline;

 pause;

Поделиться с друзьями: