Java를 사용하여 독립형 주사위 놀이 게임을 구현하는 방법

WBOY
풀어 주다: 2023-04-15 10:19:02
앞으로
1077명이 탐색했습니다.

주요 요구 사항

1. 게임의 각 측면에는 한 가지 색상의 체스 조각이 있습니다.

2. 빈 체스판으로 시작하세요.

3. 플레이어(검은 체스)가 먼저 가고 AI(빨간 체스)가 마지막에 와서 번갈아 가며 한 번만 움직일 수 있습니다.

4. 체스 말은 체스판의 빈 공간에 놓아야 하며, 체스 말을 다른 지점으로 이동할 수 없으며, 체스판에서 꺼내어 다른 곳에 놓을 수도 없습니다. .

5. 흑의 첫 번째 말은 체스판의 어느 교차점에나 놓을 수 있습니다.

6. 양 당사자가 차례대로 움직일 권리가 있지만 어느 쪽이든 움직일 권리를 포기할 수 있습니다. 5개를 먼저 연결하는 사람이 승리합니다.

메인 디자인

1. 독립형 게임이기 때문에 게임 시작 후 바로 게임을 시작할 수 있습니다.

2. 게임 규칙:

  • 게임의 양쪽은 같은 색상의 조각을 가지고 있습니다.

  • 빈 보드로 시작하세요.

  • 검은색이 먼저 시작하고 빨간색이 번갈아가며 매번 한 곡만 연주할 수 있습니다.

  • 체스 말은 체스판의 빈 공간에 놓이게 되며, 체스 말을 놓은 후에는 다른 지점으로 이동할 수 없으며, 체스판에서 꺼내거나 다른 곳에 놓을 수도 없습니다.

  • Black의 첫 번째 말은 체스판의 모든 교차점에 배치할 수 있습니다.

  • 양 당사자가 교대로 움직일 권리가 있지만 어느 쪽이든 움직일 권리를 포기할 수 있습니다. 먼저 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
        
로그인 후 복사

선도 목록

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; } }
로그인 후 복사

체스보드

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 } }
로그인 후 복사

위 내용은 Java를 사용하여 독립형 주사위 놀이 게임을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!