1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言获取xbox手柄按键 让游戏支持手柄输入(控制台)字符打飞机

c语言获取xbox手柄按键 让游戏支持手柄输入(控制台)字符打飞机

时间:2020-03-11 00:54:42

相关推荐

c语言获取xbox手柄按键 让游戏支持手柄输入(控制台)字符打飞机

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

//定义前景颜色

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("未连接游戏手柄 ");

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。