void getxy(HANDLE hout,int*i,int*j)//移动光标到指定位置 { int ch; int m,n;//棋子移动时的坐标 do { ch=0; if (kbhit())//kbhit() 是一个C和C++函数,用于非阻塞地响应键盘输入事件,为 “keyboard hit(键盘敲击)”的简写。 //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。 { ch=getch();//getch() 接受任意键的输入,不用按回车就返回,返回值是输入值的ascll码 } switch(ch) { case 72: *i-=1; break;//上 case 80: *i+=1; break;//下 case 75: *j-=1; break;//左 case 77: *j+=1; break;//右 } if (*i<0) *i=11+*i; if (*i>10) *i=11-*i; if (*j<0) *j=11+*j; if (*j>10) *j=11-*j; m=*j;n=*i; gotoxy(hout,m*2,n); }while (ch!=13); }
时间: 2024-04-07 09:28:21 浏览: 80
这是一个移动光标到指定位置的函数,使用了键盘输入事件来控制光标的移动,其中:
- HANDLE hout:控制台窗口的句柄。
- int* i, int* j:表示光标当前的位置,通过指针传递,函数内部改变位置的值可以被外部函数获取。
- kbhit():C和C++函数,用于非阻塞地响应键盘输入事件,为 “keyboard hit(键盘敲击)”的简写。检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。
- getch():接受任意键的输入,不用按回车就返回,返回值是输入值的ascll码。
- switch(ch):根据不同的键盘输入事件进行不同的操作,如上下左右移动。
- gotoxy(hout, m*2, n):将光标移动到指定位置,其中m、n为光标的行列坐标,m*2是因为控制台窗口中每个字符占两个位置。直到输入回车键(ch==13)时停止循环。
这段代码可能是用于控制台下的一个棋盘游戏中,用于控制棋子的移动。
相关问题
int main() { HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); int i=0,j=0; int iTemp = 0,jTemp = 0,countTemp = 0; int colorFlag = 0; char op; for(i=0;i<12;i++) for(j=0;j<12;j++) qipan[i][j]=2; while(1) { gotoxy(hout,0,0); print(); gotoxy(hout,49,1); if (!color) { printf("黑棋下\n"); } else { printf("白棋下\n"); } gotoxy(hout,41,2); i=0; j=0; getxy(hout,&i,&j); i++; j++; if((2 != qipan[i-1][j-1])) { gotoxy(hout,41,2); printf("提示:该位置已经有棋子了! \a \n"); fflush(stdin); continue; } qipan[i-1][j-1]=color; color=(color+1)%2; gotoxy(hout,0,0); print(); win(); system("cls"); } return 0;
这段代码是五子棋游戏的主函数 `main()`,包括游戏的初始化、游戏循环、棋子下落、判断胜负等功能。具体来说:
- `HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE)` 是获取控制台窗口句柄。
- `iTemp`、`jTemp`、`countTemp`、`colorFlag` 分别是行列的临时变量、计数器和棋子颜色,`op` 是操作符。
- `for` 循环初始化棋盘,将所有位置的棋子颜色都设为 2。
- `while` 循环是游戏的主循环,游戏在此循环中进行。
- `print()` 函数用于在控制台上打印当前的棋盘状态。
- `getxy()` 函数用于获取鼠标点击的位置。
- `qipan[i-1][j-1]=color` 将当前棋子颜色赋值给棋盘上的对应位置。
- `color=(color+1)%2` 是改变下一次棋子的颜色。
- `win()` 函数用于判断是否有玩家胜利。
- `system("cls")` 是清空控制台屏幕。
总体来说,这段代码实现了五子棋游戏的核心功能。
阅读程序回答下面问题。 1)程序中是否存在抽象类?如果有是哪一个?(3分) 2)写出程序的输出结果。(3分) #include<iostream> using namespace std; class Base { public: virtual void getxy( int i,int j = 0 ) { x = i; y = j; } virtual void fun() = 0 ; protected: int x , y; }; class A: public Base { public: void fun() { cout<<"x = "<<x<<'\t'<<"y = x * x = "<<x*x<<endl; } }; class B:public Base { public: void fun() { cout<< "x = " << x << ‘\t' << "y = " << y << endl; cout << "y = x / y = " << x / y << endl; } } ; int main() { Base * pb; A obj1; B obj2; pb = &obj1; pb -> getxy( 20 ); pb -> fun(); pb = &obj2; pb -> getxy( 200, 50 ); pb -> fun(); return 0; }
1)程序中存在抽象类,这个类是Base类,其中纯虚函数fun()使得Base类成为了抽象类。
2)程序的输出结果如下:
```
x = 20 y = x * x = 400
x = 200 y = 50
y = x / y = 4
```
首先,我们定义了一个Base类作为抽象类,其中有一个纯虚函数fun()。然后,我们定义了两个派生类A和B,它们都继承了Base类,并且实现了fun()函数。在主函数中,我们先创建了一个A类对象obj1,并调用Base类的getxy()函数对x和y进行初始化,然后调用Base类的fun()函数,但是此时会调用A类的fun()函数,输出x和y的值及y的计算结果。接着,我们又创建了一个B类对象obj2,并对x和y进行初始化,然后调用Base类的fun()函数,但是此时会调用B类的fun()函数,输出x和y的值以及y的计算结果。
阅读全文