java中国象棋棋盘放置棋子,JAVA简易文字版中国象棋
大二时制作的JAVA简易文字版中国象棋,现在放出,希望大家喜欢!
// Java core packages
import java.awt.*;
import java.awt.event.*;
// Java extension packages
import javax.swing.*;
public class Chess extends JApplet implements ActionListener
{
//构成用户图形界面
JLabel Gamename,Hint,askYou;
JTextField inputField;
JTextArea outputArea;
JLabel timer;
//创建一个字符数组来描绘出棋盘
String board[][]=new String[11][10];
//创建棋盘装饰性的常量
String titleup="黑方";
String titledown="红方";
String han="汉界";
String chu="楚河";
//创建字符数组存储棋子
String chess[][]=new String[2][7];
//初始化状态栏中的注释信息
String comment="";
//建立静态变量,一次性画出棋盘
String outputB=outputBoard();
//开始构建GUI成分
public void init()
{
//构建container容器并更改其显示样式为FlowLayout
Container container=getContentPane();
container.setLayout(new FlowLayout());
//创建操作提示及用户操作框
Hint=new JLabel("请输入棋子操作:x,y-x,y");
container.add(Hint);
askYou=new JLabel("轮到红色");
container.add(askYou);
inputField=new JTextField(10);
inputField.addActionListener(this);
container.add(inputField);
//创建一个用来显示和储存回合数的Label
timer=new JLabel("1");
container.add(timer);
//绘制输出区域来响应每一步动作
outputArea=new JTextArea();
outputArea.setText(outputB);//显示初始化棋盘
outputArea.setEditable(false);//输出的内容不能被改写,很重要
outputArea.setFont(new java.awt.Font("Dialog", 0, 22));
container.add(outputArea);
Gamename=new JLabel("中国象棋文字简易版 Ver0.3 Powered By 05141 曹硕");
container.add(Gamename);
}
//设置操作事件
public void actionPerformed(ActionEvent actionEvent)
{
//获得输入的指令
String input=inputField.getText();
//初始化棋盘变量
String output="";
//获得当前的棋盘
String screen=outputArea.getText();
char a[]=input.toCharArray();//将字符串拆分为字符
int range=outofRange(a);//解析指令是否有效,并符合游戏规则
int time=Integer.parseInt(timer.getText());//获得现在的回合数
if (range==0)//out of range
{
comment="您的操作不符合规则,请重新操作.";
showStatus(comment);
}
else//in the board
{
int s1=10-(a[2]-48);
int s2=10-(a[0]-48);
int s3=10-(a[6]-48);
int s4=10-(a[4]-48);
int t=0;
int judge;
if (time%2!=0)//轮到红色玩家
{
//检测是否吃掉自己
judge=cannotEat(s3,s4,time);
if (judge==1)
{
for (t=0;t<=6;t++)
{
//扫描用户选择的棋子
if (board[s1][s2]==chess[0][t])
{
break;
}
}
switch (t)//决定如何移动当前的棋子
{
case 0:
{
output=chariot(s1,s2,s3,s4);
break;
}
case 1:
{
output=knight(s1,s2,s3,s4);
break;
}
case 2:
{
output=minister(s1,s2,s3,s4);
break;
}
case 3:
{
output=server(s1,s2,s3,s4);
break;
}
case 4:
{
output=king(s1,s2,s3,s4);
break;
}
case 5:
{
output=canon(s1,s2,s3,s4);
break;
}
case 6:
{
output=soldier(s1,s2,s3,s4,time);
break;
}
}
}
}
if (time%2==0)//轮到黑色玩家
{
judge=cannotEat(s3,s4,time);
if (judge==1)
{
for (t=0;t<=6;t++)
{
if (board[s1][s2]==chess[1][t])
{
break;
}
}
switch (t)
{
case 0:
{
output=chariot(s1,s2,s3,s4);
break;
}
case 1:
{
output=knight(s1,s2,s3,s4);
break;
}
case 2:
{
output=minister(s1,s2,s3,s4);
break;
}
case 3:
{
output=server(s1,s2,s3,s4);
break;
}
case 4:
{
output=king(s1,s2,s3,s4);
break;
}
case 5:
{
output=canon(s1,s2,s3,s4);
break;
}
case 6:
{
output=soldier(s1,s2,s3,s4,time);
break;
}
}
}
}
if (output=="")//输入错误
{
comment="您的操作不符合规则,请重新操作.";
showStatus(comment);
outputArea.setText(screen);
}
if (output!="")
{
int life=win();//检测游戏是否已经结束
if (life==2)//继续游戏
{
time++;
timer.setText(Integer.toString(time));
outputArea.setText(output);
inputField.setText("");
if (time%2==0)
askYou.setText("轮到黑色");
if (time%2!=0)
askYou.setText("轮到红色");
}
if (life==1)//其中一方胜利
{
outputArea.setText(output);
inputField.setText("");
inputField.setEditable(false);
if (time%2==1)
askYou.setText("红色玩家胜利!");
else
askYou.setText("黑色玩家胜利!");
}
}
}
}
//创建棋盘棋子
String outputBoard()
{
//在数组[0][0]-[1][6]放置双方棋子
chess[0][0]="?";
chess[0][1]="?";
chess[0][2]="?";
chess[0][3]="?";//红方“士”
chess[0][4]="?";//红方“帅”
chess[0][5]="?";//红方“炮”
chess[0][6]="?";//红方“兵”
chess[1][0]="車";
chess[1][1]="馬";
chess[1][2]="象";
chess[1][3]="仕";
chess[1][4]="将";
chess[1][5]="砲";
chess[1][6]="卒";
//将初始化棋子放入11*10数组中
board[0][0]=" ";
board[0][1]="9";
board[0][2]="8";
board[0][3]="7";
board[0][4]="6";
board[0][5]="5";
board[0][6]="4";
board[0][7]="3";
board[0][8]="2";
board[0][9]="1";
board[1][0]=" 9 ";
board[2][0]=" 8 ";
board[3][0]=" 7 ";
board[4][0]=" 6 ";
board[5][0]=" 5 ";
board[6][0]=" 4 ";
board[7][0]=" 3 ";
board[8][0]=" 2 ";
board[9][0]=" 1 ";
board[10][0]=" 0 ";
board[1][1]="車";
board[1][2]="馬";
board[1][3]="象";
board[1][4]="仕";
board[1][5]="将";
board[1][6]="仕";
board[1][7]="象";
board[1][8]="馬";
board[1][9]="車";
board[10][1]="?";//红方“车”
board[10][2]="?";//红方“马”
board[10][3]="?";//红方“相”
board[10][4]="?";//红方“士”
board[10][5]="?";//红方“帅”
board[10][6]="?";//红方“士”
board[10][7]="?";//红方“相”
board[10][8]="?";//红方“马”
board[10][9]="?";//红方“车”
board[2][1]="┣";
board[2][2]="╋";
board[2][3]="╋";
board[2][4]="╋";
board[2][5]="╋";
board[2][6]="╋";
board[2][7]="╋";
board[2][8]="╋";
board[2][9]="┫";
board[3][1]="┣";
board[3][2]="砲";
board[3][3]="╋";
board[3][4]="╋";
board[3][5]="╋";
board[3][6]="╋";
board[3][7]="╋";
board[3][8]="砲";
board[3][9]="┫";
board[4][1]="卒";
board[4][2]="╋";
board[4][3]="卒";
board[4][4]="╋";
board[4][5]="卒";
board[4][6]="╋";
board[4][7]="卒";
board[4][8]="╋";
board[4][9]="卒";
board[5][1]="┗";
board[5][2]="┻";
board[5][3]="┻";
board[5][4]="┻";
board[5][5]="┻";
board[5][6]="┻";
board[5][7]="┻";
board[5][8]="┻";
board[5][9]="┛";
board[6][1]="┏";
board[6][2]="┳";
board[6][3]="┳";
board[6][4]="┳";
board[6][5]="┳";
board[6][6]="┳";
board[6][7]="┳";
board[6][8]="┳";
board[6][9]="┓";
board[7][1]="?";
board[7][2]="╋";
board[7][3]="?";
board[7][4]="╋";
board[7][5]="?";
board[7][6]="╋";
board[7][7]="?";
board[7][8]="╋";
board[7][9]="?";
board[8][1]="┣";
board[8][2]="?";//红方“炮”
board[8][3]="╋";
board[8][4]="╋";
board[8][5]="╋";
board[8][6]="╋";
board[8][7]="╋";
board[8][8]="?";//红方“炮”
board[8][9]="┫";
board[9][1]="┣";
board[9][2]="╋";
board[9][3]="╋";
board[9][4]="╋";
board[9][5]="╋";
board[9][6]="╋";
board[9][7]="╋";
board[9][8]="╋";
board[9][9]="┫";
//开始绘制棋盘及棋子
String output="";
output+=" ";
for (int i=0;i<=5;i++)
{
for (int j=0;j<10;j++)
{
output+=board[i][j];
}
if (i==0)
output+=" ";
if (i==1)
output+=" "+titleup;
output+=" ";
}
output+=" ┃ "+han+" "+chu+" ┃ ";
for (int i=6;i<=10;i++)
{
for (int j=0;j<10;j++)
{
output+=board[i][j];
}
if (i==10)
output+=" "+titledown;
output+=" ";
}
return output;
}
//移动棋子
String move(int s1, int s2, int s3, int s4)
{
//将棋子移动到目标数组位置进行缓存
board[s3][s4]=board[s1][s2];
//辨别不同的起始位置并重绘棋盘
if (s1==10|s1==5)
{
if (s2==9)
board[s1][9]="┛";
if (s2==1)
board[s1][1]="┗";
if (s2>=2&s2<=8)
board[s1][s2]="┻";
}
if (s1==1|s1==6)
{
if (s2==9)
board[s1][9]="┓";
if (s2==1)
board[s1][1]="┏";
if (s2>=2&s2<=8)
board[s1][s2]="┳";
}
if (s2==1)
{
if (s1!=10&s1!=6&s1!=5&s1!=1)
board[s1][1]="┣";
}
if (s2==9)
{
if (s1!=10&s1!=6&s1!=5&s1!=1)
board[s1][9]="┫";
}
if (s2>=2&&s2<=8)
{
if (s1!=10&s1!=6&s1!=5&s1!=1)
board[s1][s2]="╋";
}
//输出被移动后的棋盘
String output="";
for (int i=0;i<=5;i++)
{
for (int j=0;j<10;j++)
{
output+=board[i][j];
}
if (i==0)
output+=" ";
if (i==1)
output+=" "+titleup;
output+=" ";
}
output+=" ┃ "+han+" "+chu+" ┃ ";
for (int i=6;i<=10;i++)
{
for (int j=0;j<10;j++)
{
output+=board[i][j];
}
if (i==10)
output+=" "+titledown;
output+=" ";
}
return output;
}
//车
String chariot(int s1, int s2, int s3, int s4)
{
String outputChariot="";
int scanner=scan(s1,s2,s3,s4);
if (scanner==0)
outputChariot=move(s1,s2,s3,s4);
return outputChariot;
}
//马
String knight(int s1, int s2, int s3, int s4)
{
String outputKnight="";
if (Math.abs(s1-s3)+Math.abs(s2-s4)==3)
{
if (s1!=s3&s2!=s4)
{
if (s3-s1==2)
{
boolean south=dot(s1+1,s2);
if (south==false)
outputKnight=move(s1,s2,s3,s4);
}
if (s1-s3==2)
{
boolean north=dot(s1-1,s2);
if (north==false)
outputKnight=move(s1,s2,s3,s4);
}
if (s2-s4==2)
{
boolean west=dot(s1,s2-1);
if (west==false)
outputKnight=move(s1,s2,s3,s4);
}
if (s4-s2==2)
{
boolean east=dot(s1,s2+1);
if (east==false)
outputKnight=move(s1,s2,s3,s4);
}
}
}
return outputKnight;
}
//相
String minister(int s1, int s2, int s3, int s4)
{
String outputMinister="";
if (s1>=1&&s1<=5)
{
if (s3>=1&&s3<=5)
{
if (s3-s1==2&&s4-s2==2)
{
boolean southeast=dot(s1+1,s2+1);
if (southeast==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s1-s3==2&&s4-s2==2)
{
boolean northeast=dot(s1-1,s2+1);
if (northeast==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s3-s1==2&&s2-s4==2)
{
boolean southwest=dot(s1+1,s2-1);
if (southwest==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s1-s3==2&&s2-s4==2)
{
boolean nouthwest=dot(s1-1,s2-1);
if (nouthwest==false)
outputMinister=move(s1,s2,s3,s4);
}
}
}
if (s1>=6&&s1<=10)
{
if (s3>=6&&s3<=10)
{
if (s3-s1==2&&s4-s2==2)
{
boolean southeast=dot(s1+1,s2+1);
if (southeast==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s1-s3==2&&s4-s2==2)
{
boolean northeast=dot(s1-1,s2+1);
if (northeast==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s3-s1==2&&s2-s4==2)
{
boolean southwest=dot(s1+1,s2-1);
if (southwest==false)
outputMinister=move(s1,s2,s3,s4);
}
if (s1-s3==2&&s2-s4==2)
{
boolean nouthwest=dot(s1-1,s2-1);
if (nouthwest==false)
outputMinister=move(s1,s2,s3,s4);
}
}
}
return outputMinister;
}
//士
String server(int s1, int s2, int s3, int s4)
{
String outputServer="";
if (s4>=4&&s4<=6)
{
if (Math.abs(s1-s3)==1&&Math.abs(s2-s4)==1)
{
if (s1>=1&&s1<=3)
{
if (s3>=1&&s3<=3)
{
outputServer=move(s1,s2,s3,s4);
}
}
if (s1>=8&&s1<=10)
{
if (s3>=8&&s3<=10)
{
outputServer=move(s1,s2,s3,s4);
}
}
}
}
return outputServer;
}
//将
String king(int s1, int s2, int s3, int s4)
{
String outputKing="";
int scanner=scan(s1,s2,s3,s4);
if (s4>=4&&s4<=6)
{
if (Math.abs(s1-s3)+Math.abs(s2-s4)==1)
{
if (s1>=1&&s1<=3)
{
if (s3>=1&&s3<=3)
{
outputKing=move(s1,s2,s3,s4);
}
}
if (s1>=8&&s1<=10)
{
if (s3>=8&&s3<=10)
{
outputKing=move(s1,s2,s3,s4);
}
}
}
}
return outputKing;
}
//兵
String soldier(int s1, int s2, int s3, int s4, int time)
{
String outputSoldier="";
if (time%2!=0)//红方兵
{
if (s1>=6)
{
if (s2==s4&&s3-s1==-1)
{
outputSoldier=move(s1,s2,s3,s4);
}
}
if (s1<=5)
{
if (Math.abs(s2-s4)+s1-s3==1)
{
outputSoldier=move(s1,s2,s3,s4);
}
}
}
if (time%2==0)//黑方兵
{
if (s1<=5)
{
if (s2==s4&&s3-s1==1)
{
outputSoldier=move(s1,s2,s3,s4);
}
}
if (s1>=6)
{
if (Math.abs(s2-s4)+s3-s1==1)
{
outputSoldier=move(s1,s2,s3,s4);
}
}
}
return outputSoldier;
}
//炮
String canon(int s1, int s2, int s3, int s4)
{
String outputCanon="";
int scanner=scan(s1,s2,s3,s4);
boolean destiny=dot(s3,s4);
//炮可以隔子吃子
if (destiny==true&scanner==1)
outputCanon=move(s1,s2,s3,s4);
//炮可以大范围直线移动
if (destiny==false&scanner==0)
outputCanon=move(s1,s2,s3,s4);
return outputCanon;
}
//判断是否同阵营吃子
int cannotEat(int s3, int s4, int time)
{
int judge=1;//1代表没有吃自己的子
for (int i=0;i<=6;i++)
{
if (time%2!=0)
{
if (board[s3][s4]==chess[0][i])
judge=0;//红吃红子
}
else
{
if (board[s3][s4]==chess[1][i])
judge=0;//黑吃黑子
}
}
return judge;
}
// 判断是否将棋子走出了棋盘
int outofRange(char a[])
{
int range=1;
if (a.length!=7)
range=0;
return range;
}
int scan(int s1, int s2, int s3, int s4)
{
int scan=0;
if (Math.abs(s2-s4)>1&s1==s3)
{
if (s2>s4)
{
for (int k=0;k<=1;k++)
{
for (int l=0;l<=6;l++)
{
for (int j=s4+1;j<=s2-1;j++)
{
if (board[s1][j]==chess[k][l])
scan++;
}
}
}
}
if (s2{
for (int k=0;k<=1;k++)
{
for (int l=0;l<=6;l++)
{
for (int j=s2+1;j<=s4-1;j++)
{
if (board[s1][j]==chess[k][l])
scan++;
}
}
}
}
}
if (Math.abs(s1-s3)>1&s2==s4)
{
if (s1>s3)
{
for (int k=0;k<=1;k++)
{
for (int l=0;l<=6;l++)
{
for (int j=s3+1;j<=s1-1;j++)
{
if (board[j][s2]==chess[k][l])
scan++;
}
}
}
}
if (s1{
for (int k=0;k<=1;k++)
{
for (int l=0;l<=6;l++)
{
for (int j=s1+1;j<=s3-1;j++)
{
if (board[j][s2]==chess[k][l])
scan++;
}
}
}
}
}
if (Math.abs(s1-s3)==1|Math.abs(s2-s4)==1)
scan=0;
return scan;
}
int win()
{
int life=0;
for (int i=1;i<=3;i++)
{
for (int j=4;j<=6;j++)
{
if (board[i][j]==chess[1][4])
life++;
}
}
for (int i=8;i<=10;i++)
{
for (int j=4;j<=6;j++)
{
if (board[i][j]==chess[0][4])
life++;
}
}
return life;
}
boolean dot(int d1,int d2)
{
boolean dot=false;
for (int k=0;k<=1;k++)
{
for (int l=0;l<=6;l++)
{
if (board[d1][d2]==chess[k][l])
dot=true;
}
}
return dot;
}
}
java中国象棋棋盘放置棋子,JAVA简易文字版中国象棋相关推荐
- java中国象棋棋盘放置棋子,Qt中国象棋二——棋盘与棋子的绘制
上次和大家分享了Qt的2D绘图基础知识,这样可以更好地理解象棋中一些关于绘图的程序.这次要和大家分享的则是棋盘与棋子的绘制,也可以说是Qt 2D绘图的一些具体应用. 源程序是我在网上找的,而且是下载了 ...
- JAVA中用程序绘制国际象棋与中国象棋棋盘
JAVA API 中的绘制图形类的paint()方法,我们可以轻松绘制中国象棋与国际象棋的棋盘.详见代码: 一.中国象棋棋盘代码 import java.awt.Font; import java.a ...
- matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程
本发明涉及计算机图像识别技术,具体涉及一种基于图像处理的中国象棋识别系统及方法. 背景技术: 数字图像处理技术在机器感知领域应用十分广泛,主要目标是通过一些图像处理技术从图像中提取信息,该信息类似于人 ...
- 中国象棋棋盘java_java绘制国际象棋与中国象棋棋盘
JAVA API 中的绘制图形类的paint()方法,我们可以轻松绘制中国象棋与国际象棋的棋盘.详见代码: 一.中国象棋棋盘代码 import java.awt.Font; import java.a ...
- 暗棋单机版_中国暗棋游戏下载-中国暗棋下载v1.0.0 安卓版-单机手游网
中国暗棋游戏去棋牌类象棋手游,游戏玩法是将象棋到放,然后不断的反面获得游戏的进程,玩法市面简单方便可以和线上线下朋友一起玩耍哦!小编也给你们带来了中国暗棋手游下载地址!此版本为安卓最新完整版,感兴趣的 ...
- java象棋无框架版_Java版中国象棋
/* *中国象棋Java *作者:yanick *源文件:Chess.java *最后修改时间:2006-11-1 *添加功能:实现了当前棋局的保存 *Chess.java */ import jav ...
- 中国象棋程序的设计与实现(十)--棋盘的定义和绘制
中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等) 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝...
本篇简要介绍棋盘类的定义.棋盘的关键属性.棋盘绘制算法的骨架. 棋盘的详细绘制算法等内容,我们将在接下来的几篇进行详细介绍. 棋盘类的定义 public abstract class ChessBoa ...
- qt pcl设置镜头初始位置_Qt中国象棋二——棋盘与棋子的绘制
上次和大家分享了Qt的2D绘图基础知识,这样可以更好地理解象棋中一些关于绘图的程序.这次要和大家分享的则是棋盘与棋子的绘制,也可以说是Qt 2D绘图的一些具体应用. 源程序是我在网上找的,而且是下载了 ...
- Qt中国象棋二——棋盘与棋子的绘制
上次和大家分享了Qt的2D绘图基础知识,这样可以更好地理解象棋中一些关于绘图的程序.这次要和大家分享的则是棋盘与棋子的绘制,也可以说是Qt 2D绘图的一些具体应用. 源程序是我在网上找的,而且是下载了 ...
最新文章
- matlab画复变函数,科学网—复数复变函数的Matlab计算与绘图 - 周铁戈的博文
- Centos 6.x
- ICCV2021 人脸深伪分析挑战赛 重磅来袭
- 算法高级(24)-一致性哈希算法在分布式系统中的使用场景
- 前端直播与SRS视频流服务的使用
- java持久层用文件_Java持久层框架MyBatis简单实例
- C++设计模式之Strategy(策略模式)
- 更新CentOS中的python(从2.6.X到2.7.X)
- 第35课 函数对象分析(函数操作符()重载)
- Ubuntu20.04以及Ubuntu18.04修改键盘布局(法语键盘)
- flutter网络请求基础知识铺垫、及实战举例
- 级数收敛与交换运算顺序
- 淘宝直通车表格拖动时间段选择插件,纯手写80%还原
- 【Matlab 六自由度机器人】关于灵活工作空间与可达工作空间的理解(附MATLAB推导代码)
- python如何撤回_python如何查看微信消息撤回
- http://www.seattletechinterviews.com/
- Layui 设置多个穿梭框,并增加上移下移置顶置底功能
- 《啪啪三国》技术详解
- 互联网从此没有BAT
- 【超简短的独立游戏开发教学】学习记录
热门文章
- 计算机表格数据怎么样汇总,excel中如何将不同表格中的统一数据汇总求和《》...
- 如何运用matlab给球面染上颜色,matlab画球体颜色如何选择
- 《LabVIEW数据采集》视频教程第7集:接线端的显示方式
- 在全民监控时代,你我的隐私随时都在被贩卖?
- 碧桂园的半年报启示:地产周期下如何转型发展?
- java arraylist 倒置_如何在Java中反转ArrayList?
- JavaScript中的单引号和双引号的区别
- 2022年最新整理必背的Java面试题大全,背好了Offer在手
- 汉明码的原理、生成及检验
- 高速目标距离走动校正 keystone 插值算法