## 标题在c语言书上看到的,作为笔记来记录一下
1.定位光标到屏幕指定位置`
解决的思路是,首先使用Windows API 中定义的结构体类型COORD来表示字符在控制台屏幕上的坐标。结构体COORD的定义为
typedef struct_COORFD
{
SHORT x; //水平坐标
SHORT y; //垂直坐标
}COORD;
然后使用Windows API 函数GetStdHandle(),从一个特定的标准设备(例如标准输出)获取标识设备的句柄(用来标识不同设备的一个数组)。最后,使用Windows API函数SetConsoleCur-sorPosition()定位光标的位置。这个封装后的定位光标到坐标点(x,y)的函数如下:
void Gotoxy(int x,int y)
{
COORD pos = {
x,y};
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
SetConsoleCursorPosition(hOutput,pos); // 定位光标位置
}
使用这个函数可以避免清屏和反复刷新屏幕带来的闪烁效应。使用下面的函数来隐藏光标
void HideCursor()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle,&CursorInfo); //获取控制台光标信息
CursorInfo.bVisible = 0; //隐藏控制台光标
SetConsoleCursorInfo(handle,&CursorInfo); // 设置控制台光标状态
}
下面是书上的代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define DIS 22
#define BLAN 9 //上下两部分柱子墙之间的缝隙
typedef struct bird
{
COORD pos;
int score;
}BIRD;
void CheckWall(COORD wall[]); //显示柱子墙体
void PrtBird(BIRD *bird); //显示小鸟
int CheckWin(COORD *wall, BIRD *bird); //检测小鸟是否碰墙或超出上下边界
void Begin(BIRD *bird); // 显示上下边界和分数
BOOL SetConsoleColor(unsigned int aAttributes); //设置颜色
void Gotoxy(int x,int y)