三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉棋、一條龍、井字棋等。游戲分為雙方對(duì)戰(zhàn),雙方依次在9宮格棋盤(pán)上擺放棋子,率先將自己的三個(gè)棋子走成一條線(xiàn)就視為勝利,而對(duì)方就算輸了,但是三子棋在很多時(shí)候會(huì)出現(xiàn)和棋的局面。
相信大家都玩過(guò)三子棋,那既然學(xué)習(xí)了C語(yǔ)言,有沒(méi)有想親手寫(xiě)一個(gè)呢?自己寫(xiě)的可能也會(huì)更有趣吧,快付出行動(dòng)吧,我們一起完成三子棋代碼的書(shū)寫(xiě)。
先讓我們看看完成的效果圖,來(lái)確定我們的目標(biāo)任務(wù)。
?????????????
二、代碼的整體框架我們完成一個(gè)程序前要建立一個(gè)框架,main函數(shù)放在test.c文件中并且對(duì)游戲需要的函數(shù)進(jìn)行引用,實(shí)現(xiàn)游戲的各種功能的函數(shù)全部在game.c文件中完成。game.h文件中包含了程序所需的各種頭文件并且包換對(duì)實(shí)現(xiàn)游戲功能的各種函數(shù)的聲明。
在本次游戲設(shè)計(jì)中,為什么使用了3個(gè)文件難道不能放在一個(gè)文件中呢?
三子棋的實(shí)現(xiàn)需要多個(gè)模塊的功能相互串聯(lián),多個(gè)文件可以分別處理各自模塊的功能,能更好處理各個(gè)模塊之間的邏輯并且便于后期調(diào)試,也使得代碼的可讀性提高。所以在寫(xiě)一個(gè)長(zhǎng)的代碼時(shí),我們要提前建立一個(gè)框架,不僅是為了別人讀懂,也是為了后面進(jìn)行維護(hù)和更新提供便利,還可以培養(yǎng)我們對(duì)日常生活中一些事情的由繁化簡(jiǎn)的思維。希望大家都養(yǎng)成這種良好的習(xí)慣。
三、實(shí)現(xiàn)三子棋的各種功能和邏輯的串聯(lián) 3.1創(chuàng)建初始界面(進(jìn)行玩家選擇)打印菜單并且對(duì)游戲進(jìn)行難度選擇
void menu1()
{printf("*********************************\n");
printf("****** 1. 開(kāi)始游戲 *****\n");
printf("****** 0. 退出游戲 *****\n");
printf("*********************************\n");
}
void menu2()
{printf("**************************************\n");
printf("****** 1.玩家vs電腦(傻瓜版)********\n");
printf("****** 2.玩家vs玩家 ********\n");
printf("****** 3.玩家vs電腦(智能版)********\n");
printf("**************************************\n");
}
void game1()
{}
void game2()
{}
void game3()
{}
int main()
{int input1 = 0;
int input2 = 0;
srand((unsigned int)time(NULL));
do
{menu1();
printf("請(qǐng)選擇:>");
scanf("%d", &input1);
menu2();
printf("請(qǐng)選擇:>");
scanf("%d", &input2);
switch (input1)
{case 1:
if (1 == input2)
{ game1();
}
else if (2 == input2)
{ game2();
}
else if (3 == input2)
{ game3();
}
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤,重新選擇\n");
break;
}
} while (input1);
return 0;
}
3.2棋盤(pán)的初始化和棋盤(pán)的搭建運(yùn)行效果圖
?
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;
int j = 0;
for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ board[i][j] = ' ';
}
}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ printf(" %c ", board[i][j]);
if (j< col - 1)
printf("|");
}
printf("\n");
if (i< row - 1)
{ int j = 0;
for (j = 0; j< col; j++)
{ printf("---");
if (j< col - 1)
printf("|");
}
printf("\n");
}
}
}
void game1()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
}
void game2()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
}
void game3()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
}
3.3玩家下棋運(yùn)行效果圖
?
void PlayerMove1(char board[][COL], int row, int col)
{int x = 0;
int y = 0;
printf("玩家走:>\n");
while (1)
{printf("請(qǐng)輸入下棋的坐標(biāo):>");
scanf("%d %d", &x, &y);
//判斷坐標(biāo)合法性
if (x >= 1 && x<= row && y >= 1 && y<= col)
{ //下棋
//坐標(biāo)是否被占用
if (board[x - 1][y - 1] == ' ')
{ board[x - 1][y - 1] = '*';
break;
}
else
{ printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
}
}
else
{ printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
}
}
}
3.4電腦下棋運(yùn)行效果圖
?
void ComputerMove1(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
int x = 0;
int y = 0;
while (1)
{x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{ board[x][y] = '#';
break;
}
}
}
3.5電腦的智能下棋運(yùn)行效果圖
?
int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch)//ch為'#'進(jìn)行下棋,ch為'*'進(jìn)行堵截
{//檢查電腦能否獲得勝利/堵截玩家
int i = 0;
//電腦對(duì)行的智能堵截
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ if (board[i][0] == board[i][1] && board[i][0] == ch && board[i][2] == ' ')
{ board[i][2] = '#';
return 1;
}
if (board[i][0] == board[i][2] && board[i][0] == ch && board[i][1] == ' ')
{ board[i][1] = '#';
return 1;
}
if (board[i][1] == board[i][2] && board[i][1] == ch && board[i][0] == ' ')
{ board[i][0] = '#';
return 1;
}
}
}
//電腦對(duì)列的智能堵截
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ if (board[0][j] == board[1][j] && board[0][j] == ch && board[2][j] == ' ')
{ board[2][j] = '#';
return 1;
}
if (board[0][j] == board[2][j] && board[0][j] == ch && board[1][j] == ' ')
{ board[1][j] = '#';
return 1;
}
if (board[1][j] == board[2][j] && board[1][j] == ch && board[0][j] == ' ')
{ board[0][j] = '#';
return 1;
}
}
}
//電腦對(duì)主對(duì)角線(xiàn)的智能堵截
if (board[0][0] == board[1][1] && board[1][1] == ch && board[2][2] == ' ')
{board[2][2] = '#';
return 1;
}
if (board[0][0] == board[2][2] && board[0][0] == ch && board[1][1] == ' ')
{board[1][1] = '#';
return 1;
}
if (board[1][1] == board[2][2] && board[1][1] == ch && board[0][0] == ' ')
{board[0][0] = '#';
return 1;
}
//電腦對(duì)副對(duì)角線(xiàn)的智能堵截
if (board[0][2] == board[1][1] && board[0][2] == ch && board[2][0] == ' ')
{board[2][0] = '#';
return 1;
}
if (board[0][2] == board[2][0] && board[0][2] == ch && board[1][1] == ' ')
{board[1][1] = '#';
return 1;
}
if (board[1][1] == board[2][0] && board[1][1] == ch && board[0][2] == ' ')
{board[0][2] = '#';
return 1;
}
return 0;//若電腦無(wú)法贏棋或無(wú)法自動(dòng),則返回0
}
void ComputerMove2(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
int flag1 = 0;
int flag2 = 0;
flag1 = IntelligentComputerMove(board, ROW, COL, '#');//電腦智能贏棋
if (flag1 == 0)//若電腦無(wú)法贏棋,則進(jìn)行阻攔
{flag2 = IntelligentComputerMove(board, ROW, COL, '*');//電腦智能堵截
if (flag2 == 0)//若贏棋和自動(dòng)都不滿(mǎn)足,電腦自動(dòng)下棋
{ int x = 0;
int y = 0;
while (1)
{ x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{board[x][y] = '#';
break;
}
}
}
}
}
3.6判斷輸贏并打印運(yùn)行效果圖
?
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0; int j = 0; for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ if (board[i][j] == ' ')
{ return 0;
//棋盤(pán)沒(méi)滿(mǎn)
}
}
}
return 1;
//棋盤(pán)滿(mǎn)了
}
char IsWin(char board[ROW][COL], int row, int col)//1. 玩家贏了 - *//2. 電腦贏了 - #//3. 平局 - Q//4. 游戲繼續(xù) - C
{int i = 0;
//判斷三行
for (i = 0; i< row; i++)
{if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
{ return board[i][1];
//
}
}
//判斷三列
for (i = 0; i< col; i++)
{if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
{ return board[1][i];
}
}
//判斷對(duì)角線(xiàn)
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
} //判斷平局
//如果棋盤(pán)滿(mǎn)了返回1, 不滿(mǎn)返回0
int ret = IsFull(board, row, col);
if (ret == 1)
{return 'Q';
}
return 'C';
}
運(yùn)行效果圖
四、完整代碼建議大家也像這樣寫(xiě)完一個(gè)函數(shù)的功能運(yùn)行一下,能及時(shí)發(fā)現(xiàn)程序是否可以完成我們的目的,別等到代碼寫(xiě)完再找就難了。
game.h —— 包含了程序所需的各種頭文件并且包換對(duì)實(shí)現(xiàn)游戲功能的各種函數(shù)的聲明
?
//頭文件的包含
#include#include#include//符號(hào)的定義
#define ROW 3
#define COL 3
//函數(shù)的聲明
//初始化棋盤(pán)的
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盤(pán)的函數(shù)
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove1(char board[ROW][COL], int row, int col);
void PlayerMove2(char board[ROW][COL], int row, int col);
//電腦下棋
void ComputerMove1(char board[ROW][COL], int row, int col);
void ComputerMove2(char board[ROW][COL], int row, int col);
智能電腦下棋
static int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch);
//判斷游戲是否有輸贏
char IsWin(char board[ROW][COL], int row, int col);
?
test.c —— 對(duì)游戲需要的函數(shù)進(jìn)行引用
?
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu1()
{printf("*********************************\n");
printf("****** 1. 開(kāi)始游戲 *****\n");
printf("****** 0. 退出游戲 *****\n");
printf("*********************************\n");
}
void menu2()
{printf("**************************************\n");
printf("****** 1.玩家vs電腦(傻瓜版)********\n");
printf("****** 2.玩家vs玩家 ********\n");
printf("****** 3.玩家vs電腦(智能版)********\n");
printf("**************************************\n");
}
void game1()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
char ret = 0;
//接受游戲狀態(tài)
while (1)
{//玩家下棋
PlayerMove1(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷玩家是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
//電腦下棋
ComputerMove1(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷電腦是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
}
if (ret == '*')
{printf("玩家贏了\n");
}
else if(ret == '#')
{printf("電腦贏了\n");
}
else
{printf("平局\n");
}
DisplayBoard(board, ROW, COL);
}
void game2()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
char ret = 0;
//接受游戲狀態(tài)
while (1)
{//玩家下棋
PlayerMove1(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷玩家是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
//玩家2下棋
PlayerMove2(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
}
if (ret == '*')
{printf("玩家1贏了\n");
}
else if (ret == '#')
{printf("玩家2贏了\n");
}
else
{printf("平局\n");
}
DisplayBoard(board, ROW, COL);
}
void game3()
{//存儲(chǔ)數(shù)據(jù) - 二維數(shù)組
char board[ROW][COL];
//初始化棋盤(pán) - 初始化空格
InitBoard(board, ROW, COL);
//打印一下棋盤(pán) - 本質(zhì)是打印數(shù)組的內(nèi)容
DisplayBoard(board, ROW, COL);
char ret = 0;
//接受游戲狀態(tài)
while (1)
{//玩家1下棋
PlayerMove1(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷玩家是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
//電腦下棋
ComputerMove2(board, ROW, COL);
DisplayBoard(board, ROW, COL);
//判斷電腦是否贏得游戲
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
}
if (ret == '*')
{printf("玩家贏了\n");
}
else if (ret == '#')
{printf("電腦贏了\n");
}
else
{printf("平局\n");
}
DisplayBoard(board, ROW, COL);
}
int main()
{int input1 = 0;
int input2 = 0;
srand((unsigned int)time(NULL));
do
{menu1();
printf("請(qǐng)選擇:>");
scanf("%d", &input1);
menu2();
printf("請(qǐng)選擇:>");
scanf("%d", &input2);
switch (input1)
{case 1:
if (1 == input2)
{ game1();
}
else if(2 == input2)
{ game2();
}
else if (3 == input2)
{ game3();
}
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤,重新選擇\n");
break;
}
} while (input1);
return 0;
}
game.c —— 實(shí)現(xiàn)游戲的各種功能的函數(shù)
?
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;
int j = 0;
for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ board[i][j] = ' ';
}
}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{ int i = 0;
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ printf(" %c ", board[i][j]);
if(j int j = 0;
for (j = 0; j< col; j++)
{ printf("---");
if(jint x = 0;
int y = 0;
printf("玩家走:>\n");
while (1)
{printf("請(qǐng)輸入下棋的坐標(biāo):>");
scanf("%d %d", &x, &y);
//判斷坐標(biāo)合法性
if (x >= 1 && x<= row && y >= 1 && y<= col)
{ //下棋
//坐標(biāo)是否被占用
if (board[x - 1][y - 1] == ' ')
{ board[x - 1][y - 1] = '*';
break;
}
else
{ printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
}
}
else
{ printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
}
}
}
void PlayerMove2(char board[][COL], int row, int col)
{int x = 0;
int y = 0;
printf("玩家2走:>\n");
while (1)
{printf("請(qǐng)輸入下棋的坐標(biāo):>");
scanf("%d %d", &x, &y);
//判斷坐標(biāo)合法性
if (x >= 1 && x<= row && y >= 1 && y<= col)
{ //下棋
//坐標(biāo)是否被占用
if (board[x - 1][y - 1] == ' ')
{ board[x - 1][y - 1] = '#';
break;
}
else
{ printf("坐標(biāo)被占用, 請(qǐng)重新輸入\n");
}
}
else
{ printf("坐標(biāo)非法, 請(qǐng)重新輸入\n");
}
}
}
void ComputerMove1(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
int x = 0;
int y = 0;
while (1)
{x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{ board[x][y] = '#';
break;
}
}
}
int IntelligentComputerMove(char board[ROW][COL], int row, int col, char ch)//ch為'#'進(jìn)行下棋,ch為'*'進(jìn)行堵截
{//檢查電腦能否獲得勝利/堵截玩家
int i = 0;
//電腦對(duì)行的智能堵截
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ if (board[i][0] == board[i][1] && board[i][0] == ch && board[i][2] == ' ')
{ board[i][2] = '#';
return 1;
}
if (board[i][0] == board[i][2] && board[i][0] == ch && board[i][1] == ' ')
{ board[i][1] = '#';
return 1;
}
if (board[i][1] == board[i][2] && board[i][1] == ch && board[i][0] == ' ')
{ board[i][0] = '#';
return 1;
}
}
}
//電腦對(duì)列的智能堵截
for (i = 0; i< row; i++)
{int j = 0;
for (j = 0; j< col; j++)
{ if (board[0][j] == board[1][j] && board[0][j] == ch && board[2][j] == ' ')
{ board[2][j] = '#';
return 1;
}
if (board[0][j] == board[2][j] && board[0][j] == ch && board[1][j] == ' ')
{ board[1][j] = '#';
return 1;
}
if (board[1][j] == board[2][j] && board[1][j] == ch && board[0][j] == ' ')
{ board[0][j] = '#';
return 1;
}
}
}
//電腦對(duì)主對(duì)角線(xiàn)的智能堵截
if (board[0][0] == board[1][1] && board[1][1] == ch && board[2][2] == ' ')
{board[2][2] = '#';
return 1;
}
if (board[0][0] == board[2][2] && board[0][0] == ch && board[1][1] == ' ')
{board[1][1] = '#';
return 1;
}
if (board[1][1] == board[2][2] && board[1][1] == ch && board[0][0] == ' ')
{board[0][0] = '#';
return 1;
}
//電腦對(duì)副對(duì)角線(xiàn)的智能堵截
if (board[0][2] == board[1][1] && board[0][2] == ch && board[2][0] == ' ')
{board[2][0] = '#';
return 1;
}
if (board[0][2] == board[2][0] && board[0][2] == ch && board[1][1] == ' ')
{board[1][1] = '#';
return 1;
}
if (board[1][1] == board[2][0] && board[1][1] == ch && board[0][2] == ' ')
{board[0][2] = '#';
return 1;
}
return 0;//若電腦無(wú)法贏棋或無(wú)法自動(dòng),則返回0
}
void ComputerMove2(char board[ROW][COL], int row, int col)
{printf("電腦走:>\n");
int flag1 = 0;
int flag2 = 0;
flag1 = IntelligentComputerMove(board, ROW, COL, '#');//電腦智能贏棋
if (flag1 == 0)//若電腦無(wú)法贏棋,則進(jìn)行阻攔
{flag2 = IntelligentComputerMove(board, ROW, COL, '*');//電腦智能堵截
if (flag2 == 0)//若贏棋和自動(dòng)都不滿(mǎn)足,電腦自動(dòng)下棋
{ int x = 0;
int y = 0;
while (1)
{ x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{board[x][y] = '#';
break;
}
}
}
}
}
int IsFull(char board[ROW][COL], int row, int col)
{int i = 0; int j = 0; for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ if (board[i][j] == ' ')
{ return 0;
//棋盤(pán)沒(méi)滿(mǎn)
}
}
}
return 1;
//棋盤(pán)滿(mǎn)了
}
char IsWin(char board[ROW][COL], int row, int col)//1. 玩家贏了 - *//2. 電腦贏了 - #//3. 平局 - Q//4. 游戲繼續(xù) - C
{int i = 0;
//判斷三行
for (i = 0; i< row; i++)
{if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
{ return board[i][1];
//
}
}
//判斷三列
for (i = 0; i< col; i++)
{if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
{ return board[1][i];
}
}
//判斷對(duì)角線(xiàn)
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
} //判斷平局
//如果棋盤(pán)滿(mǎn)了返回1, 不滿(mǎn)返回0
int ret = IsFull(board, row, col);
if (ret == 1)
{return 'Q';
}
return 'C';
}
五、結(jié)語(yǔ)以上是我對(duì)三子棋游戲的實(shí)現(xiàn),如果時(shí)間充足還是要從前到尾看一遍,肯定會(huì)有收獲的,盡量不要直接跳轉(zhuǎn)到完整代碼直接復(fù)制?。?如果有大佬感興趣可以進(jìn)一步優(yōu)化。
因本人能力還有待提高,如有錯(cuò)誤可以及時(shí)指出。感謝大家觀(guān)看和支持。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱(chēng):【C語(yǔ)言】如何使用數(shù)組實(shí)現(xiàn)三子棋(電腦智能堵棋)-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article20/djegjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、虛擬主機(jī)、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、ChatGPT、用戶(hù)體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容