• 2019年第三次课程设计实验报告


    一丶实时时钟

    二丶实验项目功能描述

    通过程序来实现实时时针转动,定义静态秒针,通过改变角度使得秒针转动,,通过系统变量获取当前时间,秒针的角度由当前时间决定,再添加分钟和时针,最后添加表盘刻度实现程序。

    三丶项目模块结构

    游戏最终代码:

    #include <graphics.h>
    #include <conio.h>
    #include <math.h>
    
    #define High 480  // 游戏画面尺寸
    #define Width 640
    #define	PI	3.14159
    
    int main()
    {
    	initgraph(Width, High);		// 初始化 640 x 480 的绘图窗口	
    	int center_x,center_y;      // 中心点的坐标,也是表的中心
    	center_x = Width/2;
    	center_y = High/2;
    	int secondLength = Width/5;           // 秒针的长度
    	int minuteLength = Width/6;           // 分针的长度
    	int hourLength = Width/7;             // 时针的长度
    	
    	int secondEnd_x,secondEnd_y;    // 秒针的终点
    	int minuteEnd_x,minuteEnd_y;    // 分针的终点
    	int hourEnd_x,hourEnd_y;    // 时针的终点
    	float secondAngle;       // 秒钟对应的角度
    	float minuteAngle;       // 分钟对应的角度
    	float hourAngle;         // 时钟对应的角度
    	
    	SYSTEMTIME ti;				// 定义变量保存当前时间
    	
    	BeginBatchDraw();
    	while (1)
    	{
    		// 绘制一个简单的表盘
    		setlinestyle(PS_SOLID, 1);
    		setcolor(WHITE);
    		circle(center_x, center_y, Width/4);
    		
    		// 画刻度
    		int x, y,i;
    		for (i=0; i<60; i++)
    		{
    			x = center_x + int(Width/4.3 * sin(PI * 2 * i / 60));
    			y = center_y + int(Width/4.3 * cos(PI * 2 * i / 60));
    			
    			if (i % 15 == 0)
    				bar(x - 5, y - 5, x + 5, y + 5);
    			else if (i % 5 == 0)
    				circle(x, y, 3);
    			else
    				putpixel(x, y, WHITE);
    		}
    		
    		outtextxy(center_x - 25, center_y + Width/6, "我的时钟");
    		
    		GetLocalTime(&ti);		// 获取当前时间
    		// 秒钟角度变化
    		secondAngle = ti.wSecond * 2*PI/60;  // 一圈一共2*PI,一圈60秒,一秒钟秒钟走过的角度为2*PI/60
    		// 分钟角度变化
    		minuteAngle = ti.wMinute * 2*PI/60 + secondAngle/60;  // 一圈一共2*PI,一圈60分,一分钟分钟走过的角度为2*PI/60
    		// 时钟角度变化
    		hourAngle = ti.wHour * 2*PI/12 + minuteAngle/12;  // 一圈一共2*PI,一圈12小时,一小时时钟走过的角度为2*PI/12		
    		// 由角度决定的秒针端点坐标
    		secondEnd_x = center_x + secondLength*sin(secondAngle);
    		secondEnd_y = center_y - secondLength*cos(secondAngle);
    		
    		// 由角度决定的分针端点坐标
    		minuteEnd_x = center_x + minuteLength*sin(minuteAngle);
    		minuteEnd_y = center_y - minuteLength*cos(minuteAngle);
    		
    		// 由角度决定的时针端点坐标
    		hourEnd_x = center_x + hourLength*sin(hourAngle);
    		hourEnd_y = center_y - hourLength*cos(hourAngle);		
    		
    		setlinestyle(PS_SOLID, 2);  
    		setcolor(YELLOW);
    		line(center_x, center_y, secondEnd_x, secondEnd_y); // 画秒针
    		
    		setlinestyle(PS_SOLID, 5);  
    		setcolor(BLUE);
    		line(center_x, center_y, minuteEnd_x, minuteEnd_y); // 画分针
    		
    		setlinestyle(PS_SOLID, 10);  
    		setcolor(RED);
    		line(center_x, center_y, hourEnd_x, hourEnd_y); // 画时针
    		
    		FlushBatchDraw();		
    		Sleep(10);
    		
    		setcolor(BLACK);
    		setlinestyle(PS_SOLID, 2); 
    		line(center_x, center_y, secondEnd_x, secondEnd_y);  // 隐藏前一帧的秒针
    		setlinestyle(PS_SOLID, 5);  
    		line(center_x, center_y, minuteEnd_x, minuteEnd_y); // 隐藏前一帧的分针
    		setlinestyle(PS_SOLID, 10);  
    		line(center_x, center_y, hourEnd_x, hourEnd_y); // 隐藏前一帧的时针
    	}
    	
    	EndBatchDraw();
    	getch();				// 按任意键继续	
    	closegraph();			// 关闭绘图窗口
    	return 0;
    }
    

    四丶实验界面展示

    五丶代码托管链接

    https://gitee.com/Talent_Wei/c_language_warehouse

    六丶实验总结

    问题:安装编译器VS 的问题
    解决方法:看了视频教程完成了安装 。
    感想:这次实验涉及到很多从未学过的知识,例如系统变量、outtextxy()函数等,同时也觉得这些小游戏还是很难得,并不是想象中的那样简单,一个功能需要通过许多代码实现。

  • 相关阅读:
    使用JRadioButton 示例
    使用JTextArea示例
    python与c语言的区别以及python的小小基础
    Linux常用的服务器构建
    在VMware虚拟机软件中安装的Ubuntu虚拟机的窗口不能自动调整大小的解决办法
    Ubuntu 下环境搭建系列 —— 安装 Google Chrome
    Linux命令复习和练习_03
    Android hybrid App项目构建和部分基本开发问题
    Ionic Framework
    node.js代理设置
  • 原文地址:https://www.cnblogs.com/tqw0728-Mars/p/11031946.html
Copyright © 2020-2023  润新知