fl3kaucicpp/Snakes/snakes.cpp

177 lines
3.2 KiB
C++
Raw Normal View History

2024-06-07 16:46:17 +00:00
#include <chrono>
2024-05-15 14:29:11 +00:00
#include <iostream>
#include <cstdlib>
2024-05-21 08:34:15 +00:00
#include <ncurses.h>
#include <thread>
2024-06-04 12:17:51 +00:00
2024-05-15 14:29:11 +00:00
using namespace std;
2024-06-04 12:17:51 +00:00
2024-05-15 14:29:11 +00:00
const int width = 80;
const int height = 20;
2024-06-04 12:17:51 +00:00
int X = width/2;
int Y = height/2;
2024-06-06 15:38:06 +00:00
int TailY[100];
int TailX[100];
int sLen = 0;
2024-06-04 12:17:51 +00:00
int sDir = 0;
int score = -1;
int count = 0;
2024-05-15 14:29:11 +00:00
bool gameover;
2024-06-04 12:17:51 +00:00
WINDOW * win;
WINDOW * win2;
void start(){
gameover=false;
}
void gover(){
initscr();
noecho();
curs_set(0);
win = newwin(height, width, 0, 0);
box(win, 0, 0);
mvwprintw(win,10,35,"GAME OVER");
wrefresh(win);
2024-06-07 16:46:17 +00:00
this_thread::sleep_for(chrono::milliseconds(100));
2024-06-04 12:17:51 +00:00
wgetch(win);
endwin();
2024-05-15 14:29:11 +00:00
}
2024-06-04 12:17:51 +00:00
void UserInput(int tmpv) {
nodelay(stdscr, TRUE);
tmpv = getch();
if (tmpv != ERR) {
sDir = tmpv;
2024-05-21 08:34:15 +00:00
}
2024-06-04 12:17:51 +00:00
}
void fruit(int &fX, int &fY){
if (score != -1) {
mvwprintw(win, fY, fX, "F");
}
if (score == -1 || (fX == X && fY == Y)){
score++;
2024-06-06 15:38:06 +00:00
sLen++;
2024-06-04 12:17:51 +00:00
count++;
wrefresh(win2);
fX = 3 + (rand() % 75);
fY = 3 + (rand() % 15);
2024-05-21 08:34:15 +00:00
}
}
2024-05-15 14:29:11 +00:00
2024-06-04 12:17:51 +00:00
void RenderField(){
2024-05-21 08:34:15 +00:00
initscr();
2024-06-04 12:17:51 +00:00
noecho();
curs_set(0);
win = newwin(height, width, 0, 0);
win2 =newwin(3,width,20,0);
box(win2,20,0);
2024-05-21 08:34:15 +00:00
box(win, 0, 0);
wrefresh(win);
2024-06-04 12:17:51 +00:00
wrefresh(win2);
2024-05-21 08:34:15 +00:00
}
2024-05-15 14:29:11 +00:00
2024-06-07 16:46:17 +00:00
void manu(){
initscr();
noecho();
curs_set(0);
win = newwin(height, width, 0, 0);
box(win,0,0);
mvwprintw(win, 1,17, ".d8888. d8b db .d8b. db dD d88888b .d8888. ");
mvwprintw(win, 2,17, "88' YP 888o 88 d8' `8b 88 ,8P' 88' 88' YP ");
mvwprintw(win, 3,17, "`8bo. 88V8o 88 88ooo88 88,8P 88ooooo `8bo. ");
mvwprintw(win, 4,17, " `Y8b. 88 V8o88 88~~~88 88`8b 88~~~~~ `Y8b. ");
mvwprintw(win, 5,17, "db 8D 88 V888 88 88 88 `88. 88. db 8D ");
mvwprintw(win, 6,17, "`8888Y' VP V8P YP YP YP YD Y88888P `8888Y' ");
mvwprintw(win,10, 35, "-Start Game-");
wrefresh(win);
wgetch(win);
endwin();
}
2024-06-04 12:17:51 +00:00
void GameUpdate(int &diff, int &fX, int &fY){
2024-06-06 15:38:06 +00:00
int prevX=TailX[0];
int prevY=TailY[0];
int prev2X,prev2Y;
TailX[0]=X;
TailY[0]=Y;
for(int i=1; i<sLen; i++){
prev2X=TailX[i];
prev2Y=TailY[i];
TailX[i]=prevX;
TailY[i]=prevY;
prevX=prev2X;
prevY=prev2Y;
}
2024-06-04 12:17:51 +00:00
switch(sDir){
case 97:
case 68:
X--;
if (X <= 0)
gameover=true;
break;
case 100:
case 67:
X++;
if (X >= 80)
gameover=true;
break;
case 119:
case 65:
Y--;
if (Y <= 0)
gameover=true;
break;
case 115:
case 66:
Y++;
if (Y >= 20)
gameover=true;
break;
}
mvwprintw(win, Y, X, "o");
2024-06-06 15:38:06 +00:00
for(int i=0;i<sLen;i++){
mvwprintw(win, TailY[i], TailX[i],"o");
}
for(int i=1; i<sLen; i++){
if (TailY[i]==Y && TailX[i]==X)
gameover=true;
}
2024-06-04 12:17:51 +00:00
mvwprintw(win2, 1, 3, "Score: %d", score);
fruit(fX, fY);
wrefresh(win2);
wrefresh(win);
if (count >= 5 && diff != 50){
count = 0;
2024-06-06 15:38:06 +00:00
diff -= 50;}
2024-06-04 12:17:51 +00:00
this_thread::sleep_for(chrono::milliseconds(diff));
}
int main(){
int tmpv;
int fX;
int fY;
int diff = 400;
start();
2024-06-07 16:46:17 +00:00
manu();
2024-06-04 12:17:51 +00:00
while(!gameover){
UserInput(tmpv);
RenderField();
GameUpdate(diff,fX,fY);
//cout<<sDir<<endl;
}
gover();
2024-05-15 14:29:11 +00:00
return 0;
2024-06-04 12:17:51 +00:00
}
2024-05-15 14:29:11 +00:00