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

简介: 扑克游戏共54张牌,因此只创建了54个牌的实例,并且这些实例在整个应用中只创建一次,以节省内存, 背面牌创建了17*2个普通背面牌实例,17个地主背牌实例,17*2个农民背牌实例 因为会频繁的出牌,删牌   代码 1 /** 2 * set方法...

 

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

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

因为会频繁的出牌,删牌

 

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.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 }

 

相关文章
|
6月前
|
算法 Java
【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】
【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】
|
7月前
|
Python
python实现一个简单的消消乐游戏
实现一个简单的消消乐游戏可以是一个有趣的编程项目。下面是一个使用Python和Pygame库来创建消消乐游戏的基本步骤
387 0
|
6月前
|
定位技术 开发工具 Python
python实现超级玛丽游戏
Pygame是一个Python模块,旨在使编写视频游戏等多媒体应用程序变得更加轻松。它提供了一个用于处理音频、图像和鼠标/键盘输入等方面的工具集。Pygame也提供了一些预先编写好的模块,如Sprites(用于管理游戏中的对象)和Pygame.display(用于创建和管理窗口)。 Pygame基于SDL库(Simple DirectMedia Layer),它是一个跨平台的开源的低级多媒体库,用于对音频、键盘、鼠标、图形硬件以及低级的操作系统特性进行访问。 当使用Pygame时,你能够创建游戏窗口、读取键盘输入、播放音频、处理碰撞以及执行游戏逻辑。这些功能使Pygame称为一个适用于初学
609 19
python实现超级玛丽游戏
|
8月前
|
存储 人工智能 Python
Python实现坦克大战(TankWar)游戏(上)
Python实现坦克大战(TankWar)游戏
138 0
|
8月前
|
设计模式 测试技术 Python
Python实现坦克大战(TankWar)游戏(下)
Python实现坦克大战(TankWar)游戏
117 0
|
10月前
|
Python
Python实现猜拳游戏
Python实现猜拳游戏
149 0
|
11月前
|
数据挖掘 开发者
关于泡泡龙游戏的一点儿总结,以及分享一个好方法
游戏是一种虚拟的产品,它很难被量化,也很难像工厂流水线生产实体产品一样的去生产。因为其中涉及到的情况太多太杂,如何衡量一个游戏的体量?怎样的游戏算是大游戏,怎样的游戏算是小游戏呢?如何判断一个游戏是做完了还是没有做完呢?如何衡量一个游戏开发者的水平呢?……等等等等。这里面的每一个因素都是一个变量,这么多的无法确定的变量合在一起,想要得到一个确定的结果,很显然是不太可能的。
105 0
|
11月前
|
Python
Python实现超级玛丽游戏系列教程03玛丽跳跃
Python实现超级玛丽游戏系列教程03玛丽跳跃
123 0
Python实现超级玛丽游戏系列教程03玛丽跳跃
|
11月前
|
Python
Python实现超级玛丽游戏系列教程02玛丽走跑
Python实现超级玛丽游戏系列教程02玛丽走跑
71 0
|
11月前
|
Python
Python实现超级玛丽游戏系列教程01玛丽登场
Python实现超级玛丽游戏系列教程01玛丽登场
95 0