Visual Studio 控制台程序世界杯足球C语言版

news2025/2/6 1:04:12

Visual Studio 控制台程序世界杯足球C语言版

  • 程序之美
  • 前言
  • 主体
    • 运行效果
    • 核心代码
    • 逻辑分析
  • 结束语

程序之美

前言

一年一度的世界杯如期而至,相信很多球迷小伙伴们一定不会错过这个难得的好机会,大饱眼福,美美的看上几场。
说起国际足联世界杯(FIFA World Cup),简称“世界杯”,我相信很多小伙伴们都一定不陌生,下面是百度百科中对世界杯的相关介绍:世界杯是由全世界国家级别球队参与,象征足球界最高荣誉,并具有最大知名度和影响力的足球赛事。 世界杯全球电视转播观众超过35亿 [1] 。 世界杯每四年举办一次,任何 国际足联 会员国(地区)都可以派出代表队报名参加这项赛事。 巴西国家队 是夺得世界杯冠军最多的球队(5次),并且在3夺世界杯后永久地保留了前任世界杯冠军奖杯 雷米特杯 。 现代足球发源地为英格兰 [2] ,其代表队在1966年首夺世界杯。 而现在的 世界杯奖杯 是 大力神杯 ,由4夺世界杯冠军的德国在1974年首次捧杯并一直沿用。 2002年韩日世界杯,中国国家队首次晋级世界杯决赛圈 [3] 。 2022年卡塔尔世界杯于北京时间2022年11月21日至12月18日举行。
作为一名程序员,为了能够表达出对世界杯的钦慕和爱意,我们只能够拿起手中的键盘,绘制出生动的足球,为足球喝彩,为世界杯喝彩!
故此,整理出一个世界杯的C语言测试程序,希望能够帮助到各位初学C语言的小伙伴,避免走弯路,费时费力。

主体

本篇我们先看下基于Visual Studio 控制台程序世界杯足球C语言版。话不多说,先看下效果图。

运行效果

静态的足球:
在这里插入图片描述
旋转的球体:
在这里插入图片描述

C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元,可以用来写系统软件。
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

核心代码

静态的足球:

#include<graphics.h>
#include<math.h>
#include<conio.h>
#define PI acos(-1.0)

int main()
{
    initgraph(640, 480);
    setbkcolor(BLUE);
    setlinecolor(BLACK);
    cleardevice();
    setlinestyle(PS_SOLID, 4);
    setfillcolor(WHITE);
    fillcircle(320, 240, 150);    // 绘制一个球形状

    setlinestyle(PS_SOLID, 2);
    POINT pts[5];
    POINT Fpts[5];
    POINT Zpts[5];
    // 计算五边形的五个顶点坐标
    double a = PI / 2;
    for (int i = 0; i < 5; i++)
    {
        pts[i].x = int(320 + cos(a) * 60);
        pts[i].y = int(240 - sin(a) * 60);

        Zpts[i].x = int(320 + cos(a) * 100);
        Zpts[i].y = int(240 - sin(a) * 100);

        Fpts[i].x = int(320 + cos(a) * 110);
        Fpts[i].y = int(240 - sin(a) * 110);
        a += PI * 2 / 5;
    }
    setlinecolor(BLACK);
    setfillcolor(RED);
    solidpolygon(pts, 5);
    for (int i = 0; i < 5; i++)
    {
        line(pts[i].x, pts[i].y, Zpts[i].x, Zpts[i].y);
    }

    POINT Spts[10];
    POINT Wpts[20];
    a = PI / 2 + PI / 20;
    for (int i = 0; i < 20; i++)
    {
        Wpts[i].x = int(320 + cos(a) * 150);
        Wpts[i].y = int(240 - sin(a) * 150);
        a += PI * 1 / 10;
    }
    a = PI / 2 + PI / 10;
    for (int i = 0; i < 10; i++)
    {
        Spts[i].x = int(320 + cos(a) * 128);
        Spts[i].y = int(240 - sin(a) * 128);
        a += PI * 1 / 5;
    }
    int P = 9;
    for (int i = 0; i < 5; i++)
    {
        line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y);
        P++;
        if (P == 10)
        {
            P = 0;
        }
        line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y);
        P++;
    }
    for (int i = 0; i < 9; i++)
    {
        line(Spts[i].x, Spts[i].y, Spts[i + 1].x, Spts[i + 1].y);
        i++;
    }
    int PS = 0;
    for (int i = 0; i < 20; i++)
    {
        if (i % 2 == 0)
        {
            if (PS % 2 == 0)
            {
                line(Wpts[i].x, Wpts[i].y, Spts[i / 2].x, Spts[i / 2].y);
            }
            else
            {
                line(Wpts[i + 1].x, Wpts[i + 1].y, Spts[i / 2].x, Spts[i / 2].y);
            }
            PS++;
        }
    }
    polygon(Wpts, 20);
    setlinestyle(PS_SOLID, 3);
    circle(320, 240, 150);
    setfillcolor(RED);
    for (int i = 0; i < 5; i++)
    {
        floodfill(Fpts[i].x, Fpts[i].y, BLACK);
    }
    _getch();
    return 0;
}

旋转的球体:

#include <math.h>
#include <windows.h>
#define PI 3.1415926
#define SX 8
#define SY 16
#define DX PI / SX
#define DY PI * 2 / SY
#define X(a, b) (cx + v[a][b].x * r), (cy + v[a][b].y * r)
typedef struct { double x, y; } Vec;
void calc(double i, double j, double rot, Vec* v) {
	double x = sin(i) * cos(j), y = sin(i) * sin(j), z = cos(i),
		s = sin(rot), c = cos(rot), c1 = 1 - c, u = 1 / sqrt(3), u2 = u * u;
	v->x = x * (c + u2 * c1) + y * (u2 * c1 - u * s) + z * (u2 * c1 + u * s);
	v->y = x * (u2 * c1 + u * s) + y * (c + u2 * c1) + z * (u2 * c1 - u * s);
}
int main() {
	HWND hwnd = GetConsoleWindow(); 
	HDC hdc1 = GetDC(hwnd);
	double rot = 0;
	while (1) {
		RECT rect; 
		GetClientRect(hwnd, &rect); 
		int w = rect.right, h = rect.bottom, cx = w / 2, cy = h / 2, r = h * 0.375;
		HDC hdc2 = CreateCompatibleDC(hdc1); 
		HBITMAP bmp = CreateCompatibleBitmap(hdc1, w, h); 
		SelectObject(hdc2, bmp);
		SelectObject(hdc2, GetStockObject(WHITE_PEN));
		Vec v[SX + 1][SY + 1];
		for (int i = 0; i <= SX; ++i) for (int j = 0; j <= SY; ++j) 
		calc(i * DX, j * DY, rot, &v[i][j]);
		for (int i = 0; i < SX; ++i) for (int j = 0; j < SY; ++j) {
			MoveToEx(hdc2, X(i, j), NULL); LineTo(hdc2, X(i + 1, j));
			MoveToEx(hdc2, X(i, j), NULL); LineTo(hdc2, X(i, j + 1));
		}
		BitBlt(hdc1, 0, 0, w, h, hdc2, 0, 0, SRCCOPY); DeleteObject(bmp); DeleteDC(hdc2);
		rot += 0.01; 
		Sleep(5);
	}
}

逻辑分析

代码中进行了相应的函数封装,包含主函数,函数体,头文件,库函数等,有助于小伙伴们学习和研究。另外小伙伴们可以在其基础上进行改进,满足自己的程序需求。
对于静态的足球,需关注响应的系统函数。
比如设置足球的颜色:

setfillcolor(RED);

设置背景色:

setbkcolor(BLUE);

设置足球纹理线条的粗细:

setlinestyle(PS_SOLID, 3);

对于旋转的球体,精华主要在函数calc中:

void calc(double i, double j, double rot, Vec* v) {
	double x = sin(i) * cos(j), y = sin(i) * sin(j), z = cos(i),
		s = sin(rot), c = cos(rot), c1 = 1 - c, u = 1 / sqrt(3), u2 = u * u;
	v->x = x * (c + u2 * c1) + y * (u2 * c1 - u * s) + z * (u2 * c1 + u * s);
	v->y = x * (u2 * c1 + u * s) + y * (c + u2 * c1) + z * (u2 * c1 - u * s);
}

通过calc的计算,得到相应的坐标变换,然后通过绘图函数BitBlt将图像绘制到DC中,完成显示。

结束语

好了,今天就说这么多了,希望小伙伴们能从这篇文章中学到东西,也真心希望能够帮助正在苦学Visual Studio 程序设计的小伙伴们,你们的成长是我最大的幸福。很感谢您能够在百忙之中浏览我的文章,有需要源码的小伙伴可以私信我。
源码地址:https://download.csdn.net/download/hnjzfwy/87296180

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构师必读 —— 逻辑模型(9)

逻辑树分析法 整理信息时&#xff0c;釆用逐条列举的方式是比较方便的。逐条列举的优点是可以简练地整理要点&#xff0c;利于缩小论点的范围&#xff0c;也方便项目的分类。但是&#xff0c;逐条列举也有缺点&#xff0c;就是遗漏和重复不太容易被发现&#xff0c;难以判断是否…

健身房训练计划

文章目录参考资料前言新手健身的首要任务训练计划关于组数、次数、重量和组间休息时间周一胸肌和手臂参考资料 男生健身房一周训练计划, 收藏了 最高效的健身房一周训练计划表&#xff0c;附完整动图教学&#xff01; 前言 新手健身的首要任务 1、了解和熟练掌握锻炼身体各…

从源码的角度解析Spirng 的import标签和alias标签的处理

在上一篇博客《源码深度剖析Spring Bean标签的解析及注册》中描述了bean 标签的解析以及注册。 而Spring 的XML 配置文件职工包括import标签、alias标签、bean标签和beans 标签&#xff0c;那么这篇博客就针对剩余的import 标签 、alias标签进行处理。由于beans标签类似于impor…

docker基础

目录常用命令Docker命令镜像命令(image)容器命令(container)容器数据卷命令挂载具名挂载和匿名挂载查看卷信息数据卷权限dockerfile挂载新建dockerfile文件build构建dockerfile的镜像用自定义的镜像启动容器查看主机挂载路径容器共享数据卷多容器创建DockerFile文件创建dockerf…

三大管理法则—鱼缸法则、木桶效应、热炉法则

一、鱼缸法则 鱼缸法则运用到管理中&#xff0c;就是增加工作的透明度。 各项工作有了透明度&#xff0c;领导者的行为就会置于全体下属的监督之下&#xff0c;就会有效地防止领导者滥用权力&#xff0c;从而强化领导者的自我约束机制。 项目管理中&#xff0c;管理者可以使…

AI 编剧大师 #Dramatron

DeepMind 近日发布了一款名为 “Dramatron” 的新 AI 写作模型&#xff0c;用上它人人都可以变身编剧或者作家&#xff0c;只需要给出一句话大纲&#xff0c; Dramatron 就能生成包括标题、角色列表、情节、场景描述和对话的完整电影 or 戏剧脚本&#xff0c;并且连贯性极强。简…

解决安全生产知识题库小程序加载超大数据无法渲染的问题

遇到问题 在搭建安全生产知识竞赛题库小程序的时候&#xff0c;由于题库的题量太大了&#xff0c;一次性加载setData或者多次concat后setData&#xff0c;其实它俩都是一次性setData&#xff0c;这样就会造成加载超大数据无法渲染空白的问题。 安全生产知识竞答 解决微信小程序…

计算机毕设Python+Vue学生日常事务管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

line-height:1的存在意义是什么(v1)

一、line-height:1的存在意义是什么&#xff08;v1&#xff09; 1. 加不加这段代码的区别是什么&#xff1f; 示例代码 <!DOCTYPE html> <html lang"en"> <style>p{line-height:1;} /* 随时注释的line-height:1 */p{margin:0;background-color:…

《罗马革命》豆瓣 9.1 从恺撒大帝到屋大维

《罗马革命》 关于作者 本书的作者罗纳德•塞姆&#xff0c;是英国牛津大学古罗马历史教授&#xff0c;被誉为20世纪西方世界最出色的罗马史学家。 关于本书 本书的作者抛弃了古罗马史家的论述&#xff0c;从政治史研究的角度&#xff0c;观察罗马革命的前因后果&#xff0c…

Java——记录BigDecimal与0比较的一个坑

文章目录前言问题解决问题解决前言 在之前做的一个项目中&#xff0c;为了保证BigDecimal在除数 divide时&#xff0c;如果被除数为0&#xff0c;出现java.lang.ArithmeticException: / by zero 报错问题&#xff0c;写了一个对比。具体代码如下&#xff1a; public static B…

Promise(一) 介绍及基本使用+API

目录 1.Promise 的理解和使用 1.1. Promise 是什么? 1.1.1. 理解 1.2. 为什么要用 Promise? 1.2.1. 指定回调函数的方式更加灵活 1.2.2. 支持链式调用, 可以解决回调地狱问题 1.3 promise初体验 1.4 Promise实践练习——fs读取文件 1.5 Promise实践练习——Ajax请求…

论文精讲 | 一种隐私保护边云协同训练

作者&#xff1a;王森、王鹏、姚信、崔金凯、胡钦涛、陈仁海、张弓 &#xff5c;单位&#xff1a;2012实验室理论部 论文标题 MistNet: Towards Private Neural Network Training with Local Differential Privacy 论文链接 https://github.com/TL-System/plato/blob/main/…

安装MYSQL 社区版 mysql 8.0.30

https://dev.mysql.com/downloads/ 上面地址下载 安装社区版&#xff0c;选择开发者选项 mysql社区版 8.0.30&#xff0c; 直接都下一步&#xff0c;下一步的安装 安装进度一直在显示 安装完成&#xff0c; 下一步 开发者 输入密码&#xff1a; 增加用户 sa 又是一番执行 …

Effective C++(一):让自己习惯C++

个人读书记录&#xff0c;不适用教学内容。 目录 条款01&#xff1a;视C为一个语言联邦 条款02&#xff1a;尽量以const&#xff0c;enum&#xff0c;inline替换#define 条款03&#xff1a;尽可能使用const 所谓的"顶层const"和"底层const" const返回…

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.7 Sentinel的线程隔离与Hystix的线程隔离有什么差别

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.7 Sentinel的线程隔离与Hystix的线程隔离有什么差别?54.7.1 Sentinel与Hystix…

计算机毕设Python+Vue学生社团管理(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于蓝牙AOA技术的智慧医疗解决方案

1. 应用背景 医院需求分析在医疗体制不断完善的今天&#xff0c;医院的信息化程度已经大大提高&#xff0c;现在的大型医院都已经用上了医院信息系统(HIS)&#xff0c;它是医院管理同现代软件技术、网络技术相结合的产物。应用HIS系统后&#xff0c;确实方便了群众就医&#x…

【docker】DockerFile

一、DockerFile dockerfile是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile文件docker build构建成为一个镜像docker run 运行镜像docker push 发布镜像&#xff08;DickerHub 阿里云镜像仓库&#xff01;&#x…

【Python机器学习】分类算法任务、分类模型评价指标详解(图文解释)

分类任务 设样本集S{s_1,s_2,…,s_m}包含m个样本&#xff0c;样本s_i(x_i,y_i)包括一个实例x_i和一个标签y_i&#xff0c;实例由n维特征向量表示&#xff0c;即x_i(x_i^(1),x_i^(2),…,x_i^(n))。 在学习过程&#xff0c;分类任务将样本集中的知识提炼出来&#xff0c;形成模…