搜索
查看: 4556|回复: 21
打印 上一主题 下一主题

[原创] [鼠标操控 多颜色]控制台画板 Ver 0.35[带代码]

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-21 19:35:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 virfyf 于 2012-8-21 19:42 编辑


新增了调节颜色 读取、保存以及手气不错的功能
默认保存/读取程序目录下的 paint.sav
啊哈C可编译 (另外附一个编译好的程序)
[mw_shl_code=c,true]#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>

#define LEFT_KEY 1
#define RIGHT_KEY 2

#define bool short

#define GRAPH_MAX_X 80
#define GRAPH_MAX_Y 1000
#define SPACE_LEN 1
#define STR_LEN_MAX 128
#define RAW_COLOR 0
#define CONSOLE_MAX_X 80
#define LUCK_END_Y 25
#define LUCK_WAIT_TIME 2000
#define MENU_COLOR BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE

#define TITLE "控制台画板 Ver 0.35 - Powered By Virfyf"
#define LOAD_STR "[读取]"
#define SAVE_STR "[保存]"
#define COLOR_STR "选取颜色: "
#define LUCK_STR "[手气不错]"
#define HELP_STR "左键 画笔 | 右键 橡皮擦"
#define EGG_STR "恭喜! 这个彩蛋被你发现了!"
#define MORE_ASK_STR "你还想往下翻?"
#define END_STR "------------------------------The End Of The World------------------------------"
#define FILE_NAME "paint.sav"
#define SAVE_SUCCESS "成功保存至 paint.sav!"
#define SAVE_FAIL "保存失败"
#define LOAD_SUCCESS "读取成功!"
#define LOAD_FAIL "读取失败"

HANDLE hOut;
HANDLE hIn;
INPUT_RECORD mouseRec;
DWORD res,task;
CONSOLE_CURSOR_INFO CCI;
const int color[]={
BACKGROUND_RED|BACKGROUND_INTENSITY,
BACKGROUND_GREEN|BACKGROUND_INTENSITY,
BACKGROUND_BLUE|BACKGROUND_INTENSITY,
BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY,
BACKGROUND_BLUE|BACKGROUND_RED|BACKGROUND_INTENSITY,
BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_INTENSITY,
BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY,
BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|FOREGROUND_INTENSITY,
BACKGROUND_GREEN|BACKGROUND_RED|FOREGROUND_INTENSITY,
BACKGROUND_BLUE|BACKGROUND_RED|FOREGROUND_INTENSITY,
BACKGROUND_BLUE|BACKGROUND_GREEN|FOREGROUND_INTENSITY,
BACKGROUND_BLUE|FOREGROUND_INTENSITY,
BACKGROUND_GREEN|FOREGROUND_INTENSITY,
BACKGROUND_RED|FOREGROUND_INTENSITY,
},colorNum=sizeof(color)/sizeof(color[0]);
short nowColor=0,colorLen=1;
const COORD menuPos={0,0},colorStrPos={0,0},colorPos={11,0},savePos={27,0},
loadPos={34,0},luckPos={41,0},helpPos={57,0},eggPos={0,200},moreAskPos={0,270},endPos={0,299};
COORD tempCOORD;
int graph[GRAPH_MAX_X][GRAPH_MAX_Y],endY=0,luckTimes=10;
inline void msgBox(char str[])
{
        MessageBox(NULL,str,"Message",MB_OK | MB_ICONINFORMATION);
}
inline void save()
{
        int i,j;
        FILE* file=fopen(FILE_NAME,"w");
                                                if(!file)
                                                {
                                                        msgBox(SAVE_FAIL);
                                                }
                                                for(j=1;j<=endY;j++)
                                                {
                                                        for(i=0;i<CONSOLE_MAX_X;i++)
                                                        {
                                                                fprintf(file,"%d ",graph[j]);
                                                        }
                                                }
                                                msgBox(SAVE_SUCCESS);
                                                fclose(file);
}
inline void load()
{
        bool tempFlag;
        int i,j,tempInt;
        FILE* file=fopen(FILE_NAME,"r");
                                                if(!file)
                                                {
                                                        msgBox(LOAD_FAIL);
                                                        return;
                                                }
                                                tempFlag=1;
                                                for(j=1;;j++)
                                                {
                                                        for(i=0;i<CONSOLE_MAX_X;i++)
                                                        {
                                                                if(fscanf(file,"%d ",&tempInt)==EOF)
                                                                {
                                                                        tempFlag=0;
                                                                        break;
                                                                }
                                                                graph[j]=tempInt;
                                                                tempCOORD.X=i;
                                                                tempCOORD.Y=j;
                                                                FillConsoleOutputAttribute(hOut,graph[j],1,tempCOORD,&task);
                                                        }
                                                        if(!tempFlag)
                                                                break;
                                                }
                                                msgBox(LOAD_SUCCESS);
                                                fclose(file);
}
void luck()
{
        srand((unsigned)time(NULL));
        int i,x,y;
        if(endY<LUCK_END_Y)
                endY=LUCK_END_Y;
        for(i=0;i<luckTimes;++i)
        {
                x=rand()%CONSOLE_MAX_X;
                y=rand()%(endY-1)+1;
                graph[x][y]=color[rand()%colorNum];
                tempCOORD.X=x;tempCOORD.Y=y;
                FillConsoleOutputAttribute(hOut,graph[x][y],1,tempCOORD,&task);
                Sleep(LUCK_WAIT_TIME/luckTimes);
        }
        if(luckTimes<INT_MAX)
                luckTimes*=2;
}
void initIO()
{
        hOut = GetStdHandle(STD_OUTPUT_HANDLE);
        hIn=GetStdHandle(STD_INPUT_HANDLE);
        DWORD oldConsoleMode;
        CCI.bVisible=1;
        CCI.dwSize=100;
        SetConsoleTitle(TITLE);
        GetConsoleMode(hIn,&oldConsoleMode);
        SetConsoleMode(hIn,oldConsoleMode | ENABLE_MOUSE_INPUT);
        SetConsoleCursorInfo(hOut,&CCI);
        SetConsoleTextAttribute(hOut,RAW_COLOR);
}
int main()
{
        int i;
        initIO();
        WriteConsoleOutputCharacter(hOut,EGG_STR,strlen(EGG_STR),eggPos,&task);
        WriteConsoleOutputCharacter(hOut,MORE_ASK_STR,strlen(MORE_ASK_STR),moreAskPos,&task);
        WriteConsoleOutputCharacter(hOut,END_STR,strlen(END_STR),endPos,&task);
        FillConsoleOutputAttribute(hOut,MENU_COLOR,CONSOLE_MAX_X,menuPos,&task);
        WriteConsoleOutputCharacter(hOut,SAVE_STR,strlen(SAVE_STR),savePos,&task);
        WriteConsoleOutputCharacter(hOut,LOAD_STR,strlen(LOAD_STR),loadPos,&task);
        WriteConsoleOutputCharacter(hOut,LUCK_STR,strlen(LUCK_STR),luckPos,&task);
        WriteConsoleOutputCharacter(hOut,COLOR_STR,strlen(COLOR_STR),colorStrPos,&task);
        WriteConsoleOutputCharacter(hOut,HELP_STR,strlen(HELP_STR),helpPos,&task);
        tempCOORD.X=colorPos.X+nowColor*colorLen;
        tempCOORD.Y=0;
        SetConsoleCursorPosition(hOut,tempCOORD);
        for(i=0;i<=colorNum;++i)
        {
                tempCOORD.X=colorPos.X+colorLen*i;
                tempCOORD.Y=colorPos.Y;
                FillConsoleOutputAttribute(hOut,color,colorLen,tempCOORD,&task);
        }
        while(1)
        {
                ReadConsoleInput(hIn,&mouseRec,2,&res);
                if(mouseRec.Event.MouseEvent.dwMousePosition.Y==0)
                {
                                if(mouseRec.Event.MouseEvent.dwButtonState==LEFT_KEY && mouseRec.Event.MouseEvent.dwEventFlags==0)
                                {
                                        if(mouseRec.Event.MouseEvent.dwMousePosition.X>=colorPos.X && mouseRec.Event.MouseEvent.dwMousePosition.X<colorPos.X+colorNum*colorLen)
                                        {
                                                nowColor=(mouseRec.Event.MouseEvent.dwMousePosition.X-colorPos.X)/colorLen;
                                                tempCOORD.Y=0;
                                                tempCOORD.X=mouseRec.Event.MouseEvent.dwMousePosition.X;
                                                SetConsoleCursorPosition(hOut,tempCOORD);
                                                MessageBeep(MB_ICONEXCLAMATION);
                                        }
                                        else if(mouseRec.Event.MouseEvent.dwMousePosition.X>=savePos.X && mouseRec.Event.MouseEvent.dwMousePosition.X<savePos.X+strlen(SAVE_STR))
                                        {
                                                save();
                                        }
                                        else if(mouseRec.Event.MouseEvent.dwMousePosition.X>=loadPos.X && mouseRec.Event.MouseEvent.dwMousePosition.X<loadPos.X+strlen(LOAD_STR))
                                        {
                                                load();
                                        }
                                        else if(mouseRec.Event.MouseEvent.dwMousePosition.X>=luckPos.X && mouseRec.Event.MouseEvent.dwMousePosition.X<luckPos.X+strlen(LUCK_STR))
                                        {
                                                luck();
                                        }
                                }
                                continue;
                        }
                         switch(mouseRec.Event.MouseEvent.dwButtonState)
                         {
                                case LEFT_KEY:
                                        if(mouseRec.Event.MouseEvent.dwMousePosition.Y>endY)
                                                endY=mouseRec.Event.MouseEvent.dwMousePosition.Y;
                                        FillConsoleOutputAttribute(hOut,color[nowColor],1,mouseRec.Event.MouseEvent.dwMousePosition,&task);
                                        graph[mouseRec.Event.MouseEvent.dwMousePosition.X][mouseRec.Event.MouseEvent.dwMousePosition.Y]=color[nowColor];
                                         break;
                                 case RIGHT_KEY:
                                        FillConsoleOutputAttribute(hOut,RAW_COLOR,1,mouseRec.Event.MouseEvent.dwMousePosition,&task);
                                        graph[mouseRec.Event.MouseEvent.dwMousePosition.X][mouseRec.Event.MouseEvent.dwMousePosition.Y]=RAW_COLOR;
                                         break;
                        }
        }
}[/mw_shl_code]
有什么建议、发现了什么BUG、或是想分享自己画的作品,直接回贴就行了.
[mw_shl_code=c,true]/*里面暗藏有一个彩蛋哦*/[/mw_shl_code]

控制台画板.zip

6.97 KB, 下载次数: 283

评分

参与人数 1啊哈币 +10 收起 理由
啊哈磊 + 10 兄弟你太强悍啦

查看全部评分

推荐
发表于 2017-9-3 11:15:00 | 只看该作者
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!{:soso__13165319925079696742_2:}{:soso__13165319925079696742_2:}


捕获7.PNG (21.2 KB, 下载次数: 13)

捕获7.PNG
推荐
发表于 2014-10-24 21:41:17 | 只看该作者
#include <stdio.h>
main()
{
        int a=1;
    while(1)
    {
                printf("第%d次顶……",a);
        a++;
        _sleep(1000);
    }
}
推荐
发表于 2012-8-21 20:09:50 | 只看该作者
兄弟你太强悍啦
板凳
 楼主| 发表于 2012-8-21 20:24:46 | 只看该作者

点评

内联函数可用啊哈C编译?  发表于 2018-1-1 08:43
画图能力不错撒  发表于 2013-1-22 21:37
地板
发表于 2012-8-21 20:53:11 | 只看该作者
5#
发表于 2012-8-21 21:02:44 | 只看该作者
virfyf 发表于 2012-8-21 20:24

你太搞笑了
6#
发表于 2012-8-21 21:07:57 | 只看该作者
virfyf 发表于 2012-8-21 20:24

你可以画一个 " virfyf专用顶帖图 "
7#
发表于 2012-12-27 07:46:57 | 只看该作者
介个则呢吗没办法画呢?
8#
发表于 2013-9-5 20:39:51 | 只看该作者
手气不错有什么用?
9#
发表于 2013-9-5 20:39:56 | 只看该作者
手气不错有什么用?
10#
发表于 2013-9-5 20:40:03 | 只看该作者
手气不错有什么用?
11#
发表于 2014-10-24 21:38:02 | 只看该作者
太厉害了!!!
12#
发表于 2014-10-24 21:38:14 | 只看该作者
第一次顶……
13#
发表于 2014-10-24 21:38:31 | 只看该作者
第二次顶……
14#
发表于 2014-10-24 21:38:42 | 只看该作者
第三次顶……
15#
发表于 2014-10-24 21:38:54 | 只看该作者
第四次顶……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表