• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

象棋小程序的基本框架——逻辑代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

日期:2019.5.8 

博客期:071

星期三

  我在这里只写出基本的象棋构建代码模型,即基本的DOC窗口实现程度的算法,还有,对不起,没有棋局记录等功能、没有其他的界面就是简单的逻辑结构!

  (这个其实也可以算是每周总结的一部分啦!)

 1 package basic;
 2 
 3 public class Chess {
 4     //所属
 5     /*true为红方,false为黑方*/
 6     protected boolean aim;
 7     //名称
 8     protected ChessKind name;
 9     //位置
10     protected TableSeat tableseat;
11     //基本方法
12     public boolean isAim() {
13         return aim;
14     }
15     public void setAim(boolean aim) {
16         this.aim = aim;
17     }
18     public ChessKind getName() {
19         return name;
20     }
21     public void setName(ChessKind name) {
22         this.name = name;
23     }
24     public TableSeat getTableseat() {
25         return tableseat;
26     }
27     public void setTableseat(TableSeat tableseat) {
28         this.tableseat = tableseat;
29     }
30     //构造
31     public Chess(boolean aim, ChessKind name, TableSeat tableseat) {
32         super();
33         this.aim = aim;
34         this.name = name;
35         this.tableseat = new TableSeat(tableseat);
36     }
37     //其他方法
38     /*改变所属方*/
39     public void changeAim(){
40         this.aim = !this.aim;
41     }
42     /*上下调换*/
43     public void changeUpAndDown(){
44         this.tableseat.y = 10-tableseat.y;
45     }
46     /*左右调换*/
47     public void changeLeftAndRight(){
48         this.tableseat.x = 11-tableseat.x;
49     }
50     public void display(){
51         System.out.println("X:"+tableseat.x+"\tY:"+tableseat.y+"\tK:"+(ChessTable.changeTo(name,aim))+"\tM:"+(aim?"红方":"黑方"));
52     }
53 }
Chess.java
 1 package basic;
 2 
 3 public enum ChessKind {
 4     King,        //将&帥
 5     Scholar,    //士&仕
 6     Elephant,    //象&相
 7     House,        //
 8     Car,        //
 9     Cannon,        //砲(炮)
10     Army        //卒&兵
11 }
ChessKind.java
  1 package basic;
  2 
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.util.ArrayList;
  6 import java.util.List;
  7 import java.util.Scanner;
  8 import static org.fusesource.jansi.Ansi.*;
  9 import static org.fusesource.jansi.Ansi.Color.*;
 10 
 11 @SuppressWarnings("unused")
 12 public class ChessTable {
 13     protected List<Chess> table;
 14     public static ChessKind changeTo(String read){
 15         if(read.compareTo("车")==0||read.compareTo("車")==0)
 16             return ChessKind.Car;
 17         else if(read.compareTo("兵")==0||read.compareTo("卒")==0)
 18             return ChessKind.Army;
 19         else if(read.compareTo("相")==0||read.compareTo("象")==0)
 20             return ChessKind.Elephant;
 21         else if(read.compareTo("仕")==0||read.compareTo("士")==0)
 22             return ChessKind.Scholar;
 23         else if(read.compareTo("炮")==0||read.compareTo("砲")==0)
 24             return ChessKind.Cannon;
 25         else if(read.compareTo("马")==0||read.compareTo("馬")==0)
 26             return ChessKind.House;
 27         else if(read.compareTo("帅")==0||read.compareTo("帥")==0||read.compareTo("将")==0)
 28             return ChessKind.King;
 29         else
 30             return null;
 31     }
 32     public static String changeTo(ChessKind read){
 33         return ChessTable.changeTo(read,true);
 34     }
 35     public static String changeTo(ChessKind read,boolean t){
 36         switch(read)
 37         {
 38             case King:return t?"帅":"将";
 39             case Army:return t?"兵":"卒";
 40             case Cannon:return t?"砲":"炮";
 41             case Scholar:return t?"仕":"士";
 42             case Car:return t?"車":"车";
 43             case Elephant:return t?"相":"象";
 44             case House:return t?"馬":"马";
 45             default:return null;
 46         }
 47     }
 48     public void Display(){
 49         System.out.print("\t");
 50         for(int i=1;i<=9;++i)
 51             System.out.print(i+"\t");
 52         System.out.println();
 53         for(int i=1;i<=10;++i)
 54         {
 55             System.out.print(i+"\t");
 56             for(int j=1;j<=9;++j)
 57             {
 58                 if(isLocated(i,j))
 59                 {
 60                     int size = table.size();
 61                     for(int k=0;k<size;++k)
 62                     {
 63                         if(table.get(k).tableseat.x==i&&table.get(k).tableseat.y==j)
 64                         {
 65                             //ansi().eraseScreen().render("@|red Hello|@ @|green World|@") 
 66                             //System.out.print(ChessTable.changeTo(table.get(k).name,table.get(k).aim)+"\t");
 67                             if(!table.get(k).aim)
 68                                 System.out.print(ChessTable.changeTo(table.get(k).name,table.get(k).aim));
 69                             else
 70                                 System.out.print(ChessTable.changeTo(table.get(k).name,table.get(k).aim));
 71                         }
 72                     }    
 73                 }
 74                 System.out.printf("\t");
 75             }
 76             System.out.println();
 77             try {
 78                 Thread.sleep(20);
 79             } catch (InterruptedException e) {
 80                 // Do Nothing ...
 81             }
 82         }
 83     }
 84     public void display(){
 85         int size = table.size();
 86         for(int i=0;i<size;++i)
 87             table.get(i).display();
 88     }
 89     public List <Chess> getTable() {
 90         return table;
 91     }
 92     public void setTable(List<Chess> table) {
 93         this.table = table;
 94     }
 95     public void reset(){
 96         File f = new File("settings/reset.txt");
 97         try {
 98             Scanner sc = new Scanner(f);
 99             while(sc.hasNext())
100             {
101                 TableSeat ts = new TableSeat();
102                 ts.x = sc.nextInt();
103                 ts.y = sc.nextInt();
104                 String str_chessKind = sc.next();
105                 ChessKind chesskind = ChessTable.changeTo(str_chessKind);
106                 boolean choice = sc.nextBoolean();
107                 Chess c = new Chess(choice,chesskind,ts);
108                 table.add(c);
109             }
110             sc.close();
111         } catch (FileNotFoundException e) {
112             System.out.println("爷爷!您的文件读取有问题!FileNotFoundException");
113         }
114     }
115     public ChessTable() {
116         super();
117         this.table = new ArrayList<Chess>();
118         reset();
119     }
120     public ChessTable(ChessTable ct) {
121         super();
122         this.table = new ArrayList<Chess>(ct.table);
123         reset();
124     }
125     public ChessTable(List<Chess> table) {
126         super();
127         this.table = new ArrayList<Chess>(table);
128     }
129     public boolean isLocated(int X,int Y){
130         int size = table.size();
131         for(int i=0;i<size;++i)
132         {
133             TableSeat ts = table.get(i).tableseat;
134             if(ts.x==X&&ts.y==Y)
135                 return true;
136         }
137         return false;
138     }
139     public boolean isLocated(int X,int Y,boolean isAim){
140         int size = table.size();
141         for(int i=0;i<size;++i)
142         {
143             Chess c = table.get(i);
144             if(c.tableseat.x==X&&c.tableseat.y==Y&&(c.aim==isAim))
145                 return true;
146         }
147         return false;
148     }
149     public void Delete(int x,int y){
150         int size = table.size();
151         for(int i=0;i<size;++i)
152         {
153             Chess c = table.get(i);
154             if(c.tableseat.x==x&&c.tableseat.y==y)
155             {
156                 table.remove(i);
157                 break;
158             }
159         }
160     }
161     /*运行*/
162     public void Runable(int seat,int x,int y){
163         
164         Chess ch = table.get(seat);
165         if(ch.tableseat.x==x&&ch.tableseat.y==y)
166             return;
167         if(x<1||x>10||y<1||y>10)
168             return;
169         if(ch.name==ChessKind.King)//将帅
170         {
171             if(ch.aim&&(y<8||x<4||x>6))
172                 return;
173             else if(!ch.aim&&(y>3||x<4||x>6))
174                 return;
175             if(ch.tableseat.x==x)
176             {
177                 if(ch.tableseat.y==y-1||ch.tableseat.y==y+1)
178                 {
179                     if(isLocated(x,y,ch.aim))
180                         return;
181                     else
182                     {
183                         if(isLocated(x,y,!ch.aim))
184                             Delete(x,y);
185                         ch.tableseat.x = x;
186                         ch.tableseat.y = y;
187                     }
188                 }
189                 else
190                     return;
191             }
192             else if(ch.tableseat.y==y)
193             {
194                 if(ch.tableseat.x==x-1||ch.tableseat.x==x+1)
195                 {
196                     if(isLocated(x,y,ch.aim))
197                         return;
198                     else
199                     {
200                         if(isLocated(x,y,!ch.aim))
201                             Delete(x,y);
202                         ch.tableseat.x = x;
203                         ch.tableseat.y = y;
204                     }
205                 }
206                 else
207                     return;
208             }
209             table.set(seat, ch);
210         }
211         else if(ch.name==ChessKind.Army)//兵卒
212         {
213             int s2_x = (ch.tableseat.x-x)*(ch.tableseat.x-x);
214             int s2_y = (ch.tableseat.y-y)*(ch.tableseat.y-y);
215             if(s2_x+s2_y!=1)
216                 return;
217             if(ch.aim)
218             {
219                 if(ch.tableseat.x-x==-1)
220                     return;
221                 if(ch.tableseat.x-x==0&&(y>5))
222                     return;
223             }
224             else
225             {
226                 if(ch.tableseat.x-x==1)
227                     return;
228                 if(ch.tableseat.x-x==0&&(y<6))
229                     return;
230             }
231             if(isLocated(x,y,ch.aim))
232                 return;
233             else
234             {
235                 if(isLocated(x,y,!ch.aim))
236                     Delete(x,y);
237                 ch.tableseat.x = x;
238                 ch.tableseat.y = y;
239             }
240             table.set(seat, ch);
241         }
242         else if(ch.name==ChessKind.Cannon)//
243         {
244             //去除在同一行、同一列的情况
245             if(ch.tableseat.x-x!=0&&ch.tableseat.y-y!=0)
246                 return;
247             //移动到的点是自方阵营
248             if(isLocated(x,y,ch.aim))
249                 return;
250             //p表示移动到的位置和原位置之间的棋数
251             int p = 0;
252             if(ch.tableseat.x-x==0)
253             {
254                 if(ch.tableseat.y>y)
255                 {
256                     for(int i=y+1;i<ch.tableseat.y;++i)
257                     {
258                         //如果有棋子
259                         if(isLocated(x,i))
260                             ++p;
261                         if(p==2)
262                             return;
263                     }
264                 }
265                 else
266                 {
267                     for(int i=y-1;i>ch.tableseat.y;--i)
268                     {
269                         //如果有棋子
270                         if(isLocated(x,i))
271                             ++p;
272                         if(p==2)
273                             return;
274                     }
275                 }
276             }
277             else
278             {
279                 if(ch.tableseat.x>x)
280                 {
281                     for(int i=x+1;i<ch.tableseat.x;++i)
282                     {
283                         //如果有棋子
284                         if(isLocated(i,y))
285                             ++p;
286                         if(p==2)
287                             return;
288                     }
289                 }
290                 else
291                 {
292                     for(int i=x-1;i>ch.tableseat.x;--i)
293                     {
294                         //如果有棋子
295                         if(isLocated(i,y))
296                             ++p;
297                         if(p==2)
298                             return;
299                     }
300                 }
301             }
302             if(isLocated(x,y)&&p==0)
303                 return;
304             else
305             {
306                 Delete(x,y);
307                 ch.tableseat.x = x;
308                 ch.tableseat.y = y;
309             }
310         }
311         else if(ch.name==ChessKind.Car)//
312         {
313             if(ch.tableseat.x-x!=0&&ch.tableseat.y-y!=0)
314                 return;
315             if(ch.tableseat.x-x==0)
316             {
317                 if(ch.tableseat.y>y)
318                 {
319                     for(int i=y+1;i<ch.tableseat.y;++i)
320                         if(isLocated(x,i))
321                             return;
322                 }
323                 else
324                 {
325
                      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]wxParse-微信小程序富文本解析组件发布时间:2022-07-18
下一篇:
微信小程序animation有趣的自定义动画发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap