1.gotoxy
大家写游戏清屏用什么???
是不是一般都是
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main()
{
while(1)
{
printf("这是一个消息");
system("cls");
}
return 0;
}
发现什么没有
是不是特别闪!
于是,在奇妙的windows.h里面有这样一个函数:
SetConsoleCursorPosition(hOut,pos);
可以用来改变光标位置
光标就是你输出、输入是一闪一闪的那个东西
表示着你输入、输出到哪里了
我们就可以改变它位置
就有了一下两种用法:
1.无闪清屏
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void gotoxy(int x, int y)//覆盖清屏 ,从指定行列覆盖
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
return ;
}
int main()
{
while(1)
{
printf("测试消息");
gotoxy(0,0);//从0,0 覆盖
}
return 0;
}//是不是还是更闪???
//等把Sleep讲了就好了
2.移动到指定地点
对比下面两段代码:
1.
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main()
{
system("mode con cols=50 lines=25");
while(1)
{
for(int i=1;i<=12;i++) cout<<"\n";
for(int i=1;i<=18;i++) cout<<" ";
printf("666");
system("cls");
}
return 0;
}
2.
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void gotoxy(int x, int y)//覆盖清屏
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
return ;
}
int main()
{
system("mode con cols=50 lines=25");
while(1)
{
gotoxy(18,12);
printf("脏脏包 YYDS!!!");
}
return 0;
}
发现了吧,是不是gotoxy更加简洁??(虽然一次感觉有点多,但多次就会写的少些)
(当然,学了window之后可以用别的方法置中)
就是这个:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void gotoxy(int x, int y)//覆盖清屏 ,从指定行列覆盖
{
COORD pos ={(short)x,(short)y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
return ;
}
void prin(string s,int X,int Y)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hConsole, &bInfo);
int y=bInfo.dwMaximumWindowSize.Y,x=bInfo.dwMaximumWindowSize.X;
gotoxy((x-s.size())/2+X,y/2+Y);
cout<<s;
}
int main()
{
system("mode con cols=60 lines=25");
prin("请输出20个字符:\n",0,-1);
string s="";
char c;
prin("",-1,0);
for(int i=1;i<=20;i++)
{
c=cin.get();
if(c=='\n') {i--;continue;}
s+=c;
system("cls");
int k=20-i;
string l="";
if(k==0) l="0";
while(k)
{
l+=char(k%10+'0');
k/=10;
}
reverse(l.begin(),l.end());
prin("请输出"+l+"个字符",0,-1);
prin(s,0,0);
}
return 0;
}
2.Sleep
Sleep 也是 windows.h 中的一员
用法very very 简单:
Sleep(n) //停顿n毫秒
最常见的用法有两种(个人认为)
1.与gotoxy一起用
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void gotoxy(int x, int y)//覆盖清屏
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
return ;
}
int main()
{
while(1)
{
gotoxy(0,0);
printf("666");
Sleep(20);
}
return 0;
}
是不是就不闪了???
但是像这种不断输出体现不了什么
如果是有改变的2D游戏中使用,效果就会特别好
2.文字游戏必备
曾经看过某些人写过的文字游戏
怎么说呢
不咋地
它一口气把要说的全部说了
就像这样:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main()
{
printf("简介 :\n");
printf("这是一串十一字的字符串");
return 0;
}
是不是感觉没有一点神秘感?
用Sleep就会不一样:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
#define printf print
void print(string s,int ti)
{
int l=s.size();
for(int i=0;i<l;i++) cout<<s[i],Sleep(ti);
return ;
}
int main()
{
printf("简介 :\n",40);
printf("这是一串十一字的字符串",40);
return 0;
}
所以写文字游戏的时候,用这个会不会更高级一点呢????