android中国象棋源代码

android中国象棋源代码
android中国象棋源代码

ChessActivity.java

package wyf.ytl;

import android.app.Activity;//引入相关的包

import android.media.MediaPlayer;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.Window;

import android.view.WindowManager;

public class ChessActivity extends Activity {

boolean isSound = true;//是否播放声音

MediaPlayer startSound;//开始和菜单时的音乐

MediaPlayer gamesound;//游戏声音

Handler myHandler = new Handler(){//用来更新UI线程中的控件

public void handleMessage(Message msg) {

if(msg.what == 1){ //WelcomeView或HelpView或GameView传来的消息,切换到MenuView

initMenuView();//初始化并切换到菜单界面

}

else if(msg.what == 2){//MenuView传来的消息,切换到GameView

initGameView();//初始化并切换到游戏界面

}

else if(msg.what == 3){//MenuView传来的消息,切换到HelpView

initHelpView();//初始化并切换到帮助界面

}

}

};

public void onCreate(Bundle savedInstanceState) {//重写的onCreate super.onCreate(savedInstanceState);

//全屏

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(https://www.360docs.net/doc/8717612883.html,youtParams.FLAG_FULLSCREEN,

https://www.360docs.net/doc/8717612883.html,youtParams.FLAG_FULLSCREEN);

startSound = MediaPlayer.create(this, R.raw.startsound);//加载欢迎声音

startSound.setLooping(true);//设置游戏声音循环播放

gamesound = MediaPlayer.create(this, R.raw.gamesound);//游戏过程的背景声音

gamesound.setLooping(true);//设置游戏声音循环播放

this.initWelcomeView();//初始化欢迎界面

}

public void initWelcomeView(){//初始化欢迎界面

this.setContentView(new WelcomeView(this,this));//切换到欢迎界面

if(isSound){//需要播放声音时

startSound.start();//播放声音

}

}

public void initGameView(){//初始化游戏界面

this.setContentView(new GameView(this,this)); //切换到游戏界面

}

public void initMenuView(){//初始化菜单界面

if(startSound != null){//停止

startSound.stop();//停止播放声音

startSound = null;

}

if(this.isSound){//是否播放声音

gamesound.start();//播放声音

}

this.setContentView(new MenuView(this,this));//切换View

}

public void initHelpView(){//初始化帮助界面

this.setContentView(new HelpView(this,this));//切换到帮助界面

}

} 222222222222222222222222222222222222222222222222222222222222222222222222222222 ChessMove.java

package wyf.ytl;

/**

* 该类为棋子的一个走法

* 包含是什么棋子

* 起始点的位置

* 目标点的位置

* 以及估值时所用到的score

*/

public class ChessMove {

int ChessID;//表明是什么棋子

int fromX;//起始的坐标

int fromY;

int toX;//目的地的坐标

int toY;

int score;//值,估值时会用到

public ChessMove(int ChessID, int fromX,int fromY,int toX,int toY,int score){//构造器

this.ChessID = ChessID;//棋子的类型

this.fromX = fromX;//棋子的起始坐标

this.fromY = fromY;

this.toX = toX;//棋子的目标点x坐标

this.toY = toY;//棋子的目标点y坐标

this.score = score;

}

} 33333333333333333333333333333333333333333333333333333333333333333333333 GameView.java

package wyf.ytl;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.media.MediaPlayer;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

/**

* 该类是整个程序最主要的类,是主游戏的界面

* 该界面继承自SurfaceView并实现了SurfaceHolder.Callback接口

* 其中包含了一个刷帧的线程类

*

*/

public class GameView extends SurfaceView implements SurfaceHolder.Callback{

private TutorialThread thread;//刷帧的线程

TimeThread timeThread ;

ChessActivity activity;//声明Activity的引用

Bitmap qiPan;//棋盘

Bitmap qizibackground;//棋子的背景图片

Bitmap win;//胜利的图片

Bitmap lost;//失败的图片

Bitmap ok;//确定按钮

Bitmap vs;//黑方红方VS的图片

Bitmap right;//向右的指针

Bitmap left;//向左的指针

Bitmap current;//“当前”文字

Bitmap exit2;//退出按钮图片

Bitmap sound2;//声音按钮图片

Bitmap sound3;//当前是否播放了声音

Bitmap time;//冒号

Bitmap redtime;//红色冒号

Bitmap background;//背景图片

MediaPlayer go;//下棋声音

Paint paint;//画笔

boolean caiPan = true;//是否为玩家走棋

boolean focus = false;//当前是否有选中的棋子

int selectqizi = 0; //当然选中的棋子

int startI, startJ;//记录当前棋子的开始位置

int endI, endJ;//记录当前棋子的目标位置

Bitmap[] heiZi = new Bitmap[7];//黑子的图片数组

Bitmap[] hongZi = new Bitmap[7];//红子的图片数组

Bitmap[] number = new Bitmap[10];//数字的图片数组,用于显示时间

Bitmap[] redNumber = new Bitmap[10];//红色数字的图片,用于显示时间GuiZe guiZe;//规则类

int status = 0;//游戏状态。0游戏中,1胜利, 2失败

int heiTime = 0;//黑方总共思考时间

int hongTime = 0;//红方总共思考时间

int[][] qizi = new int[][]{//棋盘

{2,3,6,5,1,5,6,3,2},

{0,0,0,0,0,0,0,0,0},

{0,4,0,0,0,0,0,4,0},

{7,0,7,0,7,0,7,0,7},

{0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0},

{14,0,14,0,14,0,14,0,14},

{0,11,0,0,0,0,0,11,0},

{0,0,0,0,0,0,0,0,0},

{9,10,13,12,8,12,13,10,9},

};

public GameView(Context context,ChessActivity activity) {//构造器super(context);

this.activity = activity;//得到Activity的引用

getHolder().addCallback(this);

go = MediaPlayer.create(this.getContext(), R.raw.go);//加载下棋的

声音

this.thread = new TutorialThread(getHolder(), this);//初始化刷帧线程

this.timeThread = new TimeThread(this);//初始化思考时间的线程

init();//初始化所需资源

guiZe = new GuiZe();//初始化规则类

}

public void init(){//初始化方法

paint = new Paint();//初始化画笔

qiPan= BitmapFactory.decodeResource(getResources(), R.drawable.qipan);//棋盘图片

qizibackground= BitmapFactory.decodeResource(getResources(), R.drawable.qizi);//棋子的背景

win= BitmapFactory.decodeResource(getResources(), R.drawable.win);//胜利的图片

lost= BitmapFactory.decodeResource(getResources(), R.drawable.lost);//失败的图片

ok= BitmapFactory.decodeResource(getResources(), R.drawable.ok);//确定按钮图片

vs= BitmapFactory.decodeResource(getResources(), R.drawable.vs);//vs字样的图片

right= BitmapFactory.decodeResource(getResources(), R.drawable.right);//向右的指针

left= BitmapFactory.decodeResource(getResources(), R.drawable.left);//向左的指针

current= BitmapFactory.decodeResource(getResources(), R.drawable.current);//文字“当前”

exit2= BitmapFactory.decodeResource(getResources(), R.drawable.exit2);//退出按钮图片

sound2= BitmapFactory.decodeResource(getResources(), R.drawable.sound2);//声音按钮图片

time= BitmapFactory.decodeResource(getResources(), R.drawable.time);//黑色冒号

redtime= BitmapFactory.decodeResource(getResources(), R.drawable.redtime);//红色冒号

sound3= BitmapFactory.decodeResource(getResources(), R.drawable.sound3);

heiZi[0] = BitmapFactory.decodeResource(getResources(), R.drawable.heishuai);//黑帅

heiZi[1] = BitmapFactory.decodeResource(getResources(), R.drawable.heiju);//黑车

heiZi[2] = BitmapFactory.decodeResource(getResources(),

R.drawable.heima);//黑马

heiZi[3] = BitmapFactory.decodeResource(getResources(), R.drawable.heipao);//黑炮

heiZi[4] = BitmapFactory.decodeResource(getResources(), R.drawable.heishi);//黑士

heiZi[5] = BitmapFactory.decodeResource(getResources(), R.drawable.heixiang);//黑象

heiZi[6] = BitmapFactory.decodeResource(getResources(), R.drawable.heibing);//黑兵

hongZi[0] = BitmapFactory.decodeResource(getResources(), R.drawable.hongjiang);//红将

hongZi[1] = BitmapFactory.decodeResource(getResources(), R.drawable.hongju);//红车

hongZi[2] = BitmapFactory.decodeResource(getResources(), R.drawable.hongma);//红马

hongZi[3] = BitmapFactory.decodeResource(getResources(), R.drawable.hongpao);//红砲

hongZi[4] = BitmapFactory.decodeResource(getResources(), R.drawable.hongshi);//红仕

hongZi[5] = BitmapFactory.decodeResource(getResources(), R.drawable.hongxiang);//红相

hongZi[6] = BitmapFactory.decodeResource(getResources(), R.drawable.hongzu);//红卒

number[0] = BitmapFactory.decodeResource(getResources(), R.drawable.number0);//黑色数字0

number[1] = BitmapFactory.decodeResource(getResources(), R.drawable.number1);//黑色数字1

number[2] = BitmapFactory.decodeResource(getResources(), R.drawable.number2);//黑色数字2

number[3] = BitmapFactory.decodeResource(getResources(), R.drawable.number3);//黑色数字3

number[4] = BitmapFactory.decodeResource(getResources(), R.drawable.number4);//黑色数字4

number[5] = BitmapFactory.decodeResource(getResources(), R.drawable.number5);//黑色数字5

number[6] = BitmapFactory.decodeResource(getResources(), R.drawable.number6);//黑色数字6

number[7] = BitmapFactory.decodeResource(getResources(), R.drawable.number7);//黑色数字7

number[8] = BitmapFactory.decodeResource(getResources(), R.drawable.number8);//黑色数字8

number[9] = BitmapFactory.decodeResource(getResources(),

R.drawable.number9);//黑色数字9

redNumber[0] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber0);//红色数字0

redNumber[1] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber1);//红色数字1

redNumber[2] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber2);//红色数字2

redNumber[3] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber3);//红色数字3

redNumber[4] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber4);//红色数字4

redNumber[5] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber5);//红色数字5

redNumber[6] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber6);//红色数字6

redNumber[7] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber7);//红色数字7

redNumber[8] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber8);//红色数字8

redNumber[9] = BitmapFactory.decodeResource(getResources(), R.drawable.rednumber9);//红色数字9

background= BitmapFactory.decodeResource(getResources(), R.drawable.bacnground);

}

/**

* 该方法是自己定义的并非重写的

* 该方法是死的,只根据数据绘制屏幕

*/

public void onDraw(Canvas canvas){//自己写的绘制方法

canvas.drawColor(Color.WHITE);

canvas.drawBitmap(background, 0,0, null);//清背景

canvas.drawBitmap(qiPan, 10, 10, null);//绘制棋盘

for(int i=0; i

for(int j=0; j

if(qizi[i][j] != 0){

canvas.drawBitmap(qizibackground, 9+j*34, 10+i*35, null);//绘制棋子的背景

if(qizi[i][j] == 1){//为黑帅时

canvas.drawBitmap(heiZi[0], 12+j*34, 13+i*35, paint);

else if(qizi[i][j] == 2){//为黑车时

canvas.drawBitmap(heiZi[1], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 3){//为黑马时

canvas.drawBitmap(heiZi[2], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 4){//为黑炮时

canvas.drawBitmap(heiZi[3], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 5){//为黑士时

canvas.drawBitmap(heiZi[4], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 6){//为黑象时

canvas.drawBitmap(heiZi[5], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 7){//为黑兵时

canvas.drawBitmap(heiZi[6], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 8){//为红将时

canvas.drawBitmap(hongZi[0], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 9){//为红车时

canvas.drawBitmap(hongZi[1], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 10){//为红马时

canvas.drawBitmap(hongZi[2], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 11){//为红砲时

canvas.drawBitmap(hongZi[3], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 12){//为红仕时

canvas.drawBitmap(hongZi[4], 12+j*34, 13+i*35, paint);

else if(qizi[i][j] == 13){//为红相时

canvas.drawBitmap(hongZi[5], 12+j*34, 13+i*35, paint);

}

else if(qizi[i][j] == 14){//为红卒时

canvas.drawBitmap(hongZi[6], 12+j*34, 13+i*35, paint);

}

}

}

}

canvas.drawBitmap(vs, 10, 360, paint);//绘制VS背景图

//绘制黑方的时间

canvas.drawBitmap(time, 81, 411, paint);//绘制冒号

int temp = this.heiTime/60;//换算时间

String timeStr = temp+"";//转换成字符串

if(timeStr.length()<2){//当不足两位时前面填0

timeStr = "0" + timeStr;

}

for(int i=0;i<2;i++){//循环绘制时间

int tempScore=timeStr.charAt(i)-'0';

canvas.drawBitmap(number[tempScore], 65+i*7, 412, paint);

}

//画分钟

temp = this.heiTime%60;

timeStr = temp+"";//转换成字符串

if(timeStr.length()<2){

timeStr = "0" + timeStr;//当长度小于2时在前面添加一个0 }

for(int i=0;i<2;i++){//循环

int tempScore=timeStr.charAt(i)-'0';

canvas.drawBitmap(number[tempScore], 85+i*7, 412, paint);//绘制

}

//开始绘制红方时间

canvas.drawBitmap(this.redtime, 262, 410, paint);//红方的冒号

int temp2 = this.hongTime/60;//换算时间

String timeStr2 = temp2+"";//转换成字符串

if(timeStr2.length()<2){//当不足两位时前面填0

timeStr2 = "0" + timeStr2;

}

for(int i=0;i<2;i++){//循环绘制时间

int tempScore=timeStr2.charAt(i)-'0';

canvas.drawBitmap(redNumber[tempScore], 247+i*7, 411, paint);//绘制

}

//画分钟

temp2 = this.hongTime%60;//求出当前的秒数

timeStr2 = temp2+"";//转换成字符串

if(timeStr2.length()<2){//不足两位时前面用0补

timeStr2 = "0" + timeStr2;

}

for(int i=0;i<2;i++){//循环绘制

int tempScore=timeStr2.charAt(i)-'0';

canvas.drawBitmap(redNumber[tempScore], 267+i*7, 411, paint);//绘制时间数字

}

if(caiPan == true){//当该玩家走棋时,即红方走棋

canvas.drawBitmap(right, 155, 420, paint);//绘制向右的指针}

else{//黑方走棋,即电脑走棋时

canvas.drawBitmap(left, 120, 420, paint);//绘制向左的指针}

canvas.drawBitmap(current, 138, 445, paint);//绘制当前文字

canvas.drawBitmap(sound2, 10, 440, paint);//绘制声音

if(activity.isSound){//如果正在播放声音

canvas.drawBitmap(sound3, 80, 452, paint);//绘制

}

canvas.drawBitmap(exit2, 250, 440, paint);//绘制退出按钮

if(status == 1){//当胜利时

canvas.drawBitmap(win, 85, 150, paint);//绘制胜利图片

canvas.drawBitmap(ok, 113, 240, paint);

}

if(status == 2){//失败后

canvas.drawBitmap(lost, 85, 150, paint);//绘制失败界面

canvas.drawBitmap(ok, 113, 236, paint);

}

}

/**

* 该方法是游戏主要逻辑接口

* 接受玩家输入

* 根据点击的位置和当前的游戏状态做出相应的处理

* 而当需要切换View时,通过给Activity发送Handler消息来处理

* 注意的是只取屏幕被按下的事件

*/

@Override

public boolean onTouchEvent(MotionEvent event) {//重写的屏幕监听if(event.getAction() == MotionEvent.ACTION_DOWN){//只取鼠标按下的事件

if(event.getX()>10&&event.getX()<10+sound2.getWidth()

&& event.getY()>440 && event.getY()<440+sound2.getHeight()){//按下了声音按钮

activity.isSound = !activity.isSound;//声音取反

if(activity.isSound){//当需要放声音时

if(activity.gamesound != null){//gamesound不为空时

if(!activity.gamesound.isPlaying()){//当前没有音乐时

activity.gamesound.start();//播放音乐

}

}

}

else{

if(activity.gamesound != null){//gamesound不为空时

if(activity.gamesound.isPlaying()){//当前有音乐时

activity.gamesound.pause();//停止音乐

}

}

}

}//end 按下了声音按钮

if(event.getX()>250&&event.getX()<250+exit2.getWidth()

&& event.getY()>440 && event.getY()<440+exit2.getHeight()){//按下了退出按钮

activity.myHandler.sendEmptyMessage(1);//发送消息,切换到MenuView

}

if(status == 1){//胜利后

if(event.getX()>135&&event.getX()<190

&& event.getY()>249 && event.getY()<269){//点击了确定按钮

activity.myHandler.sendEmptyMessage(1);//发送消息,切换到MenuView

}

}

else if(status == 2){//失败后

if(event.getX()>135&&event.getX()<190

&& event.getY()>245 && event.getY()<265){//点击了确定按钮

activity.myHandler.sendEmptyMessage(1);//发送消息,切换到MenuView

}

}

/**

* 游戏过程中的逻辑处理

* 当点击棋盘时,先判断当前是否为玩家走棋,

* 然后再判断当然玩家是否已经有选中的棋子,如果没有则选中

* 如果之前有选中的棋子,再判断点击的位置是空地、对方棋子还是自己的棋子

* 是空地判断是否可走

* 是对方棋子同样判断是否可以走,能走自然吃子

* 是自己的棋子则选中该棋子

*/

else if(status == 0){//游戏中时

if(event.getX()>10&&event.getX()<310

&& event.getY()>10 && event.getY()<360){//点击的位置在棋盘内时

if(caiPan == true){//如果是该玩家走棋

int i = -1, j = -1;

int[] pos = getPos(event);//根据坐标换算成所在的行和列

i = pos[0];

j = pos[1];

if(focus == false){//之前没有选中的棋子

if(qizi[i][j] != 0){//点击的位置有棋子

if(qizi[i][j] > 7){//点击的是自己的棋子。即下面的黑色棋子

selectqizi = qizi[i][j];//将该棋子设为选中的棋子

focus = true;//标记当前有选中的棋子

startI = i;

startJ = j;

}

}

}

else{//之前选中过棋子

if(qizi[i][j] != 0){//点击的位置有棋子

if(qizi[i][j] > 7){//如果是自己的棋子.

selectqizi = qizi[i][j];//将该棋子设为选中的棋子

startI = i;

startJ = j;

}

else{//如果是对方的棋子

endI = i;

endJ = j;//保存该点

boolean canMove = guiZe.canMove(qizi, startI, startJ, endI, endJ);

if(canMove){//如果可以移动过去

caiPan = false;//不让玩家走了

if(qizi[endI][endJ] == 1 || qizi[endI][endJ] == 8){//如果是“帅”或“将”

this.success();//胜利了

}

else{

if(activity.isSound){

go.start();//播放下棋声音

}

qizi[endI][endJ] = qizi[startI][startJ];//移动棋子

qizi[startI][startJ] = 0;//将原来处设空

startI = -1;

startJ = -1;

endI = -1;

endJ = -1;//还原保存点

focus= false;//标记当前没有选中棋子

ChessMove cm = guiZe.searchAGoodMove(qizi);//根据当前局势查询一个最好的走法

if(activity.isSound){

go.start();//播放下棋声音

}

qizi[cm.toX][cm.toY] = qizi[cm.fromX][cm.fromY];//移动棋子

qizi[cm.fromX][cm.fromY] = 0;

caiPan = true;//恢复玩家响应

}

}

}

}//end点击的位置有棋子

else{//如果点击的位置没有棋子

endI = i;

endJ = j;

boolean canMove = guiZe.canMove(qizi, startI, startJ, endI, endJ);//查看是否可走

if(canMove){//如果可以移动

caiPan = false;//不让玩家走了

if(activity.isSound){

go.start();//播放下棋声音

}

qizi[endI][endJ] = qizi[startI][startJ];//移动棋子

qizi[startI][startJ] = 0;//将原来处置空

startI = -1;

startJ = -1;

endI = -1;

endJ = -1;//还原保存点

focus = false;//标志位设false

ChessMove cm = guiZe.searchAGoodMove(qizi);//得到一步走法

if(qizi[cm.toX][cm.toY] == 8){//电脑吃了您的将

status = 2;//切换游戏状态为失败

}

if(activity.isSound){//需要播放声音时

go.start();//播放下棋声音

}

qizi[cm.toX][cm.toY] = qizi[cm.fromX][cm.fromY];//移动棋子

qizi[cm.fromX][cm.fromY] = 0;

caiPan = true;//恢复玩家响应

}

}

}//end 之前选中过棋子

}

}//end点击的位置在棋盘内时

}//end游戏中时

}

return super.onTouchEvent(event);

}

public int[] getPos(MotionEvent e){//将坐标换算成数组的维数

int[] pos = new int[2];

double x = e.getX();//得到点击位置的x坐标

double y = e.getY();//得到点击位置的y坐标

if(x>10 && y>10 && x<10+qiPan.getWidth() && y<10+qiPan.getHeight()){//点击的是棋盘时

pos[0] = Math.round((float)((y-21)/36));//取得所在的行

pos[1] = Math.round((float)((x-21)/35));//取得所在的列}

else{//点击的位置不是棋盘时

pos[0] = -1;//将位置设为不可用

pos[1] = -1;

}

return pos;//将坐标数组返回

}

public void success(){//胜利了

status = 1;//切换到胜利状态

}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

public void surfaceCreated(SurfaceHolder holder) {//重写的

this.thread.setFlag(true);

this.thread.start();//启动刷帧线程

timeThread.setFlag(true);

timeThread.start();//启动思考时间的线程

}

public void surfaceDestroyed(SurfaceHolder holder) {//view被释放时调用的

boolean retry = true;

thread.setFlag(false);//停止刷帧线程

timeThread.setFlag(false);//停止思考时间线程

while (retry) {

try {

thread.join();

timeThread.join();//等待线程结束

retry = false;//设置循环标志位为false

}

catch (InterruptedException e) {//不断地循环,直到等待的线程结束 }

}

}

class TutorialThread extends Thread{//刷帧线程

private int span = 300;//睡眠的毫秒数

private SurfaceHolder surfaceHolder;//SurfaceHolder的引用

private GameView gameView;//gameView的引用

private boolean flag = false;//循环标志位

public TutorialThread(SurfaceHolder surfaceHolder, GameView gameView) {//构造器

this.surfaceHolder = surfaceHolder;//得到SurfaceHolder引用

this.gameView = gameView;//得到GameView的引用

}

public void setFlag(boolean flag) {//设置循环标记

this.flag = flag;

}

public void run() {//重写的方法

Canvas c;//画布

while (this.flag) {//循环绘制

c = null;

try {

c = this.surfaceHolder.lockCanvas(null);

synchronized (this.surfaceHolder) {

gameView.onDraw(c);//调用绘制方法

}

} finally {//用finally保证下面代码一定被执行

if (c != null) {

//更新屏幕显示内容

this.surfaceHolder.unlockCanvasAndPost(c);

}

}

try{

Thread.sleep(span);//睡眠span毫秒

}catch(Exception e){//不会异常信息

e.printStackTrace();//打印异常堆栈信息

}

}

}

}

} 44444444444444444444444444444444444444444444444444444444444444444444444 GuiZe.java

package wyf.ytl;

import java.util.ArrayList;//引入相关包

import java.util.List;

/**

*

* 该类是象棋的规则类,其他类通过调用canMove方法给出起始位置与结束位置

* 其他类通过调用searchAGoodMove方法得到最当然棋局最好的走法

* 而其中的allPossibleMoves方法得到的是当前棋局的所有的走法

*

public class GuiZe {

boolean isRedGo = false;//是不是红方走棋

public boolean canMove(int[][] qizi, int fromY, int fromX, int toY, int toX){

int i = 0;

int j = 0;

int moveChessID;//起始位置是什么棋子

int targetID;//目的地是什么棋子或空地

if(toX<0){//当左边出界时

return false;

}

if(toX>8){//当右边出界时

return false;

}

if(toY<0){//当上边出界时

return false;

}

if(toY>9){//当下边出界时

return false;

}

if(fromX==toX && fromY==toY){//目的地与出发点相同,

return false;

}

moveChessID = qizi[fromY][fromX];//得到起始棋子

targetID = qizi[toY][toX];//得带终点棋子

if(isSameSide(moveChessID,targetID)){//如果是同一阵营的

return false;

}

switch(moveChessID){

case 1://黑帅

if(toY>2||toX<3||toX>5){//出了九宫格

return false;

}

if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步

return false;

}

break;

case 5://黑士

if(toY>2||toX<3||toX>5){//出了九宫格

return false;

}

if(Math.abs(fromY-toY) != 1 || Math.abs(toX-fromX) != 1){//

return false;

}

break;

case 6://黑象

if(toY>4){//不能过河

return false;

}

if(Math.abs(fromX-toX) != 2 || Math.abs(fromY-toY) != 2){//相走“田”字

return false;

}

if(qizi[(fromY+toY)/2][(fromX+toX)/2] != 0){

return false;//相眼处有棋子

}

break;

case 7://黑兵

if(toY < fromY){//不能回头

return false;

}

if(fromY<5 && fromY == toY){//过河前只能直走

return false;

}

if(toY - fromY + Math.abs(toX-fromX) > 1){//只能走一步,并且是直线

return false;

}

break;

case 8://红将

if(toY<7||toX>5||toX<3){//出了九宫格

return false;

}

if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步

return false;

}

break;

case 2://黑车

case 9://红车

if(fromY != toY && fromX != toX){//只能走直线

return false;

}

if(fromY == toY){//走横线

if(fromX < toX){//向右走

for(i = fromX + 1; i < toX; i++){//循环

if(qizi[fromY][i] != 0){

return false;//返回false

}

}

}

else{//向左走

for(i = toX + 1; i < fromX; i++){//循环

if(qizi[fromY][i] != 0){

return false;//返回false

}

}

}

}

else{//走的是竖线

if(fromY < toY){//向右走

for(j = fromY + 1; j < toY; j++){

if(qizi[j][fromX] != 0)

return false;//返回false

}

}

else{//想左走

for(j= toY + 1; j < fromY; j++){

if(qizi[j][fromX] != 0)

return false;//返回false

}

}

}

break;

case 10://红马

case 3://黑马

if(!((Math.abs(toX-fromX)==1 && Math.abs(toY-fromY)==2)

|| (Math.abs(toX-fromX)==2 && Math.abs(toY-fromY)==1))){

return false;//马走的不是日字时

}

if(toX-fromX==2){//向右走

i=fromX+1;//移动

j=fromY;

}

else if(fromX-toX==2){//向左走

i=fromX-1;//移动

j=fromY;

}

else if(toY-fromY==2){//向下走

i=fromX;//移动

j=fromY+1;

}

else if(fromY-toY==2){//向上走

i=fromX;//移动

j=fromY-1;

}

if(qizi[j][i] != 0)

return false;//绊马腿

break;

case 11://红砲

case 4://黑炮

if(fromY!=toY && fromX!=toX){//炮走直线

return false;//返回false

}

if(qizi[toY][toX] == 0){//不吃子时

if(fromY == toY){//横线

if(fromX < toX){//想右走

for(i = fromX + 1; i < toX; i++){

if(qizi[fromY][i] != 0){

return false;//返回false

}

}

}

else{//向走走

for(i = toX + 1; i < fromX; i++){

if(qizi[fromY][i]!=0){

return false;//返回false

}

}

}

}

else{//竖线

if(fromY < toY){//向下走

for(j = fromY + 1; j < toY; j++){

if(qizi[j][fromX] != 0){

return false;//返回false

}

}

}

else{//向上走

中国象棋源代码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;

Android实现文章+评论

Android实现文章+评论(MVP,RxJava,Dagger2,ButterKnife) 简介 这个项目主要有两个功能,一个加载网页/文章,另一个用来显示评论。并应用了MVP模式,Dagger2、RxJava、ButterKnife等开源框架。 demo 结构 首先来看一下布局文件:

中国象棋算法

解剖大象的眼睛——中国象棋程序设计探索 黄晨*2005年6月 ( * 联系地址:复旦大学化学系表面化学实验室,eMail:morning_yellow@elephantbas https://www.360docs.net/doc/8717612883.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目前的棋力?

基于Android平台的菜谱实现

基于Android平台的菜谱实现 1需求分析 随着手机的广泛普及,无线技术的突飞猛进,移动生活、移动办公逐渐由概念转变为现实,对于传统的餐饮业也产生了潜移默化的影响。 目前,大多数餐厅仍然以传统的纸质菜单为主。但是,这种点菜方式存在诸多弊端:从消费者角度来讲,菜谱不能及时更新,导致菜谱信息陈旧,点菜时经常出现某菜品已下架等情况。 用户需求:从餐厅老板来说,及时更新纸质的菜谱,无疑会增加餐厅的额外支出。为了改善传统纸质菜谱的弊端,将菜谱应用于手机客户端,为消费者带来更为便利的客户体验。而实时的菜品更新,不仅解决了纸质菜谱短时间内就出现脏、乱、差的问题,实现餐厅无纸化操作,而且潜在的提升了饭店的形象。 功能需求:用户可以进入菜单界面选择菜品分类,进入相应的分类内,查看该分类中的菜品信息,并对菜品的等级程度进行评价,查询某特定菜品,也可添加新菜品,删除菜品等。 2功能实现 本APP基于自身的需求,同时对西北大学周围众多餐厅现状的合理分析,结合实际,设计并实现了一个基于移动手机平台的智能菜谱显示,该系统的设计基于Android智能操作系统,简单的SQLite数据库,实现了对菜品的增、删、查、改各个功能。 消费者可以添加要点的菜品,在餐后可以对菜品的口味及好感程度进行具体化的评价,这样是对餐厅工作人员的一个回馈,同时也可以为其他消费者就餐提供建议。 2.1主界面 1、实现了对菜品的具体分类。如图2-1

图2-1 单击所选择的菜品分类,出现菜品的镜像显示,为消费者提供更为直观的视觉效果,有助于消费者做出选择。如图2-2 图2-2 2、是进入菜品显示的入口,同时也显示了该软件的使用方法如图2-3:

基于Android的电子书的设计与实现

论文题目基于Android的电子书的设计与实现 姓名** 学院** 专业** 指导教师** 备注

基于Android的电子书的设计与实现 作者姓名: ** 指导教师: ** 单位名称:计算机科学与技术系 专业名称:**

Design and Implementation of Ebook Based on Android by Supervisor: **

毕业设计(论文)任务书 毕业设计(论文)题目: 基于Android的电子书的设计与实现 设计(论文)的基本内容: 基于Android的在线电子书在手机的应用领域有着重要的作用。通过结合当前最流行的轻量级框架SSH作为后台,后台添加电子书。Mysql作为数据库,然后客服端通过JSON数据和服务器进行交互,前台实现浏览电子书分类,然后选择电子书的标题,就可以进行在线阅览!服务端部署在tomcat上,就可以实现在任何地方浏览书籍,文章。 本软件是基于Android 和 SSH框架上开发的软件。Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM 的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 毕业设计(论文)专题部分: 题目: 设计或论文专题的基本内容: 学生接受毕业设计(论文)题目日期 第 1 周 指导教师签字:

象棋游戏的设计与实现

象棋游戏的设计与实现

目录 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类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。 本文的目标是实现一款有着一定下棋水平且交互友好的中国象棋人机对弈程序。 该程序功能包括: *人机对弈; *搜索深度设定; (电脑棋力选择)

基于Android平台的管理系统设计与实现

基于Android平台的管理系统设计与实现

基于Android平台的 管理系统设计与实现 院系:信息科学与工程学院 专业班:计算机科学与技术班 姓名: 学号: 指导教师: 201 年月

基于Android平台的 管理系统设计与实现Design and Implementation of Online Management System Based on the Android Platform

摘要 基于Android平台的网上超市管理系统是结合当前最流行的移动平台开发的电子商务系统。本系统是PC端电商网站在Android平台的延伸,除了传统电商网站能够实现的各项基本功能之外还具有使用简单,操作方便等优点。利用本系统可以为超市的销售提供新的渠道。 本系统的开发运用了基于Java的Android SDK技术,系统采用C/S(客户端/服务器)结构实现。开发所采用的IDE为MyEclipse 10并安装由Google提供的Android Developer Tools。系统运行环境为Android版本4.0以上的移动设备。 本系统在电商网站的基础上完成了移动平台功能的设计,使用户能够在手机上方便的进行传统电商网站上所能完成的大部分操作。本系统的优点在于能够充分利用都市人群上下班途中、排队闲暇等碎片时间,提供方便快捷的购物方式,因此能够极大的抓住用户的依赖程度,提高超市自身品牌影响力,扩张超市营业范围,提高商品销售收入。 关键词:Android 移动设备网上超市

Abstract This e-commerce system named Online Market Management System is based on the most popular mobile platform - Android platform. This system is an extension of PC e-commerce website on the Android platform. Except functions that normal e-commerce system can realize, this system also has many advantages like easily use and convenient. Using this system has provided a brand new way for market sales. The development of this system has using the Android SDK based on Java technology, and achieve by C/S (Client/Server) structure. The IDE used for development is MyEclipse 10 which has installed Android Developer Tools provided by Google. This system need a mobile device that Android version is higher than 4.0 for running. This system has completed the function of the mobile platform based on e-commerce sites, and allow user finish most functions which can be done at normal e-commerce sites. This system can make full use of pieces of time which like the way go to work and the way home, or when you get in a line waiting for something, to provide a fast convenient way to shopping. These advantages can seize the users' dependence, improve the influence, expansion the scope of the business and increase sales revenue. Key words:Android mobile device Online Market

中国象棋源代码及文档

摘要 象棋程序可以分为两大部分:人工智能和界面程序辅助。人工智能的主要部分,反 映了计算机下象棋的想法,电脑怎么想,最好的方法去完成下一步,优先搜索算法进行 搜索,和各种可能的行动,评估,选择胜利面最大的一步;界面和程序协助部分主要是界 面友好,以更好地适应用户下象棋的想法。 本文研究了中国象棋在电脑中如何表示,然后讨论如何产生走法的一系列相关技术。使用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

基于Android的移动学习APP的设计与实现

基于Android的移动学习APP的设计与实现 摘要随着移动互联网技术和无线终端设备的发展,使得人们的事业、学习和生活似乎离不开智能手机。Android智能手机将应用于教育范围,网络上越来越多的在线教学,更是一种发展趋势。本文将构建基于智能终端的移动式课堂学习系统,结合无线网络和智能设备,满足在线学习的需求[1]。 关键字Android 教育;网络 引言 近几年来,随着移动网络的发展,带宽提升,资费下调,移动设备已经渗透到人们工作、学习和生活的方方面面。2010年果壳网推出了MOOC学院,这是中文互联网内最大的MOOC学习社区,Android已经成为市场份额最高的平台,拥有异常丰富的应用生态圈。 如今课堂上,认真听课的学生越来越少,低着头看手机的学生越来越多;学生们不再手抄笔记,而是用手机摄像头拍讲义;课上发问与老师互动的同学越来越少,而逐渐适应了上网搜索来解疑。因此,将传统课堂与移动互联网的结合是不可逆的趋势。本文的研究,尝试将经典学习理论结合移动信息技术,为移动学习中的教学活动设计与教学资源设计提供参考。 1 Android架构与优势 Android系统的架构和其他操作系统类似,也采用了多层架构,层次结构如下[2]: (1)应用程序层:该层提供了核心的应用开发程序包,所有的应用程序都是用java语言编写。 (2)应用框架层:这个层是应用程序开发的基础,大多数程序员处理这个层,开发人员可以完全访问核心应用程序使用的API框架。 (3)系统运行库:Android包含一些C/C++内核库和Dalvik的虚拟机。 (4)Linux核心层:服务核心Android系统依赖于Linux内核,如内存管理、进程管理、安全、网络协议和驱动程序模型,同时以抽象层作为硬件和软件栈之间的关系。 Android具有其他系统不具备的优势,比如移植性强,Android在系统运行库层实现了一个硬件抽象层,向上对开发者提供了硬件的抽象,从而实现跨平台,向下也极大地方便了Android系统向各式设备的移植。 2 项目分析

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];

Android即时通信设计与实现(代码)

Android即时通信系统设计与实现(代码如下):1,登录界面(IP地址): package https://www.360docs.net/doc/8717612883.html,Nclient; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditT ext; public class LoginActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/8717612883.html,yout.login); Button btnLink = (Button) findViewById(R.id.btnLink); final EditT ext etIPaddr = (EditT ext) findViewById(R.id.etIPaddr); final Intent intent = new Intent(); btnLink.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { intent.setClass(LoginActivity.this, ClientActivity.class); //清除堆栈中其他Activity intent.putExtra("IPaddr", etIPaddr.getT ext().toString()); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); LoginActivity.this.finish(); startActivity(intent); } }); } } 2,客户端(Android): package https://www.360docs.net/doc/8717612883.html,Nclient;

android各种布局及JAVA实现代码

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个点组成的九宫,棋子“将”、“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。中国象棋的“马”不能跳过障碍,即马不能别腿。“车”可以水平或垂直方向移动人一个无障碍的点。“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动 移动棋子,实际上就是监听了鼠标点击相应事件,先选棋子,通过点击了某

相关文档
最新文档