Skip to content

Latest commit

 

History

History
144 lines (69 loc) · 2.74 KB

贪吃蛇游戏.md

File metadata and controls

144 lines (69 loc) · 2.74 KB

贪吃蛇游戏

需要实现的功能:

  • 地图绘制
  • 控制蛇的运动
  • 蛇吃食物
  • 蛇撞墙死亡
  • 计算得分
  • 蛇身加减速
  • 暂停游戏

Win32 API 介绍

Windows 这个多作业系统除了处理协调应用程序的执行、分配内存、管理资源外, 它同时也是一个服务中心,调用这个服务中心的各种服务(函数实现),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序,所以便简称为API函数,WIN32 API也就是32位平台的应用程序编程接口。

控制台程序

平常我们运行起来的程序其实就是控制台程序

system()

  • 控制台窗口大小 :30行, 100 列 , mode con cols=100 lines=30

    • Display mode :

      change the size of the command prompt screen buffer mode con[:] [cols=<c>] [lines=<n>]

  • 设置控制台窗口名字 : title 贪吃蛇

  • pause :

    suspend the processing of a batch program, displaying the prompt : Press any key to continue ...

    • If you press CTRL+C to stop a batch program, the following message appears, Terminate batch job (Y/N)?. If you press Y (for yes) in response to this message, the batch program ends and control returns to the operating system.
    • You can insert the pause command before a section of the batch file that you might not want to process. When pause suspends processing of the batch program, you can press CTRL+C and then press Y to stop the batch program.

这些能在控制台窗口执行的命令, 也可以调用 c 语言函数 system 执行

int main()
{
	system("mode con cols=100 lines=30");
    system("title 贪吃蛇");
    system("pause");
}

COORD

C library function

int fsetpos(FILE *stream, const fpos_t *pos)sets the file position of the given stream to the given position

  • stream : the pointer to a FILE object that identifies the stream
  • pos : the pointer to a fpos_t object containing a position previously obtained with fgetpos

主逻辑

开始界面 ,

进行游戏 :初始化 , 游戏循环 :

{

根据输入按键的不同,做出不同反应

每经过一段时间,蛇进行移动

}

结束游戏

int main()
{
    GameStart();
    GameRun();
    Gameend();
    return 0 ;
}
void GameRun()
{
    InitSnake();
    CreateFood();
    
    while(1)
    {
        Pos(64,10);
        print("Score: %d", score);
        if(GetAsyncKeyState(VK_UP)&&status!=D)stats = U;
        else if(GetAsyncKeyState(VK_DOWN)&&status!=U)status = D
            else if(GetAsyncKeyState(VK_LEFT)&&status!=R)status=L;
        else if(GetAsyncKeyState(VK_RIGHT)&&status!=L)status=R;
            
    }
}