Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define F_CPU 1000000UL
- #include <avr/io.h>
- #include <util/delay.h>
- #include "HD44780.c"
- #include <stdlib.h> // tylko dla rand() i srand()
- #define SW_L (1<<PA4)
- #define SW_L_ON !(PINA & SW_L)
- #define SW_P (1<<PA5)
- #define SW_P_ON !(PINA & SW_P)
- #define SW_UP (1<<PA6)
- #define SW_UP_ON !(PINA & SW_UP)
- #define SW_DOWN (1<<PA7)
- #define SW_DOWN_ON !(PINA & SW_DOWN)
- struct _punkt // struktura pozwala na używanie pól bitowych, zatem cała struktura tutaj zajmuje 5 BITÓW, zamiast 16 (8+8)
- {
- char x: 4;
- char x_last: 4;
- char y: 1;
- char y_last: 1;
- };
- void Draw_Main(char src[2][16][1]){
- for (char row = 0; row < 2; row++)
- {
- for (char col = 0; col < 16; col++)
- {
- LCD_GoTo(col, row); // x, y
- LCD_WriteText(&src[row][col]);
- }
- }
- }
- int main(void)
- {
- DDRA &= ~(SW_L | SW_P | SW_UP | SW_DOWN); // SHIT DLA PRZYCISKÓW
- PORTA |= (SW_L | SW_P | SW_UP | SW_DOWN); // SHIT DLA PRZYCISKÓW
- // 2 - wiersze, 16 - kolumny, 1- dlugosc znaku (czyli maksymalnie 1)
- char ekran[2][16][1] = {
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
- };
- LCD_Initalize(); // obowiązkowe
- LCD_Clear(); // too
- struct _punkt _gracz; // tworzenie obiektu gracz ze wspolrzednymi
- _gracz.x = 0;
- _gracz.y = 1;
- struct _punkt _wrog; // tworzenie obiektu wrog ze wspolrzednymi
- _wrog.x = 14;
- _wrog.y = rand() % 2;
- _wrog.x_last = 15;
- ekran[_gracz.y][_gracz.x][0] = 'X'; // ustalenie grafiki dla gracza, lolz
- Draw_Main(ekran);
- char mnoznik = 1; // jakieś zmienne
- char score = 0; // jakieś zmenne
- while(1)
- {
- Draw_Main(ekran); // na początku każdej pętli rysuj wszystko
- /* STEROWNANIE GRACZEM */
- if (SW_P_ON) // PRAWY
- {
- _delay_ms(5);
- mnoznik = 2;
- } else mnoznik = 1;
- if (SW_L_ON) // LEWY
- {
- _delay_ms(5);
- mnoznik = 5;
- }
- if (SW_UP_ON) // GÓRA
- {
- _delay_ms(5);
- _gracz.y_last = _gracz.y;
- if (_gracz.y > 0) _gracz.y--;
- else { _gracz.y_last = 1; _gracz.y = 0; }
- }
- if (SW_DOWN_ON) //DÓŁ
- {
- _delay_ms(5);
- _gracz.y_last = _gracz.y;
- if (_gracz.y < 1) _gracz.y++;
- else { _gracz.y_last = 0; _gracz.y = 1; }
- }
- /* KOLIZJE I ZDARZENIA */
- if ((_wrog.x - 1 == _gracz.x) && (_wrog.y== _gracz.y)) break; // zakończenie gry, wyjście złe
- /* WYŚWIETLANIE GRACZA */
- ekran[_gracz.y][_gracz.x][0] = 'X';
- ekran[_gracz.y_last][_gracz.x][0] = ' ';
- if (_wrog.x > 0)
- {
- _wrog.x_last = _wrog.x;
- _wrog.x--;
- } else
- {
- _wrog.x = 14;
- _wrog.x_last = 15;
- score+=5;
- _wrog.y = rand()%2;
- }
- ekran[_wrog.y][_wrog.x][0] = '8'; // grafika wroga
- ekran[_wrog.y][_wrog.x_last][0] = ' ';
- if (score == 255) break; // how awsum, zakończenie gry, wyjscie dobre
- }
- LCD_Clear();
- LCD_GoTo(3,0);
- if(score<255) LCD_WriteText("Game Over");
- else LCD_WriteText("You Won");
- LCD_GoTo(3,1);
- LCD_WriteText("Score : ");
- LCD_WriteText(itoa(score,"",10));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement