搜档网
当前位置:搜档网 › 中国象棋源代码Java程序

中国象棋源代码Java程序

中国象棋源代码Java程序
中国象棋源代码Java程序

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.util.*;

import java.io.*;

public class Chess{

public static void main(String args[]){

new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫");

}

}

class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{

//玩家

JLabel play[] = new JLabel[32];

//棋盘

JLabel image;

//窗格

Container con;

//工具栏

JToolBar jmain;

//重新开始

JButton anew;

//悔棋

JButton repent;

//退出

JButton exit;

//当前信息

JLabel text;

//保存当前操作

Vector Var;

//规则类对象(使于调用方法)

ChessRule rule;

/**

** 单击棋子

** chessManClick = true 闪烁棋子并给线程响应

** chessManClick = false 吃棋子停止闪烁并给线程响应

*/

boolean chessManClick;

/**

** 控制玩家走棋

** chessPlayClick=1 黑棋走棋

** chessPlayClick=2 红棋走棋默认红棋

** chessPlayClick=3 双方都不能走棋

*/

int chessPlayClick=2;

//控制棋子闪烁的线程

Thread tmain;

//把第一次的单击棋子给线程响应

static int Man,i;

ChessMainFrame(){

new ChessMainFrame("中国象棋");

}

/**

** 构造函数

** 初始化图形用户界面

*/

ChessMainFrame(String Title){

//获行客格引用

con = this.getContentPane();

con.setLayout(null);

//实例化规则类

rule = new ChessRule();

Var = new Vector();

//创建工具栏

jmain = new JToolBar();

text = new JLabel("欢迎使用象棋对弈系统");

//当鼠标放上显示信息

text.setToolTipText("信息提示");

anew = new JButton(" 新游戏");

anew.setToolTipText("重新开始新的一局");

exit = new JButton(" 退出");

exit.setToolTipText("退出象棋程序程序");

repent = new JButton(" 悔棋");

repent.setToolTipText("返回到上次走棋的位置");

//把组件添加到工具栏

jmain.setLayout(new GridLayout(0,4));

jmain.add(anew);

jmain.add(repent);

jmain.add(exit);

jmain.add(text);

jmain.setBounds(0,0,558,30);

con.add(jmain);

//添加棋子标签

drawChessMan();

//注册按扭监听

anew.addActionListener(this);

repent.addActionListener(this);

exit.addActionListener(this);

//注册棋子移动监听

for (int i=0;i<32;i++){

con.add(play[i]);

play[i].addMouseListener(this);

}

//添加棋盘标签

con.add(image = new JLabel(new ImageIcon("image\\Main.GIF"))); image.setBounds(0,30,558,620);

image.addMouseListener(this);

//注册窗体关闭监听

this.addWindowListener(

new WindowAdapter() {

public void windowClosing(WindowEvent we){

System.exit(0);

}

}

);

//窗体居中

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize();

if (frameSize.height > screenSize.height){

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width){

frameSize.width = screenSize.width;

}

this.setLocation((screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350);

//设置

this.setIconImage(new ImageIcon("image\\红将.GIF").getImage());

this.setResizable(false);

this.setTitle(Title);

this.setSize(558,670);

this.show();

}

/**

** 添加棋子方法

*/

public void drawChessMan(){

//流程控制

int i,k;

//图标

Icon in;

//黑色棋子

//车

in = new ImageIcon("image\\黑车.GIF");

for (i=0,k=24;i<2;i++,k+=456){

play[i] = new JLabel(in);

play[i].setBounds(k,56,55,55);

play[i].setName("车1");

}

//马

in = new ImageIcon("image\\黑马.GIF");

for (i=4,k=81;i<6;i++,k+=342){

play[i] = new JLabel(in);

play[i].setBounds(k,56,55,55);

play[i].setName("马1");

}

//相

in = new ImageIcon("image\\黑象.GIF");

for (i=8,k=138;i<10;i++,k+=228){

play[i] = new JLabel(in);

play[i].setBounds(k,56,55,55);

play[i].setName("象1");

}

//士

in = new ImageIcon("image\\黑士.GIF"); for (i=12,k=195;i<14;i++,k+=114){ play[i] = new JLabel(in);

play[i].setBounds(k,56,55,55);

play[i].setName("士1");

}

//卒

in = new ImageIcon("image\\黑卒.GIF"); for (i=16,k=24;i<21;i++,k+=114){

play[i] = new JLabel(in);

play[i].setBounds(k,227,55,55);

play[i].setName("卒1" + i);

}

//炮

in = new ImageIcon("image\\黑炮.GIF"); for (i=26,k=81;i<28;i++,k+=342){

play[i] = new JLabel(in);

play[i].setBounds(k,170,55,55);

play[i].setName("炮1" + i);

}

//将

in = new ImageIcon("image\\黑将.GIF"); play[30] = new JLabel(in);

play[30].setBounds(252,56,55,55);

play[30].setName("将1");

//红色棋子

//车

in = new ImageIcon("image\\红车.GIF"); for (i=2,k=24;i<4;i++,k+=456){

play[i] = new JLabel(in);

play[i].setBounds(k,569,55,55);

play[i].setName("车2");

}

//马

in = new ImageIcon("image\\红马.GIF");

for (i=6,k=81;i<8;i++,k+=342){

play[i] = new JLabel(in);

play[i].setBounds(k,569,55,55);

play[i].setName("马2");

}

//相

in = new ImageIcon("image\\红象.GIF");

for (i=10,k=138;i<12;i++,k+=228){

play[i] = new JLabel(in);

play[i].setBounds(k,569,55,55);

play[i].setName("象2");

}

//士

in = new ImageIcon("image\\红士.GIF");

for (i=14,k=195;i<16;i++,k+=114){

play[i] = new JLabel(in);

play[i].setBounds(k,569,55,55);

play[i].setName("士2");

}

//兵

in = new ImageIcon("image\\红卒.GIF");

for (i=21,k=24;i<26;i++,k+=114){

play[i] = new JLabel(in);

play[i].setBounds(k,398,55,55);

play[i].setName("卒2" + i);

}

//炮

in = new ImageIcon("image\\红炮.GIF");

for (i=28,k=81;i<30;i++,k+=342){

play[i] = new JLabel(in);

play[i].setBounds(k,455,55,55);

play[i].setName("炮2" + i);

}

//帅

in = new ImageIcon("image\\红将.GIF");

play[31] = new JLabel(in);

play[31].setBounds(252,569,55,55);

play[31].setName("帅2");

}

/**

** 线程方法控制棋子闪烁

*/

public void run(){

while (true){

//单击棋子第一下开始闪烁

if (chessManClick){

play[Man].setVisible(false);

//时间控制

try{

tmain.sleep(200);

}

catch(Exception e){

}

play[Man].setVisible(true);

}

//闪烁当前提示信息以免用户看不见

else {

text.setVisible(false);

//时间控制

try{

tmain.sleep(250);

}

catch(Exception e){

}

text.setVisible(true);

}

try{

tmain.sleep(350);

}

catch (Exception e){

}

}

}

/**

** 单击棋子方法

public void mouseClicked(MouseEvent me){

System.out.println("Mouse");

//当前坐标

int Ex=0,Ey=0;

//启动线程

if (tmain == null){

tmain = new Thread(this);

tmain.start();

}

//单击棋盘(移动棋子)

if (me.getSource().equals(image)){

//该红棋走棋的时候

if (chessPlayClick == 2 && play[Man].getName().charAt(1) == '2'){ Ex = play[Man].getX();

Ey = play[Man].getY();

//移动卒、兵

if (Man > 15 && Man < 26){

rule.armsRule(Man,play[Man],me);

}

//移动炮

else if (Man > 25 && Man < 30){

rule.cannonRule(play[Man],play,me);

}

//移动车

else if (Man >=0 && Man < 4){

rule.cannonRule(play[Man],play,me);

}

//移动马

else if (Man > 3 && Man < 8){

rule.horseRule(play[Man],play,me);

}

//移动相、象

else if (Man > 7 && Man < 12){

rule.elephantRule(Man,play[Man],play,me);

}

//移动仕、士

else if (Man > 11 && Man < 16){

rule.chapRule(Man,play[Man],play,me);

}

//移动将、帅

else if (Man == 30 || Man == 31){

rule.willRule(Man,play[Man],play,me);

}

//是否走棋错误(是否在原地没有动)

if (Ex == play[Man].getX() && Ey == play[Man].getY()){

text.setText(" 红棋走棋");

chessPlayClick=2;

}

else {

text.setText(" 黑棋走棋");

chessPlayClick=1;

}

}//if

//该黑棋走棋的时候

else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){

Ex = play[Man].getX();

Ey = play[Man].getY();

//移动卒、兵

if (Man > 15 && Man < 26){

rule.armsRule(Man,play[Man],me);

}

//移动炮

else if (Man > 25 && Man < 30){

rule.cannonRule(play[Man],play,me);

}

//移动车

else if (Man >=0 && Man < 4){

rule.cannonRule(play[Man],play,me);

}

//移动马

else if (Man > 3 && Man < 8){

rule.horseRule(play[Man],play,me);

}

//移动相、象

else if (Man > 7 && Man < 12){

rule.elephantRule(Man,play[Man],play,me);

}

//移动仕、士

else if (Man > 11 && Man < 16){

rule.chapRule(Man,play[Man],play,me);

}

//移动将、帅

else if (Man == 30 || Man == 31){

rule.willRule(Man,play[Man],play,me);

}

//是否走棋错误(是否在原地没有动)

if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setText(" 黑棋走棋");

chessPlayClick=1;

}

else {

text.setText(" 红棋走棋");

chessPlayClick=2;

}

}//else if

//当前没有操作(停止闪烁)

chessManClick=false;

}//if

//单击棋子

else{

//第一次单击棋子(闪烁棋子)

if (!chessManClick){

for (int i=0;i<32;i++){

//被单击的棋子

if (me.getSource().equals(play[i])){

//告诉线程让该棋子闪烁

Man=i;

//开始闪烁

chessManClick=true;

break;

}

}//for

}//if

//第二次单击棋子(吃棋子)

else if (chessManClick){

//当前没有操作(停止闪烁)

chessManClick=false;

for (i=0;i<32;i++){

//找到被吃的棋子

if (me.getSource().equals(play[i])){

//该红棋吃棋的时候

if (chessPlayClick == 2 && play[Man].getName().charAt(1) == '2'){

Ex = play[Man].getX();

Ey = play[Man].getY();

//卒、兵吃规则

if (Man > 15 && Man < 26){

rule.armsRule(play[Man],play[i]);

}

//炮吃规则

else if (Man > 25 && Man < 30){

rule.cannonRule(0,play[Man],play[i],play,me);

}

//车吃规则

else if (Man >=0 && Man < 4){

rule.cannonRule(1,play[Man],play[i],play,me);

}

//马吃规则

else if (Man > 3 && Man < 8){

rule.horseRule(play[Man],play[i],play,me);

}

//相、象吃规则

else if (Man > 7 && Man < 12){

rule.elephantRule(play[Man],play[i],play);

}

//士、仕吃棋规则

else if (Man > 11 && Man < 16){

rule.chapRule(Man,play[Man],play[i],play);

}

//将、帅吃棋规则

else if (Man == 30 || Man == 31){

rule.willRule(Man,play[Man],play[i],play);

play[Man].setVisible(true);

}

//是否走棋错误(是否在原地没有动)

if (Ex == play[Man].getX() && Ey == play[Man].getY()){

text.setText(" 红棋走棋");

chessPlayClick=2;

break;

}

else{

text.setText(" 黑棋走棋");

chessPlayClick=1;

break;

}

}//if

//该黑棋吃棋的时候

else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){

Ex = play[Man].getX();

Ey = play[Man].getY();

//卒吃规则

if (Man > 15 && Man < 26){

rule.armsRule(play[Man],play[i]);

}

//炮吃规则

else if (Man > 25 && Man < 30){

rule.cannonRule(0,play[Man],play[i],play,me);

}

//车吃规则

else if (Man >=0 && Man < 4){

rule.cannonRule(1,play[Man],play[i],play,me);

}

//马吃规则

else if (Man > 3 && Man < 8){

rule.horseRule(play[Man],play[i],play,me);

}

//相、象吃规则

else if (Man > 7 && Man < 12){

rule.elephantRule(play[Man],play[i],play);

}

//士、仕吃棋规则

else if (Man > 11 && Man < 16){

rule.chapRule(Man,play[Man],play[i],play);

}

//将、帅吃棋规则

else if (Man == 30 || Man == 31){

rule.willRule(Man,play[Man],play[i],play);

play[Man].setVisible(true);

}

//是否走棋错误(是否在原地没有动)

if (Ex == play[Man].getX() && Ey == play[Man].getY()){

text.setText(" 黑棋走棋");

chessPlayClick=1;

break;

}

else {

text.setText(" 红棋走棋");

chessPlayClick=2;

break;

}

}//else if

}//if

}//for

//是否胜利

if (!play[31].isVisible()){

JOptionPane.showConfirmDialog(

this,"黑棋胜利","玩家一胜利",

JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);

//双方都不可以在走棋了

chessPlayClick=3;

text.setText(" 黑棋胜利");

}//if

else if (!play[30].isVisible()){

JOptionPane.showConfirmDialog(

this,"红棋胜利","玩家二胜利",

JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);

chessPlayClick=3;

text.setText(" 红棋胜利");

}//else if

}//else

}//else

}

public void mousePressed(MouseEvent me){

}

public void mouseReleased(MouseEvent me){

}

public void mouseEntered(MouseEvent me){

}

public void mouseExited(MouseEvent me){

}

/**

** 定义按钮的事件响应

*/

public void actionPerformed(ActionEvent ae) { //重新开始按钮

if (ae.getSource().equals(anew)){

int i,k;

//重新排列每个棋子的位置

//黑色棋子

//车

for (i=0,k=24;i<2;i++,k+=456){

play[i].setBounds(k,56,55,55);

}

//马

for (i=4,k=81;i<6;i++,k+=342){

play[i].setBounds(k,56,55,55);

}

//相

for (i=8,k=138;i<10;i++,k+=228){

play[i].setBounds(k,56,55,55);

}

//士

for (i=12,k=195;i<14;i++,k+=114){

play[i].setBounds(k,56,55,55);

}

//卒

for (i=16,k=24;i<21;i++,k+=114){

play[i].setBounds(k,227,55,55);

}

//炮

for (i=26,k=81;i<28;i++,k+=342){

play[i].setBounds(k,170,55,55);

}

//将

play[30].setBounds(252,56,55,55);

//红色棋子

//车

for (i=2,k=24;i<4;i++,k+=456){

play[i].setBounds(k,569,55,55);

}

//马

for (i=6,k=81;i<8;i++,k+=342){

play[i].setBounds(k,569,55,55);

}

//相

for (i=10,k=138;i<12;i++,k+=228){

play[i].setBounds(k,569,55,55);

}

//士

for (i=14,k=195;i<16;i++,k+=114){

play[i].setBounds(k,569,55,55);

}

//兵

for (i=21,k=24;i<26;i++,k+=114){

play[i].setBounds(k,398,55,55);

}

//炮

for (i=28,k=81;i<30;i++,k+=342){

play[i].setBounds(k,455,55,55);

}

//帅

play[31].setBounds(252,569,55,55);

chessPlayClick = 2;

text.setText(" 红棋走棋");

for (i=0;i<32;i++){

play[i].setVisible(true);

}

//清除Vector中的内容

Var.clear();

}

//悔棋按钮

else if (ae.getSource().equals(repent)){

try{

//获得setVisible属性值

String S = (String)Var.get(Var.size()-4);

//获得X坐标

int x = Integer.parseInt((String)Var.get(Var.size()-3));

//获得Y坐标

int y = Integer.parseInt((String)Var.get(Var.size()-2));

//获得索引

int M = Integer.parseInt((String)Var.get(Var.size()-1));

//赋给棋子

play[M].setVisible(true);

play[M].setBounds(x,y,55,55);

if (play[M].getName().charAt(1) == '1'){

text.setText(" 黑棋走棋");

chessPlayClick = 1;

}

else{

text.setText(" 红棋走棋");

chessPlayClick = 2;

}

//删除用过的坐标

Var.remove(Var.size()-4);

Var.remove(Var.size()-3);

Var.remove(Var.size()-2);

Var.remove(Var.size()-1);

//停止旗子闪烁

chessManClick=false;

}

catch(Exception e){

}

}

//退出

else if (ae.getSource().equals(exit)){

int j=JOptionPane.showConfirmDialog(

this,"真的要退出吗?","退出",

JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

if (j == JOptionPane.YES_OPTION){

System.exit(0);

}

}

}

/*定义中国象棋规则的类*/

class ChessRule {

/**卒子的移动规则*/

public void armsRule(int Man,JLabel play,MouseEvent me){

//黑卒向下

if (Man < 21){

//向下移动、得到终点的坐标模糊成合法的坐标

if ((me.getY()-play.getY()) > 27 && (me.getY()-play.getY()) < 86 && (me.getX()-play.getX()) < 55 && (me.getX()-play.getX()) > 0){

//当前记录添加到集合(用于悔棋)

Var.add(String.valueOf(play.isVisible()));

Var.add(String.valueOf(play.getX()));

Var.add(String.valueOf(play.getY()));

Var.add(String.valueOf(Man));

play.setBounds(play.getX(),play.getY()+57,55,55);

}

//向右移动、得到终点的坐标模糊成合法的坐标、必须过河

else if (play.getY() > 284 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){

play.setBounds(play.getX()+57,play.getY(),55,55);

}

//向左移动、得到终点的坐标模糊成合法的坐标、必须过河

else if (play.getY() > 284 && (play.getX() - me.getX()) >= 2 && (play.getX() - me.getX()) <=58){

//模糊坐标

play.setBounds(play.getX()-57,play.getY(),55,55);

}

}

//红卒向上

else{

//当前记录添加到集合(用于悔棋)

Var.add(String.valueOf(play.isVisible()));

Var.add(String.valueOf(play.getX()));

Var.add(String.valueOf(play.getY()));

Var.add(String.valueOf(Man));

//向上移动、得到终点的坐标模糊成合法的坐标

if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >27 && play.getY()-me.getY() < 86){

play.setBounds(play.getX(),play.getY()-57,55,55);

}

//向右移动、得到终点的坐标模糊成合法的坐标、必须过河

else if (play.getY() <= 341 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){

play.setBounds(play.getX()+57,play.getY(),55,55);

}

//向左移动、得到终点的坐标模糊成合法的坐标、必须过河

else if (play.getY() <= 341 && (play.getX() - me.getX()) >= 3 && (play.getX() - me.getX()) <=58){

play.setBounds(play.getX()-57,play.getY(),55,55);

}

}

}//卒移动结束

/**卒吃棋规则*/

public void armsRule(JLabel play1,JLabel play2){

//向右走

if ((play2.getX() - play1.getX()) <= 112 && (play2.getX() - play1.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){

//黑棋要过河才能右吃棋

if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);

//把对方的位置给自己

play1.setBounds(play2.getX(),play2.getY(),55,55);

}

//红棋要过河才左能吃棋

else if (play1.getName().charAt(1) == '2' && play1.getY() < 341

&& play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);

//把对方的位置给自己

play1.setBounds(play2.getX(),play2.getY(),55,55);

}

}

//向左走

else if ((play1.getX() - play2.getX()) <= 112 && (play1.getX() - play2.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){

//黑棋要过河才能左吃棋

if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);

//把对方的位置给自己

play1.setBounds(play2.getX(),play2.getY(),55,55);

}

//红棋要过河才能右吃棋

else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);

//把对方的位置给自己

play1.setBounds(play2.getX(),play2.getY(),55,55);

}

}

//向上走

else if (play1.getX() - play2.getX() >= -22 && play1.getX() - play2.getX() <= 22 && play1.getY() - play2.getY() >= -112 && play1.getY() - play2.getY() <= 112){

//黑棋不能向上吃棋

if (play1.getName().charAt(1) == '1' && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);

//把对方的位置给自己

play1.setBounds(play2.getX(),play2.getY(),55,55);

}

//红棋不能向下吃棋

中国象棋源代码Java程序

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; public class Chess{ public static void main(String args[]){ new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫"); } } class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] = new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 JToolBar jmain; //重新开始 JButton anew; //悔棋 JButton repent; //退出 JButton exit; //当前信息 JLabel text; //保存当前操作 Vector Var; //规则类对象(使于调用方法) ChessRule rule; /** ** 单击棋子 ** chessManClick = true 闪烁棋子并给线程响应 ** chessManClick = false 吃棋子停止闪烁并给线程响应 */ boolean chessManClick;

/** ** 控制玩家走棋 ** chessPlayClick=1 黑棋走棋 ** chessPlayClick=2 红棋走棋默认红棋 ** chessPlayClick=3 双方都不能走棋 */ int chessPlayClick=2; //控制棋子闪烁的线程 Thread tmain; //把第一次的单击棋子给线程响应 static int Man,i; ChessMainFrame(){ new ChessMainFrame("中国象棋"); } /** ** 构造函数 ** 初始化图形用户界面 */ ChessMainFrame(String Title){ //获行客格引用 con = this.getContentPane(); con.setLayout(null); //实例化规则类 rule = new ChessRule(); Var = new Vector(); //创建工具栏 jmain = new JToolBar(); text = new JLabel("欢迎使用象棋对弈系统"); //当鼠标放上显示信息 text.setToolTipText("信息提示"); anew = new JButton(" 新游戏 "); anew.setToolTipText("重新开始新的一局"); exit = new JButton(" 退出 "); exit.setToolTipText("退出象棋程序程序"); repent = new JButton(" 悔棋 "); repent.setToolTipText("返回到上次走棋的位置"); //把组件添加到工具栏 jmain.setLayout(new GridLayout(0,4)); jmain.add(anew);

中国象棋(代码)

中国象棋(web版源代码) 程序: using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; namespace WebApplication1 {

public partial class WebForm1 : System.Web.UI.Page { int tru = 20; int fals = 40; public ImageButton[,] _Image=new ImageButton[11,10]; //将上一次点击点的坐标保存到数据库中的lastx和lasty public void SaveToLast() { if (Session["user"].ToString() == "red" && _GetUserState(Session["user"].ToString()) == 20) { int x, y, lastx, lasty; x = Getpointx(); y = Getpointy(); lastx = x; lasty = y; Updatalastx(lastx); Updatalasty(lasty); } if (Session["user"].ToString() == "black" && _GetUserState(Session["user"].ToString()) == 20) { int x, y, lastx, lasty; x = Getpointx(); y = Getpointy(); lastx = x; lasty = y; Updatalastx(lastx); Updatalasty(lasty); } } //将棋盘上所有棋子图片显示到棋盘上 private void _Drawqizi() { //_Init(); int i,j,k; if (_GetUserState("red") != 0 && _GetUserState("black") != 0)

中国象棋源代码-C语言小程序

*--------------------chess.c----------------------*/ #include "dos.h" #include "stdio.h" /*----------------------------------------------------*/ #define RED 7 #define BLACK 14 #define true 1 #define false 0 #define SELECT 0 #define MOVE 1 #define RED_UP 0x1100 #define RED_DOWN 0x1f00 #define RED_LEFT 0x1e00 #define RED_RIGHT 0x2000 #define RED_DO 0x3900 #define RED_UNDO 0x1000 #define BLACK_UP 0x4800 #define BLACK_DOWN 0x5000 #define BLACK_LEFT 0x4b00 #define BLACK_RIGHT 0x4d00 #define BLACK_DO 0x1c00 #define BLACK_UNDO 0x2b00 #define ESCAPE 0x0100 #define RED_JU 1 #define RED_MA 2 #define RED_XIANG 3 #define RED_SHI 4 #define RED_JIANG 5 #define RED_PAO 6 #define RED_BIN 7 #define BLACK_JU 8 #define BLACK_MA 9 #define BLACK_XIANG 10 #define BLACK_SHI 11 #define BLACK_JIANG 12 #define BLACK_PAO 13 #define BLACK_BIN 14 /*----------------------------------------------------*/ int firsttime=1; int savemode;

中国象棋算法

解剖大象的眼睛——中国象棋程序设计探索 黄晨*2005年6月 ( * 联系地址:复旦大学化学系表面化学实验室,eMail:morning_yellow@elephantbas https://www.sodocs.net/doc/8f4334018.html,) (一) 引言 我在今年2月写出了象棋程序ElephantEye的第一个版本(0.90),本来它只是象棋界面ElephantBoard的调试引擎。在设计程序的过程中,我尝试性地加入了很多算法,发现每次改进都能让程序的棋力有大幅度的提高,因此便对象棋程序的算法产生了浓厚的兴趣。到现在我已经陆续对ElephantEye作了几十次加工(目前版本为0.94),使得它的棋力接近了中等商业软件的水平,在公开源代码的象棋程序中,ElephantEye是最强的一个。 我希望能通过公开源代码的方式,推动中国象棋程序水平的整体发展,然而根据很 多网友的反馈意见,发现源代码中的很多部分并不是那么容易理解的。因此我才打算以《中国象棋程序设计探索》为题,写几篇详细介绍ElephantEye算法的连载,希望能让的源代码充分发挥它的作用。 下面我先简要谈一下我自己对ElephantEye的体会。 1.1 ElephantEye用到了哪些算法? 在我写本次连载以前,我已经完成了《象棋百科全书》网站上《对弈程序基本技术 》专题中所有文章的翻译,ElephantEye的大部分算法都参考了这些文章,这些算法我会在连载中一笔带过,详细的内容希望读者参考这些译文,那里还有我加的很多译注,希 望它们能够加深读者对这些算法的体会。 当然,仅根据这些文章所提供的算法,是写不出很好的程序的,我参考了王小春的《PC游戏编程——人机博弈》一书,也参考了一些国际象棋的源程序,并通过自己的探索,在ElephantEye中加入了另外的非常重要的算法,尤其是启发算法,我认为它们在程序中发挥了关键性的作用,而且很多细节在绝大多数文字资料中没有详细给出,我会在 我的连载中重点介绍。 我猜读者最感兴趣的内容是ElephantEye的着法生成器,这应该算是象棋程序的核心部分,同时也是各个程序差异最大的部分。在写ElephantEye以前,我在《象棋百科全书》网站上刊登了大量介绍“位棋盘”的文章,这是个非常有吸引力的思想,但是我试验 下来觉得它的速度并不快,在ElephantEye的程序里我只把位棋盘运用在将军判断上。尽管如此,ElephantEye短短10行的将军判断也许是程序的一个亮点吧,那么这部分内容我将尽量介绍得详细一点。 此外,一些看似和棋力关系不大的技术,诸如开局库、长将检测、后台思考、时间 策略、引擎协议等等,其实也直接影响着象棋程序的稳定性,因此也有必要逐一讲解。 总之,每个技术都很重要,我的连载虽然不能面面俱到,但我会尽我所能来作详细 阐述的。 1.2 如何正确评价ElephantEye目前的棋力?

象棋游戏的设计与实现

象棋游戏的设计与实现

目录 1引言 (1) 1.1象棋设计背景和研究意义 (1) 1.2象棋设计研究方法 (1) 2人工智能算法设计 (2) 2.1棋局表示 (3) 2.2着法生成 (4) 2.3搜索算法 (5) 2.4历史启发及着法排序 (9) 2.5局面评估 (9) 2.6程序组装 (11) 3界面及程序辅助设计 (12) 3.1界面基本框架 (12) 3.2多线程 (13) 3.3着法名称显示 (14) 3.4悔棋和还原 (15) 4系统实现 (16) 结论 (19) 参考文献 (20)

1引言 1.1 象棋设计背景和研究意义 电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。游戏,作为一种娱乐活动。早期的人类社会由于生产力及科技的制约,只能进行一些户外的游戏。随着生产力的发展和科技进步,一种新的游戏方式——电子游戏也随之诞生。 当计算机发明以后,电子游戏又多了一个新的载体。电子游戏在整个计算机产业的带动下不断地创新、发展着。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。而计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想。事实上,个人计算机软件市场的大约80%销售份额是来自游戏软件。棋牌游戏属于休闲类游戏,相对于角色扮演类游戏和即时战略类游戏等其它游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。作为中华民族悠久文化的代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋开始走向世界。 随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋大师已被计算机打败,计算机已经超过了人类?而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。 1.2 象棋设计研究方法 对于象棋来说,核心设计主要包括人工智能算法的以及整个游戏中界面及程序辅助部分的实现,主要用 Visual C++ 进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。 本文的目标是实现一款有着一定下棋水平且交互友好的中国象棋人机对弈程序。 该程序功能包括: *人机对弈; *搜索深度设定; (电脑棋力选择)

中国象棋源代码及文档

摘要 象棋程序可以分为两大部分:人工智能和界面程序辅助。人工智能的主要部分,反 映了计算机下象棋的想法,电脑怎么想,最好的方法去完成下一步,优先搜索算法进行 搜索,和各种可能的行动,评估,选择胜利面最大的一步;界面和程序协助部分主要是界 面友好,以更好地适应用户下象棋的想法。 本文研究了中国象棋在电脑中如何表示,然后讨论如何产生走法的一系列相关技术。使用MFC架构和Visual C + +开发工具,实现一定技能的中国象棋人机对弈功能。 关键词:中国象棋;人工智能;下棋

Title The Design And Realize of human-computer Chess Game Abstract Chess program can be divided into two major auxiliary artificial intelligence and interface program. The AI part of the main reflected computer chess ideas, computer how to think and go to the best method to complete the next step, first search algorithm to search, and a variety of possible moves, valuations, choose victory surface step; the interface and the program assisted some of the major user-friendly game of chess by the previous step, to better adjust the chess ideas. This paper studies the Chinese chess computer, and then discuss how to generate a series of related moves. MFC architecture and Visual C development tools, to achieve a certain chess skills, Chinese chess, human-computer chess program. Keywords: Chess; artificial intelligence; chess

java中国象棋报告

贵州航天职业技术学院Java课程设计报告 专业:计算机软件技术 班级:09软件二 学号:A093GZ053020152 姓名:韦治成 指导老师:肖宏启 时间:

目录 摘要 ------------------------------------------------------------------- 3【摘要】 ------------------------------------------------------------ 3【关键字】 --------------------------------------------------------- 4系统概述 ---------------------------------------------------------------- 4 1.棋盘表示 ---------------------------------------------------------- 4 3.人人对弈 ---------------------------------------------------------- 4系统分析 ---------------------------------------------------------------- 4 1. 设计内容--------------------------------------------------------- 4 2. 设计要求--------------------------------------------------------- 5 3.中国象棋软件-------------------------------------------------- 6 4.运行效果-------------------------------------------------------- 8系统设计 ---------------------------------------------------------------- 8 1.总体设计 ---------------------------------------------------------- 8 运行界面: ------------------------------------------------------- 10 2.运行输出结果 -------------------------------------------------- 10 3.总结与说明 ----------------------------------------------------- 11 4.象棋界面实现: ----------------------------------------------- 11 5.对弈功能的实现: -------------------------------------------- 15 参考文献 -------------------------------------------------------------- 16

Java扫雷游戏源代码

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane(); setSize(297,377); this.setBounds(400, 100, 400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new int[row+2][col+2];

C语言知识学习程序源代码-中国象棋

#include #include #include #include #include #include"c:\tc\LIB\1.c" #define W 119 #define S 115 #define A 97 #define D 100 #define space 32 #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 void qipan(); void jiemian(int); void guangbiao1(int,int); void guangbiao2(int,int);

void xuanzhong(int,int); void gaizi(int,int); char array(int,int); void xiazi(int,int,int,int); /*int panding(char,int,int,int,int);*/ main() { int gdriver,gmode,i=0,c=0,x=190,y=190,m,n; char p; FILE *fp; gdriver=DETECT; gmode=0; if((fp=fopen("file.txt","at")) == NULL) { printf("Cannot open file!"); system("pause"); exit(0); } printf("%d,%d",gdriver,gmode); registerbgidriver(EGAVGA_driver);

象棋游戏的开发及测试

华夏学院 课程设计报告书课程名称:软件测试综合设计 题目:象棋游戏的开发及测试系名:信息工程系 专业班级: 姓名: 学号:102128 指导教师:司晓梅 2013 年1 月4 日

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:信息工程系 设计题目:象棋游戏的开发及测试 初始条件: jdk1.5+MyEclipse 要求完成的主要任务: 用Java语言实现一个网络象棋游戏软件,并对实现后的软件进行测试。要求按照IEEE 标准模板给出具体的测试计划书、软件的黑盒测试用例规格说明,并按照测试用例进行测试,提交缺陷报告。 提示:IEEE标准测试文档模板可以参阅人民邮电出版社佟伟光主编的教材《软件测试》 设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册)、运行结果、关键界面截图 6 测试计划说明书、测试用例规格说明、缺陷报告 7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加 注释; 时间安排 12月24日~12月29日完成网络象棋游戏的开发、系统的打包和验收; 1月2 日~1月4日完成测试计划、测试用例的设计、测试缺陷报告的写作,并将以上工作整理成为课程设计报告,于1月4日下午提交课程设计报告。 指导教师签字:2012年 1 月4日

系主任签字:2012年 1 月4日 课程设计报告书 1.设计题目与要求 1.1.设计题目 象棋游戏的开发及测试 1.2.设计要求 实现一个基于网络的象棋游戏,可以让两方在网上进行象棋游戏对战。红方先走,然后黑方走,交替进行。给每个棋子定义标准的走法规则。 对每个棋子的走法规则进行测试,写出各个棋子走法的测试用例。 3.设计思想 中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点,每个棋子都是在棋点上行走。所以要先在画布的具体位置上画出棋盘。10条横线和9条竖线形成90个正方形的小方格,4条对角线构成帅和将的九方格。一个和棋盘背景颜色相同的填充矩形形成红黑方的分界。 楚河汉界将棋盘分成两等份,每一边都有一块有9个点组成的九宫,棋子“将”、“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。中国象棋的“马”不能跳过障碍,即马不能别腿。“车”可以水平或垂直方向移动人一个无障碍的点。“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动 移动棋子,实际上就是监听了鼠标点击相应事件,先选棋子,通过点击了某

Free pascal 中国象棋源代码

Free pascal 中国象棋源代码[By angwuy] 中国象棋的源程序,中文模式下方可使用。 update:对修改程序向原作者angwuy道歉 程序代码: type qp=array[0..9,1..9]of shortint; const es:array['a'..'i']of byte=(1,2,3,4,5,6,7,8,9); se:array[ 1 .. 9 ]of char=('a','b','c','d','e','f','g','h','i'); ci:array['0'..'9']of byte=(0,1,2,3,4,5,6,7,8,9); qz:array[ 1 ..14 ]of string[2]=('車','馬','炮','仕','相','兵','帅','车','马','包','士','象','卒','将'); yqp:qp=(( 8, 9,12,11,14,11,12, 9, 8), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 0,10, 0, 0, 0, 0, 0,10, 0), (13, 0,13, 0,13, 0,13, 0,13), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 6, 0, 6, 0, 6, 0, 6, 0, 6), ( 0, 3, 0, 0, 0, 0, 0, 3, 0), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 1, 2, 5, 4, 7, 4, 5, 2, 1)); var t,sx,sy,ex,ey,bushu:integer; qipan:qp; procedure initqp(var a:qp); var i,j:integer; begin fillchar(a,sizeof(a),0); for i:=1 to 9 do for j:=0 to 9 do a[j,i]:=yqp[j,i]; end; procedure print(q:qp); var i,j:integer; b:array[1..10,1..9]of string[2]; begin writeln; writeln('中国象棋[By angwuy]'); writeln('红:帅仕相車馬炮兵'); writeln('黑:将士象车马包卒');

中国象棋打谱系统

Java课程设计报告题目中国象棋打谱系统 所在院系软件学院 2011年7 月22日

第一章总体设计 1.1本系统的主要功能 本系统可以把对弈过程保存成文件,并可以重新演示对弈过程,可以制作实战棋谱和残局棋谱,并且能够在游戏者进行游戏时播放自己喜欢的歌曲和走棋时的声音,运行程序时还可以弹出另一个具有时钟的窗口,目的在于显示当前的时间,新增加工具和帮助菜单,其中工具菜单里有音量、画质、色彩。其他菜单项,帮助菜单里有有技术问题请咨询R机械095班郝涛广同学的选项 1.2系统包含的类及类之间的关系 本系统共包括13个java源文件。 如图1-1所示。

图1-1 类之间的关系 2.2 java源文件及其功能 1.AudioClipWindow.java 该文件用于播放歌曲的功能 2.CalendarImage.java 该文件用于显示图片 3.ChessBoard.java 该文件负责创建中国象棋打谱系统的棋盘。 4. ChessBox.java 该文件负责创建中国象棋打谱系统棋盘的棋盒。 5. Chesspiece.java 该文件负责创建中国象棋打谱系统棋盘的棋子。 6. Clock.java 该文件负责即时显示时间的钟表窗口,方便用户掌握时间。 7. DemoManuDialog.java 该文件负责演示棋谱,即给出详细棋谱对弈步骤。 8. HandleMouse.java 该文件负责在用户开始对弈时处理鼠标事件,以便用户拖动棋子。 9. InitCanju.java 该文件负责实现用户制作残局棋谱的要求,开局要用户来确定。 10. MoveRule.java 该文件负责验证用户的棋子走法是否符合象棋规则。 11. Point.java 该文件负责确定ChessPiece对象在ChessBoard对象中的位置。

一个象棋手机游戏的源代码

一个象棋手机游戏的源代码.txt生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。import Javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; public class Game extends MIDlet { GameCanvas game;//定义游戏界面的Canvas类GameCanvas的对象gobang public Game() { super(); game=new GameCanvas(this);//生成GameCanvas类的对象game } protected void startApp(){ Display.getDisplay(this).setCurrent(game); //在屏幕上绘出游戏见面game } protected void pauseApp(){ } protected void destroyApp(boolean arg0){ } } 然后就是程序的主题部分了--GameCanvas,这里实现了从画棋盘棋子一直到判定和输出. 我的主题思想是把棋盘初始化为一个2维数组,在有棋子的地方初始化为非0数,其他的都初始化为0; 大家可在代码中看到,在图象输出和棋子移动也都是基于这个数组进行的。 import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class GameCanvas extends Canvas implements CommandListener { protected Game game; protected int empty;//屏幕右侧留的空间 protected int x;//棋盘输出的坐标 protected int cellWidth;//每个棋格的边长 protected int mapWidth,canvasW;//棋盘的宽度和画布的宽度 protected int a,b,c,d;//这是画炮下面的那几个折线,没什么用 protected int chessR;//棋子的半径 protected int selectedX,selectedY;//选择框在棋盘格局上的x,y位置 protected static int i,j; protected int m,n,p;//记住开始的selectedX,selectedY和point[selectedX][selectedY] protected String q;//记住Word[selectedX][selectedY] protected int guard,guard1,guard2,g,g1;//标记FIRE被按了多少次,g是用来判定走直线时前后的棋子,中间是否有其他棋子的累加器

C语言程序源代码---中国象棋

#include #include #include #include #include #include"c:\tc\LIB\1.c" #define W 119 #define S 115 #define A 97 #define D 100 #define space 32 #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 void qipan(); void jiemian(int); void guangbiao1(int,int); void guangbiao2(int,int); void xuanzhong(int,int); void gaizi(int,int); char array(int,int); void xiazi(int,int,int,int); /*int panding(char,int,int,int,int);*/ main() { int gdriver,gmode,i=0,c=0,x=190,y=190,m,n; char p; FILE *fp; gdriver=DETECT; gmode=0; if((fp=fopen("file.txt","at")) == NULL) { printf("Cannot open file!"); system("pause"); exit(0); } printf("%d,%d",gdriver,gmode); registerbgidriver(EGAVGA_driver);

中国象棋对弈系统--Java课程设计

《面向对象程序设计》 课程设计报告 题目:中国象棋对弈软件设计与实现 院(系):信息科学与工程学院 专业班级:计算机科学与技术1201班 学生姓名:程伟 学号:20121183011 指导教师:吴奕 20 14 年 12 月 29 日至20 15 年 1 月 9日 华中科技大学武昌分校制

面向对象程序设计课程设计任务书

目录 1需求与总体设计 (1) 1.1需求分析 (1) 1.2总体设计 (2) 2详细设计 (3) 2.1详细设计思路 (3) 3编码实现 (8) 3.1 源程序代码........................................... 错误!未定义书签。4系统运行与测试 (73) 总结 (77)

1需求与总体设计 各种中国象棋软件的开发与应用,尤其是在网络方面的推广,使得中国象棋得到了很好的宣传,全面展示了中国象棋的风采、优点与特色,同时也让外国人认识到中国象棋这一我国的“国粹”。中国象棋打谱系统正是为这一可行性而开发设计的,玩家可以通过它很好的研究棋谱,学习中国象棋技术,提高水平。 1.1需求分析 实现一个中国象棋对弈的软件,实现中国象棋的规则:棋子共有三十二个,分为红、黑两组,每组十六个,各分七种,其名称和数目如下所述。 (1)红棋子:帅一人,车、马、炮、相、士各两个,兵五个。 (2)黑棋子:将一个,车、马、炮、象、士各两个,卒五个。 (3)在对局时,由执红棋的一方先走,双方轮流各走一着,直至分出胜负或走成和棋为止。轮到走棋的一方,将某个棋子从一个交叉点到另一个空着的交叉点,或者吃掉对方的棋子而占领叉点,都算走了一着。双方各走了一着,称为一个回合。 (4)帅(将)每一着只许走一步,前进、后退、横走都可以,但不能走出“九宫”。帅和将不准在同一直线上直接对面,如一方已先占据,另一方必须回避。 (5)士每一着只许沿“九宫”斜线走一步,可进可退。 相(象)不能越过“河界”,每一着斜走两步,可进可退,即俗称相(象)走田字。当田字中心有别的棋子时,俗称塞相(象)眼,则不行走过去。 (6)马每着走一直(或一横)一斜,可进可退,即俗称“马走日字”。如果在要去方向紧靠一直(或一横)的地方,有别的棋子挡住,俗称“蹩马腿”,就不能走过去。 (7)车每一着可以直进、直退、横走,不限步数。 (8)炮在不吃子的时候,走法同车一样。 (9)兵(卒)在没有过“河界”前,每着只许向前直走一步;过“河界”后,每着可以向前走一步,也可以横走一步,但不能后退。走一着棋时,如果己方棋子能够走到的位置有对方棋子存在,就可把对棋子吃掉而占领那个位置。只有炮吃了必须隔一个棋子(无论是哪一方的)跳吃,即俗称“炮打隔子”。除帅(将)外,其它棋子都可以听任对方吃,或主动送吃。一方的棋子攻击对方的帅(将),并在下一着要把它吃掉,称为“将军”,或简称“将”。被“将军”的一方必须立即“应将”,即用自卫的着法去化解被“将”的状态。如果被“将军”而无法“应将”,就算被“将死”。轮到走棋的一方,帅(将)虽没被对方“将军”,却被禁在一个位置上无路可走,同时己方其它棋子也都不能走动,就算被“困毙”。

中国象棋实验报告

本科学生综合性实验报告课程名称:Java程序设计 中国象棋 项目成员学号 班级B02班 项目名称中国象棋 指导教师 开课学期2013 至2014 学年第1 学期 完成时间2013 年12 月25 日

1.引言 (1) 1.1开发背景 (1) 1.2国内外象棋发展状况 (1) 1.3开发目标 (2) 1.4开发环境 (2) 2.设计思路 (2) 2.1设计步骤 (2) 2.2设计流程图 (3) 3.设计技术 (3) 3.1io技术 (3) 3.2多线程 (4) 3.3swing (4) 4.设计规则 (4) 4.1走棋规则 (4) 4.2吃棋规则 (4) 5.代码实现 (4) 6.程序测试 (5) 6.1步骤一:点击运行 (5) 6.2步骤二: (6) 7.总结与提升 (10)

1.引言 1.1开发背景 中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。 中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。 1.2国内外象棋发展状况 中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。 中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。

中国象棋复盘

河北工业大学计算机软件技术基础(VB) 课程设计任务书 本题难度级别:A 实现基本要求代码: 约230行主要涉及: 基本控件、算法、文件操作一、设计题目:中国象棋复盘(出题人:曹新国) 因题目中涉及象棋规则,不会下棋的不要选。 二、目的与要求 1.目的 培养学生综合利用VB语言进行程序设计的 能力,主要是利用VB的标准控件进行界面设计, 用VB的文件功能读取文件内容并进行处理。 2.基本要求 装载一个文本棋谱文件,按照棋谱的内容 将弈棋过程复现出来。详细要求如下: ?能够装载任意一个与联众中国象棋游 戏存盘文本文件格式兼容的棋谱文件。 ?装载棋谱后先暂停,点开始后再出现所有棋子,然后进行计时并可以走子。复盘过程中可以随时点开始并能返回初始状态。 ?每走一步,按照棋谱中的指令在棋盘上吃子或者更改棋子的位置,棋子可以以图片形式表现,也可以用标签标明棋子所在位置。 ?可以利用下一步或者上一步来回进行研究。根据当前进度,要自动禁止不可用的钮。 ?支持直接定位功能,可以通过双击棋谱列表中的任意一行让布局呈现此招前的状态。 ?棋局开始后,有标志(一个闪烁的“将”或“帅”的图标)指示当前的行棋方。 ◆为了能仔细分析棋局,可以通过点击时间显示标签暂停/恢复自动走棋。 ◆支持自动演示,5秒钟不手动走子则自动走子。双击时间显示标签可进行设置,设置有效范围为1-60秒(因为可以暂停/恢复,不需要太长,否则就不是象棋而是相面了)。 ◆能够表示当前着法涉及到棋子的移动起止位置,以闪烁方框或者其它形式。 ◆支持键盘热键操作,例如:上一步,下一步,打开文件,退出等。 3.创新要求 在基本要求达到后,进行创新设计,创新方向提示如下: ★给程序增加换棋盘和换棋子功能。如果是文字表示,改变字体属性即可,如果以图像方式表示棋盘和棋子,设计素材中提供了两个棋盘和两套棋子的图片可供使用。 ★拖放棋谱文件到本程序图标能够实现自动运行程序并直接打开棋谱。 ★直接将棋谱文件拖入界面上的棋谱列表框能够装载棋谱(即不用打开文件对话框)。 ★增加走棋时的声音效果:分为落子、吃子和将军三种不同声音。(设计素材中已经提供了三种不同的声音文件,也可以自行加上开局和终局声音效果) ★支持换边。即可以将红方和黑方的位置进行交换。 ★增加鼠标直拖棋子功能,即可以随时将任意一个棋子拖动到其它位置方便分析拆解。(设计素材中已经提供了手形光标文件,可直接利用) ★支持人工单机对弈模式(需要先完成上一个要求),对弈时可以记录行棋过程并可存成自身能处理的棋谱文件。 ★实现人机对弈功能。(素材中提供了VB和VC的源程序,可供参考)

相关主题