最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java棋類游戲?qū)嵺`之單機(jī)版五子棋

 更新時(shí)間:2021年04月26日 14:49:05   作者:濤涌四海  
這篇文章主要為大家詳細(xì)介紹了Java棋類游戲中的五子棋實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例講述了java實(shí)現(xiàn)的五子棋游戲代碼,分享給大家供大家參考,具體代碼如下

一、實(shí)踐目標(biāo)

1.掌握J(rèn)avaGUI界面設(shè)計(jì)
2.掌握鼠標(biāo)事件的監(jiān)聽(tīng)(MouseListener,MouseMotionListener)

二、實(shí)踐內(nèi)容

設(shè)計(jì)一個(gè)簡(jiǎn)單的五子棋程序,能夠?qū)崿F(xiàn)五子棋下棋過(guò)程。如下圖所示

1.五子棋棋盤類

package cn.edu.ouc.fiveChess; 
 
import java.awt.Color; 
import java.awt.Cursor; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RadialGradientPaint; 
import java.awt.RenderingHints; 
import java.awt.Toolkit; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import java.awt.geom.Ellipse2D; 
 
import javax.swing.*; 
/** 
 * 五子棋--棋盤類 
 */ 
 
public class ChessBoard extends JPanel implements MouseListener { 
 public static final int MARGIN=30;//邊距 
 public static final int GRID_SPAN=35;//網(wǎng)格間距 
 public static final int ROWS=15;//棋盤行數(shù) 
 public static final int COLS=15;//棋盤列數(shù) 
 
 Point[] chessList=new Point[(ROWS+1)*(COLS+1)];//初始每個(gè)數(shù)組元素為null 
 boolean isBlack=true;//默認(rèn)開(kāi)始是黑棋先 
 boolean gameOver=false;//游戲是否結(jié)束 
 int chessCount;//當(dāng)前棋盤棋子的個(gè)數(shù) 
 int xIndex,yIndex;//當(dāng)前剛下棋子的索引 
 
 Image img; 
 Image shadows; 
 Color colortemp; 
 public ChessBoard(){ 
 
 // setBackground(Color.blue);//設(shè)置背景色為橘黃色 
 img=Toolkit.getDefaultToolkit().getImage("board.jpg"); 
 shadows=Toolkit.getDefaultToolkit().getImage("shadows.jpg"); 
 addMouseListener(this); 
 addMouseMotionListener(new MouseMotionListener(){ 
 public void mouseDragged(MouseEvent e){ 
  
 } 
 
 public void mouseMoved(MouseEvent e){ 
 int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; 
 //將鼠標(biāo)點(diǎn)擊的坐標(biāo)位置轉(zhuǎn)成網(wǎng)格索引 
 int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; 
 //游戲已經(jīng)結(jié)束不能下 
 //落在棋盤外不能下 
 //x,y位置已經(jīng)有棋子存在,不能下 
 if(x1<0||x1>ROWS||y1<0||y1>COLS||gameOver||findChess(x1,y1)) 
  setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 
 //設(shè)置成默認(rèn)狀態(tài) 
 else setCursor(new Cursor(Cursor.HAND_CURSOR)); 
 
 } 
 }); 
 } 
 
 
 
//繪制 
 public void paintComponent(Graphics g){ 
 
 super.paintComponent(g);//畫(huà)棋盤 
 
 int imgWidth= img.getWidth(this); 
 int imgHeight=img.getHeight(this);//獲得圖片的寬度與高度 
 int FWidth=getWidth(); 
 int FHeight=getHeight();//獲得窗口的寬度與高度 
 int x=(FWidth-imgWidth)/2; 
 int y=(FHeight-imgHeight)/2; 
 g.drawImage(img, x, y, null); 
 
 
 for(int i=0;i<=ROWS;i++){//畫(huà)橫線 
 g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN); 
 } 
 for(int i=0;i<=COLS;i++){//畫(huà)豎線 
 g.drawLine(MARGIN+i*GRID_SPAN, MARGIN, MARGIN+i*GRID_SPAN, MARGIN+ROWS*GRID_SPAN); 
 
 } 
 
 //畫(huà)棋子 
 for(int i=0;i<chessCount;i++){ 
 //網(wǎng)格交叉點(diǎn)x,y坐標(biāo) 
 int xPos=chessList[i].getX()*GRID_SPAN+MARGIN; 
 int yPos=chessList[i].getY()*GRID_SPAN+MARGIN; 
 g.setColor(chessList[i].getColor());//設(shè)置顏色 
 // g.fillOval(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, 
  //Point.DIAMETER, Point.DIAMETER); 
 //g.drawImage(shadows, xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, Point.DIAMETER, Point.DIAMETER, null); 
 colortemp=chessList[i].getColor(); 
 if(colortemp==Color.black){ 
 RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 20, new float[]{0f, 1f} 
 , new Color[]{Color.WHITE, Color.BLACK}); 
 ((Graphics2D) g).setPaint(paint); 
 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT); 
 
 } 
 else if(colortemp==Color.white){ 
 RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 70, new float[]{0f, 1f} 
 , new Color[]{Color.WHITE, Color.BLACK}); 
 ((Graphics2D) g).setPaint(paint); 
 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
 ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT); 
 
 } 
 
 Ellipse2D e = new Ellipse2D.Float(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, 34, 35); 
 ((Graphics2D) g).fill(e); 
 //標(biāo)記最后一個(gè)棋子的紅矩形框 
 
 if(i==chessCount-1){//如果是最后一個(gè)棋子 
 g.setColor(Color.red); 
 g.drawRect(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, 
  34, 35); 
 } 
 } 
 } 
 
 public void mousePressed(MouseEvent e){//鼠標(biāo)在組件上按下時(shí)調(diào)用 
 
 //游戲結(jié)束時(shí),不再能下 
 if(gameOver) return; 
 
 String colorName=isBlack?"黑棋":"白棋"; 
 
 //將鼠標(biāo)點(diǎn)擊的坐標(biāo)位置轉(zhuǎn)換成網(wǎng)格索引 
 xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; 
 yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; 
 
 //落在棋盤外不能下 
 if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS) 
 return; 
 
 //如果x,y位置已經(jīng)有棋子存在,不能下 
 if(findChess(xIndex,yIndex))return; 
 
 //可以進(jìn)行時(shí)的處理 
 Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white); 
 chessList[chessCount++]=ch; 
 repaint();//通知系統(tǒng)重新繪制 
 
 
 //如果勝出則給出提示信息,不能繼續(xù)下棋 
 
 if(isWin()){ 
 String msg=String.format("恭喜,%s贏了!", colorName); 
 JOptionPane.showMessageDialog(this, msg); 
 gameOver=true; 
 } 
 isBlack=!isBlack; 
 } 
 //覆蓋mouseListener的方法 
 public void mouseClicked(MouseEvent e){ 
 //鼠標(biāo)按鍵在組件上單擊時(shí)調(diào)用 
 } 
 
 public void mouseEntered(MouseEvent e){ 
 //鼠標(biāo)進(jìn)入到組件上時(shí)調(diào)用 
 } 
 public void mouseExited(MouseEvent e){ 
 //鼠標(biāo)離開(kāi)組件時(shí)調(diào)用 
 } 
 public void mouseReleased(MouseEvent e){ 
 //鼠標(biāo)按鈕在組件上釋放時(shí)調(diào)用 
 } 
 //在棋子數(shù)組中查找是否有索引為x,y的棋子存在 
 private boolean findChess(int x,int y){ 
 for(Point c:chessList){ 
 if(c!=null&&c.getX()==x&&c.getY()==y) 
 return true; 
 } 
 return false; 
 } 
 
 
 private boolean isWin(){ 
 int continueCount=1;//連續(xù)棋子的個(gè)數(shù) 
 
 //橫向向西尋找 
 for(int x=xIndex-1;x>=0;x--){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,yIndex,c)!=null){ 
 continueCount++; 
 }else 
 break; 
 } 
 //橫向向東尋找 
 for(int x=xIndex+1;x<=COLS;x++){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,yIndex,c)!=null){ 
 continueCount++; 
 }else 
 break; 
 } 
 if(continueCount>=5){ 
 return true; 
 }else 
 continueCount=1; 
 
 //繼續(xù)另一種搜索縱向 
 //向上搜索 
 for(int y=yIndex-1;y>=0;y--){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(xIndex,y,c)!=null){ 
 continueCount++; 
 }else 
 break; 
 } 
 //縱向向下尋找 
 for(int y=yIndex+1;y<=ROWS;y++){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(xIndex,y,c)!=null) 
 continueCount++; 
 else 
 break; 
 
 } 
 if(continueCount>=5) 
 return true; 
 else 
 continueCount=1; 
 
 
 //繼續(xù)另一種情況的搜索:斜向 
 //東北尋找 
 for(int x=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x++,y--){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,y,c)!=null){ 
 continueCount++; 
 } 
 else break; 
 } 
 //西南尋找 
 for(int x=xIndex-1,y=yIndex+1;x>=0&&y<=ROWS;x--,y++){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,y,c)!=null){ 
 continueCount++; 
 } 
 else break; 
 } 
 if(continueCount>=5) 
 return true; 
 else continueCount=1; 
 
 
 //繼續(xù)另一種情況的搜索:斜向 
 //西北尋找 
 for(int x=xIndex-1,y=yIndex-1;x>=0&&y>=0;x--,y--){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,y,c)!=null) 
 continueCount++; 
 else break; 
 } 
 //東南尋找 
 for(int x=xIndex+1,y=yIndex+1;x<=COLS&&y<=ROWS;x++,y++){ 
 Color c=isBlack?Color.black:Color.white; 
 if(getChess(x,y,c)!=null) 
 continueCount++; 
 else break; 
 } 
 if(continueCount>=5) 
 return true; 
 else continueCount=1; 
 
 return false; 
 } 
 
 
 private Point getChess(int xIndex,int yIndex,Color color){ 
 for(Point p:chessList){ 
 if(p!=null&&p.getX()==xIndex&&p.getY()==yIndex 
  &&p.getColor()==color) 
 return p; 
 } 
 return null; 
 } 
 
 
 public void restartGame(){ 
 //清除棋子 
 for(int i=0;i<chessList.length;i++){ 
 chessList[i]=null; 
 } 
 //恢復(fù)游戲相關(guān)的變量值 
 isBlack=true; 
 gameOver=false; //游戲是否結(jié)束 
 chessCount =0; //當(dāng)前棋盤棋子個(gè)數(shù) 
 repaint(); 
 } 
 
 //悔棋 
 public void goback(){ 
 if(chessCount==0) 
 return ; 
 chessList[chessCount-1]=null; 
 chessCount--; 
 if(chessCount>0){ 
 xIndex=chessList[chessCount-1].getX(); 
 yIndex=chessList[chessCount-1].getY(); 
 } 
 isBlack=!isBlack; 
 repaint(); 
 } 
 
 //矩形Dimension 
 
 public Dimension getPreferredSize(){ 
 return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2 
  +GRID_SPAN*ROWS); 
 } 
 
 
 
} 

2.棋子類

package cn.edu.ouc.fiveChess; 
 
import java.awt.Color; 
/** 
 * 棋子類 
 */ 
public class Point { 
 private int x;//棋盤中的x索引 
 private int y;//棋盤中的y索引 
 private Color color;//顏色 
 public static final int DIAMETER=30;//直徑 
 
 public Point(int x,int y,Color color){ 
 this.x=x; 
 this.y=y; 
 this.color=color; 
 } 
 
 public int getX(){//拿到棋盤中x的索引 
 return x; 
 } 
 public int getY(){ 
 return y; 
 } 
 public Color getColor(){//獲得棋子的顏色 
 return color; 
 } 
} 

3.五子棋主框架類

package cn.edu.ouc.fiveChess; 
import java.awt.event.*; 
import java.awt.*; 
 
import javax.swing.*; 
/* 
 五子棋主框架類,程序啟動(dòng)類 
 */ 
public class StartChessJFrame extends JFrame { 
 private ChessBoard chessBoard; 
 private JPanel toolbar; 
 private JButton startButton,backButton,exitButton; 
 
 private JMenuBar menuBar; 
 private JMenu sysMenu; 
 private JMenuItem startMenuItem,exitMenuItem,backMenuItem; 
 //重新開(kāi)始,退出,和悔棋菜單項(xiàng) 
 public StartChessJFrame(){ 
 setTitle("單機(jī)版五子棋");//設(shè)置標(biāo)題 
 chessBoard=new ChessBoard(); 
 
 
 Container contentPane=getContentPane(); 
 contentPane.add(chessBoard); 
 chessBoard.setOpaque(true); 
 
 
 //創(chuàng)建和添加菜單 
 menuBar =new JMenuBar();//初始化菜單欄 
 sysMenu=new JMenu("系統(tǒng)");//初始化菜單 
 //初始化菜單項(xiàng) 
 startMenuItem=new JMenuItem("重新開(kāi)始"); 
 exitMenuItem =new JMenuItem("退出"); 
 backMenuItem =new JMenuItem("悔棋"); 
 //將三個(gè)菜單項(xiàng)添加到菜單上 
 sysMenu.add(startMenuItem); 
 sysMenu.add(exitMenuItem); 
 sysMenu.add(backMenuItem); 
 //初始化按鈕事件監(jiān)聽(tīng)器內(nèi)部類 
 MyItemListener lis=new MyItemListener(); 
 //將三個(gè)菜單注冊(cè)到事件監(jiān)聽(tīng)器上 
 this.startMenuItem.addActionListener(lis); 
 backMenuItem.addActionListener(lis); 
 exitMenuItem.addActionListener(lis); 
 menuBar.add(sysMenu);//將系統(tǒng)菜單添加到菜單欄上 
 setJMenuBar(menuBar);//將menuBar設(shè)置為菜單欄 
 
 toolbar=new JPanel();//工具面板實(shí)例化 
 //三個(gè)按鈕初始化 
 startButton=new JButton("重新開(kāi)始"); 
 exitButton=new JButton("退出"); 
 backButton=new JButton("悔棋"); 
 //將工具面板按鈕用FlowLayout布局 
 toolbar.setLayout(new FlowLayout(FlowLayout.LEFT)); 
 //將三個(gè)按鈕添加到工具面板 
 toolbar.add(startButton); 
 toolbar.add(exitButton); 
 toolbar.add(backButton); 
 //將三個(gè)按鈕注冊(cè)監(jiān)聽(tīng)事件 
 startButton.addActionListener(lis); 
 exitButton.addActionListener(lis); 
 backButton.addActionListener(lis); 
 //將工具面板布局到界面”南方“也就是下方 
 add(toolbar,BorderLayout.SOUTH); 
 add(chessBoard);//將面板對(duì)象添加到窗體上 
 //設(shè)置界面關(guān)閉事件 
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 //setSize(800,800); 
 pack();//自適應(yīng)大小 
 
 } 
 
 private class MyItemListener implements ActionListener{ 
 public void actionPerformed(ActionEvent e){ 
 Object obj=e.getSource();//獲得事件源 
 if(obj==StartChessJFrame.this.startMenuItem||obj==startButton){ 
 //重新開(kāi)始 
 //JFiveFrame.this內(nèi)部類引用外部類 
 System.out.println("重新開(kāi)始"); 
 chessBoard.restartGame(); 
 } 
 else if (obj==exitMenuItem||obj==exitButton) 
 System.exit(0); 
 else if (obj==backMenuItem||obj==backButton){ 
 System.out.println("悔棋..."); 
 chessBoard.goback(); 
 } 
 } 
 } 
 
 
 
 public static void main(String[] args){ 
 StartChessJFrame f=new StartChessJFrame();//創(chuàng)建主框架 
 f.setVisible(true);//顯示主框架 
 
 } 
} 

三、總結(jié)

1.菜單的設(shè)計(jì)與實(shí)現(xiàn)?
2.鼠標(biāo)點(diǎn)擊棋盤后,如何繪制棋子?如何為剛下的棋子繪制一個(gè)紅色框?
3.棋譜是如何一個(gè)數(shù)據(jù)結(jié)構(gòu)?

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • maven?setting.xml文件配置禪定之旅

    maven?setting.xml文件配置禪定之旅

    這篇文章主要為大家介紹了maven?setting.xml文件禪定之旅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java17和springboot3.0使用shiro報(bào)ClassNotFoundException的解決

    Java17和springboot3.0使用shiro報(bào)ClassNotFoundException的解決

    本文主要介紹了Java17和springboot3.0使用shiro報(bào)ClassNotFoundException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 使用Java和SNMP4J實(shí)現(xiàn)SNMP操作完整代碼

    使用Java和SNMP4J實(shí)現(xiàn)SNMP操作完整代碼

    這篇文章主要介紹了如何使用Java和SNMP4J庫(kù)進(jìn)行SNMP操作,包括初始化SNMP、創(chuàng)建目標(biāo)、創(chuàng)建PDU、發(fā)送SNMP請(qǐng)求和處理響應(yīng)等內(nèi)容,通過(guò)編寫(xiě)SnmpUtil類,展示了完整的SNMP操作流程,需要的朋友可以參考下
    2024-12-12
  • java?數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)統(tǒng)計(jì)教程

    java?數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)統(tǒng)計(jì)教程

    這篇文章主要介紹了java?數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)統(tǒng)計(jì)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis與Ibatis的區(qū)別

    Mybatis與Ibatis的區(qū)別

    這篇文章主要介紹了Mybatis與Ibatis的區(qū)別,需要的朋友可以參考下
    2016-05-05
  • Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度詳細(xì)教程

    Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度詳細(xì)教程

    寫(xiě)了一個(gè)經(jīng)緯度相關(guān)的工具,分享給有需求的小伙伴們,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 探索Java分布式限流技術(shù)

    探索Java分布式限流技術(shù)

    探索Java分布式限流技術(shù),讓你的系統(tǒng)遠(yuǎn)離流量過(guò)載的煩惱,本指南將帶你了解如何使用Java實(shí)現(xiàn)高效的限流策略,幫助你輕松應(yīng)對(duì)高并發(fā)場(chǎng)景,讓我們一起開(kāi)啟這段精彩的技術(shù)之旅,打造更加穩(wěn)定可靠的系統(tǒng),需要的朋友可以參考下
    2024-03-03
  • 詳解Java中的悲觀鎖與樂(lè)觀鎖

    詳解Java中的悲觀鎖與樂(lè)觀鎖

    樂(lè)觀鎖對(duì)應(yīng)于生活中樂(lè)觀的人總是想著事情往好的方向發(fā)展,悲觀鎖對(duì)應(yīng)于生活中悲觀的人總是想著事情往壞的方向發(fā)展.這兩種人各有優(yōu)缺點(diǎn),不能不以場(chǎng)景而定說(shuō)一種人好于另外一種人,文中詳細(xì)介紹了悲觀鎖與樂(lè)觀鎖,需要的朋友可以參考下
    2021-05-05
  • 詳解AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用

    詳解AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用

    本篇文章主要介紹了AngularJs與SpringMVC簡(jiǎn)單結(jié)合使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)

    這篇文章主要介紹了Java中關(guān)于內(nèi)存泄漏出現(xiàn)的原因匯總及如何避免內(nèi)存泄漏(超詳細(xì)版)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評(píng)論

乌兰察布市| 松原市| 富顺县| 兴城市| 尖扎县| 南召县| 高阳县| 南开区| 陵水| 阿城市| 瑞安市| 建平县| 尉氏县| 永泰县| 丰原市| 东方市| 莱州市| 濉溪县| 衡水市| 聂拉木县| 德令哈市| 宕昌县| 楚雄市| 荣昌县| 黑河市| 平果县| 阿克苏市| 溧水县| 金山区| 保靖县| 三河市| 昌乐县| 弥渡县| 亳州市| 大邑县| 漾濞| 射阳县| 长寿区| 格尔木市| 铁岭县| 密山市|