初学api,瞎写点

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值