Heim> Java> javaLernprogramm> Hauptteil

怎么用Java实现单机版五子棋游戏

WBOY
Freigeben: 2023-04-15 10:19:02
nach vorne
1078 Leute haben es durchsucht

主要需求

1、对局双方各执一色棋子。

2、空棋盘开局。

3、玩家(黑棋)先、AI(红棋)后,交替下子,每次只能下一子。

4、棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。

5、黑方的第一枚棋子可下在棋盘任意交叉点上。

6、轮流下子是双方的权利,但允许任何一方放弃下子权,先形成5子连线者获胜。

主要设计

1、由于是单机的游戏,启动游戏后,可直接开始游戏。

2、游戏规则:

  • 对局双方各执一色棋子。

  • 空棋盘开局。

  • 黑先、红后,交替下子,每次只能下一子。

  • 棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。

  • 黑方的第一枚棋子可下在棋盘任意交叉点上。

  • 轮流下子是双方的权利,但允许任何一方放弃下子权,先形成5子连线者获胜。

3、设计排行榜功能

统计局数,步数和结果

4、更换棋盘

可以切换不同的棋盘,下棋更加赏心悦目。

5、更换棋子

可以芀不同的棋子颜色。

代码实现

主界面:

package wuziqi; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; public class Wumain extends JFrame{ Pan p = null; JMenuBar menuber = new JMenuBar(); JMenu jm1 = new JMenu("选项"); JMenu jm2 = new JMenu("设置"); JMenu jm3 = new JMenu("帮助"); JMenuItem jm1_1 = new JMenuItem("重新开始"); JMenuItem jm1_2 = new JMenuItem(" 排行榜"); JMenuItem jm1_3 = new JMenuItem("退出游戏"); JMenuItem jm2_1 = new JMenuItem("更换棋盘"); JMenuItem jm2_2 = new JMenuItem("更换棋子"); JMenuItem jm3_1 = new JMenuItem("关于我们"); public Wumain() { p =new Pan(); this.setSize(585,600); this.setLocation(200,100); this.add(p); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jm1.add(jm1_1); jm1.add(jm1_2); jm1.add(jm1_3); jm2.add(jm2_1); jm2.add(jm2_2); jm3.add(jm3_1); menuber.add(jm1); menuber.add(jm2); menuber.add(jm3); this.setJMenuBar(menuber); this.addMouseListener(p); jm1_3.addActionListener(new ActionListener() { // 匿名虚构类 @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); jm1_1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for(int i=0;i
        
Nach dem Login kopieren

排行榜

package wuziqi; public class PaiHangBang { private int jushu; private int bushu; private String jieguo; public int getJushu() { return jushu; } public void setJushu(int jushu) { if(jushu<1){ this.jushu = 1; } this.jushu = jushu; } public int getBushu() { return bushu; } public void setBushu(int bushu) { this.bushu = bushu; } public String getJieguo() { return jieguo; } public void setJieguo(String jieguo) { this.jieguo = jieguo; } }
Nach dem Login kopieren

棋盘

package wuziqi; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Pan extends JPanel implements MouseListener{ int i=0,j=0; int row = 15; // 数组下标 int col = 15; // 数组上标 String qipan_name = "qipan1.jpg"; String qizi1_name = "c1.png"; String qizi2_name = "c2.png"; int num[][] = new int[row][col]; // 0:标示该位置为空,1:标示红棋子,2:标示黑棋子 boolean canSetqizi = true; // 定义boolean值,用来判断该位置是否有子 int qizi_num = 0; // 定义记录落子数 List paihanglist = new ArrayList(); // 定义集合,用来存储排行榜 public void paint(Graphics g){ super.paint(g); Image img= new ImageIcon("img/"+qipan_name).getImage(); // 调入棋盘图片 g.drawImage(img, 0, 0, 567, 567, this); // 绘制棋盘 Image c1= new ImageIcon("img/"+qizi1_name).getImage(); Image c2= new ImageIcon("img/"+qizi2_name).getImage(); for(int i = 0;i=0;i--){ if(num[i][y] == num[x][y]) { count++; } else { if(num[i][y] == 0){ wz1 = new int[]{i,y}; // 获取左边的危险位置坐标 } break; } } // 左 for(int i =x+1;i=3) { if(wz1 != null){ return wz1; // 判断返回左边危险位置 }else if(wz2 != null){ return wz2; // 判断返回右边危险位置 }else{ return null; } } // 左右 count = 1; wz1 = null; wz2 = null; // 初始化所有参数 for(int j =y-1;j>=0;j--){ if(num[x][j] == num[x][y]) { count++; } else { if(num[x][j] == 0){ wz1 = new int[]{x,j}; } break; } } // 上 for(int j =y+1;j=3) { if(wz1 != null){ return wz1; }else if(wz2 != null){ return wz2; }else{ return null; } } // 上下 count = 1; wz1 = null; wz2 = null; for(int i =x-1,j =y-1;i>=0&&j>=0;i--,j--){ if(num[i][j] == num[x][y]) { count++; } else { if(num[i][j] == 0){ wz1 = new int[]{i,j}; } break; } } // 左上 for(int i =x+1,j =y+1;i=3) { if(wz1 != null){ return wz1; }else if(wz2 != null){ return wz2; }else{ return null; } } // 左上右下 count = 1; wz1 = null; wz2 = null; for(int i =x-1,j =y+1;i>=0&&j=0;i++,j--){ if(num[i][j] == num[x][y]) { count++; }else{ if(num[i][j] == 0){ wz2 = new int[]{i,j}; } break; } } // 右上 if(count>=3) { if(wz1 != null){ return wz1; }else if(wz2 != null){ return wz2; }else{ return null; } } // 左下右上 return null; } public boolean iswin(int x,int y){ int count = 1; for(int i =x-1;i>=0;i--){ if(num[i][y] == num[x][y]) { count++; } else { break; } } // 左 for(int i =x+1;i=5) { return true; } // 左右 count = 1; for(int j =y-1;j>=0;j--){ if(num[x][j] == num[x][y]) { count++; } else { break; } } // 上 for(int j =y+1;j=5) { return true; } // 上下 count = 1; for(int i =x-1,j =y-1;i>=0&&j>=0;i--,j--){ if(num[i][j] == num[x][y]) { count++; } else { break; } } // 左上 for(int i =x+1,j =y+1;i=5) { return true; } // 左上右下 count = 1; for(int i =x-1,j =y+1;i>=0&&j=0;i++,j--){ if(num[i][j] == num[x][y]) { count++; }else{ break; } } // 右上 if(count>=5) { return true; } // 左下右上 return false; } // 判断输赢 @Override public void mouseClicked(MouseEvent e) { if(canSetqizi){ Graphics g = this.getGraphics(); int checkusersuccess = 0; // 标示是否落子成功 int x = e.getX(); int y = e.getY(); // 获取鼠标点击的位置 Image c1= new ImageIcon("img/"+qizi1_name).getImage(); int i = (x-25)/35; int j = (y-75)/35; if(num[i][j] != 0){ JOptionPane.showMessageDialog(null, "该位置有旗子,请重新落子"); return; // 判断有子,终止本次事件,进行下次事件触发 }else{ g.drawImage(c1, i*35+20, j*35+20, 35, 35, this); // 画出玩家落子 num[i][j] = 1; // 给数组付一个只值,表示该位置有旗子 checkusersuccess = 1; // 标示量标示 qizi_num++; // 记录玩家落子步数 } boolean b=iswin(i,j); if(b){ JOptionPane.showMessageDialog(null, "你赢了!"); canSetqizi = false; PaiHangBang ph = new PaiHangBang(); ph.setJushu(paihanglist.size()+1); ph.setBushu(qizi_num); ph.setJieguo("win"); paihanglist.add(ph); return; } // 调用boolean判断方法 try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } // 时间间隔:玩家落子后的等待 Random r = new Random(); Image c2 = new ImageIcon("img/"+qizi2_name).getImage(); // 调入黑棋子图片 do{ int[] wz =getLoc(i, j); if(wz == null){ i = r.nextInt(15); j = r.nextInt(15); }else{ i=wz[0]; j=wz[1]; } // 设置随机的坐标 }while(num[i][j] != 0); g.drawImage(c2, i*35+20, j*35+20, 35, 35, this); num[i][j] = 2; boolean d=iswin(i,j); if(d){ JOptionPane.showMessageDialog(null, "你输了!"); canSetqizi = false; PaiHangBang ph = new PaiHangBang(); ph.setJushu(paihanglist.size()+1); ph.setBushu(qizi_num); ph.setJieguo("fail"); paihanglist.add(ph); return; } // 随机电脑落子位置; } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt von怎么用Java实现单机版五子棋游戏. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!