该楼层疑似违规已被系统折叠隐藏此楼查看此楼
//定义前景颜色
enum ConsoleTextColor{CTC_RED = FOREGROUND_INTENSITY | FOREGROUND_RED,
CTC_DARKRED = FOREGROUND_RED,
CTC_GREEN = FOREGROUND_INTENSITY | FOREGROUND_GREEN,
CTC_DARKGREEN = FOREGROUND_GREEN,
CTC_BLUE = FOREGROUND_INTENSITY | FOREGROUND_BLUE,
CTC_DARKBLUE = FOREGROUND_BLUE,
CTC_YELLOW = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN,
CTC_DARKYELLOW = FOREGROUND_RED | FOREGROUND_GREEN,
CTC_PURPLE = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE,
CTC_DARKPURPLE = FOREGROUND_RED | FOREGROUND_BLUE,
CTC_CYAN = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE,
CTC_WHITE = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
CTC_DARKWHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
CTC_BLACK = 0};
//定义背景颜色
enum ConsoleBackGroundColor{CBC_RED = BACKGROUND_INTENSITY | BACKGROUND_RED,
CBC_GREEN = BACKGROUND_INTENSITY | BACKGROUND_GREEN,
CBC_BLUE = BACKGROUND_INTENSITY | BACKGROUND_BLUE,
CBC_YELLOW = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN,
CBC_PURPLE = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE,
CBC_CYAN = BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE,
CBC_WHITE = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE,
CBC_BLACK = 0};
//设置颜色
void setConsoleColor(ConsoleTextColor textColor = CTC_WHITE, ConsoleBackGroundColor backgroundColor = CBC_BLACK)
{
//STD_ERROR_HANDLE;
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, textColor | backgroundColor);
}
void gotoxy(int x,int y) //光标移到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; //第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup() //数据初始化
{
HideCursor();
life = 9;
score = 0;
enemyMoveSpeed = 15;
showed_boom = 0;
speed = 0;
for(int i = 0;i < High;i ++)
{
for(int j = 0;j < Width;j ++)
{
canvas[i][j] = 0;
}
}
position_x = Width/2;
position_y = High/2;
canvas[position_y][position_x] = 1;
for(int k = 0;k < EnemyNum;k ++) // 随机生成敌机
{
enemy_y[k] = rand() % 3;
do
{
enemy_x[k] = rand() % Width;
}
while(k > 0 && enemy_x[k] == enemy_x[k - 1]);
canvas[enemy_y[k]][enemy_x[k]] = 3;
}
bulletWidth = 0;
}
void gameover() //游戏结束
{
gotoxy(Width/2-4,High/2);
setConsoleColor(CTC_PURPLE, CBC_BLACK);
printf("游戏结束!\n");
Vibrate(1,1);
Beep(175,200);
Vibrate(0,0);
gotoxy(1,High/2+2);
setConsoleColor(CTC_DARKWHITE, CBC_BLACK);
printf(" 按键盘'R'或手柄'B'\n 重新开始游戏");
char input;
while(1)
{
XINPUT_GAMEPAD gamepad;
while(XInputGetState(0, &(m_ControllerState)) == ERROR_SUCCESS)
{
gamepad = m_ControllerState.Gamepad;
if(gamepad.wButtons & XINPUT_GAMEPAD_B) // 按下手柄‘左’
{
system("cls");
startup();
return;
}
break;
}
if(kbhit())
{
input = getch();
if((input == 'r')|| (input =='R')) break;
}
Sleep(20);
}
system("cls");
startup();
}
void show() //显示画面
{
gotoxy(0,0); //光标移到原点
setConsoleColor(CTC_YELLOW, CBC_BLACK);
printf(" * 字符打飞机 *\n");
setConsoleColor(CTC_DARKWHITE, CBC_BLACK);
printf("Xbox 手柄震动版 by Hoffee\n");
for(int i = 0;i < High;i ++)
{
for(int j = 0;j < Width;j ++)
{
if(canvas[i][j] == 1)
{
setConsoleColor(CTC_WHITE, CBC_BLACK);
printf("*"); //输出飞机
}
else if(canvas[i][j] == 2)
{
setConsoleColor(CTC_YELLOW, CBC_BLACK);
printf(":"); //输出子弹
}
else if(canvas[i][j] == 3)
{
setConsoleColor(CTC_CYAN, CBC_BLACK);
printf("@"); //输出敌机
}
else if(canvas[i][j] == 4)
{
setConsoleColor(CTC_RED, CBC_RED);
printf(" "); //输出地面爆炸效果
}
else if(canvas[i][j] == 5)
{
setConsoleColor(CTC_RED, CBC_YELLOW);
printf(" "); //输出地面爆炸效果
}
else
{
setConsoleColor(CTC_WHITE, CBC_BLACK);
printf(" "); //输出空格
}
}
printf("\n");
}
setConsoleColor(CTC_DARKWHITE, CBC_BLACK);
printf("得分: %d ",score);
printf(" 生命值: %d\n",life);
printf("键盘WASD方向 SPACE发射子弹\n");
gotoxy(0,22);
if(pad == 1)
{ setConsoleColor(CTC_YELLOW, CBC_BLACK);
printf("已经连接游戏手柄 X发射子弹");
}
else if(pad == 0)
{
setConsoleColor(CTC_DARKWHITE, CBC_BLACK);
printf("未连接游戏手柄 ");
}
}
如果觉得《c语言 手柄 api 让游戏支持手柄输入(控制台)字符打飞机》对你有帮助,请点赞、收藏,并留下你的观点哦!