为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

俄罗斯方块C语言实现

2017-09-30 27页 doc 72KB 31阅读

用户头像

is_729658

暂无简介

举报
俄罗斯方块C语言实现俄罗斯方块C语言实现 安阳师范学院本科学生毕业论文 俄罗斯方块的C语言实现 姓 名 马成强 系(院) 计算机与信息工程学院 专 业 网络 年 级 08级 学 号 080902072 指导教师 王希杰 日 期 2012年5月 1 目录 1. 摘要..........................................................2 2. 前言..........................................................3 3. 需求分析...
俄罗斯方块C语言实现
俄罗斯方块C语言实现 安阳师范学院本科学生毕业论文 俄罗斯方块的C语言实现 姓 名 马成强 系(院) 计算机与信息工程学院 专 业 网络 年 级 08级 学 号 080902072 指导教师 王希杰 日 期 2012年5月 1 目录 1. 摘要..........................................................2 2. 前言..........................................................3 3. 需求......................................................3 4. 游戏总体设计..................................................4 5. 功能设计分析..................................................4 5.1游戏方块预览 ...........................................4 5.2游戏方块控制..............................................4 5.3游戏显示更新..............................................4 5.4游戏速度分数更新..........................................4 6.流程图.........................................................5 7.具体设计.......................................................6 7.1定义变量..................................................6 7.2定义声明函数..............................................6 7.3过程判断..................................................6 8.系统测试.......................................................7 8.1游戏界面显示测试..........................................7 8.2按键功能测试..............................................7 8.3方块的消行和行满游戏结束功能的测试........................7 8.4测试结果及界面显示........................................7 9.参考文献.......................................................8 10.致谢......................................................8 11源代码........................................................9 1.摘要, 俄罗斯方块是一款风靡全球的掌上游戏机和PC机游戏,它造成的轰动与创 造的经济价值可以说是游戏史上的一件大事。它由俄罗斯人阿列克谢?帕基特诺 夫发明,故得此名。俄罗斯方块的基本是移动、旋转和摆放游戏自动输出的 各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷, 俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不 低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏 都无法相比的。相信大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方 块时代。由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏 程序设计的练习材。 关键词:俄罗斯方块开发 游戏编程 程序开发 Abstracts Tetris is a fashionable global handheld game and PC games,it caused stir and create the economic value of gaming history is a great event.It is invented by the Russian Alexey Pazhitnov.The basic rule of tetris is moving,rotation and put the Game output squares,It arranged in a complete row or a complete multi row,Chac and 2 score.It seems simple but Full of change.As household the mass games all ages,Its popularity is any games that cannot be compared.Tetris often used for game programming practice subject. Key words: Tetris development ,Game programming ,program development 2.前言: 俄罗斯方块(Tetris)原本是前苏联科学家阿列克谢?帕吉特洛夫在1984年6月利用空闲时间所编写的游戏程序,据说游戏的作者最喜欢网球(Tennis)运动,于是,它把来源于希腊语的tetra(意为“四”)与其结合,造了“tetris”一词,之后开始提供授权给各个游戏公司,造成各平台上俄罗斯游戏软件大量发行的现象。 俄罗斯方块由于上手简单、老少皆宜,从而成为了家喻户晓款风靡全球的一款电视游戏机和掌上游戏机游戏。 C语言则是目前国际上比较流行的计算机高级编程语言之一,因其简洁、使用方便且具备强大的功能而受到编程人员的普遍青睐。它既适合作为系统描述语言,也可以用来编写系统软件,还可以来编写应用软件。 用C语言来编写俄罗斯方块这个游戏有较大优势:C语言具有各种各样的数据类型,并引入了指针概念,使得程序效率更高;C语言还包含很广泛的运算符;另外C语言具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断能力也比较强大。 选择此论文题是旨在训练基本编程能力和游戏开发技巧,熟悉C语言图形模式下的编程。本程序中涉及结构体、数组、时钟中断及绘图等方面的知识。通过本程序的训练,能对C语言有一个更深刻的了解,掌握俄罗斯方块游戏开发的基本原理,为将来开发出高质量的游戏软件打下坚实的基础 3.需求分析: 俄罗斯方块游戏由19种不同状态的方块随机产生,进入界面时方块开始自由下移,下落的时候玩家左侧的窗口填满,则游戏结束。 游戏界面需求:界面要求良好,这样可以给玩家带来良好的视觉享受。游戏的背景,背景色为黑色,方块为白色,这样便于方块的移动和消行,键盘上按键w来控制方块的变形即旋转,以便玩家可以得到合适的形状和位置落下。 游戏形状需求:用数组作为存储方块19 种状态的数据结构,即长条形、Z 字形、反Z 形、田字形、7 字形、反7 形、T 字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形。 键盘处理需求:方块下落时,可通过键盘方向键(w、a、s、d)对该方块进行向上(变形),向下(加速)、向左、向右移动。 显示需求:当方块落下后能完全填满一行,则这一行消去,并且给玩家加分,同时下一个方块被打印出来.分数达到一定时,关数增加,速度加快,直到游戏结束。 游戏编写使用语言需求:C语言其自身有许多优点:有利于用c编写俄罗斯方块游戏。 (1)C语言简洁、紧凑、使用方便、灵活。程序书写形式自由。 (2)运算符丰富,c语言共有34中运算符,括号、赋值、强制类型转换、从而使c语言的运算符极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他语言中难以实现的运算。 3 (3)数据结构丰富,具有现代语言的各种数据结构。 (4)C语言具有结构化的控制语句,如if„else语句,while语句,do„while语句,switch语句,for语句,用函数作为程序的模块单位,便于实现程序的模块化。 (5)语法限制不太严格,程序设计自由度大。 (6)C语言具有高级语言的功能又具有低级语言的功能,编写系统安全性好。 4.游戏总体设计, 当用户进入游戏界面时,会随机生成一个方块,自动下落,用户可以按 下“p”暂停游戏,也可以按“w”对方块进行变形,得到适合的方块,按“a”、 “s”、“d”分别将方块左移、下移、右移;当方块遇到障碍物时就停止,或 者方块的下落使某行满行,下一个方块就会被打印出来;在界面右侧会生成 下一个方块,显示游戏的得分score,游戏的关数level;如果窗口中的某 行被填充满了,就将此行消除,得分是消去行数的倍数,当玩家达到一定分 数时,进入下一关,方块的下降速度speed会随着level的增加而变快,当 窗口中无法容纳下落的方块时,则游戏结束. 5.功能设计分析, 5.1游戏方块预览 游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块 时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家 控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏 方块预览区域中需要显示随机生成的游戏方块。 5.2游戏方块控制 游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右 移、快速下移、自由下落、旋转功能,以及行满消除行的功能。 5.3游戏显示更新 游戏显示更新功能。当游戏方块左右移动、下落、旋转时,要清除先前 的游戏方块,用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当 前状态。 5.4游戏速度分数更新 游戏速度分数更新功能。在游戏玩家进行游戏过程中,需要按照一定的 游戏规则给游戏玩家计算游戏分数。比如,消除一行加1分。当游戏分数达 到一定数量之后,需要给游戏者进行等级的上升,每上升一个等级,游戏方 块的下落速度将加快,游戏的难度将增加。 6.流程图, 开始 4 初始化背景 定义并开始时间 是否结束, Y N 是否有键入, N Y 自由下落 对左右下变形暂停等进行处理 显示并打印背景 是否到底, N Y 产生并打印下一个方块 N 是否消行, Y Allscore += score Case 0; Case 1; Case 9; Speed=25 Speed=20 Speed=0 Level=0 Level=1 Level=9 printf("%d", level); printf("\n") return 0; 结束 5 7.具体设计: 7.1定义变量 int box_x, box_y; //存储方块的位置 int form, change, nextform, nextchange;//定义方块的形状,下一个形 状和变形 clock_t starttime;//定义开始时间 int BG[CHANG][KUAN] = {0};//定义背景并初始化 int Is_Gethit = 0;//接受按键为1, 否则为0 int Sfhf;//判断是否非法 int Is_GameOver;//判断游戏是否结束 int score = 0, Allscore = 0;//你的得分 int speed ;//速度 int level ;//关数 int kbhit(void); //检查当前是否有键盘输入 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);//设置控制台 定义一个数组Tetris,通过Tetris方块数组输出方块的所有的俄罗斯方块 图形,共有19种不同的俄罗斯方块图形 7.2定义声明函数 1(gotoxy(),//用gotoxy(int x, int y)设置光标位置(为了控制方块出 现的位置,以及定位其他输出显示的位置) 2(Beijing(),//用Beijing()函数初始化背景 3(Print_Beijing(),//用Print_Beijing()重新打印背景 4(Print_Box(),//打印方块 5(Rong_Beijing(),//用Rong_Beijing()函数将方块融入背景 6(NextTetris(),//用NextTetris()函数设置下一个方块并打印出来 7(Disappear(),//用Disappear()函数实现对方块的消行 8(Chac_Box()//擦出方块函数,当方块下落到下一时刻时,上一时刻的方 块必须进行擦出,调用该函数显示下一方块 9(Getkbhit(),//用Getkbhit()函数对上下左右键进行处理,如果键 入“p”则暂停,如果键入’w’、’a’、’s’、’d’则分别将方 块变形,左移,下移,右移;没有键入则自动下移。 10(Score(),//用Score()函数对游戏进行计分和难度设置。 11(Pause(),//用Pause()函数来实现暂停游戏 7.3过程判断 进入界面时,判断是否有键入,用 kbhit()检测,如果有键入,则执行相应的操作,w 变形,a左移,s下移,d右移,p暂停游戏,如果没有键入,自由下落。 void Getkbhit()//对上下左右按键的处理 { if(kbhit())//如果有按键刚进入按键处理 { switch(getch()) 6 { case'p': Pause(); break; case 'w': if((change + 1) > 3) { if(Sfhf(box_x, box_y, form, 0)) { Chac_Box(box_x, box_y, form, change); change = 0; Print_Box(box_x, box_y, form, change); } } else if(Sfhf(box_x, box_y, form, change + 1)) { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, box_y, form, ++change); } break; case 's': if(Sfhf(box_x, box_y + 1, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, ++box_y, form, change); } break; case 'a': if(Sfhf(box_x - 1, box_y, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(--box_x, box_y, form, change); } 7 break; case 'd': if(Sfhf(box_x + 1, box_y, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(++box_x, box_y, form, change); } break; default :break; } } if((clock() - starttime) >= 1000 && Sfhf(box_x, box_y + 1, form, change))//自动下落 { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, ++box_y, form, change); starttime = clock(); } } 判断方块是否到达底部,如到达,则重新打印下一个方块。 void NextTetris()//设置下一个方块并打印出来 { gotoxy(KUAN*2+5, CHANG-21); printf("next tetris:"); Chac_Box(KUAN+5, CHANG-20, nextform, nextchange); nextform = rand()%7; nextchange = rand()%4; Print_Box(KUAN+5, CHANG-20, nextform, nextchange); } 方块到达底部时,进行行满判断,如行满,用Disappear()进行消行。 在游戏过程中,方块的下落速度speed会随着level的增加变快。用 Is_GameOver()判断游戏是否结束,当游戏窗口不允许有方块下落时,游戏结束 int Is_GameOver()//判断游戏结束了没 { int j; for(j = 1; j < KUAN-1; ++j) if(BG[2][j] == 1) 8 return 0;//返回0代表 死掉了 return 1;//返回1代表还活着 } 8.系统测试, 8.1游戏界面显示测试 进入游戏界面时,窗口左侧显示一个25行14列的游戏窗口,右侧显示next tetris :,score:,level: 8.2按键功能测试 在方块下落的过程中,按下w方块就变形;按下a方块左移,碰到边界自动下移,遇到障碍物停止;按下d方块右移,碰到边界自动下移,遇到障碍物就停止;按下p方块停止不动;按下d方块自由下落,遇到障碍物停止。 8.3方块的消行和游戏结束功能的测试 在游戏过程中有一行行满时,这行自动消去,下一个方块被打印出来,同时score开始加相应的分数。 8.4测试结果及界面显示 结果:经测试以上测试都能够实现, 游戏界面: 9 9.参考文献, 1,《C语言程序设计(第三版)+上机指导 》 谭浩强 清华大学出版社 2,《C语言程序设计方法》 邓文新 主编 清华大学出版社 3,《C语言课程设计案例精编》 姜灵芝、余健 编著 清华大学出版社 4,《数据结构(C语言版)》 严蔚敏 吴伟民 编著 清华大学出版社 5,《C语言程序设计教程》 冉崇善 主编 机械工业出版社 6,《VisualC++游戏设计》 荣软科技 编著 北京科海电子出版社 7, 《C primer plus》 第五版 stephen prata 著人民邮政出版社 8,Charles Petzold.Windows 程序设计[M]. 北京大学出版社.2004( 9) . 9,求是科技.Visual C++6.0 程序设计与开发技术大全,M,.北京:人民邮电出 版社,2006. 10,《数据结构——用C语言描述》蔡明志 编著 中国水利水电出版社 10.总结和致谢, 本次论文写作俄罗斯方块主要运用到了C语言的相关知识,课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。这次论文设计使我了解我编程思想和编程技巧,也让我认识到了游戏开发中程序编写的重要性,修补了以前学习的漏洞。 本论文顺利完成,首先我要感谢我的导师王希杰给我的指导和帮助。无论是在论文选题、写作阶段还是在程序设计的实践过程中,王老师都加以悉心的指导,给予意见和修正。其次,要感谢在程序设计过程中给予我帮助的同学。本论文的写作参考、引用了很多书籍及文献,在此向这些文章的作者表示深深的谢意~ 10 11.源代码, #include #include #include #include #include #define KUAN 14 //方框的横轴大小 #define CHANG 25 //方框的竖轴大小 int Tetris[7][4][4][4] = { {{{0,0,0,0},{0,1,1,0},{0,1,1,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,} ,{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,1,1,1},{0,0,1,0},{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,0,1,0},{0,1,1,1},{0,0,0,0}},{{0,0,0,0},{0,0,1,0},{0,0,1,1},{0,0,1,0}}},//T形 {{{0,0,0,0},{0,0,0,0},{1,1,1,1},{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,0,0,0},{1,1,1,1},{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,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,1,1,0},{0,0,1,1},{0,0,0,0}}},//z {{{0,0,0,0},{0,1,1,0},{1,1,0,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},{1,1,0,0},{0,0,0,0}},{{0,0,0,0},{0,1,0,0},{0,1,1,0},{0,0,1,0}}},//反Z {{{0,0,0,0},{0,1,0,0},{0,1,0,0},{0,1,1,0}},{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},{{0,0,0,0},{0,1,1,0},{0,0,1,0},{0,0,1,0}},{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}}},//J {{{0,0,0,0},{0,0,1,0},{0,0,1,0},{0,1,1,0}},{{0,0,0,0},{0,1,0,0},{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,1,1},{0,0,0,1},{0,0,0,0}}},//L };//方块数组 int box_x, box_y;//存储方块的位置,左上角 int form, change, nextform, nextchange;//定义方块的开关与变型 clock_t starttime;//定义开始时间 int BG[CHANG][KUAN] = {0};//定义背景并初始化 int Is_Gethit = 0;//接受按键为1, 否则为0; int speed; int level; int kbhit(void); //检查当前是否有键盘输入 int score = 0, Allscore = 0;//你的得分 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);//设置控制台 void gotoxy(int x, int y)//设置光标位置 11 { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(hConsole, coord); } void Chac_Box(int box_x, int box_y, int form, int change)//擦 除方块 { int i, j; for(j = 0; j < 4; ++j) for(i = 0; i < 4; ++i) { if(Tetris[form][change][j][i] == 1) { gotoxy(2*box_x + 2*j, box_y + i); printf(" "); } } } void Pause()//暂停 { char c; do {c=getch();} while(c!='p'); } void Print_Box(int box_x, int box_y, int form, int change)//打 印方块 { int i, j; for(j = 0; j < 4; ++j) for(i = 0; i < 4; ++i) { if(Tetris[form][change][j][i] == 1) { gotoxy(2*box_x + 2*j, box_y + i); printf("?"); } } } 12 void Rong_Beijing(int box_x, int box_y, int form, int change)// 将方块融入背景 { int j, i; for(j = 0; j < 4; ++j) for(i = 0; i < 4; ++i) { if(Tetris[form][change][j][i] == 1) { BG[box_y + i][box_x + j] = 1; } } } void Print_Beijing()//显示背景 { int j, i; ; ++j) for(j = 0; j < CHANG for(i = 0; i < KUAN; ++i) { if(BG[j][i] == 1) { gotoxy(2*i, j); printf("?"); } } } int Sfhf(int box_x, int box_y, int form, int change)//判断是否 非法 { int j, i; for(j = 0; j < 4; ++j) for(i = 0; i < 4; ++i) if((BG[box_y + i][box_x + j] == 1) && (Tetris[form][change][j][i] == 1)) return 0;//返回0代表非法了 return 1;//返回1代表不非法 } int Is_GameOver()//判断游戏结束了没 { int j; for(j = 1; j < KUAN-1; ++j) 13 if(BG[2][j] == 1) return 0;//返回0代表 死掉了 return 1;//返回1代表还活着 } void NextTetris()//设置下一个方块并打印出来 { gotoxy(KUAN*2+5, CHANG-21); printf("next tetris:"); Chac_Box(KUAN+5, CHANG-20, nextform, nextchange); nextform = rand()%7; nextchange = rand()%4; Print_Box(KUAN+5, CHANG-20, nextform, nextchange); } void Disappear()//消行 { int jj, ii, j, i, CanPrint, num = 0; score = 0; for(j = (CHANG - 2); j > 0; --j) { CanPrint = 1; X:for(i = 1; i < (KUAN - 1); ++i) if(BG[j][i] != 1) CanPrint = 0; if(CanPrint == 1) { for(jj = j; jj > 1; --jj)//调整背景数组 { for(ii = 1; ii < (KUAN - 1); ++ii) BG[jj][ii] = BG[jj-1][ii]; } ++num; goto X; } } if(num) { system("cls"); Print_Beijing();//重新打印背景 score = num*num; } } 14 void Score()//分数系统 { Allscore += score; gotoxy(KUAN*2+5, CHANG-15); printf("score:"); gotoxy(KUAN*2+5, CHANG-13); printf("%d", Allscore); switch(Allscore/100) { case 0:speed=25;break; case 1:speed=20;break; case 2:speed=17;break; case 3:speed=15;break; case 4:speed=12;break; case 5:speed=10;break; case 6:speed=7;break; case 7:speed=5;break; case 8:speed=2;break; case 9:{speed=0;break;} } 11); gotoxy(KUAN*2+5, CHANG- printf("level:"); if(speed==25) level=0; if(speed==20) level=1; if(speed==17) level=2; if(speed==15) level=3; if(speed==12) level=4; if(speed==10) level=5; if(speed==7) level=6; if(speed==5) level=7; if(speed==2) level=8; if(speed==0) level=9; gotoxy(KUAN*2+5, CHANG-9); printf("%d", level); 15 } void Beijing()//初始化背景 { int i, j; for(i = 0; i < KUAN; ++i)//初始化横的 { BG[0][i] = 1; BG[CHANG-1][i] = 1; } for(j = 1; j < (CHANG-1); ++j)//初始化竖的 { BG[j][0] = 1; BG[j][KUAN-1] = 1; } srand((unsigned)time(NULL)); box_x = KUAN/2-1; box_y = 1; Print_Beijing(); Score(); form = rand()%7; change = rand()%4; NextTetris(); } void Getkbhit()//对上下左右按键的处理 { if(kbhit())//如果有按键刚进入按键处理 { switch(getch()) { case'p': Pause(); break; case 'w': if((change + 1) > 3) { if(Sfhf(box_x, box_y, form, 0)) { Chac_Box(box_x, box_y, form, change); change = 0; Print_Box(box_x, box_y, form, change); 16 } } else if(Sfhf(box_x, box_y, form, change + 1)) { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, box_y, form, ++change); } break; case 's': if(Sfhf(box_x, box_y + 1, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, ++box_y, form, change); } break; case 'a': if(Sfhf(box_x - 1, box_y, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(--box_x, box_y, form, change); } break; case 'd': if(Sfhf(box_x + 1, box_y, form, change)) { Chac_Box(box_x, box_y, form, change); Print_Box(++box_x, box_y, form, change); } break; default :break; } } if((clock() - starttime) >= 1000 && Sfhf(box_x, box_y + 1, form, change))//自动下落 { Chac_Box(box_x, box_y, form, change); Print_Box(box_x, ++box_y, form, change); starttime = clock(); } } 17 int main(void) { system("title 俄罗斯方块"); Beijing(); starttime = clock(); while(Is_GameOver()) { if(Is_Gethit) { box_x = KUAN/2-1; box_y = 1; Is_Gethit = 0; } if((clock() - starttime) >= 500 && !Sfhf(box_x, box_y +1, form, change)) { Rong_Beijing(box_x, box_y, form, change); Is_Gethit = 1; form = nextform; change = nextchange; Disappear(); NextTetris(); Score(); } Getkbhit(); Sleep(speed); } printf("\n"); return 0; } 18
/
本文档为【俄罗斯方块C语言实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索