版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdio.h>#include <dos.h>#include <conio.h>#include <graphics.h>#include <stdlib.h>#ifdef _cplusplus#define _CPPARGS .#else#define _CPPARGS#endif#define MINBOXSIZE 15 /* 最小方块的尺寸 */#define BGCOLOR 7 /* 背景着色 */#define GX 200#define GY 10#define SJNUM 10000 /* 每当玩
2、家打到一万分等级加一级*/* 按键码*/#define VK_LEFT 0x4b00#define VK_RIGHT 0x4d00#define VK_DOWN 0x5000#define VK_UP 0x4800#define VK_HOME 0x4700#define VK_END 0x4f00#define VK_SPACE 0x3920#define VK_ESC 0x011b#define VK_ENTER 0x1c0d/* 定义俄罗斯方块的方向(我定义他为4种)*/#define F_DONG 0#define F_NAN 1#define F_XI 2#define F_BEI
3、3#define NEXTCOL 20 /* 要出的下一个方块的纵坐标*/#define NEXTROW 12 /* 要出的下一个方块的横从标*/#define MAXROW 14 /* 游戏屏幕大小*/#define MAXCOL 20#define SCCOL 100 /*游戏屏幕大显示器上的相对位置*/#define SCROW 60int gril2216; /* 游戏屏幕坐标*/int col=1,row=7; /* 当前方块的横纵坐标*/int boxfx=0,boxgs=0; /* 当前寺块的形壮和方向*/int nextboxfx=0,nextboxgs=0,maxcol=22
4、;/*下一个方块的形壮和方向*/int minboxcolor=6,nextminboxcolor=6;int num=0; /*游戏分*/int dj=0,gamedj10=18,16,14,12,10,8,6,4,2,1;/* 游戏等级*/* 以下我用了一个3维数组来纪录方块的最初形状和方向*/int boxstr7416=1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0
5、,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0
6、,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0
7、,1,1,0,0,1,1,0,0,0,0,0,0.0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0.0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0;/* 随机得到当前方块和下一个方块的形状和方向*/void boxrad()minboxcolor=nextminboxcolor;boxgs=nextboxgs;boxfx=nextboxfx;nextminboxcolor=random(14)+1;if(nextminbo
8、xcolor=4|nextminboxcolor=7|nextminboxcolor=8)nextminboxcolor=9;nextboxfx=F_DONG;nextboxgs=random(7);/*初始化图形模试*/void init(int gdrive,int gmode)int errorcode;initgraph(&gdrive,&gmode,"D:tc");errorcode=graphresult();if(errorcode!=grOk)printf("error of: %s",grapherrormsg(erro
9、rcode);exit(1);/* 在图形模式下的清屏 */void cls()setfillstyle(SOLID_FILL,0);setcolor(0);bar(0,0,640,480);/*在图形模式下的高级清屏*/void clscr(int a,int b,int c,int d,int color)setfillstyle(SOLID_FILL,color);setcolor(color);bar(a,b,c,d);/*最小方块的绘制*/void minbox(int asc,int bsc,int color,int bdcolor)int a=0,b=0;a=SCCOL+asc
10、;b=SCROW+bsc;clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color);if(color!=BGCOLOR)setcolor(bdcolor);line(a+1,b+1,a-1+MINBOXSIZE,b+1);line(a+1,b+1,a+1,b-1+MINBOXSIZE);line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE);line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE);/*游戏中出现的文字*/void txt(int
11、 a,int b,char *txt,int font,int color)setcolor(color);settextstyle(0,0,font);outtextxy(a,b,txt);/*windows 绘制*/void win(int a,int b,int c,int d,int bgcolor,int bordercolor)clscr(a,b,c,d,bgcolor);setcolor(bordercolor);line(a,b,c,b);line(a,b,a,d);line(a,d,c,d);line(c,b,c,d);/* 当前方块的绘制*/void funbox(int
12、a,int b,int color,int bdcolor)int i,j;int boxz44;for(i=0;i<16;i+)boxzi/4i%4=boxstrboxgsboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(boxzij=1)minbox(j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color,bdcolor);/*下一个方块的绘制*/void nextfunbox(int a,int b,int color,int bdcolor)int i,j;int boxz44;for(i=0;i&l
13、t;16;i+)boxzi/4i%4=boxstrnextboxgsnextboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(boxzij=1)minbox(j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color,bdcolor);/*时间中断定义*/#define TIMER 0x1cint TimerCounter=0;void interrupt ( *oldhandler)(_CPPARGS);void interrupt newhandler(_CPPARGS)TimerCounter+;oldhandler();voi
14、d SetTimer(void interrupt (*IntProc)(_CPPARGS)oldhandler=getvect(TIMER);disable();setvect(TIMER,IntProc);enable();/*由于游戏的规则,消掉都有最小方块的一行*/void delcol(int a)int i,j;for(i=a;i>1;i-)for(j=1;j<15;j+)minbox(j*MINBOXSIZE,i*MINBOXSIZE,BGCOLOR,BGCOLOR);grilij=grili-1j;if(grilij=1)minbox(j*MINBOXSIZE,i*
15、MINBOXSIZE,minboxcolor,0);/*消掉所有都有最小方块的行*/void delete()int i,j,zero,delgx=0;char *nm="00000"for(i=1;i<21;i+)zero=0;for(j=1;j<15;j+)if(grilij=0)zero=1;if(zero=0)delcol(i);delgx+;num=num+delgx*delgx*10;dj=num/10000;sprintf(nm,"%d",num);clscr(456,173,500,200,4);txt(456,173,&qu
16、ot;Number:",1,15);txt(456,193,nm,1,15);/*时间中断结束*/void KillTimer()disable();setvect(TIMER,oldhandler);enable();/* 测试当前方块是否可以向下落*/int downok()int i,j,k=1,a44;for(i=0;i<16;i+)ai/4i%4=boxstrboxgsboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(aij && grilcol+i+1row+j)k=0;return(k);/* 测试当前方块
17、是否可以向左行*/int leftok()int i,j,k=1,a44;for(i=0;i<16;i+)ai/4i%4=boxstrboxgsboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(aij && grilcol+irow+j-1)k=0;return(k);/* 测试当前方块是否可以向右行*/int rightok()int i,j,k=1,a44;for(i=0;i<16;i+)ai/4i%4=boxstrboxgsboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(ai
18、j && grilcol+irow+j+1)k=0;return(k);/* 测试当前方块是否可以变形*/int upok()int i,j,k=1,a44;for(i=0;i<4;i+)for(i=0;i<16;i+)ai/4i%4=boxstrboxgsboxfx+1i;for(i=3;i>=0;i-)for(j=3;j>=0;j-)if(aij && grilcol+irow+j)k=0;return(k);/*当前方块落下之后,给屏幕坐标作标记*/void setgril()int i,j,a44;funbox(0,0,minbo
19、xcolor,0);for(i=0;i<16;i+)ai/4i%4=boxstrboxgsboxfxi;for(i=0;i<4;i+)for(j=0;j<4;j+)if(aij)grilcol+irow+j=1;col=1;row=7;/*游戏结束*/void gameover()int i,j;for(i=20;i>0;i-)for(j=1;j<15;j+)minbox(j*MINBOXSIZE,i*MINBOXSIZE,2,0);txt(103,203,"Game Over",3,10);/*按键的设置*/void call_key(int
20、 keyx)switch(keyx)case VK_DOWN: /*下方向键,横坐标加一。*/if(downok()col+;funbox(0,0,minboxcolor,0);elsefunbox(0,0,minboxcolor,0);setgril();nextfunbox(NEXTCOL,NEXTROW,4,4);boxrad();nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0);delete();break;case VK_UP: /*上方向键,方向形状旋转90度*/if(upok()boxfx+;if(boxfx>3)boxfx=0;f
21、unbox(0,0,minboxcolor,0);break;case VK_LEFT: /*左方向键,纵坐标减一*/if(leftok()row-;funbox(0,0,minboxcolor,0);break;case VK_RIGHT: /*右方向键,纵坐标加一*/if(rightok()row+;funbox(0,0,minboxcolor,0);break;case VK_SPACE: /*空格键,直接落到最后可以落到的们置*/while(downok()col+;funbox(0,0,minboxcolor,0);setgril();nextfunbox(NEXTCOL,NEXTR
22、OW,4,4);boxrad();nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0);delete();break;default:txt(423,53,"worng key!",1,4);txt(428,80,"Plese Enter Anly Key AG!",1,4);getch();clscr(420,50,622,97,BGCOLOR);/*时间中断开始*/void timezd(void)int key;SetTimer(newhandler);boxrad();nextfunbox(NEXTCOL,N
23、EXTROW,nextminboxcolor,0);for(;)if(bioskey(1)key=bioskey(0);funbox(0,0,BGCOLOR,BGCOLOR);if(key=VK_ESC)break;call_key(key);if(TimerCounter>gamedjdj)TimerCounter=0;if(downok()funbox(0,0,BGCOLOR,BGCOLOR);col+;funbox(0,0,minboxcolor,0);else if(col=1)gameover();getch();break;setgril();delete();funbox(
24、0,0,minboxcolor,0);col=1;row=7;funbox(0,0,BGCOLOR,BGCOLOR);nextfunbox(NEXTCOL,NEXTROW,4,4);boxrad();nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor,0);/*主程序开始*/void main(void)int i,j;char *nm="00000"init(VGA,VGAHI);cls();/*屏幕坐标初始化*/for(i=0;i<=MAXCOL+1;i+)for(j=0;j<=MAXROW+1;j+)grilij=0;fo
25、r(i=0;i<=MAXCOL+1;i+) grili0=1;grili15=1;for(j=1;j<=MAXROW;j+)gril0j=1;gril21j=1;clscr(0,0,640,480,15);win(1,1,639,479,4,15);win(SCCOL+MINBOXSIZE-2,SCROW+MINBOXSIZE-2,SCCOL+15*MINBOXSIZE+2,SCROW+21*MINBOXSIZE+2,BGCOLOR,0);nextboxgs=random(8);nextboxfx=random(4);sprintf(nm,"%d",num);t
26、xt(456,173,"Number:",1,15);txt(456,193,nm,1,15);txt(456,243,"Next Box:",1,15);timezd();KillTimer();closegraph();56回答者:热心网友 | 回答时间:2008-9-13 09:11 | 我来评论相关内容2011-5-15VC6.0环境下的俄罗斯方块C语言源代码52009-11-4求俄罗斯方块C语言源代码,用Microsoft C+ 6.0能编译出来。92008-6-19俄罗斯方块的c语言源代码 api实现22009-9-8求用c语言写的俄罗斯方块
27、源代码432011-1-29哪个才是俄罗斯方块源代码 C语言的更多关于俄罗斯方块源码的问题>>查看同主题问题: 俄罗斯方块 语言 语言 源代码等待您来回答0回答MiniGUI 程序中为什么我的鼠标无法正常工作0回答smdk2410 是什么,与S3C2410什么关系1回答那个开题报告也能发我一份么!谢谢!你有上市公司财务风险研究的开题.0回答50关于百雀羚凡士林保湿润肤霜与大宝SOD蜜的市场份额比例的具体情况,大.2回答“MiniGUI图形库”这个词是怎么读的0回答20谁有 s3c2410板子的wince6.0 的BSP包。0回答10求运算放大器应用的开题报告,及运算放大器的现状,学
28、习的重点和难点。1回答20sod公司的电影有迅雷地址的,有的朋友发723453145 好了给分更多等待您来回答的问题>>其他回答 共8条只有100分回答者: chenyilong58 | 一级 | 2008-9-13 09:04#include <graphics.h>#include <stdio.h>#include <dos.h>#include <conio.h>#include <time.h>#include <math.h>#include <stdlib.h>/*定义左上角点在屏幕上
29、的位置*/#define MAPXOFT 9#define MAPYOFT 5/*定义下一个方块显示的位置*/#define MAPXOFT1 13#define MAPYOFT1 -2#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000 /*此键为加速键*/#define UP 0x4800 /*此键为变形键*/#define ESC 0x011b /*此键为退出键*/#define ENTER 0x1c0d#define TIMER 0x1c /* 时钟中断的中断号 */* 中断处理函数在C和C+中的表示略有不同。如果定义了_
30、cplusplus则表示在C+环境下,否则是在C环境下。 */#ifdef _cplusplus#define _CPPARGS .#else#define _CPPARGS#endifint TimerCounter=0; /* 计时变量,每秒钟增加18。 */* 指向原来时钟中断处理过程入口的中断处理函数指针(句柄) */void interrupt ( *oldhandler)(_CPPARGS);/* 新的时钟中断处理函数 */void interrupt newhandler(_CPPARGS) /* increase the global counter */ TimerCount
31、er+; /* call the old routine */ oldhandler();/* 设置新的时钟中断处理过程 */void SetTimer(void interrupt (*IntProc)(_CPPARGS) oldhandler=getvect(TIMER); disable(); /* 设置新的时钟中断处理过程时,禁止所有中断 */ setvect(TIMER,IntProc); enable(); /* 开启中断 */* 恢复原有的时钟中断处理过程 */void KillTimer() disable(); setvect(TIMER,oldhandler); enabl
32、e();struct shape int xy8,next;struct shape shapes19=/*x1,y1,x2,y2,x3,y3,x4,y4 指四个小方块的相对坐标,next指此方块变形后应变为哪个小方块 x1,y1,x2,y2,x3,y3,x4,y4,next*/ 0,-2, 0,-1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 1,-1, 1, 0, 2, 0,-2, 1,-2, 1,-1, 1, 0, 3, -1,-1,-1, 0, 0,-1, 1,-1, 0, 0,-2, 0,-1, 0, 0, 1,-2, 5, -1,-1, 0,-1, 1,-1, 1,
33、0, 6, 0, 0, 1,-2, 1,-1, 1, 0, 7, -1,-1,-1, 0, 0, 0, 1, 0, 4, -1, 0, 0,-1, 0, 0, 1, 0, 9, 0,-2, 0,-1, 0, 0, 1,-1,10, -1,-1, 0,-1, 1,-1, 0, 0,11, 0,-1, 1,-2, 1,-1, 1, 0, 8, -1, 0, 0,-1, 0, 0, 1,-1,13, 0,-2, 0,-1, 1,-1, 1, 0,12, -1,-1, 0,-1, 0, 0, 1, 0,15, 0,-1, 0, 0, 1,-2, 1,-1,14, 0,-3, 0,-2, 0,-1, 0
34、, 0,17, -1, 0, 0, 0, 1, 0, 2, 0,16, 0,-1, 0, 0, 1,-1, 1, 0,18;int board1020=0;/*定义游戏板初始化为0*/char sp="0",le="0",sc="00000"int speed,speed0,level,score;int sign,flag;int style,style1; /*style为当前方块的种类,style1为即将输出的方块的种类*/void draw_block(int x,int y,int style,int way);void d
35、raw_little_block(int x,int y);void init();void initialize();void speed_change(void);void score_change(int);void kill_line(int y);void fill_board(int x,int y, int style);int change(int *i,int *j,int key);void renovate(void);void ajustment(void);void level_change(void);main() int i,j,key,x0=5,y0=1; ra
36、ndomize(); while(!flag) /*flag为0表示重新开始游戏*/ level=score=speed=0; strcpy(le,"0"); strcpy(sp,"0"); strcpy(sc,"00000"); for(i=0;i<10;i+) for(j=0;j<20;j+) boardij=0; /*初始化一些变量为0*/ initialize(); /*初始化进入图形模式*/ init(); /*初始化游戏板记分器等*/ SetTimer(newhandler); /* 修改时钟中断 */ aju
37、stment(); /*开始游戏前调整速度和高度*/ if(level>0) level_change(); /*根据高度随机确定方块是否存在*/ style=random(19); /*随机确定方块种类*/ while(1) i=x0,j=y0; style1=random(19); /*随机确定即将出现的方块种类*/ setcolor(WHITE); sign=1; draw_block(MAPXOFT1,MAPYOFT1,style1,1); /*画出即将出现的方块*/ for(j=y0;j<=20;j+) /*使方块下降*/ if(!check_block(i,j,styl
38、e) break; draw_block(i,j,style,1); while(1) if(speed0=0) /*未按下加速键时的处理*/ if (TimerCounter>18/(speed+1) /* 恢复计时变量 */ TimerCounter=0; break; else if(TimerCounter>18/(9+1)/*按下加速键时的处理*/ /* 恢复计时变量 */ TimerCounter=0; speed0=0; break; if(bioskey(1) key=bioskey(0); if(change(&i,&j,key)/*根据按键值做调
39、整*/ flag=1; goto end; draw_block(i,j,style,0); renovate(); /*刷新屏幕*/ if(j=y0) break; j-; draw_block(i,j,style,1); fill_board(i,j,style); sign=1; draw_block(MAPXOFT1,MAPYOFT1,style1,0); style=style1; kill_line(j); /*消去的函数,消去若干行并改变分数和速度*/ while(bioskey(1) /*清除内存中的按键*/ key=bioskey(0); setcolor(CYAN); se
40、ttextstyle(0,0,2); TimerCounter=0; while(1) if(TimerCounter>54) TimerCounter=0; break; while(bioskey(1) /*清除内存中的按键*/ key=bioskey(0); outtextxy(400,340,"Game over!"); outtextxy(360,360,"Enter to replay."); outtextxy(360,380,"Esc to quit."); while(bioskey(1)=0); key=bi
41、oskey(0); end:; closegraph(); KillTimer(); if(key=ESC|flag) break; void initialize()/*初始化进入图形模式*/ int gdriver = VGA, gmode=VGAHI, errorcode; /* initialize graphics mode */ initgraph(&gdriver, &gmode, "c:Turboc2"); /* read result of initialization */ errorcode = graphresult(); if (e
42、rrorcode != grOk) /* an error occurred */ printf("Graphics error: %sn", grapherrormsg(errorcode); printf("Press any key to halt:"); getch(); exit(1); /* return with error code */ void init(void)/*初始化游戏板记分器等*/ int x1; x1=5+MAPXOFT; setcolor(GREEN); circle(x1+0.5)*16,(MAPYOFT-2)*16
43、,3*16); setcolor(WHITE); line(x1-0.6)*16,(MAPYOFT-3.2)*16,x1*16,(MAPYOFT-3.2)*16); line(x1+1.4)*16,(MAPYOFT-3.2)*16,(x1+2.0)*16,(MAPYOFT-3.2)*16); line(x1+0.5)*16,(MAPYOFT-2)*16,(x1+0.5)*16,(MAPYOFT-1.7)*16); circle(x1+0.5)*16,(MAPYOFT-0.9)*16,0.3*16); setcolor(CYAN); line(MAPXOFT+3)*16,(MAPYOFT+21)
44、*16,MAPXOFT*16,(MAPYOFT+23.5)*16); line(MAPXOFT+5.5)*16,(MAPYOFT+21)*16,MAPXOFT*16,(MAPYOFT+26)*16); line(MAPXOFT+9)*16,(MAPYOFT+21)*16,(MAPXOFT+12)*16,(MAPYOFT+23.5)*16); line(MAPXOFT+6.5)*16,(MAPYOFT+21)*16,(MAPXOFT+12)*16,(MAPYOFT+26)*16); setcolor(MAGENTA); ellipse(MAPXOFT+1)*16,(MAPYOFT+11)*16,90,270,7*16,7*16); ellipse(MAPXOFT+11)*16,(MAPYO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《劳动教育实践》课后笔记
- 《工程化学》本科笔记
- 无人船生产企业的完整账务处理-做账实操
- wipo-2023年海牙年鉴摘要
- 2025新译林版英语七年级下Unit 5 Animal friends单词表
- 安徽皖南八校2024-2025学年高三年级上册8月摸底考试地理试题
- 2024年双端面磨床项目资金筹措计划书代可行性研究报告
- 2024年农业运输项目资金筹措计划书代可行性研究报告
- 小升初常考易错题-现代文阅读检测卷(二)-2022-2023学年部编版六年级语文下册
- 2023年氢氧化亚镍资金需求报告
- 自贡市盐化工产业发展研究
- GB/T 22890.1-2024皮革柔软皮革防水性能的测定第1部分:反复线压缩法(透度计法)
- 《光伏发电工程安全预评价规程》(NBT 32039-2017)
- 是否混声四部合唱谱
- 从局部到整体:5G系统观-完整版
- 《白酒基础知识培训》课件
- 苋菜种植技术要点
- 第4课西汉与东汉统一多民族封建国家的巩固教学设计-高中历史必修中外历史纲要上册
- 物流管理职业生涯规划
- 团队建设创造和谐的人际关系与文化
- 新时代中小学思政课一体化建设探究
评论
0/150
提交评论