#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <functional>
#include <algorithm>
#include <queue>
#include <ctime>
#include <windows.h>
#include <windowsx.h>
#include <stdlib.h>
#include <conio.h>
#define endll printf("\n")
using namespace std;
int map[100][100] = {0};
const int Food_sum = 8;
const int FIRST_speed = 100;
const int SECOND_speed = 200;
const int Height_size = 25;
const int Wide_size = 36;
const char* person = "□";
const char* Bundary = "■";
const char* FOOD = "*";
void HideConsole();
inline int RandomNumble(int a,int b);
inline void GetEvenNumbkle(int &x);
void gotoXY(int x,int y);
void gotoXY(COORD CD);
void printSCREEN();
void PrintFOOD();
void clearFood(COORD cd);
void ClearCOORD(const COORD& cd,int i = 0);
void StartPLAY();
void initQUE();
void RebornFOOD();
void RefreshScore();
queue < COORD > qFOOD;
COORD personCD;
int score = 0;
int main()
{
srand((int)time(NULL));
memset(map,0,sizeof(map));
HideConsole();
printSCREEN();
personCD.X = 28;
personCD.Y = Height_size-1;
map[personCD.Y][personCD.X] = 1;
StartPLAY();
return 1;
}
void StartPLAY(){
initQUE();
while (1){
PrintFOOD();
Sleep(400);
while( _kbhit() ){
int b;
b = getch();
b = getch();
ClearCOORD(personCD,1);
map[personCD.Y][personCD.X] = 0;
map[personCD.Y][personCD.X+1] = 0;
if ( b == 75 ){
if (personCD.X-2 <= 0){
gotoXY(personCD); printf("%s",person);
continue;
}
personCD.X -= 2;
}else{
if (personCD.X+2 >= Wide_size*2){
gotoXY(personCD); printf("%s",person);
continue;
}
personCD.X += 2;
}
gotoXY(personCD); printf("%s",person);
map[personCD.Y][personCD.X] = 1;
map[personCD.Y][personCD.X+1] = 1;
}
}
}
void initQUE(){
gotoXY(personCD);
printf("%s",person);
while(!qFOOD.empty()) qFOOD.pop();
COORD NOWCD;
int n = Food_sum;
while(n--){
//Sleep(600);
int x = RandomNumble(2,Wide_size*2-1);
int y = RandomNumble(2,10);
NOWCD.X = x;
NOWCD.Y = y;
qFOOD.push(NOWCD);
}
gotoXY(5,Height_size+2);
cout <<"Score : 0";
}
void RebornFOOD(){
COORD NOWCD;
int x = RandomNumble(2,Wide_size-1);
NOWCD.X = x;
NOWCD.Y = 1;
gotoXY(NOWCD);
printf("%s",FOOD);
NOWCD.Y++;
qFOOD.push(NOWCD);
}
void PrintFOOD(){
int ti = qFOOD.size();
int tt = Food_sum - qFOOD.size();
COORD NOWCD;
while(tt--){
RebornFOOD();
}
while(ti--){
NOWCD = qFOOD.front(); qFOOD.pop();
clearFood(NOWCD);
if (NOWCD.Y == Height_size) continue;
if( map[NOWCD.Y][NOWCD.X] == 0 ){
gotoXY(NOWCD);
printf("%s",FOOD);
}else {
score++;
RefreshScore();
}
NOWCD.Y++;
qFOOD.push(NOWCD);
}
return;
}
void RefreshScore(){
gotoXY(14,Height_size+2);
printf("%d",score);
}
void clearFood(COORD cd){
if (cd.Y == 0 ) return;
cd.Y--;
if( map[cd.Y][cd.X] == 1 ) return;
ClearCOORD(cd);
}
void ClearCOORD(const COORD& cd,int i){
gotoXY(cd);
printf(" ");
if (i == 1) printf(" ");
}
void gotoXY(int x,int y){
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
COORD CD ;
CD.X = x;
CD.Y = y;
SetConsoleCursorPosition(hOut ,CD);
}
void gotoXY(COORD CD){
HANDLE hOut = GetStdHandle( STD_OUTPUT_HANDLE );
SetConsoleCursorPosition(hOut ,CD);
}
void printSCREEN(){
for (int i = 0;i <= Height_size;++i){
for (int j = 0;j <= Wide_size;++j){
if (i == 0||i == Height_size || j == 0|| j == Wide_size)
printf("%s",Bundary);
else printf(" ");
}
printf("\n");
}
}
void HideConsole(){
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible = false;
SetConsoleCursorInfo(hOut,&cci);
}
inline int RandomNumble(int a,int b){
return ( rand() % (b-a+1) )+a;
}
inline void GetEvenNumbkle(int &x){
if (x%2) x ^= 1;
}
初学api,瞎写点
最新推荐文章于 2024-06-25 06:33:07 发布