控制台画图的小程序(没有写保存功能,现在看看也懒得写了)
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); }
相关文章推荐
- VFW实例程序。简单 “视频捕获”,没有压缩、线程、保存、等更多的功能
- 一个汇编语言的学生管理(当时没有做成功,现在也懒得改了,可以随便看看)
- django程序没有问题,保存远地测试数据库,save没问题,控制台也显示update成功,但是在数据库检索数据没有存进去
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- xilinx SDK工具取消程序保存后自动编译的功能
- 给VC的控制台程序添加内存泄漏自动检测功能
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- perl work-answer程序结构大概如此,另外,查找那几个判断,你再看看,我手上没有资料,不太确定
- 怎样让Java图形界面程序启动时没有控制台窗口?
- [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- 包罗万象的JS功能,配上刚刚发布的CSS简直是完美,没有前端的IT好好看看
- 什么功能都没有 记事本程序
- vc 利用无名管道 控制台程序实现cmd功能
- C#控制台程序中使用剪贴板将Excel的单元格区域保存为图片
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 给VC的控制台程序添加内存泄漏自动检测功能
- [VB.NET]VB.NET中用drawImage()画图以后怎么保存?程序代码如下:
- 控制台程序实现暂停功能