Chinese Chess:just begin...

Chinese Chess:just begin...
  1  # -*- coding:utf-8 -*-
  2  #            N:0
  3  #       NW:1     EN:7
  4  #    W:2             E:6
  5  #       WS:3     SE:5         
  6  #            S:4
  7  #  x\y
  8  #    00 -01-02-03-04-05-06-07-08 R=True Red
  9  #     |  |  |  | \ |/ |  |  |  |
 10  #    10 -11-12-13-14-15-16-17-18
 11  #     |  |  |  | / |\ |  |  |  |
 12  #    20 -21-22-23-24-25-26-27-28
 13  #     |  |  |  |   |  |  |  |  |
 14  #    30 -31-32-33-34-35-36-37-38
 15  #     |  |  |  |   |  |  |  |  |
 16  #    40 -41-42-43-44-45-46-47-48
 17  #     |                        |
 18  #    50 -51-52-53-54-55-56-57-58
 19  #     |  |  |  |   |  |  |  |  |  
 20  #    60 -61-62-63-64-65-66-67-68
 21  #     |  |  |  |   |  |  |  |  |
 22  #    70 -71-71-73-74-75-76-77-78
 23  #     |  |  |  | \ |/ |  |  |  |
 24  #    80 -81-82-83-84-85-86-87-88
 25  #     |  |  |  | / |\ |  |  |  |
 26  #    90 -91-92-93-94-95-96-97-98 R=False Black
 27  diction = {}
 28  class  Chess:
 29       def   __init__ (self,x,y):
 30          self.pos = Pos(x,y)
 31          self.get_direct()
 32       def  can_move_to(self,pos):
 33           return  False;
 34       def  get_direct(self):
 35          self.direct = []
 36 
 37  class  Bin(Chess):
 38       def   __init__ (self,x,y,R = True):
 39          self.r  =  R
 40          Chess. __init__ (self,x,y)
 41       def  get_direct(self):
 42           if  self.r: #  up side
 43               if  self.pos.x  <   5 :
 44                  self.direct  =  [ 4 ]
 45               elif  self.pos.x < 9   and  self.pos.x >= 5 :
 46                   if  self.pos.y == 0:   
 47                      self.direct  =  [ 4 , 6 ]
 48                   elif  self.pos.y == 8 :
 49                      self.direct  =  [ 2 , 4 ]
 50                   else :
 51                      self.direct  =  [ 2 , 4 , 6 ]
 52               else :
 53                   if  self.pos.y == 0:   
 54                      self.direct  =  [ 6 ]
 55                   elif  self.pos.y == 8 :
 56                      self.direct  =  [ 2 ]
 57           else #  down side
 58               if  self.pos.x  >   4 :
 59                  self.direct  =  [0]
 60               elif  self.pos.x > and  self.pos.x <= 4 #   0 < x < =4
 61                   if  self.pos.y == 0:   
 62                      self.direct  =  [0, 6 ]
 63                   elif  self.pos.y == 8 :
 64                      self.direct  =  [0, 2 ]
 65                   else :
 66                      self.direct  =  [0, 2 , 6 ]
 67               else :
 68                   if  self.pos.y == 0:   
 69                      self.direct  =  [ 6 ]
 70                   elif  self.pos.y == 8 :
 71                      self.direct  =  [ 2 ]
 72       def  can_move_to(self,pos):
 73           #  move in H 横移
 74           if  pos.x == self.pos.x:
 75               if  pos.y == self.pos.y + 1   and  ( 6   in  self.direct):
 76                   return  True
 77               elif  pos.y == self.pos.y - 1   and  ( 2   in  self.direct):
 78                   return  True
 79           #  move in V 纵移
 80           if  pos.y == self.pos.y:
 81               if  pos.x == self.pos.x + 1   and  self.r  and  ( 4   in  self.direct):
 82                   return  True
 83               if  pos.x == self.pos.x - 1   and   not  self.r  and  (0  in  self.direct):
 84                   return  True
 85           return  False
 86 
 87  class  Shi(Chess):
 88       def   __init__ (self,x,y,R = True):
 89          Chess. __init__ (self,x,y)
 90          self.r  =  R
 91       def  get_direct(self):
 92           if  self.pos.x == 0:
 93               if  self.pos.y == 3 :
 94                  self.direct = [ 5 ]
 95               else :
 96                  self.direct = [ 3 ]
 97           elif  self.pos.x == 2 :
 98               if  self.pos.y == 3 :
 99                  self.direct = [ 7 ]
100               else :
101                  self.direct = [ 1 ]
102           else :
103              self.direct = [ 1 , 3 , 5 , 7 ]
104      
105       def  can_move_to(self,pos):
106           if  pos.x == self.pos.x - 1   and  pos.y == self.pos.y + 1 :
107               if   7   in  self.direct:
108                   return  True
109           if  pos.x == self.pos.x + 1   and  pos.y == self.pos.y + 1 :
110               if   5   in  self.direct:
111                   return  True
112           if  pos.x == self.pos.x + 1   and  pos.y == self.pos.y - 1 :
113               if   3   in  self.direct:
114                   return  True
115           if  pos.x == self.pos.x - 1   and  pos.y == self.pos.y - 1 :
116               if   1   in  self.direct:
117                   return  True
118           return  False
119 
120  class  Xiang(Chess):
121       def   __init__ (self,x,y,R = True):
122          Chess. __init__ (self,x,y)
123          self.r  =  R
124       def  get_direct(self):
125           if  self.pos.x == 0:
126              self.direct = [ 3 , 5 ]
127           elif  self.pos.x == 4 :
128              self.direct = [ 1 , 7 ]
129           elif  self.pos.y == 0:
130              self.direct = [ 5 , 7 ]
131           else :
132              self.direct = [ 1 , 3 ]
133       def  can_move_to(self,pos):
134           if  pos.x == self.pos.x - 2   and  pos.y == self.pos.y + 2 :
135               if   7   in  self.direct:
136                   return  True
137           if  pos.x == self.pos.x + 2   and  pos.y == self.pos.y + 2 :
138               if   5   in  self.direct:
139                   return  True
140           if  pos.x == self.pos.x + 2   and  pos.y == self.pos.y - 2 :
141               if   3   in  self.direct:
142                   return  True
143           if  pos.x == self.pos.x - 2   and  pos.y == self.pos.y - 2 :
144               if   1   in  self.direct:
145                   return  True
146           return  False
147      
148  class  Pao(Chess):
149       def   __init__ (self,x,y,R = True):
150          Chess. __init__ (self,x,y)
151          self.r  =  R
152       def  get_direct(self):
153           if  self.pos.x == 0:
154               if  self.pos.y == 0:
155                  self.direct = [ 4 , 6 ]
156               elif  self.pos.y == 8 :
157                  self.direct = [ 2 , 4 ]
158               else :
159                  self.direct = [ 2 , 4 , 6 ]
160           elif  self.pos.x == 9 :
161               if  self.pos.y == 0:
162                  self.direct = [0, 6 ]
163               elif  self.pos.y == 8 :
164                  self.direct = [0, 2 ]
165               else :
166                  self.direct = [0, 2 , 6 ]
167           else :
168              self.direct = [0, 2 , 4 , 6 ]
169 
170  class  Ma(Chess):
171       def   __init__ (self,x,y,R = True):
172          Chess. __init__ (self,x,y)
173          self.r  =  R
174       def  get_direct(self):
175           if  self.pos.x == 0:
176               if  self.pos.y == 0:
177                  self.direct = [ 5 ]
178               elif  self.pos.y == 8 :
179                  self.direct = [ 3 ]
180               else :
181                  self.direct = [ 3 , 5 ]
182           elif  self.pos.x == 9 :
183               if  self.pos.y == 0:
184                  self.direct = [ 7 ]
185               elif  self.pos.y == 8 :
186                  self.direct = [ 1 ]
187               else :
188                  self.direct = [ 1 , 7 ]
189       def  can_move_to(self,pos):
190           if  pos.x == self.pos.x - 2   and   not  diction.has_key( (self.pos.x - 1 ,self.pos.y) ):
191               if  pos.y == self.pos.y + 1   and   7   in  self.direct:
192                   return  True
193               if  pos.y == self.pos.y - 1   and   1   in  self.direct:
194                   return  True
195           if  pos.x == self.pos.x + 2   and   not  diction.has_key( (self.pos.x + 1 ,self.pos.y) ):
196               if  pos.y == self.pos.y + 1   and   5   in  self.direct:
197                   return  True
198               if  pos.y == self.pos.y - 1   and   3   in  self.direct:
199                   return  True
200           if  pos.y == self.pos.y - 2   and   not  diction.has_key( (self.pos.x,self.pos.y - 1 ) ):
201               if  pos.x == self.pos.x + 1   and   3   in  self.direct:
202                   return  True
203               if  pos.x == self.pos.x - 1   and   1   in  self.direct:
204                   return  True
205           if  pos.y == self.pos.y + 2   and   not  diction.has_key( (self.pos.x,self.pos.y + 1 ) ):
206               if  pos.x == self.pos.x + 1   and   5   in  self.direct:
207                   return  True
208               if  pos.x == self.pos.x - 1   and   7   in  self.direct:
209                   return  True
210           return  False
211  class  Ju(Chess):
212       def   __init__ (self,x,y,R = True):
213          Chess. __init__ (self,x,y)
214          self.r  =  R
215       def  get_direct(self):
216           if  self.pos.x == 0:
217               if  self.pos.y == 0:
218                  self.direct = [ 4 , 6 ]
219               elif  self.pos.y == 8 :
220                  self.direct = [ 2 , 4 ]
221               else :
222                  self.direct = [ 2 , 4 , 6 ]
223           elif  self.pos.x == 9 :
224               if  self.pos.y == 0:
225                  self.direct = [0, 6 ]
226               elif  self.pos.y == 8 :
227                  self.direct = [0, 2 ]
228               else :
229                  self.direct = [0, 2 , 6 ]
230           else :
231              self.direct = [0, 2 , 4 , 6 ]
232       def  can_move_to(self,pos):
233           #  move in H 横移
234           if  pos.x == self.pos.x:
235               if  pos.y > self.pos.y  and  ( 6   in  self.direct):
236                   return  True
237               elif  pos.y < self.pos.y  and  ( 2   in  self.direct):
238                   return  True
239           #  move in V 纵移
240           if  pos.y == self.pos.y:
241               if  pos.x > self.pos.x  and  ( 4   in  self.direct):
242                   return  True
243           return  False
244      
245  class  King(Chess):
246       def   __init__ (self,x,y,R = True):
247          Chess. __init__ (self,x,y)
248          self.r  =  R
249       def  get_direct():
250           if  self.pos.x == 0:
251               if  self.pos.y == 3 :
252                  self.direct = [ 4 , 6 ]
253               elif  self.pos.y == 5 :
254                  self.direct = [ 2 , 4 ]
255               else :
256                  self.direct = [ 2 , 4 , 6 ]
257           elif  self.pos.x == 2 :
258               if  self.pos.y == 3 :
259                  self.direct = [0, 6 ]
260               elif  self.pos.y == 5 :
261                  self.direct = [0, 2 ]
262               else :
263                  self.direct = [0, 2 , 6 ]
264           elif  self.pos.x == 1 :
265               if  self.pos.y == 3 :
266                  self.direct = [0, 4 , 6 ]
267               elif  self.pos.y == 5 :
268                  self.direct = [0, 2 , 4 ]
269               else :
270                  self.direct = [0, 2 , 4 , 6 ]
271      
272  class  Pos:
273       def   __init__ (self,x,y):
274          self.x  =  x
275          self.y  =  y
276       def  trans():
277          self.x  =   9 - self.x
278          self.y  =   8 - self.y
279  if   __name__ == ' __main__ ' :
280      ma = Bin( 5 , 3 )
281       for  i  in  ma.direct:
282           print  i
283       print  ma.can_move_to(Pos( 5 , 1 ))
Just begin ...

你可能感兴趣的:(Chinese Chess:just begin...)