Visual Studio 控制台程序世界杯足球C语言版(附源码)

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);
	}
}

逻辑分析

结束语

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值