C++做游戏技巧 01 Sleep停顿与gotoxy无闪清屏

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;
}

所以写文字游戏的时候,用这个会不会更高级一点呢????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值