日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏

發(fā)布時(shí)間:2024/10/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Unity3D怎么制作一個(gè)五子棋游戲

發(fā)布時(shí)間:2021-04-17 17:56:36

來(lái)源:億速云

閱讀:106

作者:Leah

本篇文章為大家展示了使用Unity3D怎么制作一個(gè)五子棋游戲,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。using?UnityEngine;

using?System.Collections;

public?class?chess?:?MonoBehaviour

{

//四個(gè)錨點(diǎn)位置,用于計(jì)算棋子落點(diǎn)

public?GameObject?LeftTop;

public?GameObject?RightTop;

public?GameObject?LeftBottom;

public?GameObject?RightBottom;

//主攝像機(jī)

public?Camera?cam;

//錨點(diǎn)在屏幕上的映射位置

Vector3?LTPos;

Vector3?RTPos;

Vector3?LBPos;

Vector3?RBPos;

Vector3?PointPos;//當(dāng)前點(diǎn)選的位置

float?gridWidth?=?1;?//棋盤(pán)網(wǎng)格寬度

float?gridHeight?=?1;?//棋盤(pán)網(wǎng)格高度

float?minGridDis;?//網(wǎng)格寬和高中較小的一個(gè)

Vector2[,]?chessPos;?//存儲(chǔ)棋盤(pán)上所有可以落子的位置

int[,]?chessState;?//存儲(chǔ)棋盤(pán)位置上的落子狀態(tài)

enum?turn?{?black,?white?};

turn?chessTurn;?//落子順序

public?Texture2D?white;?//白棋子

public?Texture2D?black;?//黑棋子

public?Texture2D?blackWin;?//白子獲勝提示圖

public?Texture2D?whiteWin;?//黑子獲勝提示圖

int?winner?=?0;?//獲勝方,1為黑子,-1為白子

bool?isPlaying?=?true;?//是否處于對(duì)弈狀態(tài)

void?Start()

{

chessPos?=?new?Vector2[15,?15];

chessState?=?new?int[17,?16];/*原來(lái)定義是new?int[15,?15],這里將原來(lái)數(shù)組chessState上、下和右邊各加一排數(shù)據(jù),

也就相當(dāng)于在棋盤(pán)的上、下和右邊各填加一排隱形的棋道。原因后面解釋*/

chessTurn?=?turn.black;

//計(jì)算錨點(diǎn)位置

LTPos?=?cam.WorldToScreenPoint(LeftTop.transform.position);

RTPos?=?cam.WorldToScreenPoint(RightTop.transform.position);

LBPos?=?cam.WorldToScreenPoint(LeftBottom.transform.position);

RBPos?=?cam.WorldToScreenPoint(RightBottom.transform.position);

//計(jì)算網(wǎng)格寬度

gridWidth?=?(RTPos.x?-?LTPos.x)?/?14;

gridHeight?=?(LTPos.y?-?LBPos.y)?/?14;

minGridDis?=?gridWidth?

//計(jì)算落子點(diǎn)位置

for?(int?i?=?0;?i?

{

for?(int?j?=?0;?j?

{

chessPos[i,?j]?=?new?Vector2(LBPos.x?+?gridWidth?*?j,?LBPos.y?+?gridHeight?*?i);//這里和源程序定義稍有不同,這里i定位行,j為列

}

}

}

void?Update()

{

//檢測(cè)鼠標(biāo)輸入并確定落子狀態(tài)

if?(isPlaying?&&?Input.GetMouseButtonDown(0))

{

PointPos?=?Input.mousePosition;

for?(int?i?=?0;?i?

{

for?(int?j?=?0;?j?

{

//找到最接近鼠標(biāo)點(diǎn)擊位置的落子點(diǎn),如果空則落子

if?(Dis(PointPos,?chessPos[i,?j])?

因?yàn)樯稀⑾潞陀疫吀鞫嗉恿艘慌?#xff0c;要空出來(lái),chessPos的i行對(duì)應(yīng)chessState的i+1行*/

{

//根據(jù)下棋順序確定落子顏色

chessState[i?+?1,?j]?=?chessTurn?==?turn.black???1?:?-1;//同理

//落子成功,更換下棋順序

chessTurn?=?chessTurn?==?turn.black???turn.white?:?turn.black;

}

}

}

//調(diào)用判斷函數(shù),確定是否有獲勝方

int?re?=?result();

if?(re?==?1)

{

Debug.Log("黑棋勝");

winner?=?1;

isPlaying?=?false;

}

else?if?(re?==?-1)

{

Debug.Log("白棋勝");

winner?=?-1;

isPlaying?=?false;

}

}

//按下空格重新開(kāi)始游戲

if?(Input.GetKeyDown(KeyCode.Space))

{

for?(int?i?=?0;?i?

{

for?(int?j?=?0;?j?

{

chessState[i?+?1,?j]?=?0;//同理

}

}

isPlaying?=?true;

chessTurn?=?turn.black;

winner?=?0;

}

}

//計(jì)算平面距離函數(shù)

float?Dis(Vector3?mPos,?Vector2?gridPos)

{

return?Mathf.Sqrt(Mathf.Pow(mPos.x?-?gridPos.x,?2)?+?Mathf.Pow(mPos.y?-?gridPos.y,?2));

}

void?OnGUI()

{

//繪制棋子

for?(int?i?=?0;?i?

{

for?(int?j?=?0;?j?

{

if?(chessState[i?+?1,?j]?==?1)//同理

{

GUI.DrawTexture(new?Rect(chessPos[i,?j].x?-?gridWidth?/?2,?Screen.height?-?chessPos[i,?j].y?-?gridHeight?/?2,?gridWidth,?gridHeight),?black);

}

if?(chessState[i?+?1,?j]?==?-1)//同理

{

GUI.DrawTexture(new?Rect(chessPos[i,?j].x?-?gridWidth?/?2,?Screen.height?-?chessPos[i,?j].y?-?gridHeight?/?2,?gridWidth,?gridHeight),?white);

}

}

}

//根據(jù)獲勝狀態(tài),彈出相應(yīng)的勝利圖片

if?(winner?==?1)

{

GUI.DrawTexture(new?Rect(Screen.width?*?0.25f,?Screen.height?*?0.25f,?Screen.width?*?0.5f,?Screen.height?*?0.25f),?blackWin);

}

if?(winner?==?-1)

GUI.DrawTexture(new?Rect(Screen.width?*?0.25f,?Screen.height?*?0.25f,?Screen.width?*?0.5f,?Screen.height?*?0.25f),?whiteWin);

}

//改寫(xiě)result函數(shù)

/*解釋:C語(yǔ)言中,這樣的表達(dá)式:chessState[i]&&chessState[i+1]&&chessState[i+2]&&chessState[i+3]&&chessState[i+4],如果

*?chessState[i]為False,則不管B是真是假或者是異常都不會(huì)運(yùn)行,利用這一點(diǎn),在chessState的右邊、上邊和下邊各加一行為0的數(shù)據(jù),

*?這樣在判斷連續(xù)五個(gè)棋子的狀態(tài)時(shí),就不用擔(dān)心chessState數(shù)組的索引值超出范圍。例如:chessState[i+4]的索引值i+4剛好超出范圍,

*?通過(guò)在原來(lái)數(shù)組chessState的上、下和右邊個(gè)添加一排為0的數(shù),這樣chessState[i+3]==0,于是就可以避免引起異常,從而簡(jiǎn)化代碼*/

int?result()

{

int?flag?=?0;

if?(chessTurn?==?turn.white)

{

for?(int?i?=?1;?i?<=?15;?i++)//這里的i從1開(kāi)始

{

for?(int?j?=?0;?j?<=?14;?j++)//j不用變

{

if?((chessState[i,?j]?==?1?&&?chessState[i,?j?+?1]?==?1?&&?chessState[i,?j?+?2]?==?1?&&?chessState[i,?j?+?3]?==?1?&&?chessState[i,?j?+?4]?==?1)//向右橫向

||?(chessState[i,?j]?==?1?&&?chessState[i?+?1,?j]?==?1?&&?chessState[i?+?2,?j]?==?1?&&?chessState[i?+?3,?j]?==?1?&&?chessState[i?+?4,?j]?==?1)//向上橫向

||?(chessState[i,?j]?==?1?&&?chessState[i?+?1,?j?+?1]?==?1?&&?chessState[i?+?2,?j?+?2]?==?1?&&?chessState[i?+?3,?j?+?3]?==?1?&&?chessState[i?+?4,?j?+?4]?==?1)//向右上斜向

||?(chessState[i,?j]?==?1?&&?chessState[i?-?1,?j?+?1]?==?1?&&?chessState[i?-?2,?j?+?2]?==?1?&&?chessState[i?-?3,?j?+?3]?==?1?&&?chessState[i?-?4,?j?+?4]?==?1))//向右下斜向

{

flag?=?1;

}

}

}

}

else?if?(chessTurn?==?turn.black)

{

for?(int?i?=?1;?i?<=?15;?i++)//這里的i從1開(kāi)始

{

for?(int?j?=?0;?j?<=?14;?j++)

{

if?((chessState[i,?j]?==?-1?&&?chessState[i,?j?+?1]?==?-1?&&?chessState[i,?j?+?2]?==?-1?&&?chessState[i,?j?+?3]?==?-1?&&?chessState[i,?j?+?4]?==?-1)

||?(chessState[i,?j]?==?-1?&&?chessState[i?+?1,?j]?==?-1?&&?chessState[i?+?2,?j]?==?-1?&&?chessState[i?+?3,?j]?==?-1?&&?chessState[i?+?4,?j]?==?-1)

||?(chessState[i,?j]?==?-1?&&?chessState[i?+?1,?j?+?1]?==?-1?&&?chessState[i?+?2,?j?+?2]?==?-1?&&?chessState[i?+?3,?j?+?3]?==?-1?&&?chessState[i?+?4,?j?+?4]?==?-1)

||?(chessState[i,?j]?==?-1?&&?chessState[i?-?1,?j?+?1]?==?-1?&&?chessState[i?-?2,?j?+?2]?==?-1?&&?chessState[i?-?3,?j?+?3]?==?-1?&&?chessState[i?-?4,?j?+?4]?==?-1))

{

flag?=?-1;

}

}

}

}

return?flag;

}

}

上述內(nèi)容就是使用Unity3D怎么制作一個(gè)五子棋游戲,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

總結(jié)

以上是生活随笔為你收集整理的c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。