Unity實(shí)現(xiàn)俄羅斯方塊(三)
本文實(shí)例為大家分享了Unity實(shí)現(xiàn)俄羅斯方塊第3部分,供大家參考,具體內(nèi)容如下
解決穿透問(wèn)題
邏輯部分
1、在物體進(jìn)行移動(dòng)的過(guò)程中更新格子的信息,原來(lái)的所占據(jù)的位置信息進(jìn)行置空操作,現(xiàn)在所占據(jù)的格子進(jìn)行賦值操作。
2、在移動(dòng)后的位置進(jìn)行判斷,首先移動(dòng)后的位置不能是null,且不能不是移動(dòng)后的物體
代碼部分
void updateGrid()
{
//去除移動(dòng)以前的位置信息
for (int y = 0; y < Grid.height; y++)
{
for (int x = 0; x < Grid.width; x++)
{
//腳本是掛在物體上面的而不是是組成物體的格子上
//如果有格子是和現(xiàn)在的位置相同那么進(jìn)行置空操作
if (Grid.grid[x, y]!= null)
{
if (Grid.grid[x, y].parent == transform)
{
Grid.grid[x, y] = null;
}
}
}
}
//加入本次的更新的位置信息
foreach (Transform child in transform)
{
Vector2 v = Grid.roundVec2(child.position);
Grid.grid[(int)v.x, (int)v.y] = child;
}
}
bool isValidGridPos()//判斷是否有效
{
foreach (Transform child in transform)
{
Vector2 v=Grid.roundVec2(child.position);
//判斷是否在邊界之間
if (!Grid.insideBorder(v))
return false;
//格子被占據(jù)了且不是移動(dòng)后的物體就不能繼續(xù)進(jìn)行移動(dòng)
if (Grid.grid[(int)v.x, (int)v.y] != null&& Grid.grid[(int)v.x, (int)v.y].parent != transform)
return false;
}
return true;
}
解決行滿后清行下移的操作
邏輯部分
1、當(dāng)其不能移動(dòng)時(shí),要判斷當(dāng)前游戲頁(yè)面哪一行是滿的,并且刪除該行
2、當(dāng)刪除完這一行以后,要把這行上面的所有方塊進(jìn)行下落操作,如果這一行滿了,先進(jìn)行刪除,并將上方的整體方塊下移,在檢查這一行,直至這一行不能進(jìn)行刪除,再檢查上一行。
代碼部分
//判斷某一行是否是滿的
public static bool isRowFull(int y) {
for (int x = 0; x < width; x++)
{
//該行中只要有一個(gè)是空的,那么這一行就不滿
if (grid[x, y] == null)
return false;
}
return true;
}
//刪除某一行的所有數(shù)據(jù)
public static void deleteRow(int y) {
for (int x = 0; x < width; x++)
{
//將該行的元素進(jìn)行刪除
Destroy(grid[x, y].gameObject);
//將網(wǎng)格置為空
grid[x, y] = null;
}
}
//刪除滿了的所有行
public static void deleteFullRows() {
for (int y = 0; y < height; )
{
if (isRowFull(y))
{
deleteRow(y);
GUIManager.score += 5;
decreaseRowAbove(y + 1);
}
else y++;
}
}
//下降一整行
public static void decreaseRow(int y) {
//復(fù)制該行數(shù)據(jù)到下一行
//清空該行的數(shù)據(jù)
//視覺(jué)上改變?cè)瓉?lái)方塊的位置
for (int x = 0; x < width; x++) {
if (grid[x, y] != null)
{
grid[x, y - 1] = grid[x, y];
grid[x,y].position += new Vector3(0,-1,0);
grid[x, y] = null;
}
}
}
//從指定的行數(shù)開(kāi)始檢查,將該行以及該行以上的數(shù)據(jù)往下移
public static void decreaseRowAbove(int y) {
for (int i = y; i < height; i++)
{
decreaseRow(i);
}
}
設(shè)置成績(jī)
邏輯部分
當(dāng)每消除一行,成績(jī)加5分。
代碼部分
public Text Score;//用于綁定成績(jī)的文本組件,好對(duì)文本的內(nèi)容進(jìn)行修改
public static int score = 0;
void Start()
{
//對(duì)大小寫(xiě)敏感
timer = GameObject.Find("Canvas/Timer").GetComponent<Text>();
Score = GameObject.Find("Canvas/Score").GetComponent<Text>();
//得到游戲開(kāi)始時(shí)間(單位:s)
startTime = Time.time;
}
// Update is called once per frame
void Update()
{
//游戲運(yùn)行了多長(zhǎng)時(shí)間(單位:s)
time=Time.time - startTime;
//秒數(shù)
int seconds=(int)time % 60;
//分?jǐn)?shù)
int minutes = (int)time / 60;
//其中:前面的0 1指的是第幾個(gè)參數(shù) :后面00表示由幾位組成 {}之間的:是要顯示出來(lái)的
string strTime = string.Format("{0:00}:{1:00}",minutes,seconds);
timer.text = strTime;
Score.text = score.ToString();
}
更多俄羅斯方塊精彩文章請(qǐng)點(diǎn)擊專(zhuān)題:俄羅斯方塊游戲集合 進(jìn)行學(xué)習(xí)。
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專(zhuān)題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟
這篇文章主要介紹了linux操作系統(tǒng)安裝MONO執(zhí)行C#程序詳解步驟,有需要的可以參考一下2013-12-12
WPF輕松實(shí)現(xiàn)進(jìn)度條的示例代碼
WPF中的ProgressBar控件用于表示任務(wù)進(jìn)度,適用于文件下載、數(shù)據(jù)處理等場(chǎng)景,本文將通過(guò)XAML和C#代碼展示如何創(chuàng)建一個(gè)基本的WPF進(jìn)度條,并演示如何通過(guò)事件處理程序更新進(jìn)度條的值來(lái)模擬耗時(shí)操作,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-12-12
Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01
c#實(shí)現(xiàn)16進(jìn)制和字符串之間轉(zhuǎn)換的代碼
#中十六進(jìn)制字符串的轉(zhuǎn)換函數(shù)2007-05-05
VB.NET中TextBox的智能感知應(yīng)用實(shí)例
這篇文章主要介紹了VB.NET中TextBox的智能感知應(yīng)用實(shí)例,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08
.NET 某云采購(gòu)平臺(tái)API 掛死問(wèn)題解析
這篇文章主要介紹了.NET 某云采購(gòu)平臺(tái)API 掛死問(wèn)題解析,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-11-11
C#設(shè)計(jì)模式實(shí)現(xiàn)之迭代器模式
迭代器模式把對(duì)象的職責(zé)分離,職責(zé)分離可以最大限度減少彼此之間的耦合程度,從而建立一個(gè)松耦合的對(duì)象,這篇文章主要給大家介紹了關(guān)于C#設(shè)計(jì)模式實(shí)現(xiàn)之迭代器模式的相關(guān)資料,需要的朋友可以參考下2021-08-08

