您的位置:首页 > 移动开发 > 微信开发

控制台画图的小程序(没有写保存功能,现在看看也懒得写了)

2013-06-25 12:21 633 查看
#include <stdio.h>
#include <windows.h>
#include <conio.h>

typedef struct
{
int x;
int y;
}CursorPos;

int Max_X = 0;                    // 画布行大小,为清屏做准备
int Max_Y = 0;                    // 画布列大小,为清屏做准备

void HideCursor(HANDLE hOutput);
void GotoXy(HANDLE hOutput, int x, int y);
int  GetMousePos(CursorPos *cr);
int  GetKeyPress(HANDLE hOutput, char * choice);
void ShowUsage(HANDLE hOutput);
void InitScreen(HANDLE hOutput);
void ReadFile(HANDLE hOutput);
void SaveFile(HANDLE hOutput);

int main(void)
{
char choice=1;
FILE * fp;                        // 打开文件
CursorPos cursor;                // 鼠标单击的逻辑坐标
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle("控制台画图游戏");
HideCursor(hOutput);
ShowUsage(hOutput);

if((fp=fopen("draw.txt","r"))==NULL)    // 新建文件
fp=fopen("draw.txt","w");
fclose(fp);

while(1)
{
if(GetMousePos(&cursor))
{
GotoXy(hOutput, cursor.x,cursor.y);
printf("%c",choice);
}
GetKeyPress(hOutput, &choice);
}
return 0;
}
int GetMousePos(CursorPos *cursor)
{
HANDLE hInput  = GetStdHandle(STD_INPUT_HANDLE);
INPUT_RECORD inRec;
DWORD res;

ReadConsoleInput(hInput, &inRec, 1, &res);
if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键
{
cursor->x = inRec.Event.MouseEvent.dwMousePosition.X;
if(cursor->x > Max_X)
Max_X = cursor->x;
cursor->y = inRec.Event.MouseEvent.dwMousePosition.Y;
if(cursor->y > Max_Y)
Max_Y = cursor->y;

return 1;
}
return 0;
}
int  GetKeyPress(HANDLE hOutput, char * choice)
{
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
INPUT_RECORD inRec;
DWORD res;
ReadConsoleInput(hInput, &inRec, 1, &res);

if(inRec.EventType == KEY_EVENT)
{
switch(inRec.Event.KeyEvent.wVirtualKeyCode)
{
case VK_ESCAPE  : InitScreen(hOutput);break;
case VK_CONTROL : ReadFile(hOutput);break;
case VK_MENU    : SaveFile(hOutput);break;
default :    * choice =inRec.Event.KeyEvent.uChar.AsciiChar;
}
return 1;
}
return 0;
}

void HideCursor(HANDLE hOutput)
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(hOutput, &cursor_info);
}

/**********移动光标至(x,y)处************/
void GotoXy(HANDLE hOutput, int x, int y)
{
COORD CursorPosd;
CursorPosd.X = x;
CursorPosd.Y = y;
SetConsoleCursorPosition(hOutput, CursorPosd);
}

/**************显示用法*****************/
void ShowUsage(HANDLE hOutput)
{
printf("用法:\n");
printf("一、按住键盘按键和鼠标左键可以改变笔触类型\n");
printf("二、按下 ESC 键清空屏幕\n");
printf("三、按下 CTRL 键打开文件\n");
printf("四、按下 ALT 键保存文件(尚未实现)\n");
printf("按任意键开始画图。");
Max_X = 45;
Max_Y = 6;
getch();
InitScreen(hOutput);
}

/**************清屏函数*****************/
void InitScreen(HANDLE hOutput)
{
int i,j;
GotoXy(hOutput, 0, 0);
for(j=0;j<=Max_Y;j++)
{
for(i=0;i<=Max_X;i++)
printf(" ");
printf("\n");
}
Max_X = Max_Y = 0;
}

void ReadFile(HANDLE hOutput)
{
FILE * fp;
char c;
GotoXy(hOutput,0,0);
fp=fopen("draw.txt","r");
fscanf(fp,"%c",&c);
printf("%c",c);
}

void SaveFile(HANDLE hOutput)
{
FILE * fp;
char c;
int i,j;
GotoXy(hOutput,0,0);
fp=fopen("draw.txt","w");

fclose(fp);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐