版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java實(shí)現(xiàn)五子棋單機(jī)版本文實(shí)例為大家分享了Java實(shí)現(xiàn)五子棋單機(jī)版的具體代碼,供大家參考,具體內(nèi)容如下
Java五子棋設(shè)計(jì)流程:
1.創(chuàng)建窗口和設(shè)計(jì)一個(gè)棋盤界面
2.實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊,棋子出現(xiàn),黑白棋輪流下
3.能夠判斷輸贏
4.添加按鈕功能
實(shí)現(xiàn)結(jié)果圖:
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Cursor;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjavax.imageio.ImageIO;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
publicclassTest{
publicstaticvoidmain(String[]args){
newMyFrame();
}
classMyFrameextendsJFrameimplementsMouseListener{
//保存坐標(biāo)
intx;
inty;
intx1;
inty1;
//黑子數(shù)
//白子數(shù)
//1是黑下,2是白下
//默認(rèn)開(kāi)始是黑旗先下
intflag=1;
//表示游戲是否結(jié)束
//true游戲開(kāi)始,false游戲結(jié)束,不能再下
booleancanPlay=true;
//保存之前下過(guò)的棋子的坐標(biāo)
//'0'代表沒(méi)有棋子,'1'代表黑棋,'2'代表白棋
int[][]allChess=newint[19][19];
//int[][]allChess=newint[25][25];
//當(dāng)前棋子的總數(shù)
intchessSum=0;
BufferedImagebgImage=null;
JButtonwithdraw=newJButton("悔棋");
JButtonrestart=newJButton("重新開(kāi)始");
JButtonexit=newJButton("退出");
JPanelsouth=newJPanel();
publicMyFrame(){
this.setTitle("五子棋");
setSize(630,700);
setLayout(newBorderLayout());
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
bgImage=ImageIO.read(newFile("C:\\Users\\us\\Desktop\\1.jpg"));
}catch(IOExceptione1){
e1.printStackTrace();
}
addMouseListener(this);//將窗體加入監(jiān)聽(tīng)
south.setLayout(newFlowLayout(FlowLayout.LEFT,60,30));
south.add(restart);
south.add(withdraw);
south.add(exit);
//初始化按鈕事件監(jiān)聽(tīng)器內(nèi)部類
MybuttonListenerbuttonListener=newMybuttonListener();
//將三個(gè)按鈕事件注冊(cè)監(jiān)聽(tīng)事件
restart.addActionListener(buttonListener);
withdraw.addActionListener(buttonListener);
exit.addActionListener(buttonListener);
//將按鈕面板加到窗體的南部
this.add(south,BorderLayout.SOUTH);
setVisible(true);
}
publicvoidpaint(Graphicsg){
inttempSum=chessSum;
//棋盤
g.drawImage(bgImage,8,30,this);
for(intcolum=58;colum600;colum=colum+30){//行
g.drawLine(38,colum,578,colum);
}
for(intrand=38;randrand=rand+30){//列
g.drawLine(rand,58,rand,598);
}
//黑點(diǎn)
g.fillOval(122,143,10,10);
g.fillOval(484,143,10,10);
g.fillOval(122,504,10,10);
g.fillOval(303,353,10,10);
g.fillOval(484,503,10,10);
g.fillOval(122,355,10,10);
g.fillOval(484,355,10,10);
g.fillOval(303,145,10,10);
g.fillOval(303,503,10,10);
for(inti=0;iallChess.length;i++){
for(intj=0;jallChess.length;++j){
//下黑子
if(allChess[i][j]==1){
inttempX=i*30+38;//左邊界到棋盤的距離
inttempY=j*30+58;//上邊界到棋盤的距離
g.setColor(Color.black);
g.fillOval(tempX-13,tempY-13,25,25);
}
//下白子
if(allChess[i][j]==2){
inttempX=i*30+38;
inttempY=j*30+58;
g.setColor(Color.white);
g.fillOval(tempX-13,tempY-13,25,25);
}
}
}
//最后棋子用紅框表示
if(chessSum0){
g.setColor(Color.red);
g.drawRect(x*30+38-13,y*30+58-13,25,25);
}
//g.setColor(Color.red);
//g.drawRect(x1*30+38-13,y1*30+58-13,25,25);
chessSum++;
System.out.println("總數(shù)為"+(chessSum-1));
}
publicvoidmouseClicked(MouseEvente){
x=e.getX();
y=e.getY();
//System.out.println("x="+e.getX()+""+"y="+e.getY());
if(canPlay){
if(x=38x=588y=58y=620){
x=(x-38)/30;//38起點(diǎn),適應(yīng)19x19
y=(y-58)/30;
if(allChess[x][y]==0){//此點(diǎn)沒(méi)有棋子,才可下
//判斷該由哪方下棋
if(flag==1){//'1'代表由黑方下
allChess[x][y]=1;//'1'表示此處放黑棋
this.checkFive();//判斷黑棋是否五子相連
flag=2;
}
else{
allChess[x][y]=2;//'2'表示此處放白棋
this.checkFive();//判斷白棋是否五子相連
flag=1;//'1'代表由黑方下
}
this.repaint();
}
}
}
}
//判斷五子相連
public
voidcheckFive(){
//把要下的棋子顏色保存
intcolor=allChess[x][y];
//計(jì)算已連棋子個(gè)數(shù)
intcount=1;
//判斷橫向右邊是否五子
for(inti=1;ii++){
if(x=15)
break;
if(color==allChess[x+i][y]){
count++;
}
checkWin(count);
}
count=1;
//判斷橫向左邊是否五子
for(inti=1;ii++){
if(x=3)//當(dāng)棋子左邊無(wú)法連成五子,直接退出
break;
if(color==allChess[x-i][y]){
count++;
}
checkWin(count);
}
count=1;
//判斷豎向下邊是否五子
for(inti=1;ii++){
if(y=15)//當(dāng)棋子左邊無(wú)法連成五子,直接退出
break;
if(color==allChess[x][y+i]){
count++;
}
checkWin(count);
}
count=1;
//判斷豎向上邊是否五子
for(inti=1;ii++){
if(y=3)//當(dāng)棋子豎向上邊無(wú)法連成五子,直接退出
break;
if(color==allChess[x][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷右斜上邊是否五子
for(inti=1;ii++){
if(y=3||x=15)//當(dāng)棋子右斜上邊無(wú)法連成五子,直接退出
break;
if(color==allChess[x+i][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷左斜向下邊是否五子
for(inti=1;ii++){
if(x=3||y=15)//當(dāng)棋子左斜向下邊無(wú)法連成五子,直接退出
break;
if(color==allChess[x-i][y+i]){
count++;
}
checkWin(count);
}
count=1;
//判斷左斜向上邊是否五子
for(inti=1;ii++){
if(x=3||y=3)
break;
if(color==allChess[x-i][y-i]){
count++;
}
checkWin(count);
}
count=1;
//判斷右斜向下邊是否五子
for(inti=1;ii++){
if(y=15||x=15)
break;
if(color==allChess[x+i][y+i]){
count++;
}
checkWin(count);
}
count=1;
}
publicvoidmouseEntered(MouseEvente){
x1=e.getX();
y1=e.getY();
if(x1=38x1=588y1=58y1=620){
setCursor(newCursor(Cursor.HAND_CURSOR));
}
}
publicvoidmouseExited(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
publicvoidmousePressed(MouseEventarg0){
}
publicvoidmouseReleased(MouseEvente){
publicvoidcheckWin(intcount){
if(count=5){//五子相連
if(allChess[x][y]==1){
JOptionPane.showMessageDialog(this,"黑方勝出!!!!!!");
}
if(allChess[x][y]==2){
JOptionPane.showMessageDialog(this,"白方勝出!!!!!!");
}
canPlay=false;//游戲結(jié)束
}
}
//重新開(kāi)始
publicvoidrestartGame(){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省西雙版納市2026屆生物高三上期末聯(lián)考模擬試題含解析
- 班組翻樣集中管理制度(3篇)
- 福建正規(guī)企業(yè)培訓(xùn)管理制度(3篇)
- 藥學(xué)項(xiàng)目管理制度有哪些(3篇)
- 詐騙投票活動(dòng)策劃方案(3篇)
- 防疫相關(guān)管理制度和流程(3篇)
- 食堂水質(zhì)檢測(cè)管理制度(3篇)
- 《GA 782.1-2008指紋信息應(yīng)用交換接口規(guī)范 第1部分:指紋信息應(yīng)用交換接口模型》專題研究報(bào)告-數(shù)字化身份時(shí)代的基石架構(gòu)深度
- 中學(xué)學(xué)生課外實(shí)踐基地建設(shè)制度
- 養(yǎng)老院特殊護(hù)理制度
- 糖水店員工管理制度
- 來(lái)料檢驗(yàn)控制程序(含表格)
- 醫(yī)院供氧、供電、供水故障脆弱性分析報(bào)告
- 2025年鈦合金閥項(xiàng)目可行性研究報(bào)告
- 耙地合同協(xié)議書
- 分布式基站光伏電站建設(shè)標(biāo)準(zhǔn)
- 2024-2025學(xué)年廣東省深圳市福田區(qū)六年級(jí)(上)期末數(shù)學(xué)試卷
- 酸棗扦插快繁技術(shù)規(guī)程DB1305T+098-2016
- 道岔滾輪作用原理講解信號(hào)設(shè)備檢修作業(yè)課件
- 小學(xué)師徒結(jié)對(duì)師傅工作總結(jié)
- 2024-2025學(xué)年山東省臨沂市高二上學(xué)期期末學(xué)科素養(yǎng)水平監(jiān)測(cè)數(shù)學(xué)試卷(含答案)
評(píng)論
0/150
提交評(píng)論