2048遊戲規則比較簡單,玩家通過上、下、左、右四個方向來控制方塊的移動,每一次移動,所有的方塊都會朝這個方向進行移動,而此時則會在某個隨機空的地區產生乙個新的數字方塊,在移動過程中,若方塊上的數字與移動方向後乙個的方塊上的數字相同,則會碰撞成乙個新的方塊,數字為兩個方塊數字之和。若所有地方都被填滿方塊,且每個方塊與相鄰方塊之間的數字均不相同,則遊戲結束。
執行結果:
所需控制項:乙個button用於重置遊戲,兩個label來顯示分數,乙個panel容器來裝16個textbox用於顯示實時數字。
如出現上圖情況,將每個textbox的tabstop屬性改為false,也可以用label來代替textbox。
本程式使用w、a、s、d四個鍵來操作方塊的移動。記得將form1的keypreview屬性改為true。
首先,定義變數
public class variables
本程式是採用乙個長度為16的陣列來存放每個方塊(即每個textbox)的數字。
移動方法:
public void movingw()
}if (arr.count == 1)
if (arr.count == 2)
else
}if (arr.count == 3)
else
else}}
if (arr.count == 4)
else
}else
else
else}}}}}
此為向上運動的方法,即w。根據方陣每一列的非0的個數以及相互之間的相等情況來計算移動的結果,只有在有方塊進行相加時才有分數產生。其餘三個方向與其類似,就不贅述。
判斷是否遊戲結束
public bool gameover()
//判斷是否有相鄰相同的
//四個角
if (num[0] == num[1] || num[0] == num[4] || num[3] == num[2] || num[3] == num[7]
|| num[12] == num[8] || num[12] == num[13] || num[15] == num[14] || num[15] == num[11])
over1 = true;
//四條邊
int lines1 = ;
foreach (int i in lines1)
}//中間四塊
if (num[5] == num[6] || num[6] == num[10] || num[5] == num[9] || num[9] == num[10])
over1 = true;
return over1;
}
遊戲結束的規則就是方陣被填滿,且沒有兩個相鄰的數字。
首先判斷是否方陣被填滿,只有num中有乙個數字為0,則遊戲繼續。
再來判斷相鄰情況。由於方陣中每個位置的相鄰情況都不一樣,所以需要分開來討論。
首先看四個角的相鄰情況,每個角均與兩個方塊相鄰。然後是每條邊的中間兩個均與三個方塊相鄰。最後是中間四個都與四個方塊相鄰。只有這些相鄰情況中有乙個為真,即返回值為true,遊戲沒有結束。
程式載入時
private void form1_load(object sender, eventargs e)
程式載入時,初始化分數為0,並隨機在方陣中產生乙個數字「2」。計時器是用來將num陣列的值賦給textbox並實時重新整理顯示。此處可以根據textbox不同值來設定不同的背景色,以便於區分。
private void timer1_tick(object sender, eventargs e)}}
#endregion
label2.text = score.tostring();
}
把方陣移動前後進行比較,即num在moving方法呼叫前後進行比較,如果不同則在方陣移動完以後,隨機在此時方陣空的,即值為0的地方生成乙個2或者4,如果相同則不會生成新的數。
public int newnumber()
; //生成數的範圍,2多4少
int select;
select = arraylisttoint(arr); //list轉int陣列
i = getoneindex(num); //在num中隨機得到乙個索引即生成的位置
if (i != 99)
num[i] = getonenumber(select);
return num;
}public int getonenumber(int arr) //在陣列中隨機獲得乙個數
public int getoneindex(int a) //在陣列中隨機得到乙個為0的索引
}random r = new random();
int k;
if (arr.count == 0)
else
return (int)arr[k];
}public int arraylisttoint(arraylist arr)
return s;
}
//判斷運動前後是否相同
for(int i=0;i每次運動完成之後需要再進乙個新的計時器,其中跟上面那個計時器內容差不多,只需要在每次進該計時器時需要將文字框內容清零一下,再進行顯示。再加上乙個判斷遊戲是否結束就ok了。
//清空文字框內容
foreach (control ctrl in panel1.controls)}//
//跟timer1中的顯示和顏色字型設定一樣
////判斷遊戲是否結束
if (quiit== false)
用C 實現基於用C 實現基於TCP協議的網路通訊
tcp 協議是乙個基本的網路 協議,基本上所有的網路服務都是基於 tcp協議的,如http,ftp等等,所以要了解網路程式設計就必須了解基於 tcp協議的程式設計。然而 tcp協議是乙個龐雜的體系,要徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在.net framework環境下,我們不必要去追...
基於winform在ie中的實現
這兩天做個圖表的元件,用的是開源的nplot,效果卻是不錯,就是動態顯示座標時,速度有些慢。現在問題是想把其封裝在乙個winform中,實現我的ie圖表使用者互動顯示,走了一些彎路,剛開始準備直接用winform在ie顯示,後來經過多個環境測試,發現,單一的winform 不呼叫nplot 是可以實...
用WinForm,實現基本的功能操作
sqlconnection myconn 定義全域性變數 sqldataadapter da dataset ds myconn new sqlconnection myconn.connectionstring server localhost database stumagsys trusted...