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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#三打一网络扑克游戏软件开发(一)

發(fā)布時間:2023/12/16 C# 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#三打一网络扑克游戏软件开发(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C#三打一網(wǎng)絡(luò)撲克游戲軟件開發(fā)(一)

——玩家叫分

該游戲主要是參照云南大理本地居民休閑時所玩的撲克游戲開發(fā),其規(guī)則與之完全相同。因此,為了讓大家能更清楚的理解整個開發(fā)過程,在開始時有必要先對整個游戲規(guī)則作個介紹。

由于本文討論的是玩家叫分模塊的開發(fā),因此這里就先介紹叫分的規(guī)則,其余規(guī)則待討論時再進行介紹。

在游戲開始時,首先隨機選定一名玩家進行第一個叫分,之后按逆時針方向依次輪換,直到有三個玩家均選擇“不叫”時,則可確定本局牌莊家為剩下的那名玩家。

在叫分時,會有一些細則進行約束。具體如下:

(先做個名詞解釋:)

常主:在該游戲中,王、7、2被稱作常主。

1、? 如果玩家有7張常主,那么該玩家在本局牌中必須叫一次莊(也就是自己在第一次叫莊時不能選擇“不叫”);

2、? 如果第一個叫莊的玩家選擇80分,其余三名玩家均選擇不叫,那叫80分的玩家在本局牌中勝出,輸?shù)耐婕覟槠溆嗳婕抑谐V鲾?shù)最多的玩家。如果常主數(shù)相同,則輸家為在逆時針方向挨近莊家的玩家。

3、? 第一個叫莊的玩家在第一次叫莊時只能在80分和50分范圍內(nèi)(包含80分和50分);

4、? 如果第一個叫莊的玩家在第一次叫莊時叫了80分,則他在本局牌中失去了叫莊資格;

5、? 如果當(dāng)前玩家所叫出的莊分大于50,則后面的玩家所叫的莊分不能低于50,只有當(dāng)其中一名玩家叫了50分后,后面的玩家才能叫小于50的莊分(包括“擺光”);

6、? 如果其中一名玩家選擇了“不叫”,則它在本局牌中失去了后續(xù)的叫莊資格;

7、? 每個玩家所叫的莊分只能低于當(dāng)前所叫出的莊分;

8、? 在叫莊沒有結(jié)束時,玩家可以無限次數(shù)的叫“擺光”,每叫一次“擺光”,輸贏的倍率乘以二(即:莊家所輸?shù)姆譃榛痉殖艘员堵?#xff09;

以上就是三打一撲克游戲的整個叫分過程,下面我們討論怎么樣通過代碼來實現(xiàn)這個模塊。

在該部分中,涉及到的條件很多,如果將這部分的代碼放到和游戲主程序代碼一起來開發(fā)的話,整個邏輯會變得雜亂無章,也不利于后期的測試和維護。因此,決定采用面向?qū)ο蟮姆椒?#xff0c;叫莊這個模塊單獨封裝為一個對象,在這個對象中提供一些和主程序進行數(shù)據(jù)對接的接口,就可以完成整個功能。

通過上面的分析,結(jié)合VS2005平臺的特點,決定將整個叫分模塊作為一個控件來開發(fā),最后主程序中使用的時候只需從工具箱中拖出來即可。

在新建項目的選擇對話框中,我們選擇“Windows窗體控件庫”,便可進入到控件開發(fā)界面。該界面和Windows應(yīng)用程序開發(fā)界面基本一至,開發(fā)方法也如出一轍,只不過這里開發(fā)出來的是一個.dll文件的控件,Windows應(yīng)用程序開發(fā)出來的是一個應(yīng)用程序。

在這個界下,我們先從工具箱中拖出一些我們需要的控件來組成叫分模塊的界面。如下圖:

這個控件包含了一些按鈕,每個按鈕代表不同的莊分值。叫莊時,玩家所點擊的按鈕代表的分值就為當(dāng)前該名玩家所叫的莊分。在游戲中,通過該控件從主程序獲取的數(shù)據(jù)來動態(tài)控制其各個按鈕的Enab le屬性,以達到約束玩家當(dāng)前能叫哪些莊分的目的。需要說明的是,這個過程由該控件自己完成,主程序只把約束條件中的一些數(shù)據(jù)提供給它,控件便可根據(jù)這些數(shù)據(jù)來控制玩家當(dāng)前該如何叫莊。

所涉及的代碼如下:

private Button[] jf;

??????? public JiaoFeng()

??????? {

??????????? InitializeComponent();

??????????? jf = new Button[19]{button1,button2,button3,button4,button5,button6,button7,button8,button9,button10,

????????????????????????????? button11,button12,button13,button14,button15,button16,button17,button18,button19};

??????? }

?

??????? //保存我方的叫莊的次數(shù)

??????? private int jiaoZhuangCount=1;

??????? public int JiaoZhuangCount

??????? {

??????????? get

??????????? {

??????????????? return jiaoZhuangCount;

??????????? }

??????????? set

??????????? {

??????????????? jiaoZhuangCount = value;

??????????????? //如果我方是第一次叫莊,并且我手中的常主數(shù)大于或等于7,則本次必須叫莊

??????????????? if (jiaoZhuangCount == 1 && changZhuCount >= 7)

??????????????? {

??????????????????? button19.Visible = false;

??????????????? }

??????????????? else

??????????????? {

??????????????????? button19.Visible = true;//是否顯示不叫按鈕

??????????????? }

?

??????????? }

??????? }

?

??????? //保存我方手中的牌常主的數(shù)目

??????? private int changZhuCount;

??????? public int ChangZhuCount

??????? {

??????????? get

??????????? {

??????????????? return changZhuCount;

??????????? }

??????????? set

??????????? {

??????????????? changZhuCount = value;

??????????????? //如果我方手中的常數(shù)大于或等于7,并且我是第一次叫莊,則本次必須叫莊

??????????????? if (changZhuCount >= 7 && jiaoZhuangCount == 1)

??????????????? {

??????????????????? button19.Visible = false;

??????????????? }

??????????????? else

??????????????? {

??????????????????? button19.Visible = true;//是否顯示不叫按鈕

??????????????? }

?

??????????? }

??????? }

?

??????? //保存上一個玩家所叫的分

??????? private int upPlayerFeng=-15;

??????? public int UpPlayerFeng

??????? {

??????????? get

??????????? {

??????????????? return upPlayerFeng;

??????????? }

??????????? set

??????????? {

??????????????? upPlayerFeng = value;

??????????????? if (upPlayerFeng != -15 && upPlayerFeng != -10)//-15為變量的初始值,-10為玩家先不叫的值,-5為擺光的值

??????????????? {

??????????????????? if (upPlayerFeng == -5)//如果叫了擺光,則要把80——0分的按鈕都隱藏掉

??????????????????? {

??????????????????????? upPlayerFeng = 0;

??????????????????? }

??????????????????? //如果我不是第一個叫莊,則只能叫比上一玩家所叫分低的分

??????????????????? for (int i = 0; i <= Math.Abs(upPlayerFeng - 80) / 5; i++)

??????????????????? {

??????????????????????? jf[i].Visible = false;

??????????????????? }

??????????????? }

??????????? }

??????? }

?

??????? //保存我方是第幾個叫莊(相對于所有玩家而言)

??????? private int jiaoZhuangList;

??????? public int JiaoZhuangList

??????? {

??????????? get

??????????? {

??????????????? return jiaoZhuangList;

??????????? }

??????????? set

??????????? {

??????????????? jiaoZhuangList = value;

??????????????? //如果我是第一個叫莊,則只能叫5080,不能不叫或叫擺光

??????????????? if (jiaoZhuangList == 1)

??????????????? {

??????????????????? for (int i = 7; i < 19; i++)

??????????????????? {

??????????????????????? jf[i].Visible = false;

??????????????????? }

???????? ???????}

??????????????? else//如果我不是第一個叫莊,則要看上一個玩家所叫莊的分?jǐn)?shù)

??????????????? {

??????????????????? if (UpPlayerFeng > 50)//如果上一個玩家所叫的分不小于50,則我方現(xiàn)在只能叫5080之間的

??????????????????? {

??????????????????????? for (int i = 0; i < 19; i++)

??????????????????????? {

??????????????????????????? jf[i].Visible = false;

??????????????????????? }

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

??????????????????????? {

??????????????????????????? jf[j].Visible = true;

??????????????????????? }

??????????????????????? UpPlayerFeng = upPlayerFeng;

??????????????????? }

??????????????????? else

??????????????????? {

??????????????????????? for (int i = 0; i < 19; i++)

??????????????????????? {

??????????????????????????? jf[i].Visible = true;

??????????????????????? }

??????????????????????? UpPlayerFeng = upPlayerFeng;

??????????????????????? if (UpPlayerFeng == 50)//如果上一個玩家所叫的分是50

??????????????????????? {

??????????????????????????? button18.Visible = false;

??????????????????????? }

??????????????????????? else

?? ?????????????????????{

??????????????????????????? button18.Visible = true;

??????????????????????? }

??????????????????? }

??????????????????? //UpPlayerFeng = upPlayerFeng;

??????????????? }

??????????? }

??????? }

?

??????? //保存自己所叫的莊分

??????? private int myFeng;

??????? public int MyFeng

??????? {

??????????? get

??????????? {

??????????????? return myFeng;

??????????? }

??????????? set

??????????? {

??????????????? myFeng = value;

??????????? }

??????? }

?

??????? //一局牌結(jié)束后,將叫分按鈕全部顯示

??????? public void SetGameInfo()

??????? {

??????????? MyFeng = 0;

??????????? JiaoZhuangList = 0;

??????????? UpPlayerFeng = -15;

??????????? ChangZhuCount = 0;

??????????? JiaoZhuangCount = 1;

??????????? for (int i = 0; i < 19; i++)

??????????? {

??????????????? jf[i].Visible = true;

??????????? }

??????? }

?

?

??????? private void button1_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 80;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button2_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 75;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button3_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 70;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button4_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 65;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button5_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 60;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button6_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 55;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button7_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 50;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button8_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 45;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button9_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 40;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button10_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 35;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button11_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 30;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button12_Click(object sender, EventArgs e)

??????? {

???????? ???MyFeng = 25;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button13_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 20;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button14_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 15;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button15_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 10;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button16_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 5;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button17_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = 0;

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button18_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = -5;//擺光

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

?

??????? private void button19_Click(object sender, EventArgs e)

??????? {

??????????? MyFeng = -10;//不叫

??????????? jiaoZhuangCount = jiaoZhuangCount + 1;

??????????? this.OnValidating(new CancelEventArgs());

??????? }

}

?

這些代碼均有注釋,這里便不再詳解。僅說明一下特殊的地方。

1、???? 在該控件中,所涉及到了19Button控件,我們把它保存到了一個Button控件數(shù)組Button[] jf里面,目的是為了后面能夠通過for循環(huán)對它們的Enable值進行批量更改;

2、???? 在各button控件的Click事件中,全都使用了一個this.OnValidating(new CancelEventArgs()),其原因是在游戲主程序中這個叫莊模塊將作為一個整體的控件使用,無法再對這個控件上的各個button按鈕的Click事件進行綁定。因此,在開發(fā)該控件的時候便通過上述語句把每個button按鈕的Click事件綁定到該控件的驗證事件上。游戲中玩家在叫莊時點擊了莊分所對應(yīng)的按鈕,就觸發(fā)了該控件的OnValidating事件,這此我們只需在主程序中對叫莊控件的OnValidating進行綁定,便可知道當(dāng)前玩家所選擇的莊分。

好了,關(guān)于叫莊模塊的開發(fā)就先討論到這,也許你看得一頭霧水,這很正常,因為你還不了解這個模塊是怎么使用的。我相信,通過后續(xù)的討論,你能很好的掌握它,并通過自己的思考開發(fā)出更獨到的東西,我相信你。

總結(jié)

以上是生活随笔為你收集整理的C#三打一网络扑克游戏软件开发(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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