/* dwgame.c */ #include "global.h" #include #include "draw.h" #include "dwgame.h" #include "color.h" #include "game.h" /* подключим библиотеку мультимедийных таймеров */ #include /* рисунок фона 1 (16,16) */ static const UCHAR pBackGround0[] = { 1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1, /* 1 */ 1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1, /* 2 */ 1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1, /* 3 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 5 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 6 */ 1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1, /* 7 */ 1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1, /* 8 */ 1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1, /* 9 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 10 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 14 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 15 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 /* 16 */ }; /* рисунок фона 2 (16,16) */ static const UCHAR pBackGround1[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 1 */ 1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 4 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0, /* 5 */ 1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0, /* 6 */ 1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0, /* 7 */ 1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0, /* 8 */ 1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0, /* 9 */ 1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0, /* 10 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0, /* 11 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 13 */ 1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0, /* 14 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 15 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 16 */ }; /* рисунок фона 3 (16,16) */ static const UCHAR pBackGround2[] = { 1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1, /* 1 */ 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1, /* 2 */ 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1, /* 3 */ 1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1, /* 4 */ 1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1, /* 5 */ 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 6 */ 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 7 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 8 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0, /* 10 */ 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 11 */ 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 12 */ 1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1, /* 13 */ 1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1, /* 14 */ 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1, /* 15 */ 1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1 /* 16 */ }; /* рисунок фона 4 (16,16) */ static const UCHAR pBackGround3[] = { 1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1, /* 1 */ 1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1, /* 2 */ 1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1, /* 3 */ 0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, /* 4 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0, /* 5 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 6 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1, /* 7 */ 1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1, /* 8 */ 1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1, /* 9 */ 1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1, /* 10 */ 1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1, /* 11 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 12 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0, /* 13 */ 0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, /* 14 */ 1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1, /* 15 */ 1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1 /* 16 */ }; /* рисунки цифр отображающих иговые очки, от 0 до 4 (35,8) */ static const UCHAR pDigitScore04[] = { 1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1, /* 1 */ 0,0,2,2,2,0,0,1,0,0,2,2,0,1,0,0,2,2,2,0,0,0,0,2,2,2,0,0,1,0,0,2,2,0,1, /* 2 */ 0,2,2,0,2,2,0,1,0,2,2,2,0,1,0,2,2,2,2,2,0,0,2,2,0,2,2,0,1,0,2,2,2,0,1, /* 3 */ 0,2,2,0,2,2,0,1,0,0,2,2,0,1,0,2,2,0,2,2,0,0,0,0,2,2,0,0,0,0,2,0,2,0,1, /* 4 */ 0,2,2,0,2,2,0,1,1,0,2,2,0,1,0,0,0,2,2,0,0,0,0,0,2,2,0,0,0,2,2,0,2,0,0, /* 5 */ 0,2,2,0,2,2,0,1,0,0,2,2,0,0,0,0,2,2,0,0,0,0,2,2,0,2,2,0,0,2,2,2,2,2,0, /* 6 */ 0,0,2,2,2,0,0,1,0,2,2,2,2,0,0,2,2,2,2,2,0,0,0,2,2,2,0,0,0,0,0,2,2,0,0, /* 7 */ 1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,1 /* 8 */ }; /* рисунки цифр отображающих иговые очки, от 5 до 9 (35,8) */ static const UCHAR pDigitScore59[] = { 0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1, /* 1 */ 0,2,2,2,2,2,0,1,0,0,2,2,0,1,0,2,2,2,2,2,0,0,0,2,2,2,0,0,0,0,2,2,2,0,0, /* 2 */ 0,2,2,0,0,0,0,0,0,2,2,0,0,1,0,2,2,2,2,2,0,0,2,2,0,2,2,0,0,2,2,0,2,2,0, /* 3 */ 0,2,2,2,2,0,0,0,2,2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,2,0,0,0,2,2,0,2,2,0, /* 4 */ 0,0,0,0,2,2,0,0,2,2,0,2,2,0,1,0,2,2,2,0,1,0,2,2,0,2,2,0,0,0,2,2,2,2,0, /* 5 */ 0,2,2,0,2,2,0,0,2,2,0,2,2,0,1,0,2,2,0,0,1,0,2,2,0,2,2,0,1,0,0,2,2,0,0, /* 6 */ 0,0,2,2,2,0,0,0,0,2,2,2,0,0,1,0,2,2,0,1,1,0,0,2,2,2,0,0,1,0,2,2,0,0,1, /* 7 */ 1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1 /* 8 */ }; /* рисунок надписи 'up' (16,8) */ static const UCHAR pUpScore[] = { 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, /* 1 */ 0,2,2,0,2,2,0,1,0,2,2,2,2,2,0,0, /* 2 */ 0,2,2,0,2,2,0,1,0,2,2,0,0,2,2,0, /* 3 */ 0,2,2,0,2,2,0,1,0,2,2,0,0,2,2,0, /* 4 */ 0,2,2,0,2,2,0,1,0,2,2,2,2,2,0,0, /* 5 */ 0,2,2,2,2,2,0,1,0,2,2,0,0,0,0,1, /* 6 */ 0,0,2,2,2,0,0,1,0,2,2,0,1,1,1,1, /* 7 */ 1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1 /* 8 */ }; /* рисунок надписи 'hi' (13,8) */ static const UCHAR pHiScore[] = { 0,0,0,0,0,0,0,0,1,0,0,0,0, /* 1 */ 0,2,2,0,0,2,2,0,1,0,2,2,0, /* 2 */ 0,2,2,0,0,2,2,0,1,0,2,2,0, /* 3 */ 0,2,2,2,2,2,2,0,1,0,2,2,0, /* 4 */ 0,2,2,2,2,2,2,0,1,0,2,2,0, /* 5 */ 0,2,2,0,0,2,2,0,1,0,2,2,0, /* 6 */ 0,2,2,0,0,2,2,0,1,0,2,2,0, /* 7 */ 0,0,0,0,0,0,0,0,1,0,0,0,0 /* 8 */ }; /* рисунок маленькой ракетки отображающей жизни (14,6) */ static const UCHAR pSmallRacket[] = { 1,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 1 */ 0,0,2,0,2,2,2,2,2,2,0,2,0,0, /* 2 */ 0,2,2,0,2,2,2,2,2,2,0,2,2,0, /* 3 */ 0,2,2,0,2,2,2,2,2,2,0,2,2,0, /* 4 */ 0,0,2,0,2,2,2,2,2,2,0,2,0,0, /* 5 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,1 /* 6 */ }; /* рисунок кирпича (16,8) */ static const UCHAR pBlock[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 1 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 3 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимации кирпича 1 (16,8) */ static const UCHAR pAnimBlock0[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 5 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 6 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимация кирпича 2 (16,8) */ static const UCHAR pAnimBlock1[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 5 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, /* 6 */ 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимация кирпича 3 (16,8) */ static const UCHAR pAnimBlock2[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 5 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, /* 6 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимация кирпича 4 (16,8) */ static const UCHAR pAnimBlock3[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 5 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, /* 6 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимация кирпича 5 (16,8) */ static const UCHAR pAnimBlock4[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, /* 5 */ 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1, /* 6 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* анимация кирпича 6 (16,8) */ static const UCHAR pAnimBlock5[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 1 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 2 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 3 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 4 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 5 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 6 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* рисунок мячика и его тени (12,7) */ static const UCHAR pBall[] = { 1,1,0,0,0,1,1,1,0,0,0,1, /* 1 */ 1,0,2,2,2,0,1,0,0,0,0,0, /* 2 */ 0,2,0,0,2,2,0,0,0,0,0,0, /* 3 */ 0,2,0,2,2,2,0,0,0,0,0,0, /* 4 */ 0,2,2,2,2,2,0,1,0,0,0,1, /* 5 */ 1,0,2,2,2,0,1,1,1,1,1,1, /* 6 */ 1,1,0,0,0,1,1,1,1,1,1,1, /* 7 */ }; /* рисунок большого мячика и его тени (16,9) */ static const UCHAR pBallSmash[] = { 1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1, /* 1 */ 1,1,0,2,2,2,0,1,1,1,0,0,0,0,0,1, /* 2 */ 1,0,2,0,0,2,2,0,1,0,0,0,0,0,0,0, /* 3 */ 0,2,0,0,2,2,2,2,0,0,0,0,0,0,0,0, /* 4 */ 0,2,0,2,2,2,2,2,0,0,0,0,0,0,0,0, /* 5 */ 0,2,2,2,2,2,2,2,0,1,0,0,0,0,0,1, /* 6 */ 1,0,2,2,2,2,2,0,1,1,1,0,0,0,1,1, /* 7 */ 1,1,0,2,2,2,0,1,1,1,1,1,1,1,1,1, /* 8 */ 1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1 /* 9 */ }; /* рисунок ракетки (32,13) */ static const UCHAR pRacketNormal[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок стреляющей ракетки (32,13) */ static const UCHAR pRacketGun[] = { 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,2,0,2,2,2,2,0,2,0,0,2,2,2,0,2,2,2,2,0,2,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,0,0,2,0,0,2,2,2,2,2,0,0,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,0,2,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,0,1,0,1,0,1, /* 9 */ 1,1,1,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок большой ракетки (48,13) */ static const UCHAR pRacketExtend[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 1 перехода normal -> gun (30,13) */ static const UCHAR pRacketNtoG1[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 2 перехода normal -> gun (30,13) */ static const UCHAR pRacketNtoG2[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,0,0,0,2,0,2,2,0,0,0,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,2,2,2,0,0,0,0,2,2,2,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 3 перехода normal -> gun (32,13) */ static const UCHAR pRacketNtoG3[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,0,0,0,0,2,0,2,2,0,0,0,0,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,0,0,0,2,0,0,2,2,2,0,0,0,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,2,2,2,0,0,0,0,0,0,2,2,2,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 4 перехода normal -> gun (32,13) */ static const UCHAR pRacketNtoG4[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,2,2,2,0,2,0,2,2,0,2,2,2,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,0,0,0,2,0,0,2,2,2,0,0,0,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,0,0,2,0,0,2,2,2,2,2,0,0,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 1 перехода normal -> extend (34,13) */ static const UCHAR pRacketNtoE1[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 2 перехода normal -> extend (36,13) */ static const UCHAR pRacketNtoE2[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 3 перехода normal -> extend (38,13) */ static const UCHAR pRacketNtoE3[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 4 перехода normal -> extend (40,13) */ static const UCHAR pRacketNtoE4[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 5 перехода normal -> extend (42,13) */ static const UCHAR pRacketNtoE5[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 6 перехода normal -> extend (44,13) */ static const UCHAR pRacketNtoE6[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок 7 перехода normal -> extend (46,13) */ static const UCHAR pRacketNtoE7[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, /* 1 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,1,1,1,1, /* 2 */ 0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,2,0,0,1,1,1,1, /* 3 */ 0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,2,2,0,1,1,1,1, /* 4 */ 0,2,0,0,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,0,0,2,0,0,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,1,0,1,1, /* 6 */ 0,2,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,2,0,0,1,0,1, /* 7 */ 0,0,2,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,2,0,0,1,0,1,0, /* 8 */ 1,0,0,2,2,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,2,2,0,0,1,0,1,0,1, /* 9 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0, /* 10 */ 1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 11 */ 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 12 */ 1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1 /* 13 */ }; /* рисунок круга отклонения (выключен) (30,30) */ static const UCHAR pSwerveOff[] = { 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,0,0,0,2,2,2,2,0,0,0,0,0,2,2,2,2,0,0,0,1,1,1,1,1,1,1,1, /* 3 */ 1,1,0,0,2,2,2,0,0,0,0,2,2,2,0,0,0,0,2,2,2,0,0,1,1,1,1,1,1,1, /* 4 */ 1,1,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,2,2,0,1,1,1,1,1,1,1, /* 5 */ 1,0,0,2,0,0,0,2,0,0,0,2,2,0,0,0,0,2,0,0,0,2,0,0,1,1,1,1,1,1, /* 6 */ 1,0,2,2,0,0,2,0,2,0,0,2,0,0,0,0,2,0,2,0,0,2,2,0,1,1,1,1,1,1, /* 7 */ 1,0,2,0,0,2,0,0,0,2,0,0,0,0,0,2,0,2,0,2,0,0,2,0,1,1,1,1,1,1, /* 8 */ 0,0,2,0,0,0,2,0,2,0,0,2,2,2,0,0,0,0,0,0,0,0,2,0,0,1,1,1,1,1, /* 9 */ 0,2,2,0,0,0,0,2,0,0,2,0,0,2,2,0,0,0,0,0,0,0,2,2,0,1,1,1,1,1, /* 10 */ 0,2,0,0,0,0,0,0,0,2,0,0,2,2,2,2,0,0,0,0,0,0,0,2,0,0,1,1,1,1, /* 11 */ 0,2,0,0,2,2,0,0,0,2,0,2,2,2,2,2,0,0,0,2,2,0,0,2,0,1,0,1,1,1, /* 12 */ 0,2,0,0,2,2,0,0,0,2,0,2,2,2,2,2,0,0,0,2,2,0,0,2,0,0,1,0,1,1, /* 13 */ 0,2,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,1,0,1,0,1, /* 14 */ 0,2,2,0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,2,2,0,0,1,0,1,1, /* 15 */ 0,0,2,0,0,0,0,2,0,0,0,2,2,2,0,0,0,2,0,0,0,0,2,0,0,1,0,1,0,1, /* 16 */ 1,0,2,0,0,0,2,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,1,0,1,0,1,0, /* 17 */ 1,0,2,2,0,2,0,0,0,2,0,2,2,2,0,2,0,2,0,0,0,2,2,0,0,1,0,1,0,1, /* 18 */ 1,0,0,2,0,0,2,0,2,0,0,2,0,0,0,0,2,0,0,0,0,2,0,0,1,0,1,0,1,0, /* 19 */ 1,1,0,2,2,0,0,2,0,0,0,2,2,0,0,0,0,2,0,0,2,2,0,1,0,1,0,1,0,1, /* 20 */ 1,1,0,0,2,2,2,0,0,0,0,2,0,0,0,0,0,0,2,2,2,0,0,0,1,0,1,0,1,0, /* 21 */ 1,1,1,0,0,0,2,2,2,2,0,0,0,0,0,2,2,2,2,0,0,0,0,1,0,1,0,1,0,1, /* 22 */ 1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,1,0,1,0,1,0,1,0,1,1, /* 23 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 24 */ 1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 25 */ 1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1, /* 26 */ 1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 27 */ 1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1, /* 28 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1, /* 29 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1 /* 30 */ }; /* рисунок круга отклонения (включен) (30,30) */ static const UCHAR pSwerveOn[] = { 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,0,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,1,1,1, /* 3 */ 1,1,0,0,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,0,0,1,1,1,1,1,1,1, /* 4 */ 1,1,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1, /* 5 */ 1,0,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,0,0,1,1,1,1,1,1, /* 6 */ 1,0,2,0,0,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,0,0,2,0,1,1,1,1,1,1, /* 7 */ 1,0,2,2,2,0,0,2,2,2,2,0,0,0,2,2,2,2,0,0,2,2,2,0,1,1,1,1,1,1, /* 8 */ 0,0,2,2,2,2,2,0,2,0,2,2,0,2,2,0,2,0,2,2,2,2,2,0,0,1,1,1,1,1, /* 9 */ 0,2,2,2,2,2,2,2,0,0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,0,1,1,1,1,1, /* 10 */ 0,2,2,2,2,2,2,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,2,0,0,1,1,1,1, /* 11 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,0,1,1,1, /* 12 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1,0,1,1, /* 13 */ 0,2,2,2,2,2,2,0,0,0,2,2,2,2,2,0,0,0,2,2,2,2,2,2,0,1,0,1,0,1, /* 14 */ 0,2,2,2,2,2,2,2,0,0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,0,0,1,0,1,1, /* 15 */ 0,0,2,2,2,2,2,0,2,0,2,2,0,2,2,0,2,0,2,2,2,2,2,0,0,1,0,1,0,1, /* 16 */ 1,0,2,2,2,0,0,2,2,2,2,0,0,0,2,2,2,2,0,0,2,2,2,0,1,0,1,0,1,0, /* 17 */ 1,0,2,0,0,2,2,2,2,2,0,0,0,0,0,2,2,2,2,2,0,0,2,0,0,1,0,1,0,1, /* 18 */ 1,0,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,0,0,1,0,1,0,1,0, /* 19 */ 1,1,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,0,1,0,1,0,1,0,1, /* 20 */ 1,1,0,0,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,0,0,0,1,0,1,0,1,0, /* 21 */ 1,1,1,0,0,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,0,0,0,1,0,1,0,1,0,1, /* 22 */ 1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,1,0,1,0,1,0,1,0,1,1, /* 23 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1, /* 24 */ 1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 25 */ 1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1, /* 26 */ 1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1, /* 27 */ 1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1, /* 28 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1, /* 29 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1 /* 30 */ }; /* рисунок птицы 0 (24,14) */ static const UCHAR pBird0[] = { 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1, /* 1 */ 1,0,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,0,1, /* 2 */ 1,1,0,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,0,1,1, /* 3 */ 1,1,1,0,2,2,0,1,1,1,1,0,0,1,1,1,1,0,2,2,0,1,1,1, /* 4 */ 1,1,1,0,2,2,2,0,1,1,0,2,2,0,1,1,0,2,2,2,0,1,1,1, /* 5 */ 1,1,1,1,0,2,2,2,0,0,2,2,2,2,0,0,2,2,2,0,1,1,1,1, /* 6 */ 1,1,1,1,1,0,2,2,0,2,0,2,2,0,2,0,2,2,0,1,1,1,1,1, /* 7 */ 1,1,1,1,1,0,2,2,0,2,2,2,2,2,2,0,2,2,0,1,1,1,1,1, /* 8 */ 1,1,1,1,1,1,0,2,2,0,2,0,0,2,0,2,2,0,1,1,1,1,1,1, /* 9 */ 1,1,1,1,1,1,1,0,0,0,0,2,2,0,0,0,0,1,1,1,1,1,1,1, /* 10 */ 1,1,1,1,1,1,1,1,0,2,0,2,2,0,2,0,1,1,1,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,1,1,0,2,0,2,0,0,2,0,1,1,1,1,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,0,2,0,2,0,0,2,0,2,0,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 14 */ }; /* рисунок птицы 1 (24,14) */ static const UCHAR pBird1[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1, /* 3 */ 0,2,2,2,0,0,0,1,1,1,0,2,2,0,1,1,1,0,0,0,2,2,2,0, /* 4 */ 1,0,2,2,2,2,2,0,1,0,2,2,2,2,0,1,0,2,2,2,2,2,0,1, /* 5 */ 1,1,0,0,2,2,2,2,0,2,0,2,2,0,2,0,2,2,2,2,0,0,1,1, /* 6 */ 1,1,1,1,0,0,2,2,0,2,2,0,0,2,2,0,2,2,0,0,1,1,1,1, /* 7 */ 1,1,1,1,1,1,0,2,2,0,0,2,2,0,0,2,2,0,1,1,1,1,1,1, /* 8 */ 1,1,1,1,1,1,1,0,0,2,0,2,2,0,2,0,0,1,1,1,1,1,1,1, /* 9 */ 1,1,1,1,1,1,1,1,0,2,0,2,0,0,2,0,1,1,1,1,1,1,1,1, /* 10 */ 1,1,1,1,1,1,1,0,2,0,2,0,0,2,0,2,0,1,1,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 14 */ }; /* рисунок птицы 2 (24,14) */ static const UCHAR pBird2[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,0,2,2,0,1,1,1,1,1,1,1,1,1,1, /* 3 */ 1,1,1,1,1,1,1,1,1,0,2,2,2,2,0,1,1,1,1,1,1,1,1,1, /* 4 */ 1,1,1,1,1,1,1,0,0,2,0,2,2,0,2,0,0,1,1,1,1,1,1,1, /* 5 */ 1,1,1,0,0,0,0,2,0,2,2,2,2,2,2,0,2,0,0,0,0,1,1,1, /* 6 */ 1,1,0,2,2,2,2,2,2,0,2,0,0,2,0,2,2,2,2,2,2,0,1,1, /* 7 */ 1,0,2,2,2,2,2,2,0,0,0,2,2,0,0,0,2,2,2,2,2,2,0,1, /* 8 */ 0,2,2,0,0,0,0,0,0,2,0,2,2,0,2,0,0,0,0,0,0,2,2,0, /* 9 */ 1,0,0,1,1,1,1,1,0,2,0,2,0,0,2,0,1,1,1,1,1,0,0,1, /* 10 */ 1,1,1,1,1,1,1,0,2,0,2,0,0,2,0,2,0,1,1,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 14 */ }; /* рисунок птички 3 (24,14) */ static const UCHAR pBird3[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,0,2,2,0,1,1,1,1,1,1,1,1,1,1, /* 3 */ 1,1,1,1,1,1,1,1,1,0,2,2,2,2,0,1,1,1,1,1,1,1,1,1, /* 4 */ 1,1,1,1,1,1,1,0,0,2,0,2,2,0,2,0,0,1,1,1,1,1,1,1, /* 5 */ 1,1,1,1,1,0,0,2,0,2,2,2,2,2,2,0,2,0,0,1,1,1,1,1, /* 6 */ 1,1,1,1,0,2,2,2,2,0,2,0,0,2,0,2,2,2,2,0,1,1,1,1, /* 7 */ 1,1,1,0,2,2,2,2,0,0,0,2,2,0,0,0,2,2,2,2,0,1,1,1, /* 8 */ 1,1,0,2,2,2,0,0,0,2,0,2,2,0,2,0,0,0,2,2,2,0,1,1, /* 9 */ 1,1,0,2,2,0,1,1,0,2,0,2,0,0,2,0,1,1,0,2,2,0,1,1, /* 10 */ 1,0,2,2,0,1,1,0,2,0,2,0,0,2,0,2,0,1,1,0,2,2,0,1, /* 11 */ 1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,0,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 14 */ }; /* рисунок птицы 4 (24,14) */ static const UCHAR pBird4[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,0,0,1,1,0,2,2,0,1,1,0,0,1,1,1,1,1,1, /* 3 */ 1,1,1,1,1,0,2,2,0,0,2,2,2,2,0,0,2,2,0,1,1,1,1,1, /* 4 */ 1,1,1,1,0,2,2,2,0,2,0,2,2,0,2,0,2,2,2,0,1,1,1,1, /* 5 */ 1,1,1,0,2,2,2,0,2,0,2,0,0,2,0,2,0,2,2,2,0,1,1,1, /* 6 */ 1,1,1,0,2,2,0,1,0,0,0,2,2,0,0,0,1,0,2,2,0,1,1,1, /* 7 */ 1,1,1,0,2,2,0,1,0,2,0,2,2,0,2,0,1,0,2,2,0,1,1,1, /* 8 */ 1,1,0,2,2,2,0,1,0,2,0,2,0,0,2,0,1,0,2,2,2,0,1,1, /* 9 */ 1,1,0,2,2,0,1,0,2,0,2,0,0,2,0,2,0,1,0,2,2,0,1,1, /* 10 */ 1,1,0,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,0,2,0,1,1, /* 11 */ 1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок НЛО 1 (24,14) */ static const UCHAR pUfo0[] = { 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,0,0,0,2,0,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 2 */ 1,1,1,1,0,0,2,2,2,0,0,2,2,2,2,2,2,2,0,0,1,1,1,1, /* 3 */ 1,1,0,0,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,1,1, /* 4 */ 1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 5 */ 0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 6 */ 0,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 7 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 8 */ 0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0, /* 9 */ 0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0, /* 10 */ 0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0, /* 11 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 12 */ 0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 13 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 /* 14 */ }; /* рисунок НЛО 2 (24,14) */ static const UCHAR pUfo1[] = { 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 2 */ 1,1,1,1,0,0,2,2,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,1, /* 3 */ 1,1,0,0,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,1,1, /* 4 */ 1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 5 */ 0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 6 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,0, /* 8 */ 0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,0, /* 9 */ 0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,0, /* 10 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 11 */ 0,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 12 */ 1,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,1, /* 13 */ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 /* 14 */ }; /* рисунок НЛО 3 (24,14) */ static const UCHAR pUfo2[] = { 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 2 */ 1,1,1,0,0,0,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,1, /* 3 */ 1,0,0,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,1, /* 4 */ 0,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 5 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 6 */ 1,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,0, /* 7 */ 1,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,0, /* 8 */ 1,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,0, /* 9 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 10 */ 0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 11 */ 1,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1, /* 12 */ 1,1,1,0,0,0,0,2,0,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1, /* 13 */ 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок НЛО 4 (24,14) */ static const UCHAR pUfo3[] = { 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1, /* 1 */ 1,1,1,0,0,0,0,2,0,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1, /* 2 */ 1,0,0,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1, /* 3 */ 0,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 4 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 5 */ 0,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,0, /* 6 */ 0,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,0, /* 7 */ 0,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,0, /* 8 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 9 */ 0,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 10 */ 1,0,0,2,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,1, /* 11 */ 1,1,1,0,0,0,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,1,1,1, /* 12 */ 1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок НЛО 5 (24,14) */ static const UCHAR pUfo4[] = { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1, /* 1 */ 1,0,0,0,0,2,2,2,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,1, /* 2 */ 0,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 3 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 4 */ 0,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,1, /* 5 */ 0,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,1, /* 6 */ 0,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,1, /* 7 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 8 */ 0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 9 */ 1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 10 */ 1,1,0,0,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,1,1, /* 11 */ 1,1,1,1,0,0,2,2,0,0,2,2,2,2,2,2,2,2,0,0,1,1,1,1, /* 12 */ 1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок НЛО 6 (24,14) */ static const UCHAR pUfo5[] = { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 1 */ 0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 2 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 3 */ 0,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0, /* 4 */ 0,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0, /* 5 */ 0,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0,2,2,2,2,0,0, /* 6 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 7 */ 0,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 8 */ 0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 9 */ 1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 10 */ 1,1,0,0,2,2,2,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,1,1, /* 11 */ 1,1,1,1,0,0,2,2,2,0,0,2,2,2,2,2,2,2,0,0,1,1,1,1, /* 12 */ 1,1,1,1,1,1,0,0,0,2,0,2,2,2,2,0,0,0,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок взрыва 1 (16,19) */ static const UCHAR pBang0[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5 */ 1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1, /* 6 */ 1,1,1,1,0,0,1,1,0,2,0,1,0,1,1,1, /* 7 */ 1,1,1,0,2,2,0,0,2,2,0,1,1,1,1,1, /* 8 */ 1,1,1,0,2,2,2,2,2,2,0,0,1,1,1,1, /* 9 */ 1,1,1,1,0,2,2,2,0,2,2,2,0,1,1,1, /* 10 */ 1,1,1,0,1,0,2,0,0,0,2,2,2,0,1,1, /* 11 */ 1,1,1,1,0,2,2,2,2,2,2,0,0,1,1,1, /* 12 */ 1,1,1,0,2,2,2,0,2,2,0,0,1,1,1,1, /* 13 */ 1,1,1,1,0,0,0,1,0,2,0,1,1,1,1,1, /* 14 */ 1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1, /* 15 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 16 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 17 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 18 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 19 */ }; /* рисунок взрыва 2 (16,19) */ static const UCHAR pBang1[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 3 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4 */ 1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1, /* 5 */ 1,1,1,0,0,1,1,1,0,2,0,1,0,1,1,1, /* 6 */ 1,1,0,2,2,0,0,0,2,2,0,1,1,1,1,1, /* 7 */ 1,1,0,2,2,2,2,0,2,2,2,0,0,0,1,1, /* 8 */ 1,1,1,0,2,2,2,2,2,0,2,2,2,2,0,1, /* 9 */ 1,1,1,1,0,2,2,0,0,0,2,2,2,0,1,1, /* 10 */ 1,1,0,1,1,0,2,2,0,2,2,2,0,1,1,1, /* 11 */ 1,1,1,1,0,2,2,2,2,2,2,0,1,0,1,1, /* 12 */ 1,1,1,1,0,2,2,2,0,2,2,2,0,1,1,1, /* 13 */ 1,1,1,0,2,2,0,0,1,0,2,2,0,1,1,1, /* 14 */ 1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1, /* 15 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 16 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 17 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 18 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 19 */ }; /* рисунок взрыва 3 (16,19) */ static const UCHAR pBang2[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1, /* 3 */ 1,1,1,1,0,1,1,1,1,0,2,0,1,1,1,1, /* 4 */ 1,1,1,1,1,1,1,1,0,2,2,0,1,0,1,1, /* 5 */ 1,1,1,0,0,0,0,0,2,2,2,0,1,1,1,1, /* 6 */ 1,1,0,2,2,2,2,2,2,2,2,0,1,1,0,1, /* 7 */ 1,1,1,0,2,2,2,2,0,0,2,2,0,0,1,1, /* 8 */ 1,1,1,1,0,2,2,0,0,2,0,2,2,2,0,1, /* 9 */ 1,1,1,0,1,0,2,0,0,0,2,2,2,0,1,1, /* 10 */ 1,1,1,1,0,2,2,2,2,0,2,0,0,1,1,1, /* 11 */ 1,0,1,0,2,2,2,2,2,2,2,0,1,0,1,1, /* 12 */ 1,1,1,0,2,2,2,0,0,2,2,2,0,1,1,1, /* 13 */ 1,1,0,2,2,0,0,1,1,0,2,2,0,1,0,1, /* 14 */ 1,1,1,0,0,1,1,0,1,1,0,2,0,1,1,1, /* 15 */ 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, /* 16 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 17 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 18 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 19 */ }; /* рисунок взрыва 4 (16,19) */ static const UCHAR pBang3[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1, /* 2 */ 1,0,1,1,0,1,1,0,2,0,1,0,1,1,0,1, /* 3 */ 1,1,1,1,1,1,0,2,2,2,0,1,1,0,1,1, /* 4 */ 1,0,0,0,0,0,2,2,2,2,0,1,1,1,1,1, /* 5 */ 0,2,2,2,2,0,2,2,0,2,2,0,0,0,0,1, /* 6 */ 1,0,2,2,2,2,2,0,0,2,2,2,2,2,2,0, /* 7 */ 1,0,2,2,2,0,0,0,2,0,0,2,2,2,0,1, /* 8 */ 1,1,0,2,0,2,0,2,0,0,2,2,2,0,1,1, /* 9 */ 0,1,0,2,2,0,2,0,0,2,2,2,0,1,1,1, /* 10 */ 1,1,1,0,2,2,0,0,2,0,2,2,0,1,0,1, /* 11 */ 1,0,1,0,2,2,0,2,2,0,2,2,2,0,1,1, /* 12 */ 1,1,0,2,2,2,2,2,2,2,2,2,2,0,1,1, /* 13 */ 1,1,0,2,2,2,2,0,2,2,2,2,2,2,0,1, /* 14 */ 1,0,2,2,2,2,0,1,0,0,2,2,2,2,0,1, /* 15 */ 1,0,2,2,0,0,1,0,1,1,0,0,2,2,0,1, /* 16 */ 1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1, /* 17 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 18 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 19 */ }; /* рисунок взрыва 5 (16,19) */ static const UCHAR pBang4[] = { 1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,0,2,0,1,1,0,1,1, /* 2 */ 1,1,1,0,1,1,1,0,2,2,0,1,1,1,1,0, /* 3 */ 1,0,1,1,1,1,0,2,2,2,2,0,1,0,1,1, /* 4 */ 1,1,1,0,1,1,0,2,2,2,2,0,1,1,1,1, /* 5 */ 1,0,0,0,0,0,2,2,0,2,2,0,0,1,1,1, /* 6 */ 0,2,2,2,2,2,2,2,0,2,2,2,2,0,0,1, /* 7 */ 0,2,2,2,2,2,2,0,0,2,2,2,2,2,2,0, /* 8 */ 1,0,2,2,0,0,2,0,2,0,0,0,2,2,0,1, /* 9 */ 1,0,2,2,2,0,0,2,0,2,0,2,2,0,1,1, /* 10 */ 1,1,0,2,2,2,2,0,2,0,2,2,2,0,1,0, /* 11 */ 0,1,1,0,2,2,0,2,0,2,2,2,0,1,0,1, /* 12 */ 1,1,1,0,2,0,2,0,2,0,2,2,2,0,1,1, /* 13 */ 1,1,0,2,2,0,2,2,2,2,0,2,2,0,1,1, /* 14 */ 1,0,2,2,2,2,2,2,0,2,2,2,2,2,0,1, /* 15 */ 1,0,2,2,2,2,2,0,1,0,2,2,2,2,2,0, /* 16 */ 0,2,2,2,2,0,0,1,1,1,0,0,2,2,2,0, /* 17 */ 0,2,2,0,0,1,1,0,1,0,1,1,0,0,2,0, /* 18 */ 1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1 /* 19 */ }; /* рисунок "бонусные очки" (23,14) */ static const UCHAR pPointsBonus[] = { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, /* 1 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 2 */ 0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,0, /* 3 */ 0,2,0,2,2,2,2,0,2,2,0,2,0,2,2,0,2,0,2,2,0,2,0, /* 4 */ 0,2,0,0,0,0,2,0,2,2,0,2,0,2,2,0,2,0,2,2,0,2,0, /* 5 */ 0,2,2,2,2,0,2,0,2,2,0,2,0,2,2,0,2,0,2,2,0,2,0, /* 6 */ 0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,0, /* 7 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 8 */ 1,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1, /* 9 */ 1,1,1,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1,1,1, /* 10 */ 1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,2,0,0,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,1,0,0,2,2,2,2,2,0,0,1,1,1,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,0,0,2,0,0,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1 /* 14 */ }; /* рисунок "Kill Aliens" (24,15) */ static const UCHAR pKillAliensBonus[] = { 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, /* 1 */ 1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1, /* 2 */ 1,1,1,0,2,2,0,2,2,0,2,0,2,0,2,2,0,2,2,2,0,1,1,1, /* 3 */ 1,1,0,2,2,2,0,2,0,2,2,0,2,0,2,2,0,2,2,2,2,0,1,1, /* 4 */ 1,1,0,2,2,2,0,0,2,2,2,0,2,0,2,2,0,2,2,2,2,0,1,1, /* 5 */ 1,0,2,2,2,2,0,2,0,2,2,0,2,0,2,2,0,2,2,2,2,2,0,1, /* 6 */ 1,0,2,2,2,2,0,2,2,0,2,0,2,0,0,2,0,0,2,2,2,2,0,1, /* 7 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 8 */ 0,2,0,0,0,2,0,2,2,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, /* 9 */ 0,2,0,2,0,2,0,2,2,0,2,0,2,2,2,0,2,0,2,0,2,2,2,0, /* 10 */ 0,2,0,0,0,2,0,2,2,0,2,0,0,0,2,0,2,0,2,0,0,0,2,0, /* 11 */ 0,2,0,2,0,2,0,2,2,0,2,0,2,2,2,0,2,0,2,2,2,0,2,0, /* 12 */ 0,2,0,2,0,2,0,0,2,0,2,0,0,0,2,0,2,0,2,0,0,0,2,0, /* 13 */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, /* 14 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 /* 15 */ }; /* рисунок "дополнительная жизнь" (19,13) */ static const UCHAR pExtraLifeBonus[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 1 */ 1,0,2,2,0,2,2,2,2,2,2,2,2,2,0,2,2,0,1, /* 2 */ 0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0, /* 3 */ 0,0,2,2,0,2,2,2,2,2,2,2,2,2,0,2,2,2,0, /* 4 */ 0,2,2,2,0,2,2,2,2,2,2,2,2,2,0,2,2,2,0, /* 5 */ 1,0,2,2,0,2,2,2,2,2,2,2,2,2,0,2,2,0,1, /* 6 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 7 */ 1,1,1,1,1,1,0,1,1,1,1,0,2,0,1,1,1,1,1, /* 8 */ 1,1,1,1,1,0,2,0,1,1,0,2,2,0,1,1,1,1,1, /* 9 */ 1,1,1,1,0,2,2,2,0,1,1,0,2,0,1,1,1,1,1, /* 10 */ 1,1,1,1,1,0,2,0,1,1,1,0,2,0,1,1,1,1,1, /* 11 */ 1,1,1,1,1,1,0,1,1,1,0,2,2,2,0,1,1,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1 /* 13 */ }; /* рисунок "замедления скорости шарика" (22,15) */ static const UCHAR pSlowBallBonus[] = { 1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,0,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,0,2,0,0,0,2,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1, /* 3 */ 0,2,0,0,2,2,2,2,0,1,1,0,2,0,1,1,1,1,1,1,1,1, /* 4 */ 0,2,0,2,2,2,2,2,0,1,1,0,2,0,1,1,0,1,1,1,1,1, /* 5 */ 0,2,0,2,2,2,2,2,0,1,1,0,2,0,1,0,2,0,1,1,1,1, /* 6 */ 1,0,2,2,2,2,2,0,1,1,0,2,0,1,1,0,2,0,1,1,0,1, /* 7 */ 1,1,0,2,2,2,0,1,1,1,0,2,0,1,1,0,2,0,1,0,2,0, /* 8 */ 1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,2,0,1,1,0,2,0, /* 9 */ 1,0,2,2,2,2,0,0,1,1,1,1,1,1,1,0,1,1,0,2,0,1, /* 10 */ 1,0,2,0,0,0,0,2,0,1,1,0,0,0,1,1,1,1,1,0,1,1, /* 11 */ 1,0,2,2,2,2,0,2,0,1,0,2,2,2,0,0,0,0,0,0,1,1, /* 12 */ 1,1,0,0,0,2,0,2,0,0,0,2,0,2,0,2,0,2,0,2,0,1, /* 13 */ 1,0,2,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,2,2,0,1, /* 14 */ 1,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1 /* 15 */ }; /* рисунок "большой мячик" (23,15) */ static const UCHAR pSmashBallBonus[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, /* 1 */ 1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,2,2,2,0,1,1, /* 2 */ 1,0,2,2,2,0,1,1,1,0,2,0,1,1,1,0,2,0,0,2,2,0,1, /* 3 */ 0,2,0,0,2,2,0,0,0,0,2,2,0,1,0,2,0,0,2,2,2,2,0, /* 4 */ 0,2,0,2,2,2,0,2,2,2,2,2,2,0,0,2,0,2,2,2,2,2,0, /* 5 */ 0,2,2,2,2,2,0,0,0,0,2,2,0,1,0,2,2,2,2,2,2,2,0, /* 6 */ 1,0,2,2,2,0,1,1,1,0,2,0,1,1,1,0,2,2,2,2,2,0,1, /* 7 */ 1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,2,2,2,0,1,1, /* 8 */ 1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1, /* 9 */ 0,2,2,2,0,2,2,2,2,2,0,2,2,2,0,2,2,2,0,2,0,2,0, /* 10 */ 0,2,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,0,0,2,0,2,0, /* 11 */ 0,2,2,2,0,2,0,2,0,2,0,2,2,2,0,2,2,2,0,2,2,2,0, /* 12 */ 1,0,0,2,0,2,0,2,0,2,0,2,0,2,0,0,0,2,0,2,0,2,0, /* 13 */ 0,2,2,2,0,2,0,0,0,2,0,2,0,2,0,2,2,2,0,2,0,2,0, /* 14 */ 1,0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1 /* 15 */ }; /* рисунок "тройного шарика" (17,15) */ static const UCHAR pTripleBallBonus[] = { 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,1,1, /* 2 */ 1,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,1, /* 3 */ 0,2,2,2,2,0,2,2,2,2,2,0,2,2,2,2,0, /* 4 */ 0,2,2,2,0,0,0,0,2,0,0,0,0,2,2,2,0, /* 5 */ 0,2,2,2,0,0,0,0,2,0,0,0,0,2,2,2,0, /* 6 */ 0,2,0,0,2,0,0,0,2,0,0,0,2,0,0,2,0, /* 7 */ 1,0,0,1,0,2,0,0,0,0,0,2,0,1,0,0,1, /* 8 */ 1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1, /* 9 */ 1,1,1,1,1,1,0,2,2,2,0,1,1,1,1,1,1, /* 10 */ 1,1,1,1,1,0,2,0,0,2,2,0,1,1,1,1,1, /* 11 */ 1,1,1,1,1,0,2,0,2,2,2,0,1,1,1,1,1, /* 12 */ 1,1,1,1,1,0,2,0,2,2,2,0,1,1,1,1,1, /* 13 */ 1,1,1,1,1,1,0,2,2,2,0,1,1,1,1,1,1, /* 14 */ 1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1 /* 15 */ }; /* рисунок "рука" (22,12) */ static const UCHAR pHandBonus[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,2,2,0,1,1, /* 2 */ 1,1,1,1,1,1,1,1,0,0,2,2,0,1,1,0,0,2,2,2,0,1, /* 3 */ 1,1,1,1,1,1,0,0,2,2,2,2,0,0,0,2,2,0,2,2,2,0, /* 4 */ 1,1,1,1,1,0,2,2,2,2,2,0,0,2,2,0,2,2,0,2,2,0, /* 5 */ 1,0,0,1,0,2,2,2,2,0,0,0,0,0,2,2,0,2,0,2,2,0, /* 6 */ 0,2,2,0,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2,2,2,0, /* 7 */ 0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 8 */ 0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1, /* 9 */ 0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1, /* 10 */ 0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,0,0,0,1,1,1,1, /* 11 */ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 /* 12 */ }; /* рисунок "стреляющая ракетка" (20,9) */ static const UCHAR pGunBonus[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 1 */ 1,0,2,2,2,2,2,0,2,0,2,2,0,2,2,2,2,2,0,1, /* 2 */ 0,2,0,0,0,0,0,2,0,0,2,2,2,0,0,0,0,0,2,0, /* 3 */ 0,2,0,0,0,0,2,0,0,2,2,2,2,2,0,0,0,0,2,0, /* 4 */ 1,0,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,0,1, /* 5 */ 1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1, /* 6 */ 1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1, /* 7 */ 1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1, /* 8 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 /* 9 */ }; /* рисунок "большая ракетка" (22,11) */ static const UCHAR pExtendedRacketBonus[] = { 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 1 */ 1,0,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,1, /* 2 */ 0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0, /* 3 */ 0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0, /* 4 */ 1,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,1, /* 5 */ 1,0,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,2,2,0,1, /* 6 */ 0,2,2,2,2,2,2,2,0,2,2,2,2,0,2,2,2,2,2,2,2,0, /* 7 */ 1,0,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,2,2,0,1, /* 8 */ 1,1,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,1,1, /* 9 */ 1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1, /* 10 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 /* 11 */ }; /* рисунок "реактивный ранец" (21,12) */ static const UCHAR pRocketPackBonus[] = { 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1, /* 1 */ 1,1,1,0,0,2,0,1,0,0,0,0,0,1,0,0,2,0,1,1,1, /* 2 */ 1,1,0,2,0,2,2,0,2,2,2,2,2,0,2,0,2,2,0,1,1, /* 3 */ 1,0,2,0,0,2,2,2,0,2,2,2,0,2,0,0,2,2,2,0,1, /* 4 */ 1,0,2,0,0,2,2,2,0,0,0,0,0,2,0,0,2,2,2,0,1, /* 5 */ 0,2,0,0,0,2,2,2,2,0,1,0,2,0,0,0,2,2,2,2,0, /* 6 */ 0,2,0,0,2,2,2,2,2,0,0,0,2,0,0,2,2,2,2,2,0, /* 7 */ 0,2,0,0,2,2,2,2,2,0,2,0,2,0,0,2,2,2,2,2,0, /* 8 */ 1,0,2,2,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,0,1, /* 9 */ 0,2,0,0,2,2,2,2,2,0,0,0,2,0,0,2,2,2,2,2,0, /* 10 */ 0,2,0,0,2,2,2,2,2,0,1,0,2,0,0,2,2,2,2,2,0, /* 11 */ 1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1 /* 12 */ }; /* рисунок "400 очков" (22,10) */ static const UCHAR pPoints400Bonus[] = { 1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1, /* 1 */ 0,2,2,0,1,1,1,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0, /* 2 */ 0,2,2,0,0,0,1,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0, /* 3 */ 0,2,2,0,2,2,0,0,2,2,0,0,2,2,0,2,2,0,0,2,2,0, /* 4 */ 0,2,2,0,2,2,0,0,2,2,0,0,2,2,0,2,2,0,0,2,2,0, /* 5 */ 0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0, /* 6 */ 0,2,2,2,2,2,2,0,2,2,2,2,2,2,0,2,2,2,2,2,2,0, /* 7 */ 1,0,0,0,2,2,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1, /* 8 */ 1,1,1,0,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9 */ 1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 10 */ }; /* рисунок реактивного пламяни 1 (20,16) */ static const UCHAR pRocketFlame1[] = { 1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1, /* 1 */ 1,1,0,2,2,2,0,1,1,1,1,1,1,1,0,2,2,0,1,1, /* 2 */ 1,0,0,2,2,2,2,0,1,1,1,1,1,1,0,2,0,2,0,1, /* 3 */ 1,0,2,2,0,2,2,0,1,1,1,1,1,0,2,0,2,0,0,1, /* 4 */ 1,0,2,0,2,0,2,2,0,1,1,1,1,0,0,0,0,0,2,0, /* 5 */ 0,2,0,2,0,0,2,2,0,1,1,1,1,0,2,0,2,0,0,1, /* 6 */ 1,0,0,0,2,0,0,2,0,1,1,1,1,1,0,0,0,2,0,1, /* 7 */ 1,0,2,0,0,0,2,0,0,1,1,1,1,1,0,2,0,0,1,1, /* 8 */ 1,0,0,2,0,2,0,0,0,1,1,1,1,1,1,0,2,0,1,1, /* 9 */ 1,0,2,0,2,0,0,2,0,1,1,1,1,1,1,0,0,0,1,1, /* 10 */ 1,1,0,0,0,0,2,0,0,1,1,1,1,1,1,0,2,0,1,1, /* 11 */ 1,1,0,2,0,2,0,2,0,1,1,1,1,1,1,1,0,1,1,1, /* 12 */ 1,1,1,0,0,0,2,0,1,1,1,1,1,1,1,1,1,1,1,1, /* 13 */ 1,1,1,0,0,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1, /* 14 */ 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 15 */ 1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 16 */ }; /* рисунок реактивного пламяни 2 (20,16) */ static const UCHAR pRocketFlame2[] = { 1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, /* 1 */ 1,1,0,2,2,0,1,1,1,1,1,1,1,0,2,2,2,0,1,1, /* 2 */ 1,0,2,0,2,0,1,1,1,1,1,1,0,2,0,2,0,2,0,1, /* 3 */ 1,0,0,2,0,2,0,1,1,1,1,1,0,0,2,0,2,2,2,0, /* 4 */ 0,2,0,0,0,0,0,1,1,1,1,0,2,2,0,2,0,2,0,0, /* 5 */ 0,0,0,2,0,2,0,1,1,1,1,0,0,2,0,2,0,0,0,0, /* 6 */ 1,0,2,0,0,0,1,1,1,1,1,0,2,0,0,0,2,0,2,0, /* 7 */ 1,0,0,0,2,0,1,1,1,1,1,0,0,0,2,0,0,0,0,1, /* 8 */ 1,1,0,2,0,1,1,1,1,1,1,0,2,0,0,0,2,0,0,1, /* 9 */ 1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,2,0,2,0,1, /* 10 */ 1,1,0,2,0,1,1,1,1,1,1,1,0,0,2,0,0,0,1,1, /* 11 */ 1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,2,0,1,1, /* 12 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,0,0,0,1,1, /* 13 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1, /* 14 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1, /* 15 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1 /* 16 */ }; /* рисунок бомбы и ее тени (12,11) */ static const UCHAR pBomb[] = { 1,0,0,0,0,0,1,0,0,0,0,0, /* 1 */ 0,2,0,2,2,2,0,1,0,0,0,1, /* 2 */ 1,0,2,2,2,0,1,1,1,1,1,1, /* 3 */ 1,1,0,0,0,1,1,1,0,0,0,1, /* 4 */ 1,0,2,2,2,0,1,0,0,0,0,0, /* 5 */ 0,2,0,2,2,2,0,0,0,0,0,0, /* 6 */ 0,2,0,2,2,2,0,0,0,0,0,0, /* 7 */ 0,2,0,2,2,2,0,0,0,0,0,0, /* 8 */ 0,2,0,2,2,2,0,1,0,0,0,1, /* 9 */ 1,0,2,2,2,0,1,1,1,1,1,1, /* 10 */ 1,1,0,0,0,1,1,1,1,1,1,1 /* 11 */ }; /* рисунок пуль (8,8) */ static const UCHAR pBullet[] = { 1,0,0,1,1,0,0,1, /* 1 */ 0,2,0,0,0,2,0,0, /* 2 */ 0,2,0,0,0,2,0,0, /* 3 */ 0,2,0,0,0,2,0,0, /* 4 */ 1,0,0,1,1,0,0,1, /* 5 */ 0,1,0,1,1,0,1,0, /* 6 */ 0,1,0,1,1,0,1,0, /* 7 */ 0,1,0,1,1,0,1,0 /* 8 */ }; /* рисунки хлопков пулек (32,8) */ static const UCHAR pPlop[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0, /* 2 */ 1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,0, /* 3 */ 1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1, /* 4 */ 1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 5 */ 1,1,1,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,1,1,0, /* 6 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,1,0,0, /* 7 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1 /* 8 */ }; /* рисунок осколков ракетки и их тени (35,12) */ static const UCHAR pSlivers[] = { 1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,0,2,0,1,1,1,1,0,2,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1, /* 2 */ 1,0,0,2,0,0,1,1,1,0,2,0,1,1,1,1,0,2,0,1,1,1,1,0,2,0,1,1,1,1,1,0,1,1,1, /* 3 */ 0,2,2,2,2,2,0,1,0,2,2,2,0,1,1,0,2,2,2,0,1,1,1,0,2,0,1,1,1,1,0,2,0,1,1, /* 4 */ 1,0,0,2,0,0,1,1,1,0,2,0,1,1,1,1,0,2,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1, /* 5 */ 1,1,0,2,0,1,1,1,1,0,2,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6 */ 1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 7 */ 1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 8 */ 1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9 */ 0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1, /* 10 */ 1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 11 */ 1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 12 */ }; /* рисунок цифр (60,8) */ static const UCHAR pDigitMsg[] = { 1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1, /* 1 */ 0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0, /* 2 */ 0,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0, /* 3 */ 0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,0, /* 4 */ 0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0, /* 5 */ 0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0, /* 6 */ 0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,1, /* 7 */ 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1 /* 8 */ }; /* рисунок надписи 'player' (47,10) */ static const UCHAR pPlayer[] = { 1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 2 */ 0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,0, /* 3 */ 1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0, /* 4 */ 1,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1, /* 5 */ 1,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1, /* 6 */ 1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1, /* 7 */ 1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1, /* 8 */ 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9 */ 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 10 */ }; /* рисунок надписи 'round' (39,8) */ static const UCHAR pRound[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1, /* 1 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, /* 2 */ 0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,1, /* 3 */ 1,0,0,0,1,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,1, /* 4 */ 1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1, /* 5 */ 1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1, /* 6 */ 1,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,1, /* 7 */ 0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0 /* 8 */ }; /* рисунок надписи 'pause' (39,8) */ static const UCHAR pPause[] = { 0,0,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1, /* 1 */ 1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0, /* 2 */ 1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0, /* 3 */ 1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1, /* 4 */ 1,0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0, /* 5 */ 1,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1, /* 6 */ 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 7 */ 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* 8 */ }; /* набор рисунков для формирования барьера (левая сторона) (8,8) */ static const UCHAR pBarLeft0[] = { 0,0,13,13,13,13,0,0, /* 1 */ 0,13,13,0,13,13,13,0, /* 2 */ 13,13,0,0,13,13,13,13, /* 3 */ 13,0,0,13,13,13,13,13, /* 4 */ 13,0,0,13,13,13,13,13, /* 5 */ 13,0,0,13,13,13,13,13, /* 6 */ 13,0,0,13,13,13,13,13, /* 7 */ 0,13,13,0,0,0,0,0 /* 8 */ }; static const UCHAR pBarLeft1[] = { 17,0,0,17,17,17,17,17, /* 1 */ 17,0,0,17,17,17,17,17, /* 2 */ 17,0,0,17,17,17,17,17, /* 3 */ 17,0,0,17,17,17,17,17, /* 4 */ 17,0,0,17,17,17,17,17, /* 5 */ 17,0,0,17,17,17,17,17, /* 6 */ 17,0,0,17,17,17,17,17, /* 7 */ 17,0,0,17,17,17,17,17 /* 8 */ }; static const UCHAR pBarLeft2[] = { 0,13,13,0,0,0,0,0, /* 1 */ 13,0,0,13,13,13,13,13, /* 2 */ 13,0,0,13,13,13,13,13, /* 3 */ 13,0,0,13,13,13,13,13, /* 4 */ 13,0,0,13,13,13,13,13, /* 5 */ 13,13,0,0,13,13,13,13, /* 6 */ 0,13,13,0,13,13,13,0, /* 7 */ 0,0,13,13,13,13,0,0 /* 8 */ }; static const UCHAR pBarLeft3[] = { 0,17,17,17,17,17,17,17, /* 1 */ 17,0,17,0,0,0,0,0, /* 2 */ 17,17,0,17,0,0,0,0, /* 3 */ 17,0,17,0,17,17,17,17, /* 4 */ 17,0,0,17,0,17,17,17, /* 5 */ 17,0,0,17,17,0,17,17, /* 6 */ 17,0,0,17,17,17,0,17, /* 7 */ 17,0,0,17,17,17,17,0 /* 8 */ }; /* (8,24) */ static const UCHAR pBarLeft4[] = { 0,0,0,0,0,0,0,0, /* 1 */ 0,0,18,18,18,18,0,0, /* 2 */ 0,0,18,18,18,18,0,0, /* 3 */ 0,0,18,18,18,18,0,0, /* 4 */ 0,0,18,18,18,18,0,0, /* 5 */ 0,0,18,18,18,18,0,0, /* 6 */ 0,0,18,18,18,18,0,0, /* 7 */ 0,0,18,18,18,18,0,0, /* 8 */ 0,0,0,0,0,0,0,0, /* 9 */ 0,14,0,14,14,14,14,0, /* 10 */ 0,14,0,14,14,14,14,0, /* 11 */ 0,14,0,14,14,14,14,0, /* 12 */ 0,14,0,14,14,14,14,0, /* 13 */ 0,14,0,14,14,14,14,0, /* 14 */ 0,14,0,14,14,14,14,0, /* 15 */ 0,0,0,0,0,0,0,0, /* 16 */ 0,0,18,18,18,18,0,0, /* 17 */ 0,0,18,18,18,18,0,0, /* 18 */ 0,0,18,18,18,18,0,0, /* 19 */ 0,0,18,18,18,18,0,0, /* 20 */ 0,0,18,18,18,18,0,0, /* 21 */ 0,0,18,18,18,18,0,0, /* 22 */ 0,0,18,18,18,18,0,0, /* 23 */ 0,0,0,0,0,0,0,0 /* 24 */ }; /* набор рисунков для формирования барьера (правая сторона) (8,8) */ static const UCHAR pBarRight0[] = { 0,0,13,13,13,13,0,0, /* 1 */ 0,13,13,13,0,13,13,0, /* 2 */ 13,13,13,13,0,0,13,13, /* 3 */ 13,13,13,13,13,0,0,13, /* 4 */ 13,13,13,13,13,0,0,13, /* 5 */ 13,13,13,13,13,0,0,13, /* 6 */ 13,13,13,13,13,0,0,13, /* 7 */ 0,0,0,0,0,13,13,0 /* 8 */ }; static const UCHAR pBarRight1[] = { 17,17,17,17,17,0,0,17, /* 1 */ 17,17,17,17,17,0,0,17, /* 2 */ 17,17,17,17,17,0,0,17, /* 3 */ 17,17,17,17,17,0,0,17, /* 4 */ 17,17,17,17,17,0,0,17, /* 5 */ 17,17,17,17,17,0,0,17, /* 6 */ 17,17,17,17,17,0,0,17, /* 7 */ 17,17,17,17,17,0,0,17, /* 8 */ }; static const UCHAR pBarRight2[] = { 0,0,0,0,0,13,13,0, /* 1 */ 13,13,13,13,13,0,0,13, /* 2 */ 13,13,13,13,13,0,0,13, /* 3 */ 13,13,13,13,13,0,0,13, /* 4 */ 13,13,13,13,13,0,0,13, /* 5 */ 13,13,13,13,0,0,13,13, /* 6 */ 0,13,13,13,0,13,13,0, /* 7 */ 0,0,13,13,13,13,0,0 /* 8 */ }; static const UCHAR pBarRight3[] = { 17,17,17,17,17,17,17,0, /* 1 */ 0,0,0,0,0,17,0,17, /* 2 */ 0,0,0,0,17,0,17,17, /* 3 */ 17,17,17,17,0,17,0,17, /* 4 */ 17,17,17,0,17,0,0,17, /* 5 */ 17,17,0,17,17,0,0,17, /* 6 */ 17,0,17,17,17,0,0,17, /* 7 */ 0,17,17,17,17,0,0,17 /* 8 */ }; /* (8,24) */ static const UCHAR pBarRight4[] = { 0,0,0,0,0,0,0,0, /* 1 */ 0,0,18,18,18,18,0,0, /* 2 */ 0,0,18,18,18,18,0,0, /* 3 */ 0,0,18,18,18,18,0,0, /* 4 */ 0,0,18,18,18,18,0,0, /* 5 */ 0,0,18,18,18,18,0,0, /* 6 */ 0,0,18,18,18,18,0,0, /* 7 */ 0,0,18,18,18,18,0,0, /* 8 */ 0,0,0,0,0,0,0,0, /* 9 */ 0,14,14,14,14,0,14,0, /* 10 */ 0,14,14,14,14,0,14,0, /* 11 */ 0,14,14,14,14,0,14,0, /* 12 */ 0,14,14,14,14,0,14,0, /* 13 */ 0,14,14,14,14,0,14,0, /* 14 */ 0,14,14,14,14,0,14,0, /* 15 */ 0,0,0,0,0,0,0,0, /* 16 */ 0,0,18,18,18,18,0,0, /* 17 */ 0,0,18,18,18,18,0,0, /* 18 */ 0,0,18,18,18,18,0,0, /* 19 */ 0,0,18,18,18,18,0,0, /* 20 */ 0,0,18,18,18,18,0,0, /* 21 */ 0,0,18,18,18,18,0,0, /* 22 */ 0,0,18,18,18,18,0,0, /* 23 */ 0,0,0,0,0,0,0,0 /* 24 */ }; /* набор рисунков для формирования барьера (верхняя сторона) (8,8) */ static const UCHAR pBarTop0[] = { 0,0,13,13,0,13,13,0, /* 1 */ 0,13,13,0,13,0,0,13, /* 2 */ 13,13,0,0,13,0,0,13, /* 3 */ 13,0,0,13,0,13,13,0, /* 4 */ 13,13,13,13,0,13,13,0, /* 5 */ 13,13,13,13,0,13,13,0, /* 6 */ 0,13,13,13,0,13,13,0, /* 7 */ 0,0,13,13,0,13,13,0 /* 8 */ }; static const UCHAR pBarTop1[] = { 17,17,17,17,17,17,17,17, /* 1 */ 0,0,0,0,0,0,0,0, /* 2 */ 0,0,0,0,0,0,0,0, /* 3 */ 17,17,17,17,17,17,17,17, /* 4 */ 17,17,17,17,17,17,17,17, /* 5 */ 17,17,17,17,17,17,17,17, /* 6 */ 17,17,17,17,17,17,17,17, /* 7 */ 17,17,17,17,17,17,17,17 /* 8 */ }; static const UCHAR pBarTop2[] = { 0,13,13,0,13,13,0,0, /* 1 */ 13,0,0,13,0,13,13,0, /* 2 */ 13,0,0,13,0,0,13,13, /* 3 */ 0,13,13,0,13,0,0,13, /* 4 */ 0,13,13,0,13,13,13,13, /* 5 */ 0,13,13,0,13,13,13,13, /* 6 */ 0,13,13,0,13,13,13,0, /* 7 */ 0,13,13,0,13,13,0,0 /* 8 */ }; static const UCHAR pBarTop3[] = { 0,0,13,13,13,13,13,0, /* 1 */ 0,13,13,0,0,0,0,13, /* 2 */ 13,13,0,0,0,0,0,13, /* 3 */ 13,0,0,13,13,13,13,0, /* 4 */ 13,13,13,13,13,13,13,0, /* 5 */ 13,13,13,13,13,13,13,0, /* 6 */ 0,13,13,13,13,13,13,0, /* 7 */ 0,0,13,13,13,13,13,0 /* 8 */ }; static const UCHAR pBarTop4[] = { 0,13,13,13,13,13,0,0, /* 1 */ 13,0,0,0,0,13,13,0, /* 2 */ 13,0,0,0,0,0,13,13, /* 3 */ 0,13,13,13,13,0,0,13, /* 4 */ 0,13,13,13,13,13,13,13, /* 5 */ 0,13,13,13,13,13,13,13, /* 6 */ 0,13,13,13,13,13,13,0, /* 7 */ 0,13,13,13,13,13,0,0 /* 8 */ }; /* (24,8) */ static const UCHAR pBarTop5[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1 */ 0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0, /* 2 */ 0,18,18,18,18,18,18,18,0,0,0,0,0,0,0,0,18,18,18,18,18,18,18,0, /* 3 */ 0,18,18,18,18,18,18,18,0,14,14,14,14,14,14,0,18,18,18,18,18,18,18,0, /* 4 */ 0,18,18,18,18,18,18,18,0,14,14,14,14,14,14,0,18,18,18,18,18,18,18,0, /* 5 */ 0,18,18,18,18,18,18,18,0,14,14,14,14,14,14,0,18,18,18,18,18,18,18,0, /* 6 */ 0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0, /* 7 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 8 */ }; /* описывает положение фигуры и ее размер */ typedef struct { int x, y; /* положение фигуры */ int width, height; /* ширина и высота фигуры */ } FIGURE, *LPFIGURE; /* содержит параметры цвета из которых состоит блок */ typedef struct { int color1; int color2; } BLOCK, *LPBLOCK; /* структура описывающая сцену */ GAMESCENE scene; /* строка форматирования отладочного сообщения */ static const TCHAR sFormatDebug[] = _T("fps %02d; frame %02d; draw %02d;"); /* координаты для отображения дебажного сообщения */ static DWORD dwDebugX,dwDebugY; /* * Содержит рисунки кирпичей. Расчитывается как размер кирпича (16x8), * умноженное на количество кирпичей, (6 строк по 7 столбцов). */ static UCHAR pBlocks[16*8*6*7]; /* переменные для расчета скорости заполнения сцены */ static int lSpeedBuff[5]; static int pSpeed; static int lSpeedDraw; /* преобразует логическую координату в координату на поверхности */ #define GetX(x) (((x) * SCALE) + GAME_X) #define GetY(y) (((y) * SCALE) + GAME_Y) /* рисует горизонтальную линию */ static void HLine(UCHAR *video, unsigned int lpitch, unsigned int x1, unsigned int x2, unsigned int y, int color) { unsigned int length; /* сделаем чтобы x2 > x1 */ if (x1 > x2) { unsigned int temp = x1; x1 = x2; x2 = temp; } /* расчитаем длину линии */ length = x2 - x1 + (1 * 2); /* нарисуем линию */ video += lpitch * y + x1; memset(video,color,length); video += lpitch; memset(video,color,length); } /* рисует вертикальную линию */ static void VLine(UCHAR *video, unsigned int lpitch, unsigned int y1, unsigned int y2, unsigned int x, int color) { unsigned int i,length; UCHAR *video1,*video2; /* сделаем чтобы y2 > y1 */ if (y1 > y2) { unsigned int temp = y1; y1 = y2; y2 = temp; } /* расчитаем значения поверхности */ video1 = video + (lpitch * y1 + x); video2 = video1 + 1; length = y2 - y1 + 1; /* нарисуем линию */ for (i = 0; i <= length; i++) { /* отобразим точки */ *video1 = color; *video2 = color; /* увеличим координаты */ video1 += lpitch; video2 += lpitch; } } /* рисует поверхность */ static void PlotPattern(UCHAR *video, int pitchVideo, const UCHAR *pattern, int pitchPattern, int width, int height, int x, int y) { int i,j; /* расчитаем точку от которой начинается прорисовка поверхности */ video += y * pitchVideo + x; /* отобразим поверхность */ for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { UCHAR pixel,*p; /* получим отображаемый пиксель */ pixel = pattern[j]; /* получим точку на поверхносте */ p = video + (j * SCALE); if (!pixel) { *(p) = CL_BLACK; *(p + 1) = CL_BLACK; *(p + pitchVideo) = CL_BLACK; *(p + pitchVideo + 1) = CL_BLACK; } else { *(p) = pixel; *(p + 1) = pixel; *(p + pitchVideo) = pixel; *(p + pitchVideo + 1) = pixel; } } /* периместимся на следующие строчки поверхностей */ video += pitchVideo * 2; pattern += pitchPattern; } } /* рисует поверхности с учетом прозрачности */ static void PlotSurface(UCHAR *video, int pitchVideo, const UCHAR *pattern, int pitchPattern, int width, int height, int x, int y) { UCHAR background = scene.background + CL_YELLOW_BACK; int i,j; /* расчитаем точку от которой начинается прорисовка поверхности */ video += y * pitchVideo + x; /* отобразим поверхность */ for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { UCHAR pixel,*p; int py,px; /* проверим, что точка не пересекла крайнии линии игрового окна */ py = y + (i * SCALE); if ((py >= GAME_Y + GAME_HEIGHT) || (py < GAME_Y)) continue; px = x + (j * SCALE); if ((px < GAME_X) || (px >= GAME_X + GAME_WIDTH)) continue; /* прозрачный пиксель */ if ((pixel = pattern[j]) == CL_TRANSP) continue; /* получим точку на поле */ p = video + (j * SCALE); /* отобразим точку */ if (pixel == 0) { /* видимая точка поверхности */ *(p) = CL_BLACK; *(p + 1) = CL_BLACK; *(p + pitchVideo) = CL_BLACK; *(p + pitchVideo + 1) = CL_BLACK; } else { /* цвет поверхности */ *(p) = background; *(p + 1) = background; *(p + pitchVideo) = background; *(p + pitchVideo + 1) = background; } } /* периместим поверхности на следующие строчки */ video += pitchVideo * 2; pattern += pitchPattern; } } /* если точка пренадлежит блоку то возвращаются его цвета */ static int GetBlock(LPBLOCK lpBlock, int px, int py) { int x,y; int block; /* сформируем указатель и проверим его */ x = px - (GAME_X + (8 * SCALE)); y = py - (GAME_Y + (8 * SCALE)) - ((3 * 8) * SCALE); if ((y < 0) || (x < 0)) return 0; x /= (16 * SCALE); y /= (8 * SCALE); if ((y >= 12) || (x >= 15)) return 0; /* проверим, что блок сушествует */ block = scene.block[y][x]; if (!block) return 0; /* заполняем информацию о блоке */ switch ((block & 0x0f) - 1) { case 0: /* кирпич желтый, полоска черная */ lpBlock->color1 = CL_BLACK; lpBlock->color2 = CL_YELLOW; break; case 1: /* кирпич розовый, полоска белая */ lpBlock->color1 = CL_WHITE; lpBlock->color2 = CL_ROSY; break; case 2: /* кирпич красный, полоска белая */ lpBlock->color1 = CL_WHITE; lpBlock->color2 = CL_RED; break; case 3: /* кирпич зеленый, полоска черная */ lpBlock->color1 = CL_BLACK; lpBlock->color2 = CL_GREEN; break; case 4: /* кирпич синий, полоска белая */ lpBlock->color1 = CL_WHITE; lpBlock->color2 = CL_BLUE; break; case 5: /* кирпич черный, полоска белая */ lpBlock->color1 = CL_WHITE; lpBlock->color2 = CL_BLACK; break; default: return 0; } return 1; } /* * Рисует фигуру с учетом прозрачности и цветов блоков. * Эта функция отличается от функции 'PlotSurface' тем, * что 'PlotFigure' учитывает блоки на поле, т.е. если * фигура накладывается на блок то ее цвет коректируется * в зависимости от цвета блока. */ static void PlotFigure(UCHAR *video, int pitchVideo, const UCHAR *pattern, int pitchPattern, int width, int height, int x, int y) { UCHAR background = scene.background + CL_YELLOW_BACK; int i,j; /* расчитаем точку от которой начинается прорисовка фигуры */ video += y * pitchVideo + x; /* отобразим фигуру */ for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { BLOCK block; UCHAR pixel,*p; int py,px; /* проверим, что точка не пересекла крайнии линии игрового окна */ py = y + (i * SCALE); if ((py >= GAME_Y + GAME_HEIGHT) || (py < GAME_Y)) continue; px = x + (j * SCALE); if ((px < GAME_X) || (px >= GAME_X + GAME_WIDTH)) continue; /* прозрачная точка */ if ((pixel = pattern[j]) == CL_TRANSP) continue; /* получим точку на поле */ p = video + (j * SCALE); /* прорисуем точку */ if (GetBlock(&block,px,py)) { /* точка пренадлежит блоку */ if (pixel == 0) { *(p) = block.color2; *(p + 1) = block.color2; *(p + pitchVideo) = block.color2; *(p + pitchVideo + 1) = block.color2; } else { *(p) = block.color1; *(p + 1) = block.color1; *(p + pitchVideo) = block.color1; *(p + pitchVideo + 1) = block.color1; } } else { /* точка не пренадлежит блоку */ if (pixel == 0) { *(p) = CL_BLACK; *(p + 1) = CL_BLACK; *(p + pitchVideo) = CL_BLACK; *(p + pitchVideo + 1) = CL_BLACK; } else { *(p) = background; *(p + 1) = background; *(p + pitchVideo) = background; *(p + pitchVideo + 1) = background; } } } /* периведем поверхности на следующие строчки */ pattern += pitchPattern; video += pitchVideo * SCALE; } } /* отобразить рисунок игрового поля */ static void ShapeBackground(UCHAR *video, int lPitch) { const UCHAR *pattern; int x,y; /* определим рисунок */ switch (scene.background) { case BACKGROUND_0: pattern = pBackGround0; break; case BACKGROUND_1: pattern = pBackGround1; break; case BACKGROUND_2: pattern = pBackGround2; break; case BACKGROUND_3: pattern = pBackGround3; break; default: return; } /* заполним поле рисунком */ for (y = GAME_Y; y < GAME_Y + GAME_HEIGHT; y += 16 * SCALE) { for (x = GAME_X; x < GAME_X + GAME_WIDTH; x += 16 * SCALE) PlotSurface(video,lPitch,pattern,16,16,16,x,y); } } /* отображает призовые очки */ static void PrintDigit(UCHAR *video, int lPitch, int score, int x, int y) { const UCHAR *pattern; TCHAR buff[32]; int i,digit; /* преобразуем значение в строку */ _stprintf(buff,_T("%06d"),score); /* отобразим строку */ for (i = 0; i < 6; i++, x += 8) { digit = buff[i] - _T('0'); if (digit < 5) { pattern = pDigitScore04; } else { pattern = pDigitScore59; digit -= 5; } pattern += digit * 7; PlotSurface(video,lPitch,pattern,35,7,8,GetX(x),GetY(y)); } } /* отображает призовые очки игроков и количество жизней */ static void ShapeScore(UCHAR *video, int lPitch) { /* отображаем надпись '1up' и ее очки */ PlotSurface(video,lPitch,pDigitScore04+7,35,7,8,GetX(28),GetY(12)); PlotSurface(video,lPitch,pUpScore,16,16,8,GetX(36),GetY(12)); PrintDigit(video,lPitch,scene.score.up1,16,21); /* отображаем надпись 'hi' и ее очки */ PlotSurface(video,lPitch,pHiScore,13,13,8,GetX(121),GetY(12)); PrintDigit(video,lPitch,scene.score.hi,104,21); /* отображаем надпись '2up' и ее очки */ PlotSurface(video,lPitch,pDigitScore04+14,35,7,8,GetX(204),GetY(12)); PlotSurface(video,lPitch,pUpScore,16,16,8,GetX(212),GetY(12)); PrintDigit(video,lPitch,scene.score.up2,192,21); } /* отоброжает количество жизней */ static void ShapeLives(UCHAR *video, int lPitch) { int i,x; /* отобразим рисунки жизней */ for (x = 10, i = 0; (i < scene.lifes) && (i < 15); x += 16, i++) PlotSurface(video,lPitch,pSmallRacket,14,14,6,GetX(x),GetY(185)); } /* отобразить круги откланения */ static void ShapeSwerves(UCHAR *video, int lPitch) { int i; /* переберем все круги откланения */ for (i = 0; i < SWERVES_COUNT; i++) { LPPICTURE lpSwerve = &scene.pSwerves[i]; /* отобразим круг откланения */ if (lpSwerve->show) { const UCHAR *pattern; /* определим тип круга откланения */ if (lpSwerve->type == PICTURE_SWERVE_OFF) pattern = pSwerveOff; else pattern = pSwerveOn; /* прорисуем круг откланения */ PlotSurface(video,lPitch,pattern,30,30,30, GetX(lpSwerve->X),GetY(lpSwerve->Y)); } } } /* отобразить тень от мячика */ static void ShapeShadowBall(UCHAR *video, int lPitch) { const UCHAR *pattern; int i; /* получим указатель на рисунок */ pattern = pBall + 7; /* переберем все мячики */ for (i = 0; i < BALLS_COUNT; i++) { LPPICTURE lpShadowBall = &scene.pBall[i].shadow; /* отобразим тень от мячика */ if (lpShadowBall->show) { const UCHAR *pattern; int pitch,width,height; switch (lpShadowBall->type) { case BALL_NORMAL: pattern = pBall + 7; pitch = 12; width = 5; height = 5; break; case BALL_SMASH: pattern = pBallSmash + 9; pitch = 16; width = 7; height = 7; break; default: continue; } PlotSurface(video,lPitch,pattern,pitch,width,height, GetX(lpShadowBall->X),GetY(lpShadowBall->Y)); } } } /* отобразим мячик */ static void ShapeBall(UCHAR *video, int lPitch) { int i; /* переберем все мячики */ for (i = 0; i < BALLS_COUNT; i++) { LPPICTURE lpBall = &scene.pBall[i].picture; /* отобразим мячик */ if (lpBall->show) { const UCHAR *pattern; int pitch,width,height; switch (lpBall->type) { case BALL_NORMAL: pattern = pBall; pitch = 12; width = 7; height = 7; break; case BALL_SMASH: pattern = pBallSmash; pitch = 16; width = 9; height = 9; break; default: continue; } PlotSurface(video,lPitch,pattern,pitch,width,height, GetX(lpBall->X),GetY(lpBall->Y)); } } } /* отобразить блок */ static void ShapeBlock(UCHAR *video, int lPitch) { int x,y; /* просмотрим все поле и проресуем кирпичи */ for (y = 0; y < 12; y++) { for (x = 0; x < 15; x++) { int block = scene.block[y][x]; /* если поле не пустое то рисуем его */ if (block) { int px,py,offset; /* расчитаем отображаемый блок */ offset = (((block & 0x0f) - 1) * (16 * 8 * 7)) + (((block & 0xf0) >> 4) * 16); /* расчитаем положение */ px = x * (16 * SCALE) + GAME_X + (8 * SCALE); py = y * (8 * SCALE) + GAME_Y + (32 * SCALE); /* отображаем блок */ PlotPattern(video,lPitch,pBlocks+offset,16*7,16,8,px,py); } } } } /* * Возвращает параметры ракетки: указатель на * рисунок и ширина рисунка. */ static const UCHAR *GetRacketType(int type, int *width) { const UCHAR *pattern; /* определим тип ракетки */ switch (type) { case TYPE_RACKET_NORMAL: pattern = pRacketNormal; *width = 32; break; case TYPE_RACKET_GUN: pattern = pRacketGun; *width = 32; break; case TYPE_RACKET_EXTEND: pattern = pRacketExtend; *width = 48; break; case TYPE_RACKET_N_G_1: pattern = pRacketNtoG1; *width = 30; break; case TYPE_RACKET_N_G_2: pattern = pRacketNtoG2; *width = 30; break; case TYPE_RACKET_N_G_3: pattern = pRacketNtoG3; *width = 32; break; case TYPE_RACKET_N_G_4: pattern = pRacketNtoG4; *width = 32; break; case TYPE_RACKET_N_E_1: pattern = pRacketNtoE1; *width = 34; break; case TYPE_RACKET_N_E_2: pattern = pRacketNtoE2; *width = 36; break; case TYPE_RACKET_N_E_3: pattern = pRacketNtoE3; *width = 38; break; case TYPE_RACKET_N_E_4: pattern = pRacketNtoE4; *width = 40; break; case TYPE_RACKET_N_E_5: pattern = pRacketNtoE5; *width = 42; break; case TYPE_RACKET_N_E_6: pattern = pRacketNtoE6; *width = 44; break; case TYPE_RACKET_N_E_7: pattern = pRacketNtoE7; *width = 46; break; default: return NULL; } return pattern; } /* отобразить ракетку */ static void ShapeRacket(UCHAR *video, int lPitch) { static int p = 0, add = 1; const UCHAR *pRacket; UCHAR *p1,*p2; int x,y,width,limitPoint; /* проверим, следует отображать ракетку или нет */ if (!scene.pRacket.show) return; /* определим лимиты для точек */ switch (scene.pRacket.type) { case TYPE_RACKET_NORMAL: limitPoint = 3; break; case TYPE_RACKET_GUN: limitPoint = 3; break; case TYPE_RACKET_EXTEND: limitPoint = 11; break; case TYPE_RACKET_N_G_1: limitPoint = 3; break; case TYPE_RACKET_N_G_2: limitPoint = 3; break; case TYPE_RACKET_N_G_3: limitPoint = 3; break; case TYPE_RACKET_N_G_4: limitPoint = 3; break; case TYPE_RACKET_N_E_1: limitPoint = 4; break; case TYPE_RACKET_N_E_2: limitPoint = 5; break; case TYPE_RACKET_N_E_3: limitPoint = 6; break; case TYPE_RACKET_N_E_4: limitPoint = 7; break; case TYPE_RACKET_N_E_5: limitPoint = 8; break; case TYPE_RACKET_N_E_6: limitPoint = 9; break; case TYPE_RACKET_N_E_7: limitPoint = 10; break; default: return; } /* определим отображаемую ракетку */ pRacket = GetRacketType(scene.pRacket.type,&width); /* расчитаем позицию ракетки */ x = GetX(scene.pRacket.X); y = GetY(scene.pRacket.Y); /* отобразим рисунок ракетки */ PlotSurface(video,lPitch,pRacket,width,width,13,x,y); /* расчитаем логические позиции точек */ p += add; /* проверим выход за границы */ if (add > 0) { if (p > limitPoint) { p = limitPoint; add = -1; } } else { if (p < 0) { p = 0; add = 1; } } /* расчитаем позиции точек в ракетке */ y = (y + 6 * SCALE) * lPitch; p1 = video + y + x + ((width - 4) / 2 + p) * SCALE; p2 = video + y + x + ((width - 4) / 2 - 1 - p) * SCALE; /* отобразим первую точку */ *(p1) = CL_BLACK; *(p1 + 1) = CL_BLACK; *(p1 + lPitch) = CL_BLACK; *(p1 + lPitch + 1) = CL_BLACK; /* отобразим вторую точку */ *(p2) = CL_BLACK; *(p2 + 1) = CL_BLACK; *(p2 + lPitch) = CL_BLACK; *(p2 + lPitch + 1) = CL_BLACK; } /* обводит кирпичи черной линией */ static void ShapeLineOfBlock(UCHAR *video, int lPitch) { int x,y; /* * Обведем черной линией кирпичи. * Магические цифры в расчетах, это размеры блока. */ for (y = 0; y < 12; y++) { for (x = 0; x < 15; x++) { int a1,a2,b; /* если поле пустое то пропустим его */ if (scene.block[y][x]) { /* проверяем верхнюю линию */ if (y == 0) { /* это верхняя строка */ a1 = x * (16 * 2) + GAME_X + (8 * 2); a2 = a1 + ((16 - 1) * 2); b = y * (8 * 2) + GAME_Y + ((32 - 1) * 2); HLine(video,lPitch,a1,a2,b,CL_BLACK); } else if (!scene.block[y-1][x]) { /* сверху пустое место */ a1 = x * (16 * 2) + GAME_X + (8 * 2); a2 = a1 + ((16 - 1) * 2); b = y * (8 * 2) + GAME_Y + ((32 - 1) * 2); HLine(video,lPitch,a1,a2,b,CL_BLACK); } /* проверяем правую линию */ if (x == 15 - 1) { /* это правая строка */ a1 = y * (8 * 2) + GAME_Y + (32 * 2); a2 = a1 + ((8 - 1) * 2); b = x * (16 * 2) + GAME_X + ((8 + 16) * 2); VLine(video,lPitch,a1,a2,b,CL_BLACK); } else if (!scene.block[y][x+1]) { /* справо пустое место */ a1 = y * (8 * 2) + GAME_Y + (32 * 2); a2 = a1 + ((8 - 1) * 2); b = x * (16 * 2) + GAME_X + ((8 + 16) * 2); VLine(video,lPitch,a1,a2,b,CL_BLACK); } /* проверяем нижнюю линию */ if (y == 12 - 1) { /* это нижняя строка */ a1 = x * (16 * 2) + GAME_X + (8 * 2); a2 = a1 + ((16 - 1) * 2); b = y * (8 * 2) + GAME_Y + ((32 + 8) * 2); HLine(video,lPitch,a1,a2,b,CL_BLACK); } else if (!scene.block[y+1][x]) { /* снизу пустое место */ a1 = x * (16 * 2) + GAME_X + (8 * 2); a2 = a1 + ((16 - 1) * 2); b = y * (8 * 2) + GAME_Y + ((32 + 8) * 2); HLine(video,lPitch,a1,a2,b,CL_BLACK); } /* проверим левую сторону */ if (x == 0) { /* это левая строка */ a1 = y * (8 * 2) + GAME_Y + (32 * 2); a2 = a1 + ((8 - 1) * 2); b = x * (16 * 2) + GAME_X + ((8 - 1) * 2); VLine(video,lPitch,a1,a2,b,CL_BLACK); } else if (!scene.block[y][x-1]) { /* слева пустое место */ a1 = y * (8 * 2) + GAME_Y + (32 * 2); a2 = a1 + ((8 - 1) * 2); b = x * (16 * 2) + GAME_X + ((8 - 1) * 2); VLine(video,lPitch,a1,a2,b,CL_BLACK); } } } } } /* отобразить бомбу */ static void ShapeBomb(UCHAR *video, int lPitch) { /* проверим, отображается бомба или нет */ if (scene.pBomb.picture.show) { /* отображаем бомбу */ PlotFigure(video,lPitch,pBomb,12,7,11, GetX(scene.pBomb.picture.X),GetY(scene.pBomb.picture.Y)); } } /* отобразить тень от бомбы */ static void ShapeBombShadow(UCHAR *video, int lPitch) { /* если тень отображается то нарисуем ее */ if (scene.pBomb.shadow.show) { /* отображаем тень бомбы */ PlotFigure(video,lPitch,pBomb+7,12,5,9, GetX(scene.pBomb.shadow.X),GetY(scene.pBomb.shadow.Y)); } } /* * Возвращает парамеры бонуса: указатель на * рисунок а так же его высоту и ширину. */ static const UCHAR *GetBonusType(int type, int *width, int *height) { const UCHAR *pattern; /* определим отображаемый рисунок и его параметры */ switch (type) { case BONUS_POINTS: pattern = pPointsBonus; *width = 23; *height = 14; break; case BONUS_SMART_BOMB: pattern = pKillAliensBonus; *width = 24; *height = 15; break; case BONUS_EXTRA_LIFE: pattern = pExtraLifeBonus; *width = 19; *height = 13; break; case BONUS_SLOW_BALL: pattern = pSlowBallBonus; *width = 22; *height = 15; break; case BONUS_SMASH_BALL: pattern = pSmashBallBonus; *width = 23; *height = 15; break; case BONUS_TRIPLE_BALL: pattern = pTripleBallBonus; *width = 17; *height = 15; break; case BONUS_HAND: pattern = pHandBonus; *width = 22; *height = 12; break; case BONUS_GUN: pattern = pGunBonus; *width = 20; *height = 9; break; case BONUS_EXTENDED_RACKET: pattern = pExtendedRacketBonus; *width = 22; *height = 11; break; case BONUS_ROCKET_PACK: pattern = pRocketPackBonus; *width = 21; *height = 12; break; case BONUS_400_POINTS: pattern = pPoints400Bonus; *width = 22; *height = 10; break; default: return NULL; } return pattern; } /* отобразить приз */ static void ShapeBonus(UCHAR *video, int lPitch) { const UCHAR *pBonus; int width,height; /* проверим, нужно отображать объект */ if (!scene.pBonus.show) return; /* определим отображаемый рисунок и его параметры */ pBonus = GetBonusType(scene.pBonus.type,&width,&height); if (!pBonus) return; /* отобразим картинку */ PlotFigure(video,lPitch,pBonus,width,width,height, GetX(scene.pBonus.X),GetY(scene.pBonus.Y)); } /* отобразить летающее существо */ static void ShapeAlien(UCHAR *video, int lPitch) { const UCHAR *pattern; /* проверим, нужно ли рисовать данный объект */ if (!scene.pAlien.show) return; /* определим отображаемую картинку */ if (scene.pAlien.show == SHOW_ALIEN_BIRD) { /* определим тип рисунка */ switch (scene.pAlien.type) { case TYPE_ALIEN_0: pattern = pBird0; break; case TYPE_ALIEN_1: pattern = pBird1; break; case TYPE_ALIEN_2: pattern = pBird2; break; case TYPE_ALIEN_3: pattern = pBird3; break; case TYPE_ALIEN_4: pattern = pBird4; break; default: return; } } else if (scene.pAlien.show == SHOW_ALIEN_UFO) { /* определим тип рисунка */ switch (scene.pAlien.type) { case TYPE_UFO_0: pattern = pUfo0; break; case TYPE_UFO_1: pattern = pUfo1; break; case TYPE_UFO_2: pattern = pUfo2; break; case TYPE_UFO_3: pattern = pUfo3; break; case TYPE_UFO_4: pattern = pUfo4; break; case TYPE_UFO_5: pattern = pUfo5; break; default: return; } } else return; /* отобразим картинку */ PlotFigure(video,lPitch,pattern,24,24,14, GetX(scene.pAlien.X),GetY(scene.pAlien.Y)); } /* отобразить взрыв летающего существа */ static void ShapeBang(UCHAR *video, int lPitch) { const UCHAR *pattern; /* проверим, нужно рисовать данный объект */ if (!scene.pBang.show) return; /* определим отображаемую картинку */ switch (scene.pBang.type) { case TYPE_BANG_0: pattern = pBang0; break; case TYPE_BANG_1: pattern = pBang1; break; case TYPE_BANG_2: pattern = pBang2; break; case TYPE_BANG_3: pattern = pBang3; break; case TYPE_BANG_4: pattern = pBang4; break; default: return; } /* отобразим картинку */ PlotFigure(video,lPitch,pattern,16,16,19, GetX(scene.pBang.X),GetY(scene.pBang.Y)); } /* отобразить ракету в следующую стадию */ static void ShapeRocket(UCHAR *video, int lPitch) { const UCHAR *pattern; int width,height; int xRocket,yRocket; int xRocketFlame,yRocketFlame; /* проверим, нужно рисовать данный объект */ if (!scene.pRocket.show) return; /* раситаем смещения для реактивного ранца и пламяни */ switch (scene.pRacket.type) { case TYPE_RACKET_NORMAL: case TYPE_RACKET_GUN: xRocket = scene.pRocket.X + 4; yRocket = scene.pRocket.Y + 6; xRocketFlame = scene.pRocket.X + 4; yRocketFlame = scene.pRocket.Y + 18; break; case TYPE_RACKET_EXTEND: xRocket = scene.pRocket.X + 12; yRocket = scene.pRocket.Y + 6; xRocketFlame = scene.pRocket.X + 12; yRocketFlame = scene.pRocket.Y + 18; break; default: return; } /* отобразим ракетку */ pattern = GetRacketType(scene.pRacket.type,&width); if (!pattern) return; PlotFigure(video,lPitch,pattern,width,width,13, GetX(scene.pRocket.X),GetY(scene.pRocket.Y)); /* отобразим реактивный ранец */ pattern = GetBonusType(BONUS_ROCKET_PACK,&width,&height); if (!pattern) return; PlotFigure(video,lPitch,pattern,width,width,height, GetX(xRocket),GetY(yRocket)); /* отобразим пламя из реактивного ранца */ switch (scene.pRocket.type) { case TYPE_ROCKET_0: pattern = pRocketFlame1; break; case TYPE_ROCKET_1: pattern = pRocketFlame2; /* скорректируем положение рисунка пламяни по координате 'X' */ xRocketFlame++; break; default: return; } PlotFigure(video,lPitch,pattern,20,20,16, GetX(xRocketFlame),GetY(yRocketFlame)); } /* отобразить пульки */ static void ShapeBullet(UCHAR *video, int lPitch) { int i; /* переберем все пульки */ for (i = 0; i < BULLETS_COUNT; i++) { LPPICTURE lpBullet = &scene.pBullet[i]; const UCHAR *pattern; /* отобразим пульку */ if (lpBullet->show) { if (lpBullet->type < TYPE_BULLET_PLOP_0) { switch (lpBullet->type) { case TYPE_BULLET_0: pattern = pBullet; break; case TYPE_BULLET_1: pattern = pBullet + 4; break; default: continue; } /* отобразим картинку */ PlotSurface(video,lPitch,pattern,8,4,8, GetX(lpBullet->X),GetY(lpBullet->Y)); } else { switch (lpBullet->type) { case TYPE_BULLET_PLOP_0: pattern = pPlop; break; case TYPE_BULLET_PLOP_1: pattern = pPlop + 8; break; case TYPE_BULLET_PLOP_2: pattern = pPlop + 16; break; case TYPE_BULLET_PLOP_3: pattern = pPlop + 24; break; default: continue; } /* отобразим картинку */ PlotSurface(video,lPitch,pattern,32,8,8, GetX(lpBullet->X),GetY(lpBullet->Y)); } } } } /* отобразить осколки ракетки */ static void ShapeSlivers(UCHAR *video, int lPitch) { LPFULL_PICTURE lpPicture; const UCHAR *pattern; int i; /* проверим, нужно рисовать данный объект */ if (!scene.pSlivers.show) return; /* отобразим все картинки */ for (i = 0; i < SLIVERS_COUNT; i++) { /* получим указатель на описание осколка */ lpPicture = &scene.pSlivers.picture[i]; /* отобразим тень */ if (lpPicture->shadow.show) { /* сформируем укозатель на фигуру */ pattern = pSlivers + lpPicture->shadow.type * 5 + 35 * 7; /* отобразим фигуру */ PlotFigure(video,lPitch,pattern,35,5,5, GetX(lpPicture->shadow.X),GetY(lpPicture->shadow.Y)); } /* отобразим фигуру */ if (lpPicture->picture.show) { /* сформируем укозатель на фигуру */ pattern = pSlivers + lpPicture->picture.type * 7; /* отобразим фигуру */ PlotFigure(video,lPitch,pattern,35,7,7, GetX(lpPicture->picture.X),GetY(lpPicture->picture.Y)); } } } /* накладывает тень от кирпичей на определенный цвет */ static void PlotShade(UCHAR *video, int lpitch, int x, int y, int color, int key) { int width,height; /* заполним прямоугольник */ video += y * lpitch + x; for (height = 0; height < 8; height++) { for (width = 0; width < 16; width++) { UCHAR *p = video + (width * SCALE); if (*p == key) { *(p) = color; *(p + 1) = color; *(p + lpitch) = color; *(p + lpitch + 1) = color; } } video += lpitch * 2; } } /* отобразить тень от кирпичей */ static void ShapeShadow(UCHAR *video, int lPitch) { int x,y; /* переберем все кирпичи */ for (y = 0; y < 12; y++) { for (x = 0; x < 15; x++) { /* если поле пустое то пропустим его */ if (scene.block[y][x]) { /* * Если это крайнии позиции, а так же снизу или * снизу правее пусто, то отображаем тень. */ if (x == 14 || y == 11 || !scene.block[y+1][x] || !scene.block[y+1][x+1]) { int px = x * (16 * 2) + (16 * 2) + GAME_X; int py = y * (8 * 2) + (8 * 2) + (32 * 2) + GAME_Y; /* сделаем программный блитинг */ PlotShade(video,lPitch,px,py, scene.background+CL_SHADE_YELLOW_BACK, scene.background+CL_YELLOW_BACK); } } } } /* тень от левой стенки */ for (y = 1; y < WIN_GAME_HEIGHT / 8; y++) PlotShade(video,lPitch,GetX(0),GetY(y*8), scene.background+CL_SHADE_YELLOW_BACK, scene.background+CL_YELLOW_BACK); /* тень от верхней стенки */ for (x = 1; x < WIN_GAME_WIDTH / 16; x++) PlotShade(video,lPitch,GetX(x*16),GetY(8), scene.background+CL_SHADE_YELLOW_BACK, scene.background+CL_YELLOW_BACK); } /* отобразить ограждение */ static void ShapeBarrier(UCHAR *video, int lPitch) { int i; /* нарисуем левую стенку */ PlotPattern(video,lPitch,pBarLeft3,8,8,8,GetX(0),GetY(0)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8)); PlotPattern(video,lPitch,pBarLeft2,8,8,8,GetX(0),GetY(8*2)); VLine(video,lPitch,GetY(8),GetY(8*3-3),GetX(8),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarLeft4,8,8,24,GetX(0),GetY(8*3)); /*************************/ PlotPattern(video,lPitch,pBarLeft0,8,8,8,GetX(0),GetY(8*6)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*7)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*8)); PlotPattern(video,lPitch,pBarLeft2,8,8,8,GetX(0),GetY(8*9)); for (i = 0; i < 4; i++) { BLOCK block; int p1,p2; p1 = 8 * (6 + i); p2 = 8 * (7 + i) - 1; if (i == 0) p1 += 2; else if (i == 3) p2 -= 2; if (!GetBlock(&block,GetX(8),GetY(p1))) VLine(video,lPitch,GetY(p1),GetY(p2),GetX(8),CL_BLACK); } /*************************/ PlotPattern(video,lPitch,pBarLeft4,8,8,24,GetX(0),GetY(8*10)); /*************************/ PlotPattern(video,lPitch,pBarLeft0,8,8,8,GetX(0),GetY(8*13)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*14)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*15)); PlotPattern(video,lPitch,pBarLeft2,8,8,8,GetX(0),GetY(8*16)); for (i = 0; i < 4; i++) { BLOCK block; int p1,p2; p1 = 8 * (13 + i); p2 = 8 * (14 + i) - 1; if (i == 0) p1 += 2; else if (i == 3) p2 -= 2; if (!GetBlock(&block,GetX(8),GetY(p1))) VLine(video,lPitch,GetY(p1),GetY(p2),GetX(8),CL_BLACK); } /*************************/ PlotPattern(video,lPitch,pBarLeft4,8,8,24,GetX(0),GetY(8*17)); /*************************/ PlotPattern(video,lPitch,pBarLeft0,8,8,8,GetX(0),GetY(8*20)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*21)); PlotPattern(video,lPitch,pBarLeft1,8,8,8,GetX(0),GetY(8*22)); PlotPattern(video,lPitch,pBarLeft2,8,8,8,GetX(0),GetY(8*23)); VLine(video,lPitch,GetY(8*20+2),GetY(8*24-3),GetX(8),CL_BLACK); /* нарисуем правую стенку */ PlotPattern(video,lPitch,pBarRight3,8,8,8,GetX(8*31),GetY(0)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8)); PlotPattern(video,lPitch,pBarRight2,8,8,8,GetX(8*31),GetY(8*2)); VLine(video,lPitch,GetY(8),GetY(8*3-3),GetX(8*31-1),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarRight4,8,8,24,GetX(8*31),GetY(8*3)); /*************************/ PlotPattern(video,lPitch,pBarRight0,8,8,8,GetX(8*31),GetY(8*6)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*7)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*8)); PlotPattern(video,lPitch,pBarRight2,8,8,8,GetX(8*31),GetY(8*9)); for (i = 0; i < 4; i++) { BLOCK block; int p1,p2; p1 = 8 * (6 + i); p2 = 8 * (7 + i) - 1; if (i == 0) p1 += 2; else if (i == 3) p2 -= 2; if (!GetBlock(&block,GetX(8*31-1),GetY(p1))) VLine(video,lPitch,GetY(p1),GetY(p2),GetX(8*31-1),CL_BLACK); } /*************************/ PlotPattern(video,lPitch,pBarRight4,8,8,24,GetX(8*31),GetY(8*10)); /*************************/ PlotPattern(video,lPitch,pBarRight0,8,8,8,GetX(8*31),GetY(8*13)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*14)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*15)); PlotPattern(video,lPitch,pBarRight2,8,8,8,GetX(8*31),GetY(8*16)); for (i = 0; i < 4; i++) { BLOCK block; int p1,p2; p1 = 8 * (13 + i); p2 = 8 * (14 + i) - 1; if (i == 0) p1 += 2; else if (i == 3) p2 -= 2; if (!GetBlock(&block,GetX(8*31-1),GetY(p1))) VLine(video,lPitch,GetY(p1),GetY(p2),GetX(8*31-1),CL_BLACK); } /*************************/ PlotPattern(video,lPitch,pBarRight4,8,8,24,GetX(8*31),GetY(8*17)); /*************************/ PlotPattern(video,lPitch,pBarRight0,8,8,8,GetX(8*31),GetY(8*20)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*21)); PlotPattern(video,lPitch,pBarRight1,8,8,8,GetX(8*31),GetY(8*22)); PlotPattern(video,lPitch,pBarRight2,8,8,8,GetX(8*31),GetY(8*23)); VLine(video,lPitch,GetY(8*20+2),GetY(8*24-3),GetX(8*31-1),CL_BLACK); /* нарисуем верхнюю стенку */ PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*2),GetY(0)); PlotPattern(video,lPitch,pBarTop2,8,8,8,GetX(8*3),GetY(0)); HLine(video,lPitch,GetX(9),GetX(8*4-3),GetY(8),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarTop5,24,24,8,GetX(8*4),GetY(0)); /*************************/ PlotPattern(video,lPitch,pBarTop3,8,8,8,GetX(8*7),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*8),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*9),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*10),GetY(0)); PlotPattern(video,lPitch,pBarTop4,8,8,8,GetX(8*11),GetY(0)); HLine(video,lPitch,GetX(8*7+2),GetX(8*12-3),GetY(8),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarTop5,24,24,8,GetX(8*12),GetY(0)); /*************************/ PlotPattern(video,lPitch,pBarTop3,8,8,8,GetX(8*15),GetY(0)); PlotPattern(video,lPitch,pBarTop4,8,8,8,GetX(8*16),GetY(0)); HLine(video,lPitch,GetX(8*15+2),GetX(8*17-3),GetY(8),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarTop5,24,24,8,GetX(8*17),GetY(0)); /*************************/ PlotPattern(video,lPitch,pBarTop3,8,8,8,GetX(8*20),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*21),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*22),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*23),GetY(0)); PlotPattern(video,lPitch,pBarTop4,8,8,8,GetX(8*24),GetY(0)); HLine(video,lPitch,GetX(8*20+2),GetX(8*25-3),GetY(8),CL_BLACK); /*************************/ PlotPattern(video,lPitch,pBarTop5,24,24,8,GetX(8*25),GetY(0)); /*************************/ PlotPattern(video,lPitch,pBarTop0,8,8,8,GetX(8*28),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*29),GetY(0)); PlotPattern(video,lPitch,pBarTop1,8,8,8,GetX(8*30),GetY(0)); HLine(video,lPitch,GetX(8*28+2),GetX(8*31-2),GetY(8),CL_BLACK); } /* отображает сообщение с учетом прозрачности */ static void PlotMessage(UCHAR *video, int pitchVideo, const UCHAR *pattern, int pitchPattern, int width, int height, int x, int y) { int i,j; /* расчитаем точку от которой начинается прорисовка поверхности */ video += y * pitchVideo + x; /* отобразим поверхность */ for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { UCHAR *p; /* проверим пиксель на прозрачность */ if (pattern[j]) continue; /* отобразим пиксель белым цветом */ p = video + (j * SCALE); *(p) = CL_WHITE; *(p + 1) = CL_WHITE; *(p + pitchVideo) = CL_WHITE; *(p + pitchVideo + 1) = CL_WHITE; } /* переместимся на следующие строчки поверхностей */ video += pitchVideo * 2; pattern += pitchPattern; } } /* * Отображает сообщение. * Размер сообщения: 160,68 * Координата верхней левой точки: 88,132 */ static void ShapeMessage(UCHAR *video, int lPitch) { const UCHAR *p; UCHAR *v; int i,x,y,X,Y; /* отобразить сообщение */ if (!scene.message.show) return; /* расчитаем оконные координаты */ X = GetX(88); Y = GetY(132); /* очистим поле где отображается сообщение */ v = video + Y * lPitch + X; for (i = 0; i < 68; i++) { memset(v,CL_SCREEN_BACK,160); v += lPitch; } /* отобразим сообщение */ if (scene.message.flags == MESSAGE_ROUND) { TCHAR buff[32]; /* строка 'player' */ x = X + 8 * SCALE; y = Y + 6 * SCALE; PlotMessage(video,lPitch,pPlayer,47,47,10,x,y); /* номер игрока */ p = pDigitMsg + scene.message.player * 6; x = X + (8 * 8 + 1) * SCALE; y = Y + (6 * SCALE); PlotMessage(video,lPitch,p,60,6,8,x,y); /* строка 'round' */ x = X + (8 + 1) * SCALE; y = Y + (6 + 8 + 6) * SCALE; PlotMessage(video,lPitch,pRound,39,39,8,x,y); /* номер раунда */ _stprintf(buff,_T("%02d"),scene.message.round); for (i = 0; i < 2; i++) { p = pDigitMsg + (buff[i] - _T('0')) * 6; x = X + (i * 8 + 7 * 8 + 1) * SCALE; y = Y + (6 + 8 + 6) * SCALE; PlotMessage(video,lPitch,p,60,6,8,x,y); } } else { /* информация об паузе */ if (scene.message.pause) { /* отобразим цифру */ p = pDigitMsg + scene.message.pause * 6; x = X + 37 * SCALE; y = Y + 13 * SCALE; PlotMessage(video,lPitch,p,60,6,8,x,y); } else { x = X + 20 * SCALE; y = Y + 15 * SCALE; PlotMessage(video,lPitch,pPause,39,39,8,x,y); } } } /* отобразить отладочную информацию */ static int ShapeDebug(void) { HDC hdc; TCHAR sBuff[256]; /* сформируем отображаемую строку */ _stprintf(sBuff,sFormatDebug,giFps,giFrame,lSpeedDraw); /* отобразим отладочную строку */ if (FAILED(IDirectDrawSurface7_GetDC(lpddSrf,&hdc))) return 1; /* отобразим текст */ SelectObject(hdc,GetStockObject(ANSI_VAR_FONT)); SetTextColor(hdc,RGB(255,255,255)); /* белый цвет */ SetBkColor(hdc,RGB(0,0,60)); /* цвет заднего фона */ TextOut(hdc,dwDebugX,dwDebugY,sBuff,lstrlen(sBuff)); if (FAILED(IDirectDrawSurface7_ReleaseDC(lpddSrf,hdc))) return 1; return 0; } /* нарисовать очередной кадр */ int GameDrawScene(void) { DDSURFACEDESC2 ddsd; DDBLTFX ddblt; DWORD dwTime; /* очистим поверхность (заливаем цветом фона) */ INIT_DIRECT_STRUCT(ddblt); ddblt.dwFillColor = CL_SCREEN_BACK; if (FAILED(IDirectDrawSurface7_Blt(lpddSrf,NULL,NULL,NULL, DDBLT_COLORFILL|DDBLT_WAIT,&ddblt))) return 1; /* начинаем отображать сцену или уходим */ if (scene.on) { RECT rect; /* отобразим фон игрового поля */ rect.left = GAME_X; rect.top = GAME_Y; rect.right = GAME_X + GAME_WIDTH; rect.bottom = GAME_Y + GAME_HEIGHT; INIT_DIRECT_STRUCT(ddblt); ddblt.dwFillColor = scene.background + CL_YELLOW_BACK; if (FAILED(IDirectDrawSurface7_Blt(lpddSrf,&rect,NULL,NULL, DDBLT_COLORFILL|DDBLT_WAIT,&ddblt))) return 1; } else { /* время отрисовки сцены равно нулю */ if (giDebug) lSpeedDraw = 0; goto _EXIT; } /* * Здесь рисуются картинки непосредсвенно в видео память. */ /* заблокируем поверхность */ INIT_DIRECT_STRUCT(ddsd); if (FAILED(IDirectDrawSurface7_Lock(lpddSrf,NULL,&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL))) return 1; /* получим время для начала отсчета */ if (giDebug) dwTime = timeGetTime(); /* отобразим рисунок игрового поля */ ShapeBackground(ddsd.lpSurface,ddsd.lPitch); /* отобразим очки игроков */ ShapeScore(ddsd.lpSurface,ddsd.lPitch); /* отобразить круги откланения */ ShapeSwerves(ddsd.lpSurface,ddsd.lPitch); /* отобразить тень от мячика */ ShapeShadowBall(ddsd.lpSurface,ddsd.lPitch); /* отобразить кирпичи */ ShapeBlock(ddsd.lpSurface,ddsd.lPitch); /* обвести кирпичи черной линией */ ShapeLineOfBlock(ddsd.lpSurface,ddsd.lPitch); /* отобразим мячик */ ShapeBall(ddsd.lpSurface,ddsd.lPitch); /* отобразить тень от бомбы */ ShapeBombShadow(ddsd.lpSurface,ddsd.lPitch); /* отобразить ракетку */ ShapeRacket(ddsd.lpSurface,ddsd.lPitch); /* отобразить бомбу */ ShapeBomb(ddsd.lpSurface,ddsd.lPitch); /* отобразить летающее существо */ ShapeAlien(ddsd.lpSurface,ddsd.lPitch); /* отобразить взрыв летающего существа */ ShapeBang(ddsd.lpSurface,ddsd.lPitch); /* отобразить пульки или его хлопки */ ShapeBullet(ddsd.lpSurface,ddsd.lPitch); /* отобразим падающий приз */ ShapeBonus(ddsd.lpSurface,ddsd.lPitch); /* отобразим ракету в следующую стадию */ ShapeRocket(ddsd.lpSurface,ddsd.lPitch); /* отобразить осколки ракетки */ ShapeSlivers(ddsd.lpSurface,ddsd.lPitch); /* отобразим количество жизней */ ShapeLives(ddsd.lpSurface,ddsd.lPitch); /* отобразить тень */ ShapeShadow(ddsd.lpSurface,ddsd.lPitch); /* отобразим ограждение */ ShapeBarrier(ddsd.lpSurface,ddsd.lPitch); /* отобразим сообщение */ ShapeMessage(ddsd.lpSurface,ddsd.lPitch); /* расчитаем время заполнения сцены */ if (giDebug) { lSpeedBuff[pSpeed] = timeGetTime() - dwTime; if (++pSpeed >= 5) { int i,sum; for (i = sum = 0; i < 5; i++) sum += lSpeedBuff[i]; lSpeedDraw = sum / 5; pSpeed = 0; } } /* разблокируем поверхность */ if (FAILED(IDirectDrawSurface7_Unlock(lpddSrf,NULL))) return 1; _EXIT: /* отобразим отладочную информацию */ if (giDebug) { if (ShapeDebug()) return 1; } return 0; } /* создание сцены */ void GameCreateScene(void) { /* очистим сцену */ memset(&scene,0,sizeof(scene)); } /* разрушить сцену, делаем плавное затухание */ void GameReleaseScene(void) { PALETTEENTRY plt[CL_COUNT]; int i,j,blue; /* получим значение палитры */ IDirectDrawPalette_GetEntries(lpddPlt,0,0,CL_COUNT,plt); blue = plt[CL_SCREEN_BACK].peBlue; for (i = 0; i < 128; i++) { /* начинаем с первой записи, черный цвет не трогаем */ for (j = 1; j < CL_SCREEN_BACK; j++) { LPPALETTEENTRY p = &plt[j]; if (p->peRed >= 2) p->peRed -= 2; if (p->peGreen >= 2) p->peGreen -= 2; if (p->peBlue > blue) p->peBlue -= 2; else if (p->peBlue < blue) p->peBlue += 2; } IDirectDrawPalette_SetEntries(lpddPlt,0,0,CL_COUNT,plt); Sleep(5); } /* сделаем небольшую задержку */ Sleep(50); } /* подготовка модуля рисования игрового процесса */ int GameInitDraw(void) { PALETTEENTRY plt[256]; int i; /* заполним палитру черным цветом */ for (i = 0; i < 256; i++) SET_PALETTE(plt[i],0,0,0); /* задний фон окна */ SET_PALETTE(plt[CL_SCREEN_BACK],0,0,60); /* задний фон экрана */ /* цвета фона игрового поля и теней на нем */ SET_PALETTE(plt[CL_YELLOW_BACK],248,248,0); /* фон желтый */ SET_PALETTE(plt[CL_GREEN_BACK],0,248,0); /* фон зеленый */ SET_PALETTE(plt[CL_SKY_BACK],0,248,248); /* фон голубой */ SET_PALETTE(plt[CL_WHITE_BACK],248,248,248); /* фон белый */ SET_PALETTE(plt[CL_SHADE_YELLOW_BACK],200,200,0); /* фон тень желтый */ SET_PALETTE(plt[CL_SHADE_GREEN_BACK],0,200,0); /* фон тень зеленный */ SET_PALETTE(plt[CL_SHADE_SKY_BACK],0,200,200); /* фон тень голубой */ SET_PALETTE(plt[CL_SHADE_WHITE_BACK],200,200,200); /* фон тень белый */ /* цвета кирпичеков */ SET_PALETTE(plt[CL_BLACK],0,0,0); /* черный */ SET_PALETTE(plt[CL_WHITE],248,248,248); /* белый */ SET_PALETTE(plt[CL_YELLOW],248,248,0); /* желтый */ SET_PALETTE(plt[CL_ROSY],248,0,248); /* розовый */ SET_PALETTE(plt[CL_RED],248,0,0); /* красный */ SET_PALETTE(plt[CL_BLUE],0,0,248); /* синий */ SET_PALETTE(plt[CL_GREEN],0,200,0); /* зеленый */ /* установим палитру */ if (FAILED(IDirectDrawPalette_SetEntries(lpddPlt,0,0,256,plt))) return 1; return 0; } /* начальная инициализация модуля рисования игрового процесса */ int InitDrawGame(void) { HDC hdc; TEXTMETRIC tm; UCHAR buff[16*8]; int y,x; /* получим параметры шрифта */ if (giDebug) { if (FAILED(IDirectDrawSurface7_GetDC(lpddSrf,&hdc))) return 1; SelectObject(hdc,GetStockObject(ANSI_VAR_FONT)); GetTextMetrics(hdc,&tm); if (FAILED(IDirectDrawSurface7_ReleaseDC(lpddSrf,hdc))) return 1; /* расчитаем положение для дебажного сообщения */ dwDebugX = GAME_X + (GAME_WIDTH - _tcslen(sFormatDebug) * (tm.tmAveCharWidth - 1)) / 2; dwDebugY = GAME_Y - (tm.tmHeight + tm.tmHeight / 2); } /* * Создадим шаблон, содержащий рисунки блоков, * одна поверхность содержит шесть разных кирпичей. */ for (y = 0; y <= 5; y++) { UCHAR color1,color2; /* расчитаем цвет кирпича */ switch (y) { case 0: color1 = CL_BLACK; color2 = CL_YELLOW; break; case 1: color1 = CL_WHITE; color2 = CL_ROSY; break; case 2: color1 = CL_WHITE; color2 = CL_RED; break; case 3: color1 = CL_BLACK; color2 = CL_GREEN; break; case 4: color1 = CL_WHITE; color2 = CL_BLUE; break; default: color1 = CL_WHITE; color2 = CL_BLACK; break; } /* заполняем строчку фигурой и ее анимацией */ for (x = 0; x < 7; x++) { const UCHAR *from; UCHAR *to; int i; /* сформируем укозатель на шаблон изображения */ switch (x) { case 0: from = pBlock; break; case 1: from = pAnimBlock0; break; case 2: from = pAnimBlock1; break; case 3: from = pAnimBlock2; break; case 4: from = pAnimBlock3; break; case 5: from = pAnimBlock4; break; default: from = pAnimBlock5; break; } /* сформируем изображение */ for (i = 0; i < 16 * 8; i++) buff[i] = from[i] ? color2 : color1; /* переносим изображение на поверхность */ to = pBlocks + y * (16 * 7 * 8) + x * 16; from = buff; for (i = 0; i < 8; i++) { memcpy(to,from,16); to += 16 * 7; from += 16; } } } return 0; } /* деинициализация модуля рисования кадра */ void ReleaseDrawGame(void) { }