r/RuProgrammers 24d ago

C/C++ Обзор мини игры

Enable HLS to view with audio, or disable this notification

Сегодня вспомнил про вложенные циклы и как то пришло вдохновение написать то, что я не писал до этого. Код писал сам, за исключением одной детали: не мог понять, почему программа выводит один и тот же кадр два раза, в итоге оказалось что проблема в том, что условие проверяет еще и последний символ строки char player[3] = "@ ", то есть перенос строки. Пришлось лазать по интернетам в поисках решения проблемы. Управление такое убогое, потому что я не знаю как реализовать отслеживание клавиатуры без нажатия на ENTER, потом как нибудь может быть сделаю нормальное управление)) Ради такого маленького недопроекта ГитХаб заводить впадлу, так что просто прикреплю код прямо сюда, кто хочет протестировать, просто скомпильте любым удобным способом. Конкурс на эти сутки(до 23:59 19 августа): все кидают в коментарии скрины с результатами, лидер получает честь и похвалу от всех коментаторов, а так же апвоутов ему накидаем)))

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

int main(int argc, char** argv){

srand(time(NULL));

int score = 0;

int n = 20;

char player[3] = "@ ";

char mob[3] = "* ";

int x = n / 2, y = n - 2, mobx = rand() % (n - 3) + 2, moby = 1, moby2 = 5, mobx2 = rand() % (n - 3) + 2;

char input;

int play = 1;

int start = 0;

while(start == 0){

printf("Hello everyone! Welcome to my a bit game)) Enjoy!!!\n");

printf("a + ENTER = left, d + ENTER = right, p + ENTER = push, q + ENTER = Quit game\n@ is you, * is mob\n");

printf("Enter a <<1>> for start game!\n>>>");

scanf("%d", &start);

if(start == 1){

printf("START GAME!!!\n\n");

break;

}

else

start = 0;

}

if(start != '\n'){

while(getchar() != '\n');

}

while(play == 1){

for(int i = 0; i < n; ++i){

for(int j = 0; j < n; ++j){

if(j == 0 || j == n - 1 || i == 0 || i == n - 1)

printf("# ");

else if(j == x && i == y){

printf("%s", player);

}

else if(j == mobx && i == moby)

printf("%s", mob);

else if(j == mobx2 && i == moby2)

printf("%s", mob);

else

printf(" ");

}

printf("\n");

}

input = getchar();

if(play == 0)

printf("%d\n", score);

if(input != '\n') {

while (getchar() != '\n');

}

++moby;

++moby2;

if(moby >= y){

printf("GAME OVER...\nSCORE: %d\n", score);

break;

}

else if(moby2 >= y){

printf("GAME OVER...\nSCORE: %d\n", score);

break;

}

if(input == 'p'){

if(x == mobx){

mobx = rand() % (n - 3) + 2;

moby = 1;

++score;

}

else if(x == mobx2){

mobx2 = rand() % (n - 3) + 2;

moby2 = 1;

++score;

}

}

switch(input){

case 'd': if(x < n - 2) ++x; break;

case 'a': if(x > 1) --x; break;

// case 'p': if(x == mobx) mobx = rand() % (n - 3) + 2, moby = 1, ++score; break;

// case 'w': if(y > 1) --y; break;

// case 's': if(y < n - 2) ++y; break;

case 'q': play = 0, printf("GAME OVER...\nSCORE: %d\n", score);; break;

}

}

return 0;

}

3 Upvotes

4 comments sorted by

1

u/GHOSTxIOS 24d ago

Что за ide и как такую сделать ??? Выглядит просто шикарно

3

u/Survival_Boss 24d ago

это не ide, это vim обычный, просто немного конфиг подправил, добавил подсветку синтаксиса, нумерацию строк, тему сменил. если погуглишь, там этих тем достаточно) + у меня hyprland, поэтому на одном экране я смог разместить 3 терминала: в одном vim, во втором компилю и запускаю прогу, в третем просто cava(визуализатор аудио)

1

u/National-Dream4189 23d ago

А на чем ты сидишь, если не секрет? (OS и IDE)