




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原科技大学课程设计 课程设计题目 五子棋 单 专 学 位 业 号 分院( 分院(系) 学生姓名 指导教师 完成日期 2011 年 05 月 日 摘 要 五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引 人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在 “尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似 之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造 人,伏羲做棋”一说, 增山海经中记载:“休舆之山有石焉,名曰帝台之棋,五色 而文状鹑卵。”李善注引三国魏邯郸淳艺经中曰:“棋局,纵横各十七道,合二百 八十九道,白黑棋子,各一百五十枚”。这段虽没明讲是何种棋类,但至少知道远古 就以漂亮的石头为棋子。 因而规则简单的五子棋也可能出自当时, 并是用石子作棋子。 亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代 中遍及开来。 本程序是一款棋类益智游戏程序, 是用 WIN-TC 编写在 WINDOWS 程序说明 : 系统下运行的娱乐游戏。本程序可以实现人人对战,操作采用键盘上的上下左右 键控制棋子的上下左右移动, 由空格键控制下棋, 双方都可通过 ESC 键终止游戏。 游戏开始后,红、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不 同颜色的棋子,提示当前下棋的棋手,任何一方由五子连成一线时,游戏结束, 结束时会显示对战双方胜负情况。 关键词:五子棋游戏应用程序,C 语言,图形函数 目录第 1 章 选题的意义 4 1.1 4 1.2 4 第 2 章 系统功能需求分析 4 2.1 系统的基本要求 4 2.2 4 第 3 章 系统设计 6 第 4 章 系统实现 8 第 5 章 总结 36第 1 章 选题的意义1.1 意义通过游戏过程增加编程的兴趣, 提高编程水平。 编制该程序我对以下的知识点进行的巩 固和掌握:1.数组元素为结构体的数组应用。2.全局变量应用。3.按键的处理。4.数组元素 与蛇、食物的对应关系。5.图形方式等等。加深对所学知识的理解与掌握,增强自己对所学 知识解决实际问题的能力,为以后的程序开发打下基础。1.2 设计思路棋 盘 设 计 为 1818 格 , 初 始 状 态 光 标 在 棋 盘 的 中 央 , 玩 家 1 先 走 , 轮 流 落 子 , 当 一 方 连 成 五 子 或 下 满 棋 盘 时 ,游 戏 结 束( 连 成 五 子 的 一 方 获 胜 ,下 满 棋 盘 为 和 棋 ) 。 当 游 戏 一 方 胜 利 后 显 示 胜 利 信 息 。 从程序表面看,这是一个二维平面图,所以 数据用二维数组来表示, 数组两个下标可以表示棋盘上的位置, 数组元素的值代表棋格上的 状态,共有三种情况,分别是 0 代表空格,1 代表白棋,2 代表黑棋。这样程序的主要工作 是接收棋手按键操作,棋手用 Up、Down、Left、Right 控制光标移动,空格键表示落子。一 旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能 重叠落子。落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左 下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的 信息。如果想退出游戏,可以按 Esc 键。 第 2 章 系统功能需求分析 2.1 系统的基本要求操作系统为 WindowsXP,设计语言为 Visual C+或 Turbo C+3.0。 2.2 需求分析 1.游戏需求 (1)在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则; (2)画出棋盘的大小; (3)画棋子并确定棋子的大小; (4)判断键盘输入哪个键执行操作; (5)玩家 P1 先落棋; (6)玩家轮流下棋; (7)判断赢家。2.功能模块 2.功能模块初 始 化 模 块 下棋 操 作 模块 判 断 胜 负 模块 帮 助 模 块 五子棋游戏 初 始 化 模 块 块 模 作 操 棋 下 断 胜 负 模 判 帮 助 模 块 块 3.流程图 开始 帮助信息 显示棋盘 18x18 玩家 1 先下棋 显示棋子位子,玩家 1 为白色 O 子,玩家 2 为红色 O 子 换玩家 下棋 五子连成一线 No Yes 玩家 1? No Yes 玩家 1 赢 玩家 2 赢 结束 第 3 章 系统设计 1 定 义 全 局 变 量 1. int statusNN; 状 态 ( 棋 手 1 或 棋 手 2) */ 2. int step_x,step_y; 动 的 距 离 */ 3. int key ; 4. int flag; /*定 义 的 数 组 , 表 示 棋 盘 某 点 的 /*行 走 的 坐 标 , 即 每 一 步 光 标 移 /*获 取 按 下 的 键 盘 的 键 */ /*玩 家 标 志 , 当 flag=0 时 , 表 示 该 点 无 棋 子 , flag=1 表 示 玩 家 1 的 棋 子 , flag=2 表 示 玩 家 2 的 棋 子 */ 2 Main()主 函 数 主 按 照 语 法 规 则 ,首 先 定 义 使 用 到 的 常 数 、全 局 变 量 、函 数 原 型 说 明 。棋 盘 状 态 用 数 组 int status1919 ,初 值 为 0, 表 示 空 格 。 函 数 的 实 体 比 较 简 单 , 调 用 图形驱动、画棋盘、人人对弈等自定义函数,一旦游戏结束后,关闭图形驱动, 程序结束。 3 DrawBoard()画 棋 盘 函 数 画 背 景 颜 色 设 为 绿 色 , 从 坐 标 (100, 100)开 始 每 隔 20 个 单 位 用 黄 色 画 一 条 水 平 直 线 ,一 条 垂 直 线 ,构 成 棋 盘 ,用 循 环 语 句 实 现 。画 线 函 数 line()的 参 数 为 线 的 起 点 和 终 点 坐 标 , 注 意 要 计 算 正 确 。 函 数 setfillstyle()可 以 设 置 填 充 模 式 和 填 充 颜 色 , circle(x,y,8)以 x 和 y 为 圆 心 画 圆 ( 这 里 半 径 为 8) , 用 它 表 示 棋子。 4 ResultCheck(int x,int y)判 断 是 否 胜 出 函 数 判 本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、 右 下 八 个 方 向 判 断 是 否 有 相 同 颜 色 的 棋 子 连 成 五 子 ,如 果 成 立 ,游 戏 就 结 束 ,并 显 示 提 示 信 息 (如 :红 方 获 胜 ), 否 则 继 续 落 子 。 5 Done()执 行 下 棋 函 数 执 这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下: (1) 按 Esc 键 程 序 可 以 随 时 结 束 。 (2) 按 上 下 左 右 光 标 键 , 则 改 变 棋 子 移 动 的 坐 标 值 。 (3) 按 空 格 键 后 判 断 : 1) 如 落 子 的 位 置 已 经 有 棋 则 无 效 , 继 续 按 键 。 2) 如 落 子 位 置 是 空 格 ,可 以 将 棋 子 落 入 格 内 ,调 用 ResultCheck(i nt x,int y)函 数 。 3) 如 果 棋 子 变 化 后 , 棋 盘 已 下 满 了 棋 子 , 则 游 戏 结 束 。 显 示 平 局 信 息。 (4) 重 复 上 述 步 骤 , 直 到 游 戏 结 束 。 6 图 形 功 能 函 数 以 下 函 数 原 形 都 在 graphics.h 中 。 (1)registerbgidriver(): (2)initgraph(int *driver, int *mode, char *path):用 于 初 始 化 图 形 系 统 , 并 装 入 相 应 的 图 形 驱 动 器 。 该 函 数 把 由 driver 所 指 向 的 图 形 驱 动 器 代 码 装 入 内 存 。如 果 图 形 驱 动 器 未 装 入 内 存 ,图 形 函 数 将 不 能 操 作 。图 形 函 数 所 用 的 屏 显 模 式 由 mode 所 指 向 的 整 数 值 确 定 。最 后 ,图 形 驱 动 器 的 路 径 是 由 path 所 指向的字符串给出。如果没有指定路径,就在当前工作路径上寻找。 (3)rectangle(int left,int top,int right,int bottom):函 数 rectangle ()用 当 前 画 出 由 坐 标 left,top 及 right,bottom 所 定 义 的 矩 形 。 (4)setcolor(int color):把 当 前 画 线 颜 色 设 置 为 color 所 指 定 的 颜 色 。 (5)closegraph():该函数使图形状态失效,并且释放用于保存图形驱动器 和字体的系统内存。当你的程序既用到图形输出又用到非图形输出时,应该用此 函数。该函数还把系统屏显模式返回到调用 initgragh()前的状态。 第 4 章 系统实现 1.程序代码 1.程序代码 /*win-tc 下的五子棋源代码*/ /*加载头文件*/ #include #include 分配函数*/ /*输入输出函数*/ /*包含系统函数, 定义杂项函数及内存 #include #include #include /*图像函数*/ /*存放有接口函数*/ /*定义了通过控制台进行数据输入和 数据输出的函数,主要是一些用户通过按键盘产生的对应操作*/ /*编译预处理,定义按键码*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 /*若想在游戏中途退出, 可按 Esc 键*/ #define ESC 0x011b /*SPACE 键表示落子*/ #define SPACE 0x3920 /*落子键*/ /*退出键*/ /*向左*/ /*向右*/ /*向下*/ /*向上*/ /*设置偏移量,即定义每一步光标移动的距离*/ #define OFFSET 20 #define OFFSET_x 4 #define OFFSET_y 3 /*定义棋盘数组大小,即棋盘的大小,这里为 18x18 格*/ #define N 19 /*定义全局变量*/ int statusNN; 手 1 或棋手 2)*/ int step_x,step_y; 离*/ int key ; int flag; /*定义的数组, 表示棋盘某点的状态 (棋 /*行走的坐标,即每一步光标移动的距 /*获取按下的键盘的键*/ /*玩家标志,当 flag=0 时,表示该点无 棋子,flag=1 表示玩家 1 的棋子,flag=2 表示玩家 2 的棋子*/ /*自定义函数原型*/ void DrawBoard(); /*画棋盘函数*/ void DrawCircle(int x,int y,int color); /*画圆函数*/ void Alternation(); void JudgePlayer(int x,int y); */ void Done(); int ResultCheck(int x,int y); void WelcomeInfo(); void ShowMessage(); /*执行下棋函数*/ /*判断当前行棋方是否获胜函数*/ /*显示欢迎信息函数*/ /*显示行棋方函数*/ /*交换行棋方函数*/ /*对不同的行棋方画不同颜色的圆函数 /*定义函数*/ /*显示欢迎信息函数*/ void WelcomeInfo() char ch ; /*移动光标到指定位置*/ /*定义显示欢迎函数数组*/ gotoxy(12,4); x,y 坐标位置*/ /*显示欢迎信息*/ /*将当前字符屏幕的光标位置移动到 printf(Welcome you to wuziqi word!); gotoxy(12,6); printf(1. up,down,left and right key to move ,); gotoxy(12,8); printf( Space key to move!); gotoxy(12,10); printf(2. Esc key to exit !); gotoxy(12,12); printf(3.Don not move the pieces out of the chessboard !); gotoxy(12,14); printf( continue ?(Y/N); ch=getchar(); 读到回车符时退出*/ /*判断程序是否要继续进行,按 n 表示退出,y 表示继续玩游戏*/ if(ch=n|ch=N) /*如果不继续进行,则推出程序*/ exit(0); /*程序中止执行,返回调用过程*/ /*从标准输入流读取一个字符并回显, /*画棋盘函数,用来画棋盘的格子和棋子,这里棋子用带某一颜色的圆圈表示*/ void DrawBoard() int x1,x2; int y1,y2; /*设置背景色*/ setbkcolor(2); /*设置线条颜色*/ setcolor(14); /*设置前景颜色, 颜色值含义如下: */ /* 0 - BLACK /* 1 - BLUE 绿 */ /* 3 - CYAN 红 */ /* 5 - MAGENTA 棕 */ /* 7 - LIGHTGRAY 淡灰 灰 淡色 8 - 15 */ /* 9 - LIGHTBLUE 淡绿 */ /* 11 - LIGHTCYAN 淡红*/ /* 13 - LIGHTMAGENTA 淡洋红 14 - YELLOW 黄*/ /* 15 - WHITE /*设置线条风格、宽度*/ setlinestyle(DOTTED_LINE,3,1); 取值和含义如下*/ /*设置画线模式,linestyle 画线风格, 白*/ 淡青 12 - LIGHTRED 淡兰 10 - LIGHTGREEN 8 - DARKGRAY 深 洋红 6 - BROWN 青 4 - RED 黑 兰 深色 0 - 7 */ 2 - GREEN /* SOLID_LINE= 0 实线 DOTTED_LINE=1 点线 */ /* CENTER_LINE=2 中心线 DASHED_LINE=3 虚线 */ /* USERBIT_LINE=4 用户自定义模式*/ /* upattern 在 linestyle=USERBIT_LINE 时,表示自定义的线型 thickness 线宽,有 2 个取值;*/ /* NORM_WIDTH=1 1 个象素宽度 THICK_WIDTH=3 3 个象素宽度*/ /*按照预设的偏移量开始画棋盘*/ for(x1=1,y1=1,y2=18;x1=18;x1+) 的起点和终点坐标*/ /*line 用于画直线,x1,y1,x2,y2 直线 line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_ y)*OFFSET); for(x1=1,y1=1,x2=18;y1=18;y1+) line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_ y)*OFFSET); /*将各个点的状态设置为 0*/ for(x1=1;x1=18;x1+) for(y1=1;y1=1;j-) if(statusjk=flag) n1+; else break; /*水平向右数*/ for(j=x,k=y;j=5) return(1); /*对垂直方向进行判断是否有 5 个同色的圆*/ n1=0; n2=0; /*垂直向上数*/ for(j=x,k=y;k=1;k-) if(statusjk=flag) n1+; else break ; /*垂直向下数*/ for(j=x,k=y;k=5) return(1); /*从左上方到右下方进行判断是否有 5 个同色的圆*/ n1=0; n2=0; /*向左上方数*/ for(j=x,k=y;(j=1)&(k=1);j-,k-) if(statusjk=flag) n1+; else break; /*向右下方数*/ for(j=x,k=y;(j=18)&(k=5) return(1); /*从右上方到左下方进行判断是否有 5 个同色的圆*/ n1=0; n2=0; /*向右上方数*/ for(j=x,k=y;(j=1);j+,k-) if(statusjk=flag) n1+; else break; /*向左下方数*/ for(j=x,k=y;(j=1)&(k=5) return(1); return(0); /*执行下棋函数*/ void Done() int i ; int j ; /*根据不同的 key 值进行不同的操作*/ switch(key) /*如果是向左移动的*/ case LEFT: /*如果下一步超出棋盘左边界则什么也不作*/ if(step_x-1=1;i-) if(statusij=0) DrawCircle(step_x,step_y,2); break ; if(i18) break ; else for(i=step_x+1,j=step_y;i18)break ; step_x=i ; /*根据不同的行棋者画不同颜色的圆*/ JudgePlayer(step_x,step_y); /*显示行棋一方是谁*/ break ; /*如果是向下移动的*/ case DOWN : /*如果下一步超出棋盘下边界则什么也不作*/ if(step_y+1)18) break ; else for(i=step_x,j=step_y+1;j18)break ; step_y=j ; JudgePlayer(step_x,step_y); break ; /*如果是向上移动的*/ case UP : /*如果下一步超出棋盘上边界则什么也不作*/ if(step_y-1)=1;j-) if(statusij=0) DrawCircle(step_x,step_y,2); break ; if(j=1&step_x=1&step_y=18) /*按下确定键后,如果棋子当前位置的状态为 0*/ if(statusstep_xstep_y=0) /*则更改棋子当前位置的状态在 flag,表示是哪个行棋者行的棋*/ statusstep_xstep_y=flag ; /*如果判断当前行棋者获胜*/ if(ResultCheck(step_x,step_y)=1) /*以指定频率打开 PC 扬声器*/ sound(1000); /*扬声器的发生时间,为 1 秒钟*/ delay(1000); nosound(); gotoxy(30,4); setbkcolor(BLUE); /*清除图形屏幕*/ cleardevice(); 用于图形工作方式*/ /*为图形输出设置当前视口*/ setviewport(100,100,540,380,1); 形函数操作的窗口大小 */ /*设置图形模式下图 /*清除屏幕显示,仅 /*left,top,right,bottom 窗口大小坐标 clip 是否剪切*/ /*1 表示对超出设置图 形窗口大小的操作不显示*/ /*0 表示超出的内容也 显示。*/ /*绿色实填充*/ setfillstyle(1,2); 充颜色*/ /*color 填充颜色 pattern 填充模式,共 13 种,具体如下:*/ /* EMPTY_FILL 景色填充 SOLID_FILL 实填充 */ /* LINE_FILL - 线填充 LTSLASH_FILL 斜线填充 */ 背 /*设置填充模式和填 /* SLASH_FILL 粗斜线填充 */ /* BKSLASH_FILL 反粗斜线填充 LTBKSLASH_FILL 反斜线填充 */ /* HATCH_FILL 格填充 XHATCH_FILL 斜网格填充 */ /* INTERLEAVE_FILL 间隔点线填充 WIDE_DOT_FILL 稀疏点填充*/ /* CLOSE_DOT_FILL 密集点填充 USER_FILL 用户自定义填充*/ setcolor(YELLOW); rectangle(0,0,439,279); 上画一个矩形*/ floodfill(50,50,14); 区域,x,y 要填充区域内的任意一点坐标*/ /*border 填充区域边 界的颜色*/ setcolor(12); settextstyle(1,0,5); /*三重笔划字体, 水平放大 5 倍*/ outtextxy(20,20,Congratulation !); setcolor(15); settextstyle(3,0,4); /*如果是 Player1 获胜,显示获胜信息*/ if(flag=1) /*无衬笔划字体, 水平放大 5 倍*/ /*填充一个有边界的 /*图形方式下, 在屏幕 网 outtextxy(20,120,Player1 win the game !); /*如果是 Player1 获胜,显示获胜信息*/ if(flag=2) /*无衬笔划字体, 水平放大 5 倍*/ outtextxy(20,120,Player2 win the game !); setcolor(14); settextstyle(2,0,8); getch(); 字符,但不显示在屏幕上*/ exit(0); /*如果当前行棋者没有获胜,则交换行棋方,接着下棋*/ Alternation(); /*提示行棋方是谁,即显示正在落子的玩家*/ ShowMessage(); break; else /*从控制台读取一个 break ; /*显示行棋方函数,用来显示正在落子的玩家*/ void ShowMessage() /*轮到 Player1 行棋*/ if(flag=1) setcolor(2); settextstyle(1,0,1); gotoxy(100,30); /*覆盖原有的字迹*/ outtextxy(100,30,Its turn to Player2 !); setcolor(12); settextstyle(1,0,1); outtextxy(100,30,Its turn to Player1 !); /*轮到 Player2 行棋*/ if(flag=2) setcolor(2); settextstyle(1,0,1); /*覆盖原有的字迹*/ outtextxy(100,30,Its turn to Player1 !); setcolor(12); settextstyle(1,0,1); gotoxy(100,20); outtextxy(100,30,Its turn to Player2 !); /*主函数*/ int main() int gdriver; int gmode; int errorcode; /*清空文本模式窗口*/ clrscr(); /*显示欢迎信息*/ WelcomeInfo(); gdriver=DETECT; gmode=0; /*清除当前字符窗口所有字符*/ /*初始化图形系统*/ initgraph(&gdriver,&gmode,); /*初始化图形系统 */ /*graphdriver 图形驱动器代号, 具体如 下: */ /*DETECT EGA 3 */ /*EGA64 IBM8514 6 */ /*HERCMONO 9 */ /*PC3270 驱动器的工作模式,具体如下: */ /*CGAC0= 0 page */ /*CGAC1= 1 page */ /*CGAC2= 2 page */ /*CGAC3= 3 page */ /*CGAHI= 4 */ /*MCGAC0= 0 page */ /*MCGAC1= 1 page */ /*MCGAC2= 2 page */ 320x200 palette 2 1 320x200 palette 1 1 320x200 palette 0 1 640x200 1 page 320x200 palette 3 1 320x200 palette 2 1 320x200 palette 1 1 320x200 palette 0 1 10 graphmode 选定图形 7 ATT400 8 VGA 4 EGAMONO 5 0 CGA 1 MCGA 2 /*MCGAC3= 3 page */ /*MCGAMED= 4 */ /*MCGAHI= 5 */ /*EGALO= 0 pages */ /*EGAHI= 1 pages */ /*EGA64LO= 0 1 page */ /*EGA64HI= 1 1 page */ /*EGAMONOHI= 0 1 page */ 320x200 palette 3 1 640x200 1 page 640x480 1 page 640x200 16 color 4 640x350 16 color 2 640x200 16 color 640x350 4 color 640x350 64K on card /*256K on card 4 pages */ /*HERCMONOHI = 0 pages */ /*ATT400C0= 0 1 page */ /*ATT400C1= 1 1 page */ /*ATT400C2= 2 1 page */ /*ATT400C3= 3 1 page */ /*ATT400MED= 4 */ 640x200 1 page 320x200 palette 3 320x200 palette 2 320x200 palette 1 320x200 palette 0 720x348 2 /*ATT400HI= 5 *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民法典培训课件教学
- 国画类考试试题及答案
- 2024鸡西市恒山区大恒山街道社区工作者招聘考试试题
- 湖北省宜昌市二中2026届高一化学第一学期期中统考试题含解析
- 2026届全国百校名师联盟高二化学第一学期期中综合测试模拟试题含解析
- 国开期末考试《行政领导学》机考试题及答案
- 2025年抖音知识题库及参考答案(完整版)
- 2025年污水检测试题及答案
- 2025年重庆市车管所事业单位招聘考试模拟试题及答案解析
- 2025年科学道德与学术规范知识竞赛决赛题库(含答案)
- 一线班组质量奖申报材料
- 蜜雪冰城加盟合同(2025年版)
- 消毒供应质量控制指标(2024年版)
- ACS合并消化道出血治疗策略
- 数字化转型视角下H公司订单管理优化策略研究
- 精益管理看板
- 汽车产品初期流动管理计划
- 《战略资源稀土》课件
- 《过程审核讲义》课件
- 中医内科学虚劳培训课件
- DB41T 2086-2020 加油加气站内电动汽车充电设施建设技术规范
评论
0/150
提交评论