课堂随机提问回答问题神器三

这个博客介绍了一个使用C++编写的抽奖系统,该系统从一个文本文件中读取参与者名单,通过鼠标右键点击控制台来选取幸运观众。程序通过键盘监听实现交互,并使用Windows API设置控制台颜色以增加视觉效果。程序还包括了隐藏光标的选项,以及暂停功能,便于观察结果。
摘要由CSDN通过智能技术生成

1.在这个.cpp文件下新建一个名字为example.txt文件,

2.在example.txt 文件中输入班级同学的名字,以空格作为分隔

3.运行此代码,用鼠标右键点击控制台选出幸运观众

4.输入空格重新进行下一次抽选,再次点击鼠标右键产生幸运观众。

#include <fstream>
#include <iostream>
#include <string>
//打印彩色的helloworld
#define Kong 32
#include <windows.h>
//GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
#include <iostream>
#include <ctime>

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//mouse 

#include <conio.h>
#include <cstdlib>
#include <string.h>
#include <string>

struct data_f {
    char num[100][100];
    int length;
};
using namespace std;
//从文件中加载数据,需要在同级别目录下新建一个文本文件,名字叫做example.txt-------------------------------------------------------------

//-------------------------------------------------
data_f  load_data(data_f& data) {

    int i, datalen = 0;
    ifstream file("example.txt");
    while (!file.eof())
        file >> data.num[datalen++];
    file.close();
    data.length = datalen;
    return data;
}
/*
int main (){
    data_f data;
     load_data(data);
    for(int i=0;i<data.length;i++){
        cout<<data.num[i]<<" ";
    }
    getchar();
}
*/
/*
   0 = 黑色      8 = 灰色
   1 = 蓝色      9 = 淡蓝色
   2 = 绿色      A = 淡绿色
   3 = 浅绿色    B = 淡浅绿色
   4 = 红色      C = 淡红色
   5 = 紫色      D = 淡紫色
   6 = 黄色      E = 淡黄色
   7 = 白色      F = 亮白色
*/
//在指定位置打印 指定颜色的 字体,  第一个参数 为 位置参数, 第二个参数为 颜色
void SetColor(COORD pos, unsigned short ForeColor = 3) {

    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //得到句柄
    //GetStdHandle()它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),
    //可以传入三个参数,STD_OUTPUT_HANDLE 表示标准输出的句柄
    //COORD pos={50,10};
    SetConsoleCursorPosition(hCon, pos);//SetConsoleCursorPosition()是API中定位光标位置的函数。
    SetConsoleTextAttribute(hCon, ForeColor);//设置控制台文字属性

}
void hidden()//隐藏光标,不让光标显示
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(hOut, &cci);
    cci.bVisible = 0;//赋1为显示,赋0为隐藏
    SetConsoleCursorInfo(hOut, &cci);
}
int main() {

    COORD pos1 = { 50,10 };
    COORD pos2 = { 50,10 };
    COORD pos3 = { 50,20 };
    COORD pos4 = { 0,0 };


    int i = 0;//控制颜色
    pos1.Y = 10;
    char p, a;
    data_f data;
    load_data(data);
    int t;
    srand(time(0)); 
        string temp;
    int left, up;
    while (1) {


        left = rand() % 500;
        t = rand() % data.length;       // random number 1-10
        temp = data.num[t];
        //pos2.X=left;
        SetColor(pos2, left);
        hidden();
        //  increaseFontSize();
        cout << "  " << temp << " " << endl;
        Sleep(20);
        system("CLS");
        
              
        
            
                  while ( KEY_DOWN(VK_RBUTTON))
                    {
                        
                        SetColor(pos2, 2);
                        cout << "stand up ..." << temp << endl;
          
                        system("pause");
                    }
        
       

/*
printf("鼠标右键是否按下:");
        if (KEY_DOWN(VK_RBUTTON))printf("是");
        else printf("否");
        printf("\n");
*/
        

        /*while (_kbhit())
        {
            if ((p = _getch()) == -32) p = _getch();
            if (p == Kong) {
                // increaseFontSize();
                SetColor(pos2, 2);
                cout << "stand up ..." << temp << endl;

                system("pause");
                break;
            }
        }*/


    }
    getchar();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值