首页源码游戏源码站 游戏源码 手游之家.net

游戏源码站 游戏源码 手游之家.net

编程之家2026-05-28796次浏览

大家好,关于游戏源码站很多朋友都还不太明白,今天小编就来为大家分享关于游戏源码 手游之家.net的知识,希望对各位有所帮助!

游戏源码站 游戏源码 手游之家.net

推荐几个高质、好用的 游戏源码 下载网站

在游戏开发的旅程中,获取高质量的源码对提升技能与效率至关重要。然而,在繁多的下载网站中,筛选出既优质又实用的资源并非易事。本文精心挑选了几个性价比高、资源丰富的游戏源码下载网站,旨在为开发者们提供便捷高效的学习与参考资源。

首推爱给网,它以其详尽的分类体系、高质量的资源和便捷的免费下载方式,成为众多开发者的心头好。网站提供超过4299个资源,注册后通过QQ登录即可轻松获取。新用户注册首日即获赠50铜币,每个游戏源码需20个铜币,而网站每天自动赠送的20个铜币,足以覆盖日常下载需求。成为VIP用户仅需39元,即可享有600个铜币,每天额外赠送的30个铜币,使得下载成本几乎为零,真正实现了高性价比。

对于追求全面资源的开发者,hotscripts无疑是理想选择。虽需翻墙访问,但该网站资源丰富,涵盖多个游戏类型,部分源码可免费下载,其余则需通过赞助网站维护。网站的专业性和知名度为开发者提供了宝贵的资源库。

6m5m作为另一家需翻墙访问的网站,提供约6千个资源,支持QQ或微博登录。资源质量多且涵盖面广,但使用体验相对一般。网站资源需通过金币或积分下载,金币则需充值获取,而积分则需通过上传资源获得,网站从中收取40%的费用。对于追求资源多样性与全面性的开发者,6m5m提供了一定的选择空间。

在游戏源码的海洋中,以上网站如同导航灯塔,指引着开发者们前行。希望本文推荐的网站能够为您的学习与工作带来便利,同时也期待您分享更多优质资源,共同构建一个充满活力与创新的游戏开发社区。

求C++小游戏源代码啊~

要源码的,在评论里打个@,我先去做

游戏源码站 游戏源码 手游之家.net

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

游戏源码站 游戏源码 手游之家.net

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

要源码的,在评论里打个@,我先去做

#include<iostream>

#include<windows.h>

#include<conio.h>

#include<time.h>

#include<string>

using namespace std;

ypedef struct Frame

{

COORD position[2];

int flag;

}Frame;

void SetPos(COORD a)// set cursor

{

HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(out, a);

}

void SetPos(int i, int j)// set cursor

{

COORD pos={i, j};

SetPos(pos);

}

void HideCursor()

{

CONSOLE_CURSOR_INFO cursor_info={1, 0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

}

//把第y行,[x1, x2)之间的坐标填充为 ch

void drawRow(int y, int x1, int x2, char ch)

{

SetPos(x1,y);

for(int i= 0; i<=(x2-x1); i++)

cout<<ch;

}

//在a, b纵坐标相同的前提下,把坐标 [a, b]之间填充为 ch

void drawRow(COORD a, COORD b, char ch)

{

if(a.Y== b.Y)

drawRow(a.Y, a.X, b.X, ch);

else

{

SetPos(0, 25);

cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";

system("pause");

}

}

//把第x列,[y1, y2]之间的坐标填充为 ch

void drawCol(int x, int y1, int y2, char ch)

{

int y=y1;

while(y!=y2+1)

{

SetPos(x, y);

cout<<ch;

y++;

}

}

//在a, b横坐标相同的前提下,把坐标 [a, b]之间填充为 ch

void drawCol(COORD a, COORD b, char ch)

{

if(a.X== b.X)

drawCol(a.X, a.Y, b.Y, ch);

else

{

SetPos(0, 25);

cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";

system("pause");

}

}

void drawFrame(COORD a, COORD b, char row, char col)

{

drawRow(a.Y, a.X+1, b.X-1, row);

drawRow(b.Y, a.X+1, b.X-1, row);

drawCol(a.X, a.Y+1, b.Y-1, col);

drawCol(b.X, a.Y+1, b.Y-1, col);

}

void drawFrame(int x1, int y1, int x2, int y2, char row, char col)

{

COORD a={x1, y1};

COORD b={x2, y2};

drawFrame(a, b, row, col);

}

void drawFrame(Frame frame, char row, char col)

{

COORD a= frame.position[0];

COORD b= frame.position[1];

drawFrame(a, b, row, col);

}

void drawPlaying()

{

drawFrame(0, 0, 48, 24,'=','|');// draw map frame;

drawFrame(49, 0, 79, 4,'-','|');// draw output frame

drawFrame(49, 4, 79, 9,'-','|');// draw score frame

drawFrame(49, 9, 79, 20,'-','|');// draw operate frame

drawFrame(49, 20, 79, 24,'-','|');// draw other message frame

SetPos(52, 6);

cout<<"得分:";

SetPos(52, 7);

cout<<"称号:";

SetPos(52,10);

cout<<"操作方式:";

SetPos(52,12);

cout<<" a,s,d,w控制战机移动。";

SetPos(52,14);

cout<<" p暂停游戏。";

SetPos(52,16);

cout<<" e退出游戏。";

}

int random(int a, int b)

{

int c=(rand()%(a-b))+ a;

return c;

}

COORD random(COORD a, COORD b)

{

int x=random(a.X, b.X);

int y=random(a.Y, b.Y);

COORD c={x, y};

return c;

}

bool judgeCoordInFrame(Frame frame, COORD spot)

{

if(spot.X>=frame.position[0].X)

if(spot.X<=frame.position[1].X)

if(spot.Y>=frame.position[0].Y)

if(spot.Y<=frame.position[0].Y)

return true;

return false;

}

void printCoord(COORD a)

{

cout<<"("<<a.X<<","<<a.Y<<")";

}

void printFrameCoord(Frame a)

{

printCoord(a.position[0]);

cout<<"-";

printCoord(a.position[1]);

}

int drawMenu()

{

SetPos(30, 1);

cout<<"P l a n e W a r";

drawRow(3, 0, 79,'-');

drawRow(5, 0, 79,'-');

SetPos(28, 4);

cout<<"w和 s选择, k确定";

SetPos(15, 11);

cout<<"1.简单的敌人";

SetPos(15, 13);

cout<<"2.冷酷的敌人";

drawRow(20, 0, 79,'-');

drawRow(22, 0, 79,'-');

SetPos(47, 11);

cout<<"简单的敌人:";

SetPos(51, 13);

cout<<"简单敌人有着较慢的移动速度。";

SetPos(24, 21);

cout<<"制作:老八(秘制小汉堡)";

int j=11;

SetPos(12, j);

cout<<">>";

//drawFrame(45, 9, 79, 17,'=','|');

while(1)

{ if( _kbhit())

{

char x=_getch();

switch(x)

{

case'w':

{

if( j== 13)

{

SetPos(12, j);

cout<<"";

j= 11;

SetPos(12, j);

cout<<">>";

SetPos(51, 13);

cout<<"";

SetPos(47, 11);

cout<<"简单的敌人:";

SetPos(51, 13);

cout<<"简单敌人有着较慢的移动速度,比较容易对付";

}

break;

}

case's':

{

if( j== 11)

{

SetPos(12, j);

cout<<"";

j= 13;

SetPos(12, j);

cout<<">>";

SetPos(51, 13);

cout<<"";

SetPos(47, 11);

cout<<"冷酷的敌人:";

SetPos(51, 13);

cout<<"冷酷的敌人移动速度较快,难对付哟。";

}

break;

}

case'k':

{

if(j== 8) return 1;

else return 2;

}

}

}

}

}

DWORD WINAPI MusicFun(LPVOID lpParamte)

{

//DWORD OBJ;

sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);

return 0;

}

class Game

{

public:

COORD position[10];

COORD bullet[10];

Frame enemy[8];

int score;

int rank;

int rankf;

string title;

int flag_rank;

Game();

//初始化所有

void initPlane();

void initBullet();

void initEnemy();

//初始化其中一个

//void initThisBullet( COORD);

//void initThisEnemy( Frame);

void planeMove(char);

void bulletMove();

void enemyMove();

//填充所有

void drawPlane();

void drawPlaneToNull();

void drawBullet();

void drawBulletToNull();

void drawEnemy();

void drawEnemyToNull();

//填充其中一个

void drawThisBulletToNull( COORD);

void drawThisEnemyToNull( Frame);

void Pause();

void Playing();

void judgePlane();

void judgeEnemy();

void Shoot();

void GameOver();

void printScore();

};

Game::Game()

{

initPlane();

initBullet();

initEnemy();

score= 0;

rank= 25;

rankf= 0;

flag_rank= 0;

}

void Game::initPlane()

{

COORD centren={39, 22};

position[0].X=position[5].X=position[7].X=position[9].X=centren.X;

position[1].X=centren.X-2;

position[2].X=position[6].X=centren.X-1;

position[3].X=position[8].X=centren.X+1;

position[4].X=centren.X+2;

for(int i=0; i<=4; i++)

position[i].Y=centren.Y;

for(int i=6; i<=8; i++)

position[i].Y=centren.Y+1;

position[5].Y=centren.Y-1;

position[9].Y=centren.Y-2;

}

void Game::drawPlane()

{

for(int i=0; i<9; i++)

{

SetPos(position[i]);

if(i!=5)

cout<<"O";

else if(i==5)

cout<<"|";

}

}

void Game::drawPlaneToNull()

{

for(int i=0; i<9; i++)

{

SetPos(position[i]);

cout<<"";

}

}

void Game::initBullet()

{

for(int i=0; i<10; i++)

bullet[i].Y= 30;

}

void Game::drawBullet()

{

for(int i=0; i<10; i++)

{

if( bullet[i].Y!= 30)

{

SetPos(bullet[i]);

cout<<"^";

}

}

}

void Game::drawBulletToNull()

{

for(int i=0; i<10; i++)

if( bullet[i].Y!= 30)

{

COORD pos={bullet[i].X, bullet[i].Y+1};

SetPos(pos);

cout<<"";

}

}

void Game::initEnemy()

{

COORD a={1, 1};

COORD b={45, 15};

for(int i=0; i<8; i++)

{

enemy[i].position[0]= random(a, b);

enemy[i].position[1].X= enemy[i].position[0].X+ 3;

enemy[i].position[1].Y= enemy[i].position[0].Y+ 2;

}

}

void Game::drawEnemy()

{

for(int i=0; i<8; i++)

drawFrame(enemy[i].position[0], enemy[i].position[1],'-','|');

}

void Game::drawEnemyToNull()

{

for(int i=0; i<8; i++)

{

drawFrame(enemy[i].position[0], enemy[i].position[1],'','');

}

}

void Game::Pause()

{

SetPos(61,2);

cout<<"";

SetPos(61,2);

cout<<"暂停中...";

char c=_getch();

while(c!='p')

c=_getch();

SetPos(61,2);

cout<<"";

}

void Game::planeMove(char x)

{

if(x=='a')

if(position[1].X!= 1)

for(int i=0; i<=9; i++)

position[i].X-= 2;

if(x=='s')

if(position[7].Y!= 23)

for(int i=0; i<=9; i++)

position[i].Y+= 1;

if(x=='d')

if(position[4].X!= 47)

for(int i=0; i<=9; i++)

position[i].X+= 2;

if(x=='w')

if(position[5].Y!= 3)

for(int i=0; i<=9; i++)

position[i].Y-= 1;

}

void Game::bulletMove()

{

for(int i=0; i<10; i++)

{

if( bullet[i].Y!= 30)

{

bullet[i].Y-= 1;

if( bullet[i].Y== 1)

{

COORD pos={bullet[i].X, bullet[i].Y+1};

drawThisBulletToNull( pos);

bullet[i].Y=30;

}

}

}

}

void Game::enemyMove()

{

for(int i=0; i<8; i++)

{

for(int j=0; j<2; j++)

enemy[i].position[j].Y++;

if(24== enemy[i].position[1].Y)

{

COORD a={1, 1};

COORD b={45, 3};

enemy[i].position[0]= random(a, b);

enemy[i].position[1].X= enemy[i].position[0].X+ 3;

enemy[i].position[1].Y= enemy[i].position[0].Y+ 2;

}

}

}

void Game::judgePlane()

{

for(int i= 0; i< 8; i++)

for(int j=0; j<9; j++)

if(judgeCoordInFrame(enemy[i], position[j]))

{

SetPos(62, 1);

cout<<"坠毁";

drawFrame(enemy[i],'+','+');

Sleep(1000);

GameOver();

break;

}

}

void Game::drawThisBulletToNull( COORD c)

{

SetPos(c);

cout<<"";

}

void Game::drawThisEnemyToNull( Frame f)

{

drawFrame(f,'','');

}

void Game::judgeEnemy()

{

for(int i= 0; i< 8; i++)

for(int j= 0; j< 10; j++)

if( judgeCoordInFrame(enemy[i], bullet[j]))

{

score+= 5;

drawThisEnemyToNull( enemy[i]);

COORD a={1, 1};

COORD b={45, 3};

enemy[i].position[0]= random(a, b);

enemy[i].position[1].X= enemy[i].position[0].X+ 3;

enemy[i].position[1].Y= enemy[i].position[0].Y+ 2;

drawThisBulletToNull( bullet[j]);

bullet[j].Y= 30;

}

}

void Game::Shoot()

{

for(int i=0; i<10; i++)

if(bullet[i].Y== 30)

{

bullet[i].X= position[5].X;

bullet[i].Y= position[5].Y-1;

break;

}

}

void Game::printScore()

{

if(score== 120&& flag_rank== 0)

{

rank-= 3;

flag_rank= 1;

}

else if( score== 360&& flag_rank== 1)

{

rank-= 5;

flag_rank= 2;

}

else if( score== 480&& flag_rank== 2)

{

rank-= 5;

flag_rank= 3;

}

int x=rank/5;

SetPos(60, 6);

cout<<score;

if( rank!=rankf)

{

SetPos(60, 7);

if( x== 5)

title="初级飞行员";

else if( x== 4)

title="中级飞行员";

else if( x== 3)

title="高级飞行员";

else if( x== 2)

title="王牌飞行员";

cout<<title;

}

rankf= rank;

}

void Game::Playing()

{

//HANDLE MFUN;

//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL);

drawEnemy();

drawPlane();

int flag_bullet= 0;

int flag_enemy= 0;

while(1)

{

Sleep(8);

if(_kbhit())

{

char x= _getch();

if('a'== x||'s'== x||'d'== x||'w'== x)

{

drawPlaneToNull();

planeMove(x);

drawPlane();

judgePlane();

}

else if('p'== x)

Pause();

else if('k'== x)

Shoot();

else if('e'== x)

{

//CloseHandle(MFUN);

GameOver();

break;

}

}

/*处理子弹*/

if( 0== flag_bullet)

{

bulletMove();

drawBulletToNull();

drawBullet();

judgeEnemy();

}

flag_bullet++;

if( 5== flag_bullet)

flag_bullet= 0;

/*处理敌人*/

if( 0== flag_enemy)

{

drawEnemyToNull();

enemyMove();

drawEnemy();

judgePlane();

}

flag_enemy++;

if( flag_enemy>= rank)

flag_enemy= 0;

/*输出得分*/

printScore();

}

}

void Game::GameOver()

{

system("cls");

COORD p1={28,9};

COORD p2={53,15};

drawFrame(p1, p2,'=','|');

SetPos(36,12);

string str="Game Over!";

for(int i=0; i<str.size(); i++)

{

Sleep(80);

cout<<str[i];

}

Sleep(1000);

system("cls");

drawFrame(p1, p2,'=','|');

SetPos(31, 11);

cout<<"击落敌机:"<<score/5<<"架";

SetPos(31, 12);

cout<<"得分:"<<score;

SetPos(31, 13);

cout<<"获得称号:"<<title;

SetPos(30, 16);

Sleep(1000);

cout<<"继续?是(y)|否(n)制作:老八";

as:

char x=_getch();

if(x=='n')

exit(0);

else if(x=='y')

{

system("cls");

Game game;

int a= drawMenu();

if(a== 2)

game.rank= 20;

system("cls");

drawPlaying();

game.Playing();

}

else goto as;

}

int main()

{

srand((int)time(0));

HideCursor();

Game game;

int a= drawMenu();

if(a== 2)

game.rank= 20;

system("cls");

drawPlaying();

game.Playing();

}

如何利用网站源码快速建站

在源码建站的利与弊中说过:源码建站,有好处,也有其弊端,选择什么样的建站方式,需要根据自己的情况来进行选择。如果你认可利用网站源码建站,那么,你可以往下看啦,如果不认可,那么,后面就不用再看,避免浪费你的时间!现代社会里谁的时间都很宝贵!如何选择网站源码?如何选择网站源码呢?建议可从如下的几方面来考察:每一个行业都有自身的特征,所以,反映到网站上自然也就有所区别。比如,像医院网站,医院在我们眼中代表的是一种健康、绿色,网站的配色则多以绿色或者白色为主,当然,像最近这几年很热的整形美容方面的,则可能为了突出其整形美容的效果,可能以粉红色为主;再比如,如果你所在的行业是制造或者科技,则通常以经典蓝色为主,蓝色就代表着科技;若是购物商城类,我们参考像淘宝、京东,就可以发现它的颜色是以橙色为主。不同的行业,网站所具有的功能模块也有所差异。比如,学校网站源码,可能就涉及到学籍管理、招生等功能;如果是在属于工程类的,那么,通常网站里就应该有相应的工程案例;如果是商城类,则就有在线购买、支付、购物车等功能;……所以做不同的网站需求的建站系统是不同的!!!!譬如: CMS系统:适合做门户,学校,政府,企业这类网站1、PageAdmin系统2、Drupal系统3、Joomla!系统4、Supesite系统论坛1、Discuz系统2、Phpwind系统3、BBSMAX系统4、DVbbs系统商城:1、Ecshop2、ShopEX淘宝客淘东东淘客程序游戏1、小游戏CMS人才1、嘉缘人才系统百科1、HDwiki2、MediaWiki博客1、Wordpress2、Zblog3、PJblog4、BO-blog5、typecho6、emlog图片1、Mypic电影1、Maxcms点评1、modoer团购1、最土如何获取网站源码呢?通常情况下有两种方式:第一:利用搜索引擎搜索下载。对于这一种获取网站源码的方式,一部分网站源码可以免费下载到,但这种往往不能保证网站源码能正常使用,毕竟,别人免费提供下载,也就没有必然的义务要保证程序的正常使用,而且,如果你对程序或者网站源码一点都不懂的话,通过这种方式获取的网站源码,你在使用过程中可能会遇到很多很多的困难,别人也不会帮助你解决的。免费的事情没有太多的人去愿意做的。当然,有一些源码网站是放出一部分免费的,而如果要下载到更多或者更具实用性的高价值的网站源码,那么,你可能就需要花钱购买VIP或者充值方能进行下载了,这一点其实形同第二种方式。第二:花钱购买。在这种方式下,你可以选择到淘宝店或者拍拍或者华夏源码网去购买。尽管这可能需要花一点钱,但事实上,相对于其他的建站方式,你会发现它实在太实惠了,多的往往不到一千元,少的可能几块钱十几块钱。如果你想利用互联网来赚钱创业的话,这一点投资实在算不了什么。你认同吗?如何使用网站源码?当你通过这些方式获得了网站的源码之后,该如何利用它来进行建站呢?主要是从以下这几方面来考虑。查看所获得的源码的脚本语言和数据库。这一步的操作实际上是确实我们该如何选择网站空间,不同的脚本语言和数据库就需要不同的运行环境的支撑方能正常运行。常用的脚本语言有asp和php、jsp等,数据库有access、mysql、mssql等。第一、如何来确定你所获得的网站源码究竟使用的是哪一种脚本语言呢?第二、如何去确定网站源码所使用的什么数据库呢?这个也很简单。通常,在网站源码的压缩包内均有相应的使用说明,它会告诉你所使用的是什么样的数据库;如果没有说到数据库的问题,那么,这就要根据一些经验来判断了。通常,如果所使用的脚本语言是asp的话,一般都使用的是access数据库,所以,你要注意在解压后的文件夹里有没有这样的一些文件夹名:db,或者是database,这是一种方法,第二种方法就是在在这个文件夹里直接搜索,access数据库文件的扩展名为.mdb,可以在搜索框里输入*.mdb即可。有些网站源码出于安全考虑,而将数据库的后缀名改换了,这种以access数据库居多,后缀名也多为asa,你可以尝试着将其后缀名改为.mdb。一旦确定了网站源码所使用的脚本语言和数据库之后,可先在本机上把效果调试出来。本机搭建网站运行环境为什么要在本机搭建网站运行环境呢?说实话,这主要还是为了查看到网站的效果。毕竟,无论我们是通过查看网站效果图还是通过查看演示网站的效果,但这毕竟不代表我们做出来的也像那样。通过在本机搭建网站运行环境,可以让我们直接通过自己的调试来查看到真实的网站效果。第一:IIS环境的搭建。若在第一步已经确定网站源码所使用的是asp脚本语言,那么,则需要在本机搭建一个IIS,可以选择原始的安装方法进行安装,也可以直接使用简易的IIS服务器工具进行调试;第二:PHP环境的搭建。若在第一步确定网站源码所使用的脚本语言是php,所使用的数据库是mysql,那么,你就需要在本机上搭建一个php的运行环境,如果你只是做研究,那么,你可以一个一个软件分别安装,php、apache、mysql、zend、perl等,如果你确实只是为利用网站源码来建站的话,推荐你直接使用集成环境,如在本站所下载的xampp或者是phpstudy这样的软件,利用它们可以非常容易地做好运行环境的建设。对于常用到的CMS,我们一般都可以熟悉其调试操作。本机调试:第一:查看网站前台效果。若是asp网站源码,直接使用简易IIS服务器工具即可查看到相应的网站前台的效果,然后点击网站相应的目录或者频道进行效果查看;若是php类的,这类网站源码通常都是一种在线安装或者先安装某种CMS,然后再进行数据的恢复操作,然后再查看网站前面的效果。温馨提醒:拿到网站源码,最好仔细地查看网站源码的使用说明,不然,易出错或者不知如何去操作。第二:进入到网站后台,熟悉相应环境和操作。网站前台效果的改变是通过网站后台的设置与管理来实现的。察看了网站前台的效果之后,则可以进入到网站后台了。对于网站后台,首先要确定网站后台管理的目录。通常,在使用说明文本文件或者调试教程中会告诉你后台的管理目录。如果没有这样的文件,那么,你就要注意观察。通常,网站的后台有admin或者包含admin这五个字符的文件夹,那通常就是网站的后台管理目录。另外,对于常用的CMS,我们需要熟悉它的后台管理目录,如前所述的织梦(Dede CMS),它的后台管理就是dede,当然,在真正建站的时候,通常都会将其修改成其他的名称,这是出于安全考虑。需要逐步去查看网站后台的界面、功能以及操作。通常我们需要首先设置关于网站的基础信息,管理员密码、域名、网站标题、网站描述、网站关键字、版权、网站的logo、友情链接等信息,然后再查看相关的目录,如公司简介、新闻、资讯、产品、会员等功能模块,这一步的操作需要一个熟悉的过程,通常都包含最为基本的操作:添加、修改、删除等。利用网站源码建站,确实是一种最快最省钱的建站方式。如何利用网站源码进行建站,我们在这儿做了一个简单的陈述,如果你在这个过程中有什么疑问或者遇到了什么问题,欢迎留言进行交流。

好了,文章到这里就结束啦,如果本次分享的游戏源码站和游戏源码 手游之家.net问题对您有所帮助,还望关注下本站哦!

哪些网站属于asp,有哪些网站属于ASP人工智能ai公司排行榜,中国人工智能公司排名