C语言实现贪吃蛇项目(2)

先来看看效果:

20240420_212115


文章目录:

  • 3.项目实现
  • 3.0宽字符的打印
    • 3.01本地化操作
      • setlocale函数
      • 宽字符的打印
  • 3.1贪吃蛇结构的创建和维护
    • 3.11贪吃蛇结构的创建
    • 3.12贪吃蛇的维护
  • 3.2初始化游戏
    • 3.21.打印欢迎界面、隐藏光标和设置窗口大小
    • 3.22.绘制地图
    • 3.23.创建蛇
    • 3.24.创建食物
  • 3.3 游戏运行逻辑
    • 3.31打印游戏旁的提示
    • 3.32按键检测
    • 3.33蛇的移动
    • 3.34检测是否撞墙或自己
  • 3.4 游戏结束(善后工作)
  • 4.项目代码

3.项目实现

3.0宽字符的打印

3.01本地化操作

先要进行本地化,然后才能进行宽字符的打印
<locale.h>提供的函数⽤于控制C标准库中对于不同的地区会产⽣不⼀样⾏为的部分。
在标准中,依赖地区的部分有以下⼏项:
• 数字量的格式
• 货币量的格式
• 字符集
• ⽇期和时间的表⽰形式
在这里插入图片描述
每个类项的详细说明,请参考:https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-170

setlocale函数

在这里插入图片描述

setlocale 函数⽤于修改当前地区,可以针对⼀个类项修改,也可以针对所有类项
C标准给第⼆个参数仅定义了2种可能取值:“C”(正常模式)和""(本地模式)
我们来看看示例:
在这里插入图片描述
上面是C语言默认的环境,下面就是我们适配本地的环境了

宽字符的打印

宽字符的字⾯量必须加上前缀“L”,否则C语⾔会把字⾯量当作窄字符类型处理。前缀“L”在单引号前⾯,表⽰宽字符,对应wprintf() 的占位符为 %lc ;在双引号前⾯,表⽰宽字符串,对应wprintf() 的占位符为%ls
在这里插入图片描述
所以在进行坐标判断是要注意是否为2的倍数

3.1贪吃蛇结构的创建和维护

3.11贪吃蛇结构的创建

我们的贪吃蛇使用链表进行维护我们先进行声明
在这里插入图片描述这里将结构体指针重命名为pSnakeNode方便后续书写

3.12贪吃蛇的维护

我们创建一个结构体来方便维护我们的程序(这里有枚举的方法)在这里插入图片描述

然后我们创建贪吃蛇
在这里插入图片描述

3.2初始化游戏

在这里插入图片描述
初始化游戏我们要做什么:
1.打印欢迎界面、隐藏光标和设置窗口大小
2.绘制地图
3.创建蛇
4.创建食物

3.21.打印欢迎界面、隐藏光标和设置窗口大小

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0a07334e9292
这些上一篇文章已经写过了就不多赘述了在这里插入图片描述
光标定位也是前一篇写过的,直接拿过来使用即可
在这里插入图片描述
这里就是定位光标位置然后打印信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后就是清屏然后在打印
在这里插入图片描述

3.22.绘制地图

在这里插入图片描述

这里创建一个27行58列的地图,也可以根据自己的情况来
在这里插入图片描述
这里要注意光标的定位,通过循环就可以将地图绘制出来了
在这里插入图片描述

3.23.创建蛇

在这里插入图片描述
循环申请空间然后进行初始化,这里是从尾巴向头部申请空间的(蛇初始向右移动)
在这里插入图片描述
然后用头插法将其串起来
在这里插入图片描述
在这里插入图片描述
写成代码就是上面的方式
接着就是将蛇的身体打印出来,用循环遍历就行
在这里插入图片描述
在这里插入图片描述

并且将蛇的属性进行初始的设置
在这里插入图片描述

3.24.创建食物

由于食物要放到指针中,所以要传参数
在这里插入图片描述
要注意:
x坐标必须是2的倍数
⻝物的坐标不能和蛇⾝每个节点的坐标重复
在这里插入图片描述
在这里插入图片描述
接下来判断是否为2的倍数
在这里插入图片描述
判断x和y不能和蛇的身体冲突
在这里插入图片描述
申请食物的空间,并将其打印出来在这里插入图片描述

在这里插入图片描述

3.3 游戏运行逻辑

在这里插入图片描述

3.31打印游戏旁的提示

在这里插入图片描述
在这里插入图片描述

3.32按键检测

这里暂停为循环睡眠,然后在输入空格跳出循环
加减速要注意有判断,不能一直减速
在这里插入图片描述

3.33蛇的移动

要不断检测按键来移动蛇的位置
由于要改变游戏的状态所以也要传指针
在这里插入图片描述
我们的移动采用的方法是:将未接点释放,头节点进行头插
在这里插入图片描述
先创建节点,然后将移动的下一个坐标写出来,要注意x一次加2

检测下一个坐标是否是食物
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后是这两个函数的处理:
在这里插入图片描述
在这里插入图片描述
用头插法将食物节点插入,释放下一个位置的节点,打印蛇,最后创建食物
在这里插入图片描述
将下一个节点头插到蛇头,然后将尾接点用空格覆盖掉,最后将尾接点释放掉
在这里插入图片描述

3.34检测是否撞墙或自己

在这里插入图片描述
在这里插入图片描述
检测头的横纵坐标是否为墙
在这里插入图片描述
检测头的坐标是否为身体

3.4 游戏结束(善后工作)

打印结束信息:
在这里插入图片描述
在这里插入图片描述
然后释放节点
在这里插入图片描述
接下来就可以将游戏循环起来
在这里插入图片描述

这里要注意输入y后按回车getchar会读取\n,如果想将\n清理掉,就要在调用getchar
在更改一下:
在这里插入图片描述

4.项目代码

snake.h

#pragma once
#include <locale.h>
#include <stdio.h>
#include <Windows.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
//wchar_t ch1 = L'●';
//wchar_t ch2 = L'★';void SetPos(short x, short y);
//类型的声明
//蛇身的节点类型
typedef struct SnakeNode
{int x;int y;struct SnakeNode* next;
}SnakeNode;
typedef struct SnakeNode* pSnakeNode;enum DIRECTION //记录方向(枚举)
{UP = 1,DOWN,LEFT,RIGHT
};
//蛇的状态(正常,撞墙,撞到自己,正常退出)
enum GAME_STATUS
{OK, //正常KILL_BY_WALL, //撞墙KILL_BY_SELF, //撞到自己END_NORMAL  //正常退出
};
typedef struct Snake
{pSnakeNode _pSnake;//指向蛇头变量pSnakeNode _pFood;//指向食物的指针enum DIRECTION _dir;//记录方向(枚举)enum GAME_STATUS _status;//游戏的状态int _food_weight; //食物的分数int _score;//总成绩int _sleep_time;//休息时间(时间越短,速度越快)
}Snake;
typedef Snake* pSnake;void GameStart(pSnake ps);//初始化游戏void WelcomeToGame();//欢迎界面void GreateMap();//绘制地图void InitSnake(pSnake ps);//创建蛇void CreateFood(pSnake ps); //创建食物void GameRun(pSnake ps);//游戏运行逻辑void SnackMove(pSnake ps);//蛇的移动int NextIsFood(pSnakeNode pn, pSnake ps);//检测下一个坐标是否是食物void EatFood(pSnakeNode pn, pSnake ps);
void NoFood(pSnakeNode pn, pSnake ps);//检测是否撞墙或自己
void KillByWall(pSnake ps);
void KillBySelf(pSnake ps);void GameEend(pSnake ps);

snake.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "snake.h"void SetPos(short x, short y)
{HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos = { x,y };SetConsoleCursorPosition(houtput, pos);
}void WelcomeToGame()
{SetPos(40, 13);printf("欢迎来到贪吃蛇小游戏\n");SetPos(42, 20);system("pause");system("cls");SetPos(27, 13);wprintf(L"用↑.↓.←.→分别控制蛇的移动,F3为加速,F4为减速\n");SetPos(27, 14);printf("加速能获得更高的分数\n");SetPos(40, 20);system("pause");system("cls");
}#define WALL L'□'
#define BODY L'●'
void GreateMap()
{//上for (int i = 0; i < 29; i++){wprintf(L"%lc", WALL);}//下SetPos(0, 26);for (int i = 0; i < 29; i++){wprintf(L"%lc", WALL);}//左for (int i = 1; i < 26; i++){SetPos(0, i);wprintf(L"%lc", WALL);}//右for (int i = 1; i < 26; i++){SetPos(56, i);wprintf(L"%lc", WALL);}}#define POS_X 24
#define POS_Y 5
void InitSnake(pSnake ps)
{pSnakeNode cur = NULL;for (int i = 0; i < 5; i++){cur = (pSnakeNode)malloc(sizeof(SnakeNode));if (cur == NULL){perror("malloc");exit(1);}cur->next = NULL;cur->x = POS_X + i * 2;cur->y = POS_Y;//头插法将其串起来if (ps->_pSnake == NULL){ps->_pSnake = cur;}else{cur->next = ps->_pSnake;ps->_pSnake = cur;}}cur = ps->_pSnake;while (cur){SetPos(cur->x, cur->y);wprintf(L"%lc", BODY);cur = cur->next;}//设置蛇的属性ps->_dir = RIGHT;ps->_score = 0;ps->_food_weight = 10;ps->_sleep_time = 200;//毫秒ps->_status = OK;
}#define FOOD L'★'
void CreateFood(pSnake ps)
{int x = 0;int y = 0;
again:do{x = rand() % 53 + 2;y = rand() % 24 + 1;} while (x % 2 != 0);//x和y不能和蛇的身体冲突pSnakeNode cur = ps->_pSnake;while (cur){if (x == cur->x && y == cur->y){goto again;}cur = cur->next;}//创建食物pSnakeNode pFood = (pSnakeNode)malloc(sizeof(SnakeNode));if (pFood == NULL){perror ("pFood::malloc");exit(1);}pFood->x = x;pFood->y = y;pFood->next = NULL;SetPos(x, y);wprintf(L"%lc", FOOD);ps->_pFood = pFood;
}void GameStart(pSnake ps)
{//1.打印欢迎界面、隐藏光标和设置窗口大小//设置窗口大小system("mode con cols=100 lines=30");system("title 贪吃蛇");//隐藏光标//获得标准输出设备HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);//创建光标信息结构体CONSOLE_CURSOR_INFO cursor_info = { 0 };//获取光标的信息,放在cursor_info中GetConsoleCursorInfo(houtput, &cursor_info);//修改光标占比//cursor_info.dwSize = 100;cursor_info.bVisible = false;//设置光标信息SetConsoleCursorInfo(houtput, &cursor_info);//1.打印欢迎界面WelcomeToGame();//2.绘制地图GreateMap();//3.创建蛇InitSnake(ps);//4.创建食物CreateFood(ps);
}void PrintHelpInfo()
{SetPos(64, 15);wprintf(L"%ls\n", L"不能穿墙,不能咬到自己");SetPos(64, 16);wprintf(L"%ls\n", L"用↑.↓.←.→分别控制蛇的移动.");SetPos(64, 17);wprintf(L"%ls\n", L"F3 为加速,F4为减速");SetPos(64, 18);wprintf(L"%ls\n", L"ESC :退出游戏.空格:暂停游戏.");
}#define KEY_PRESS(vk) ((GetAsyncKeyState(vk)&1)?1:0)void Pause()
{while (1){Sleep(200);if (KEY_PRESS(VK_SPACE)){break;}}
}int NextIsFood(pSnakeNode pn, pSnake ps)
{assert(ps->_pFood);return (pn->x == ps->_pFood->x && pn->y == ps->_pFood->y);
}void EatFood(pSnakeNode pn, pSnake ps)
{//用头插法将食物节点插入ps->_pFood->next = ps->_pSnake;ps->_pSnake = ps->_pFood;//释放下一个位置的节点free(pn);pn = NULL;//打印蛇pSnakeNode cur = ps->_pSnake;while (cur){SetPos(cur->x, cur->y);wprintf(L"%lc", BODY);cur = cur->next;}ps->_score += ps->_food_weight;CreateFood(ps);
}void NoFood(pSnakeNode pn, pSnake ps)
{//将下一个节点头插到蛇头pn->next = ps->_pSnake;ps->_pSnake = pn;//最后将尾接点用空格覆盖掉pSnakeNode cur = ps->_pSnake;while (cur->next->next != NULL){SetPos(cur->x, cur->y);wprintf(L"%lc", BODY);cur = cur->next;}SetPos(cur->next->x, cur->next->y);printf("  ");//将未接点释放掉free(cur->next);cur->next = NULL;
}void KillByWall(pSnake ps)
{if (ps->_pSnake->x == 0 || ps->_pSnake->x == 56 ||ps->_pSnake->y == 0 || ps->_pSnake->y == 26){ps->_status = KILL_BY_WALL;}
}void KillBySelf(pSnake ps)
{pSnakeNode cur = ps->_pSnake->next;while (cur){if (cur->x == ps->_pSnake->x && cur->y == ps->_pSnake->y){ps->_status = KILL_BY_SELF;break;}cur = cur->next;}
}
void SnackMove(pSnake ps)
{//创建一个节点来表示蛇即将到的下一个节点pSnakeNode pNextNode = (pSnakeNode)malloc(sizeof(SnakeNode));if (pNextNode == NULL){perror("SnackMove()::malloc()");exit(1);}switch (ps->_dir){case UP:pNextNode->x = ps->_pSnake->x;pNextNode->y = ps->_pSnake->y - 1;break;case DOWN:pNextNode->x = ps->_pSnake->x;pNextNode->y = ps->_pSnake->y + 1;break;case LEFT:pNextNode->x = ps->_pSnake->x - 2;pNextNode->y = ps->_pSnake->y;break;case RIGHT:pNextNode->x = ps->_pSnake->x + 2;pNextNode->y = ps->_pSnake->y;break;}//检测下一个坐标是否是食物if (NextIsFood(pNextNode,ps)){EatFood(pNextNode,ps);}else{NoFood(pNextNode, ps);}//检测蛇是否撞到墙或自己KillByWall(ps);KillBySelf(ps);
}void GameRun(pSnake ps)
{//打印帮助信息PrintHelpInfo();do{SetPos(64, 10);printf("总分数:%d", ps->_score);SetPos(64, 11);printf("当前食物分数:%2d", ps->_food_weight);if (KEY_PRESS(VK_UP) && ps->_dir != DOWN){ps->_dir = UP;}else if (KEY_PRESS(VK_DOWN) && ps->_dir != UP){ps->_dir = DOWN;}else if (KEY_PRESS(VK_RIGHT) && ps->_dir != LEFT){ps->_dir = RIGHT;}else if (KEY_PRESS(VK_LEFT) && ps->_dir != RIGHT){ps->_dir = LEFT;}else if (KEY_PRESS(VK_SPACE)){//暂停Pause();}else if (KEY_PRESS(VK_ESCAPE)){//正常退出ps->_status = END_NORMAL;}else if (KEY_PRESS(VK_F4)){//加速if (ps->_sleep_time > 80){ps->_sleep_time -= 30;ps->_food_weight += 2;}}else if (KEY_PRESS(VK_F3)){//减速if (ps->_food_weight > 2){ps->_sleep_time += 30;ps->_food_weight -= 2;}}SnackMove(ps);//蛇的移动Sleep(ps->_sleep_time);} while (ps->_status == OK);}void GameEend(pSnake ps)
{SetPos(24, 12);switch (ps->_status){case END_NORMAL:printf("您主动结束游戏\n");break;case KILL_BY_WALL:printf("您撞到了墙上,游戏结束\n");break;case KILL_BY_SELF:printf("您撞到了自己,游戏结束\n");break;}//释放节点pSnakeNode cur = ps->_pSnake;pSnakeNode del = ps->_pSnake;while (cur){del = cur;cur = cur->next;free(del);}SetPos(0,27);
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "snake.h"void Test()
{int ch = 0;do{system("cls");//创建贪吃蛇Snake snake = { 0 };//初始化游戏GameStart(&snake);运行游戏GameRun(&snake);结束游戏(善后工作)GameEend(&snake);SetPos(20, 15);printf("再来一局吗?(y/n):");ch = getchar();while (getchar() != '\n');} while (ch == 'Y' || ch == 'y');SetPos(0, 27);
}int main()
{setlocale(LC_ALL, "");//适配本地化srand((unsigned int)time(NULL));Test();//游戏的测试逻辑return 0;
}

好了本篇文章就结束了,希望大家可以动手自己去写一下,还是会有一些收获的

到这里C语言的语法部分就差不多了,后续我会继续写C语言数据结构的文章了,C语言语法部分看看可能会补充一部分,还是看看时间吧,大家加油!!!

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

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

相关文章

js作业微博发言

微博 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" content&q…

《星尘传说》游戏完整源码(源码+引擎+客户端+服务端+教程+工具),云盘下载

《星尘传说》是一款奇幻类大型多人在线角色扮演电脑客户端游戏&#xff0c;该游戏设置有两大阵营&#xff0c;六个国家以及22个职业&#xff0c;采用3D卡通风格&#xff0c; 有兴趣的&#xff0c;可以架设个外网&#xff0c;让大家一起玩。 《星尘传说》游戏完整源码&#xff0…

【JAVA进阶篇教学】第三篇:JDK8中Stream API使用

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第三篇&#xff1a;JDK8中Stream API使用。 Java 8 中的 Stream API 提供了一种便捷、高效的方式来处理集合数据&#xff0c;它支持函数式编程风格的操作&#xff0c;包括过滤、映射、归约等。Stream API 可以大大简化集…

【LAMMPS学习】八、基础知识(3.6)计算热导率

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

c语言利用控制台实现贪吃蛇

使用控制台实现贪吃蛇需要的技能加点&#xff1a; 控制台设置&#xff08;包含于stdlib.h&#xff09;&#xff1a; 定义命令行窗口高/宽&#xff1a; system("mode con cols100 lines30"); system() 函数是一个C标准库函数&#xff0c;它允许程序执行操作系统命令…

(九) 盘古UI,日期和时间选择控件,自定义多种场景!

(九) 盘古UI,日期和时间选择控件,自定义多种场景! 盘古UI,较为全面的自定义UI框架,帮助你绝对的快速开发!(长期维护中) 控件位置: 主要控件: com.smart.pangu_ui_lib.widget.PanguSelectDateView 内部使用的时间弹窗:pop: com.smart.pangu_ui_lib.pop.PopSelectDate demo地址…

nginx反向代理.NetCore开发的基于WebApi创建的gRPC服务

一、本文中使用的工具: Vs2022使用.NET 8.0开发基于ASP.NET Core WebApi的gRPC服务; Nginx:1.25.5,下载地址:http://nginx.org/en/download.html 二、gRPC介绍: 由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在vs2022中可以直接创建gRP…

设计模式之模板方法模式详解(下)

3&#xff09;钩子方法的使用 1.概述 钩子方法的引入使得子类可以控制父类的行为。 2.结构图 3.代码实现 将公共方法和框架代码放在抽象父类中 abstract class DataViewer {//抽象方法&#xff1a;获取数据public abstract void GetData();//具体方法&#xff1a;转换数据…

【JAVA面试题】探索多线程同步:ReentrantLock与synchronized的对比解析

程序员如何搞副业&#xff1f; 文章目录 程序员如何搞副业&#xff1f;强烈推荐引言&#xff1a;ReentrantLock介绍可重入性&#xff08;Reentrancy&#xff09;&#xff1a;公平性&#xff08;Fairness&#xff09;&#xff1a;条件变量&#xff08;Condition&#xff09;&…

C语言基础(入门综合案例)

学生信息管理系统 学员管理系统可以实现对学员的添加、全部显示、查询、修改、删除功能 数据存储格式说明 // 宏定义的常量&#xff0c;代表学生的最大个数 #define NUM 100// 结构体类型 struct stu 别名为 STU typedef struct stu {char name[30]; // 姓名int age; …

海外代理IP|Facebook对IP都有哪些要求?要选哪种?

众所周知&#xff0c;Facebook封号大多数情况都是因为IP的原因。Facebook对于用户账号有严格的IP要求和限制&#xff0c;以维护平台的稳定性和安全性。在这种背景下&#xff0c;海外IP代理成为了一种有效的解决方案&#xff0c;帮助用户避免检测&#xff0c;更加快捷安全地进行…

影响钕铁硼磁钢性能的因素及方法

钕铁硼永磁材料自问世以来&#xff0c;就以其优越的磁性能而备受关注&#xff0c;被称为“磁王“&#xff0c;在市场需求的不断地增长下&#xff0c;钕铁硼生产工艺及磁体性能也不断发展和提升。我们一般用剩磁、矫顽力和最大磁能积这几个指标来衡量磁性材料的磁性能。 剩磁 B…

C语言数据结构之链表

目录 前言 \color{maroon}{前言} 前言1.链表的概念及结构2.链表的分类3.无头单向非循环链表的实现4.带头双向循环链表的实现5.顺序表和链表的对比 前言 \color{maroon}{前言} 前言 在上一篇博客中我们提到&#xff0c;线性表包括顺序表和链表&#xff0c;顺序表在上篇博客中已…

力扣HOT100 - 25. K 个一组翻转链表

解题思路&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dum new ListNode(0, head);ListNode pre dum;ListNode end dum;while (end.next ! null) {for (int i 0; i < k && end ! null; i) {end end.next;}if …

学习笔记-数据结构-线性表(2024-04-17)

设计一个算法实现在单链表中删除值相同的多余节点的算法。 设计思想&#xff1a;双指针 变量说明&#xff1a; head - 参数变量&#xff0c;代表链表的头节点。在调用DelSameNum函数时&#xff0c;需要传递链表的头节点的地址给这个参数&#xff0c;从而允许函数对链表进行操作…

类和对象(中)(构造函数、析构函数和拷贝构造函数)

1.类的六个默认成员函数 任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 //空类 class Date{}; 默认成员函数&#xff1a;用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数 2.构造函数 构造函数 是一个 特殊的成员函数&a…

docker容器技术篇:centos7搭建docker swarm集群

centos7搭建docker swarm集群 一 docker swarm 概述 1.1 swarm简介 Docker Swarm是 Docker 的集群管理工具&#xff0c;Swarm 在 Docker 1.12 版本之前属于一个独立的项目&#xff1b;其主要作用是把Docker集群抽象为一个整体&#xff0c;并且通过一个统一管理这些 Docker 主…

密码学 | 数字证书:应用

&#x1f951;原文&#xff1a;数字签名和数字证书的原理解读 - 知乎 &#x1f951;前文&#xff1a;密码学 | 数字签名 数字证书 - CSDN &#x1f951;提示&#xff1a;把客户端想成 Alice&#xff0c;服务器端想成 Bob 即可。客户端实际上指的是客户端浏览器。 下面&#…

前端入门:HTML(CSS边框综合案例)

案例&#xff1a; 源代码&#xff1a; css-borders.html: <body> <div id"square"> </div> <br> <div id"triangle"> </div> <br> <div id"trapezium"> </div> <br> <div id…

【C语言】指针篇-深入探索数组名和指针数组(2/5)- 必读指南

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 认识指针与数组之间的关系(涉及二级指针)**数组名****指针访问…