| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 616 人关注过本帖
标题:控制台下贪食蛇闪屏严重
只看楼主 加入收藏
o0RS0o
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-3-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
控制台下贪食蛇闪屏严重
菜鸟第一次写贪食蛇
结果发现闪屏十分严重

大神们 有没有什么解决方法_(:з」∠)_
搜索更多相关主题的帖子: 贪食蛇 
2014-12-21 13:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
清屏方法不对呗

授人以渔,不授人以鱼。
2014-12-21 13:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
送你一段在Windows下控制台清屏的代码,看得懂就拿去用吧:
程序代码:
#include <stdio.h>
#include <Windows.h>
#include "MyConsole.h"
#include "MyTools.h"

static HANDLE _Output = GetStdHandle(STD_OUTPUT_HANDLE);
static SHORT _MaxHeight = 25;
static SHORT _MaxWidth = 80;

// 设置窗口标题文字
void SetWindowTitle(const char* title)
{
    SetConsoleTitleA(title);
}

// 获取窗口标题文字
char* GetWindowTitle(char* title, size_t maxLength)
{
    GetConsoleTitleA(title, maxLength);
    return title;
}

// 设置窗口尺寸
void SetWindowSize(SHORT rows, SHORT columns)
{
    // 修改全局变量
    COORD largestSize = GetLargestConsoleWindowSize(_Output);
    _MaxWidth = (columns <= largestSize.X) ? columns : largestSize.X;
    _MaxHeight = (rows <= largestSize.Y) ? rows : largestSize.Y;

    // 设置缓冲区尺寸
    COORD bufferSize;
    bufferSize.X = _MaxWidth;
    bufferSize.Y = _MaxHeight;

    // 设置窗口尺寸
    SMALL_RECT rectangle;
    rectangle.Left = 0;
    rectangle.Top = 0;
    rectangle.Right = _MaxWidth - 1;
    rectangle.Bottom = _MaxHeight - 1;
   
    SetConsoleScreenBufferSize(_Output, bufferSize);
    SetConsoleWindowInfo(_Output, TRUE, &rectangle);
}

// 返回窗口最大列数
SHORT GetWindowColumns(void)
{
    return _MaxWidth;
}

// 返回窗口最大行数
SHORT GetWindowRows(void)
{
    return _MaxHeight;
}

// 把光标定位到指定位置
void GotoXY(SHORT row, SHORT column)
{
     if ((column >= 0) && (column < _MaxWidth) && (row >= 0) && (row < _MaxHeight))
    {
        COORD pos;
        pos.X = column;
        pos.Y = row;
        SetConsoleCursorPosition(_Output, pos);
    }
}

// 获取光标位置
COORD GetCursorPosition(void)
{
    CONSOLE_SCREEN_BUFFER_INFO screenInfo;
    GetConsoleScreenBufferInfo(_Output, &screenInfo);
    return screenInfo.dwCursorPosition;
}

// 将指定的前景色和背景色组合成文本属性
WORD CombineTextAttribute(BYTE fore, BYTE back)
{
    return (WORD) (back << 4) + fore;
}

// 将指定的文本属性分解为前景色和背景色
void SplitTextAttribute(WORD attr, BYTE* fore, BYTE* back)
{
    *fore = attr & 0xf;
    *back = (attr >> 4);
}

// 用指定的前景色和背景色设置输出文本颜色属性并返回指定的属性
WORD SetTextColor(BYTE fore, BYTE back)
{
    WORD attr = CombineTextAttribute(fore, back);
    SetConsoleTextAttribute(_Output, attr);
    return attr;
}

// 用指定的颜色属性清除一块矩形区域
void ClearWindow(SMALL_RECT rect, WORD attr)
{
    COORD size;
    size.X = rect.Right - rect.Left + 1;
    size.Y = rect.Bottom - rect.Top + 1;

    CHAR_INFO* buffer = new CHAR_INFO[size.X * size.Y];
    for (int index = 0; index < (size.X * size.Y); ++index)
    {
        buffer[index].Char.AsciiChar = ' ';
        buffer[index].Attributes = attr;
    }
    FillRegion(buffer, rect);
    delete [] buffer;
}

// 用预置的文本填充指定区域
void FillRegion(CHAR_INFO* buffer, SMALL_RECT region)
{
    COORD bufferSize;
    bufferSize.X = region.Right - region.Left + 1;
    bufferSize.Y = region.Bottom - region.Top + 1;

    COORD pos;
    pos.X = 0;
    pos.Y = 0;

    WriteConsoleOutputA(_Output, buffer, bufferSize, pos, &region);
}



授人以渔,不授人以鱼。
2014-12-21 23:33
o0RS0o
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-3-16
收藏
得分:0 
谢谢
2014-12-26 17:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你懂用了?

授人以渔,不授人以鱼。
2014-12-26 20:19
o0RS0o
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-3-16
收藏
得分:0 
以下是引用TonyDeng在2014-12-26 20:19:32的发言:

你懂用了?


前两天用光标移动重写了 就没有闪烁了
2014-12-26 21:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵

授人以渔,不授人以鱼。
2014-12-26 21:14
快速回复:控制台下贪食蛇闪屏严重
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018792 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved