Skip to content

Commit

Permalink
Merge pull request #57 from YarikLiulin/main
Browse files Browse the repository at this point in the history
Last lab Zmeyka
  • Loading branch information
lordoz234 authored Nov 27, 2023
2 parents 7ced5cd + e3e46e6 commit 66c5e5a
Showing 1 changed file with 178 additions and 0 deletions.
178 changes: 178 additions & 0 deletions Zmeyka_Liulin/last_lab.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
#include <stdio.h>
#include <conio.h>
#include <windows.h>


#define HEIGHT 20
#define WIDTH 20


int x, y, fruitX, fruitY, score, gameOver;
int tailX[100], tailY[100];
int nTail;
enum eDirection {STOP = 0, LEFT, RIGHT, UP, DOWN};
enum eDirection dir;

void Setup() {
//Èçíà÷àëüíàÿ íàñòðîéêà èãðû è ïåðâîíà÷àëüíîå ìåíþ
score = 0;
char button;
x = WIDTH / 2;
y = HEIGHT / 2;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
dir = STOP;

printf("Menu:\n");
printf("If you want to play game push button p\n");
printf("If you want to quit push button x\n");

scanf_s("%c", &button);
if (button == 'p') {
gameOver = 0;
}
if (button == 'x') {
gameOver = 1;
}


}


void Draw() {
//Îòðèñîâêà ãðàíèö, çìåè è ôðóêòîâ
system("cls"); //Î÷èñòêà êîíñîëè íàõîäèòñÿ â windows.h
for (int i = 0; i < WIDTH + 1 ; i++) {
printf("#");
}
printf("\n");

for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH ; j++) {
if (j == 0 || j == (WIDTH - 1)) {
printf("#");
}
if (i == y && j == x) {
printf("0");
}
if (i == fruitY && j == fruitX) {
printf("F");
}
else {
int print = 0;
for (int k = 0; k < nTail; k++) {
if (tailX[k] == j && tailY[k] == i) {
print = 1;
printf("o");
}
}
if (!print) {
printf(" ");
}
}
}
printf("\n");
}

for (int i = 0; i < WIDTH + 1; i++) {
printf("#");
}
printf("\n");

printf("score: %d\n", score);
printf("to quit push x");
}


void Input() {
//Ïðè ïîìîùè áèáëåîòåêè konio.h îòñëåæèâàåì íàæèìàåìûå êíîïêè. Ïðèìå÷àíèå: çìåéêà äâèãàåòñÿ òîëüêî, êîãäà íàæèìàåìûå êëàâèøû ðàáîòàþò â íèæíåì ðåãèñòðå.
if (_kbhit()) {
switch (_getch()) {
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
gameOver = 1;
break;
}
}
}


void Logic() {
//Ëîãèêà èãðû. Çäåñü ìû ïðîãðàììèðóåì äâèæåíèå çìåè, óâåëè÷åíèå ñ÷åòà, ïîåäàíèå ôðóêòîâ.
int prevX = tailX[0];
int prevY = tailY[0];
int prev2X, prev2Y;
tailX[0] = x;
tailY[0] = y;

for (int i = 1; i < nTail; i++) {
prev2X = tailX[i];
prev2Y = tailY[i];
tailX[i] = prevX;
tailY[i] = prevY;
prevX = prev2X;
prevY = prev2Y;
}

switch (dir) {
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
break;
case DOWN:
y++;
break;
}

if (x < 0) {
x = WIDTH - 1;
}
else if (x >= WIDTH -1 ){
x = 0;
}
if (y < 0) {
y = HEIGHT - 1;
}
else if (y >= HEIGHT) {
y = 0;
}
for (int i = 0; i < nTail; i++) {
if (tailX[i] == x && tailY[i] == y) {
gameOver = 1;
}
}
if (x == fruitX && y == fruitY) {
score += 10;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
nTail++;
}
}


int main() {
//Ñîáèðàåì âñå âìåñòå
Setup();
while (!gameOver) {
Draw();
Input();
Logic();
Sleep(30); //Íàõîäèòüñÿ â áèáëåîòåêå windows.h äåëàåò çàäåðæêó 10 ìèëëèñåêóíä. Äîáàâëÿåò ïëàâíîñòè èãðå
}
}

0 comments on commit 66c5e5a

Please sign in to comment.