五子棋

五子棋

package com.scorpionhermit;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveInARow extends JFrame implements MouseListener { Vector v = new Vector(); //所有的每步走棋信息 Vector white = new Vector(); //白方走棋信息 Vector black = new Vector(); //黑方走棋信息 boolean b; //用來判斷白旗還是黑棋 int whiteCount, blackCount; //計(jì)算悔棋步數(shù) int w = 25; //間距大小 int px = 100, py = 100; //棋盤的大小 int pxw = px + w, pyw = py + w; int width = w * 16, height = w * 16; int vline = width + px; //垂直線的長(zhǎng)度 int hline = height + py; //水平線的長(zhǎng)度 /** * 構(gòu)造方法 */ public FiveInARow() { super("單機(jī)版五子棋"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉按鈕 Container con = this.getContentPane(); con.setLayout(new BorderLayout()); this.addMouseListener(this);//添加監(jiān)聽 this.setSize(600, 600);//設(shè)置窗體大小 this.setBackground(Color.orange); this.setVisible(true); } /** * 畫棋盤和棋子 * @param e */ public void paint(Graphics g) { g.clearRect(0, 0, this.getWidth(), this.getHeight());//清除畫板 g.setColor(Color.BLACK);//繪制網(wǎng)格顏色? * @param e */ public void paint(Graphics g) { g.clearRect(0, 0, this.getWidth(), this.getHeight());//清除畫板 g.setColor(Color.BLACK);//繪制網(wǎng)格顏色 g.drawRect(px, py, width, height);//網(wǎng)格大小 g.drawString("單機(jī)版五子棋小游戲川蒙,右擊可以悔棋洛口,歡迎使用", 180, 70); for (int i=0; i<15; i++) { g.drawLine(pxw+i*w, py, pxw+i*w, hline);//每條橫線和豎線 g.drawLine(px, pyw+i*w, vline, pyw+i*w); } for (int x=0; x<v.size(); x++) { String str = (String)v.get(x); String tmp[] = str.split("-"); int a = Integer.parseInt(tmp[0]); int b = Integer.parseInt(tmp[1]); a = a * w + px; b = b * w + py; if (x%2 == 0) { g.setColor(Color.WHITE); } else { g.setColor(Color.BLACK); } g.fillArc(a-w/2, b-w/2, w, w, 0, 360); } } @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == e.BUTTON1) { int x = e.getX(); int y = e.getY(); x = (x - x % w) + (x % w > w / 2 ? w : 0); y = (y - y % w) + (y % w > w / 2 ? w : 0); x = (x - px) / w; y = (y - py) / w; if (x >= 0 && y >= 0 && x <= 16 && y <= 16) {if (v.contains(x+"-"+y)) { System.out.println("已經(jīng)有棋了穿香!"); } else { v.add(x+"-"+y); this.repaint(); if (v.size() % 2 == 0) { black.add(x+"-"+y); this.victory(x, y, black);// System.out.println("黑棋"); } else { white.add(x+"-"+y); this.victory(x, y, white);// System.out.println("白棋"); }// System.out.println(e.getX()+"-"+e.getY()); } } else {// System.out.println(e.getX()+"-"+e.getY()+"|"+x+"-"+y+"\t超出邊界了"); } } if (e.getButton() == e.BUTTON3) { //右擊悔棋的方法// System.out.println("鼠標(biāo)右擊--悔棋"); if (v.isEmpty()) { JOptionPane.showMessageDialog(this, "沒有棋可悔"); } else { if (v.size() % 2 == 0) { //判斷是白棋悔棋听皿,還是黑棋悔棋 blackCount++; if (blackCount > 3) { JOptionPane.showMessageDialog(this, "黑棋已經(jīng)悔了3步"); } else { v.remove(v.lastElement()); this.repaint(); } } else { whiteCount++; if (whiteCount > 3) { JOptionPane.showMessageDialog(this, "白棋已經(jīng)悔了3步"); } else { v.remove(v.lastElement()); this.repaint(); } } else { whiteCount++; if (whiteCount > 3) { JOptionPane.showMessageDialog(this, "白棋已經(jīng)悔了3步"); } else { v.remove(v.lastElement()); this.repaint(); } } } } } /** * 判斷勝利的方法 * @param x * @param y * @param contain */ private void victory(int x, int y, Vector contain) { int cv = 0; //垂直方向棋子數(shù)量 int ch = 0; //水平方向棋子數(shù)量 int ci1 = 0; //斜面方向棋子數(shù)量1 int ci2 = 0; //斜面方向棋子數(shù)量2 //計(jì)算水平方向棋子數(shù)量 for (int i=1; i<5; i++) { if (contain.contains((x+i)+"-"+y)) { ch++; } else { break; } } for (int i=1; i<5; i++) { if (contain.contains((x-i)+"-"+y)) { ch++; } else { break; } } //計(jì)算垂直方向棋子數(shù)量 for (int i=1; i<5; i++) { if (contain.contains(x+"-"+(y+i))) { cv++; } else { break; } } for (int i=1; i<5; i++) { if (contain.contains(x+"-"+(y-i))) { cv++; } else { break; } } //計(jì)算45°斜面方向棋子數(shù)量 for (int i=1; i<5; i++) { if (contain.contains((x+i)+"-"+(y+i))) { ci1++; } else { break; } } for (int i=1; i<5; i++) { if (contain.contains((x-i)+"-"+(y-i))) { ci1++; } else { break; } } //計(jì)算135°斜面方向棋子數(shù)量 for (int i=1; i<5; i++) { if (contain.contains((x+i)+"-"+(y-i))) { ci2++; } else { break; } } for (int i=1; i<5; i++) { if (contain.contains((x-i)+"-"+(y+i))) { ci2++; } else { break; } } if (ch>=4 || cv>=4 ||ci1>=4 ||ci2>=4) { System.out.println(v.size()+"步棋"); if (v.size() % 2 == 0) { //判斷是黑棋贏,還是白棋贏 JOptionPane.showMessageDialog(null, "黑棋贏了"); } else { JOptionPane.showMessageDialog(null, "白棋贏了"); } this.v.clear(); this.black.clear(); this.white.clear(); this.repaint(); } } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哲银,一起剝皮案震驚了整個(gè)濱河市弛作,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌析校,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铜涉,死亡現(xiàn)場(chǎng)離奇詭異智玻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芙代,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吊奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纹烹,你說我怎么就攤上這事页滚。” “怎么了铺呵?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵裹驰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我片挂,道長(zhǎng)幻林,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任宴卖,我火速辦了婚禮滋将,結(jié)果婚禮上邻悬,老公的妹妹穿的比我還像新娘症昏。我一直安慰自己,他們只是感情好父丰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布肝谭。 她就那樣靜靜地躺著,像睡著了一般蛾扇。 火紅的嫁衣襯著肌膚如雪攘烛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天镀首,我揣著相機(jī)與錄音坟漱,去河邊找鬼。 笑死更哄,一個(gè)胖子當(dāng)著我的面吹牛芋齿,可吹牛的內(nèi)容都是我干的腥寇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼觅捆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赦役!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栅炒,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤掂摔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赢赊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乙漓,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年域携,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了簇秒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秀鞭,死狀恐怖趋观,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锋边,我是刑警寧澤皱坛,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站豆巨,受9級(jí)特大地震影響剩辟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜往扔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一贩猎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萍膛,春花似錦吭服、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至串塑,卻和暖如春沼琉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桩匪。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工打瘪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓闺骚,卻偏偏與公主長(zhǎng)得像桃移,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葛碧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一借杰、知識(shí)準(zhǔn)備 swing組件完成圖形用戶界面,窗體 JFrame創(chuàng)建窗體进泼,是swing中基礎(chǔ)的類之一 public...
    印奕閱讀 220評(píng)論 0 0
  • 直接上圖蔗衡,看結(jié)果,很簡(jiǎn)潔乳绕,一個(gè)棋盤和若干的黑白子绞惦。 首先我們要建立我們的棋盤和棋子,這就需要我們自己建立我們的棋盤...
    豬_隊(duì)友閱讀 1,017評(píng)論 5 3
  • 資源準(zhǔn)備: 資源準(zhǔn)備好之后就創(chuàng)建一個(gè)Plane洋措,把他放在相機(jī)的下面济蝉,成為相機(jī)的子物體,再創(chuàng)建4個(gè)空物體作為錨點(diǎn) 下...
    小鯨魚的U3d之旅閱讀 848評(píng)論 0 0
  • 為了幫助初學(xué)者理解菠发,注釋非常詳細(xì)王滤,希望對(duì)初學(xué)者有所啟發(fā)! 轉(zhuǎn)自:http://www.xxcxw.cn/forum...
    程小廝閱讀 645評(píng)論 0 0
  • #include #include #include<conio.h> #include #define MAXI...
    Sucifer閱讀 368評(píng)論 0 1