#include <stdio.h>

#include <windows.h>

#include <conio.h>

#include <time.h>

//游戏窗口

#define FrameX 4 //游戏窗口左上角的X轴坐标

#define FrameY 4 //游戏窗口左上角的Y轴坐标

#define Frame_height 20 //游戏窗口的高度

#define Frame_width 18 //游戏窗口的宽度

//定义全局变量

int i, j, temp, temp1, temp2; //temp,temp1,temp2用于记住和转换方块变量的值

int a[80][80] = { 0 }; //标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案

int b[4]; //标记4个"口"方块:1表示有方块,0表示无方块

//声明俄罗斯方块的结构体

struct Tetris

{

int x;     //中心方块的x轴坐标int y;     //中心方块的y轴坐标int flag;    //标记方块类型的序号int next;    //下一个俄罗斯方块类型的序号int speed;    //俄罗斯方块移动的速度int count;    //产生俄罗斯方块的个数int score;    //游戏的分数int level;    //游戏的等级

};

//函数原型声明

//光标移到指定位置

void gotoxy(HANDLE hOut, int x, int y);

//制作游戏窗口

void make_frame();

//随机产生方块类型的序号

void get_flag(struct Tetris*);

//制作俄罗斯方块

void make_tetris(struct Tetris*);

//打印俄罗斯方块

void print_tetris(HANDLE hOut, struct Tetris*);

//清除俄罗斯方块的痕迹

void clear_tetris(HANDLE hOut, struct Tetris*);

//判断是否能移动,返回值为1,能移动,否则,不动

int if_moveable(struct Tetris*);

//判断是否满行,并删除满行的俄罗斯方块

void del_full(HANDLE hOut, struct Tetris*);

//开始游戏

void start_game();

void main()

{

//制作游戏窗口make_frame();//开始游戏start_game();

}

/光标移到指定位置********************************************************/

void gotoxy(HANDLE hOut, int x, int y)

{

COORD pos;pos.X = x;  //横坐标pos.Y = y;  //纵坐标SetConsoleCursorPosition(hOut, pos);

}

/制作游戏窗口************************************************************/

void make_frame()

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量gotoxy(hOut, FrameX + Frame_width - 5, FrameY - 2);   //打印游戏名称printf("俄罗斯方块");gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 7);  //打印选择菜单printf("**********下一个方块:");gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 13);printf("**********");gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 17);printf("↑键:变体");gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 19);printf("空格:暂停游戏");gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 15);printf("Esc :退出游戏");gotoxy(hOut, FrameX, FrameY);       //打印框角并记住该处已有图案printf("╔");gotoxy(hOut, FrameX + 2 * Frame_width - 2, FrameY);printf("╗");gotoxy(hOut, FrameX, FrameY + Frame_height);printf("╚");gotoxy(hOut, FrameX + 2 * Frame_width - 2, FrameY + Frame_height);printf("╝");a[FrameX][FrameY + Frame_height] = 2;a[FrameX + 2 * Frame_width - 2][FrameY + Frame_height] = 2;for (i = 2; i < 2 * Frame_width - 2; i += 2){gotoxy(hOut, FrameX + i, FrameY);printf("═");         //打印上横框}for (i = 2; i < 2 * Frame_width - 2; i += 2){gotoxy(hOut, FrameX + i, FrameY + Frame_height);printf("═");         //打印下横框a[FrameX + i][FrameY + Frame_height] = 2;    //记住下横框有图案}for (i = 1; i < Frame_height; i++){gotoxy(hOut, FrameX, FrameY + i);printf("║");         //打印左竖框a[FrameX][FrameY + i] = 2;       //记住左竖框有图案}for (i = 1; i < Frame_height; i++){gotoxy(hOut, FrameX + 2 * Frame_width - 2, FrameY + i);printf("║");         //打印右竖框a[FrameX + 2 * Frame_width - 2][FrameY + i] = 2;   //记住右竖框有图案}

}

/制作俄罗斯方块**************************************************************/

void make_tetris(struct Tetris* tetris)

{

a[tetris->x][tetris->y] = b[0];    //中心方块位置的图形状态:1-有,0-无switch (tetris->flag)      //共6大类,19种类型{case 1:         //田字方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x + 2][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 2:         //直线方块:----{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x + 2][tetris->y] = b[2];a[tetris->x + 4][tetris->y] = b[3];break;}case 3:         //直线方块: |{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y - 2] = b[2];a[tetris->x][tetris->y + 1] = b[3];break;}case 4:         //T字方块{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x + 2][tetris->y] = b[2];a[tetris->x][tetris->y + 1] = b[3];break;}case 5:         //T字顺时针转90度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y + 1] = b[2];a[tetris->x - 2][tetris->y] = b[3];break;}case 6:         //T字顺时针转180度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x - 2][tetris->y] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 7:         //T字顺时针转270度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y + 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 8:         //Z字方块{a[tetris->x][tetris->y + 1] = b[1];a[tetris->x - 2][tetris->y] = b[2];a[tetris->x + 2][tetris->y + 1] = b[3];break;}case 9:         //Z字顺时针转90度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x - 2][tetris->y] = b[2];a[tetris->x - 2][tetris->y + 1] = b[3];break;}case 10:        //Z字顺时针转180度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x - 2][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 11:        //Z字顺时针转270度方块{a[tetris->x][tetris->y + 1] = b[1];a[tetris->x + 2][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 12:        //7字方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y + 1] = b[2];a[tetris->x - 2][tetris->y - 1] = b[3];break;}case 13:        //7字顺时针转90度方块{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x - 2][tetris->y + 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 14:        //7字顺时针转180度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y + 1] = b[2];a[tetris->x + 2][tetris->y + 1] = b[3];break;}case 15:        //7字顺时针转270度方块{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x + 2][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 16:        //倒7字方块{a[tetris->x][tetris->y + 1] = b[1];a[tetris->x][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y - 1] = b[3];break;}case 17:        //倒7字顺指针转90度方块{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x - 2][tetris->y - 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}case 18:        //倒7字顺时针转180度方块{a[tetris->x][tetris->y - 1] = b[1];a[tetris->x][tetris->y + 1] = b[2];a[tetris->x - 2][tetris->y + 1] = b[3];break;}case 19:        //倒7字顺时针转270度方块{a[tetris->x - 2][tetris->y] = b[1];a[tetris->x + 2][tetris->y + 1] = b[2];a[tetris->x + 2][tetris->y] = b[3];break;}}

}

//判断是否可动*******************************************************************/

int if_moveable(struct Tetris* tetris)

{

if (a[tetris->x][tetris->y] != 0)//当中心方块位置上有图案时,返回值为0,即不可移动{return 0;}else{if ( //当为田字方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动(tetris->flag == 1 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x + 2][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||//或为直线方块且除中心方块位置外,其他"口"字方块位置上无图案时,返回值为1,即可移动(tetris->flag == 2 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x + 2][tetris->y] == 0 && a[tetris->x + 4][tetris->y] == 0)) ||(tetris->flag == 3 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y - 2] == 0 && a[tetris->x][tetris->y + 1] == 0)) ||(tetris->flag == 4 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x + 2][tetris->y] == 0 && a[tetris->x][tetris->y + 1] == 0)) ||(tetris->flag == 5 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y + 1] == 0 && a[tetris->x - 2][tetris->y] == 0)) ||(tetris->flag == 6 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x - 2][tetris->y] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 7 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y + 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 8 && (a[tetris->x][tetris->y + 1] == 0 &&a[tetris->x - 2][tetris->y] == 0 && a[tetris->x + 2][tetris->y + 1] == 0)) ||(tetris->flag == 9 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x - 2][tetris->y] == 0 && a[tetris->x - 2][tetris->y + 1] == 0)) ||(tetris->flag == 10 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x - 2][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 11 && (a[tetris->x][tetris->y + 1] == 0 &&a[tetris->x + 2][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 12 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y + 1] == 0 && a[tetris->x - 2][tetris->y - 1] == 0)) ||(tetris->flag == 13 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x - 2][tetris->y + 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 14 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y + 1] == 0 && a[tetris->x + 2][tetris->y + 1] == 0)) ||(tetris->flag == 15 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x + 2][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 16 && (a[tetris->x][tetris->y + 1] == 0 &&a[tetris->x][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y - 1] == 0)) ||(tetris->flag == 17 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x - 2][tetris->y - 1] == 0 && a[tetris->x + 2][tetris->y] == 0)) ||(tetris->flag == 18 && (a[tetris->x][tetris->y - 1] == 0 &&a[tetris->x][tetris->y + 1] == 0 && a[tetris->x - 2][tetris->y + 1] == 0)) ||(tetris->flag == 19 && (a[tetris->x - 2][tetris->y] == 0 &&a[tetris->x + 2][tetris->y + 1] == 0 && a[tetris->x + 2][tetris->y] == 0))){return 1;}}return 0;

}

/随机产生俄罗斯方块类型的序号****************************************************/

void get_flag(struct Tetris* tetris)

{

tetris->count++;     //记住产生方块的个数srand((unsigned)time(NULL));  //初始化随机数if (tetris->count == 1){tetris->flag = rand() % 19 + 1;  //记住第一个方块的序号}tetris->next = rand() % 19 + 1;   //记住下一个方块的序号

}

/打印俄罗斯方块****************************************************************/

void print_tetris(HANDLE hOut, struct Tetris* tetris)

{

for (i = 0; i < 4; i++){b[i] = 1;         //数组b[4]的每个元素的值都为1}make_tetris(tetris);      //制作俄罗斯方块for (i = tetris->x - 2; i <= tetris->x + 4; i += 2){for (j = tetris->y - 2; j <= tetris->y + 1; j++){if (a[i][j] == 1 && j > FrameY){gotoxy(hOut, i, j);printf("□");     //打印边框内的方块}}}//打印菜单信息gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 1);printf("level : %d", tetris->level);gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 3);printf("score : %d", tetris->score);gotoxy(hOut, FrameX + 2 * Frame_width + 3, FrameY + 5);printf("speed : %dms", tetris->speed);

}

/清除俄罗斯方块的痕迹**********************************************************/

void clear_tetris(HANDLE hOut, struct Tetris* tetris)

{

for (i = 0; i < 4; i++){b[i] = 0;         //数组b[4]的每个元素的值都为0}make_tetris(tetris);      //制作俄罗斯方块for (i = tetris->x - 2; i <= tetris->x + 4; i += 2){for (j = tetris->y - 2; j <= tetris->y + 1; j++){if (a[i][j] == 0 && j > FrameY){gotoxy(hOut, i, j);printf("  ");     //清除方块}}}

}

/判断是否满行并删除满行的俄罗斯方块**********************************************/

void del_full(HANDLE hOut, struct Tetris* tetris)

{ //当某行有Frame_width-2个方块时,则满行

int k, del_count = 0;  //分别用于记录某行方块的个数和删除方块的行数的变量for (j = FrameY + Frame_height - 1; j >= FrameY + 1; j--){k = 0;for (i = FrameX + 2; i < FrameX + 2 * Frame_width - 2; i += 2){if (a[i][j] == 1) //竖坐标依次从下往上,横坐标依次由左至右判断是否满行{k++;  //记录此行方块的个数if (k == Frame_width - 2){for (k = FrameX + 2; k < FrameX + 2 * Frame_width - 2; k += 2){  //删除满行的方块a[k][j] = 0;gotoxy(hOut, k, j);printf("  ");Sleep(1);}for (k = j - 1; k > FrameY; k--){  //如果删除行以上的位置有方块,则先清除,再将方块下移一个位置for (i = FrameX + 2; i < FrameX + 2 * Frame_width - 2; i += 2){if (a[i][k] == 1){a[i][k] = 0;gotoxy(hOut, i, k);printf("  ");a[i][k + 1] = 1;gotoxy(hOut, i, k + 1);printf("□");}}}j++;   //方块下移后,重新判断删除行是否满行del_count++; //记录删除方块的行数}}}}tetris->score += 100 * del_count; //每删除一行,得100分if (del_count > 0 && (tetris->score % 1000 == 0 || tetris->score / 1000 > tetris->level - 1)){        //如果得1000分即累计删除10行,速度加快20ms并升一级tetris->speed -= 20;tetris->level++;}

}

/开始游戏************************************************************************/

void start_game()

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量struct Tetris t, * tetris = &t;       //定义结构体的指针并指向结构体变量unsigned char ch;         //定义接收键盘输入的变量tetris->count = 0;      //初始化俄罗斯方块数为0个tetris->speed = 300;      //初始移动速度为300mstetris->score = 0;      //初始游戏的分数为0分tetris->level = 1;      //初始游戏为第1关while (1){//循环产生方块,直至游戏结束get_flag(tetris);     //得到产生俄罗斯方块类型的序号temp = tetris->flag;     //记住当前俄罗斯方块序号//打印下一个俄罗斯方块的图形(右边窗口)tetris->x = FrameX + 2 * Frame_width + 6;tetris->y = FrameY + 10;tetris->flag = tetris->next;print_tetris(hOut, tetris);tetris->x = FrameX + Frame_width;  //初始中心方块x坐标tetris->y = FrameY - 1;     //初始中心方块y坐标tetris->flag = temp;     //取出当前的俄罗斯方块序号while (1){//控制方块方向,直至方块不再下移label:print_tetris(hOut, tetris);//打印俄罗斯方块Sleep(tetris->speed);   //延缓时间clear_tetris(hOut, tetris);  //清除痕迹temp1 = tetris->x;    //记住中心方块横坐标的值temp2 = tetris->flag;    //记住当前俄罗斯方块序号if (kbhit()){        //判断是否有键盘输入,有则用ch↓接收ch = getch();if (ch == 75)     //按←键则向左动,中心横坐标减2{tetris->x -= 2;}if (ch == 77)     //按→键则向右动,中心横坐标加2{tetris->x += 2;}if (ch == 72)     //按↑键则变体即当前方块顺时针转90度{if (tetris->flag >= 2 && tetris->flag <= 3){tetris->flag++;tetris->flag %= 2;tetris->flag += 2;}if (tetris->flag >= 4 && tetris->flag <= 7){tetris->flag++;tetris->flag %= 4;tetris->flag += 4;}if (tetris->flag >= 8 && tetris->flag <= 11){tetris->flag++;tetris->flag %= 4;tetris->flag += 8;}if (tetris->flag >= 12 && tetris->flag <= 15){tetris->flag++;tetris->flag %= 4;tetris->flag += 12;}if (tetris->flag >= 16 && tetris->flag <= 19){tetris->flag++;tetris->flag %= 4;tetris->flag += 16;}}if (ch == 32)     //按空格键,暂停{print_tetris(hOut, tetris);while (1){if (kbhit())   //再按空格键,继续游戏{ch = getch();if (ch == 32){goto label;}}}}if (if_moveable(tetris) == 0) //如果不可动,上面操作无效{tetris->x = temp1;tetris->flag = temp2;}else      //如果可动,执行操作{goto label;}}tetris->y++;     //如果没有操作指令,方块向下移动if (if_moveable(tetris) == 0)  //如果向下移动且不可动,方块放在此处{tetris->y--;print_tetris(hOut, tetris);del_full(hOut, tetris);break;}}for (i = tetris->y - 2; i < tetris->y + 2; i++){//游戏结束条件:方块触到框顶位置if (i == FrameY){j = 0;      //如果游戏结束,j=0}}if (j == 0){system("cls");getch();break;}//清除下一个俄罗斯方块的图形(右边窗口)tetris->flag = tetris->next;tetris->x = FrameX + 2 * Frame_width + 6;tetris->y = FrameY + 10;clear_tetris(hOut, tetris);}

}
//QAQ翻箱倒柜从自己的有道云笔记找出来了,好久没有发笔记了,得发一点证明自己还在学。

俄罗斯方块(C语言源代码)相关推荐

  1. c语言代码 txt下载,俄罗斯方块C语言源代码txt.DOC

    俄罗斯方块C语言源代码txt /*名称: 俄罗斯方块 源程 For Turbo C 2.0软件编写:中国 北京 幻想空间软件创作群Illusion Space Software Design Grou ...

  2. 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程

    本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法. 背景技术: c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分.目前,主要流行的 ...

  3. MATLAB里面的filter和filtfilt的C语言源代码

    MATLAB里面的filter和filtfilt的C语言源代码 嗯,算法非常简单,就是网上搜不到C代码实现.filter是个很万能的数字滤波器函数,只要有滤波器的差分方程系数,IIR呀FIR呀都能通过 ...

  4. 计算星期c语言编码,[转载]计算任何一天是星期几的C语言源代码.

    [转载]计算任何一天是星期几的C语言源代码. #include int main() { int day,mn,yr,i,days=0,s,k; int mont[13]={0,31,28,31,30 ...

  5. c语言手游常用代码,c语言源代码【操作流程】

    很多小伙伴都遇到过c语言源代码的困惑吧,一些朋友看过网上零散的c语言源代码的处理方法,并没有完完全全明白c语言源代码是如何解决的,今天小编准备了简单的解决办法,只需要按照1:编写C源代码for_lea ...

  6. ras的c语言源代码文档,µMore(µITRON操作系统)--功能概况

    µMore™ (µITRON操作系统) 概览 μMore是一种专门为下一代移动设备设计的实时操作系统,与μITRON4.0标准应用概要兼容.μMore具有轻松节电功能,并附带了爱可信的AVE-TCP网 ...

  7. 俄罗斯方块-C语言-详注版

    代码地址如下: http://www.demodashi.com/demo/14818.html 俄罗斯方块-C语言-详注版 概述 本文详述了C语言版俄罗斯方块游戏的原理以及实现方法,对游戏代码进行了 ...

  8. 中国象棋源码c语言,中国象棋C语言源代码.doc

    中国象棋C语言源代码 *chess.c*/ #include "dos.h" #include "stdio.h" /**/ #define RED 7 #de ...

  9. 二元函数求最小值 c语言,遗传算法C语言源代码(一元函数和二元函数)

    <遗传算法C语言源代码(一元函数和二元函数)>由会员分享,可在线阅读,更多相关<遗传算法C语言源代码(一元函数和二元函数)(15页珍藏版)>请在人人文库网上搜索. 1.C语言遗 ...

  10. Easystructure教程_C语言源代码自动生成流程图

    目录 Easystructure教程_C语言源代码自动生成流程图 1. 简介 2. 下载 3. 安装 4. 使用 5. 其他软件推荐 5.1 Mermaid 5.2 Code2flow ** Easy ...

最新文章

  1. Android项目框架综合实例
  2. 在Ubuntu上安装mongoDB
  3. 刷题总结——树的同构(bzoj4337 树上hash)
  4. 嵌入式Linux系统编程学习之五gcc/g++编译器
  5. chrome浏览器fitler中的XHR作用是什么
  6. [LeetCode] Missing Ranges 缺失区间
  7. R 语言基本操作(基本信息的查看、与本地文件系统交互、编译器版本升级)
  8. android qq输入法表情,QQ输入法如何输入表情
  9. segue 分析小结
  10. Google原生输入法LatinIME词库构建流程分析(一)
  11. win7怎么把计算机删除文件,win7不小心删除文件如何恢复_win7删除文件的四种恢复技巧...
  12. matlab 四维等值面图,一个4列数组怎样画出三维等值面图
  13. sprintf,snprintf的用法(可以作为linux中itoa函数的补充)
  14. 从《我不是潘金莲》谈程序员的核心竞争力
  15. java 代码书写规范_代码书写规范和命名规范
  16. WVGA与HVGA、QVGA详细解答
  17. OpenCV—Python PyLibTiff_psd 图像基本操作以及图像格式转换
  18. python输出结果_python输出结果
  19. bd09坐标转wgs84 JS版本 精准度高
  20. Java项目:在线博客问答系统(java+Springboot+jsp+maven+mysql)

热门文章

  1. linux机顶盒线刷教程,网络机顶盒刷机教程和详细方法,实现软件任意安装,电视免费看...
  2. 智慧水利大屏可视化决策系统
  3. java jpg转换成pdf格式_Java pdf和jpg互转案例
  4. 如何把pdf转成jpg格式?
  5. 学生管理系统(JAVA后台简约版)
  6. 大学生个人网页设计 HTML个人网页制作 web个人网站模板 简单静态HTML个人网页作品
  7. 未找到uniwebview_unity内嵌浏览器——UniWebView插件
  8. 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
  9. CSDN账号找回密码的解决方法(原手机号不能使用)
  10. PADS Layout 滴泪、敷铜和删除