導航:首頁 > 程序命令 > 程序員css五子棋

程序員css五子棋

發布時間:2023-05-30 09:41:05

⑴ 簡單五子棋棋盤怎麼畫

五子棋棋盤以及下子 怎麼畫
都是正方形方格,越多越好
五子棋棋盤怎麼畫
橫線豎線垂直相交,就是畫方格,數量多多宜善。
五子棋的棋盤怎麼畫
都是正方形方格,越多越好
五子棋棋盤以及下子 怎麼畫
如果是用畫的方式下子,那麼建議16橫16豎,圍成225個格子,並且標識上橫座標ABCD縱座標1234,類似第一象限

五子棋的棋盤怎麼繪制
五子棋的櫻升棋盤就是方格,用筆後和尺子繪制,如果是在繪圖軟體里用直線工具,藉助標尺就可以繪制了。格子的大小,略大於棋子的大小即可。一般橫豎都有20來格就可以了,適當多點更好。

希望採納。
請問如何用mfc畫一個五子棋的棋盤啊?
1、打開VC++ 6.0

2、新建一個MFC AppWizard(exe)的工程,工程名為wuzi

3、點擊確定

4、選擇單個文檔,去掉"文檔/查看體系結構支持"復選框

5、點擊完成

6、切換到CLassView

7、找到CChildView類下的OnPaint()函數,雙擊該函數

8、OnPaint()函數代碼如下:

void CChildView::OnPaint()

{

CPaintDC dc(this);

CPen bi,*jbi;

bi.CreatePen(PS_DASH,2,RGB(0,255,0)); 創建綠色畫筆

jbi=dc.SelectObject(&bi); 選擇畫筆

for(int i=0;i<15;i++) 畫水平線

{

dc.MoveTo(40,40+i*40);

dc.LineTo(15*40,40+i*40);

}

for(i=0;i<15;i++) 畫垂直線

{

dc.MoveTo(40+i*40,40);

dc.LineTo(40+i*40,15*40);

}

dc.SelectObject(jbi);

}

9、編譯,運行

畫五子棋的子,可用以下的畫圓的函數,

BOOL Ellipse( int x1, int y1, int x2, int y2 );



BOOL Ellipse( LPCRECT lpRect );

補充:

CChildView類沒找到,可能因為你沒有去掉"文檔/查看體系結構支持"復選框。(第4步)

如果不去掉該復選框,選擇單個文檔,點擊完成 ,那麼你將看到CWuziView類,切換到CLassView ,找到CWuziView類,右擊該類,選擇Add Windows Message Handler,彈出一對話框,在左邊選擇WM_PAINT,雙擊它或點擊右邊的Add Handler,再點擊Edit Existing,進入到CWuziView::OnPaint()函數,函數代碼同上面的第8步。

最脊租老後,編譯,運行 。
html5五子棋游戲的棋盤怎麼畫
棋盤用1個 div 作為容器,用 css 一些內邊距{padding: 60px;},裡面的網格也是用 div 標簽,可以用腳本生成,一共輸出20*20=400個格子就可以了,型棗方便多了,格子設置樣式為{width: 40px; height: 40px; float: left;}
怎樣用C畫五子棋棋盤
畫圖的函數:line(a,a,b,b)可以畫線。

樓主就知道這一個函數。。。

這個得查函數,定義圖形中點的問題我也不會

這個好像有點用:

getpixel

原型:extern int getpixel(int x, int y);

用法:#include

功能:返回屏幕上指定點的狀態

說明:(x,y)為屏幕上點的座標,如果點為清除狀態返回零,否則返回非零值。

舉例:

pixel.c

#include

main()

{

int i,j;

clrscr();

printf("V");

gotoxy(10,10); Hide cursor

for(i=0;i<8;i++)

for(j=0;j<16;j++)

{

if(getpixel(i,j))

putpixel(10+i,10+j,1);

else

putpixel(10+i,10+j,0);

}

getchar();

return 0;

}

還有配套的:

putpixel

原型:extern void putpixel(int x, int y, int mode);

用法:#include

功能:在屏幕的指定位置上畫點

說明:(x,y)為屏幕上點的座標,mode值含義如下:

mode=0:清除(x,y)處的點

1:在(x,y)處畫點

2:將(x,y)處的點的狀態取反

舉例:

pixel.c

#include

main()

{

int i,j;

clrscr();

printf("V");

gotoxy(10,10); Hide cursor

for(i=0;i<8;i++)

for(j=0;j<16;j++)

{

if(getpixel(i,j))

putpixel(10+i,10+j,1);

else

putpixel(10+i,10+j,0);

}

getchar();

return 0;

}

這些都在 庫里,引用的時候必須在開頭註明。

再給lz一個示範吧:貪吃蛇。我現在手頭就這一個了。

#define N 200

#include

#include

#include

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=500000;/*游戲速度自己調整*/

struct Food

{

int x;/*食物的橫座標*/

int y;/*食物的縱座標*/

int yes;/*判斷是否要出現食物的變數*/

}food;/*食物的結構體*/

struct Sna......
用VISUAL STUDIO 怎麼樣畫出一個五子棋的棋盤?就是放張圖片然後把棋子放到格子裡面。
gdi+

using System.Drawing;

using System.Drawing.Drawing2D;

可以選擇放一個背景圖片,bitmap

也可以自己畫
怎樣用c語言畫出五子棋棋盤
************************************************************** C++語言五子棋源程序 ************************************************************* #include

#include

#include

#include

#define backcolor CYAN

#define defaultcolor BLACK

#define linecolor MAGENTA

#define player1_color RED

#define player2_color WHITE

#define error_color RED

#define winner_color RED

const int left=40;

const int top=390;

const int d=30;

const int line_num=9;

const int turn=0;

const int r=d/3;

const int j=10;

int x,y,k=1,step=(line_num+1)*(line_num+1);

union REGS regs1,regs2;

class player1;

class player2;

class qipan{

public:

qipan();

~qipan(){};

void init_qipan();

friend void fall(player1 &num1,player2 &num2,qipan &num);

friend void input(player1 &num1,player2 &num2,qipan &num);

private:

int point[line_num+1][line_num+1];

};

class player1{

public:

player1();

~player1(){};

friend void fall(player1 &num1,player2 &num2,qipan &num);

friend void input(player1 &num1,player2 &num2);

friend int judge_winner(player1 &num1,player2 &num2);

private:

int point1[line_num+1][line_num+1];

};

class player2{

public:

player2();

~player2(){};

friend void fall(player1 &num1,player2 &num2,qipan &num);

friend void input(player1 &num1,player2 &num2,qipan &num);

friend int judge_winner(player1 &num1,player2 &num2);

private:

int point2[line_num+1][line_num+1];

};

void input(player1 &num1,player2 &num2);

void fal......

⑵ 五子棋中的沖型活型,雙三雙四,禁手,沖四,活三等都是什麼意思啊

一.游戲介紹

五子棋是起源於中國古代的傳統黑白棋種之一。現代五子棋日文稱頃山之為 「 連珠 」 ,英譯為 「Renju」 ,英文稱之為 「Gobang」 或 「FIR」(Five in a Row 的縮寫 ) ,亦有 「 連五子 」 、 「 五子連 」 、 「 串珠 」 、 「 五目 」 、 「 五目碰 」 、 「 五格 」 等多種稱謂。

五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助於修身養性。五子棋既有現代休閑的明顯特徵 「 短、平、快 」 ,又有古典哲學的高深學問 「 陰陽易理 」 ;它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有 「 場 」 的概念,亦有 「 點 」 的連接。它是中西文化的交流點,是古今哲理的結晶。

五子棋起源於古代中國,發展於日本,風靡於歐洲。對於它與圍棋的關系有兩種說法,一說早於圍棋,早在 「 堯造圍棋 」 之前,民間就已有五子棋游戲;一說源於圍棋,是圍棋發展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時先後傳入朝鮮、日本等地。據日本史料文獻介紹,中國古代的五子棋是經由高麗 ( 朝鮮 ) ,於 1688 年至 1704 年的日本元祿時代傳到日本的。到日本明治 32 年 ( 公元 1899 年 ) ,經過公開征名, 「 連珠 」 這一名稱才被正式確定下來,取意於 「 日月如合壁,五星如連珠 」 。從此,連珠活動經過了不斷的改良,主要是規則的變化 ( 即談物對執黑棋一方的限制 ) ,例如, 1899 年規定,禁止黑白雙方走 「 雙三 」 ; 1903 年規定,只禁止黑方走 「 雙三 」 ; 1912 年規定,黑方被迫走 「 雙三 」 亦算輸; 1916 年規定,黑方不許走 「 長連 」 ; 1918 年規定,黑方不許走 「 四、三、三 」 ; 1931 年規定,黑方不許走 「 雙四 」 ,並規定將 19×19 的圍棋盤改為 15×15 的連珠專用棋盤。本世紀初五子棋傳入歐洲並迅速風靡全歐。通過一系列的變化,使五子棋這一簡單的游戲復雜化、規范化,而最終成為今天的職業連珠五子棋,同時也成為一種國際比賽棋。

二.簡明職業連珠五子棋比賽規則的解釋

1 、五子棋是兩個人之間進行的競技活動,由於對黑方白方規則不同,黑棋必須先行。
2 、五含乎液子棋專用盤為 15×15 ,五連子的方向為橫、豎、斜。
3 、禁手是對局中被判為負的行棋手段。白棋無禁手。
請看圖解
http://piano.ccjt.net/user/html/piclook.asp?id=5137
4 、在棋盤上以對局雙方均不可能形成五連為和棋。
5 、在對局中,以在盤上落下的子又拿起來為拔子,判負。在對局中,一方自行終止比賽,判負。
6 、黑方在落下關鍵的第五子即形成五連的同時,又形成禁手。此時因黑方已成連五,故禁手失效,黑方勝。
7 、所謂黑方形成禁手,是指黑方一子落下同時形成兩個或兩個以上的活三、沖四及長連禁手。此時,白方應立即向黑方指出禁手,自然而勝。

三.特殊規定

職業連珠五子棋雖然對黑棋採取了種限制,但是黑棋先行的優勢依然很大。因此,在高段位的職比賽中,又出現了三種特殊的規定。

① 「 指定打法 」 :是指比賽雙方按照約定好的開局進行奔,由白棋先行。例如 「 明星局 」 、 「 花月局 」 等 ( 參看 「 連珠五子棋的開局 」) 。
② 「 三手可交換 」 :是指黑棋下第 2 手棋 ( 盤面第 3 著棋之後,白方在應白 2 之前,如感覺黑方棋形不利於己方,可出交換,即執白棋一方變為執黑棋一方 ( 此方法不適用指定局打法,而用於隨意開局 ) 。
③ 「 五手兩打法 」 :是指黑棋在下盤面上關鍵的第 5 手時,必須下兩步棋,讓白方在這兩步棋中任選一步,然後再續下。

⑶ html5五子棋游戲的棋盤怎麼畫

棋螞和盤用1個 div 作為容器,用基神 css 一些內邊距{padding: 60px;},裡面的網格也是用 div 標簽,可以用腳搏物虧本生成,一共輸出20*20=400個格子就可以了,方便多了,格子設置樣式為{width: 40px; height: 40px; float: left;}

⑷ 用C++編寫的小游戲源代碼

五子棋的代碼:

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include <time.h>

using namespace std;

const int N=15; //15*15的棋盤

const char ChessBoardflag = ' '; //棋盤標志

const char flag1='o'; //玩家1或電腦的棋子標志

const char flag2='X'; //玩家2的棋子標志

typedef struct Coordinate //坐標類

{

int x; //代錶行

int y; //代表列

}Coordinate;

class GoBang //五子棋類

{

public:

GoBang() //初始化

{

InitChessBoard();

}

void Play() //下棋

{

Coordinate Pos1; // 玩家1或電腦

Coordinate Pos2; //玩家2

int n = 0;

while (1)

{

int mode = ChoiceMode();

while (1)

{

if (mode == 1) //電腦vs玩家

{

ComputerChess(Pos1,flag1); // 電腦下棋

if (GetVictory(Pos1, 0, flag1) == 1) //0表示電腦,真表示獲勝

break;

PlayChess(Pos2, 2, flag2); //玩家2下棋

if (GetVictory(Pos2, 2, flag2)) //2表示玩家2

break;

}

else //玩家1vs玩家2

{

PlayChess(Pos1, 1, flag1); // 玩家1下棋

if (GetVictory(Pos1, 1, flag1)) //1表示玩家1

break;

PlayChess(Pos2, 2, flag2); //玩家2下棋

if (GetVictory(Pos2, 2, flag2)) //2表示玩家2

break;

}

}

cout << "***再來一局***" << endl;

cout << "y or n :";

char c = 'y';

cin >> c;

if (c == 'n')

break;

}

}

protected:

int ChoiceMode() //選擇模式

{

int i = 0;

system("cls"); //系統調用,清屏

InitChessBoard(); //重新初始化棋盤

cout << "***0、退出 1、電腦vs玩家 2、玩家vs玩家***" << endl;

while (1)

{

cout << "請選擇:";

cin >> i;

if (i == 0) //選擇0退出

exit(1);

if (i == 1 || i == 2)

return i;

cout << "輸入不合法" << endl;

}

}

void InitChessBoard() //初始化棋盤

{

for (int i = 0; i < N + 1; ++i)

{

for (int j = 0; j < N + 1; ++j)

{

_ChessBoard[i][j] = ChessBoardflag;

}

}

}

void PrintChessBoard() //列印棋盤,這個函數可以自己調整

{

system("cls"); //系統調用,清空屏幕

for (int i = 0; i < N+1; ++i)

{

for (int j = 0; j < N+1; ++j)

{

if (i == 0) //列印列數字

{

if (j!=0)

printf("%d ", j);

else

printf(" ");

}

else if (j == 0) //列印行數字

printf("%2d ", i);

else

{

if (i < N+1)

{

printf("%c |",_ChessBoard[i][j]);

}

}

}

cout << endl;

cout << " ";

for (int m = 0; m < N; m++)

{

printf("--|");

}

cout << endl;

}

}

void PlayChess(Coordinate& pos, int player, int flag) //玩家下棋

{

PrintChessBoard(); //列印棋盤

while (1)

{

printf("玩家%d輸入坐標:", player);

cin >> pos.x >> pos.y;

if (JudgeValue(pos) == 1) //坐標合法

break;

cout << "坐標不合法,重新輸入" << endl;

}

_ChessBoard[pos.x][pos.y] = flag;

}

void ComputerChess(Coordinate& pos, char flag) //電腦下棋

{

PrintChessBoard(); //列印棋盤

int x = 0;

int y = 0;

while (1)

{

x = (rand() % N) + 1; //產生1~N的隨機數

srand((unsigned int) time(NULL));

y = (rand() % N) + 1; //產生1~N的隨機數

srand((unsigned int) time(NULL));

if (_ChessBoard[x][y] == ChessBoardflag) //如果這個位置是空的,也就是沒有棋子

break;

}

pos.x = x;

pos.y = y;

_ChessBoard[pos.x][pos.y] = flag;

}

int JudgeValue(const Coordinate& pos) //判斷輸入坐標是不是合法

{

if (pos.x > 0 && pos.x <= N&&pos.y > 0 && pos.y <= N)

{

if (_ChessBoard[pos.x][pos.y] == ChessBoardflag)

{

return 1; //合法

}

}

return 0; //非法

}

int JudgeVictory(Coordinate pos, char flag) //判斷有沒有人勝負(底層判斷)

{

int begin = 0;

int end = 0;

int begin1 = 0;

int end1 = 0;

//判斷行是否滿足條件

(pos.y - 4) > 0 ? begin = (pos.y - 4) : begin = 1;

(pos.y + 4) >N ? end = N : end = (pos.y + 4);

for (int i = pos.x, j = begin; j + 4 <= end; j++)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i][j + 1] == flag&&

_ChessBoard[i][j + 2] == flag&&_ChessBoard[i][j + 3] == flag&&

_ChessBoard[i][j + 4] == flag)

return 1;

}

//判斷列是否滿足條件

(pos.x - 4) > 0 ? begin = (pos.x - 4) : begin = 1;

(pos.x + 4) > N ? end = N : end = (pos.x + 4);

for (int j = pos.y, i = begin; i + 4 <= end; i++)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j] == flag&&

_ChessBoard[i + 2][j] == flag&&_ChessBoard[i + 3][j] == flag&&

_ChessBoard[i + 4][j] == flag)

return 1;

}

int len = 0;

//判斷主對角線是否滿足條件

pos.x > pos.y ? len = pos.y - 1 : len = pos.x - 1;

if (len > 4)

len = 4;

begin = pos.x - len; //橫坐標的起始位置

begin1 = pos.y - len; //縱坐標的起始位置

pos.x > pos.y ? len = (N - pos.x) : len = (N - pos.y);

if (len>4)

len = 4;

end = pos.x + len; //橫坐標的結束位置

end1 = pos.y + len; //縱坐標的結束位置

for (int i = begin, j = begin1; (i + 4 <= end) && (j + 4 <= end1); ++i, ++j)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j + 1] == flag&&

_ChessBoard[i + 2][j + 2] == flag&&_ChessBoard[i + 3][j + 3] == flag&&

_ChessBoard[i + 4][j + 4] == flag)

return 1;

}

//判斷副對角線是否滿足條件

(pos.x - 1) >(N - pos.y) ? len = (N - pos.y) : len = pos.x - 1;

if (len > 4)

len = 4;

begin = pos.x - len; //橫坐標的起始位置

begin1 = pos.y + len; //縱坐標的起始位置

(N - pos.x) > (pos.y - 1) ? len = (pos.y - 1) : len = (N - pos.x);

if (len>4)

len = 4;

end = pos.x + len; //橫坐標的結束位置

end1 = pos.y - len; //縱坐標的結束位置

for (int i = begin, j = begin1; (i + 4 <= end) && (j - 4 >= end1); ++i, --j)

{

if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j - 1] == flag&&

_ChessBoard[i + 2][j - 2] == flag&&_ChessBoard[i + 3][j - 3] == flag&&

_ChessBoard[i + 4][j - 4] == flag)

return 1;

}

for (int i = 1; i < N + 1; ++i) //棋盤有沒有下滿

{

for (int j =1; j < N + 1; ++j)

{

if (_ChessBoard[i][j] == ChessBoardflag)

return 0; //0表示棋盤沒滿

}

}

return -1; //和棋

}

bool GetVictory(Coordinate& pos, int player, int flag) //對JudgeVictory的一層封裝,得到具體那個玩家獲勝

{

int n = JudgeVictory(pos, flag); //判斷有沒有人獲勝

if (n != 0) //有人獲勝,0表示沒有人獲勝

{

PrintChessBoard();

if (n == 1) //有玩家贏棋

{

if (player == 0) //0表示電腦獲勝,1表示玩家1,2表示玩家2

printf("***電腦獲勝*** ");

else

printf("***恭喜玩家%d獲勝*** ", player);

}

else

printf("***雙方和棋*** ");

return true; //已經有人獲勝

}

return false; //沒有人獲勝

}

private:

char _ChessBoard[N+1][N+1];

};

(4)程序員css五子棋擴展閱讀:

設計思路

1、進行問題分析與設計,計劃實現的功能為,開局選擇人機或雙人對戰,確定之後比賽開始。

2、比賽結束後初始化棋盤,詢問是否繼續比賽或退出,後續可加入復盤、悔棋等功能。

3、整個過程中,涉及到了棋子和棋盤兩種對象,同時要加上人機對弈時的AI對象,即涉及到三個對象。

⑸ 零基礎,該怎麼學習java

關於java怎麼學?我的建議如下:

首先看一下java學習路線圖,了解一下Java構成:

java學習步驟(方法):

1、按階段規劃,時間留夠,但一定要有互相催促的夥伴,否則會很孤獨也難以堅持,夥伴得挑好了,別把你帶歪了。

2、有了夥伴先學習HTML+CSS,做點網頁出來,讓自己心中對軟體行業充滿成就感,這樣說培養自己的興趣的一種,俗話說興趣是最好的老師,沒有興趣走不遠。

3、然後學習簡單Java語法,寫簡單的流程式控制制語句,簡單數據結構,當邏輯思維和數據結構達到一個3層循環都能搞清楚的水準的時候,馬馬虎虎可以進入下一步了

4、進入Java面向對象的學習,搞清楚類、對象,封裝繼承多態,內部類,對象的概念,然後進入常用集合和泛型以及集合的底層數據結構的學習

5、學習IO流,能夠操作讀取大文件,多線程,Socket編程,學完之後使用JavaSE的基礎做一個五子棋游戲,或者QQ聊天,強化一下自己的知識。

6、進入資料庫學習,先學習MySQL,較為簡單常用,學完資料庫,也可以看看Redis的使用

7、進入JavaWeb課程的學習,以Servlet+Jsp為主,還有tomcat和http基礎,

8、學習JavaScritp+JQuery,結合JavaWeb做一個小的管理系統

9、進入JavaEE的學習,常用框架,主要是SpringMVC和Mybatis,學完之後試著去接觸微服務架構

10、學習Linux操作,使用Linux部署tomcat進行環境搭建,跑一個簡單的頁面出來

11、SpringBoot可以進行了解學習,Oracle可以進行了解學習。

記得看視頻看視頻看視頻啊!!!b站高淇講得還不錯,可以參考一下!

Java300集零基礎適合初學者視頻教程_Java300集零基礎教程_Java初學入門視頻

⑹ java游戲五子棋論文

<%@ page contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>五子棋</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body{ word-break:break-word;
}
#aboutstep{
position:absolute;
right:45px;
top:300px;
width:200px;
vertical-align:bottom;
}
</style>
<script language="javascript">
//五子棋棋子亦稱「棋石」分黑、白兩色,形狀為扁圓形,有一面凸起或兩面凸起等形狀,厚度不超過0.8厘米,直徑為2.0~2.3厘米;
//一副棋子總數為225枚,其中黑子113枚,白子112枚。
var presentperson=false; //true表示人先下,否則表示機器先下
//誰先只需要改為true或false就可以了,不需要改其它東西
var maxsize=15;
var personstep=0;
var machinestep=0;
var _stack=new Array();//needn't to allocate space
var chese=new Array(maxsize*maxsize);
var chesevalue=new Array(maxsize*maxsize);
for(var i=0;i<maxsize*maxsize;i++)//初始化棋盤
{ chese[i]=0;
}
</script>
</head>
<body onload="startup()">
<table id="chesetable" border="1px" width="auto" align="center" height="600px" style="background-color:#EED090;text-align:center;">
<%
for(int i=0;i<15;i++)
{out.print("<tr>");
for(int j=0;j<15;j++)
{out.print("<td onclick='putone(this,"+i+","+j+")' style='width:45px;height:45px;cursor:pointer;'></td>");
}
out.print("</tr>");
}
%>
</table>
<div id="aboutstep"><!-- 加計時器會降低速度,這里就不加了 -->
人<img src="images/white_.gif" alt="white" width="50px" height="50px" style="vertical-align:middle;"/><span id="aboutsteppeople" style="position:inline;">0</span>
<span style="display:inline;"><input type="text" id="peopleusedtime" size=4 maxlength="8" /></span>
<br />
機器<img src="images/black_.gif" alt="black" width="50px" height="50px" style="vertical-align:middle;"s/><span id="aboutstepmachine" style="position:inline;">0</span>
<span style="display:inline;"><input type="text" id="machineusedtime" size=4 maxlength="8" /></span>
</div>
<div align="center">
<input type="button" name="restart" value="重新開始" onclick="reload()"/><input type="button" name="turnout" value="交換順序" />
<input type="button" name="undo" value="悔棋" onclick="popstack()"/>
</div>
<script language="JavaScript">
function startup()
{
if(!presentperson)//機器先下
{ var obj=document.getElementById("chesetable").rows[7].cells[7];
putone(obj,7,7);
}
}
function putone(obj,i,j)
{ //if(obj.firstChild.nodeValue=="◎"||obj.firstChild.nodeValue=="●")
if(obj.firstChild.nodeType==1) //表示放了棋子
{ return false;}

var node=null;
if(presentperson)
{ //node=document.createTextNode("◎"); //人的棋子顏色
if(document.uniqueID) //IE
node=document.createElement("<img src='images/white_.gif' alt='white' width='40px' height='40px' />");
else { //for Firefox,Opera
node=document.createElement("img");
node.setAttribute("src","images/white_.gif");
node.setAttribute("alt","white");
node.setAttribute("width","40px");
node.setAttribute("height","40px");
}
presentperson=!presentperson;
chese[maxsize*i+j]=1;
personstep++;
document.getElementById("aboutsteppeople").innerHTML=personstep;

}
else {//node=document.createTextNode("●"); //機器的棋子顏色
if(document.uniqueID) //IE
node=document.createElement("<img src='images/black_.gif' alt='black' width='40px' height='40px' />");
else { node=document.createElement("img");
node.setAttribute("src","images/black_.gif");
node.setAttribute("alt","black");
node.setAttribute("width","40px");
node.setAttribute("height","40px");
}presentperson=!presentperson;
chese[maxsize*i+j]=2;
machinestep++;
document.getElementById("aboutstepmachine").innerHTML=machinestep;
}
obj.replaceChild(node,obj.firstChild);
_stack.push(i);
_stack.push(j); //避免數據冗餘,就不存儲presentperson
var result=checkfinish(!presentperson,i,j);
if(result)
{ if(!presentperson) alert("Congratulation!You win.");
else alert("I am sorry that the machine wins,try your best to win next time.");
setTimeout(reload,4000); //刷新頁面
}
if(!presentperson) {machinedecideposition();} //機器走。如果選擇全部由人走就去掉這個
}
function checkfinish(presentperson,i,j)
{ //persentperson為true時表示剛才人下了一步
var checkword;
var result=false; //nobody wins
if(presentperson) checkword=1;
else checkword=2;
var total=1;
var tempj=j+1;
while(tempj<maxsize) //橫
{ if(chese[maxsize*i+tempj]==checkword)
{total++; tempj++;}
else break;
}
tempj=j-1;
while(tempj>=0)
{ if(chese[maxsize*i+tempj]==checkword)
{total++; tempj--;}
else break;
}
if(total>4) { return true;}

total=1;
var tempi=i+1; //豎
while(tempi<maxsize)
{ if(chese[maxsize*tempi+j]==checkword)
{total++; tempi++;}
else break;
}
tempi=i-1;
while(tempi>=0)
{ if(chese[maxsize*tempi+j]==checkword)
{total++; tempi--;}
else break;
}
if(total>4) { return true;}

total=1;
tempi=i+1; //一三象限斜
tempj=j+1;
while(tempi<maxsize&&tempj<maxsize)
{ if(chese[maxsize*tempi+tempj]==checkword)
{total++; tempi++; tempj++;}
else break;
}

tempi=i-1;
tempj=j-1;
while(tempi>=0&&tempj>=0)
{ if(chese[maxsize*tempi+tempj]==checkword)
{total++; tempi--; tempj--;}
else break;
}
if(total>4) { return true;}

total=1;
tempi=i+1; //二四象限斜
tempj=j-1;
while(tempi<maxsize&&tempj>=0)
{ if(chese[maxsize*tempi+tempj]==checkword)
{total++; tempi++; tempj--;}
else break;
}
tempi=i-1;
tempj=j+1;
while(tempi>=0&&tempj<maxsize)
{ if(chese[maxsize*tempi+tempj]==checkword)
{total++; tempi--; tempj++;}
else break;
}
if(total>4) { return true;}
return false;
}
function pushstack()
{
}
function popstack() //悔棋
{
if(_stack.length/2<1) return;
//var ispresentperson=(_stack.length/2)%2?true:false;//這個跟誰先下有關
var ispresentperson=presentperson; //now it has not matter with the length of _stack
var j=_stack.pop();
var i=_stack.pop();
removeone(ispresentperson,i,j);

}
function removeone(ispresentperson,i,j)
{ var obj=document.getElementById("chesetable");
//text,tbody
var tbody=obj.firstChild.nextSibling;
tbody.rows[i].cells[j].innerHTML="";
chese[maxsize*i+j]=0; //也要初始化那個棋子所在的位置
presentperson=!presentperson;//也要回滾該誰走,who's turn now?
if(!ispresentperson) {personstep--;
document.getElementById("aboutsteppeople").innerHTML=personstep;
}
else {machinestep--;
document.getElementById("aboutstepmachine").innerHTML=machinestep;
}

}
function machinedecideposition() //機器決定下一步的位置
{ //在第一層節點選擇的時候採用貪婪演算法,直接找出相對分數比較高的幾個形成第一層節點,目的是為了提高搜索速度和防止堆棧溢出。
if(machinestep==0) //機器走第一步
{ var obj=document.getElementById("chesetable").rows[7].cells[7];
if(putone(obj,7,7)==false)
{ obj=document.getElementById("chesetable").rows[6].cells[6];
putone(obj,6,6);
}
}
else if(machinestep==1) //機器走第二步
{ var obj=document.getElementById("chesetable").rows[7].cells[7];
if(putone(obj,7,7)==false) //7,7位置被佔用
{ obj=document.getElementById("chesetable").rows[6].cells[6];
if(putone(obj,6,6)==false)//6,6位置被佔用
{obj=document.getElementById("chesetable").rows[6].cells[7];
putone(obj,6,7);
}
}

}
else { var checkword=2; //先判斷機器的,在設置為1判斷這個位置對人的貢獻
for(var tttt=0;tttt<maxsize*maxsize;tttt++)
chesevalue[tttt]=-10;//初始化
for(var i=0;i<maxsize;i++)
for(var j=0;j<maxsize;j++)
{ if(chese[maxsize*i+j]!=0) //the position is occupied
continue;

var total=1;
var tempj=j+1;
var spacenumber=0; //中間空多少個
var befive=0; //成5,包括五連和長連
var livefour=0; //活四,有兩個點可以成5地四
var befour=0; //沖四,只有一個點可以成為5的四
var deadfour=0; //死四,不能成為5的四
var livethree=0; //活三,再走一步就可以成為活四的三
//活三包括 連活三和跳活三
var bethree=0;
var livetwo=0;
var betwo=0;
//三三,一子落下同時形成兩個活三
//四四,一子落下同時形成兩個沖四
//四三,一子落下同時形成一個沖四和 活三
for(var tt=0;;tt++)
{ if(tt==0)
checkword=2; //machine
else checkword=1; //people
while(tempj<maxsize) //橫
{ if(chese[maxsize*i+tempj]==checkword&&checkword==2) //是機器的
{total++; tempj++;}
else if(chese[maxsize*i+tempj]==0&&checkword==2) //對於防守不考慮空格
{ //is empty
spacenumber++; break;
if((++tempj)<maxsize&&chese[maxsize*i+tempj]==checkword&&spacenumber<2)
total++;
else break;
}
else if(chese[maxsize*i+tempj]==checkword&&checkword==1) //防守
{ total++; tempj++;
}
else break;
}
var endj=tempj;
tempj=j-1;
while(tempj>=0)
{ if(chese[maxsize*i+tempj]==checkword&&checkword==2)
{total++; tempj--;}
else if(chese[maxsize*i+tempj]==0&&checkword==2)
{ //is empty
spacenumber++; break;
if((--tempj)>=0&&chese[maxsize*i+tempj]==checkword&&spacenumber<2)
total++;
else break;
}
else if(chese[maxsize*i+tempj]==checkword&&checkword==1) //防守
{ total++; tempj--;
}
else break;
}
var startj=tempj;
//由於checkword==2先運行,所以可以直接用befive=1,也可以用befive++;
if(total>4) { //能組成五個或以上的
if(checkword==2)
{befive+=2
} //堵住成五
else befive++;
}//進攻要大於防守
else if(total==4) { //能組成四個
if(checkword==2) //表示考慮進攻
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=1&&chese[maxsize*i+endj]!=1) //兩邊為空格
livefour+=2; //放在這里可以形成一個活四
else if((startj>=0&&chese[maxsize*i+startj]!=1)||(endj<maxsize&&chese[maxsize*i+endj]!=1))
befour+=2; //形成一個沖四
else deadfour+=2;
}
else //考慮防守
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=2&&chese[maxsize*i+endj]!=2)
livefour+=1; //放在這里可以形成一個活四
else if((startj>=0&&chese[maxsize*i+startj]!=2)||(endj<maxsize&&chese[maxsize*i+endj]!=2))
befour+=1; //形成一個沖四
else deadfour+=1;

}
}
else if(total==3){if(checkword==2) //表示考慮進攻
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=1&&chese[maxsize*i+endj]!=1) //兩邊為空格
livethree+=2; //放在這里可以形成一個活三(算做連活三)
else if((startj>=0&&chese[maxsize*i+startj]!=1)||(endj<maxsize&&chese[maxsize*i+endj]!=1))
bethree+=2; //形成一個眠三,即可以沖四的三
// else deadfour+=2;
//跳三
}
else //考慮防守
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=2&&chese[maxsize*i+endj]!=2) //兩邊為空格
livethree+=1; //放在這里可以形成一個活三(算做連活三)
else if((startj>=0&&chese[maxsize*i+startj]!=2)||(endj<maxsize&&chese[maxsize*i+endj]!=2))
bethree+=1; //形成一個眠三,即可以沖四的三
}
}
else if(total==2){ if(checkword==2) //表示考慮進攻
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=1&&chese[maxsize*i+endj]!=1) //兩邊為空格
livetwo++; //放在這里可以形成一個活三(算做連活三)
}
else //考慮防守
{ if(startj>=0&&endj<maxsize&&chese[maxsize*i+startj]!=2&&chese[maxsize*i+endj]!=2) //兩邊為空格
livetwo++; //放在這里可以形成一個活三(算做連活三)

}
}

⑺ 什麼樣的編程水平可以編寫五子棋、象棋程序

針對問題補充部分:

如果這個程序是人人對戰的,那和人工智慧完全沒有關系。

但是如果你要編寫一個帶機器人可以人機對弈的程序,那這個機器人的設計就是人工智慧了。這個難度會大出數倍的(五子棋可能好一些)。不過也有人因為編寫了戰勝世界冠軍的戰棋類機器人而出名過(當然他們用的硬體也很強),如果樓主能編出來這種程序,估計就可以商用往外賣了。

人工智慧裡面要學的東西很多,從理論框架到具體的機器學習演算法(這個演算法和ACM裡面的簡單演算法完全是兩回事)。如果樓主不是這個專業的, 而編寫這種程序更多的是為了練習編程,那麼還是建議不要涉獵人機對戰的部分了。

如果真的感興趣,建議等真的有很多時間可以開發個帶機器人的2.0版本來(樓主要真能寫出來,加我好友吧,我們可以互相交流一下,哈哈,主要是我向你學習一下)

=========================
我有個同學以前編過一個。自己曾經也試圖編掃雷,寫了一半最後還是放棄了。。。

編程水平的話,首先要有基本的語言知識,能夠相對熟練地編寫百行以上的程序吧。

當然上面的要求太基礎了,要編這種棋類程序還需要兩點技巧:

1. 可視化編程,比如c++的話就需要熟悉win32編程或者MFC編程。這樣才能讓程序可以看到,並且視窗交互。(我也見過一個cmd版本的五子棋,很驚嘆,不過樣子就不好看了)

2. 復雜邏輯的處理。無論是五子棋和象棋,都有自己的規則。這些規則人描述起來都比較麻煩,要正確的反應到程序中,就需要維護很多狀態信息,加入很多判斷函數(比如是否已經獲勝、走法是否合法、等等)。如果你可視化編程已經沒有問題,你會發現這部分邏輯設計難度是遠遠大於語言本身的。

如果以上兩點都可以克服的話,這種程序是可以編出來的。樓主加油吧。

⑻ 五子棋-人人對戰

五子棋是國內受到普遍歡迎的一款游戲,規則簡單,趣味不俗。作為一名程序員,自然也希望將它移植到電腦上。

這篇我們要講的主要就是實現簡單的人人對戰,AI演算法放到以後單獨說。

我指叢們先來整理一下脈絡,看看實現五子棋需要哪些內容:

棋盤的繪制應該是十分簡單,就不多說了,畫成什麼樣就看自己的心情。當然,為了使用起來更加,我們可以加上開始游戲、悔棋、認輸等按鈕,按鈕的監聽我之前的文章也有講過,不清楚的歡迎大家去看一下。其中,為了更合理一點,在開始游戲之前顯然是不能悔棋和認輸的,所以我們需要在開始游戲按鈕按下之前將這兩個按鈕設置為無法使用,調用 setEnabled 方法就可以實現,需要一個參數,類型為布爾。

按鈕的監聽我們添加在 actionPerformed 方法(使用這個方法需要添加 ActionListener 介面)里,通過 e.getActionCommand 來獲得按鈕的名字來判斷是哪個按鈕,實現相應的功能。而落子的監聽我們通過 mousePressed mouseReleased mouseClicked 來實現(需要繼承 MouseAdapter 類或者添加 MouseListener 介面)。

其中 mouseClicked 不推薦使用,因為不好界定click的時間,本身似乎也有些問題,有些時候會監聽不到,而前兩個則沒有上述問題。我則選擇了 mousePressed

棋盤已經繪制完成,而五子棋的子下在棋盤線的交點處,為了棋盤的公整,應當將棋下在交點上,這只需要簡單的數學計算就可以算出來,至於棋子長什麼樣,大家自己動手。

棋子已經能畫出來了,但這顯然是不夠的,因為之後還有勝負判斷,人可以一眼看到棋盤上子落在何處,計算機可不行,我們得用容器將棋子落下的位置保存下來,一個 二維數組 即可(0表示空,1表示黑子,2表示白子,當然其他方法也可以)。此外如果我們還要添加悔棋功能,那麼僅保存棋子落下的位置是完全不夠的,我們需要知道落子的先後順序,所以我們應當選擇使用有序容器。這里我選擇了 Vector ,當然其他有序容器也都可以,自己選擇。

為了儲存和之後的操作方便,我們把棋子的位置(x和y)用一個類來保存,這個類十分簡單,只需要兩個 int 即可。這里,我儲存的x和y並非是棋子在棋盤上的絕對位置,而是棋子的序號(0-14),這樣的好處是在中間使用的時候十分清楚,並且如果要改變棋盤的大小等屬性,只需要在繪畫時更改公式即可唯檔櫻,中間過程一概不用動。

到這里,落子的監聽基本就完成了,總結一下:

最後這一部分非常簡單,只需要在每次落子之後判斷一下是否達成五子即可。又因為五子棋規則簡單,在落子之後棋子的位置不會再發生變化,所以只需要判斷落子點是否會形成五子就可以,沒必要每次都遍歷全局。五子棋共有8個方向,但是形成連子其實只有四條直線,所以只需要判斷四次。

先往上再往下,遇到異色子或者邊界就停下,每個同色自給計數變數+1,加上自身含有5個即可達成勝利。這里基本不會遇到什麼問題,只要細心判斷邊界,保證下標蠢伍不越界就不會有任何問題。

上述三個部分完成, 五子棋-人人對戰 基本就完成了,但是重繪是每次繪圖都會遇到的問題,在這里就提醒一下不要忘記重繪,不懂重繪的可以去搜索一下關於重繪的文章,本身並不是很難。

個人博客: https://wilfredshen.cn/

⑼ 求mac版中國象棋,五子棋下載地址

<%@ page contentType="text/html;charset=gb2312" language="java" %>
<html>
<head>
<title>中國象棋<桐穗/title>
<link rel="stylesheet" type="text/css" href="CSS/StyleChess.css"/>
<style type="text/css">
.chessstyle{
width:52px;
height:53px;
margin-left:4px;
margin-top:4px;
cursor:pointer;
display:inline;
text-align:center;
position:relative;
visibility:visible;
/*border:1px solid #00ff00;*/
}
.chessselected{
width:52px;
height:53px;
margin-left:4px;
margin-top:4px;
display:inline;
text-align:center;
position:relative;
background-image:url(image/select.png);
}
.button1 {
color:#003366;
font-size:14px;
font-weight:bold;
border-top:1px #CCC solid;
border-left:1px #CCC solid;
border-right:1px #CCC solid;
border-bottom:3px #CCC solid;
padding:2px 6px;
text-align:center;
background:#990000;
}
</style>
頃攔</head>
<body style="margin:0px;padding:0px;" onload="startup2()">
<div id="qipan1" style="width:509px;height:575px;border:0px solid;background:url(image/center.jpg);background-repeat:no-repeat;margin-left:350px;">
<% for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
{ out.print("<div class='chessstyle' id='"+(i*9+j)+"' types='block' onclick='getchess(this)' onblur='backtonormal(this)'>");
// out.print(i*9+j);
out.print("</div>");
}
%>
</div>
<div style="text-align:center">
<input type="button" value="重新開始" class="button1" onclick="reload()"/>
<input type="button" value="悔棋" class="button1" onclick="undo()"/>
</div>
<script language="javascript">
var from=-1;
var to=-1;
var _stack=new Array();
var redturn=true;//now it is the red's turn ,也表示紅方開始下
function $(s)
{ return document.getElementById(s);
}
function reload()
{ document.location.reload();
}
function undo()
{ if(_stack.length<4) return false;
var toid=_stack.pop();
var fromid=_stack.pop();
var topos=_stack.pop();
var frompos=_stack.pop();
//alert(toid+" "局乎卜+fromid+" "+topos+" "+frompos);
if(toid==-1)
{ /*alert($(topos).childNodes.length);
alert($(topos).removeChild($(topos).firstChild)); //innerHTML="";
var chessimg="image/"+fromid.substr(0,fromid.length-1)+".gif";
alert(chessimg);
draw(chessimg,true,frompos,fromid);
alrt("dd");
$(frompos).appendChild($(topos).firstChild);
*/
$(frompos).appendChild($(topos).firstChild);
}
else{ var chessimg="image/"+fromid.substr(0,fromid.length-1)+".gif";
draw(chessimg,true,frompos,fromid);
$(topos).innerHTML="";
chessimg="image/"+toid.substr(0,toid.length-1)+".gif";
draw(chessimg,true,topos,toid);
}
redturn=!redturn; //回滾由誰走
}
function draw(chessimg,booleanvalue,position,imageid)
{ //棋的圖片,表示黑棋還是白棋,棋放的位置,棋的ID(用來唯一標識某個棋,通過前面的r/b來快速判斷是紅棋還是黑棋)
var obj=$(position);
var img=null;
if(document.uniqueID)
{ img=document.createElement("<img src='"+chessimg+"' width='45px' height='45px' alt='' id='"+imageid+"' style='vertical-align:bottom;'/>");
//vertical-align:bottom;很重要,刪除了就更對不齊了
// align='center' valign='middle' style='vertical-align:middle;margin-top:0px;margin-left;0px;'
}
else { img=document.createElement("img");
img.setAttribute("src",chessimg);
img.setAttribute("width","45px");
img.setAttribute("height","45px");
img.setAttribute("alt"," ");
img.setAttribute("id",imageid);
img.setAttribute("align","center");
img.setAttribute("style","vertical-align:middle;");
//img.style.verticalAlign="middle";
//alert(position);
//alert(obj.childNodes.length);
}

obj.appendChild(img);

}
function startup2()
{
var qipan = document.getElementById("qipan1");
/* for(var t=0;t<qipan.attributes.length;t++)
alert(qipan.attributes[t].nodeName+" "+qipan.attributes[t].nodeValue);
*/
init();
}
function getchess(obj)
{ //alert(obj.childNodes.length);
if(obj.childNodes.length==1) //是標簽img
{
if(redturn) //紅方下的時候
{ if(obj.firstChild.id.charAt(0)=='r')//輪到紅棋下的時候選擇的是紅棋
{obj.className="chessselected";
from=obj.id;
}
else if(obj.firstChild.id.charAt(0)=='b'&&from>=0)//輪到紅棋下的時候選擇的是黑棋
{
to=obj.id;
if(checkok(from,to))
{obj.className="chessselected";
_stack.push(from,to,$(from).firstChild.id,$(to).firstChild.id);
eatchess(from,to);
}
}
}
else { if(obj.firstChild.id.charAt(0)=='b')//輪到黑棋下的時候選擇的是紅黑棋
{ from=obj.id;
obj.className="chessselected";
}
else if(obj.firstChild.id.charAt(0)=='r'&&from>=0)//輪到黑棋下的時候選擇的是紅棋
{
to=obj.id;
if(checkok(from,to))
{ obj.className="chessselected";
// alert($(from).firstChild.id);
_stack.push(from,to,$(from).firstChild.id,$(to).firstChild.id);
eatchess(from,to);

}
}
}
}//end of 'img'
else {
if(from==-1) //還沒有選擇過棋子
return;
else { if(checkok(from,obj.id))
{ //alert(obj.firstChild);
_stack.push(from,obj.id,$(from).firstChild.id,-1);
movechess(from,obj.id);
obj.className="chessselected";

}
} //選擇了空白位置就表示移動
}
}
function backtonormal(obj)
{ obj.className='chessstyle';
}
function eatchess(from1,to1)
{ //alert("eat");
var fromobj=$(from1);
var toobj= $(to1);
if(toobj.firstChild.id.indexOf("shuai")!=-1||toobj.firstChild.id.indexOf("jiang")!=-1)
{ if(redturn) alert("紅方勝");
else alert("黑方勝");
setTimeout(reload,4000);
}
toobj.replaceChild(fromobj.firstChild,toobj.firstChild);
from=-1; //吃完了後初始化要移動的棋的位置
to=-1;
redturn=!redturn;
}
function checkok(from1,to1)
{ var toobj=$(to1);
var fromobj=$(from1);
var parentobj=$("")
var str=fromobj.firstChild.id; //檢查是否符合該棋的 rule,不符合返回false;
if(-1!=str.indexOf("ju")) //走車
{ if(Math.floor(from1/9)==Math.floor(to1/9)) //同一行走車
{ var start=from1<to1?from1:to1;
var end=from1>to1?from1:to1;
for(var t=eval(start)+1;t<end;t++)
{ if($(t).childNodes.length>=1) return false; //中間有其它棋子,不能走
}
}
else if(from1%9==to1%9) //同一列走車
{ var start=Math.floor((from1<to1?from1:to1)/9);
var end=Math.floor((from1>to1?from1:to1)/9);

for(var t=start+1;t<end;t++)
{ if($((t*9+to1%9)).childNodes.length>=1) return false;
}
}
else return false;//其它情況就算不符合
}
else if(-1!=str.indexOf("ma")) //走馬觀花
{ var rowdec=Math.floor(from1/9)-Math.floor(to1/9);
var linedec=from1%9-to1%9;
//alert(rowdec+" "+linedec);
if(rowdec==2) //60,120 degree
{ if($((from1-9)).childNodes.length>=1) return false;
if(!(linedec==1||linedec==-1)) return false;
}
else if(rowdec==-2) //240,300 degree
{ if($((eval(from1)+9)).childNodes.length>=1){ return false;}
if(!(linedec==1||linedec==-1)) return false;
}
else if(rowdec==1)
{ if(linedec==-2) //30 degree
{ if($((eval(from1)+1)).childNodes.length>=1) return false;
}
else if(linedec==2)//150 degree
{ if($((from1-1)).childNodes.length>=1) return false;
}
else return false;
}
else if(rowdec==-1)
{ if(linedec==-2) //330 degree
{ if($((eval(from1)+1)).childNodes.length>=1) return false;
}
else if(linedec==2)//210 degree
{ if($((from1-1)).childNodes.length>=1) return false;
}
else return false;
}
else return false;
}
else if(-1!=str.indexOf("xiang")) //走象
{ var rowdec=Math.floor(from1/9)-Math.floor(to1/9);
var linedec=from1%9-to1%9;

if(Math.abs(rowdec)==2&&Math.abs(linedec)==2)
{ if(redturn&&(eval(to1)>45)) //紅棋走的時候走過界了
return false;
else if((redturn==false)&&(eval(to1)<45)) //黑棋走的時候走過界了
return false;
}
else return false;

}
else if(-1!=str.indexOf("shi")) //走士
{ var rowdec=Math.floor(from1/9)-Math.floor(to1/9);
var linedec=from1%9-to1%9;
if((Math.abs(rowdec)==1)&&(Math.abs(linedec)==1))
{ if(redturn)
{ if((Math.floor(to1/9)>2)||(to1%9<3)||(to1%9>5)) return false; //紅方過界
}
else {
if((Math.floor(to1/9)<7)||(to1%9<3)||(to1%9>5)) return false; //黑方過界
}
}
else return false;
}
else if(-1!=str.indexOf("pao")) //走炮
{ var middlechess=0; //中間的棋子的個數
var middlered=true; //標示中間的棋子是紅色的
if(Math.floor(from1/9)==Math.floor(to1/9)) //同一行走炮
{ var start=from1<to1?from1:to1;
var end=from1>to1?from1:to1;
for(var t=eval(start)+1;t<end;t++)
{ if($(t).childNodes.length>=1){ middlechess++;
}
}
}
else if(from1%9==to1%9) //同一列走炮
{ var start=Math.floor((from1<to1?from1:to1)/9);
var end=Math.floor((from1>to1?from1:to1)/9);
// alert(start+" "+end);
for(var t=start+1;t<end;t++)
{ if($((t*9+to1%9)).childNodes.length>=1){ middlechess++;
/* if($((t*9+to1%9)).firstChild.id.charAt(0)=='r')
middlered=true;
else middlered=false; */
}
}
}
else return false;//其它情況就算不符合
// alert(middlechess+" "+redturn+" "+middlered);
if(middlechess==1)
{ if(toobj.childNodes.length==0) return false; //吃的時候不能是空白區
}
else if(middlechess==0) //移動到的地方要為空白區
{ if(toobj.childNodes.length>=1) return false;
}
else return false;
}
else if(-1!=str.indexOf("zu")) //走卒
{ if(redturn) //紅棋走卒
{ if(Math.abs(to1-from1)==1&&(Math.floor(to1/9)==Math.floor(from1/9))&&(Math.floor(to1/9)>=5)) //走同一行
return true;
else if((to1-from1)==9) //走同一列
return true;
else return false;
}
else{ if(Math.abs(to1-from1)==1&&(Math.floor(to1/9)==Math.floor(from1/9))&&(Math.floor(to1/9)<5)) //走同一行
return true;
else if((to1-from1)==-9) //走同一列
return true;
else return false;
}
}
else if((-1!=str.indexOf("shuai"))||(-1!=str.indexOf("jiang"))) //走帥
{ var rowdec=Math.floor(from1/9)-Math.floor(to1/9);
var linedec=from1%9-to1%9;
if(rowdec==1||rowdec==-1)//走列
{ if(linedec!=0) return false;
if(redturn)
{ if(Math.floor(to1/9)>2||to1<0) return false;
}
else{ if(Math.floor(to1/9)<7) return false;
}
}
else if(linedec==1||linedec==-1)//走行
{ if(rowdec!=0) return false;
if((to1%9<3)||(to1%9>5)) return false;
}
else { var start=Math.floor((from1<to1?from1:to1)/9);
var end=Math.floor((from1>to1?from1:to1)/9);
if(($(to1).firstChild.id.indexOf("shuai")!=-1)||($(to1).firstChild.id.indexOf("jiang")!=-1))
{ for(var t=start+1;t<end;t++) //直接可以吃帥
{ if($((t*9+to1%9)).childNodes.length>=1) return false;
}
}
else return false;
}
}
else return false;
return true;
}
function movechess(from1,to1)
{
var toobj=$(to1);
var fromobj=$(from1);
//if(checkok==false) return false; //檢查是否符合該棋的 rule,不符合返回false;
toobj.appendChild(fromobj.firstChild);
from=-1; //移動後初始化要移動的棋的位置
to=-1;
redturn=!redturn;
return true;
}
function init()
{ draw("image/rju.gif",true,0,"rju1"); //上面放紅的
draw("image/rma.gif",true,1,"rma1");
draw("image/rxiang.gif",true,2,"rxiang1");
draw("image/rshi.gif",true,3,"rshi1");
draw("image/rshuai.gif",true,4,"rshuai");
draw("image/rshi.gif",true,5,"rshi2");
draw("image/rxiang.gif",true,6,"rxiang2");
draw("image/rma.gif",true,7,"rma2");
draw("image/rju.gif",true,8,"rju2");
draw("image/rpao.gif",true,19,"rpao1");
draw("image/rpao.gif",true,25,"rpao2");
draw("image/rzu.gif",true,27,"rzu1");
draw("image/rzu.gif",true,29,"rzu2");
draw("image/rzu.gif",true,31,"rzu3");
draw("image/rzu.gif",true,33,"rzu4");
draw("image/rzu.gif",true,35,"rzu5");

draw("image/bzu.gif",false,54,"bzu1"); //棋盤的下方放黑棋
draw("image/bzu.gif",false,56,"bzu2");
draw("image/bzu.gif",false,58,"bzu3");
draw("image/bzu.gif",false,60,"bzu4");
draw("image/bzu.gif",false,62,"bzu5");
draw("image/bpao.gif",false,64,"bpao1");
draw("image/bpao.gif",false,70,"bpao2");
draw("image/bju.gif",false,81,"bju1");
draw("image/bma.gif",false,82,"bma1");
draw("image/bxiang.gif",false,83,"bxiang1");
draw("image/bshi.gif",false,84,"bshi1");
draw("image/bjiang.gif",false,85,"bjiang");
draw("image/bshi.gif",false,86,"bshi2");
draw("image/bxiang.gif",false,87,"bxiang2");
draw("image/bma.gif",false,88,"bma2");
draw("image/bju.gif",false,89,"bju2");

}
</script>
</html>

⑽ 如何學習JAVA

如何學習java?

在這里我來為您提供一下Java學習的詳細路線:

這是Java全套系列的學習思維導圖:Java學習思維導圖

高琪老師是我校著名的Java講師,其課程也是受到廣大初學者所喜愛;

如果有的小夥伴想要學Java編程,可以在下方評論領取視頻!有最新的Java課程;


那麼現在來說一下,Java編程初學者應該如何快速入門:

1、按階段規劃,時間留夠,但一定要有互相催促的夥伴,否則會很孤獨也難以堅持,夥伴得挑好了,別把你帶歪了。

2、有了夥伴先學習HTML+CSS,做點網頁出來,讓自己心中對軟體行業充滿成就感,這樣說培養自己的興趣的一種,俗話說興趣是最好的老師,沒有興趣走不遠。

3、然後學習簡單Java語法,寫簡單的流程式控制制語句,簡單數據結構,當邏輯思維和數據結構達到一個3層循環都能搞清楚的水準的時候,馬馬虎虎可以進入下一步了

4、進入Java面向對象的學習,搞清楚類、對象,封裝繼承多態,內部類,對象的概念,然後進入常用集合和泛型以及集合的底層數據結構的學習

5、學習IO流,能夠操作讀取大文件,多線程,Socket編程,學完之後使用JavaSE的基礎做一個五子棋游戲,或者QQ聊天,強化一下自己的知識。

6、進入資料庫學習,先學習MySQL,較為簡單常用,學完資料庫,也可以看看Redis的使用

7、進入JavaWeb課程的學習,以Servlet+Jsp為主,還有tomcat和http基礎,

8、學習JavaScritp+JQuery,結合JavaWeb做一個小的管理系統

9、進入JavaEE的學習,常用框架,主要是SpringMVC和Mybatis,學完之後試著去接觸微服務架構

10、學習Linux操作,使用Linux部署tomcat進行環境搭建,跑一個簡單的頁面出來

11、SpringBoot可以進行了解學習,Oracle可以進行了解學習。

最後:最上方詳細的學習線路圖,對比話術更加詳細,希望可以幫助到你們

閱讀全文

與程序員css五子棋相關的資料

熱點內容
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376
cnc編程有前途嗎 瀏覽:586
聯想app怎麼聯網 瀏覽:722
linuxftp命令登錄 瀏覽:1000
android獲取圖片縮略圖 瀏覽:646
神戶制鋼螺桿壓縮機 瀏覽:29
差分演化演算法 瀏覽:567
中山市加密軟體 瀏覽:446
mc反編譯源碼 瀏覽:139
企業商城網站源碼 瀏覽:411
shell腳本編程是什麼 瀏覽:762
單片機led閃爍匯編 瀏覽:203
點淘app怎麼沒金蛋了 瀏覽:878
app拉新哪裡找推廣碼 瀏覽:935
哪個app生活服務好 瀏覽:108
mht安卓用什麼軟體打開 瀏覽:320
html5即時通訊源碼 瀏覽:144
python編程基礎豆瓣 瀏覽:710
程序員亂碼是什麼意思 瀏覽:373