java写的网络版斗地主_JAVA网络版斗地主游戏
大家好,歡迎各位前輩看小弟寫的一個網絡版的斗地主程序,下面是小弟用了兩個多星期的心血寫成的,請各位前輩多指教!使小弟我能夠得到前輩的指點,更上一層樓,謝謝支持!
下面是我寫的項目分析和講解:
由于我裝的eclipse沒有裝UML插件,所以就沒有設計UML圖,但是我的源碼當中大部分有注解講解。
在此程序當中,我的主要抽象對象是牌這個對象
Puker.java代碼如下:
/*
*這是一個牌對象的抽象類
*是為了表現牌這個對象
* */
import java.awt.*;
public class Puker
{
public int P_x,P_y;//表示牌X,Y坐標的屬性
private final int P_w=60,P_h=80; //表示牌寬,高的屬性
public Puker_num puker_num=null; //表示牌的牌值的屬性
public Puker_hushe puker_hushe=null; //表示牌的花色的屬性
public String puker_n=null;//表示畫牌時用到的一個屬性
public int puker_num1,puker_hushe1; //用整數形式表示牌的牌值和花色的屬性
public int puker_dx;//表示牌的大小的值
public boolean bUp=false; //表示牌是否被選中的屬性
/*
*用于構造用戶自己的牌的構造方法
* */
public Puker(int P_x,int P_y,Puker_num puker_num,Puker_hushe puker_hushe)
{
this.P_x=P_x;
this.P_y=P_y;
this.puker_num=puker_num;
this.puker_hushe=puker_hushe;
this.BPuker_num();
}
/*
*用于構造54張牌組的構造方法
* */
public Puker(int puker_num1,int puker_hushe1)
{
this.puker_num1=puker_num1;
this.puker_hushe1=puker_hushe1;
}
/*
*用于畫牌這個對象的方法
* */
public void paint(Graphics g)
{
Color c=g.getColor();
g.setColor(Color.WHITE);
g.fill3DRect(this.P_x, this.P_y, this.P_w, this.P_h, true);
g.setColor(Color.BLACK);
g.draw3DRect(this.P_x, this.P_y, this.P_w, this.P_h, true);
g.drawString(this.puker_n, this.P_x+5, this.P_y+20);
if(this.puker_n.equals("大王")||this.puker_n.equals("小王"))
{
}else g.drawString(this.puker_hushe.toString(), this.P_x+20, this.P_y+20);
g.setColor(c);
}
/*
*此方法根據構造方法當中的屬性來
*決定牌的其他屬性
* */
public void BPuker_num ()
{
switch(puker_num)
{
case p1: this.puker_n="1";
this.puker_dx=14;
this.puker_num1=1;
break;
case p2: this.puker_n="2";
this.puker_dx=15;
this.puker_num1=2;
break;
case p3: this.puker_n="3";
this.puker_dx=3;
this.puker_num1=3;
break;
case p4: this.puker_n="4";
this.puker_dx=4;
this.puker_num1=4;
break;
case p5: this.puker_n="5";
this.puker_dx=5;
this.puker_num1=5;
break;
case p6: this.puker_n="6";
this.puker_dx=6;
this.puker_num1=6;
break;
case p7: this.puker_n="7";
this.puker_dx=7;
this.puker_num1=7;
break;
case p8: this.puker_n="8";
this.puker_dx=8;
this.puker_num1=8;
break;
case p9: this.puker_n="9";
this.puker_dx=9;
this.puker_num1=9;
break;
case p0: this.puker_n="10";
this.puker_dx=10;
this.puker_num1=10;
break;
case pJ: this.puker_n="J";
this.puker_dx=11;
this.puker_num1=11;
break;
case pQ: this.puker_n="Q";
this.puker_dx=12;
this.puker_num1=12;
break;
case pK: this.puker_n="K";
this.puker_dx=13;
this.puker_num1=13;
break;
case pD: this.puker_n="大王";
this.puker_dx=17;
this.puker_num1=15;
break;
case pX: this.puker_n="小王";
this.puker_dx=16;
this.puker_num1=14;
break;
}
switch(puker_hushe)
{
case黑桃: this.puker_hushe1=1;
break;
case紅心: this.puker_hushe1=2;
break;
case梅花: this.puker_hushe1=3;
break;
case方塊: this.puker_hushe1=4;
break;
case無: if(this.puker_num1==14){
this.puker_hushe1=5;
}else if(this.puker_num1==15){
this.puker_hushe1=6;
}
break;
}
}
/*
*此方法是得到一個牌
*的一矩形對象,是為了
*選擇牌時用鼠標拖一個矩形然后
*與牌對象的矩形對象進行相交決定
*是否被選中
* */
public Rectangle getRect(){
return new Rectangle(P_x,P_y,P_w,P_h);
}
}
應該說我這個程序主要是圍繞著這個對象再操作。
那么表示牌的牌值我是用了一個枚舉類型表示的
Puker_num.java代碼如下:
/*
*此枚舉是表示牌
*的牌值的一個枚舉
* */
public enum Puker_num
{
p1,p2,p3,p4,p5,p6,p7,p8,p9,p0,pJ,pQ,pK,pX,pD;
}
這個枚舉主要表現牌的牌值的作用。
那么表示牌的花色我也是用了一個枚舉類型表示的
Puker_hushe.java代碼如下:
/*
*此枚舉是一個表示牌
*花色的枚舉
* */
public enum Puker_hushe {
黑桃,紅心,梅花,方塊,無;
}
在這里主要表示牌上的花色的一個作用。那么里有個“無”是表示大小王的時候用到的。
下面就來講一講出牌的規則算法的類吧,我在這里設計的是一個靜態類,里的成員方法和屬性也都是靜態,因為規則嗎,我想應該是不需要構造的,只要你出牌,你就使用。
可能Rule.java這個算法類的代碼會相對的多一點,我就不在這個地列出來了,朋友們可以下載我的源代碼。可以到我的個人站點上去下載或。
再設計算法的同時,我也設計了一個出牌類型的枚舉的類。這個類主要是表現所有可能出現出牌的類型情況。
PukerGroupLaiXin.java代碼如下:
*此枚舉是一個區分出的牌組
*和區分接收的牌組類型的作用
* */
public enum PukerGroupLaiXin
{
個子,對子,雙王炸彈,一飛機,一飛機帶翅膀,炸彈,五順子,六張順子,二飛機,三連對,炸彈帶二,
七張順子,八張順子,二飛機帶翅膀,四連對,九張順子,三飛機,十張順子,五連對,十一張順子,
十二順子,三飛機帶翅膀,六連對,四飛機,七連對,五飛機,四飛機帶翅膀,八連對,九連對,六飛機,
十連對,五飛機帶翅膀,發送無,接收無;
}
程序的設計就說到這了。然后謝謝大家的支持,我的QQ是:565345652,希望大家能夠給提一些意見。
下面說一說此程序的使用方法:
因為這是一個網絡版的斗地主游戲,我設計的是三個人玩的,所以要開三個程序,才能玩,我的服務器和客戶端都寫在了一起,所以不管是誰,都可以服務器的程序,但是三個程序當中只能有一個服務器端的程序,那么執行什么才是服務器的程序的:
樣例圖如下:
選擇“游戲管理” 》“創建游戲”就彈出一個界面如下:
可以輸入自己的真實明字或隨便的游戲名字,只要不為空就可以了,然后點擊創建游戲就可以了!就點擊主界面上的“準備”按鈕,然后就出現一個“開始”按鈕,然后服務器端的這個程序就等待客戶端的連接,只要有兩個客戶端連接上來,并且它們都點擊了“準備”按鈕之后,服務器端再點“開始”按鈕才會有效。
效果圖如下:
這時等待客戶端的連接。
那么怎樣創建客戶端程序呢!
樣例如下:
選擇“游戲管理” 》“加入游戲”就彈出一個界面如下:
輸入服務器端程序的IP地址,和自己的用戶名后點擊“連接”按鈕即可連接服務,如果連接上了會彈出一個對話框如下:
點擊確定之后:
點擊“準備”按鈕之后,等待服務器端的發牌。
當有兩個客戶端連接之后,并且它們都點擊了“準備”按鈕之后,服務器端就可以點擊“開始”按鈕發牌開始游戲了。這時服務器也會將地主選擇出來,此例當中選擇的第二個用戶為地主。
效果圖如下:
服務器端:
客戶端1:
客戶端2:
下面再來看一出牌的效果圖:
先從地主開始出牌:
Client1:
Client2:
Server:
其實在選擇要出的牌時,不光可以單擊一張牌,也可以用鼠標拖動來選擇牌。
游戲說明就說到這了,謝謝大家支持。由于時間原因在這里我可能沒有把網絡實現講一下,我可能會在以后有時間再寫出來,就發到網上去,希望大家支持。可能我的網絡這一方面寫的不是很優美,需要改進的地方可能會有很多。
總結
以上是生活随笔為你收集整理的java写的网络版斗地主_JAVA网络版斗地主游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下面安装maven
- 下一篇: php cpu缓存 执行 代码,缓存PH