在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
日期: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 } 1 package basic; 2 3 public enum ChessKind { 4 King, //将&帥 5 Scholar, //士&仕 6 Elephant, //象&相 7 House, //馬 8 Car, //車 9 Cannon, //砲(炮) 10 Army //卒&兵 11 } 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 |
请发表评论