java象棋js代碼 java象棋棋盤類怎么寫

使用java編程:國際象棋棋盤64個(gè)格,第一格放一粒米,每一格比前一格多一顆,放滿需要多少米 急!急!

package com.plague.math;

隆化網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

import java.lang.Math;

public class Chess {

private final static int CHESS_NUMBER = 64;

private int total;

public Chess () {

System.out.println("國王的賞賜,其實(shí),問題是這樣的:" +

"在國際象棋的棋盤上,第一格放一粒米,第二格放2粒米,第三個(gè)放四粒米。。。最后國王要賞賜多少米");

for (int i = 0; i CHESS_NUMBER; i++) {

total += Math.pow(2.0,(double)i);

}

System.out.println("國王的賞賜是:"+total);

}

public static void main(String[] args) {

Chess c1 = new Chess();

}

}

八皇后問題的java代碼。

boolean[] diagonal = new boolean[16]; // 對(duì)角線安全標(biāo)志

boolean[] undiagonal = new boolean[16]; // 反對(duì)角線安全標(biāo)志

用上兩個(gè)判斷是否能放置棋子

在 n 行 n 列的國際象棋棋盤上,最多可布n個(gè)皇后。

若兩個(gè)皇后位于同一行、同一列、同一對(duì)角線上,

則稱為它們?yōu)榛ハ喙簟?/p>

n皇后問題是指找到這 n 個(gè)皇后的互不攻擊的布局。

n 行 n 列的棋盤上,主次對(duì)角線各有2n-1條。

利用行號(hào)i和列號(hào)j計(jì)算

主對(duì)角線編號(hào)k的方法是k = n+i-j-1;

計(jì)算次對(duì)角線編號(hào)k的方法是k = i+j

你主要是算法有些模糊罷了,現(xiàn)在我怕我說的不好將你弄的越來越混亂所以給你個(gè)叫形象的若是還不明白,call me

package 百度;

//演示程序:n個(gè)皇后問題

import java.io.*;

/*

在 n 行 n 列的國際象棋棋盤上,最多可布n個(gè)皇后。

若兩個(gè)皇后位于同一行、同一列、同一對(duì)角線上,

則稱為它們?yōu)榛ハ喙簟?/p>

n皇后問題是指找到這 n 個(gè)皇后的互不攻擊的布局。

n 行 n 列的棋盤上,主次對(duì)角線各有2n-1條。

利用行號(hào)i和列號(hào)j計(jì)算

主對(duì)角線編號(hào)k的方法是k = n+i-j-1;

計(jì)算次對(duì)角線編號(hào)k的方法是k = i+j

*/

//"n個(gè)皇后問題"之類定義

public class cQueen {

int n; //皇后問題的大小

int col[]; //數(shù)組,各列上有無皇后(0,1)

int md[]; //數(shù)組,各主對(duì)角線有無皇后(0,1)

int sd[]; //數(shù)組,各次對(duì)角線有無皇后(0,1)

int q[]; //數(shù)組,第i行上皇后在第幾列(0,n-1)

int Q; //已布皇后數(shù),計(jì)數(shù)

int r; //n皇后問題的解的組數(shù)

//構(gòu)造函數(shù) n皇后問題的初始化

public cQueen(int m) {

n=m;Q=0;r=0;

col=new int[n];

md=new int[2*n-1]; //初始化0

sd=new int[2*n-1];

q=new int[n];

}

//函數(shù):打印棋盤

public void showBoard() {

int i,j;

for(i=0;in;i++) {

for(j=0;jn;j++)

if(q[i]==j) System.out.print("1 ");

else System.out.print("0 ");

System.out.println();

}

r++; //解的組數(shù)

System.out.println("---------------");

}

//求解n皇后問題

/*

此函數(shù)試圖在n*n的棋盤的第i行上放一個(gè)皇后,

若找到可以放的位置,就遞歸調(diào)用自身試圖在i+1行

放另一個(gè)皇后,若第i行是最后一行,則打印棋盤。

*/

public void resolve(int i) {

int j;

// 在第i行給定后檢查棋盤上的每一列

for(j=0;jn;j++) {

//如果在第i行的第j列可以布放皇后

if(col[j]==0md[n+i-j-1]==0sd[i+j]==0){

Q++;q[i]=j; //布放皇后,第i行皇后在第幾列

// 標(biāo)記新布皇后的攻擊范圍

col[j]=md[n+i-j-1]=sd[i+j]=1;

// 如果已經(jīng)布了n個(gè)皇后(得到了一組解),

// 把棋盤(解)打印出來。

if(Q==n) showBoard();

// 否則,遞歸。在第i行第j列布放皇后的前提下,

//試探下一行(i+1行)在哪一列布皇后?

else if(in-1) resolve(i+1);

else resolve(0); //因?yàn)榧s定起始行可以任選

//移除在第i行的第j列新布的皇后,

//并消除所標(biāo)記的攻擊范圍,為回溯作準(zhǔn)備。

Q--; q[i]=0;

col[j]=md[n+i-j-1]=sd[i+j]=0;

//試探在第i行的第j+1列新布皇后的方案(新解)

}

} //下一列,j循環(huán)

//對(duì)于給定的行,列掃描完畢后,從這里回溯。

}

//輸出解的個(gè)數(shù)

public void HowMany() {

System.out.println(n+"皇后問題共有解"+r+"組。");

}

//主方法main()

public static void main(String []args) {

//定義一個(gè)8皇后問題(有92組解)

cQueen Q1=new cQueen(8); //大于10,你的微機(jī)可能要死機(jī)!

//第一個(gè)皇后可以在任意一行布放

Q1.resolve(0); //參數(shù)在0到n-1之間任選

Q1.HowMany();

}

} //類Queen定義結(jié)束

關(guān)于看代碼的人人都知道的小技巧,最小試探法來輸出結(jié)果進(jìn)行比較和分析

你好,請(qǐng)問你有具體的將棋子圖片放到棋盤上的Java代碼嗎?或者是你自己編寫的Java國際象棋程序?很急!?。?/h2>

有,但是我不能直接給你。我可以告訴你步驟。

首先是加載圖片文件為 Image:比如你有個(gè)類叫 ResourceLoader 那么就添加下面的類成員:

public static final URL url = ResourceLoader.class.getResource("/xxx/.../文件名.png");

public static final Image img = Toolkit.getDefaultToolkit().createImage(url);

然后就加載好了。下一步是繼承一個(gè) JPanel(例如),添加鼠標(biāo)/鍵盤事件,并重寫 paint 方法(或 paintComponent 方法)。例如——

public class ChessPanel extends JPanel {

private Point[] chessPoints = new Point[共多少個(gè)棋子];

private boolean[] shown = new boolean[共多少個(gè)棋子];

@Override public void paintComponent (Graphics g) {

super.paintComponent(g);

for (int i=0; i共多少個(gè)棋子; i++) {

if (shown[i]) {

g.drawImage(ResourceLoader.img, chessPoints[i].x, chessPoints[i].y, 棋子寬度, 棋子高度);

}

}

}

class MouseControler extends MouseAdapter {

@Override public void mousePressed (MouseEvent me) {

//自己寫吧

repaint();

}

}

}

最后說明一下,圖片資源文件可以打包到 jar 里。我把關(guān)鍵的部分都已經(jīng)告訴你了。具體邏輯實(shí)現(xiàn)你自己寫吧。當(dāng)然數(shù)據(jù)結(jié)構(gòu)你也可以自己寫,我的例子只是告訴你相應(yīng)的在 paint 或者 paintComponent 方法里全部畫出來就行了。

希望能采納。

分享名稱:java象棋js代碼 java象棋棋盤類怎么寫
文章網(wǎng)址:http://bm7419.com/article38/ddehgpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、外貿(mào)建站定制開發(fā)、網(wǎng)站制作、商城網(wǎng)站、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司