最近在做斗地主扑克游戏的一些代码和思路

本文介绍了一款斗地主扑克游戏的界面布局代码实现细节。代码主要负责游戏牌面的显示与更新,包括玩家手牌的左右侧布局及出牌区域的牌面展示。通过对牌面实例的有效复用,提高了游戏的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做斗地主扑克游戏的一些代码和思路

 

扑克游戏共54张牌,因此只创建了54个牌的实例,并且这些实例在整个应用中只创建一次,以节省内存,

背面牌创建了17*2个普通背面牌实例,17个地主背牌实例,17*2个农民背牌实例

因为会频繁的出牌,删牌

 

ContractedBlock.gif ExpandedBlockStart.gif 代码

    
1 /* *
2 * set方法仅刷新位置
3 *
4 */
5 public function setPaiLeft(rivalUser:IUserModel,rivalChair:IChairModel): void
6 {
7 // loop use
8   var i: int = 0 ;
9 var numChild: int = ( this .board.mc_pailist_v_left.mc_container as MovieClip).numChildren;
10
11 // clear
12   for (i = 0 ;i < numChild;i ++ )
13 {
14 ( this .board.mc_pailist_v_left.mc_container as MovieClip).removeChildAt( 0 );
15 }
16
17 // 棋子
18   var arr:Array = GameGlobals.qpc.data.activeRoom.getItemList();
19
20 this .paiRule.sort(arr,rivalChair.getId());
21
22 var len: int = GameGlobals.qpc.data.activeRoom.getItemList().length;
23
24 for (i = 0 ;i < len;i ++ )
25 {
26 h = rivalChair.getId() - 1 ;
27
28 if (h == (arr[i] as ItemModelByDdz).h) // 这是你的牌
29 {
30 var paiMc:MovieClip;
31
32 if (PokerName.BG_NORMAL == (arr[i] as ItemModelByDdz).name)
33 {
34 paiMc = this .bgPaiList_normal[ (arr[i] as ItemModelByDdz).v ] as MovieClip;
35
36 } else if (PokerName.BG_DIZHU == (arr[i] as ItemModelByDdz).name)
37 {
38 paiMc = this .bgPaiList_diZhu[ (arr[i] as ItemModelByDdz).v ] as MovieClip;
39
40 } else if (PokerName.BG_NONGMING == (arr[i] as ItemModelByDdz).name)
41 {
42 paiMc = this .bgPaiList_nongMing[ (arr[i] as ItemModelByDdz).v ] as MovieClip;
43
44 } else
45 {
46 // 明牌
47 paiMc = this .paiRule.getFrontPaiMcByName((arr[i] as ItemModelByDdz).name);
48
49 }
50
51 //
52 paiMc.y = (arr[i] as ItemModelByDdz).v * PaiLayout.LIST_V_PADDING;
53
54 ( this .board.mc_pailist_v_left.mc_container as MovieClip).addChild(paiMc);
55
56 } // end if
57 } // end for
58
59
60 }
61
62 public function setPaiRight(rivalUser:IUserModel,rivalChair:IChairModel): void
63 {
64 // loop use
65 var i: int = 0 ;
66 var numChild: int = ( this .board.mc_pailist_v_right.mc_container as MovieClip).numChildren;
67
68 // clear
69 for (i = 0 ;i < numChild;i ++ )
70 {
71 ( this .board.mc_pailist_v_right.mc_container as MovieClip).removeChildAt( 0 );
72 }
73
74 // 棋子
75 var arr:Array = GameGlobals.qpc.data.activeRoom.getItemList();
76
77 this .paiRule.sort(arr,rivalChair.getId());
78
79 var len: int = GameGlobals.qpc.data.activeRoom.getItemList().length;
80
81 for (var i: int = 0 ;i < len;i ++ )
82 {
83 var cId: int = rivalChair.getId() - 1 ;
84
85 if (cId == (arr[i] as ItemModelByDdz).h) // 这是你的牌
86 {
87 var paiMc:MovieClip;
88
89 if (PokerName.BG_NORMAL == (arr[i] as ItemModelByDdz).name)
90 {
91 paiMc = this .bgPaiList_normal[ (arr[i] as ItemModelByDdz).v + 17 ] as MovieClip;
92
93 } else if (PokerName.BG_DIZHU == (arr[i] as ItemModelByDdz).name)
94 {
95 paiMc = this .bgPaiList_diZhu[ (arr[i] as ItemModelByDdz).v ] as MovieClip; // 地主只有一家
96
97 } else if (PokerName.BG_NONGMING == (arr[i] as ItemModelByDdz).name)
98 {
99 paiMc = this .bgPaiList_nongMing[ (arr[i] as ItemModelByDdz).v + 17 ] as MovieClip;
100 } else
101 {
102 // 明牌
103 paiMc = this .paiRule.getFrontPaiMcByName((arr[i] as ItemModelByDdz).name);
104 }
105
106 //
107 paiMc.y = (arr[i] as ItemModelByDdz).v * PaiLayout.LIST_V_PADDING;
108
109 ( this .board.mc_pailist_v_right.mc_container as MovieClip).addChild(paiMc);
110
111 } // end if
112 } // end for
113
114
115 }
116
117 public function addPaiRight(rivalUser:IUserModel,rivalChair:IChairModel,curInd: int = - 1 ): void
118 {
119 // 棋子
120 var arr:Array = GameGlobals.qpc.data.activeRoom.getItemList();
121
122 this .paiRule.sort(arr,rivalChair.getId());
123
124 var len: int = GameGlobals.qpc.data.activeRoom.getItemList().length;
125
126
127
128 }
129
130 /* *
131 * 出牌显示
132 */
133 public function setPaiDown2(value:Array): void
134 {
135 // loop use
136 var i: int = 0 ;
137 var len: int = value.length;
138
139 for (i = 0 ;i < len;i ++ )
140 {
141 //
142 // x
143
144 ( this .board.mc_pailist_h_down2.mc_container as MovieClip).addChild((value[i] as MovieClip));
145
146 }
147
148 }
149
150 // addEvt:Boolean=true
151 public function setPaiDown(): void
152 {
153 // loop use
154 var i: int = 0 ;
155 var numChild: int = ( this .board.mc_pailist_h_down.mc_container as MovieClip).numChildren;
156
157 // clear
158 for (i = 0 ;i < numChild;i ++ )
159 {
160 var dobj:DisplayObject = ( this .board.mc_pailist_h_down.mc_container as MovieClip).removeChildAt( 0 );
161
162 if (
163 (dobj as MovieClip).hasEventListener(MouseEvent.CLICK)
164 )
165 {
166 (dobj as MovieClip).removeEventListener(MouseEvent.CLICK,paiMcClick);
167 }
168
169 }
170
171 // add
172 var hero:IUserModel = GameGlobals.qpc.data.activeRoom.findHero(GameGlobals.qpc.data.hero);
173 var chair:IChairModel = GameGlobals.qpc.data.activeRoom.getChair(hero);
174
175 // 棋子
176 var arr:Array = GameGlobals.qpc.data.activeRoom.getItemList();
177
178 this .paiRule.sort(arr,chair.getId());
179
180 var len: int = GameGlobals.qpc.data.activeRoom.getItemList().length;
181
182 for (i = 0 ;i < len;i ++ )
183 {
184 var cId: int = chair.getId() - 1 ;
185
186 if (cId == (arr[i] as ItemModelByDdz).h) // 这是你的牌
187 {
188 var paiMc:MovieClip;
189
190 // 自已的牌不会是背面牌
191 // 因此这里去掉背面牌的逻辑
192 // 获取正面牌的MC
193 // 参数value 为 牌的名称
194 //
195 paiMc = this .paiRule.getFrontPaiMcByName((arr[i] as ItemModelByDdz).name);
196
197 // 间隔为横向20
198 paiMc.x = (arr[i] as ItemModelByDdz).v * 20 ;
199
200 // 事件侦听
201 paiMc.addEventListener(MouseEvent.CLICK,paiMcClick);
202
203 ( this .board.mc_pailist_h_down.mc_container as MovieClip).addChild(paiMc);
204
205 } // end if
206 } // end for
207
208 }
209
210 // clear
211 for (i = 0 ;i < numChild;i ++ )
212 {
213 var paiMc:MovieClip = ( this .board.mc_pailist_h_down.mc_container as MovieClip).getChildAt(i) as MovieClip;
214
215 if ( 0 == paiMc.y)
216 {
217
218 } else
219 {
220 // paiMc.y = 0; // 出牌后再设
221
222 var dj:MovieClip = ( this .board.mc_pailist_h_down.mc_container as MovieClip).removeChildAt(i);
223
224 value.push(paiMc);
225
226 // restore
227 i =- 1 ;
228 numChild = ( this .board.mc_pailist_h_down.mc_container as MovieClip).numChildren;
229 }
230
231 }

 

posted on 2011-01-16 20:54 jiahuafu 阅读(...) 评论(...) 编辑 收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银狐游戏开发资源2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值