相关知识node
1.链表windows
2.句柄函数
3.光标code
代码篇:游戏
// Piano piece.cpp: 定义控制台应用程序的入口点。 //author: COMI //date:2018-7-9 // //#include"stdafx.h" #include<stdio.h> #include<windows.h> #include<time.h> typedef struct PIECE { int x; int y; struct PIECE *next; } Piece; char key; int Score; int cnt = 0; /*函数声明*/ Piece *head; Piece *head2; Piece *createpiece(); void SetPos(int x, int y); void createmap(); int main(); Piece *piecemove(Piece *head); void getkey(); /*------*/ /* 函数名:void SetPos(int x,int y) 函数功能:光标设置 参数:x,y位置坐标 返回值:无 */ void SetPos(int x, int y) ///设置坐标 { COORD tempCrd; ///声明变量--坐标变量 HANDLE Houtput; ///声明变量--句柄 tempCrd.X = x; ///coord position tempCrd.Y = y; ///coord position Houtput = GetStdHandle(STD_OUTPUT_HANDLE); ///使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄 SetConsoleCursorPosition(Houtput, tempCrd); ///设置光标位置 } /* 函数名:void createmap() 函数功能:建立地图 参数:无 返回值:无 */ void createmap() { int i, j; for (i = 8; i<18; i += 3) //x 轴 { SetPos(i, 9); printf("=="); } for (j = 0; j < 10; j++) // y 轴 { SetPos(5, j); printf("||"); SetPos(20, j); printf("||"); } } /* 函数名:Piece *createpiece() 函数功能:建立钢琴块 参数:无 返回值:无 */ Piece *createpiece(Piece *head) //暂时将随机生成的piece定义为区间[8:17] { int x; head = (Piece *)malloc(sizeof(Piece)); head->next = NULL; srand((unsigned)time(NULL)); x = rand() % 4 + 1; if (x == 1) { head->x = 8; } else if (x == 2) { head->x = 11; } else if (x == 3) { head->x = 14; } else if (x == 4) { head->x = 17; } head->y = 0; SetPos(head->x, head->y); printf("■"); return head; } /* 函数名:void piecemove() 函数功能:建立钢琴块 参数:无 返回值:无 */ Piece *piecemove(Piece *head) { Sleep(170); Piece *node, *temp; node = (Piece *)malloc(sizeof(Piece)); node->x = head->x; node->y = head->y + 1; node->next = head; temp = head; SetPos(temp->x, temp->y); printf(" "); free(temp); head = node; SetPos(head->x, head->y); printf("■"); return head; } /* 函数名:void getkey() 函数功能:建立钢琴块 参数:无 返回值:无 */ void getkey() { if (GetAsyncKeyState(VK_SPACE) && (head->x == 8) && (head->y == 9)) { Score += 1; SetPos(7, 15); printf("你作到了 "); } else if (GetAsyncKeyState(VK_LEFT) && (head->x == 11) && (head->y == 9)) { Score += 1; SetPos(7, 15); printf("分数上涨 "); } else if (GetAsyncKeyState(VK_DOWN) && (head->x == 14) && (head->y == 9)) { Score += 1; SetPos(7, 15); printf("继续前进 "); } else if (GetAsyncKeyState(VK_RIGHT) && (head->x == 17) && (head->y == 9)) { Score += 1; SetPos(7, 15); printf("没有错,就是这样 "); } else if (GetAsyncKeyState(VK_F1)) { SetPos(15, 15); system("pause"); } else cnt++; } void help() { SetPos(30, 3); printf("空格 --- 1"); SetPos(30, 11); printf("你共有五次失误机会"); SetPos(30, 4); printf("左键 --- 2"); SetPos(30, 5); printf("下键 --- 3"); SetPos(30, 6); printf("右键 --- 4"); SetPos(30, 7); printf("F1键 --- 暂停"); SetPos(30, 9); printf("从左往右等号依次对应1 2 3 4 "); } int main() { int i; SetPos(30, 1); printf("分数:%d", Score); createmap(); help(); while (1) { head = createpiece(head); for (i = 0; i<9; i++) { head = piecemove(head); } getkey(); SetPos(30, 1); printf("分数:%d", Score); SetPos(40, 1); printf("失误:%d", cnt); for (i = 8; i<18; i += 3) //x 轴 { SetPos(i, 9); printf("=="); } if (cnt == 5) { break; } } SetPos(30, 1); printf("游戏结束"); Sleep(5000); return 0; }