Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SnakeGame.h"
- #include "Colors.h"
- #include <iostream>
- using namespace std;
- char Map[20][60] = {"###########################################################",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "# #",
- "###########################################################"};
- //Colors color;
- SnakeGame::SnakeGame(int StartX,int StartY,int Length,char SnakeChar, char FruitChar, char WallChar,
- int UpKey, int DownKey, int RightKey, int LeftKey)
- {
- Wallc = WallChar;
- Fruitc = FruitChar;
- PChar = SnakeChar;
- Lkey = LeftKey;
- Rkey = RightKey;
- Ukey = UpKey;
- Dkey = DownKey;
- Head_x = StartX;
- Head_y = StartY;
- Dir = RIGHT;
- if(Head_x > Length) // sprawdza zeby snake na starcie nie wchodzil w sciane
- {
- for(int i=0; i<Length; i++)
- {
- Lx.push_back(Head_x-i);
- Ly.push_back(Head_y);
- }
- }else
- {
- cout << "Pozycja X weza jest mniejsza niż jego dlugosc, popraw";
- ExitProcess(0);
- }
- }
- void SnakeGame::DrawMap()
- {
- //color.green();
- for(unsigned short rows=0; rows < 20 ; rows++)
- cout << Map[rows] << "\n";
- //color.white();
- return ;
- }
- void SnakeGame::SnakeGrow(int n)
- {
- for(int i=0;i<n;i++)
- {
- Lx.push_front(Lx.front());
- Ly.push_front(Ly.front());
- }
- }
- void SnakeGame::DropRandFruit()
- {
- srand(GetTickCount());
- unsigned short Fruitx = rand() % 57 +1;
- unsigned short Fruity = rand() % 18 +1;
- //color.red();
- if(Map[Fruity][Fruitx] == PChar) //Patrzy czy owoc nie jest umieszczany na wezu
- {
- //color.red();
- DropRandFruit();
- //color.white();
- }
- else
- {
- //color.red();
- Map[Fruity][Fruitx] = Fruitc;
- //color.white();
- }
- //color.white();
- }
- bool SnakeGame::DropFruitXY(int x,int y)
- {
- //color.red();
- if(Map[y][x] == PChar) // Patrzy czy owoc nie jest umieszczany na wezu
- {
- DropRandFruit();
- return 0;
- }
- else
- {
- Map[y][x] = Fruitc;
- return 1;
- }
- //color.white();
- }
- void SnakeGame::HandleKeys()
- {
- if(GetAsyncKeyState(Rkey) != 0)
- {
- if(Dir != LEFT)
- Dir = RIGHT;
- }
- else if(GetAsyncKeyState(Ukey) != 0)
- {
- if(Dir != DOWN)
- Dir = UP;
- }
- else if(GetAsyncKeyState(Dkey) != 0)
- {
- if(Dir != UP)
- Dir = DOWN;
- }
- else if(GetAsyncKeyState(Lkey) != 0)
- {
- if(Dir != RIGHT)
- Dir = LEFT;
- }
- return;
- }
- int SnakeGame::SnakeMove()
- {
- int ret = 1;
- if(Dir == RIGHT){
- if(Map[Head_y][Head_x+1] == Wallc || Map[Head_y][Head_x+1] == PChar) //Kolizja
- ret = 0;
- else
- {
- if(Map[Head_y][Head_x+1] == Fruitc) // Owoc
- {
- Map[Head_y][Head_x+1] = PChar;
- SnakeGrow(1);
- ret = 2;
- }
- Head_x++;
- }
- }else if(Dir == LEFT){
- if(Map[Head_y][Head_x-1] == Wallc || Map[Head_y][Head_x-1] == PChar)
- ret = 0;
- else
- {
- if(Map[Head_y][Head_x-1] == Fruitc)
- {
- Map[Head_y][Head_x-1] = PChar;
- SnakeGrow(1);
- ret = 2;
- }
- Head_x--;
- }
- }else if(Dir == DOWN){
- if(Map[Head_y+1][Head_x] == Wallc || Map[Head_y+1][Head_x] == PChar)
- ret = 0;
- else
- {
- if(Map[Head_y+1][Head_x] == Fruitc)
- {
- Map[Head_y+1][Head_x] = PChar;
- SnakeGrow(1);
- ret = 2;
- }
- Head_y++;
- }
- }
- else if(Dir == UP){
- if(Map[Head_y-1][Head_x] == Wallc || Map[Head_y-1][Head_x] == PChar)
- ret = 0;
- else
- {
- if(Map[Head_y-1][Head_x] == Fruitc)
- {
- Map[Head_y-1][Head_x] = PChar;
- SnakeGrow(1);
- ret = 2;
- }
- Head_y--;
- }
- }
- if(ret != 0)
- {
- Ly.push_back(Head_y);
- Lx.push_back(Head_x);
- Map[Ly.back()][Lx.back()] = PChar;
- Map[Ly.front()][Lx.front()] = ' ';
- Ly.pop_front();
- Lx.pop_front();
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement